誰向けなの

スイッチを改造できて、自分でシードを設定できる方向けです。

うちの記事読んでて、これができそうなの五人くらいしかいなさそうなので需要は全くなさそうなのだが、せっかくなので研究した成果を発表しておく。

シード厳選

まず最初に、72 納品をしようとおもったら WAVE3 が通常潮位のイベントなしである必要がある。

ところが、通常潮位のイベントなしというのは 3/4 × 3/5 = 9/20 の確率で発生する。

全通りが 43 億もあるので、9/20 に減らした程度では候補が多すぎて Python で細かい厳選が行えないのだ。そこで今回は C++のプログラムに改良を加え「WAVE3 が通常潮位イベントなし + カタパ出現しない + タワー出現しない」という風に制約をつけて出力できるようにした。

出現するオオモノで絞る

七種類のオオモノのうち、二種類が常にでないということは五種類から出続けるということなので、

そのシードの期待値は全体のおよそ (5/7)^24 = 0.00031111943 と見積もることができる。

となれば、通常イベントなしがくる確率 9/20 と合わせて、全体の 0.00014000374 程度になるはずである。ここまで確率を減らせれば候補を十分絞ることができ、

2^32 × (5/7)^24 × 9/20 = 601311.512458 と、約 60 万通りほど残るのではないかという予想が立てられる。

実際、プログラムを動かしたところ 609829 通りのシードを得ることができた。

少し見積もりよりも大きくなったが、スプラトゥーンの疑似乱数生成器が偏りを含むものなのでまあまあ精度良く予測できたと言ってよいだろう。

オオモノの詰まりで絞る

さて、オオモノ出現アルゴリズムが完全解析されたので、初期シードからオオモノが湧く順番は完全に予測可能なのだが、これはあくまでも「何も不測の事態が起こらなかったときのオオモノの湧き順」であり、状況によっては計算結果とズレることがある。

それが同一オオモノの存在上限であり、四体目のオオモノを出現させようとすると別のオオモノが出現してしまい、それ以後の計算が合わなくなってしまうという問題がある。

満潮などではなかなか気にすることもないのだが、通常潮位の場合はオオモノが寄ってくるのに時間がかかるため、ここは厳しく見積もらないとせっかく簡単だと思って試したシードで「オオモノが詰まってしまい全く理想の WAVE と異なる状態になってしまった」という悲惨な状況を招きかねない。

特に、ポラリスなどではモグラでさえも寄せるのに時間がかかるので、モグラに対しても 20 秒の猶予を与えた。

20 秒の猶予があるというのは「100 秒間の WAVE の長さのうちどこの 20 秒をとってもモグラが 4 体存在しているような湧き順がない」ということを意味する。

この猶予が長くなれば長くなるほど、移動速度が遅く詰まりやすいオオモノであるといえるわけである。

サーモンラン ルートマップ (opens new window)

どのオオモノが寄ってくるまでにどのくらい時間がかかるかは、実際に計測しても良かったのだがめんどくさかったので@GungeeSpla (opens new window)氏が作成したサーモンランルートマップを利用した。

それによると 3 湧きのバクダンがコンテナに寄るまでに最も時間がかかり、約 40 秒かかることがわかった。その他のオオモノは全て 30 秒以内に寄ってきているので、バクダンだけがぶっちぎりで遅いわけである。

30 秒以内に寄るのであれば、猶予は 30 秒あればいいので、ここではカタパッドとタワーを除いたオオモノの猶予時間を以下のように設定した。

猶予 オオモノの種類
20秒以内 モグラ
30秒 テッパン
ヘビ
コウモリ
40秒 バクダン

この湧き間隔制約をつけた上で、先程絞ったシードからどのくらい減らせるかが問題になるわけである。

その結果、16564 通りのシード表を得ることができました。

後半の湧き方向で絞る

ではここから更に絞っていくことにしましょう。

先程、最も遠いバクダンは寄せに 40 秒かかるとしましたが、これが正しければ 7 回目の湧き変化(38 秒)や 8 回目の湧き変化(28 秒)でバクダンが出現してしまうと寄せが間に合わないことになります。

2 湧きや 3 湧きでは最も遠いバクダンが出現してしまう可能性があるので、バクダンが出現するのは一番近い 1 湧きで固定したいわけです。

例外的にドンブラコだけは 1 湧きが最も遠く、3 湧きが最も近くなる(なんでやねん)

ただし、あんまりきつい制約をつけると一気に候補が減ってしまうので柔軟に対応する必要があります。そこで今回は「7 回目の湧き変化は 1 湧き(最も近い)」「8 回目の湧き変化はどこでもいいがモグラが出現する」という風にしました。

すると 882 通りのシード表を得ることができました。

コウモリを減らして絞る

コウモリが出現すると、(特にポラリスでは)誘導がめんどくさいことになるので、コウモリは後半には湧かないようにしてみました。

すると、2 通りまで絞ることができました。

02CBBA0A
B5A17BC6
1
2

このどっちかで 72 納品ができるといいなあ、なんて思っていたりします。

ちなみにドンブラコの場合は 7 回目は 1 湧きではなく 3 湧きの方が得なので、次のシードになります。

033D3BEF
604E20CB
A676A682
1
2
3

IPSwitch

せっかくなので、直ぐに使える IPSwitch 形式のコードも置いておきます。

// NT WAVE3 Polaris
@disabled
00208C74 6059A0D2404197F2
// NT WAVE3 Polaris
@disabled
00208C74 20B4B6D2C0788FF2
// NT WAVE3 Polaris
@disabled
00208C74 20C7B0D2A07D93F2
// NT WAVE3 Bay
@disabled
00208C74 A067A0D2E07D87F2
// NT WAVE3 Bay
@disabled
00208C74 C009ACD2601984F2
// NT WAVE3 Bay
@disabled
00208C74 C0CEB4D240D094F2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

最新のバージョンのアドレスははナイショですが、GHIDRA でうまいこと検索したらすぐに見つかります。

5.3.0 までのアドレスは以下のレポジトリから確認できるので、その辺を調べてみてください。

StarlightSeedHack (opens new window)

バグかはしりませんが、このパッチを当てた状態でイカッチャで三つ目のステージを遊ぶと必ずクラッシュします。なぜなのかはわかりません。