ポケモンひみつきち

お問い合わせ

ウルトラサン・ウルトラムーントップページへ戻る

トップページへ戻る


ポケモン(ウルトラ)サンムーン 孵化乱数調整QA


1.はじめに

この記事はPokémon RNG Advent Calendar 2017 17日目の記事です。


ポケモン or 乱数に関することについて記事を書くAdvent Calendarです。
他の方々の記事もとても面白いので興味がある人はぜひ読んでみてください。


本記事では、7世代(SM/USUM)の孵化乱数調整について記載します。
本日でUSUMが発売して丁度1ヶ月になります。(書き始めた日はそうでした)
発売日から本日までで孵化乱数調整がうまくいかない等の質問を100件以上頂きました。
私のサイトの説明が悪いというのは重々承知ですが、想定外の結果が出た時に何故想定外の結果が出たか考えようとしない(考え方が分からない)人が多いと感じました。
このページでは実際にあった質問を例に少し詳しい説明を記載します。

乱数調整に自信ニキの皆さんは当たり前のことが書いてあるので、適当に読み流してください。
間違っている部分やわかりにくいところ、誤字脱字警察の方々がいらっしゃった場合はご連絡ください。


以下のサイトを参考にさせていただきました。

http://blastoise-x.hatenablog.com/entry/2016/12/18/233100
http://xxsakixx.com/archives/54021240.html

2.乱数調整でよく使う単語

疑似乱数/乱数調整

コンピュータは「完全にランダムな数値」を出すことはできません。
例えばサイコロを振ることによって、出目を表示してくれるアプリがあるとします。
このアプリは、ランダムで出目を表示してくれますが、これはランダムに見えているだけで、実際は何かしらの計算に基づいた結果です。
この「ランダムに見える数値」が疑似乱数です。その通りですが、疑似的にランダムっぽい数値を算出しています。
そして、この疑似乱数を調整し、想定した結果を得ることが乱数調整だと私は認識しています。

ゲーム内でも野生のポケモンと草むら等でエンカウントする、ボールを投げて捕まる/捕まらない、色違いが出る/出ない、個体値等全て何かしらの計算に基づき行われています。
この仕組みを解明/理解し、演算を行い、結果をもとにゲーム内で想定した結果を得ることがポケモンで行われている乱数調整です。

厳選では、欲しい結果(個体)が出るまで何度も同じことを繰り返し、目的の個体を手に入れています。
仕組みが分かっており、人間の手でランダムな部分の調整が可能なため、出るまで何度も繰り返すのではなく、欲しい個体が出るように受け取ったり受け取りを拒否したりして、欲しい個体が出るように調整しようって感じです。

seed

これはランダムに見える数値を算出するための元(種)となるものです。
この種から個体値等のランダムに見える情報を計算しています。
そして都合のいいseedが出る条件に合わせることでほしい結果が得られます。

例えば、こうげきの個体値を決める際に使用される乱数列(seedを計算したもの)が「0d1238463」とした場合、7世代では乱数列を割った余りで結果が決まるため、
1238463を個体値のパターン数32(0~31)で割った余りの31が攻撃の個体値になります。
少し計算や知らなくても問題ない内部的な話なので、この例は理解しなくても問題ないです。

消費

seedを更新する(次のseedに進む)という意味合いで使用します。
例えば10消費の場合は現在いるseedよりも10個先のseedへ進むということです。
「卵を受け取ると30消費発生する」という場合は30個のseedを使用して卵が生成されているということです。

SV(TSV/PSV)

トレーナーは個々にSVと言われる値を保持しています。これはTSVと呼ばれています。
卵やポケモンにも個々に一つ、SVを保持しています。これはPSVと呼ばれています。
TSV,PSともに、0~4095の4096種類あり、野生のポケモンは出会ったとき、卵は孵った時にそのソフトのTSVとPSVが一致した場合、色違いになります。
TSV・・・Trainer Shiny Value
PSV・・・Pokémon Shiny Value

3.基本的な考え方

まずは基本的な考え方を書きます。
基本的な情報は以下の通りです。
基本的な情報/考え方

・このseedは孵化でしか使用されず、卵の受け取り、受取拒否以外では変動しない。
・データを消さない限りseedはリセット(再計算)できない/されない。
・いつ目的の個体が産まれるかを知る手順である。(後述)
・個体は1つのseedから生成されるわけではない。
・リセットを行えば、最後にレポートを書いたseedへ戻れる。


「間違った操作をしてしまいました。」や、「リセットをすれば最後にレポートを書いたseedへ戻れるか」等の質問がよく来ますが、seedは冒険の情報の一部でレポートを書くとともに保存されます。
リセットや電源OFFを行えば、前回の続きから遊べるようにseedも同じです。


seedはランダムに見える数値が並んでいます。
そして、1つのランダム要素を決める際に1度だけ使用されます。
1度使用されると次のseedへと進みます。

孵化乱数調整の場合

性別を決めるseed
性格を決めるseed
親からの個体値遺伝箇所決定に使用されるseed(遺伝する場所分、※被った場合は再計算)
基礎個体値を決めるseed(6箇所分)
光るお守り/国際孵化の色違い判定に使用されるseed
ボール遺伝判定に使われるseed


稀に1つのseedで1匹分の個体情報全てが決定されると思っている人がいますがこれは間違いです。
ツールの消費数の横の受取が25~40あたりになっているのは、上記の様々なseedの消費が行われているためです。
例

上記画像の場合は、ツールに入力したseedから0消費から計算が始まり、31消費かけて個体が生成されています。
0~30の31個のseedは個体生成に使われたため、次は31消費目から計算が始まります。
「409A0079,1474E27D,8293EDC8,9D4618A2」の31消費目は「CB08D77F,34ADB3BE,60E0904D,839BEB27」です。


下の画像は31消費目から生成される個体です。連続で受け取るとこの個体が出ます。今度は35消費かけて個体が生成されていますね。
例
ここで混乱している人が多いですが、
「409A0079,1474E27D,8293EDC8,9D4618A2」の31消費目=「CB08D77F,34ADB3BE,60E0904D,839BEB27」の0消費目です。

seedは勿論同じく「CB08D77F,34ADB3BE,60E0904D,839BEB27」になります。
どちらを使っても使用されるseedは同じになるため、わかりやすいほうを使いましょう。

少しわかりにくいかもしれないですが、
例えば、自分が今A駅にいるとして、先にはB駅C駅D駅と続きます。
A駅の3駅後はD駅です。D駅の0駅後は当たり前ですが、D駅です。
seedは無限に続く線路、消費は1消費につき、1つ駅を進めるくらいの感覚でいてください。
実際は孵化をさせたタイミングで数十消費もされるため、特急に乗っている感じですが・・・
そういう意味では卵の受け取り拒否は各駅停車ですね。
分かりにくい例で申し訳ないですが、少しでも理解に近づいていただければありがたいです。

7世代の乱数調整は習うよりは慣れたほうが習得は早いと思うので、この部分は実践しながらイメージを掴んでいただくのもいいかもしれません。

この場合は、「CB08D77F,34ADB3BE,60E0904D,839BEB27」をツールに入力し、0消費から検索するのが分かりやすいと思います。
検索範囲を表示したい消費数が出るように設定し、計算、表示されたseedを選択し右クリック→検索範囲へseedを入れるでできます。
当たり前の事なんですが、ツールは欲しい個体を検索するだけではなく、生まれた個体の検索も行うことができるので、自分がいまどこにいるかわからなくなったときは、何も持たせずポケモンを預け、産まれた個体値を検索してみましょう。
例

4.なぜ「受取」に出る消費数が毎回違うのか

この手の質問を何度か頂いたことがあります。
毎回、個体値や性格等ランダムで決められている部分の数は変わらないのに、なぜ消費数が変わるのかと言われれば確かに不思議かもしれません。
この問題は、処理のスキップとループ(繰り返し)の考え方が分かれば、すぐに解決できると思います。
ツールを触ったことがある人ならわかると思いますが、国際孵化やメタモンにチェックを付けると受け取り消費や全体の消費数が変動します。

この画像の場合、メタモン(異種間孵化)のチェックを外すと「受取」の値が1ずつ増えました。同種のポケモンと判断され、ボール遺伝処理が追加されたためです。
例

原因として、一つは処理がスキップされるために変動する、もう一つはループする(繰り返す)ために変動します。
処理がスキップされる例

・無性別/性別が1つのポケモン 性別の決定処理を行う必要がないためスキップ
・メタモン使用/異種間孵化 ボールの遺伝処理が行われないためスキップ


上記例を見ていただければわかると思いますが、条件にあてはまるものは計算をする必要がないためスキップされます。
そして、seedは一つのランダム要素を検定する度に一つ新しいものが使用されるという処理上、処理がスキップされた場合は次の処理でseedが使われるため消費が一つズレます。
これが「受取」の消費数がズレる原因の一つ
です。

もう一つの原因はループ(繰り返し処理)です。
ある一定の結果が得られる、もしくは一定の回数に達するまで同じ処理を繰り返すことです。
ポケモンで例えるなら国際孵化で色違いを粘る。みたいな感じです。
今回は運よく100匹で生まれたけど、次の色違いは500匹後だったみたいな感じです。
このいつまで続くかわからない、毎回結果が違う処理が孵化の計算をするゲームの内部でも起こっています。
この繰り返し処理は、親からの遺伝箇所決定、国際孵化、光るお守り等の処理で利用されています。
国際孵化では、色か否かの判定を最大6回繰り返します。光るお守りは最大2回繰り返します。合計すると8回です。

国際孵化のみ、光るお守りなしで卵を孵化した場合
このseedは色違いになる数値ですか?(このソフトのTSVと一致していますか?)という処理を最大6回繰り返します。
このseedは色違いになる数値ですか?→NO
次のseedに進み、このseedは色違いになる数値ですか?→NO
次のseedに進み、このseedは色違いになる数値ですか?→NO
次のseedに進み、このseedは色違いになる数値ですか?→NO
次のseedに進み、このseedは色違いになる数値ですか?→NO
次のseedに進み、このseedは色違いになる数値ですか?→NO
この場合、最後まで色違いになる数値にならなかったため、このままボール遺伝等の処理に進み、通常色の卵が出来上がります。
この色違いになる数値か否かを決定する処理で6個のseedを使用しているため、国際孵化だけで6消費になります。

しかし、途中で色違いになる数値と判定された場合は、それ以上色違いになるか判定をする必要がないためそのタイミングで処理が中断されます。
このseedは色違いになる数値ですか?→NO
次のseedに進み、このseedは色違いになる数値ですか?→NO
次のseedに進み、このseedは色違いになる数値ですか?→YES
3個目の確認で色判定が出た場合は4回目以降の処理を行う必要がないため途中で処理が中断します。
そして、4回目の色判定に使われる予定だったseedがボール判定等の後続処理に使用されます。
例

画像を見ていただければわかると思いますが、色違いと判定されたパターンの場合は、早く色違い判定が終わり、色違い判定に使われるはずだったseedが次のポケモンの性別決定等に使用されています。

これでは消費が一定になりません。(光るお守りがある場合は色の判定がもう2回増える)

次に親から遺伝する個体値の箇所を決定する処理です。
赤い糸の影響もあり、一番受け取りの消費数に幅を利かせている部分です。

個体値は次の様に決定されています。
個体値の決定処理

①親からの個体遺伝箇所の決定
どこ(HABCDS)の能力をどちらの親から遺伝するか決定
赤い糸を持っていない場合は3か所
赤い糸を持っている場合は5か所
被りなく、個体値が3 or 5箇所分決まるまで計算を行います。ここで消費数が膨れ上がります
②基礎個体値の決定
0~31の個体値となる数値をHABSDSの順番で決定
③基礎個体値に遺伝箇所を上書き
上書きにより基礎個体値決定の数は6固定になります。


恐らくですが、被りなく、個体値が3 or 5箇所分決まるまで計算を行うという部分もしくは、全体像がつかめていない人がいると思いますので、excelを利用してポケモンの個体を計算した例の画像を貼ります。
まずは、同種族のポケモンに赤い糸を持たせた場合の結果です。(コイキング2匹預けて片親に赤い糸と同じ状況)
国際孵化で、光るお守りを所持している状態です。
例

このツールの設定で計算されている部分は以下の画像の様に計算されています。
赤い枠で囲まれている部分がポケモンを構成する情報です。
受取拒否回数により、消費をずらした場合の計算を記載しています。(0消費~3消費)

例

受取拒否無の個体を基礎個体と上書き後を見るとこのようになります。(H-A-B-C-D-S順表記)
0消費目 :11-12-00-19-19-25 性別:♂ 特性:1 ゆうかん ボール:♂(先)
遺伝上書:11-♂-♂-♀-♂-♀ 性別:♂ 特性:1 ゆうかん ボール:♂(先)

ツールの個体情報とExcelの結果を比べてみましょう※基=基礎個体値
0消費目 :11(基)-31(♂)-31(♂)-31(♀)-31(♂)-31(♀) 性別:♂ 特性:1 ゆうかん
Excel0匹:11  - ♂ - ♂ - ♀ - ♂ - ♀  性別:♂ 特性:1 ゆうかん

1消費目 :31(♂)-19(基)-31(♂)-31(♀)-31(♂)-31(♀) 性別:♂ 特性:1 まじめ
Excel1匹:♂ - 19  - ♂ - ♀ - ♂ - ♀  性別:♂ 特性:1 まじめ

2消費目 :31(♂)-19(基)-31(♂)-31(♀)-31(♂)-31(♀) 性別:♀ 特性:1 きまぐれ
Excel1匹:♂ - 19  - ♂ - ♀ - ♂ - ♀  性別:♀ 特性:1 きまぐれ

3消費目 :31(♂)-31(♀)-31(♂)-31(♀)-03(基)-31(♀) 性別:♀ 特性:1 おだやか
Excel1匹:♂ - ♀ - ♂ - ♀ - 03  - ♀  性別:♀ 特性:1 おだやか

ついでに赤い糸なしのパターンも載せておきます。基本的な考え方は同じです。
赤い糸よりも親からの遺伝箇所が少なくなり、遺伝のスキップが起きにくくなります。

例

例


これで、ポケモンの個体値は1つのseedではできていない、そして「受取」の消費数が変動することが分かったと思います。
何か追加で疑問がある場合はTwitterやメール等でご連絡ください。

5.自TSVと他TSVの違い/他人のTSVと一致した卵を用意したのに色違いが産まれなかった

このタイプの質問もたまにいただきます。また、SV孵化を依頼して/依頼されて色違いにならなかったという話を小耳にはさみます。
原因の大半はツールのこの部分です。
例

この赤枠の部分に卵を作るソフトのTSVではなく、通信交換先のTSVを入れて計算してしまうことによって発生していると思います。
正しく使えばとても便利な機能なのですが、仕組みをある程度理解していないと「別のソフトに送って孵したのに色違いにならなかった!」ってことになります。
(別のソフトに送る場合は「設定」→「TSVリスト」で出てくるウィンドウに送り先のTSVを入力→SAVE→ツールの「他TSVで色違いを探す」にチェック)

これは、卵の持つPSVとトレーナーのTSVの関係性、実機とツールの内部的な処理をある程度理解して頂ければ解決すると思います。
卵を受け取るときに国際孵化もしくは光るお守り、もしくはその両方を満たしている場合、
色違いになるかどうかの判定が2~8回行われるという説明を「4.なぜ「受取」に出る消費数が毎回違うのか」で行いました。
卵は、PSVを1つしか保持しません。そしてそのPSVは最後に色違い判定が行われたPSVになります。

ツール/実機の仕組みは以下の通りです。
色違い判定の仕組み

色違いの判定を2~8回行います。
全ての判定で色違いにならなかったと判定された場合、最後に判定で使ったPSVを卵に保持させます。
判定の途中でPSVと卵を作ったソフトのTSVが一致した場合、その時点のPSVを卵に保持させ、色違い判定が残っていたとしても残りの判定を破棄します。


卵を作る際のフローチャートイメージを載せておきます。参考にしてください。
見方は「フローチャート 読み方」とかで検索すれば出てくると思います。

つまり、ツール上の卵を作るソフトのTSVを入力する欄に別のソフトのTSVを入力して計算した場合、ツールは判定中にTSVとPSVが一致したとして残りの判定を破棄しますが、実機上ではTSVとPSVが一致しておらず残りの色判定が行われ、最終的に全く別のPSVが卵に保持されます。
その卵を意気揚々と他のソフトに送って孵しても、別のPSVを保持しているため、色違いは産まれません。

SV孵化は卵を作ったソフトのTSVと、出来た卵のPSVが色判定処理で全て不一致と判定され、最後に保持したPSVと一致するTSVを持つソフトに卵を送って孵した場合に色違いになります。

この画像は、TSVが「3571」のソフトで国際孵化、光るお守りの条件で孵化を行った場合の例です。
C列の卵を作ったソフトは3回目の判定で色判定となり、以降の処理がスキップされます。保持するPSVは3571
E列の場合、卵を作るソフトのTSVは「3571」で送り先がTSVが「12」、この場合12を踏んでも卵を作ったソフトのTSVとは一致しないため、最終的なPSVは「2251」です。
F列の場合、卵を作るソフトのTSVは「3571」で送り先がTSVが「2251」、この場合、最後まで卵を作ったソフトのTSVとは一致しないが、最終的に保持するPSVは「2251」なので、卵を通信交換で送り、孵した場合は色違いになる。
例


もちろん卵を作ったソフトのTSVと卵PSVが一致していても、孵す前に別のソフトに送って、送り先で孵すと通常色になります。

6.目標近くの消費数までコイキングで代替できるのか

これはここまで読んでいただけた方々ならわかると思いますが、一応記載します。
ここだけ読んでもらうのもOKです。

結論から言うとできます。完。

しかし、孵化したいポケモンで計算した結果を単純にコイキングで代替すればいいというわけではありません。
下記条件でずれが発生するので、全て一致している場合はそのまま代用できます。
違う場合はコイキングで近くまで消費する用に計算→残りの消費数を目的の組み合わせにして再計算で調整してください。

ポケモンによるズレ

・国際孵化か国内孵化の違い
国際孵化はやらない時よりやる時の方が消費数が多くなるため、条件があってないとズレます。
・無性別/性別が一つしかない
上記の場合は、性別決定処理がスキップされるため、コイキング等の比率が存在するポケモンで代用するとズレます。
・特殊なポケモンによるズレ
バルビート、イルミーゼ、ニドラン♂、ニドラン♀、ケムッソです。
上記ポケモンは種族決定の特殊処理が入るため、消費数がズレます。
・同種族/異種族によるズレ
ボール遺伝処理でズレます。
例えば、メタモンとフカマルで計算していたのに、コイキングとコイキングを預け、代替した場合はボール遺伝処理が入るためズレます。
コイキング*ギャラドスや、バルビート*イルミーゼ等は異種間孵化扱いになります。

道具によるズレ

・あかいいとの有無
あかいいとは個体値を遺伝させる箇所が多くなるため、有と無では消費数がズレます。
・パワーリスト等のパワー〇〇
個体値の遺伝処理に割り込みが入るのでズレます。
・かわわらずのいし
両方の親にかわらずのいしを持たせると消費が1多くなります。
・ひかるおまもりの有無
これは持たせるものではないですが、持っていると毎回消費が二つ多くなります。


無理に条件を一緒にする必要はなく、どこまで消費したかわかればいいので一度に多く消費できる組み合合わせにして計算→近くまで消費をしてから目的の組み合わせで調整するのもありだと思います。

ちなみにツールで言うとこの辺を触ればズレます。
性別比を「♂7:♀1」→「♂1:♀1」にしてもずれません。(♀のみに変更や、無性別にした場合はずれます。)
例

7.最後に


この記事をきっかけに少しでも乱数調整に興味を持っていただける人が増えるとうれしいです。

質問などあれば下記にお願いします。 Twitterニコニコ生放送、メール等




更新中画像
ページのトップへ戻る