rusted-coil old blog

はてなダイアリー上で書かれていた旧東方錆恋録 ~Slipping Rusted Magnemite~のデータをそのままインポートしたブログです。リダイレクト先を変える前に気づいたらダイアリーがサービス終了していたので、とりあえずリンク切れを防ぐため公開しています。

条件に引っかかった時点での実行されてるアドレスが知りたい時とか
r15とのずれが4だったり8だったりで安定しない…と思ってたら
oupoさんの改良desmumeのcurr_insn_addrがちょうべんり
実行された順に並べ替えてコード吐いてくれるみたいなのないかな…


ktxadさんが早速解析してた。
気になって自分でも再検証してみたけど多分あってそう。
※ID生成の部分だけで遭遇乱数は全く別かもしれない。(未検証)
最初のポケモンを貰う時点でseedが2回変更されたので使われてる可能性はある

  • seedは今回64bit、0x22160A4に格納。
  • 式はseed[n+1]=int64(seed[n]*0x5D588B656C078965+0x269EC3)
  • IDはseedの上位32bitから1引いたもの(但しseed上位が0のときは0)

名前入力中の上記アドレスは0x263FE80CBDE0E9EDで、これをseed[n]とするとseed[n+1]は0x8E116BFBA88DBE44
この上位32bitの0x8E116BFBから1を引いた(厳密には0xFFFFFFFFを掛けて上位32bitをとったもの)0x8E116BFAがトレーナーID
トレーナーカードで確認できる表ID27642=0x6BFAはこの下位32bitと一致。


しかしみんな凄いな。付け焼刃の解析初心者がどうこうできる話ではなかったのかもしれん…