モノトーンの伝説日記

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

Splatoon「安全シューズ」とSplatoon 2「相手インク影響軽減」の考察

 2018/12/10 追記 4.3.0 アップデートで,スリップダメージが追加されない無敵時間が追加されました。

mntone.hateblo.jp


 情報を元に 2 つのギアを比較します。

1. スリップダメージ増加率 [D/f]

 単位は D/f。1フレームごとに何ダメージ入るか。

Splatoon Splatoon 2
最小 0.0 (0) 0.50 D/f 0.3 D/f
0.1 (3) 0.20 D/f 0.2 D/f
1.0 (10) 0.2 D/f
2.1 (23) 0.2 D/f
2.2 (26) 0.1 D/f
最大 3.9 (57) 0.1 D/f

※ 3.0.0 以降。それ以前はこの効果がそもそもなく,0.3 D/f 固定だった。

 8/15 追記: また,少数第2位で切り捨てという情報もある。確かにこれでもこの現象は再現しそう? これを元にグラフも書いて見た。

検証/ギアパワー - Splatoon2 - スプラトゥーン2 攻略&検証 Wiki*

f:id:mntone:20180816111123p:plain

(8/16 グラフに本来期待している場合のグラフの追加)

 ☆これに関していえば,内部でのダメージの扱いが整数になっている可能性があげられる。つまり,180.0 といったリッター4K フルチャージのダメージは内部では 1800 として取り扱われている可能性がある。これは Splatoon 2 からダメージの内部パラメーターが整数値として扱われており,また前作のようなギアパワーによる攻撃力の変化もないため,整数で扱うことが可能であると考えられ,そして体力はネットワークによって共有されるので,同期的な観点からこの実装は変更することは不可能と考えられ,これは仕様として実装され続ける可能性が高いと思われる。

 仮に体力を小数点実装にする場合,全体としてネットコードのデバッグも必要となり,体力が 0.1 ずれているだけでも,同期ズレの発生 [自分の画面では死んでいるのに,相手の画面では死んでいない] の原因となり,安易に変更することは難しい。

 ネットコードがどのようになっているかわからないが,体力の同期は頻繁に行われていると考えられ,ネットコードのデータ量を削減するために,16 bit 整数などを採用して通信しているのかもしれない(32 bit 浮動小数点から 2 bytes の削減)。ネットコードは無印から 2 でかなりの部分で書き換えられており,ネットコード最適化の一環でこうなっていることは考えられる。安易な実装方法としては,10 倍したダメージで取り扱うことも考えられるが,そうなると新たな不具合を生む可能性(仮に 10 倍するにしても,全体のダメージ計算の整合性を確認する必要があり,大変)。

2. スリップダメージ上限 [D]

 単位は D。ダメージ蓄積が上限に達しているとき,スリップダメージはそれ以上増えない。

Splatoon Splatoon 2
最小 0.0 (0) 50.0 D 40.0 D
1.0 (10) 30.0 D 33.9 D
0.6 (18) 29.9 D
最大 3.9 (57) 20.0 D

その他

 仮に実装がバグり散らかしていない場合のグラフは下記に掲載。ただ,過去にも相手インク影響軽減はバグを生み出していたので,いまだにバグっている可能性はある……

 以下は Splatoon 2 の仕様に即したグラフにて掲載してある。

https://mntone.minibird.jp/splw/%E7%9B%B8%E6%89%8B%E3%82%A4%E3%83%B3%E3%82%AF%E5%BD%B1%E9%9F%BF%E8%BB%BD%E6%B8%9B