no-image

[IPSwitch] 4.5.0を解析する

ver4.5.0がリリースされた

スプラトゥーンにパッチを当てるためのツール。

大変お世話になっております。

しかし、これはまだver4.4.0にしか対応していないので4.5.0でも使えるようにしてみましょう。

基本情報

まず、コードよりも先に調べなければいけない情報があります。

それはnsobidとオフセット値です。

ここではまずそれらの調べ方について述べます。

nsobid

nsobidとはNSO Build IDのこと。

要するにゲームのバージョンとかを識別する情報と思っていただければ良い。

一般的に、バージョンが上がるたびにこの数字は変わります。

ちなみに4.4.0のときは”A9E20482D1F7B034BCE8CBCF6DE63BBA”でした。

この値はバイナリエディタでexefsの中身であるmainを見ればすぐに分かります。

ver4.5.0のmain

アドレス0x40から始まる値がビルドIDになります。

よって、4.5.0のビルドIDは”9E132156D40AE193C0808D0E8E092325″ということがわかります。

オフセット値

Splatoon 2の場合はこの値はバージョンに依らず0x100で固定です。

多分、どのゲームでも固定ですが他のゲームは解析したことがないのでわかりません。

コーディング

まず、先程の情報をpatches.pchtxtに記述します。

@frag offset_shift の値は0x100で固定なので何も弄りません。

@nsobid-9E132156D40AE193C0808D0E8E092325

@flag offset_shift 0x100

/ ********************************************************************
/
/ (c) 2018 OatmealDome and contributors
/ Licensed under GPLv3, please visit the following URL for more info:
/ https://www.gnu.org/licenses/gpl-3.0.en.html
/
# Splatoon 2 4.5.0 Patches
/
/ Dedicated to Simonx22
/
/ ********************************************************************

すると、上部はこのようになります。

ここから、他のコードを移植する作業が始まります。

https://tkgstrator.work/?p=9258

ここでも述べたように、基本的にはコードの移植は3.1.0から行うのですが、今回は既に4.4.0で実装されているコードを移植するだけですのでこれよりは簡単です。

バージョンが離れれば離れるほど、目的の関数のアドレスがズレてしまうからです。

ワンオペ

// One Player Private Battles [OatmealDome]
@enabled
00360994 1F2003D51F2003D50900
0036099F 14
00367A7C 1F2003D51F2003D50900
00367A87 14
01457AB4 21008052
01474E88 21008052
014744E4 1F2003D5

一人でプラベをしたり、ワンオペでサーモンランをしたりするのに必要なコードです。

検証には必須のコードなのでさっさと移植してしまいましょう。

すると最初のコードのアドレスが003561B8であることがわかります。

二番目のコードは最初のコードからアドレスがBズレているので、加算すれば二番目のアドレスもすぐに分かります。

同様にして三番目のコードを見つければBを加算して四番目のアドレスもわかります。

ワンオペコードはアドレスを変えるだけで全てのバージョンに適応できるので何も難しいことを考えなくていいので楽ですね。

// One Player Private Battles [OatmealDome]
@enabled
003561B8 1F2003D51F2003D50900
003561C3 14
0035D2A0 1F2003D51F2003D50900
0035D2AB 14
01465FD8 21008052
014833AC 21008052
01482A08 1F2003D5

基本的には”PrivateMatchPassSingle”で前後にテキスト検索をすれば見つかりますが、最後のコードだけは”Msg_InvalidTeamSelect”で検索しないと見つけるのが面倒かもしれません。

プラベでワンオペ
サーモンランでワンオペ

スペシャル回数変更

オンラインでも使用できてしまうのでコードは公開しません。

“CoopAddition”でテキスト検索をかけるとサブルーチンsub_E528Cの付近でヒットすると思うのですが、そこからちょっと頑張れば見つけられると思います。

金イクラドロップ数変更

これもやはりオンラインで使えてしまうのでコードは公開しません。

テキスト検索で見つけるのは困難なのでバイナリサーチで”00 01 3F D6 A0 C3 1F B8 A8 C3 5F B8 “と調べればいいことがあるかもしれませんね。

金イクラドロップ数を変更

10個以上に設定すると、ドロップ時の金イクラの落ち方が定義されていないのでバグります。

違法ブキ開放

イカッチャで全てのブキを使用可能にするコードです。

container12345氏が見つけたコードで、掲載許可がいただけたのでコードの解説します。

まず、それぞれのブキにはイカッチャのサーモンランで使用可能かどうかのフラグが存在します。

そのパラメータはMush/WeaponInfo_Main.release.bymlにも記述されているのでこちらを変更することでも実はクマブキ開放は可能です。

で、肝心のパラメータはブキごとに設定された”CoopAddition”というものです。

これが0であればサーモンランで選択可能になるので、WeaponInfo_Main.release.byml読み込み時にパラメータの値を常に0にするようなコードを書けば良いことになります。

ただし、このコードを使うとありとあらゆるブキが使用可能になるので実際にはインクがでないために使い物にならないブキも選択可能になります。

また、非改造機と通信時に使用すると必ずクラッシュします。

?ブキは選択可能ブキからランダムに一つ選ばれるので、このコードをオンにしているとクマブキも選択されることがあります。

逆に言えば、このコード適用中は不用意に?ブキを選択すると非改造機がいた場合、ホストがクラッシュします。

全ブキ開放した状態

敵インク無効化

敵インクによるダメージが0になるだけなので、普通に足元はとられますし、水没したり落下したりするとデス扱いになります。

また、サーモンランですとシャケに殴られるとノックバックします。

公開していいかどうか微妙なんですが、GitHubで公開しているっていうことは公開してもいいんでしょう、多分。

これは4.3.1向けのコードなので4.5.0に移植します。

// Godmode [SplatNut]
@disabled
0100CFBC 160080D2

バイナリ検索で”F7 03 04 2A F6 03 02 AA F5 03 01 2A F4 03 00 AA”とやればすぐに目的付近のアドレスが見つかります。

// Godmode [SplatNut]
@disabled
0101673C 160080D2

まとめ

というわけで、コードの移植について簡単に説明してみました。

ここまでわかれば、元のコードとバージョンがわかれば多分自力でどんなコードでも移植できるはずです。

コード開発はこの数倍めんどくさいです。

誰か便利なやり方法見つけてくれんかなあ…

質問があればお気軽にどうぞ、答えられる範囲内でお答えします。