ここから本文です

この知恵ノートを「知恵コレクション」に追加しました。

追加した知恵ノートはMy知恵袋の「知恵コレクション」ページで確認できます。

知恵コレクション」に登録済みです。

再登録しました。

追加に失敗しました。

ノートに戻り、もう一度やり直してください。

すでに1,000件のノートが登録されています。

新しく追加したい場合は、My知恵袋の「知恵コレクション」ページで登録されているノートを削除してください。

追加できませんでした。

ノートは削除されました。

ポケモンBW・ポケルス乱数

ライターさん(最終更新日時:2015/11/24)投稿日:

  • ナイス!:

    1

  • 閲覧数:4955

印刷用のページを表示する

 ポケルスは2世代から存在し、ポケモンを倒した時に手に入る努力値が2倍になる特殊なステータス異常で、戦闘終了後3/65536という非常に低い確率で感染するウイルスです。このウイルスは戦闘終了時に1/3で手持ちの上下のポケモンに伝染しますが、1日~4日経過すると抗体ができて、伝染しなくなります。

 

 このようにポケルスは非常に有用だが貴重な存在でしたが、今日ではwi-fiが発達し、2,3世代の時代に比べてポケルスを容易に入手することができるようになりました。

 更にBW2ではジョインアベニューで道場やカフェが登場したことにより、ポケルス無しでも短時間でポケモンの育成が可能になりました。

 

 しかし、「他人から貰ったポケルスは何となく怖い」「感染させるポケルスの種類に拘りたい」「ポケルス乱数やりたいけどエメラルドやHGSSを持っていない」という声が聞こえてきた気がしたのと、時代の流れに抗いたいという欲求を抑えられなかったのもあり、bulbapediapokerusの記事を元にBWでのポケルス乱数について調べてみました。

 

 以下の記事は乱数調整に関する基礎的な知識を前提にしています。

 この記事の中で使われる「乱数(R)」は、特別な断りが無い限りメルセンヌ・ツイスターで計算される32bitの個体値乱数のことを指します。性格値乱数ではないので注意して下さい。

 また、この記事の内容はROM解析によるものではなく、実機のブラックで野生ポケモンを倒した際の実験結果を矛盾なく説明できるモデルを推測したものであるため、その正しさを保障できないという点をご了承下さい。


 <2015年11月24日追記>

一部情報が間違っていたので青字で訂正しました。

 

 BWでポケルスに感染するか否かは、戦闘終了時にAボタンを押して戦闘を終了したタイミングに依存する乱数で決定されますので、この乱数をポケルス感染条件を満たすようにすれば成功です。



<戦闘に入ってから終了までの乱数の消費の流れ>

 

乱数は戦闘に入った直後に6つ消費されHABCDSの個体値決定。

 

 フィールドにいるポケモン1(トレーナーやモンスターボールも含むらしい)につき1秒当たり約60消費され、R×100>>320ならばポケモンが瞬きをする。

 

 「あっ 野生の ○○ が飛びだしてきた!」の後にAボタンを押した後の乱数R×(技の数)>>32で野生ポケモンの使って来る技が決定される。

 

  余談ですが、トレーナー戦の場合AIの賢さは「無効な技を選ばない」「直前に相手のポケモンが使ってきた技を覚えている」「一撃で相手を倒せる技があればそれを使う」「ステータス変化する技があれば最初のターンに使う」の4種類の有無によって決まる0x00xFの値で表されるようです。詳細は解りませんが、敵AIはもっと多くの判断を行っていると思われるので、AIの強さは4つのアルゴリズムの有無によって決定され、「無効な技を選ばない」などはそのうちの1つの代表と考えることができそうですが、推測の域を出ません。また、消費している乱数が一つかどうかも分かりません。

 

 ポケモンを倒して「○○は ○○経験値をもらった!」と表示され経験値バーが伸び終わった後にAボタンを押した後の乱数R>>160x40000x80000xC000(0x0000では感染しません)ならポケルスに感染して⑤へ。それ以外ならポケルスには感染せずに⑦へ。

 

 ポケルスに感染するポケモンの位置を次の乱数R×(手持ちのポケモンの数)>>32で決定。この位置のポケモンがポケルスに既に感染していたり抗体を持っていた場合は、感染しないとのことです。

 

次の乱数の上から2桁目の値(0xXXXXXXXXの赤い部分)でポケルスの株決定。次の乱数の上1byteでポケルスの株決定。この値の下4bitが0x0か0x8の場合は破棄して、それ以外の値になるまで乱数を1つずつ進めます。下4bitの値が0x0か0x8以外の数が得られたら、その数が0x01~0x0Fであれば下位4bit、0x11~0xFFであれば下位3bitがポケルスの株となります。ポケルスの株については下記で詳しく説明します。

 

 次の乱数R×3>>320ならポケルスが伝染。

 

 乱数を4つ消費。

 

 戦闘終了後のポケルス感染判定位置をR(1)として纏めると

 

α:R(1)でポケルス感染判定成功→R(2)で感染位置決定→R(3)で株決定(0x00x8だったら破棄して、それ以外の値になるまで乱数消費)R(4~)で伝染判定→R(5~),R(6~),R(7~),R(8~)

β:R(1)でポケルス感染判定失敗→R(2)で伝染判定→R(3),R(4),R(5),R(6)

 

 

<具体的なポケルス感染乱数調整の手順>

 

 プラスルツールを用意する(凄く便利なツールです。使う場合は製作者様に感謝しながら使いましょう)

 

 乱数消費数を適切な範囲(目安としては2000以上)で設定してR>>16が0x4000,0x8000,0xC000のいずれかとなる初期seedを探す。条件を満たす乱数位置をPとする。2連続で条件を満たす初期seedだと、フレーム合わせの精度が1/30秒になるので楽。

 

 起動時刻通りに起動してレポ針でtimer0が合っている事を確認する。場所はNPCなどによる性格値乱数の不定消費が無い場所推奨。私は調査の都合上タワーオブヘブンの3Fで行いました。

 

 甘い香りを押すと同時にストップウォッチを押して技決定までAボタン連打。A連打を一旦止めて、ポケモンを倒した後「○○は ○○経験値をもらった!」と表示され経験値バーが伸び終わってから、Aボタンを押すと同時にストップウォッチも止める(この時の時間をTとする)。出現させるポケモンや自分の手持ちポケモンは特性による表示がなく一撃で倒せるポケモン、使う技は等倍の技(条件が許せば地球投げなどの定数ダメージの技が最適)推奨。

 

 当然ポケルスは付いていない。そのまま再び甘い香りでポケモンを出現させて捕まえる。

 

 捕まえたポケモンの個体値を調べ、乱数列上のHPの生成位置を特定する。私はお馴染みRNG ReporterResearch機能でR>>27を表示させて調べました。HP生成位置は上記のβで言うところのR(7)なので、R(1)つまり6つ前の乱数でポケルス感染判定が行われていたことになります。このR(1)の位置をQとする。

 

 R(1)でポケルス感染判定に成功するような乱数を踏むために、「○○は ○○経験値をもらった!」での待機時間を調節する。この状態ではフィールド上に手持ちポケモンの1匹しかおらず1秒間で約60F進んでいるので、甘い香りを押してからAボタンで戦闘を終了するまでの時間T’T+(P-Q)/60で概算できる。当然ストップウォッチを押すタイミングやAボタンの連打速度が試行毎に違うことがあるので、多少のズレはある。

 

T’で実際に調整してみて、手持ちのポケモンがポケルスになっていれば成功。失敗していたら、同様の手順で2匹目のHPからポケルス感染判定位置を特定してT’を微調整する。急所に当った場合は約90Fぐらい早くAボタンを押すと良い。

 

 

<ポケルス伝染乱数調整>

 ポケルスを伝染させる為に何回も戦うのが面倒な人用。

方針としては2つ考えられますが、どちらも試していないので机上論です。

 

 

 1つ目の方法は、瞬きを目印としてその直後にAボタンを押したら伝染条件をM連続で満たすような並びに収まるような乱数列を持つ初期seedを検索する方法です。

 

 人間の反応速度の限界には視覚・聴覚の違いも含めて諸説あるようですが、実際に瞬きの直後にAボタンを押す→2匹目のHPからポケルス伝染判定の位置を特定するという手順で自分の反応速度のバラツキを確かめて(瞬きの位置と最速の場合のポケルス伝染位置の差をLとする)、それらが全て伝染条件を満たすように、

0x0R(1)0x028F5C28

0x0R(2)R(L)0xFFFFFFFF

0x0R(L1)R(LM)0x55555555

を満たす初期seedをプラスルツールで検索しましょう。M15ぐらいに設定すると、だいたい6Vより少し低いくらいの確率となりますが、計算時間はもっとかかると思います。

 

 目印にすべき瞬きは、予め乱数列から瞬きをする位置をリストアップして瞬き間の時間を把握しておいて、実際に録画して確認してみるといいでしょう。

また、反応速度は予測可能な場合、それを繰り返すと上昇することが考えられるので、伝染条件を満たすR(L1)の位置をもう少し早めに設定しておいてもいいかもしれません。

 

 

 

 2つ目の方法は、Aボタン連打で伝染条件をM連続で満たすような並びに収まるような乱数列を持つ初期seedを検索する方法です。

 

 この方法では乱数消費数の幅を余り多く設定できません。表示速度、漢字か平仮名か、ポケモンの鳴き声・名前・使う技の種類、特性表示の有無、色違いか否か、HPバーの減る速度、経験値バーの速度などが関係してくるので、これらをうまく調節してAボタン連打でM連続条件を満たす並びに収まるようにしましょう。

こんなことするぐらいだったら、普通にランダムで伝染するまで戦った方が楽な気がする。

 

 

<ポケルスの株>

 実はポケルスには16種類あります。これを0x00xF株とします。

 伝染する時は同じ株となります。また、株の種類によってポケルス入手時の抗体が出来るまでの感染日数が決まっています。その対応は以下の表の通りとなります。

 

感染日数
0x0,0x4,0x8,0xC 1
0x1,0x5,0x9,0xD 2
0x2,0x6,0xA,0xE 3
0x3,0x7,0xB,0xF 4

 

 各ポケモンにはポケルスに感染していないポケモンも含めてポケルス値というものが設定されており、1byteの数で表され、データ上0x000xFFの間の値を取ります。これを0xXYとすると、Xが株、Yが抗体が出来るまでの日数を表しています。

 

 Xは感染、もしくは伝染した時に決定されます。Yは感染、伝染した直後は0x0,0x4,0x8,0xC株なら10x1,0x5,0x9,0xDなら20x2,0x6,0xA,0xEなら30x3,0x7,0xB,0xFなら4となり(つまり4で割った余り+1)、1日経過する毎に1減ります。0になったら抗体が付き、それ以上は減りません。伝染した場合のポケルス値は伝染元と同じ値になります。

 

 ポケルスに感染していないポケモンのポケルス値は0x00です。

 

 また0x0株は存在しません。考えてみると解ると思いますが、もし0x0株が存在したら、1日経ったら抗体が付かずに完治してしまうからです。時々このようなポケルスが報告されることがありますが、恐らく改造によって得られたものでしょう。ただ、0x0株を正規に入手できる抜け道のような手法が存在することは否定できません。

 

 0x8株はBWでは入手不可能です。過去作に於いて株がどのように決定されているかの記述を見た事はありませんが、HGSS辺りで株決定位置が特定できれば0x8株が存在するかの検証は可能かもしれません。出典元のbulbapediaには0x8が存在しないと書かれていたのは5世代のみでした。


 また、ポケルスの株決定の方法から分かるとおり、ポケルスの株には入手確率の低いレアポケルスが存在します。0x1~0x7株と比較して、0x9~0xF株は1/31の確率でしか入手できません。

 

 

 上記のような仕様から、データ上0x000xFFを取りうるポケルス値も、実際にはポケルスに感染していない1種、抗体のついている15種、感染状態の39種類の計55種類の値しか取ることができず、それ以外は改造となります。

 

 

<BW2>

 ブラック22連続でR>>160x4000の初期seedで試してみましたが、Timer0ズレが酷くて面倒になって1回ポケルスが出て満足したので碌に検証していませんが、<戦闘に入ってから終了までの乱数の消費の流れ>の⑧の乱数消費数が4ではなく2であること以外は基本的に同じだと考えられます。

 

 BWでの検証にも言えることですが、伝染判定後の乱数消費4or2が何に使われているかは解りません。よって、条件によってはこの値が変化する可能性も否定はできません。

 

 この記事の<参考>を書いている時に気付いたのですが、smogon#769に戦闘終了後に+2or4の消費があると書いてあったので、BWでも+2になることもあるかもしれません。

 

 

<その他>

 bulbapediaのpokerusのページをそのまま読むとポケルス判定のR>>16が0x0000でもポケルスに感染することになりますが、上記の通り感染しません。よってポケルスの感染確率は、他の条件が無い限り3/65536です。

 また、感染の持続日数がs+s%4とありますが、恐らく1+s%4の書き間違いです。

 

 最後に未解決の課題を列挙しますが、今後調べるかどうかは解りません。

多分調べないと思います。

 

    0x8株が過去作で存在するか

    本当に感染位置のポケモンが既にポケルスに感染していたり抗体を持っていたりしたらそこで処理が終了するのか

    Aボタンを押して戦闘を終了してからポケルス感染判定の間に乱数の定数消費は無いのか

    伝染判定の閾値は本当に0x555555550x55555556の間か

    0x00x8株のスキップは無限に行われるのか(3連続までは確認した)

    伝染の際、上のポケモンと下のポケモンがどっちもポケルスに罹っており、かつ株が異なる場合、真ん中のポケモンはどちらの株になるのか

→並び順で上側のポケモンのポケルス値となります。

 

  

以上の情報は、下記のツール及びサイトを参考にさせて頂きました。

下記のサイトの方々、特に記事を訂正するきっかけとなったつぬさんに、感謝申し上げます。

 

<参考>

プラスルツール

RNG Reporter

Bulbapedia:Pokérus

Smogon RNG Research:#767,#769

ktxadのブログ:20100221日の記事

【エメループ】ポケモン ループ考察・解析スレ5【乱数調整】:443~445

Project Pokemon,PWT Download Tournaments:#107

tunu1223さんのツイッター

このノートについて質問する

このノートについてライターの方に質問できます。

※ライターの方から必ず回答をいただけるとは限りません

※別ウィンドウで開きます

この知恵ノートのライター

アップロード写真

グレード知恵ノートのグレード:1-3

dorara32さん

ピックアップ

【iPhone】修理交換の申込方法...
 ※追記※2015/1/30現在iPhone6及び6+が発売されたのを受け、情...
知っておきたい無線LANルーター...
知っておきたい無線LANルーターの知識と選び方iPod touchやPS...
Android向けアプリ Yahoo!ブラ...
基本的な使い方(メニュー・操作)便利な使い方オススメの使...
本文はここまでです このページの先頭へ