SFC「バトルドッジボール」のパスワード解析をやっていく その1 メモレベルの話

バトルドッジボールのパスワード解析をやっていくぞい。
バトルドッジボールの「スーパーバトルリーグ」モードは、試合に勝つと敵チームからキャラを引き抜いたり、チーム共有のEXPを獲得したりできて、それをメンバーのショット・フットワーク・防御力・ジャンプ力・体力に割り振ってチームを強化していくモードになっている。
さらに、このモードで鍛えたチームのパスワードを持ち寄って友達とも対戦できるっていうシステムになっている。
改造したパスワードを持っていくのはズルだからやめよう!

ちなみに、「改造したパスワードで対戦するのはズル」という意識があるので、対戦要素とかがある最新ゲームのパスワード解析はやらないと思う。多分。
今回は古いゲームだからやる。

バンプレ軍団初期状態からの解析

とにかくまずは裏技的パスワードを使ってネオ・ダークブレイン、グレート雷門、ボーンファイター、デブデダビデのLv0ラスボスチームでやっていく

オレたちが うわさのバ ンプレぐん だんだ

上記パスワードで始めた場合の初期値は以下のようになった。何度か表示させても変化しなかったので、同じ状態には1つのパスワードしか存在しない系と思われる。攻略が楽なので助かる。

EXP:20、割り振り0

がいどシシ ゲさしゼそ グイじえコ ぐゲぐけア
こかだオき あスゴウシ シがズとJ いキPアト
ウさ

EXP:19、ダークブレインのショットに1

がいどシシ ゴさしゼそ グイじえコ ぐゲぐけア
こかだオき あスゴウシ シがズタJ いキPアト
ウさ

2箇所変わりましたね

EXP:19、ダークブレインのフットワークに1

がいどシシ ゲししゼそ グイじえコ ぐゲぐけア
こかだオき あスゴウシ シがズタJ いキPアト
ウさ

これも2箇所。前で変化した箇所が能力値で、後ろの方が経験値かな?
「ゲ→ゴ」「さ→し」はそのまんま+1なのでわかりやすいが、経験値が20→19の変化で「と→タ」は難しい。


とりあえず、他の能力値や他のキャラの数値も変化させてどの箇所がどのキャラのどの能力値なのかを確認。
5文字目~9文字目が1人目の能力値で、体力・ショット・フットワーク・防御力・ジャンプ力の順
15文字目~19文字目が1人目の能力値で、体力・ショット・フットワーク・防御力・ジャンプ力の順
25文字目~29文字目が1人目の能力値で、体力・ショット・フットワーク・防御力・ジャンプ力の順
36文字目~39文字目が1人目の能力値で、ショット・フットワーク・?(外野に防御力はない)・ジャンプ力の順
※外野のジャンプ力に+1したときは、経験値と仮定している部分が「と→ツ」になった。

また、一連の確認で「コ」の次は「ざ」で、「ゴ」の次は「か」であることもわかった。
パスワード入力画面が以下のようになっているので、「あ」から右方向に+1ずつ進んでいく感じで、例えば「お」の次は「か」ではなく「ア」だと思われる。
f:id:annnnnnna:20190817135238p:plain
また「と→タ」が並んでいるので特に特殊な変化ではないこともわかった。
あと、+9割り振った場合は9文字分しか移動しないが、+10割り振ると16文字動くことがわかった。+20だと+32文字動く。

ただ、経験値を使ったのに+1になっているから、ここは経験値ではないのかもしれない。
割り振り可能な残り経験値数というのは、「獲得した値」マイナス「割り振った値」で算出できる。
今まで確認したパスワードはすべて「獲得経験値=20」から動いておらず、経験値を能力値に割り振ったときに連動して変わった部分は単なるチェックサムの可能性がある。

すべてに+1割り振り

がいどシス ゴしすゾそ グイじえざ げゴげこア
こかだオく いセかエシ シがズぱJ うクPイト
ウさ

初期状態と比較して、変化していない部分の抽出

がいどシ○ ○○○○そ グイじえ○ ○○○○ア
こかだオ○ ○○○○シ シがズ○J ○○P○ト
ウさ

(JとPは外野が体力と防御力に割り振れないためこうなっていると思われる)

ダークブレインのショットに+20

がいどシシ ださしゼそ グイじえコ ぐゲぐけア
こかだオき あスゴウシ シがズピJ いキPアト
ウさ

ダークブレインのショットに+20、ナイトドラゴンズを倒して経験値+62

がうどシシ ださしゼそ グイじえコ ぐゲぐけア
こかだオき あスゴウシ シがズポJ いキPアト
ウさ

「い→う」の箇所がステージの進行度かな

1人目のショット、2人目の能力値、外野の能力値、3人目のフットワーク以外 のいずれかに+20した場合、チェックサムは「と→ピ」で+32動く
1人目のショット以外と、3人目のフットワークに+20した場合、チェックサムは「と→ず」で-32動く
じゃあ6,7文字目に1人目のショットに+20した文字と1人目のフットワークに+20した文字を入れてチェックサムをそのままにしたら通るかと思ったけどダメだった

浅草名物雷おこし

キャラIDの部分とかも調べたいのでちょっと違うチームも見てみよう。グレート雷門×3のチーム

あさくさめ いぶつ_か みなりおこ し

EXP:20、割り振り0

がいヂシシ ゲさしゼそ グイずえコ ぐゲぐけア
こかニオき あスゴウシ シがズきJ いキPアト
ウさ

バンプレ軍団のパスワードとかなり共通点多いですね。
すべてに+1割り振り

がいヂシス ゴしすゾそ グイずえざ げゴげこア
こかニオく いセかエシ シがズガJ うクPイト
ウさ

変化しなかった部分の抽出

がいヂシ○ ○○○○そ グイずえ○ ○○○○ア
こかニオ○ ○○○○シ シがズ○J ○○P○ト
ウさ


バンプレ軍団の初期状態と初期状態同士で比較してみましょう。

がいどシシ ゲさしゼそ グイじえコ ぐゲぐけア
こかだオき あスゴウシ シがズとJ いキPアト
ウさ

↓1人目をダークブレインからグレート雷門に変更、2人目をボーンファイターからグレート雷門に変更、3人目をグレート雷門からグレート雷門(影)に変更

がいヂシシ ゲさしゼそ グイずえコ ぐゲぐけア
こかニオき あスゴウシ シがズきJ いキPアト
ウさ

大雑把に「進行度」「1人目キャラID」「1人目能力値」「2人目キャラID」「2人目能力値」「3人目キャラID」「3人目能力値」で並んでいそう(まあ能力値の場所がわかった時点でわかりきっていたことですが)。
その後ろは「チェックサム」「外野キャラID」「外野能力値」って感じかな。
キャラごとにMPも確か保存されていたと思うし、最初に選んだチーム名もどこかに入っているはず(今回使用している裏技パスワードは「SDガンダムヒーローズ」扱いになっている)なのでそのあたりも明らかにしていこう。

全能力+1状態同士でバンプレ軍団と比較して変化してない部分の抽出

がい○シ○ ○○○○そ グイ○え○ ○○○○ア
こか○オ○ ○○○○シ シがズ○J ○○P○ト
ウさ

各チームの初期パスワードを見てみる

これをやればチーム名IDとキャラIDくらいはわかるかな。
無計画にデータ拾い集めてる状態なのでデータ取る順番とかもメチャクチャだ。本当ならこれを最初にやった方がいい。

SDガンダムヒーローズ

f:id:annnnnnna:20190817142521p:plain

がいゾシ6 ペぶ1ばそ グイギえち ぷだそダア
こかザオで ずボぢゾシ シがずすJ いデPアト
ウさ

ナイトドラゴンズ

f:id:annnnnnna:20190817143044p:plain

ぎいすシベ ペぶしゼそ ゲイゴえコ ぷだぐけア
カかゼオき なスゴウシ スがぜだJ いデPアト
ウさ

ウルトラファイターズ

f:id:annnnnnna:20190817144007p:plain

ぐいざシベ ペさしばそ ぜイウえち そゲぐダア
さかキオで ずスゴウシ つがコイJ いデPアト
ウさ

グレイテスト ライダーズ

f:id:annnnnnna:20190817144633p:plain

げいズシベ だ0べゼそ グウぐえコ そペぐけア
こきずオき あ7ゴウシ シぎざてJ いデPアト
ウさ

メチャクチャわかりにくいが1つ目の「ベ」はカタカナで、2つ目の「べ」はひらがな

ダイナミックマジンガー

f:id:annnnnnna:20190817145512p:plain

ごいぞシ6 だぶしゼそ ゲイオえち そだぷけア
こかコオで ずボポウシ シがじあJ いデPアト
ウさ

モビルスーツキラーズ

f:id:annnnnnna:20190817150016p:plain

ガいサシベ ゲさ1ばサ グイくえち ぷゲそダア
こかしオで なスぢゾシ シがぞデJ いデPアト
ウさ

モンスタークラッシャーズ

f:id:annnnnnna:20190817150549p:plain

ギいセシシ ゲぶべメた グイカえホ ぐだぐへア
こかそオひ あボぢゾシ シがザゲJ いデPアト
ウさ

ショッカーイーグルス

f:id:annnnnnna:20190817151022p:plain

グいぢシベ だ0しゼそ グウケえち そだぐけア
こきスオき ずボゴウシ シぎジギJ いデPアト
ウさ

初期チームの初期状態から得られる情報について

まず、1文字目がチームIDで確定っぽいですね。
初期チームの能力値とパスワードを見ると、1人目の体力+20は6文字目が「ベ」になるようですね。ダークブレインの体力を+20すると「シ」から32文字動いて「ベ」になります。

他の文字もちゃんと見たほうがいいと思いますが、多分バンプレ軍団と雷門チームの初期状態のうち、能力値の共通部分であるこれが各能力値が0になるオフセット値ってことっぽいですね

○○○○シ ゲさしゼ○ ○○○○コ ぐゲぐけ○
○○○○き あスゴウ○ ○○○○J いキPア○
○○

能力値の一つ前の変化してない値はMPかな

○○○シ○ ○○○○○ ○○○え○ ○○○○○
○○○オ○ ○○○○○ ○○○○○ ○○○○○
○○

キャラIDっぽい部分

××○×× ××××× ××〇×× ×××××
××〇×× ××××× ××〇×× ×××××
××


チームIDと能力値以外の変化してない部分

○い○○○ ○○○○○ ○○○○○ ○○○○ア
○○○○○ ○○○○シ ○○○○○ ○○○○ト
ウさ


あと8文字余裕があるから桁が増える条件も調べる。
能力値は000~999の値を取るので1文字では足りないはずだけど、全員の全能力値が2文字ずつになったらあと15文字増えるので枠が足りない。
1文字の中で上位ビットはこっちの能力値、下位ビットはあっちの能力値とかの使い分けがあるんだろう。

文字一覧表

0始まりと仮定して番号も振っておく

000~019
020~039
040~059
060~079
080~099
100~109
110~129
130~145        
146~165
166~176        
177~191 _
192~197        
198~199

200種類の文字がある。8bitで表せる範囲ですね。

能力値の最大値である999という値はこのゲームのパスワードの今わかってる範囲の仕様だと、オフセット値+16*99+9という値で表されることが予想できてています。
16*99+9=1593 これを2進数であらわすと0110 0011 1001 になり、下位8bitが表すのは57になります。
199-57=142で「G」以上の文字がオフセットに使われると1577を足したときに「♦」までの文字で表現できなくなりますが、全能力値が0の状態のときは外野の未使用値以外は「G」より小さい値なので大丈夫っぽいです。
1つの能力値を表す最大値が12bit(1.5文字)で表現できるということは、3文字で2つの能力値を表現できるということになり、初期値は5文字で5つの能力値を表現していますが、それぞれが最大値になった場合は7.5文字必要だから、8文字あれば収まる計算になるかな?
これだと1人あたり3文字増えるから残り8文字には収まらないですね。MPは999まで行くことはないでしょうから、MPを表している文字に0.5文字分食い込ませれば各キャラ2文字増加×4で8文字増加で足りそうですね。

今の所完全に推測で書いています。