https://docs.google.com/spreadsheets/d/1DnnlO1nOq_IIVooU0FSJkpAGtmmbJqCS/edit#gid=514069218
speedrun.comにはシナリオのトレーナーの手持ちポケモンの技や性格、能力値などのデータがありますが、実は第三世代のみ日本語版と海外版で異なるところがあり、それに対応するために日本語版の敵トレーナーの手持ちのデータをエクセルにまとめました(何回か確認作業はしましたが、すべて手作業で計算、入力したため高確率で間違いがあると思いますがご了承ください...)。
何が違うのかというと、日本語版と海外版では敵トレーナーの手持ちポケモンの性格が異なります。
1.なぜ日本語版と海外版で性格が異なるのか
ポケモンには実際に見ることのできる能力値(実数値)のほかに、隠しパラメータとして種族値、努力値、個体値などがありますよね。実は他にも隠し要素が存在しており、その中の1つに性格値(PID)と呼ばれるものが存在します(言葉は似ていますが性格と性格値は異なるものです)。32ビット(4バイト)の値で、16進数で0x00000000~0xFFFFFFFFの範囲からなります。
性格値が何に利用されるかは世代によって異なるのですが、第三世代では主に性格、性別、特性の決定に利用されます(他にも色違い判定やパッチールの模様などにも使われますが、RTA的には無関係なのでここでは触れません。)
シナリオのトレーナーのポケモンの性格値は、ポケモン名の文字コードとトレーナー名の文字コードとトレーナーの性別によって決定されます。つまり、言語が違ってくれば使われる文字コードも違ってくるために性格値が日本語版と海外版で異なってしまうのです。
第三世代におけるポケモンの性格は、性格値を25で割ったあまりの数によって決定されるため、性格値が異なれば当然性格が異なってくるというわけです。
逆に言えば、トレーナー名と手持ちポケモン及び手持ちの数、そしてトレーナーの性別が同じであれば性格値は同じであるため、出てくる場所が違ったとしても性格は同じになります。例えば、アクア団やマグマ団のしたっぱのトレーナー名は「したっぱ」と設定されていますが、したっぱの手持ちと性別が同じであれば、それらは全員同じ性格になります。例を挙げれば、したっぱが男でポチエナ1匹だけだとしたら、ポチエナの性格は全員ずぶといになります。
他にも、2回目と3回目に戦うマツブサは手持ちの構成が同じであるため、どちらも性格は一致します。
2.なぜ日本語版と海外版で性別と特性は同じなのか
日本語版と海外版で使われる文字コードが違うために性格値が異なり、その結果性格が日本語版と海外版で違うものになるということはわかりました。
ではもう1つ疑問が生まれます。なぜ性格値に関わってくるはずの性別と特性は日本語版と海外版で同じなのかということです。
1.で説明したシナリオのトレーナーのポケモンの性格値の決定方法をもっと具体的に言うと、
終端FF以降を除いた「1~n体目のポケモン名の文字コードの合計値」と「トレーナー名の文字コードの合計値」×nを足し合わせた値を1バイト左にシフトし、最後に0x78(女の場合)または0x88(男の場合)を足す。ただし、ダブルバトルのフラグ(ふたごちゃん等)が有効になっているトレーナーは男女問わず0x80を足す。
という作業によって決定されます。少し難しいですね... ただ、注目してほしい箇所は1つで、シナリオのトレーナーのポケモンの性格値の下位1バイトは0x78、0x80、0x88の3パターンしかないということです。
第三世代のポケモンの性別は、性格値の下位1バイト(通称性別値)と、ポケモンの種類ごとに設定されている「性別を決めるための閾値」の2つによって決定されます。要するに、シナリオのトレーナーのポケモンの性別は性格値の下位1バイトの0x78、0x80、0x88と、そのポケモンのオスメス比だけで判定されるということです。これはシナリオ上ではトレーナーの性別が男か女か、またはダブルバトルのフラグが有効か否かで決まるため、言語による違いはないということです。
第三世代のポケモンの特性はもっと簡単で、性格値が偶数なら特性1、奇数なら特性2になります。シナリオのトレーナーのポケモンの性格値は下位1バイトの0x78、0x80、0x88からわかるようにすべて偶数のため、必ず特性1になります。当然これは先ほどと同様に言語による違いはありません。
まとめると、言語によって文字コードが異なるために性格値が異なるが、性別と特性に関してはそのトレーナーが男か女か、またはダブルバトルのフラグが有効か否かの部分で決まる部分で判定されるため、言語による違いは出ない、ということです。
3.性別と特性に関する補足説明
ここからは少々マニアックな話になるので、興味ない方はスルーして結構です。
性格値の下位1バイトはトレーナーの性別が男なら0x88、女なら0x78になると2.で説明しました。ではなぜそのように設定されたのでしょうか。
通常プレイをしていても気づく方は多いと思うのですが、トレーナーが出してくるポケモンの性別は大抵トレーナーの性別と一致するようになっています。
2.で説明した通り、第三世代のポケモンの性別は、性格値の下位1バイト(通称性別値)と、ポケモンの種類ごとに設定されている「性別を決めるための閾値」の2つによって決定されます。この「性別を決めるための閾値」がポイントになってきます。
性別値が閾値より小さければメス、大きければオスになるのですが、ポケモンのオスメス比が1:1の場合、閾値は127になります。0x88、0x78は10進法に直すとそれぞれ136、120になるので、
トレーナーが男の場合・・・性別値(136)>閾値(127)⇒ポケモンの性別はオス
トレーナーが女の場合・・・性別値(120)<閾値(127)⇒ポケモンの性別はメス
になるというわけです。これがトレーナーの性別と手持ちポケモンの性別が大抵一致している原理です。
「大抵」一致...ということはもちろん例外が存在します。ポケモンの中にはオスメス比が1:1だけではありません。例えば「最初にもらえる御三家はメスが出にくくて貴重」みたいな話を聞いたことがあるかもしれませんが、御三家のポケモンは♂:♀=7:1になっており、オスの方が出やすいのです。当然、オスメス比が違ってくれば性別を決めるための閾値も違ってきます。
具体的に言うと♂:♀=7:1の場合、閾値は31になっています。つまり、トレーナーの性別が女の場合でも、
が成立してしまい、トレーナーは女でも手持ちポケモンはオスという現象が起きてしまうのです。
実際に男主人公を選んでライバルをハルカにした場合、使用してくるキモリやジュプトルがオスになっています。ただし、残りの手持ち2体のポケモンはオスメス比が1:1なのでそれらはメスになっています。面白いですね。
ハルカ以外にも、例えばエメラルドのトクサネジムにいるサイキッカーのヒカリ(最初のエリアにいる右側の女トレーナー)が持っているユンゲラーはオスになっています。これも、ユンゲラーのオスメス比が3:1(閾値63)であることが原因です。
そしてもう1つ、ダブルバトルのフラグが有効になっているトレーナーは男女問わず性格値の下位1バイトが0x80になるというのも、トレーナーの性別と手持ちポケモンの性別が一致しない例になります。
ダブルバトルのフラグが有効になっているトレーナーとは、ふたごちゃんなどの2人で1ペアになっているトレーナーです。RTA的に言えば、手持ちが1体ならスルーできるトレーナーと言ったほうがわかりやすいかもしれません。
0x80は10進法に直すと128になります。つまり、オスメス比が1:1(閾値127)であっても、
が成立してしまい、トレーナーが女であっても手持ちがオスになってしまいます。
例えば、RTAでは無駄トレになりますが、113番道路(ハジツゲタウン東側の火山灰が積もっているところ)にいるふたごちゃんのナナとネネが繰り出すパッチールはどちらもオスになっています。
なぜダブルバトルのフラグが有効なトレーナーの場合、性格値の下位1バイトが0x80になるよう設定したのかは私にはよくわかりません。
特性についての補足説明はあまりないですが、シナリオに出てくるトレーナーのポケモンの特性がすべて特性1ということは、マグマッグの特性は必ずマグマのよろいになるし、ロゼリアの特性は必ずしぜんかいふくになるし、ビリリダマの特性は必ずぼうおんになります。ありがたいですね。
speedrun.comに載っている敵データを見ると、橋下のユウキのマグマッグの特性がほのおのからだになっていますが、これは特性2なので間違いです。恐らく私と同様に手作業で1から入力したために間違えてしまったのでしょうね。他にもあの敵データにはちょくちょくミスが見受けられるので実際に自分で手を動かして調べてみましょう。
4.最後に
日本語版と海外版でポケモンの性格だけ違うというのは知っていたのですが、なぜ違うのかというのは知りませんでした。
こういったゲームの内部のことは私はまったく知らなかったのですが、TwitterでRosenwaldtさんや夜綱さんにたくさん質問したりツールを頂いたりして理解を深めることができました。おかげで日本語版のエメラルドのトレーナーデータをまとめることができました。本当に感謝申し上げます。
以下を参考にしました。
Mooba's Emerald any% glitchless Trainer Info - Google スプレッドシート
情報提供者
Rosenwaldtさん、夜綱さん