状態異常、状態変化、場の状態。交代や「バトンタッチ」をすると何が保持されて、何がリセットされ、何が上書きされるのか。海外の解析サイトと実機検証により、徹底的にまとめてみました。
★…交代しても引き継がれる
☆…「バトンタッチ」なら引き継ぎ
◆…0b00000000にする
◇…手持ちのデータからロード⇔セーブ
- 場のポケモンのステータス
- ◇ポケモンの名前(NN)【5byte+1byte】
- ◇ポケモンの外見【1byte】
- ◇ポケモンの中身【1byte】
- ◇種族値【各1byte(計6byte)】
- ◇タイプ1/タイプ2【各1byte(計2byte)】
- ◇持ち物【1byte】
- ☆能力ランク【各1byte(計7byte)】
- ◇親のID【2byte】
- ◇経験値【3byte】
- ◇個体値【2byte】
- ◇努力値【各2byte(計12byte)】
- ◇技の種類【各1byte(計4byte)】
- ◇ポイントアップ投与数とPP現在値【各1byte(計4byte)】
- ◇現在HP【2byte】
- ◇実数値【各2byte】
- ◇(経験)レベル【1byte】
- ◇なつき度【1byte】
- ◇状態異常フラグ【1byte】
- 眠り(の解除ターン)【3bit】
- ☆状態変化フラグ【第1世代は3byte/第2世代は5byte】
- ◆連続攻撃回数【1byte】
- ★混乱の解除ターンカウント【1byte】
- ☆猛毒の継続カウント【1byte】※バトンタッチ対象
- ◆金縛りカウンター【2byte】
- ◆アンコールの解除ターン【1byte】
- ☆滅びの歌のカウント【各1byte】※バトンタッチ対象
- (Gen1:★/Gen2:◆)最後に繰り出した技
- (Gen1:★/Gen2:◆)最後に算出されたダメージ
- (Gen1:★/Gen2:◆)最後に算出された命中率
- ★場の状態【1byte】
- ★天候【???】
- リファレンス
場のポケモンのステータス
◇ポケモンの名前(NN)【5byte+1byte】
ポケモンのニックネーム。
◇ポケモンの外見【1byte】
- 「へんしん」や「みがわり」「ちいさくなる」の時に変化する。
→外見が小さくなるのときに「ふみつけ」ダメージが2倍になる(※2019/05/05追記:小さくなる使用時に身代わりを使っていても「ふみつけ」は倍ダメージになる。身代わり中も小さくなる状態は保持されている)
→「へんしん」と「みがわり」は外見とは別に状態変化フラグがある - 対戦とは無関係だがタマゴもこのシステムがあるからこそ成り立っている。
◇ポケモンの中身【1byte】
- 第2世代の『ふといホネ』などの専用装備は中身を参照する
(第3世代以降は外見を参照する)
◇種族値【各1byte(計6byte)】
- HP
- こうげき(「ふくろだたき」ダメージ計算)
- ぼうぎょ(「ふくろだたき」ダメージ計算)
- すばやさ
- とくこう
- とくぼう
◇タイプ1/タイプ2【各1byte(計2byte)】
このデータが求められるところは以下の通り。
- プレゼントのダメージ計算
- タイプ一致
- タイプ相性
- タイプ強化アイテムの対応
- ジムバッジのダメージ補正(経験値獲得戦闘のみ)
タイプ1が1つしかないポケモンはタイプ2に同じタイプが設定されている。タイプ1=タイプ2となる場合はステータス画面にタイプ2の表示をせず、タイプ一致やタイプ相性の計算処理を2度行わない。
第2世代の「テクスチャー」や「テクスチャー2」でタイプが変わる場合もタイプ1=タイプ2になる。第1世代の「テクスチャー」は第5世代の「ミラータイプ」と同じ効果であり、タイプ1とタイプ2をまるまる相手からコピーする。
◇持ち物【1byte】
第1世代の被捕獲度が充てがわれているため、タイムカプセルで第1世代に転送しても持ち物は保持されたままになる。
メールの場合はアイコンが変わる→メールの中身のデータまでは記憶できないはずなので通信交換で弾かれる?(要確認)
☆能力ランク【各1byte(計7byte)】
ステータスランク(補助効果)のこと。ランクの変化毎に通常値に対して再計算するため、データは保持されている。
- こうげき
- ぼうぎょ
- すばやさ
- とくこう
- とくぼう
- 命中率
- 回避率
◇親のID【2byte】
対戦では関係ないが、経験値獲得戦闘でバッジ無しでも命令を聞いてくれるかどうか、また、獲得経験値が1.5倍になるかを識別するために使われる。命令についてはトレーナー名を一致させる必要はなく、ポケモンとトレーナーのIDが一致すれば命令を聞いてくれる。だからこそIDの状況再現が周回プレイで役に立つ。
◇経験値【3byte】
対戦には無関係だが、プレイヤーサイドの第2世代は経験値ゲージが表示される。
◇個体値【2byte】
- こうげき&ぼうぎょ個体値
- すばやさ&とくしゅ個体値
「めざめるパワー」のタイプと威力を算出時に参照する。「へんしん」で変化する。
◇努力値【各2byte(計12byte)】
- HP
- こうげき
- ぼうぎょ
- すばやさ
- とくこう
- とくぼう
◇技の種類【各1byte(計4byte)】
- 技1
- 技2
- 技3
- 技4
「へんしん」や「スケッチ」「ものまね」で変化する。
◇ポイントアップ投与数とPP現在値【各1byte(計4byte)】
上から2bit(22で0~3の4パターン)が前者、下の6bit(26で0~63の64パターン)が後者。
- 技1
- 技2
- 技3
- 技4
「へんしん」や「スケッチ」、第2世代の「ものまね」で変化する。第1世代の「ものまね」でPPは変化しない。
◇現在HP【2byte】
第1世代のみ、現在HPと最大HPの差が(256の倍数-1)の時は体力回復技が失敗する。
◇実数値【各2byte】
- こうげき
- ぼうぎょ
- すばやさ
- とくこう
- とくぼう
火傷による《こうげき》補正、麻痺による《すばやさ》補正とジムバッジ補正(経験値獲得戦闘のみ)を加味したものがここに格納される。攻撃順判定、ダメージ計算で用いられるデータはこれになる。
なお、第2世代で「バトンタッチ」で場に出るときに麻痺と火傷の状態異常の計算を何故か忘れて場に出してしまう仕様がある。また、これまで勘違いしていたが、どうやら火傷と麻痺の補正はダメージ計算や攻撃順決定の時だけ補正をかけているわけではないようだ。
◇(経験)レベル【1byte】
対戦中ではダメージ計算は勿論のこと、第2世代の一撃必殺技の命中に関わる。また、「ちきゅうなげ」「ナイトヘッド」「サイコウェーブ」のダメージ計算でも用いられる。
◇なつき度【1byte】
「おんがえし」や「やつあたり」の威力の決定に関わる。経験値獲得戦闘であれば、『プラスパワー』『ディフェンダー』『スピーダー』『スペシャルアップ』で戦闘中に変化させることも可能であるため、戦闘中のレベルアップでその都度変化している可能性が高い。
◇状態異常フラグ【1byte】
- ひんし?
- まひ(06)
- こおり(05)
- やけど(04)
- どく(02)
- ねむり(01[旧20])
- 〃
- 〃
状態異常が通常(0b00000000)でなければ、「ねむる」以外の技による状態異常の上書きを無効にする。
<不明点>麻痺したポケモンが「はかいこうせん」の硬直中なら眠らせられる(第1世代のみ)
麻痺状態のポケモンが「はかいこうせん」の反動で硬直中の時は眠り状態に上書きできる。
(仮説)
これは私の推測だが、ポケモンが技を繰り出せるかどうかの判定において麻痺よりも「はかいこうせん」の反動で動けないとなることが優先され、結果として麻痺しているものとみなされずに眠りになるのではないかと思われる。
<不明点>瀕死?
「ふくろだたき(9A)」の処理。瀕死だけ無視すれば良いはずが、状態異常にかかっているポケモンも攻撃参加できないのは何故なのだろうか?状態異常の1番上のがbitが瀕死だと納得がいく。
ちなみに状態異常を受けたポケモンが交代時の「おいうち」で瀕死になり、『ふしぎなアメ』で瀕死から回復すると瀕死前の状態異常が治っていない。通常の瀕死の時は状態異常を通常に戻すが、交代時の「おいうち」で落ちた時はその処理がカットされている。
眠り(の解除ターン)【3bit】
- 2の3乗で8パターン(0〜7)。
- 眠りの解除1→0のときに起きる。
- 第1世代:(眠り状態のときに技選択できないので)目覚めと同時に技は繰り出せない。
- 第2世代:目覚めと同時に技を繰り出す。
- 眠り状態にする技を繰り出すとき、眠りの解除ターンもランダムで決定*1
(※第2世代のトライアタックの追加効果の火傷・麻痺・凍りがランダムであるのと同じイメージ) - 1ターンは確実に行動できない(初代は即起きするが反撃不可)
- 第1世代:眠らせる技(0x20)の解除ターンは1~7(コロシアム2は1~3)。
⇒実質行動てきないターンは1~7。 - 第2世代:眠らせる技(0x01)の解除ターンは2~7(モバイルコロシアムは2~4)。
⇒実質行動できないターンは1~6。
- 第1世代:眠らせる技(0x20)の解除ターンは1~7(コロシアム2は1~3)。
☆状態変化フラグ【第1世代は3byte/第2世代は5byte】
効果コードの順番で辿ると3→4→5→1→2。通常交代するときは後続に引き継がず、それぞれ0b000000に上書きする。バトンタッチの場合は状態変化2(丸くなる)を除いて引き継ぐ。状態変化1のメロメロや状態変化3の拘束はバトンタッチで引き継ぐと聞いたことがないが、念のため確認する必要がある。
☆状態変化1
- メロメロ(0x78)バトンタッチ不可
▲不自然にバトンタッチ非対称が入ってる謎 - 転がる(0x75)行動指定
- 堪える(0x74)行動指定
- 滅びの歌(0x72)※バトンタッチ対象
- 見破る(0x71)※バトンタッチ対象
- 守る(0x6F)行動指定
- 呪い(0x6D)※バトンタッチ対象
- 悪夢(0x6B)※バトンタッチ対象(交代先眠りのみ)
猛毒と違ってバトン先が眠りでない場合は効果消滅。再度眠らせても意味なし。
悪夢ダメージ判定時に状態異常が眠りでないなら悪夢フラグ回復ではなさそう(以下参照)
www.youtube.com▲『なんでもなおし』を使用して眠りは回復しているが、悪夢のフラグが回復していない。
※寝言バトンタッチで眠りに悪夢を引き継ぎ悪夢ダメージを受ける⇒薄荷の実発動
(↑眠る→吠える⇒薄荷の実発動阻止で眠るを使ったけど薄荷をまだ持っている状況を再現して実験)
◆状態変化2 ←バトンタッチ不可
- 丸くなる(0x9C)
- (なし)
- (なし)
- (なし)
- (なし)
- (なし)
- (なし)
- (なし)
◆状態変化3
- 混乱(0x31)※バトンタッチ対象
▲なんで白い霧(0x2E)と気合溜め(0x2F)とばしたし?? - 空を飛ぶ(0x2B)行動指定
- 穴を掘る(旧0x27-1)←拘束跡地(0x2A)行動指定
- 2ターン技(0x27)行動指定
- ひるみ(0x1F)行動指定
- 拘束(0x2A)←前作の連続攻撃跡地(0x1D他)バトンタッチ不可
- 暴れる(0x1B)行動指定
- 我慢(0x1A)行動指定
ネオ・グリーン(狂戦士スリープの真実)…とも一致してそう。
┗ まだ俺のバトルフェイズは終了してないぜ
┗ 甘いぞ遊戯!リバースカードオープン!
☆状態変化4
- 宿木の種(0x54)※バトンタッチ対象
- 怒り(0x51)行動指定
- 破壊光線の硬直(0x50)←(なし)跡地 行動指定
- 身代わり(0x4F)←破壊光線の硬直跡地(0x50)※バトンタッチ対象
▲ 「バトンタッチ」するとポケモンの外見がバグる - (なし)←身代わり跡地(0x4F)
▲ここに混乱(0x31)※バトンタッチ対象 が入るとバトン周りが理解できる - 気合溜め(0x2F)※バトンタッチ対象
- 白い霧(0x2E)※バトンタッチ対象
- ヨクアタール※バトンタッチ対象
※前作とフラグの順番が異なる。
☆状態変化5
- 黒い眼差し(0x6A)※バトンタッチ対象
- 道連れ(0x62)
- ロックオン(0x5E)※バトンタッチ対象
- アンコール(0x5A)マルチターン
- 変身(0x39)バトンタッチ不可*2
- (なし)←前作のリフレクターフラグ跡地(0x41)
▲【推測】(なし)ではなく第2世代の麻痺の《すばやさ》ダウン ※バトンタッチ対象 - (なし)←前作の光の壁フラグ跡地(旧0x40)
▲【推測】(なし)ではなく第2世代の火傷の《こうげき》ダウン ※バトンタッチ対象 - 猛毒(0x21)※バトンタッチ対象
◆連続攻撃回数【1byte】
技によってここの回数を指定する。ここを改造でいじると255回連続攻撃も出せるらしい。
- 2~5ターンからランダム:ミサイル針 etc.
- 2回固定:二度蹴り・骨ブーメラン
そもそも第1世代の状態変化フラグ3に「連続攻撃」があること自体が謎である。ただし、第1世代と第2世代は連続攻撃の仕様が異なり、第1世代は同じダメージを繰り返し、第2世代は攻撃毎にダメージを再計算する。
★混乱の解除ターンカウント【1byte】
混乱の判定フラグと解除ターンは別々に管理している。状態変化3フラグの混乱のフラグが立っているとき、相手からの技による混乱の判定フラグと解除ターンの上書きを禁じる。
- 2の8乗で256パターン(0~255)。
- 1→0になったときに上の状態変化3フラグの混乱フラグを解除。
- 混乱状態にする技を繰り出すとき、混乱の解除ターンもランダムで決定
- 1ターンは確実に混乱(≠自傷)する(初代も即回復しないはず)
- 第1世代:技による混乱(0x1B,0x31,0x4C)で解除ターンは2~8
- 第2世代:
- 技による混乱(0x1B,0x31,0x4C,0x76)で解除ターンは2~5
- 持ち物の破壊の遺伝子による混乱の解除ターンは上書きなし
- 場から引っ込めた時にこのカウントは0b0000000にならない(第2世代重要)
技の効果で第1世代なら1〜7、第2世代なら1〜4ターンに上書きされる。ただし、このカウントは金縛り、アンコール、滅びの歌のように通常の交代では0に上書きされない。
また、持ち物の『はかいのいでんし』『にがいきのみ』や『きせきのみ』の効果ではこのカウントを上書きしない。判定フラグのみを書き換える。
そのため、『はかいのいでんし』の混乱は前のポケモンが混乱しておらず、解除ターンが0のとき、混乱判定のチェックで0→255にオーバーフローして255ターン混乱する。0→0にはならず、1→0でもないので混乱も解けない。
☆猛毒の継続カウント【1byte】※バトンタッチ対象
ダメージは15/16で打ち止めと何処かで聞いたような気もする(NPC戦闘で要確認)。
- 場から引っ込めた時にこのカウントは0b00000000にもどる(バトンタッチなら継続)
GB世代の猛毒は状態変化。毒以外にも火傷や第1世代の宿木の種のダメージも増加する。悪夢と違って健康なポケモンにバトンタッチしても猛毒のフラグと継続ターンを引き継ぐ。健康な状態から毒or火傷状態にすると再発かつ継続する。
毒毒は
- 状態異常フラグの毒
- 状態変化5フラグの猛毒
を上書きする効果になっている。①が成功しないと②の処理に移らず、失敗する。威張ると同じで2つの命令を同時に実行できない。
◆金縛りカウンター【2byte】
- 「かなしばり」で1〜7で上書き。
状態変化フラグの括りと独立している様子。
<不明点>「かなしばり」と『ポイントアップ』
赤緑青と違ってピカチュウ版以降の作品は『ポイントアップ』を使用した技のPPが0になっても「わるあがき」を繰り出せるはずなのだが、金縛り状態で封じられている技と『ポイントアップ』を使用した技のPP0の技のみになっても「わるあがき」が繰り出せないという仕様がある。
『ポイントアップ』未使用の技のPP0と金縛りされた技の組み合わせなら「わるあがき」が出せる。
◆アンコールの解除ターン【1byte】
「アンコール」の効果で2~6ターンに上書き。これを255ターンにしたのが後の作品の『こだわりハチマキ』『こだわりメガネ』『こだわりスカーフ』のような気がする。アンコールの技は別のところでストック。
☆滅びの歌のカウント【各1byte】※バトンタッチ対象
「ほろびのうた」の効果で0~3ターン。1→0のときに瀕死状態にする(「こらえる」や『きあいのハチマキ』を貫通)。独立しているので255ターンまでカウントできることになる。
(Gen1:★/Gen2:◆)最後に繰り出した技
- 技の種類
- タイプ
- 威力値
- 命中率
《たたかう》コマンドのカーソルの位置といった方が正しいかもしれない。交代するとカーソルの位置は初期値に戻る。
「オウムがえし」「ものまね」「アンコール」「テクスチャー2」の対象となる技。「カウンター」「ミラーコート」できる技かどうかもここの威力値(0なら変化技、1以上なら攻撃技)や属性(物理攻撃/特殊攻撃)で識別している。
(Gen1:★/Gen2:◆)最後に算出されたダメージ
「カウンター」「ミラーコート」「がまん」のダメージに用いられる。第1世代は
連続攻撃技などでこれが回数分だけ繰り返される。
(Gen1:★/Gen2:◆)最後に算出された命中率
第1世代の「いかり」「あばれる」「はなびらのまい」の2回目以降は、コマンド選択(入力)で命令を送っていないので前回の最終威力や最終命中率を参照してしまう。威力はそれでも問題ないのだが、命中率はどんどん下がるという問題がある。
★場の状態【1byte】
- リフレクター
- 光の壁
- 神秘の護り
- (なし)
- 撒きびし
- (なし)
- (なし)
- (なし)
★天候【???】
- 通常
- あめ
- ひざしがつよい
- すなあらし
リファレンス
- Pokémon Red/Blue:RAM map - Data Crystal
- http://skeetendo.proboards.com/thread/75/pokemon-golds-ram
- https://github.com/pret/pokegold/blob/master/constants/battle_constants.asm#L155
SPECIAL THANKS:ぱーかー(@earthoul_0xf9)
GB世代の対戦の仕様を探ることが私は随分前から好きなんですが、バトルディレクターの森本茂樹さんが何を思い、苦悩し、このようなゲームデザインをしたのかという所に興味があるからなんですね。バトルの開発史考察のような想いでやってます。
偶に勘違いされますが、旬な当時に結果を残せず、人口が減った今頃になって結果を残して天狗になりたいという理由で私は過去作のポケモンやってるわけじゃないんですね。寧ろそういう態度の人とはあまり仲良くできなかったりするわけですが。
…と話が逸れましたが、第1世代は吹雪やサイコキネシス、影分身、眠り粉、拘束などなかなかぶっ壊れた性能の技がいくらか存在していますが、開発2週間で通信対戦モードを付けたのだから調整しきれていないのは仕方ありません。寧ろRPGとして見るとボスが使ってくる大技としてなら丁度良いレベルデザインなのではないかと思うほどです。
それがテレビ放映、3度の公式大会、「ポケモンスタジアム」シリーズの発売という延期続きの金銀発売までの任天堂の援護射撃により、十分な前作対戦環境のモニターを取り、開発当初から通信対戦がされることを想定してレベルデザインされた初めてのポケモンシリーズが第2世代(金・銀・クリスタル)の対戦環境なのです。
第2世代の公式大会『ニンテンドウカップ2000』は名前の通り、金銀発売の翌年の2000年に開催。ゲームフリークと任天堂と金銀発売をずっと待って楽しんでいたポケモンファンが共に築いたこのルールは、前作の対戦を遥かに超える圧倒的な奥深さがあり、自分がオフラインなどで本格的に対戦に没頭したのも金銀クリスタルからでした。
そんなGB世代のバトルデザインはどうやって作られたか?この技は何を思って作ったのか、どうしてこんな処理をするのか?何か都合がよかったのか?何か設定を間違えたのか?…まで気になってしまうほど自分は両世代の作品の仕様に異常なほどの思い入れがあるわけです。
やってることは考古学に近いかもしれませんね。呆れられるかもしれませんが、僕はヨクアタールがバトンタッチできるか調べるほどの変人です(仮設通りできた)。そんなわけで解析できるわけでもないのですが、海外の解析などの力を借りながら、仕様を解き明かしていこうというのが自分のスタンスです。