えいむーさんは明日も頑張るよ

霧イベントのキンシャケドロップ数を厳選する魔法はあるか

価格

# 霧イベントのキンシャケドロップ数

先日、このようなツイートを見かけました。

霧のおじぃちゃんは最初にダメージ与えてから 3.5 秒以内に倒すと 10 個でますよぉ 最初のダメージからキルまでの時間で個数決まります

最初に思ったのは「いや、まさかそんなことないやろ」という感想。というのも、霧イベントのキンシャケのドロップ数が変わったのは ver3.2.0 からなのだが、そのときのスプラトゥーンのバイナリを逆アセンブルして、ドロップ数を決定しているのがsub_4A7BD0であり、それが

__int64 __fastcall sub_4A7BD0(__int64 this, __int64 a2)
{
  *(this + 2640) = sead::Random::getU32((this + 0x724)) / 0x55555556;
  return sub_4643F4(this, a2);
}

というアルゴリズムであることまで突き止めていたためです。

# ドロップ数アルゴリズム

getU32()というのはスプラトゥーンの擬似乱数生成器が 32bit の乱数を生成するメソッドなので、このアルゴリズムは乱数を出力してその値を0x55555556で割った値を返すというプログラムになっています。

わかりやすいように直すと、

__int64 __fastcall sub_4A7BD0(__int64 this, __int64 a2)
{
  return sead::Random::getU32((this + 0x724)) % 3;
}

となり、乱数を 3 で割ったあまりを返します。ある数を 3 で割ったあまりは 0, 1, 2 のいずれかであり、0 であればドロップ数 1、1 なら 5、2 なら 10 というように対応しています。

もしも乱数が均等に生成されるならどのドロップ数になるかは乱数生成器の内部状態がわからない限りはランダムのように振る舞うはずです。

また、このアルゴリズムのどこにもダメージを与えてからの時間、3.5 秒(内部的には 210F)という数字がでてこないため最初に述べたようなテクニックはないように思われます。

# 実際にやってみる

とはいうものの、否定するに十分たる理由もないので実際にやってみることにしました。

サーモンランはいろいろバグっているので、3.5 秒仮説が偽だったとしても何らかの面白い成果が得られるかもしれないからです。

# 実際にやってみた結果

本当は動画をとればよかったのですが、めんどくさかったのでやめました。

結論から言えば 3.5 秒でたおせば 10 個ドロップするような魔法はなく、あくまでもランダムに決まっているということです。また、せっかくなのでキンシャケに関する情報も載せておきます。

# 霧のキンシャケ

  • ドロップ数は 1, 5, 10 のいずれか
    • 10 がわずかに少ないがほぼ誤差、器にしなくて良い
  • キンシャケが上限に達しているとシャケになる
  • ドロップ数はたおすタイミングだけで変わる
    • 同じタイミング(結構幅はある)でたおせば毎回ドロップ数は同じ
    • 変わる理由はthis[0x724]の乱数生成器の内部状態が変わるため
    • どのタイミングで内部状態が変わるのかはよくわかっていない
  • ドロップ数を任意のものにする魔法のような手順は見つかっていない
    • 将来的に見つかる見込みもない

# 何故魔法のような仮説が発生するのか

これはある意味都市伝説に近い気がしています。

人間は自分にとって都合の良いデータを信頼しがちで、それを正しいものだと思い込みがちです(これは研究者にとって恐るべき事実なのですが)

というのも、以前 98 秒であければ必ずキンシャケ探しでアタリが見つかるという都市伝説が流れましたが、あれと考えとしては似ています。

何故なら、失敗したときに「ピッタリ 98 秒でなかったのかもしれない」というようにいくらでも仮説が成立しなかった言い訳ができてしまい、結果的に偶然成功したものだけをサンプルとして扱い「98 秒であければかならず当たる」という誤った結論が得られてしまうからです。

今回のも同様に「3.5 秒以内でなかったのかもしれない」「誰かが予めダメージを与えていたのかもしれない」という「論理の逃げ道」があるために成功例だけが強く記憶に残ってしまい発生したものだと考えられます。何故なら、もしもランダムであるのであれば何回かやっていれば必ず 10 個以外のドロップが発生し「この考えは誤りだ」という考えに至るからです。

# 魔法の思い込み

このような存在しないはずの「魔法の思い込み」を防ぐにはどうすれば良いでしょうか?ぼく自身の考えとしては「魔法の思い込み」自体は悪いことではありません。あまりに荒唐無稽でない限り、積極的にすべきです。

ただしそれが正しいかどうかの確固たる検証方法があり、検証の結果誤りだとわかったときに素直に受け入れる柔軟さが必要とされます。そうでなければデマを流しているのと変わりません。

# サーモンラン大全 (opens new window)

こっそりサーモンラン大全というウェブサイトを運営しています。

ここに書いてある情報は内部データの解析からほぼ間違いなく正しいことが保証されています。

ここを読めば「キンシャケ探しにおける魔法」も「霧イベントにおける魔法」も存在せず「ホストに依存するイベントの運」なども「ない」ことがわかります。

「ない」とわかっているので追い求めるのはナンセンスと言えます。

ただし、これらが「ない」というのは全てスプラトゥーンの擬似乱数生成器にバグがないということが前提になっています。ここに何らかのバグがあり、先読み可能になればそのような「魔法」のようなテクニックが見つかる可能性は大いにあります。

記事は以上。

価格

価格
    えいむーさんは明日も頑張るよ © 2022