バトルステージ乱数概要

今更の4thバトルフロンティア。
バトルタワーとバトルファクトリーについてはあるけど他見ないなぁと思って調べてみた。
調べるのに使ったROMはSS。
細かい仕様は確認してないので大雑把に。

動画作りました。
http://blog.livedoor.jp/x_x_saki_x_x/archives/55574221.html


●仕組み
各対戦ごとにタイプ選択後、トレーナー→ポケモンの順に決まる模様。
乱数は通常のLCGを使っているよう。

・トレーナー
トレーナーの肩書きを乱数1つで決めた後そのトレーナーの名前を乱数1つ決めているっぽい。
肩書きはタイプやランクによって変わっていそうだけどどこかにデータか何かないのかしら。
トレーナーの名前はmod 300した値を用い、バトルタワーと同じ表で該当するまで+1をする感じに見えた。
これ明らかに偏るよね。
ケイトの時は乱数1つのみ消費される。
重複時の処理は確認してない。

・ポケモン
こちらもタイプを無視し、該当する合計種族値のポケモンを乱数1つ用いてmod nで決めた後、タイプ条件を満たすまで+1を繰り返している模様。
これも偏るとかひどくね?
この決め方の通り相手トレーナーのポケモンはトレーナー依存ではない模様。
重複時は+1継続。
重複等により条件を満たすポケモンがいない場合は一時的に重複判定を切ってるっぽい。
その後乱数2つ消費(バトルファクトリーの記述見る限り表裏IDかしら)した後、該当する性格になるよう恒例の性格値決定。
性格は予めポケモンごとに決まっている。
色違いの場合は再決定?
その後乱数4つ消費、何に使っているかは不明。

重複時の+1だが、mod (該当する合計種族値のポケモンの数-1)で計算されているようで、範囲内最大のIndexは最初からそのものの値でない限り選ばれないというバグ仕様があるよう。
これが原因の1つであると思われる、特定条件下で処理が無限ループに入り操作が利かなくなるバグが存在する。
バグの詳しい(?)説明について纏めた記事はこちら


ということでトレーナー無視して1周分の出されるポケモンの予測を行って実際に出来たわけだが、相手ポケモンの性別が予想と違ったりしたので手元の処理含めどこかがおかしい。
ただポケモンの種類の予測はできたので、消費数とか大まかな部分は合ってそう。

特性、色違いに対する処理、相手がケイトの時の処理は確認してない。


レベル決定方法とかは調べてません。
一応、Lv100の時の場合は調べれば出てくるかと。
そのうちLv100以外の場合も調べてみたいが、さて。


~余談~
建物内の動くNPCは参加ポケモンを選ぶ所で乱数消費することにより影響の排除が可能。

タイプ選択時にステータスを見ることができ、ペラップ選択時には任意の乱数消費ができる。
つまり、中断せずに各対戦前に相手ポケモンを任意に調整できるのはペラップだけ!

日替わり乱数を使ってるバトルタワーはともかく、通常乱数を使ってるバトルファクトリーとかは必勝法探すの面白そうだなーと。
そのうちやってみる、かは知らない。


あ、後日これ使ってアンノーンで170連勝しました。

【艦これ】イベント経過報告

イベント海域クリアしたので適当な記録をば。
さすがに適当すぎじゃね?

●E1
ルート固定もあるので楽だった。
ゲージ破壊はきっかりボス6回目で達成。

●E2
羅針盤と夜戦が面倒。
ゲージ破壊はきっかりボス6回目で達成。

●E3
鋼材が減る。
道中大破撤退時に持ってなかった浜風引いた。

●E4
ダメコンなしでやったらボス前辛い。
それ以外は楽。

●E5
戦艦メインの編成なのに理不尽な一撃大破率が高い。
鋼材が枯渇する。辛い。
途中ボスA勝利で谷風を引く。

●他
イベント期間中にデイリー建造でZ3を入手。
これにより現時点での未所持艦娘はBismarckのみに。

DPtコイントス初期シード検索ツール

作ってみた。
http://www1.axfc.net/u/3209269?key=cointoss
追加データ(CoinTossData.bin):Googleドライブ

Microsoft .NET Framework 4をインストールする必要あり。
追加データは1.5GBあるのでそのつもりで。


●仕組み
第4世代ID調整用初期シード検索ツールみたいのをやってみたかっただけ。
CoinTossData.binに65535Fまでの初期シードをコイントスの結果が昇順になるように並べ替えたデータを入れて、あとは似たような感じ。
ついでに条件により参照しない検索方法も付けてみた。
でも絶対後者のが使われる。


●機能
画像は面倒なので省略。

起動後からコイントス以外でコイントス完了までにMTを消費していない場合のみに対応。
フレーム数も65535Fまで。それより先はコイントス出来る状況でやる人いないでしょ。
そのままでも使えるが、オプションとしてCoinTossData.binを.exeと同じフォルダに置けば、検索範囲がある程度広いコイントス8回以上のものに対しCoinTossData.binを参照して検索するようになる。
8回とかの基準はだいたい適当。

・検索列:コイントスの結果をスペース等を入れずに入力
表:o、O、o、O、○
裏:x、X、x、X、×
に対応。
64文字まで。

・他
見りゃ分かる。分からん奴とかおらんやろ。
条件が緩すぎるまま検索しようとするとアラートが出るようにしてある。
検索結果は初期シードだけですが今後もフレーム数等を表示する予定は全くありません。


~おまけ~


DPtコイントスの結果はMTの最下位1bitだけを取ってるということで、不要な部分の計算省けそうだなーとか考えてた時のメモ。
更新後のテーブルの値の各bitに適当な文字を割り当てて、それらで最下位bitがどう表せるのか計算した結果、見ての通りの6箇所のbitのxorを取れば良いという結論になった。
で、これを.bin作成時にもツール内部にも組み込んでみた。

という訳で、正解は「MT最下位bitの計算」でした。

乱数調整用ツール計算高速化の工夫

LCGとMTの性質によるものをば。


◆LCG
最初知った時は目から鱗だったり。

●あるシードからあるシードまでの消費数の計算
1つずつ進めて一致するまででも計算できるが、これ使えば消費数が多くなっても高速に計算できる。
リンク先いけば実際に使ってる例も分かるかと。
消費数の多いXD乱数にも使えるのかしら。(やったことないけど)

●n個先のシードの計算
消費数が多くなると1つずつ進めるのは時間がかかるが、これを使うと消費数が多くなっても計算量はさほど増えない。
あるいはnを特定の値で使うのなら、r[k+n]=An*r[k]+BnなるAn、Bnを予め求めておけば以降シードを1つ進めるのと同様の計算量で計算できる。
後者はBW2孵化乱数用ツールで実装済み。


◆MT
テーブルの計算減らす以外の方法あったら教えて。

●必要部分のテーブルのみ計算
参照する部分がn、n+1、n+397とかなので、例えばMTの最初6つだけ必要ならn=0~5で必要になる部分、すなわち第0テーブルの0~6、397~402の部分だけ計算できればよい。
第0テーブルの決定方法から実質的に0~402だが(いい方法あるのかもしれんが)それでも全部計算するよりこの場合でも計算量402/624くらいにはなるんでなかろうか。
まあ、必要になったときにテーブル更新するようにしてれば勝手に実現できてるはず。
BW2孵化乱数用ツールで実装済み。

●テーブル自体計算しない
32bitの初期シードを設定すれば乱数列が決まるので、欲しい乱数列が出る初期シードを予め計算しておく。
初期シードは2^32通りしかないので変なことしてなければ1日あればまあ「準備として」初期シード計算できるんじゃないのかなー。
第5世代の消費数個体値指定(1/2^30)とか、対応する初期シードがあまり多くならずになおかつ良く使う奴に。
第5世代個体値乱数列初期シードリストにいくつか載せてある。


とりあえず知ってるのとか適当に挙げるとこんな感じ。
他なんか良さげなのあるかしら。

性別決定の有無で性格値決定箇所が変わらない確率

なんか気になったのであかいいと所持時に性別決定の有無で性格値決定箇所が変わらない確率を計算してみた。
本当に某箇所が性格値なのかどうかは知らんのでそもそも意味なさないものかもしれんが。
性格値ではないそうで。まあ、意味無い訳じゃなさそう。
パワー系アイテムは持たせていない場合のみ考える。


性別決定の有無で最初の遺伝箇所決定が1つずれる。
詳しくはこちら→XY孵化仕組み検証


で、正確な確率計算しようと思ってたのだがいろいろ面倒そうだったので適当にちょちょいとシミュレーション的なことをしてやってみた。
ちゃんとした計算もそのうちやる、のかなぁ。
暇な人暇つぶしに計算してみて。

まあ適当にざっと10,000,000の試行を何十回かしてみると全部26.2...%的な結果が出た。
まーよーするにそれくらいの確率なんでしょう。
プログラム間違えてたら知らない。


あ、これだけです、はい。

プロフィール
さき

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

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