◀ 一覧に戻る
Kreedz Climbing(KZ)とは 【CSGO~CS2時代のKZについて】

こんにちは、Node / 小明です。

みなさん、KZ、やってますか?もちろんやってませんよね。

だってサーバーで日本人をほぼ見かけないので。

という冗談はさておき。

以前、珍しくKZサーバーに来てくれた日本人が「日本語で書かれているKZについての記事・解説がない」と言われたことがあり、

便利な時代にもなったことなので重い腰を上げてCS:GO~CS2時代までの自分が知っている限りのKZの情報をここにまとめようと思います。

(CS1.6~CSSでかなりKZが国内でも盛り上がっている時代もあったのですがその時代については詳しくないため割愛)

そもそもKZ(通称:Kreedz Climbing)とは

Kreedz Climbing

Counter-Strike 1.1時代にPatrick "Kreedz" Wrightというユーザーがkz_hauntedhouseというマップを作ったのが始まり。

もともとは対戦目的でない友人たちと登って遊ぶということに焦点を当てたマップとして設計されたそう。

CS1.6でアーカイブされている現存のマップ

その後Kreedzによりこの方針のもとの複数のマップが作られたのち最終的にこのclimbing部分へとよりフォーカスをしタイマー(タイム測定機能)を内蔵した「kz_giantbean」というマップが公開されました。

kz_giantbeanは今もなおバージョンアップして現存しています(CS2にも移植されてる)

これがKZTimerの走りになるかと。

KZにおける主要ムーブメントについて

さて、ここからが本題。

KZのマップではジャンプだけでなく、Strafe(ストレイフ)Bunnyhop(バニーホップ / Bhop)Surf(サーフ)などを駆使してゴールを目指します。

なので、それぞれに特化したモードと違い総合的なキャラコンを求められます。
逆にいえばここがムズくて敬遠される理由なのかも。

Strafe(ストレイフ)

多分KZで最も重要な要素の技術。

空中にいる間(Airstrafe)に、AキーまたはDキーを押し、押したキーと同じ方向へマウスを動かしていくことで通常の移動以上のスピードを得ることができる。

慣れるまでには時間を要しますが慣れるとこれで移動できないのが不便に感じるときがあります。

じゃあなぜ加速するのか

ざっくり言えばゲームエンジンがプレイヤーの速度を計算する際の「ベクトル(向きと大きさ)の足し合わせ」の仕様。

1. エンジンが計算する3つの数値

空中でのストレイフ中、ゲームエンジンは毎フレーム(100fpsなら0.01秒ごとに)以下の3つの数値を計算し、加速ベクトルを決定しています。

  1. currentspeed(現在のスピードの投影成分): 現在の進行方向の速度ベクトルと、プレイヤーが入力した「向かいたい方向(wishdir)」との内積(DotProduct)です。物理的には、「現在のスピードのうち、向かいたい方向に対してどれだけのスピードが既に出ているか」を表します。
  2. addspeed(加速の不足分): エンジンが定めた空中での「向かいたい方向の制限速度(30 units/s)」から、上記の currentspeed を引いた値です。これがプラスであれば、エンジンは「まだ制限速度に達していない」と判断して加速を許可します。
  3. accelspeed(1フレームの最大加速力): エンジンが1フレーム(0.01秒)の間に与えることができる加速力の上限です。空中では通常 25 units/s に設定されています。

エンジンは、addspeed と accelspeed のうち、小さい方の値を実際の加速力として採用し、それを「向かいたい方向(wishdir)」のベクトルとして現在の速度に足し合わせます。

2. 具体的な計算例:ジャンプ直後に加速する仕組み

前進(Wキー)してジャンプし、初速が 250 units/s だとします。空中でWキーを離し、Aキー(左)だけを押して、マウスを左に向けた場合(進行方向に対してちょうど90度の角度を作った場合)を計算してみます。

  • 角度(u): 進行方向と向かいたい方向の角度は 90度 です。
  • currentspeed の計算: 250 × cos(90度) = 0。向かいたい方向(真左)に対する現在のスピード成分はゼロです。
  • addspeed の計算: 制限速度30 - currentspeed(0) = 30
  • 実際の加速量の決定: addspeed(30) と accelspeed(25) を比べると25の方が小さいため、実際の加速量は 25 units/s になります。

これにより、現在の進行方向(前)への速度ベクトル「250」に対して、向かいたい方向(左)への加速ベクトル「25」が直角に足し合わされます

この2つのベクトルを足し合わせた新しい全体のスピード(斜め方向へのスピード)は、三平方の定理(ピタゴラスの定理)によって以下のように計算されます。

√(250² + 25²) = √(62500 + 625) = √63125 ≒ 251.25 units/s

元々の250 units/sから、全体のスピードが 1.25 units/s 増加しました。これが、ベクトルの足し合わせによって限界を突破し、加速する数学的な理由です。

3. なぜ「角度」が重要になるのか?

スピードが上がれば上がるほど、加速ベクトルをもらうための「角度」の調整がシビアになっていきます。

例えば、ストレイフを続けて現在のスピードが 275 units/s まで上がったとします。 この時、角度が浅すぎると currentspeed (向かいたい方向へのスピード成分)が大きくなってしまい、加速がもらえません。

  • 角度が 83.74度 の場合currentspeed = 275 × cos(83.74度) ≒ 30addspeed = 30 - 30 = 0。加速ベクトルはもらえず、スピードは275のまま維持されます。これがいわゆる加速も減速もしない「デッドゾーン」です。
  • 最大の加速が得られる角度(約 88.96度)の場合currentspeed = 275 × cos(88.96度) ≒ 5addspeed = 30 - 5 = 25。 ここで addspeed がエンジンの限界値 accelspeed (25) にちょうど追いつくため、最大の加速ベクトル(25 units/s)がもらえるようになります。
  • 角度が深すぎる(92.61度以上)場合: 進行方向から大きく逸れすぎているため、足し合わされたベクトルが元の前進ベクトルを相殺してしまい、スピードが落ちてしまいます(減速)。

https://kz-rush.ru/en/page/strafe-physics より抜粋

なるほど、完全に理解した。

これを見て理解できる人は本当に少数だと思うので基本的には

「右押したらマウスも滑らかに右に、左押したらマウスも滑らかに左に」

だけ覚えてもらえればいいと思います。

Bunnyhop(バニーホップ / Bhop)

みんな大好き、バニホ。

ジャンプ後、着地した瞬間にタイミングよく再びジャンプを入力することで速度を維持もしくは向上させたまま連続で跳ねることができる技術。

それこそ前述したストレイフの加速と合わせることによって地上をドカドカ走るよりも素早くかつ遠くまで移動できるようになります。みんな大嫌いなネオンの先祖です。

ちなみにタイミングよくBhopができたとき(動画上緑色の小さい数値が出たとき)は「パーフェクトバニーホップ(Perfect Bhop)」なんて呼ばれたりしています。

↑見本動画で登場している細かいテクニックについては後程説明します。

Surf(サーフ)

もしかするとFPSをやっている人なら意外と目にしたり聞いたりしたことがあるかもしれないSurf。

斜めに傾いた壁(ランプ)に張り付くように滑走し、その勢いを利用して移動したり高く飛び出したりすることができる技術。

Surfという専用のモードもあるがKZに用意されているSurfは実は感触が異なります。

KZにおけるサーフの特徴

  • とにかくスピードが出る、失速しにくい
    • CSGOやCSSのサーフサーバーではランプバグが比較的起きにくいとされている85tickや64tickで運用されていることが多く、KZサーバーでは128tickが主流ということもあり、
      ことサーフにおいてはこのティックレートの違いによりスピード感が変わってくる。
  • 短いギミックとして登場することが多い(多かった)
    • 最近では後述するモードにおいて最高速度の上限引き上げなどがあったこともあり昔に比べてサーフを主軸にしたマップやサーフをふんだんに使ったマップも増えてきた。
    • ただし、KZのサーフは癖が強いため慣れるのはなかなか難しい(自分も苦手)

PreStrafe(プリストレイフ)

前述した3つの大きいカテゴリの一つではなくストレイフの中の一つの技術ではあるのですが、

次のセクションで説明するそれぞれのモードの説明にてかなり重要な要素となることと、
KZにおいて前述の3つに匹敵する重要要素であるため抜粋して先にPreStrafe(プリストレイフ)というテクニックをご紹介。

Prestrafeとは

PreStrafe(プリストレイフ)のルーツは『Quake』や『Defrag』まで遡ります。

初代CSのベースはHalf-Life、つまりGoldSrcエンジンであり、Strafeと同じく物理演算の仕様の抜けと言っていい部類。

通常のゲームプレイではナイフを持った状態での地上の最高速度は250 units/sに制限されています。


当時のエンジン上では入力から合成・正規化された『向かいたい方向』の速度だけを測るという仕様があり、
その場合入力方向の正規化による不自然な動きを防ぐため、現在の速度を向かいたい方向へ『内積』で投影し、不足分の速度を足し合わせるという滑らかにするような移動処理を採用していました 。
そしてその計算式の性質上、斜め入力時にシステムが実際の速度を上限速度よりも低いと誤認してしまい、その計算上の速度が上限(250 units/s)、つまり275~278 units/sに達するまで不要な加速を与え続けてしまうという仕様になっていました。

この部分に関しては前述したストレイフの引用部分の内容と一緒であり、これとほぼ一緒なものが地上でも働いてしまう、というのがPrestrafeとなります。

ちなみにこの仕様はCSGOの公式環境からは削除・対策されており、この気持ちいい操作感やスピード感を維持するためにKZTimerプラグイン関連のみが採用しつづけています(ただし中身の実装方法はちょっと違う)。

PreStrafeのやり方

これはとっても簡単

斜め入力しながらマウスを斜めに動かす。(もしくは行きたい方向を入力しながら斜めにマウスを動かす)

以上!

実際、ふざけてるでもなく本当にこれだけなのであとは実際にプレイして慣れてもらうしかありません。

あとはタイミングよくジャンプを入力してください。「慣れ」です。

近代KZのそれぞれのモードについて(KZTimer / SimpleKZ / Vanilla / ClassicKZ)

CSGO~CS2における近代KZにはいくつかのモードが存在しています。

それぞれのモードではKZTimerの思想をもとに、より競技的でパチンコ要素(RNG)を排除したいという思想から生まれたSimpleKZ、カジュアルマッチやMMのようなデフォルトの操作感で楽しむVanilla
Subtick導入により再現が難しかったCSGO時代に近しい動きとSimpleKZで不満に上がっていた要素をついでに改善した精神的後継のClassicKZ(CS2KZ)の4種類があります。

ここからはそれぞれのモードについてできる限り解説します。

KZTimer(通称:KZT)

CSGOにおいて一番最初にできたKZのタイマープラグイン。

CSGOのKZにおいてデフォクトスタンダードであり、これ以降のすべてのモードについてはKZTimerを基準により改善を重ねているようなモードです。

KZTimerの仕様・他と違う点

KZTimerでは、バニーホップの速度が出やすい反面、入力の精度とどうしてもRNGが強く濃く出やすいモードです。

  • スタミナペナルティの完全無効化
    通常のゲームに存在するスタミナペナルティがKZTimerと後述するSimpleKZともに(sv_staminajumpcostsv_staminalandcost)が完全に0に設定されています。
    このスタミナペナルティが無効にされることにより移動速度の強制的な低下次のジャンプの最高到達地点の高さの低下を防ぐことができます。
  • 摩擦sv_frictionが低くより滑りやすい
    SimpleKZやVanillaよりも摩擦係数を低く設定されておりかなりよく滑る。
    特に小さいオブジェクトなどで一度止まろうとするときは顕著に差を感じる。
    ただし、摩擦が低い代わりに空中で稼いだスピードが着地時に奪われにくいというメリットもあるためよりスピード感があり流れるようなジャンプをしやすくなります。
  • 着地時の減速計算式がない
    後述するSimpleKZでは着地時の減速計算式が存在しているのですがKZTimerでは一律パーフェクトBhopは380 units/s上限となっています。
    これと摩擦係数が低いことによりスピーディなKZプレイができます。
    ただし、こいつがRNGの元凶です。
    • パーフェクトバニーホップの猶予が1tick分しかない
      バカ、アホ、RNGの元凶だしそう言われる所以。よっぽどラピトリキーボードでビタビタに自信がある人はぜひKZTimerへ
      後述するSimpleKZでは猶予が広くとられているので気持ちよくプレイできる。
  • タイマースタート・エンドタイマーの範囲がでかい
    一部ではタイマーテック(Timertech)なんて言われていますが72ユニット分離れた位置から押下できたりするためよりタイムを削りたいプレイヤーにとっては必須の技術になっちゃってます。
    SimpleKZではこれは競技的ではないという理由で32ユニットと狭められています。
    • プリストレイフ速度が251 units/sを超えているとスタートタイマーを押せない
      これもタイムを競うモードとしてはあまり好まれていない仕様。稀に押せてないときがあるのは大体こいつのせいです。

最後に2017~2018年当時GOKZサーバーを建てていた時にできた多分一番うまかった海外のフレンドが出した記録は自分の中でのCSGO期のKZの歴史の中でもいまだに記憶に残っているのでKZTimerの見本として紹介します。

SimpleKZ(通称:SKZ)

DanZayというプレイヤーがKZTimerの抱えていた極端なRNG要素や特定の要素を排除し、

それに代わるより安定した競技的であるモードを目指して構想・作成されたモード。

のちにKZTimerモードとVanillaモードを内包してマルチモード対応でGOKZプラグインという形でリリースされました。

SimpleKZの仕様・他と違う点

SimpleKZでは、前述したとおりKZTimerにおいて極端なRNG要素やプリストレイフが簡単すぎること、パーフェクトバニーホップ時の加速が早すぎることが不満とされいたためこの要素を排除して競技性を高めたモードである

  • スタミナペナルティの完全無効化
    これはKZTimerと同じく完全に0に設定されています。
  • RNGを排除した安定したバニーホップ
    KZTであげたように1tickしかないとされていた入力猶予に対しSimpleKZでは2.5tickに緩和されておりこれにより安定したバニーホップを成功させることができるため流れるようなプレイが可能になる。
  • 着地時に強制減速が発生する
    KZTimerでは最大380 units/sまで加速できたが、SimpleKZにおいては着地時に強制的ではあるが突然の加速が防がれる計算式での制限が設けられている
    着地時の速度計算式(250以上の場合): (着地速度 × 0.2) + 200
    この計算式により平坦な地面でのバニーホップは最大でも276 units/sと地上と同じ付近のスピードに収まるためより理論値を目指してプレイを楽しめる。
    ただし実数値でないことから例えばスピードブースト系のギミックから着地した場合やサーフから加速してのギミックなどマップ製作も柔軟に対応できるようになりそれを活用して幅広いマップが生まれました。
    それこそSKZの仕様に特化した「skz_」のプレフィックスのついたマップもいくつか誕生しました。
  • プリストレイフの独自仕様
    KZTimerではプリストレイフの際にマウスを振る範囲が異常なほど緩く設定されており数値上0.001以上視点移動していれば276 units/sに簡単に到達できるようになっていました。
    この仕様が排除されしっかりとした視点移動でのプリストレイフが求められます。
    仕様としては「毎秒90度の速度でしっかりとマウスを振らなければボーナススピードを貰えない・失う形」となっています。
    ただしその分便利にもなっており、AW、WD押しの必要がなくなりW、A、S、Dどの単一キーからでもプリストレイフを行うことが可能になりました。
    ちなみにCS1.6のプリストレイフは120度必要らしいので楽だろ?と、それに感覚を近づけたかったとかなんとか。
  • SimpleKZモード全体の最高制限速度が高い
    KZTimerでは最高制限速度が2000 units/sにされていたがSimpleKZでは3500 units/sにされており最高制限速度がかなり高めに設定されている。
    これに着地時の強制減速の計算式の影響もあり幅広いマップ製作が可能となりました。
    それこそskz_satiなんかとてもいい例でskzの仕様をふんだんに使ったマップで出た当初ものすごく革新的でした。
  • タイマー挙動がクライアントごとに設定されている
    実はKZTimerではタイマーの押した位置についてサーバー全体共有にされており、前述したTimerTechと呼ばれる設定も次の人間がタイマーを押した場合上書きされてしまうという変な仕様がありました。
    これをGOKZプラグインではクライアント(プレイヤー)ごとに設定されるため上書きされなくてもよくなった。という事情があります。これについては知ってる人は結構少ないかもしれません。
    モードの仕様ではないのですがプラグインの違いということでSKZ枠内で紹介しました。

SimpleKZといえばどのマップかなと考えたときGOKZプラグインが出てきた当初とほぼ同時ぐらいにリリースされたskz_satiについてはかなり記憶に残っています。

このマップではSimpleKZの仕様をふんだんに活用しており、実際難しいもののプレイしててかなり面白くて新鮮だった記憶が強くあるのでSimpleKZの見本として紹介します。

Vanilla(通称:VNL)

バニラ・Vanilla、IT業界やゲーム環境を構築するような人は耳にしたことがあると思いますがまんまそれと同じ意味合いです。

つまりほんとにデフォルト設定、今までつらつらと様々なモードの違いについて説明しましたがこいつについては本当に皆さんがプレイしているMMやプレミア、Faceit、5e、とまったく一緒のプレイ設定になっています。

プリストレイフなんてものはありません、バニホも馬鹿みたいに厳しくスタミナも通常通りあります。全く加速もしないしすぐ乳酸が溜まるお年寄りになります。

バニラモードについてはもともとほぼお楽しみ要素的なところが強くプレイしている層もそこまで多くありませんでした。

ただ、ここ数年急激にバニラモードのプレイヤーが増えつい最近だとropzがmajor期間中の練習にバニラでkzをやりまくっているという話もありました。

バニラKZでは空中のストレイフ制限も強くかなりストレスが溜まるし個人的にはやれって言われてもやりたくないモードではあるのですがKZTimer基準で作られているモードを踏破していくのが気持ちいいのかも?

Vanillaで印象的なのはやはりKZTimer基準で作られているバニーホップ満載のマップをバニラでやるというイカれた動画などがじゃんじゃん出てくるので時間があるときにぜひプレイを体験してみてください。結構地獄です。

ClassicKZ(通称:CKZ or CS2KZ)

ClassicKZはCS2用に作られたCS2KZプラグインの新しいモードです。ちなみにまだテスト段階ということらしい。

公式だとSimpleKZの精神的後継者をうたっており、SimpleKZの思想はそのままに煩わしく感じていた部分に軽くテコ入れをしてCS2向けに最適化を行ったモード・プラグインと考えていいかもしれません。

まず、CS2ではSubtickが採用されておりこのSubtickというのは入力の時刻を正確に感知する仕組みです。


tick N でジャンプが押された

tick N の 0.72(入力時刻)地点でジャンプが押された

という形で感知されています。

ただ、subtickはサーバー全体の更新・送信頻度を上げる仕組みではなく、それを補うために

CS2KZ自体で64tick固定のCS2 movement上へ、tick Nに入力された時刻を0/0.5tickと半tick単位で量子化をしKZに必要なmovementやtrigger判定を疑似的に128tick相当へと寄せています。

また、設定もCS2デフォルト設定からsv_legacy_jump truesv_jump_precision_enable falseを設定することによりCS2標準のmovementからCSGO KZの操作感に極力近づけています。

また、PreStrafeについても計算方法が独自に設定されており、直近の0.02秒分の入力を監視しその加重平均角度を算出してpreをとっています。

そのため簡単にまとめると、

直近0.02秒の平均角度差を見る

2.0を超えるとpreが増える

15.5以上なら最大効率で増える

preRatioは最大0.50

速度加算は 26 × √(preRatio ÷ 0.50)

最大で250 + 26 = 276u/s

なので、やっているとわかりますが本当に若干ですがラグというか違和感を感じることがあります。

ただ、動作の安定化を担保するためにhalf tickで量子化されてるんで仕方ないですね。

ClassicKZの仕様・他と違う点

  • 前述したとおりSubtickに向けて対策している
    少しでもCSGO 128tickのKZに近づけるために工夫を凝らして対策している。
  • 着地後の次のジャンプの速度の計算値が違う、SimpleKZより早く感じる。
    CS2のClassicKZでは
    着地速度または離陸速度の大きい方を基準にし、

    対数関数によって速度の伸びを抑える。さらに接地時間が長いほど補正が弱くなり、

    最終的には 250 + prestrafe加算 を下限として速度を整える。
    となっているため結果的に280付近が出やすくなっておりそれ+SimpleKZのような判定の緩さのため相対的にスピード感があります。

  • 到達速度が高速であるほど276 units/sを基準に対数式で速度を強めに抑えられる
    通常のBhopではSimpleKZよりも早くなりやすいが例えばSKZのギミックであるサーフからBhopやスピードブーストからのBhopなどは速度が強めに抑えられやすい。
    これについてはBhopの速度補正にも同じことが言えます。
  • 絶賛開発中である、多分128tickが来たら化ける
    今でも絶賛コミュニティで開発中であり今でもCS2のテクスチャなどを使ったきれいなマップや雰囲気のあるマップが続々と出ています。
    例えば自分が立てているGOKZサーバーなどについてはグローバルAPIのメンテナーがいなくなったため新規発行をしておらず日本だと自分の知っている限り3人しかグローバル対応サーバーを建てられません。
    ただ、CS2のKZなら問合わせさえすればすぐにグローバルサーバーを建てられるのですぐにJPKZコミュニティの仲間!(日本にはそんなコミュニティなくなったし村どころかニュータウン状態です)

基本的に、新しく始める人、KZを触ってみたい人はこのCS2のCKZを触ればよいかなと思います。

それでもっと競技的、レスポンスのいいKZをプレイしたい人はぜひCSGOのKZサーバーへ、あなたも原理主義の仲間入り。

なお、本当のKZ原理主義の方々はCS1.6の村で今もなお走り続けています。

今回は良さそうな見本動画がなかったので自分が適当に走った遅いラン動画を貼っておきます。

まとめ

いかがでしたか?

とかいう糞ブログはさておき、これが近代KZの全貌になります。

同記事内にプレイ上どうしても必要になってくるもっと細かいKZのテクニック集についてもまとめようと思ったのですがあまりにも長くなってしまったため一旦そのKZのテクニック集については次の記事に区切って紹介します。

ちなみに自分が管理している日本リージョンサーバーがあるのでもしこれを見てKZに興味が出た人は接続して、ぴょんぴょん飛んでみてください。

それでは、メモ終わり。

CS2 :【JP】Node CKZ Server

connect 133.18.166.93:27015 もしくは サーバーブラウザーからサーバー名を検索

CSGO :【JP】Node GOKZ Server

connect 210.131.218.199:27015 もしくは ゲーム内サーバーブラウザーからサーバー名を検索

参考資料

  • Strafe Physics
    • ストレイフがなぜ発生するのか、どういう形で計算し、どういう仕組みで加速しているのかを1から解説してます。
      数値上などは1.6のデータだったりしますが根本的な部分についてはほぼ一緒のため興味ある方はぜひ
  • Modes · KZGlobalTeam/gokz Wiki
    • KZTimer / SimpleKZ / Vanillaのモード比較表
  • GitHub - KZGlobalTeam/cs2kz-metamod: Metamod Plugin for CS2KZ
    • CSGOのKZの体感をどう再現しているか気になったのでリポジトリから知らんC++を読んだ、Codexくんお前がいなかったらここまで深く読めんかった。
  • Gamemode Guide: Climb | Momentum Mod Documentation
    • SurfやBhop、最近だとKZまで実装されたムーブメントゲームに特化したMomentum Modでの解説
      内容はかなり踏み込んで書かれておりもし気になる人はぜひMomentum Modのテストに参加してみては?
  • Quake/QW/client/pmove.c at master · id-Software/Quake · GitHub
    • prestrafeの参考にするときに中身を読みました。これもCodexくんがいなかったらここまで踏み込んで書けなかった。
  • The History of Kreedz
    • 一番最初の項でも触れたKZの起源から現在までをまとめたかなり良くまとまっている動画
      ゲーム史などが好きな人は見てみるといいのかも
  • What is GOKZ/SKZ/KZT?
    • CSGOのKZトッププレイヤーNykaNによるGOKZ / SKZ /KZTとはなんなのかの説明動画。
      動画でまとめてみたい人はこちらをどうぞ。
  • [CSGO KZ] Prestrafe & Prekeep Tutorial
    同じくNykaNによるPrestrafeについての解説
    Prekeepなどのテクニックについては別日に時間があるとき随時作成していきます。
  • [CSGO KZ] What is timer tech?
    また、NykaNによるtimer techの説明。
    GOKZとKZTimerの説明のところでどうしても説明が必要だった部分があるためこちらもテクニック類ではあるのですが資料として追加。