バトルタワーの相手の手持ちの決定は専用の乱数が使われていた

バトルタワーの相手の手持ちの決定は多分ファクトリーとほぼ同じだろうなーと思いながら調べたら、ぜんぜん違っていた。
セーブデータにバトルタワー専用のseedが記録されている。バトルタワーの1周目に一回挑戦するごとにs * 0x5d588b65 + 1で更新される。その値がバトルタワーの相手の手持ちを決定する初期seedになる。

3.不明1
  正体不明です。雰囲気からするとバトルタワー関連かな?という気がします。
  日替わりの乱数に 0x5D588B65をかけて1を足したものを使用します。

これがそれそのもの。

日替わり乱数のseedと最後に日付を跨いでから何回目の挑戦かっていう情報からバトルタワーの相手の手持ちを出力できそう。

しかし、相手の手持ちを決定する初期seedは判明できたものの、その値をどう計算して乱数列にしているかまだ分からない。むむむ。

追記 (2010-03-28T17:20:34+09:00)

バトルタワーの乱数列は s * 0x02e90edd + 1 のよう。

メモ

s * 0x5d588b65 + 1 の逆算の式は s * 0x6a76ae6d + 0x95895193
s * 0x02e90edd + 1 の逆算の式は s * 0x0c913975 + 0xf36ec68b

追記2 (2010-04-02T09:50:45+09:00)

乱数の値は普通にseedの上位16bit...ではなく、(seed / 0xffff) & 0xffffが使われる。

筆者: oupo (連絡先: oupo.nejiki@gmail.com)