この記事はSSSRC Advent Calender 2022 9日目として書かれています。

9日目はB4の笹岡がお送りします。

 

突然ですが、皆さんはポケモンが好きでしょうか?

11月に新作のスカーレット、バイオレットが発売されましたね。いまだに前作のガラル地方に幽閉されている私ですが、前作では度々ランクマッチをしており、その都合上、ポケモンのダメージや素早さの仕様について詳しくなりました。そこで、技術的な話をした方が楽しいと思うので、今回はオーバーフロー(上限値をこえること)について書きたいと思います。お見苦しい文章を書くことになりますが、ご容赦ください。

 

初めに、ポケモンのパラメーターにおける上限値について説明します。

基本的にポケモンのパラメーターの上限値は基本的に2^n(2のn乗) - 1であることが多いです

種族値の上限は255だし、個体値は31、努力値は一つのパラメーターに対し255までという設定がなされています。

この値を超すことができないように設定されているので、種族値、個体値、努力値においてはオーバーフローは起きないのですが、大きい値の掛け算によってパラメーターが構成されていると超えてしまうことがまれにあります。

たとえば、ダメージ計算です。

 

  • ダメージ計算のオーバーフロー

 

ポケモンのダメージの仕様は

 

(ダメージ計算式) = [{(攻撃側のレベル × 2 ÷ 5 + 2 の小数点以下切り捨て)
             × 物理技(特殊技)の威力 × ランクアップ、ダウンを含めた攻撃側のこうげき(とくこう)の値 ÷ ランクアップ、ダウンを含めた防御側のぼうぎょ(とくぼう)の値  の小数点以下切り捨て}
             ÷ 50 + 2 の小数点以下切り捨て]
             × 乱数(0.85, 0.86, …… ,0.99, 1.00 のどれか) の小数点以下切り捨て

 

ランクアップ = (n + 2)/2 (nはランク数、n = 0~6) 

ランクダウン = 2/(n + 2)   (nはランク数、n = 0~6)

 

となっています。余談ですが、この計算式の乱数とAIの仕様を利用してポケモンソウルシルバー、ハートゴールドの裏ボスのレッドをレベル100のコイキング(とても弱いポケモン)で倒す動画が有名ですので、ここに貼っておきます。

 

 

話を戻すと、ダメージの計算式は65535までしか処理できないようになっていて、レベル100の高火力ポケモンに対して、レベル1の性格補正で耐久が弱くなっているポケモンに対して技を打った場合、その値を超し、バグが起きるはずです。

しかし、バグが起きないように防止用に以下の式が用意されています

 

(ダメージ)=(ダメージ計算式)%65536 (%は65536で割ったあまりを示す記号)

 

ということは、(ダメージ計算式)が65536の倍数の場合、ダメージは0となります。

 

これはポケモンブラックホワイトから続く仕様となっており、検証動画もあるので、貼っておきます。

 

ちなみに、オーバーフローではないですが、値が小さすぎてダメージ計算式が0になる場合はブラックホワイトではダメージ0、XY以降の場合はダメージ1になるように調整されていたはずです。(間違っていたらごめんなさい)

 

 

 

これが新作では適用されているか分からないので、新作を買ったら、検証してみたいところですね。

 

ただ、これは対戦上ではレベル50で統一されるため、残念ながらランクマッチに影響するようなものではありません。

しかし、ランクマッチでも利用可能なオーバーフローの仕様もあります。

それはトリックルームという技を使用したときの仕様です。

 

  • トリックルームのオーバーフロー

 

そもそもトリックルームという技は素早さが遅いポケモンから先制できるようにする技です。

通常、素早さの実数値を参照して大きいその値が大きいポケモンから先制できる(先制技や後攻技は除く)のですが、トリックルームにおいてはそれぞれのポケモン素早さをそのまま参照しているわけではありません。

トリックルーム下の素早さの値は以下の式で計算されています。

 

(トリックルーム下での素早さ)=(10000 - ランクアップ、ダウンを含めた素早さの値) % 8192

 

ということは素早さの値が1808で(トリックルーム下での素早さ)=0で最遅、1809で(トリックルーム下での素早さ)=8191で最速となるわけです。

そうすると、ランクアップ最大で4倍、追い風という技でさらに2倍の8倍の素早さまで上げられ、

レベル50で素早さが一番低いツボツボ(実数地22)のトリックルーム下での素早さは1786となることを考えると、

素早さの値が227~277(最速のポケモン、レジエレキの最速値)であれば、どんな遅いポケモンにも先制できることになります

 

種族値でいうと、155以上の素早さであればトリックルームの影響を受けないようにすることができるわけです。(当初はそんなに早いポケモンを作る気は無かった?)

実際の検証動画も貼っておきます

 

 

 

実際には能力のランクアップと追い風を打つ余裕は無いので、試合では使えませんが...

 

  • さいごに

 

ポケモン好きの人であれば、もうストーリーをクリアしてやることが無いという人もいるのではないでしょうか?その時はこういったポケモンの仕様というものに目を向けるとストーリーだけでなく、ランクマッチ、バグ探しといった今までには無かった楽しみ方ができるようになるのではないでしょうか。皆さんのパルデア地方での楽しいポケモンライフを願っています。