FREE SPACE |
トップページにのみ表示されるフリースペースです。バナーを貼ったり、ペットを飼ったり、工夫してお使い下さい。不要な場合はHTMLの編集で削除して下さい。 |
【ポケモン3世代】光るポケモン、光らないポケモン |
※注意※ 割とクソ記事です。 乱数調整と言えば色違い、色違いと言えば乱数調整みたいなとこってありますよね。(色乱数アンチの方、ごめんなさい…) 草むらから飛び出してくる子を光らせたり、伝説のポケモンを光らせたり、オダマキ博士にもらう子を光らせたり…乱数調整をすれば1/8192もなんのその、簡単に色違いに出会えます。 しかし、世の中には変わった人もいるものです。 「オダマキ博士を襲うポチエナって、光らないのかな?」 そんなことを考えるアホもいるんですね。
この記事では、普通じゃない色乱数をしたい人のために、RS FRLG Emでポケモンが光る箇所を紹介したいと思います。 叶うなら、この遺志を継ぐ者が現れることを…。 ◆ルビー/サファイア/エメラルド RSとEmで若干の違いは無いと言えば嘘になりますが、そんなに気にしなくていいでしょう。犬か熊か程度です。 ①オダマキ博士を襲うポチエナ/ジグザグマ 3g無駄色乱数のすべての始まり。 RSではポチエナ、Emではジグザグマがオダマキ博士を襲います。 ポチエナ/ジグザグマは普通のシンボル個体と同様にPIDと個体値が生成されています。IDは自分のものを参照します。 御三家のPIDが生成されてから138[F]程度後でポチエナ/ジグザグマのPIDが生成されるので、そこに合わせれば光ります。 また、御三家と同時に光らせることもできます。 ②ミツルがセンリから借りるジグザグマ 割と闇が深めなやつ。 ズレ調整をしようにも、画面から得られる情報が性別とH個体値だけです。ひたすら回数に任せて虱潰しに調べるほかありません。 PIDが生成されるタイミングはジムから出た直後。 ③ミツルが捕まえるラルトス めちゃくちゃ闇が深いやつ。 色判定が特殊で、PID生成の直前にミツルのTIDとSIDを生成し、色判定に使います。 生成タイミングは戦闘に突入する瞬間。「うわっ!」で待機すれば大丈夫です。 ただし、道路に不定NPCがいるおかげで、NPC消費があります。 (闇ポイントその1) そして、ジグザグマと違い、画面から得られる情報が一切ありません。性別は♂固定です。(闇ポイントその2) 成功例のフレーム調整を真似するのが一番だと思います。。。 ④バトルタワーの相手が使うポケモン(RS) 3匹同時に光らせることも(理論上は)可能です。2匹以上同時は成功者がいません。 PID生成は戦闘に突入する瞬間。ポケモンの種類決定→PID決定→ポケモン→…といった処理になっています。 っていうかバトルタワーの各種処理について触れたほうが良いんでしょうか。またいつか、そのうち、きっと、書く…かもしれません。 ⑤バトルフロンティアの相手が使うポケモン(Em) 施設ごとに多少の違いはありますが、どの施設でも光ります。簡単なのはタワー。 ポケモンごとに性格が固定されているので、出てくるポケモンの種類を合わせないといけないのがちょっと厄介なところ。 ⑥バトルファクトリーのレンタルポケモン(Em) 色理想三犬が3世代で手に入るのはここだけ! ファクトリーについては後日詳細な記事を書きますが、レンタル6匹の種類決定とPID生成のタイミングが分離されているので、厄介と言えば厄介。 ですが、ID次第で調整タイミングの許容範囲が広くなる可能性があり、下手をすれば1秒ズレても光ります。(これは性格が固定されている個体すべてについて言えます。後述するガラガラなんかがそうです) ⑦トレーナータワーのポケモン(Em) 未検証ですが、光ったという報告があるとかないとか。 ◆ファイアレッド/リーフグリーン 初期seedが不定なおかげで難易度が上がっていますが、その分光った時の「何やってんだろう」感は尋常じゃないです。 光らない間はもっと虚無です。 ①トキワシティの爺が捕まえるビードル ミツルラルトスと同じ処理です。 イベントを見終わった後に、どの初期seedを引いたかを野生で確認すれば、虱潰しの効率が上がります。 実はNPC消費が挟まらないだけミツルラルトスより簡単だったりする…。 ②ポケモンタワーのガラガラの幽霊 華麗なるサイドステップで有名なガラガラ。 性別♀固定、性格きまぐれ固定です。そのおかげで許容フレームはかなり広くなります。 ただし、色エフェクトが出ない上にわかりにくい色なので、注意しないと見逃します。 ③教えテレビで出てくるポケモン おそらく最高難易度クラス。未だ成功者おらず。(というか挑戦者すらいない) その理由は、教えテレビのメニュー画面で毎フレーム312[F]の乱数消費があるから。 どのタイミングでこの消費がストップするのかの計測から始めないといけません。 ただしポケモンごとに性格・性別が固定なので、許容フレームは広めです。 最高で3匹同時に光らせることが可能(…理論上は)。 以上が、僕が知る限りの無駄色乱数が可能な箇所です。 ちなみに、ストーリー道中のトレーナーが出すポケモンは光りません。 完全な自己満足の世界ですが、やってみると案外楽しいですよ。みなさんもやりましょう。 間違っている箇所や不足している点があればお教えください…。 スポンサーサイト
|
ぬおーでもわかる乱数調整 其の一 |
はじめに この記事はPokémon RNG Advent Calendar 2016 16日目の記事です Pokémon RNG Advent Calendar 2016 – Adventar この記事はいわゆる「ポケモンの乱数調整入門」の記事です。 ただし、「ぬおーでもできる」ではなく「ぬおーでもわかる」となっている通り、「乱数調整ができるようになる」ことを目指すのではなく、 ・「乱数調整とは具体的にどういう行為なのか」を理解し ですから、「仕組みとかどうでもいいから手っ取り早く理想個体が欲しい!」という方は、ぬおーさんではなくヤドンさんにお願いしてください。 前置きで難しそうな印象を受けるかもしれませんが、できるだけイメージがつかめるよう書いていくつもりですので、お暇があるなら読んでいってください。 あと、同じPokémon RNG Advent Calendar 2016にて、mizdraさんが同じような内容の記事を書いてくださっています。ていうかほぼ内容被ってますね。一応あちらは4世代メイン、こちらは3世代メインなので差別化はできています。 準備するもの 今回は特にありません。短めのお話だけなので。 Linear Congruential Generators さて早速本題に入ります。 まずは、「そもそも、乱数調整の『乱数』とは何ぞや?」 というお話から。 簡単に言っちゃうと、ランダムな数です。そのまんま。 ですが、この「ランダム」というのが難しいんです。プログラムにとっては。 だって命令された通りのことしかできませんから。 「1から6までの数字を適当に選んでよ」と言われても、「適当に」ができないんです。 でも、ゲーム内のNPCはランダムに動いてます。 草むらを歩いてポケモンが出てくるタイミングはランダムです。 出てくるポケモンの種類も、その性格・性別・個体値etc.もランダム。 相手の行動もランダム。技の追加効果もランダム。威張る自傷も麻痺バグもランダムです。 どうやって「ランダムな決定」ができないはずのプログラムが、こういったランダム性を作り出しているのでしょう? そこで出てくるのが「擬似乱数」です。 擬似乱数とは、本当の意味でランダムではないけれど、「乱数」に要求される性質をだいたいクリアしている数の並びのこと。 「命令された通りのことしかできないのなら、可能な限りランダムっぽく見える動きをするように命令すればいいじゃん」という発想です。 例えば… 0, 1, 2, 3, 4, 5, 6, 7 や1, 1, 2, 2, 3, 3, 4, 4 は、パッと見「ランダムな並び」とは思いませんよね? むしろ綺麗に並んでいるように見えます。では、 1, 6, 7, 4, 5, 2, 3, 0 これだとどうでしょうか。少なくとも、上の2つよりはずっと「ランダムな並び」に見えませんか? でも実はこれ、計算で作った並びなんです。 「前の数に5を掛け、1を足した数字を8で割った余り」を並べているんです。疑っている方はちゃちゃっと計算してみてくださいな。 …と、このような簡単な計算で、数字の並びをランダムっぽく見せることが可能なんです。 「前の数にAをかけ、Bを足し、Mで割った余り」を並べていくことで擬似乱数を作り出す方法を、 Linear Congruential Generators と言います。LCGと略されることが多いです。ちなみにLCGを数式(漸化式)で書くと x[n+1] = Ax[n] + B % M となります。上で使ったのはx[n+1] = 5x[n] + 1 % 8 です。さっきの擬似乱数列は、0の次に1に戻ります。 つまり、{1, 6, 7, 4, 5, 2, 3, 0}の並びを延々と繰り返すわけです。 8回計算を繰り返せば同じ数に戻るので、「周期が8である」といいます。 LCGは、A, B, Mの値を上手くとれば、周期がとても長くなります。 ポケモンの3世代、4世代で使われているLCGは x[n+1] = 1103515245x[n] + 24691 % 4294967296 です。周期は、Mと同じく4294967296です。四十二億九千四百九十六万七千二百九十六。とても長いですね。3世代のポケモンでは、このLCGを使って、ランダム性を作り出しているというわけです。 (4世代、5世代は別の種類の、もっと高度でかっこいい擬似乱数も使っています。 その名も「メルセンヌ・ツイスタ」。必殺技みたいですね) さて、「前の数にAをかけ、Bを足し、Mで割った余り」を並べていく、と言いましたが、 じゃあ、最初の数はどうするんだよ? と思った方もいらっしゃるのではないでしょうか。そうなんです。最初の数は、外から与えてやらないといけないんです。 これがいわゆる「初期seed」です。 ここらへんについては長くなり、実際に「乱数調整」を行う話に直接関係してくるので、また後の回で扱うことにします。( ただ、Emでは基本的に初期seedが0で固定ということだけ書いておきます。 乱数消費 上で「LCGを使ってランダム性を作っている」と書きました。 今回のお話の中で、一番重要なのがこれなんです。 「ゲーム中のランダムな事象はすべて擬似乱数の計算によって表現されている」 これさえ理解すれば、乱数調整について半分理解したも同然です。(残り半分は具体的な処理についてです) すべて、というのがポイント。ランダム要素があれば、そこには必ず"乱数消費"があります。 今回のシメは乱数消費についてです。 4世代、5世代の乱数調整ではぺラップを鳴かせまくりますが、あれも乱数消費のためです。 数列の、並んでいる数の1つ1つを数学用語で「項」と呼びます。 上で挙げた{1, 6, 7, 4, 5, 2, 3, 0}の乱数列を例にとると、第1項が1、第2項が6、…、第8項が0で、第9項で第1項と同じ1に戻ります。 擬似乱数列の項1つ1つのことを、"seed"と言ったりします。 seedは英語で「タネ」のことです。乱数を生み出すタネというわけです。 (本来は〈初期値として与える値 = 初期seed〉だけをseedと呼ぶらしいですが、ポケモン界隈では〈seed = 乱数列の各項〉という定義が広まっており、なおかつ乱数列の項に手を加えて乱数値を得るので〈seed = タネ〉と表すのが表現として不適だということもありません。なので、本記事では"seed"を上記の意味で使い、また、解説することにします。) 3世代の擬似乱数は0から4294967295の数の列だと言いましたが、ゲームを起動している間、内部値として保存されているのは、そのうち1つだけです。 わざわざ4294967296個の数値の並びをテーブルとして保存して今何番目か、なんてしなくても、次のseedもその次のseedも計算で出せますからね。 seedをLCGの計算式に放り込んで保存されているseedを次のseedに移すことを「乱数消費」または単に「消費」と言います。 例えるなら鼻をかむためにティッシュ箱からティッシュを取り出す感じのイメージですね。 消費が行われるのは主に乱数を使いたいときです。 ゲーム開始時に表IDと裏IDを決定する処理を例に見てみましょう。 裏IDが先に決まり、次に表IDが決まるようになっています。 初期seedを0番目として、n番目のseedをS[n]と呼ぶことにします。 内部値としてS[n]が保存された状態でID決定処理に入ると、まず乱数を消費。得られたS[n+1]から裏IDが計算(かっこよくいうと"生成")されます。 そしてさらにもう1つ乱数を消費。得られたS[n+2]から表IDを生成。これで終わりです。 図にするとこんな感じ。 ![]() このように、原則1回の生成処理につき、1回の乱数消費が行われます。 1回の消費で得られたseedが異なる2つの計算につかわれることはありません。 ちなみに、せっかく乱数消費して得られた乱数値が、何にも使われないこともあります。 3世代では画面を描画する処理と一緒に乱数消費が行われます。 ![]() ![]() ……2枚とも同じに見えますが、下の男の子が1ドット分右に動いています。 これで1消費されます。 描画は1秒間に約60回行われ、描画1回を「1フレーム」と数えます。60フレームにかかる時間≒1秒です。 つまり、3世代では1秒間に60回の消費が行われているのです。 4世代5世代では1消費にぺラップを「ア″----」と鳴かせる必要があると考えると、ものすごい速度です。 これも後の回で詳しく書きますが、3世代の乱数調整はこの描画ごとの消費に頼ることになります。 というか乱数調整をする際は描画ごとの消費以外に乱数が消費されず、されても誤差程度でわかりません。このことから、消費数の単位としてもフレーム(F)が用いられています。 さいごに まとめると、 ・ゲーム内のランダム要素は擬似乱数の計算で表現されている 以上、ぬおーでもわかる乱数調整 其の一でした。 書こう書こうと思いつつ先延ばしにしてきたのをようやく公開できました。 できる限り自分の中のイメージを引っ張り出して書いたつもりですが、わかりにくい・これは違う等の意見や誤字・脱字は遠慮なくご指摘ください。答えたり答えなかったり反映させたりさせなかったりします。 ここまで読んでくださって、本当にありがとうございました。 続きは近いうちに書きます。多分。次回は個体生成の過程を見てみる予定。 |
【Em乱数】バトルファクトリーの処理について | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
この記事はPokémon RNG Advent Calendar 2016 23日目の記事です Pokémon RNG Advent Calendar 2016 – Adventar ※注意※ こちらは乱数調整のやり方を解説する記事ではありません。 ■基本事項 -3gen乱数処理理解の基礎の基礎-
・3genで使われている乱数列(疑似乱数を作り出すための数列)は、 ・乱数種(乱数列の項)の上位4桁を取り出し、乱数として使用する。 ・乱数列は1Fごとに1つ進む。また、乱数を使ったときにも進む。(ただし乱数調整の際には後者はほとんど考慮に入れなくて良い場合が多い) ■ファクトリー乱数概要 Q.ファクトリー乱数って何を調整するの?
A.初めのレンタル6匹、相手の手持ち3匹(あとついでに相手トレーナー)を全部調整できます。
レンタル6匹と1戦目のトレーナー・手持ち3匹はすべて同時に決定。 ■処理の詳細 まず決定タイミングは、1戦目は控室に入って研究員が喋り始めた瞬間。 なので調整の際は、ここで待機してタイミングを合わせます。 2戦目以降は、「つづける」を選択した瞬間。当然ここで待機です。
次に、1戦目の決定処理について。まず初めにレンタル6匹が決定されます。
乱数値 % (その周で出てくるポケモンの総数) ポケモン決定の際、
・既に選ばれた番号と同じ(種族ではない)
のいずれかを満たすとスキップ対象となり、もう一度処理が行われます。(単に同じポケモンというだけではスキップがかからないので、勝数が増えるとレンタルに同じポケモンが2匹並ぶこともあります。)
レンタル6匹が決定したら、その次の乱数を使ってトレーナーを決定します。 乱数 % (出てくるトレーナーの総数) で決定されます。 連勝数とトレーナーのリストは以下の通りです。
この時のトレーナー決定にはスキップ処理はありません。1人目なので。
そして、トレーナーの手持ち決定です。
・レンタル及び既に選ばれたポケモンと同じ種族 レンタルと同じスキップ条件に加え、レンタルに並ぶポケモンとの種族被りを回避する感じです。 …と、ここまでが一度に決定します。 次に、2人目以降の決定について。 ・前回と同じトレーナー
はスキップ。
・主人公側の手持ち3匹のいずれかと同じ種族 がスキップ条件となります。 PID決定は、レンタルポケモンが レンタルポケモン選択画面に入る直前(6匹連続)、トレーナーの手持ちは戦闘に入る瞬間(3匹連続)です。 最後に、ダツラの手持ちについて。 1匹目生成→PID生成→2匹目生成→PID生成→3匹目生成→PID生成 という処理で決定します。また、スキップ条件が ・既に選ばれたポケモンと同じ種族 ・既に選ばれたポケモンと同じ持ち物
のみで、主人公側の手持ちと同じポケモンを出してくることもあります。 ■さいごに 以上、つらつらと処理を書き連ねてきましたが、実際にリストを見たほうが分かり良いかと思います。 ・参考サイト ポケットモンスター情報センター 2号館(おそらく今は見れません) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
【FRLG乱数】徘徊位置確認のススメ |
フレーム調整は完璧だったのに初期seedが違った… また数十分待機しなおしなのか… とお嘆きのあなたに 世間では3世代乱数は難しいと言われていますが、その中でも特にやる人がいないのがFRLG乱数。 RSやEmと同じように1/60秒の精度を要求されるのに加え、初期seed調整も要求されます。 これも1/60秒程度の精度が必要で、そのうえ4~5個の初期seedのどれを引くかわからないのですから、難易度は段違いです。 しかし初期seedに幅がある分、初期seedが0x0固定のEmや1分単位でしか変化しないRSよりも出せる個体の幅が広く、比較的理想個体を出しやすいという利点もあります。 前置きはこのくらいで。 いくらFRLGがEmやRSよりも個体の幅が広いとは言え、初期seed集めには割と労力が必要ですし、いくら集めても数分待機で優秀な個体がヒットすることは稀です。なので理想個体に近い個体を出そうと思ったら、数十分、時には一時間以上に及ぶ長期待機が必要とされます。いくら待機時間が長くとも、きちんと微調整をすれば±2Fまでは簡単に近づけられるので、試行回数を稼げばいつかは成功するのですが、冒頭に書いたように「フレームは合ったのに初期seedが違った」というのはかなり精神ダメージが大きいものです。 そこで、徘徊位置での初期seed確認が役に立ちます。 FRLGでは、クリア後に各地を三犬が走り回ります。ロード直後の三犬がいる道路も、当然乱数から決定されています。そこで、この決定位置を調べれば、競合する4~5個の初期seedのうち、どれを引いているのかをだいたいつかむことが可能となります。 HGSS乱数の徘徊位置確認と同じことですね。ただしHGSSと違い、初期seedが確定することは稀です。1匹分しか情報がありませんし、決定タイミングも一定にはならないためです。それでも効率は格段に良くなります。 さて肝心のやり方です。 まずは三犬を図鑑に登録しないといけません。登録していないとそもそも位置を見られませんからね。 先頭にLv.45くらいのポケモンを置いて、スプレーを使って草むらを走りまくりましょう。1時間もすれば出てくると思います。 準備ができたらあとはいつものように乱数調整をするだけです。 徘徊位置の決定は「つづきから」を押したタイミング。FRとLGで違うかもしれませんが、LGでは初期seedが決定してから連打すれば200F前後で徘徊位置が決定していました。 あらすじを見終わったら図鑑を開き、三犬の生息地を確認しましょう。徘徊位置の候補の中にある道路にいれば、目標の初期seedを引けている可能性が高いです。候補外だった場合はやり直しましょう。 Q.徘徊位置を計算できるツールは? A.昨日確認したところ、僕の使っているツールを置いていたブログが閉鎖されていました。なので、今現在入手手段はありません。 いちおうweb上で動くツールもあり、そちらはまだ使えますが、了承無くURLを貼るわけにもいかないので…。 時間があるときに作ります。たぶん。きっと。おそらく。 プログラミングできる方は自作してください。決定処理は [乱数値 % 25 + 1]です。計算結果の道路が徘徊位置です。 FRLGは三鳥やミュウツー、カントー限定のオシャボ野生ポケモンなどが捕獲できますので、ぜひとも挑戦してほしいと思っています。オシャボカウンターゲンガーとか、高個体自爆ミュウツーとか。意識の高さを見せつけてやれますよ。 質問のある方はコメントかツイッターまで。コメントは気づくのが遅くなると思います。 ではでは。 |
【Em乱数】ジャッジ爺は数学が苦手【小ネタ】 |
どうも、ついにコードフリークを買い、念願のエミュ環境が整ったので毎日解析三昧の夜綱さんです。 フロンティア内の戦闘乱数を調べていて、もう少しで実用に足るくらいまで情報がまとまりそうなのですが、なかなか思うように進まず…。気分転換がてらエメラルドのジャッジ爺の処理を調べてみました。 ●ちょっとだけ説明。 エメラルドから登場した個体値を教えてくれる人物、通称(自称してる人もいる)ジャッジさん。5世代からは最高個体値が複数個所あっても全て教えてくれる、6世代では個体値0の箇所も教えてくれると世代ごとに進化を続け、そのうち個体値を直接教えてくれちゃったりするんじゃないかと期待されているジャッジさんですが、初代ジャッジ爺は せっかく孵化乱数で6Vっぽいのが来たから確認しようと思っても ( ´,_ゝ`)「とくこうが…」 ( ´,_ゝ`)「とくぼうが…」 ( ´,_ゝ`)「とくぼうが…」 ( ´,_ゝ`)「すばやさが…」 ( ´,_ゝ`)「とくぼうが…」 ( ´,_ゝ`)「こうげきが…」 ( ´,_ゝ`)「とくこうが…」 ( ´,_ゝ`)「とくぼうが…」 と言った感じ。こんな初代ジャッジにイラついたみなさんのために、本当に偏っているのか調べてみました。 ●結論から言うと めちゃくちゃ偏ってます。気のせいじゃありませんでした。 具体的な処理を端的に言うと、 ・HとAを比較、大きいほうを残しておく。 ・同じ場合、乱数を発生させて、偶数なら前者(H)、奇数なら後者(A)を残す。 ・残ったほうとBを比較。 …以下Dまで繰り返す。(HABSCDの順。初代の能力の並びの名残) 中学数学が理解できる人ならわかると思いますが、Hに近い能力ほど出にくく、Dに近いほど出易いです。初代ジャッジはきっと小学校までしか出てないんでしょう…。こんなイライラ処理を作ってしまわないためにも、数学は勉強しておきましょうね。 |
Author:夜綱
Twitter:@sub_827
600準伝メガ縛りジョウト統一のシングル勢。
3g乱数も趣味程度にやってます。
不定期で逆1位杯を開いてます。興味のある方は是非参加してください。