Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

乱数調整と謎乱数の話

4,051 views

Published on

Dentoo.LT #15.5 (https://atnd.org/events/82737) のLT飛び入り枠で発表したスライドです.

Published in: Engineering

乱数調整と謎乱数の話

  1. 1. 乱数調整と謎乱数の話
  2. 2. みなさん, こんにちは
  3. 3. 自己紹介 HN: mizdra 学域1年生Ⅰ類CSプログラム 趣味: プログラミング, ポケモン, 乱数ツールの作成 サン買ったよ! 今日はポケモンと乱数調整の話です 時間がなくてポケモンのゲームシステムについての解説はあま り用意してない
  4. 4. 謎乱数とは… その前に乱数調整について説明します
  5. 5. 乱数調整とは 次に得られる乱数を予測し, 狙った乱数を得ること 例 サイコロを11回振ってた時, 何かしらの手法を使って今まで得 られた出目から12回目の出目を予測する 何かしらの手法の例: 未来を読む(神になれば出来る) n回目 1 2 3 4 5 6 7 8 9 10 11 12 出目 1 3 4 3 2 6 1 5 4 2 1 ?
  6. 6. 擬似乱数 扱う乱数が擬似乱数であれば次の乱数を予測することが出来る ポケモンの第四世代で用いられる擬似乱数の定義 S[n+1] = (0x41C64E6D * S[n] + 0x6073) % 0x100000000 線形合同法(LCG)と呼ばれる擬似乱数生成法 この漸化式で定義される数列を擬似乱数列と呼ぶ 新しい乱数を得ることを消費と呼び, ランダムな事象が発生す る度に乱数が消費されていく(n++) 以降はポケモンの乱数調整, LCGについて話します
  7. 7. 乱数性を高めるためのちょっとした工夫 S[n+1] = (0x41C64E6D * S[n] + 0x6073) % 0x100000000 ↑ ↑ 奇数 奇数 「奇数*偶数+奇数」 は奇数 「奇数*奇数+奇数」 は偶数 この擬似乱数列は 偶数, 奇数, 偶数, 奇数, ... を繰り返す 乱数性とは… この繰り返しを避けるためにポケモンでは S[n] >> 16 を乱 数として使用している(実擬似乱数列 r[n] = S[n] >> 16 と 定義)
  8. 8. 初期Seedの計算方法 S_0 = (((month * day + minute + second) * 0x1000000) + (hour + 0x10000) + (frame + year - 2000)) mod % 0x100000000  month ,  day 等の日時は「つづきからはじめる」を押した瞬間の ハードウェアに設定された日時が使われる ハードウェアの日時は自分で変更することが可能  frame はDSを起動してソフトを選択し, ゲームが起動した瞬間か ら「つづきからはじめる」を押した瞬間までの時間をフレーム(単位 の記号はF, 1秒≒60F)という単位に換算したもの
  9. 9. 例 2016年11月26日3時10分10秒丁度にDSのメニューからゲームを選 択し, 2016年11月26日3時10分30秒丁度に「つづきからはじめる」 を押したとすると, 初期Seedは以下のようになります. S_0 = (((11 * 26 + 10 + 10) * 0x1000000) + (3 + 0x10000) + (((30 - 10) * 60 - 649) + 2016 - 2000)) mod % 0x1000000
  10. 10. 消費方法 主な消費方法 消費数 ランダムな事象 1 ウツギ博士に電話を掛ける(通話内容の決定で乱数が消費さ れる) 1 録音した音声を鳴き声として設定したペラップの鳴き声を聞 く(鳴き声を聞く度に音の高さが変わる, 音の高さの決定で乱 数が消費される) 1 当たり付き自販機で飲み物を買う(当たり/はずれの判定で乱 数が消費される) 手持ち ポケモ ンの数 128歩歩く(128毎歩くたびに行われる手持ちポケモンのなつ き度判定で乱数が消費される) ウツギ博士に10回電話を掛ければ n+=10 
  11. 11. 初期Seedと消費を調整する力は手に入れた 後は乱数調整するのみ
  12. 12. 「乱数調整出来る俺つえ~」で 終わりにするのは面白くない どうせやるなら アホみたいな乱数調整 をしよう これを有用性が皆無という意味で 謎乱数(謎乱数調整)と呼んでいます
  13. 13. ペラップ乱数
  14. 14. ペラップ乱数 ドレミ~レド・ドレミレドレ~ ペラップがチャルメラの音を真似します。 http://blastoise‑x.hatenablog.com/entry/2013/04/03/014951 ペラップ(録音した好きな音声をその鳴き声として設定出来る, 鳴き 声を発する度に音の高さが変わる)というポケモンの鳴き声の音の高 さを調整して素敵な音を奏でる話
  15. 15. バトルファクトリー乱数 バトルファクトリーと呼ばれるポケモン対戦施設がある 主人公は施設側でランダムに用意されたトレーナーをレンタルし, ランダムに選ばれた対戦相手と戦う バトルファクトリー乱数では, レンタルポケモンと対戦相手を 乱数調整する イカサマをしても勝つのは難しい
  16. 16. 自販機乱数
  17. 17. 自販機乱数 ゲーム内に設置されている当たり付き自販機で当たりを出す話  r(n) % 64 == 0 のとき当たりが出る 当たった後にまた当たり判定が行われるので... 200円でおいしいみずを購入 「あたりだ! もういっぽんおいしいみずがでてきた!」 「あたりだ! もういっぽんおいしいみずがでてきた!」 「あたりだ! もういっぽんおいしいみずがでてきた!」 第四世代では最大で連続三回当たり判定が行われます 挑戦者の紹介 多分これが一番無駄だと思います。 ‑ ろいしんぶろぐ
  18. 18. まだ終わらない BW(第五世代のソフト)だと最大連続当たり回数の上限がもう少し高 く設定されている 自販機で当たりを引くのが0x08000000以下の時であり、これは 配達員検索時の個体値が0の時と同じそうなのでSSS4を使い6連続 当たる初期seedを探すことが出来ます。 http://d.hatena.ne.jp/milk4724/20130202/1359437354 最大7連続当たりを狙うことができるそうです
  19. 19. 宣伝
  20. 20. PokémonRNG Advent Calendar やります 乱数調整で色違いのポケモンを捕獲する方法 乱数調整でゲーム内のくじで特等の商品を当てる方法 各世代(第三世代, 第四世代, ...)での乱数事情 未だ十分に解析されていないランダムな事象の調査(戦闘乱数等) 乱数調整でゲーム内に設置されている自販機で当たりを出す エミュレータでポケモンの乱数調整をする話

×