[IPSwitch]Map Forceを試してみる

Zewia氏のコード

// Map Force [Zewia]
@enabled
0142F300 807182D2
00341F98 09000014

Zewia氏がMap Forceのコードを公開してくれているのでこれを読み解くことでMap Forceを自由に操れるはずである。

これはIPSwitchのコードであるが、そもそもこのコードがどのように動いているのかを知る必要があります。

IPSwitchの仕組み

IPSwitchのコードはオフセット+コードの組み合わせで表現されます。

例えば先程のMap Forceのコードですと、

0142F300[Offset] 807182D2[Code]
00341F98[Offset] 09000014[Code]

という構成になっています。ここでいうオフセットというのは「Splatoon2の実行バイナリであるmain.nsoのどの部分を変更するか」というアドレスを意味します。

そしてコードというのは「本来そこにあるコードをどのように上書きするか」ということを意味します。

このオフセットとコードのどちらも正しく記述することでIPSwitchは正しく動作するのです。

コードは何が書いてあるのか

コード部は機械語と呼ばれる言語で書かれており、そのままでは人間が読むことは困難です。(一部プログラム界隈ではそのまま機械語が読める方がいらっしゃるそうですが)

それをアセンブラに変換してくれるサイトが紹介されていたので当記事でも紹介したいと思います。

変換したところ、以下のような結果が得られました。

// 807182D2
MOVZ X0, #0x138C

// 09000014
B #0x24

この#0x138CがMapIDと呼ばれる番号で、#は定数、0xは16進数を意味しています。また、16進数で138Cというのは5004に対応します。

つまり、このコードは以下のコードと全く同じ意味を持ちます。

// 807182D2
MOVZ X0, #5004

// 整数5004をX0レジスタに代入

このコードの意味は整数をレジスタに代入するというものです。オリジナルのコードは整数5004をX0レジスタに代入しています。

ではここでMapID=5004が実際に何のステージなのかという問題が発生します。実際に試してみたところ、朽ちた方舟ポラリスになりました。

ポラリスでナワバリバトル

Map ID

MapID=9999がミステリーゾーンということはよく知られた情報なのですが、フェスが開催されてない現在の状況で起動しようとするとゲーム開始時にフリーズしました。

[table id=35 /]

ちなみにサーモンランのステージでガチマッチができない理由はオブジェクトの位置が指定されていないためです。

また、Zewia氏のMap Forceは無改造機と通信をするとクラッシュします。クラッシュしないためには送信しているデータも変更する必要があるかもしれませんね。(この辺りはサーモンランのWAVE変更が他のデバイスに反映されないのと似ているかもしれません)

ミステリーゾーン
トキシラズいぶし工房

ミステリーゾーンが起動しない原因がフェス開催がされていないことが問題なのか、その他が問題なのかはわかりません。

海外のハッカーによると起動しないわけがないとのことなのでぼくが何かのミスしているのかもしれません。

何故クラッシュしたのか

クラッシュした原因を調べるために、crash_reportsを参照します。SDカード内の” /atmosphere/crash_reports ”にファイルが生成されているはずなのでそれを確認しましょう。

ファイルが生成されるためにはSplatoon2がクラッシュするまで待たないといけません(大体20分くらいかかって面倒)

どうやらBlitz.nssを参照中に落ちていることがわかります。

BlitzってClam Blitz(ガチアサリ)のことじゃないのか?って思っているんですがどうなんでしょう…

一応、Turf War(ナワバリバトル)を選択したはずなのですが。

BlitzとはSplatoon2の開発コードネームのことらしいです。

https://twitter.com/OatmealDome/status/1076613352493850625

ファイルチェックシステムが追加された

されているかな?と感じていたのですが、やはりプライベートマッチに「マルチプレイヤー対戦として有効かどうか」のチェックシステムが導入されたようです。

これにより、以前ではOatmealDome氏のパッチとZewia氏のパッチで(完璧に動作する)カスタムステージが遊べていたのですが、できなくなりました。

具体的にはbfresを変更するとステージの読み込みでData Abortが返ってきて落ちてしまいます。

せっかくなのでその時のクラッシュレポートを載せておきます。

まとめ

初歩的なことなのですが、新たにModdingを始めようという方(あと自分の勉強)のためにIPSwitchの基本情報について簡単にまとめてみました。

まだまだ若輩者なのでアセンブラもプログラミングもさっぱりなのですが、これを機会に理解を深めていこうと思います。