モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

スプラトゥーンの着弾点の塗りについて

1. 着弾塗り

 まず、本ブログでは着弾点の塗りのことを略して「着弾塗り」と呼ぶことにする。この塗りシステムは「シューター」「スピナー」「マニューバー」タイプで使われる塗りの 1 つだ。

 主な変数について紹介する。

  • F: 遠方の任意点 [DU]
  • Rfar: 遠方の位置における塗り半径 [DU]
  • N: 近辺の任意点 [DU]
  • Rnear: 近辺の位置における塗り半径 [DU]

 わかりやすくするために、以下の図を掲載する。ちょうど、図に描いてある地面に対して、メインの弾が落下した位置における塗りのことである。

イメージ

2. 着弾塗りの計算

2.1 着弾塗りの半径を求める

 着弾塗り半径は、1 次補完されることを前提として話を進めていく。

 銃口 (要調査。原点が銃口ではなく、プレイヤーの可能性もある)と着弾点の距離を算出する。これを x と定義する。これから着弾塗り半径 Rideal は次のように求めることができる。

 \displaystyle
R_{ideal} = R_{near} + (R_{far} - R_{near}) \times \dfrac{\min \left( \max \left( N, x \right), F \right) - N}{F - N}

 この結果は銃口に対して垂直方向となる半径に対しては一致する。

2.2 着弾塗りの中間点

 ここで、スプラトゥーン2 の 3.2.0 のパッチノートの一部を掻い摘んでくる。

ボールドマーカー/プロモデラーMG:

下向きに発射して着弾させたときの塗り範囲を拡大しました。

 新しく定義された変数について、以下のように定める。

  • C: 中間の任意点 [DU] (M と N が分かりづらいので、C と定義します)
  • Rmiddle: 中間の位置における塗り半径 [DU]

 単純に中間点が増えたと考えればよいので、以下のように式を定義できる。

 \displaystyle
R_{ideal} =
\left\{
\begin{array}{l}
R_{near} & (&x \leq N) \\
R_{near} + (R_{middle} - R_{near}) \times \dfrac{x - N}{C - N} & (N < &x < C) \\
R_{middle} & (&x = C) \\
R_{middle} + (R_{far} - R_{middle}) \times \dfrac{x - C}{F - C} & (C < &x < F) \\
R_{far} & (F \leq &x)
\end{array}
\right.

 以下はボールドマーカーの例である。

変数 1.2.0~3.1.0 3.2.0~
F 200 200
Rfar 17 17
C - 37.5
Rmiddle - 21.3
N 20 20
Rnear 24 24

 アップデート前の着弾塗り半径を 2.1 で紹介した数式に当てはめると次のようになる。

 \displaystyle
R_{ideal} = 24 + (17 - 24) \times \dfrac{37.5 - 20}{200 - 20} = 17.097

 つまり、17.097 DU なため、この位置での塗りは およそ 24.6% の上昇が見込まれる (ただし、実際は面積比となるため、さらなる上昇が見込める)

2.3 銃口に対して平行な軸の着弾塗りの半径を求める

 まず、スプラトゥーン2 の 4.1.0 のパッチノートの一部を掻い摘んでくる。

ボールドマーカー/わかばシューター/プロモデラーMG:

着弾点の塗りがこれまでより前方に伸びるようにしました。

 ここで明らかになったのが、4 つの変数である。

  • Amin: mPaintMinScaleClampA
  • Bmin: mPaintMinScaleClampB
  • Amax: mPaintMaxScaleClampA
  • Bmax: mPaintMaxScaleClampB

 Splatoon 2 の wiki コメントに興味深い記述があった。

弾が地面に着弾した角度や速度(?)によって塗りが前方に伸びるもの(ボールドとかのオリジナルの仕様とは別)とそうでないものがあります

zawazawa.jp

 自分も 2, 3 分ほど見た結果ですが、おおよそ角度によって変わると考えていいと思います。おそらく入射角 θ がこの計算に使われているという感じです。関数 rand は 0~1 の乱数です。

 \displaystyle
S =
\left\{
\begin{array}{l}
A_{min} + \left( B_{min} - A_{min} \right) \times rand() & (θ > 60°) \\
A_{max} + \left( B_{max} - A_{max} \right) \times rand() & (otherwise)
\end{array}
\right.

 入射角が 60° 以上の場合と仮に書いていますが、この正確な値は不明です…w まあそれぐらいなのかなーってw

3. 最後に

 スプラトゥーンの塗りというシステムは複数要素が組み合わさってうまくできているのですが、今回はその一つの「着弾塗り」について紹介しました。理論に穴があるとかいう場合は教えてください。

 参考用に最後にスプラトゥーンおよびスプラトゥーン2 の着弾塗りに関する数値をまとめておいたものを掲載しておきます。検討材料に使ってください。

スプラトゥーンの着弾塗り

スプラトゥーン2の着弾塗り

 ボトルガイザーの T はタップ撃ち、A はフルオート、クーゲルシュライバーの N は近距離モード、F は遠距離モードです。