2021年8月13日金曜日

投げ物開発について part1

日に日に薄れゆく記憶に身を任せてもよかったのですが、折角たくさん練習したことでもあるので、新しい投げ物を作る際に気をつけていたポイントを書き残しておこうと思います。
(2020年5月から仕様変わっていたら申し訳ないです)
ちなみに僕はだいたいの投げ物は30分以内に作ることのできるnade星人でした。aim星人に生まれたかったけど仕方ないね。

僕が投げ物開発で重視しているのは、「成功率」と「効果」の2点です。

どれだけ有益な投げ物であっても10回に1回しか成功しない曲芸みたいな投げ物は実戦的ではありませんし、逆に100%成功する投げ物であってもまったく相手に効果がないのであれば、これも意味がありません。

以下に成功率も効果も高い投げ物について、考えていきたいと思います。


1章 成功率


プロプレイヤーでも1試合(25Rとする)に平均1.5回は投げ物ミスがあるので(僕調べ)、毎ラウンド2個投げ物を投げると仮定すると成功率は97%程度となります。一般人の場合は成功率95%以上が理想だと思います。経験上練習で成功率が95%を切る投げ物は、本番では90%を切るようになりあまり信用できないので再考しましょう。

成功率を上げるためには、再現可能な投げ物を投げる必要があります。
CS:GOにおいては、同じ立ち位置、同じ照準位置、同じ投げ方をすれば、投げ物が再現可能になります。(molotovの広がりは再現しません。一応molotovは移動キーの方向に燃え広がりますが同じ広がりにはなりません。)
そのためこの章では、投げ物の成功率を上げるために立ち位置、照準位置、投げ方の3点について考えていきます。

#1-1 立ち位置について

立ち位置のことを始点と呼ぶことにします。

下図1の様に、2つの壁で挟まれた角に張り付く場合が、最も易しく、再現性も高い始点の作り方だと思います。この場合、WASD移動によりプレイヤーモデルを角に押し込むだけで位置に付くことができます。
(図1:mirage T Baseから投げるヤシSmokeの始点)

ここで注意したいのは下図2の様に、壁に張り付いてもそこから壁を登っていく場合があり、その場合は角張り付きによる始点は再現性の低いものになります。
ただし後述する通り完璧な再現性を求める必要のない投げ物も多く、ある程度の誤差が許される場合にはこのような始点でも十分に役割を果たすことができます。
(図2:overpass Bの壁張り付きの例)

より精度の高い始点を求められているときは照準合わせを使います。下図3はわかりにくいですがinfernoのBananaから投げる1way smokeの始点です。照準合わせの場合、クロスヘアはドット(点)に替えて行うと確実です。
(クロスヘアの例:cl_crosshairsize 0; cl_crosshairdot 1; cl_crosshairthickness 2; cl_crosshair_drawoutline 0)
(図3:一番下を見ている状態で照準を合わせることで正確な始点となる)

ドットにしないまでも図4の様に下を向いて始点を合わせる方式は、壁の無いポジションで多用されます。
(図4:左上に合わせることで精度の高い始点となる)

1つの壁で合わせる方法は、壁の無い部分が流動的になりますので投げる度に立ち位置に若干のズレがあります。しかし殆どの投げ物はそれほどの精度を必要としませんので、これでも問題ない場合が多いです。
下図5は旧cacheの有名な開幕Smokeを投げる場合の始点ですが、これはタイヤに体をくっつけることにより立つ位置を決めています。この場合では毎回タイヤの真ん中に立つようにしていても実際の始点は少し前目だったり後ろだったりするので、毎回同じSmokeにはなりません。
(図5:タイヤの前に立つことで許容される精度内でA Main Smokeを投げることができる)

もう一つ同じ例として下図6のinfernoのボイラー(階段下のこと)に投げるmolotovの始点を挙げます。毎回扉の中央を狙って立ちますが、実際は若干前後した位置に立つことになると思います。
(図6:扉の中央から少し外れても許容される精度内のmolotovを投げることができる)

特殊な例として他のオブジェクトに注目することで始点を合わせる方法もあります。下図7はbananaに投げ物を投げるポイントですが、壁を向いて位置を合わせてからbanana側に振り向く時間が無いという実戦上の理由でこの様な方法で始点を合わせています。
(図7:背中を壁に接触させた状態でドアが半分隠れるまでD移動する)

また、これは直接投げ方とは関係ありませんが、投げ物を構えている間は敵に対して無力ですので、実務上極力体が隠れる始点を選ぶべきです。
(図8:ここからCT Smokeを投げることができるが敵に見つかりやすい)

実際に新しい投げ物を考える際は、安全な位置から投げられることを優先して考えます。
2つの壁があればベスト、駄目なら1つの壁を使い成功率が許容できるかを評価し、これも駄目なら壁を使わず下を向く等精度の高い照準合わせ、これも駄目なら安全な場所は諦めて危険な場所から投げることを考え同じ試行錯誤を繰り返すといった順序で繰り返し検討します。

#1-2 照準位置について

照準位置のことを照準点と呼ぶことにします。

目印があれば毎回そこに照準点を合わせることで再現可能な投げ物になります。
目印はわりと何でも利用でき、map上の構造物やオブジェクトの位置関係、太陽、壁や壁の傷、柵、木や草、キャラクターの手やHUD、果てはスコアボードなんかも使用可能です。

下図9はmap外の構造物(クレーン)に照準点を合わせています。このようなmap外の構造物や壁の傷などはshader設定が低いと表現がカットされていることがありますので、lowの場合は照準点探しに苦労する場合があります。その例が下図10の取り返しFBで、設定が高であれば電線があり簡単に合わせられますが、低であればFB缶合わせにする等の工夫が必要になります(僕はlowでしたhighは240FPS出なくて...)。
(図9:クレーンを目印にすることで安定した取り返しSGを投げている)

(図10:設定がlowの場合はここの電線が消える)

次の例はmap上の構造物に照準点を合わせる簡単な例です。図11は壁のマークに、図12は壁の角を目印に照準点を合わせることでX軸、Y軸の合わせが完了するため素早く正確に投げることができます。
(図11:簡単にA siteに投げることができる。)

(図12:壁の角に合わせることでX軸・Y軸を再現可能にしている)

適当な目印を見つけることができない場合は、次策として構造物の縁や中央(3本の棒がありそこの真ん中)を目印にX軸、Y軸を決めることが多いです。
(図13:Bの設置ポジションに投げることができるHE)

同様に柵・木・壁などもX軸、Y軸を決めるために利用します。
(図14:柵を目印に開幕B Rを防ぐmolotovを投げている)

(図15:草を目印にpartyからのピークを阻止するmolotovを投げている)

(図16:壁に向かって投げることで跳ね返りを狙える)

オブジェクトの位置関係とは上記の方法でも適切な照準点が見つからない場合や、よりインパクトのあるオブジェクトが近くにある場合に、その物体からの位置関係を利用するものです(図13もこれと同じ考え方)。その物体を起点として照準点を大まかに決める場合と、クロスヘア1個分右といった決め方や、X軸のみ起点に合わせてY軸はまた別の物体を起点として扱う等の使い方があります。
(図17:掲示物の頂点をY軸起点、掲示物右端とトンネル壁面との中間をX軸起点としている)

(図18:2つのオブジェクトの頂点をY軸起点とし、X軸はその中間としている)

(図19:ピンク~赤色に見える物体の右端を起点として少し右に照準点を合わせている)

下の図20はX軸の起点とY軸の起点がともにオブジェクトの位置関係を利用しており、その2軸の交点が照準点となります。
(図20:これでsiteの中にSGが飛んでいくので便利)

キャラクターを使う方法としては下図21の様にグローブの指を特定のポジションに合わせることで、X軸とY軸を固定させることができます。これはT/CT・グローブ・viewmodelによって影響されるため、これらの設定が異なると使えません。
(図21:Tのデフォルトグローブを使いviewmodel_presetpos "1"の場合の合わせ方)

SG展開中は照準点を合わせることが困難な場合があります。その場合は下図22の様に投げ物を利用したり、下図23の様にスコアボードを利用して照準点を合わせます。
(図22:Tの場合の合わせ方。CTは火炎瓶の形状が異る)

(図23:スコアボードの端を利用する。)

このようなHUDを利用する方法はaimの照準を使うよりも高所に合わせられる事が多いため、天井が高いoverpassの様なmapでは重宝します。例として図24を示します。
(図24:SGの缶を利用することで空に照準点を合わせることに成功している)

立ち位置は敵から身を隠せる位置であることが必要なため使えるポジションは限られますが、照準点は豊富なため経験が物を言うと思います。慣れれば投げ物が飛ぶ距離が何となく分かるのでこの立ち位置からならこのくらいの高さが必要だなーそれならこのオブジェクト使うかーとか現場を見ただけで大枠で完成形が頭に浮かびます。

幸い以下のコマンドがありますので、今は初心者にも開発環境が整っていると思います。

cl_grenadepreview 1 //投擲前に軌道を表示する
sv_rethrow_last_grenade  //前回投げたグレネードを再投
sv_grenade_trajectory 1             //グレネードの起動を表示
sv_grenade_trajectory_time 15 //15秒間グレーネードの起動を表示

#1-3 投げ方について

ここまでもまぁまぁ難しかったかと思いますがこれからが更に難しいです。
投げ方はかなり多くの方法があり、ざっくりと分類するだけで18通りの投げ方があります。
僕の呼び方なので表記のゆれは許してください。

動作:投げる瞬間に立っている(静止している)か歩いているか走っているかの3通り
投げ方:左クリックか右クリックかその中間かの3通り
ジャンプ:ジャンプするかしないかで2通り
(3通り×3通り×2通り=18通り)
キャラクターの動作投げ方ジャンプ呼び方使用率top5
立っている
左クリック
しない立ち投げ#1
するジャンプ立ち投げ
右クリック
しない右クリ立ち投げ
する右クリジャンプ立ち投げ
中間
しない中間立ち投げ#4
する中間ジャンプ立ち投げ
歩いている
左クリック
しない歩き投げ#3
する歩きジャンプ投げ
右クリック
しない右クリ歩き投げ
する右クリ歩きジャンプ投げ
中間
しない中間歩き投げ
する中間歩きジャンプ投げ
走っている
左クリック
しない走り投げ#2
する走りジャンプ投げ#5
右クリック
しない右クリ走り投げ
する右クリ走りジャンプ投げ
中間
しない中間走り投げ
する中間走りジャンプ投げ

もっと言えばしゃがみを入れた状態だとか動いている方向(WASD)によって飛ぶ距離も変わりますし、中間投げ・ジャンプなんてのはデジタル的に距離が変わるので厳密に言えばとても18通りなんかでは済まされないのですが、以下大事な投げ方のみをピックアップして説明していきます。

①立ち投げ

一番簡単な投げ方で、キャラクターが静止した状態で左クリック(+attack)だけを押して投げるとこの投げ方になります。特に説明は不要かと思います。
(図25:左クリックで投げるとこの程度飛ぶ)

②右クリ立ち投げ

①と同じく静止した状態で右クリック(+attack2)を押した場合が右クリ投げになります。これは下手投げとも呼ばれ飛距離が出ませんが、カウンターFB等で使われます。

(図26:infeのALへのカウンターFB)

下手投げを使う場合は照準点を上にして高さを稼ぐことがほとんどだと思います。
効果のところでも出ると思いますが空中で炸裂しないと音でバレるため。

③右クリジャンプ立ち投げ

下手投げは下図27の様に、主にジャンプ投げと組み合わせて使うことも多いです。

(図27:ジャンプすることで高さを稼ぎ空中で炸裂させている)

④歩き投げ、走り投げ

投げ物の飛距離は投げる瞬間のキャラクターのVEL値に依存します。(VEL値とは
即ち歩きや走りを入れながら投げることで飛距離を稼ぐことができます。

(図28:一瞬Wキーを入れて前に進むことで少し飛距離を伸ばす)

走りのキーを一瞬入れただけでVEL値は少しは増えます。MAXのVEL値になるまではデジタル的に飛距離を調整することができるので、1瞬だけキー入力する場合と、2、3歩走る場合で飛距離は変わります(たまに使う)。

図28はWキーを押す場合ですが、飛距離を減らしたい場合はSキーを押して後ろ走り投げも可能ですし、かなり再現性と使い所が難しいですがA/Dキー方向に走ることでキャラクターの左右に投げることも可能です。Sキーは下図の通り壁越しに投げる際に、③の応用である右クリ走りジャンプ投げと比較検討した上で利用します。(これは壁を越せるジャンプ投げ+右クリでは飛距離が出ないため走りを取り入れるあわせ技です。)
(図29:Sキーを入れることで高く短く飛ぶため壁越しに投げることができる)

下図30も走り投げですがこちらは本来走り投げしたい位置に目印が見当たらない場合に使う方法です。



(図30:D2 Asiteへの渡りSmoke)

D2の中央に投げるSmokeを安定して投げるにあたり、毎回3枚目の位置に立つことができればこの位置から走り投げを行い高い成功率を保てるのですが、この始点は壁や地面で目印を付けることが難しいため、1枚目の壁とドラム缶に挟まれた位置に立って、2枚目の様に照準点を作り、そこから3枚目の位置までWキーだけで走ることで高い再現性を確保しています。

もう一つ例として図31の歩き投げを示します。



(図31:Overpassの開幕Smoke)

こちらも同様に3枚目の始点、照準点が毎回担保できるのであれば歩き投げで高い成功率となりますが、それは難しいので1枚目の位置を始点とし、照準点が2枚目から3枚目の位置に来るまで歩いて投げる(正確には時間短縮のため途中まで走って最後歩き投げ)ことで高い成功率を確保しています。

この種の投げ物はスタートの照準点と投擲する照準点の2つを覚える必要があり、また動きが入るので当然静止して投げる場合より成功率は下がりますが、それでも実戦で90%以上の成功率になると思います。
それと当然ですが開発が難しいです。最初から意図して開発するというよりも、基本的には特定の場所に投げたいニーズが先にあって、そこへ投げるためにどうするのかを考えて試行錯誤を繰り返した結果この投げ方に辿り着いてしまったという流れが多いと思います。

⑤中間投げ

次に左クリックを押したまま右クリックを押す、あるいはその逆で右クリックを押したまま左クリックを押すと中間投げと僕が勝手に呼んでいる投げ方になります。
これは”cl_grenadepreview 1”で確認すれば理解が容易ですが、左クリックを押した時間だけ飛距離が伸び、右クリックを押した時間だけ飛距離が短くなる仕様で、最大の飛距離は左クリックだけを押した場合の飛距離以下、最小の飛距離は右クリックだけを押した場合の飛距離以上になるので、右クリック以上で左クリック以下の飛距離を飛ばしたいときに使用する投げ方になります。このような使い方のため、大抵は静止した状態で投げることが多いです。(歩き投げや走り投げを使うならそもそも①の立ち投げを使う)
(図32:train B set Smoke)

左クリックでは飛距離が出すぎる場合に、一瞬右クリックを入れることで飛距離を抑えることができるため利用されることが多いと思います。上級nade星人になると、右クリの時間で飛距離を把握してピンポイントで練習していないFBを入れることができるらしいです。ホントカナ?

⑥ジャンプ投げ

ジャンプ投げの魅力はなんと言ってもその飛距離です。
下図は有名なmirageのTベースからwindowに投げるSGになりますが、SGは弾着してから展開する仕様なので天井が許せばベースからmapの半分程度の距離であれば投げることができます。

(図33:開幕Tベースから投げることで大きな威力を発揮する)


(図34:上述の通りoverpassは天井が広いためジャンプ投げが有効)

ジャンプ投げの欠点としては精度の悪さです。ジャンプ中のどの位置で投げるかによって、飛距離が異なるため、毎回同じタイミングで投げることは難しく、感覚を掴むのに苦労します。

ジャンプ投げスクリプトを使って精度を高めることは技術上可能ではありますが、個人的に投げ物の精度は個人のスキルに依存するべきとの考えから推奨はしていません。
これは投げ物を持つときだけ画面いっぱいに十字クロスヘアを表示するスクリプトについても同様です。

余談ですがSteamにおいては唯一神VACだけが公的回答でありそれ以外は個人の良心に委ねられるものですので、対戦相手がマナー違反だろうがハードウェアチートだろうがゴースティングだろうがチーミングだろうが盛りすぎスクリプトconfigだろうが止めることはできません。何ならVACされても転生可能な世界です。その様な現状を許すつもりはありませんが、一個人には止める術がないのが現実です。
ただそこで自らもその様な禽獣以下に堕ちるのではなく、何故人生における貴重な時間を費やしてゲームをしているのかを考えた上で、目的意識を持って自らの行動を律してほしいと思います。ゲームは上手く使えば人生におけるよい友になれるはずです。


さて、このジャンプ投げは精度が悪いため、僕はよく上図30の様な走り投げを使って代用していました。最後にジャンプ投げの代用として使っていた下図35を示します。



(図35:CTを隠すSGでジャンプ投げより精度は高い)

この様に照準点を工夫すれば走り投げでもジャンプ投げと同等の飛距離を出す事ができます。

最後に開発した投げ物の共有ですが、この章で書いた通り再現可能にするためには始点、照準点、投げ方を知らなければなりません。nadeマスターになれば1mapで100個以上の投げ物を保有していることは当たり前なので、面倒ですが管理や記憶のことを考えると動画や写真で共有することが望ましいと考えます。

また立ち位置については、getpos/setposのコマンドが便利です。
getposコマンドで取得した位置情報でsetposするとキャラクターが上から落ちてくる仕様ですので、低い建物内などでは天井に埋まって動けなくなります。
この様な場合は、getposで得たZ軸情報を-50程度してあげると挟まらずに済みます。
(図36:一番右の情報を-50程度するとよい)

大変長くなってしまったので、効果については次の記事に回そうと思いますsry~
part2はこちら

0 件のコメント:

コメントを投稿