バトルステージでのフリーズバグについて

調べてたら稀にフリーズする条件らしきものが判明したのでその解説らしきものをば。
条件が特殊なのもあって報告数は多くはないようだけれど。
バトルステージ乱数の仕組みについてはこちら
らしきものなので実際この処理で行っているかは保証しません。


バトルステージでは基本的に同じ周でポケモンが重複しないように選ばれるが、出得るポケモンの種類は十分には多くないのでランク選択と出されたポケモンによっては重複せずに選ぶことができないことがある。
その場合、周内での重複を考慮せずに(プレイヤーと同じポケモンは出ないまま)ポケモンが選ばれる。
この重複なしでは選べないかの判定方法だが、出されるポケモンの決定方法が「最初に選ばれた番号から順番に範囲内で該当するまで調べる」という方法を採用している為か、最初に選ばれた番号に戻ってきたらそのように判定するという方法になっているよう。
これ自体にはバグの温床になり得る以外の問題はないのだが、バトルステージ乱数概要でも述べたがこの順番に調べる範囲の一番最後が欠けているのにも関わらず、最初に選ばれる番号はその欠けた最後になることもあるという不思議仕様となっている。
そのせいで最初にその欠けた一番最後の番号が選ばれた場合、範囲内をいくら調べても最初に選ばれた番号には最初以外調べられず、出得るポケモンが全て重複していると範囲内を1周してもループを抜けるための判定が行われないため延々とその範囲内を調べることになり処理が終わらなくなる。
というのがおそらくフリーズ現象の原因と思しきもの。

一応それっぽい図を下に載せておいたので参考程度にどうぞ。

BattleHall


意図的にやってみたい人(いるかはわからないけど)のために再現できるシード等の例をいくつか載せておく。
いずれも周の始め、ランクも最初からの前提。

・計算開始シード:0x000000A3
ドラゴンを最初から8連続で選択。
連打でいける。
7戦目までに出てくるタツベイ/フカマル/ハクリュー/ビブラーバ/コモルー/ガバイト/チルタリス以外を使用すること。

・計算開始シード:0x001B9E97
最初からエスパー→エスパー→はがね→はがね、と選択。
コイルを使用すること。
最短対戦数で実現できるものの1つ。


尚、これをしてもし何か不具合が起きたとかあっても私には責任は負いかねるのでそのつもりで。
多分ループしてるだけだし大丈夫な気はするけど。

ポケトレ多連鎖乱数用ツール

最新版(Ver0.1)はこちら。
http://blog.livedoor.jp/x_x_saki_x_x/archives/54963120.html



今更ながら本格的に作り始めました。
しかしながらVer0.0という。
http://www1.axfc.net/u/3275962?key=rensa

Microsoft .NET Framework 4をインストールする必要あり。
バグ報告とかはコメントでお願いします。
 
草の有無は履歴に反映されない仕様になってます。
40連鎖以降の閾値上限設定し忘れたので40連鎖でしにます。


仕様確認していない部分もあるのでどっか間違えてるかも。
使い方はまあ、そのうち書くかも。多分。 

バトルステージ乱数概要

今更の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の計算」でした。

プロフィール
さき

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

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