乱数調整

サンムーン固定乱数仕組み

ポケモンサンムーンでも固定乱数ができそうだと大晦日に聞いてしまったので、
検証で正月どころか3連休まで潰しました。


事の発端はこちら。
http://www.smogon.com/forums/threads/sfmt-rng-in-sun-moon.3591281/


以下、検証結果とか。
検証中の部分が多いので、常に最新の情報に注意してください。


●乱数調整可能性

上記記事には、乱数調整を可能とするための3つの重要な要素のうち、2つが記述されている。
1つ目は、使用する乱数列について。
SFMTを用いて64bitの乱数値を生成しているとのこと。
TinyMTと同様、ライセンスにSFMTの表記あり)

2つ目は、乱数値の調整可能性について。
SFMTの乱数列生成に使われる初期シードが2^32通り。
特定条件(NPC等による消費数抑制)を前提にすれば高々2^32×n(2-3桁程度)通りの総当たりで済む(最重要)ので、
スパコンを使わずとも現実的な時間でSFMTの状態の特定が可能である。
また、総当たりの検索対象としてQRコード画面の針(乱数値%17で決定、他の乱数消費がなし)が使用でき、任意に乱数列を進めることができる。

以上2つの情報を用いて、残り1つの要素である乱数値の使用方法の調査を行った。
以下、調査結果。


●固定シンボル(カプ系)の個体決定方法

V箇所3箇所選択(%6、消費数3~)
 3箇所決定までに重複があった場合、重複がなくなるまで次の乱数値を使用。
 ↓
残り3箇所の個体値決定(%32、消費数3)
 乱数値3つ使用。
 ↓
性格決定(%25、消費数1)
 いつも通り。

他の処理については未確認。
シンクロは少なくとも前後10個以内での最下位bit判定ではなさそう。


●どう調整するか

初期シードの調整方法は現段階では不明。(というか見当もつかない)
そのため、基本的な流れは
 起動→初期シード・乱数列特定→調整→出現
ということになる。

1.起動
初期シード決定タイミングは不明。
ただし、不定数の乱数消費は続きから選択後に行われるようで、
続きから選択後一定時間内にQRスキャンの画面を開けば検索する消費数を限定することができる。
ソフトリセットでも問題はなかった。
(追記)
smogonで初期シードの決定方法が公開されましたが、
あまり初期シード調整は現実的ではなさそうです。

2.初期シード・乱数列特定
QRの針データを元に初期シード・消費数総当たりを行う。
フィールド上で主人公のまばたき以外での消費がない場合、
最速QRスキャン起動でおおよそ430-470程度の消費数となった。
それ以外での消費がある場合はその限りではない。(場所によっては700を超えたりも)

3.調整
基本的にフィールド上での消費に任せるか、QR針での消費かの2択となる。
(それ以外のいい方法がある可能性はある)
フィールド上での消費に任せる場合でも、目標箇所との差分を確かめるために
目標箇所が近づいた時点で一度QR針での消費数確認を行うことをおすすめする。
消費数が多い場合は、一度フィールド上での消費の多い場所に移動して消費するのもあり。

4.出現
個体決定直前でも基本的にまばたき消費等が行われているので、
個体決定のタイミングも調整する必要がある。
基本的におおよそ1/30秒単位での調整を行えればよい。
(少なくとも主人公のまばたきのみで消費が行われる場合はそのはず)


●その他重要情報

1.まばたきについて
主人公のまばたきでの消費数は常に30/sというわけではなく、
まばたきを行うとしばらくはまばたきによる乱数消費が行われなくなるよう。
まばたきは乱数値%128が0の時に行われ、
次の乱数値%3が0のとき2回まばたき、1-2の時1回まばたきを行う。多分。
乱数消費が停止する時間は前者と後者とで異なり、
前者はおよそ41/30秒、後者はおよそ34/30秒となっている。(多少のずれがあるかも→ずれてました)
調整する際に考慮に入れる必要があるので注意。
(追記)
smogonでまばたき処理の詳細が公開されました。
%128と%3の計算の間にインターバルがあるそうです。

2.検索時間について
最重要と書いた初期シードの特定可能性だが、普通に検索すると
PCスペックによっては検索に1時間以上かかることがざらにある。
そこで有効な手段の1つが、予めソート済みの検索結果のデータベースを作成すること。
こことかで使用)
最速QRスキャン起動の430-470あたりの針データベースを作成すれば、
データの作り方にもよるが1TB程度の空き容量とデータベース作成時間を犠牲に
高速に検索できる環境を手に入れることができる。
また、QRスキャン起動を主人公のまばたき直後に限定すれば、
データベース容量を(例によってデータの作り方にもよるが)数十GB単位に抑えることができる。
ただし、主人公のまばたきを見るためにプレイヤーがまばたきできなくなるので注意。
(追記)
続きから選択画面で表示される針が使える模様。
http://blastoise-x.hatenablog.com/entry/SM-RNG-abuse


smogonの情報に少し情報足しただけな感じはある。
とりあえず現段階で検証済なのはここまで。
似たような決定方法であればUBとか他の乱数にも応用できるはず。


~Special Thanks~
一緒に検証を行ってくれた方々に多大なる感謝を。
・ろいしんさん @Blastoise_X
・mizdraさん @mizdra
・おだんさん @poke_odan
・oupoさん @_oupo_
・くあんさん @quan_dra

アンノーンでバトルステージを170連勝する(動画)

Pokémon RNG Advent Calendar 2016の22日目の記事です。
他の記事も面白いので読んでみましょう。そして参加しましょう。


以前動画を撮ったまま放置してたので、せっかくなので動画化してみた。
ただの蔵出し情報その2。




バトルステージ乱数の概要はこちら
http://blog.livedoor.jp/x_x_saki_x_x/archives/54842259.html

フリーズバグについてはこちら
http://blog.livedoor.jp/x_x_saki_x_x/archives/54897796.html

以下、動画中で使ったデータとか。
続きを読む

SM孵化乱数列を計算する

SM持ってないけどSM孵化検証やってます。
準備に手間はかかりますが乱数調整可能です。

今回はその乱数列計算に関する内容になります。
某ツールを使えば出来るとか言わない!

WEB上で計算する奴作ってみた。
http://blog.livedoor.jp/x_x_saki_x_x/RNG/SMBreeding.html


●事前知識

SM孵化仕組み検証
http://blastoise-x.hatenablog.com/entry/SM-breed

SM孵化の乱数列生成アルゴリズムについて
http://odanpoyo.blogspot.jp/2016/12/sm.html


●使用されている乱数

「SM孵化の乱数列生成アルゴリズムについて」にもある通り、
今回のSM孵化には「TinyMT」なる乱数列が使用されている。
この乱数列は内部状態としてstatus[0-3]の128bitを持ち、それを調律したものが出力される。
BWの64bit検索でも通常PCでは全探索は事実上不可能であったので、当然全探索という力技はできない。

また、調律の処理が曲者で、非線形となる処理をしているため逆算するのが難しくなっている。
TinyMTには調律を線形とする設定もあるが、その場合の逆算についてはこちら。
http://d.hatena.ne.jp/oupo/20161210/1481361175

 ↓非線形になる原因箇所
#if defined(LINEARITY_CHECK)
    t1 = random->status[0]
	^ (random->status[2] >> TINYMT32_SH8);
#else
    t1 = random->status[0]
	+ (random->status[2] >> TINYMT32_SH8);
#endif

今回はその非線形を回避すべく、最下位bitのみに注目してみることにする。


●何故最下位bitなのか

TinyMTでは基本的にビット演算で処理を行っているが、
その中に加算が交じることで非線形となってしまっていた。
その原因は繰り上がり処理。
繰り上がりを考慮しなければ加算はただのxorであるので、
繰り上がりの影響を受けない最下位bitだけを見れば線形は保たれていることになる。


●計算してみる

status[]から出力される最下位bitを計算してみると、
出力はstatus[3]の最下位bitと同じであることが分かる。

この出力の最下位bit列 $y$ から初期status列 $x$ を求める行列 $A^{-1}$ があればそれを求めたい。
$y=Ax \Leftrightarrow x=A^{-1}y$

まず、内部状態の更新処理を行列で扱えるよう変換する。
この際、status[0]の最上位bitを除外し、127×127となるようにする。
(status[0]の最上位bitは更新処理時に欠落する情報であり、また出力最下位bitから復元できないので、あると行列が正則にならない。)
その行列の0乗から126乗を求め、status[3]の最下位bit計算に使用する行を取りだして並べると $A$ が求まる。
この $A$ を計算した結果正則であったので、逆行列 $A^{-1}$ が求まった。


というわけで、無事連続する127個の最下位bitから元のstatusを計算することができました。
個体値列からの検索もやりたいけど課題が多いのでどうなることやら。

WEB上で計算する奴も作ったので是非乱数調整しましょう!
現時点で乱数列から出力計算してくれるツール公開されてないと思うけど。

バトルサブウェイ乱数~ダブル編~

以前シングルでの勝ちパターンを紹介したので、ダブルでの勝ちパターンも紹介してみる。
ただの蔵出し情報。

Pokémon RNG Advent Calendar 2016の4日目の記事です。
他の記事も面白いので読んでみましょう。そして参加しましょう。


●勝ちパターン考察
シングルの時もA連打シードの検索で苦労したが、
ダブルの場合その4/3倍の数のポケモンを条件に合致させる必要がある。
当然その分検索条件が厳しくなるので、シングルの時よりも強力な勝ちパターンが必要となる。
(スパコン使ってるとか検索環境が充実しているならその限りではない。)

シングルの勝ちパターンでは、S167から火力指数55728の攻撃を行った。
(火力指数は単純にAに技威力とか倍率とかを掛けただけ。)
当然ダブルではこれより上の火力指数を目指すこととなるが、
敵1体への攻撃では火力指数として不足するため、全体攻撃技をメインとして考察する。
性格補正はだいたいの指数が分かればいいので適当。
複雑なギミックとかは考えてない。
火力指数の端数は四捨五入した。


・ふんか
いい感じにCS高めの使えるポケモンがいる。
憶病バクフーンの眼鏡噴火がS167からダブル補正込で火力指数40753。
晴らせば1.5倍だがキュウコンは命中安定のいい全体技を持っていない。弱い。
憶病ゴウカザルのプレート猫の手噴火を使えばS176からダブル補正込で火力指数31590。
(いのちのたまの場合は1回目の火力は上がるが2回目以降が下がる。ジュエルは言わずもがな。)
この2匹で合計72343
1ターン目キュウコンを出して交代すれば、1ターン目は火力指数61130、2ターン目は珠を使って火力指数112464


・しおふき
火力は高いが如何せん覚えるポケモンのSが遅すぎるしCもバクフーンゴウカザルに劣る。
代わりに雨要員のニョロトノがなみのりと手助けを使える。
なみのりは貯水ブルンゲルならダメージを無効化できるので計算してみる。
控え目ブルンゲルのスカーフ雨潮吹きがS168からダブル補正込で火力指数37969。
憶病ニョロトノの眼鏡波乗りがS134(遅い)からダブル補正込で火力指数34147。
この2匹で合計72116
また、襷を貫通できなくなるが手助けを使った場合も計算してみる。
憶病カメックスの眼鏡手助け雨潮吹きがS143からダブル補正込で火力指数78026


・ふぶき
ふんかやしおふきより火力が低く、半減も多い。
憶病ルージュラの眼鏡吹雪がS161からダブル補正込で火力指数33818。
控え目ユキノオーのスカーフ吹雪がS168からダブル補正込で火力指数21330。
この2匹で合計55148


・じしん
いかりのつぼで火力を上げながらタイプ一致で使えるポケモンがいる。
陽気ワルビアルの鉢巻A6↑地震がS158からダブル補正込で114075
スカーフドーブルでやまあらしすればいかりのつぼは発動できる。
2ターン目以降は手助けなり重力なり襷潰しなりをすることも可能。
だが夢ワルビアルを持っていない。
誰か私に5世代でおしゃれボール入りの理想個体をください。

・だいばくはつ
技の威力の高さは随一。
最後に1匹以上残るようにする必要がある。
陽気ブニャットの鉢巻手助け猫の手大爆発がS180からダブル補正込で火力指数84797


●というわけで
面白そうなので大爆発を勝ちパターンとして考えてみた。
使用するポケモンは以下。

ポケモン特性性格持ち物努力値
キュウコンひでり適当適当適当
技:適当にまもるでもしてればいいよ
ブニャットどれでもようきこだわりハチマキA252 S252
技:ねこのて/なし/なし/なし
チェリムフラワーギフト適当きあいのタスキ適当
技:てだすけ/なし/なし/なし
ダーテングようりょくそようきノーマルジュエルA252 S252
技:だいばくはつ/なし/なし/なし

1ターン目はキュウコン→チェリムに交代する。
キュウコンの技はねこのてで出なければなんでもいい。
技選択すらしないし。
ブニャットの特性にまけんきがあるが、相手の交代を考えた場合検索時に指定する意味はない。


●シードを探してみた
勝ちパターン考察するだけでシードが見つからなければ意味がないので、
遥か昔にシードを検索してみた。
見つかった結果は以下。


初期シード:146D92BDCCBC2AD9
消費数:48(+レポートの針)
 
1人目
●つりびとのハンフリー (No.251,個体値:31) 57-74
トドゼルガ♀(アイスボディ)@メトロノーム (No.530)
    アイスボール/じしん/アンコール/のろい
        185-118-110-115-156-85
キングドラ♂(すいすい)@ハバンのみ (No.542)
    りゅうのはどう/たきのぼり/れいとうビーム/りゅうのまい
        171-136-103-149-115-105
バイバニラ♀(アイスボディ)@とけないこおり (No.363)
    れいとうビーム/こおりのいぶき/ミラーコート/こごえるかぜ
        167-103-105-151-149-99
ミロカロス♂(ふしぎなうろこ)@ナゾのみ (No.369)
    なみのり/じこさいせい/ミラーコート/あやしいひかり
        202-72-144-120-145-101

2人目
●パイロットのミカヅキ (No.299,個体値:31) 75-93
アーケオス♂(よわき)@ナゾのみ (No.551)
    じしん/だいちのちから/がむしゃら/げんしのちから
        150-160-76-180-85-162
リザードン♂(もうか)@カムラのみ (No.735)
    はらだいこ/みがわり/ほのおのパンチ/じしん
        174-137-98-116-105-141
ビークイン♀(プレッシャー)@オボンのみ (No.588)
    こうげきしれい/ぼうぎょしれい/はねやすめ/あやしいひかり
        166-100-157-90-143-60
チルタリス♀(しぜんかいふく)@パワフルハーブ (No.626)
    りゅうのまい/ドラゴンダイブ/ゴッドバード/じしん
        150-122-110-81-125-145

3人目
●ベーカリーのタマカヅラ (No.259,個体値:31) 94-112
ヘルガー♀(はやおき)@しろいハーブ (No.831)
    オーバーヒート/あくのはどう/ソーラービーム/にほんばれ
        150-99-70-162-100-161
モジャンボ♂(リーフガード)@ヤチェのみ (No.536)
    しぼりとる/くすぐる/パワーウィップ/じならし
        175-167-145-130-63-102
ドレディア♀(マイペース)@ラムのみ (No.781)
    ソーラービーム/フラフラダンス/あまえる/やどりぎのタネ
        161-72-122-146-95-126
ナッシー♀(ようりょくそ)@ヤタピのみ (No.335)
    サイコショック/くさむすび/ひかりのかべ/こうごうせい
        170-115-94-182-106-96

4人目
●パラソルおねえさんのコマ (No.253,個体値:31) 113-130
デンリュウ♀(せいでんき)@フォーカスレンズ (No.825)
    かみなり/きあいだま/シグナルビーム/パワージェム
        197-95-95-183-110-67
ガマゲロゲ♂(すいすい)@カゴのみ (No.295)
    りんしょう/ねむる/みずのはどう/ヘドロウェーブ
        180-105-116-138-104-94
ジュゴン♀(うるおいボディ)@カムラのみ (No.765)
    あまごい/ねむる/なみのり/たくわえる
        186-81-133-90-136-90
スターミー(はっこう)@おうじゃのしるし (No.861)
    なみのり/サイコキネシス/10まんボルト/れいとうビーム
        135-85-105-152-105-183

5人目
●けんきゅういんのウツケ (No.204,個体値:31) 131-148
ラプラス♀(ちょすい)@カゴのみ (No.882)
    ほろびのうた/ねむる/のしかかり/とおせんぼう
        205-105-145-94-147-80
デンリュウ♀(せいでんき)@フォーカスレンズ (No.825)
    かみなり/きあいだま/シグナルビーム/パワージェム
        197-95-95-183-110-67
プテラ♂(いしあたま)@こだわりハチマキ (No.854)
    ストーンエッジ/つばめがえし/じしん/かみくだく
        155-157-85-72-95-200
ドンカラス♂(きょううん)@いのちのたま (No.842)
    つじぎり/ドリルくちばし/ふいうち/でんじは
        207-194-72-112-72-91

6人目
●サイクリングのビルギット (No.275,個体値:31) 149-166
ガマゲロゲ♀(すいすい)@しめったいわ (No.645)
    あまごい/だくりゅう/だいちのちから/ヘドロばくだん
        180-94-95-137-95-138
マタドガス♂(ふゆう)@くろいヘドロ (No.614)
    ヘドロばくだん/かみなり/だいもんじ/シャドーボール
        172-99-140-150-90-80
アブソル♀(プレッシャー)@ピントレンズ (No.585)
    つじぎり/しねんのずつき/ふいうち/ばかぢから
        140-182-80-85-80-139
フリージオ(ふゆう)@オッカのみ (No.618)
    こごえるかぜ/ラスターカノン/ふぶき/ぜったいれいど
        145-63-50-147-155-172

7人目
●けんきゅういんのフトコロ (No.205,個体値:31) 167-184
ポリゴンZ(てきおうりょく)@オボンのみ (No.887)
    トライアタック/10まんボルト/シャドーボール/じこさいせい
        160-90-90-187-95-156
バルジーナ♀(はとむね)@たべのこし (No.851)
    みがわり/いばる/おしおき/はねやすめ
        206-85-146-67-149-100
ヘルガー♂(はやおき)@しろいハーブ (No.831)
    オーバーヒート/あくのはどう/ソーラービーム/にほんばれ
        150-99-70-162-100-161
ドラピオン♂(スナイパー)@するどいツメ (No.836)
    クロスポイズン/つじぎり/じしん/つるぎのまい
        177-142-130-72-104-115


ダーテングはSを削ってドンカラスのふいうち急所を確定で耐えるまでB振る余裕あり。


動画化する予定は今のところありません。
クリスマスにリア充爆発動画として上げるのは面白そう。

第4世代ID調整用初期シード検索ツール(WEB版)

作ってみた。
第4世代ID調整用初期シード検索ツール(WEB版)
今更なのは気にしてはいけません。
JavaScript使用。

全範囲実装済みは一部表IDのみ。
性格値からの計算は自分でやって。

DL版はこちら
http://blog.livedoor.jp/x_x_saki_x_x/archives/53827093.html

プロフィール
さき

ポケモンの乱数調整とかツールとか。サンムーン乱数調整できました。
Twitter→@water_blow

広告
最新コメント
記事検索