再発明の名人

渋茶一杯、いかがですか

【ゴンベ】IDから当たりの木を特定する【あまいかおりがする木】

f:id:czlz:20211231140917j:plain
当たりの木のみ1%の確率でゴンベが出現

【12/19訂正】ポケモンWiki上の記述を鵜呑みにしたことにより途中の計算および結果が誤っていたため修正した。

まえがき

BDSPでゴンべをあまいかおりがする木から入手したい*1。だが、シンオウ中に散らばった木のうち当たりの木にしかゴンべは出現しないため、当たりの木を特定しなければ作業量が多くなりすぎてしまう。

実はダイパ原作やプラチナではトレーナーのIDから当たりの木(の一部)を簡単に特定できた。

今回のダイパリメイクでは数多くの設定が原作に基づいているため、当たりの木も原作と同様に設定されているのではないかと仮定した。

結論から書くと特定はできないのだが、不便な場所にある木にあまいミツを塗るかどうかの目安にはなる得る。

以下あくまでも仮説の段階であり、Switch上では簡易検証中である。 【12/31追記】偶然の可能性が否定できないが筆者の環境にてゴンベの出現を確認

原作DPtにおける仕様

ポケモンWiki該当ページによると、原作ではゲーム上に表示されないID(いわゆる裏ID)を含めた32bitの内部トレーナーIDを8bitずつ区切り、それぞれを10進表記して21で割った余りに対応する下のリスト記載の木が当たりの木だった。

  • 0: 205番道路 南
  • 1: 205番道路 北
  • 2: 206番道路
  • 3: 207番道路
  • 4: 208番道路
  • 5: 209番道路
  • 6: 210番道路 南
  • 7: 210番道路 北
  • 8: 211番道路
  • 9: 212番道路 北
  • 10: 212番道路 南
  • 11: 213番道路
  • 12: 214番道路
  • 13: 215番道路
  • 14: 218番道路
  • 15: 221番道路
  • 16: 222番道路
  • 17: 谷間の発電所
  • 18: ハクタイの森 外側
  • 19: タタラ製鉄所
  • 20: ソノオの花畑

なお、重複した木が当たりとして選ばれた場合、リストの順番で次に位置する木が追加で当たりの木として選ばれる。

原作では内部IDの32bitのうち下位16bitがそのまま10進表記され(いわゆる表ID)ゲーム中に表示されていたため、計算により当たりの木を2か所特定することができた。

原作における例

トレーナーカードに表示されたIDが39427だとする。

操作 裏ID前半 裏ID後半 表ID前半 表ID後半
(1) 2進表示して分割 ???? ???? ???? ???? 1001 1010 0000 0011
(2) 10進に変換 ??? ??? 154 3
(3) 21で割った余り ?? ?? 7 3
(4) 対応する木 210番道路 北 207番道路

このように4本の当たりの木のうち2本を特定できた。

BDSPにおける仕様【仮説】

ポケモンWikiIDのページによると、第7世代以降ゲーム画面上で表示されるIDは、32bitの内部IDを106で割った6ケタの10進数である。

ここで

 内部ID = 10^{6} \times Q (商) + (表示されるID)

であるため、

 内部ID = (5^{6} \times Q) \times 2^{6} + (表示されるID)

と整理できる。

上式より内部IDを2進表記したときの下位6ビットに不明な商Qは関与しないことがわかる*2

つまり、

 (内部IDの下位6ビット) = (表示IDの下位6ビット)

が成立する。

さて、当たりの木のうち1か所は内部IDの下位8bitで特定できる。

すなわち当たりの木を特定するには下から7番目と8番目のbitが不明であるため、表示IDを2進変換して得られる下位6bitの先頭に仮の2bitを付与する。

仮定して得た4つの8bit数をそれぞれ21で割り、余りに対応するリスト上の木の少なくとも1つは当たりの木である(と考えられる)。

BDSPでの計算例

  1. トレーナーカードに表示されたIDが839427だとする
  2. 839427を2進表記すると、11001100111100000011
  3. 下位6bitを取り出して000011
  4. 先頭に2bit分付加して00000011、01000011、10000011、11000011
  5. それぞれ10進変換して3、67、131、195
  6. それぞれ21で割った余りは3、4、5、6
  7. リスト上で対応する207番道路から210番道路南までの4本の木のうちいずれかが当たりの木

上記の計算例を見てお気づきの方もいるかもしれないが、実のところ計算結果は元の数を21で割った余りからの4連番(ただし余りであるため20の次は0)となる*3

つまり、実際に余りを計算するのは1回だけでよい

計算ツール

2進と10進で相互変換できれば何でもよい。筆者は下記サービスを利用した。

ケタ数が足りない場合は先頭を0で埋めること。

【12/19追記】英語でも構わなければこのツールにて一発で判明する↓

補足情報

隠れた仕様

  • ポケモンは木にミツを塗った時点から6時間後から24時間後にかけて出現する
  • ミツを塗った時点でポケモンの種類は確定するが、性別は確定しない(=ミツハニー♀の厳選が可能)
  • 同じ木に連続であまいミツを塗ると同じグループのポケモンが選ばれやすくなる。

出現率

特定の木に連続してミツを塗ることが無いようにした場合、当たりの木とはずれの木それぞれでのポケモンの出現率は以下のように整理できる。

ポケモン 当たりの木 はずれの木
ミツハニー 32% 22%
ミノムッチ 16% 11%
チェリンボ 15% 7.5%
ケムッソ 11.5% 29%
エイパム 8% 5.5%
カラサリス / マユルド 4% 14%
ヘラクロス 3.5% 1%
ゴンベ 1% 0%
(出現なし) 9% 10%

何度かミツを塗ってケムッソカラサリス(パールならマユルド)が出やすいと感じた場合、残念ながらその木ははずれの木である可能性が高い。


*1:単にゴンベが欲しいだけなら地下大洞窟で粘ったほうがはるかに楽である

*2:式の前半部分を2進表記すると、000000で終わる数となる

*3:下からn番目のbitを0から1とする操作は、元の数に2n-1を加える操作に等しい。26=64=21×3+1、27=128=21×6+2、26+27=192=21×9+3だから結果的に連番になる