解析から見えてきた面白い話と、まだ分かっていないこと
日本語 | English | Français | Español | Italiano | 한국어
バーコードの結果はすべて計算で決まる——と言いたいところだが、たった1パターンだけ例外がある。散布後の内部レジスタが特定の値に一致した場合だけ、抽選もステータス計算も飛ばして固定の結果が返される。そこに当てはまるコードとして実測データに商品名つきで記録されているのが、スーパーファミコン『ドラゴンボールZ 超武闘伝』の商品コード 4902425373737。
読ませると S悟空・HP59000・BP49990・DP49990・必殺技Lv.4 が出る。このBP/DP=49990という値は、通常の計算では絶対に作れない。通常はBP・DPに半減処理が入るため上限が48750/49750に抑えられているのだが、特殊コードはその計算をまるごと飛ばすので半減がかからない。自社ソフト(超武闘伝)を買った子どもへのご褒美——と考えたくなるが、開発側の意図までは分からない。分かるのは、自社ソフトのコードにだけ攻守最強のS悟空がゲーム内に固定結果として用意されていたという事実である。
なお先頭2桁とチェックデジットは判定に使われないので、先頭を差し替えた 4502425373739(チェックデジットは付け直してある)などからも同じS悟空が出る。一般のコードで到達できる上限のほうは最強バーコードにまとめた。
当時を知る人なら「フリーザの変身形態だけ全然出なかった」記憶があるはず。解析結果はその体感を数字で裏付ける。第3形態が出る条件は:
ランダムなバーコードでこの帯域に入る確率はおよそ8,000分の1。約500件を集めた先行解析者が「フリーザ第3形態は1パターンのみ」と書いていたのは確率的に完全に妥当だった。ちなみにセル第3形態は約17,000分の1でさらに稀。判定ツールのキャラ一覧で、これらの形態が「商品名の記録なし」になっているのも同じ理由である。
JANコードは先頭7桁がメーカー固定なので、メーカーが決まると引ける範囲が決まってしまう。商品コード部(下5桁)を全列挙して調べると、棚選びの指針が出る:
| 狙い | 行くべき棚 | 期待値 |
|---|---|---|
| フリーザ・セル系 | サッポロ一番(サンヨー食品 4901734) | 約7個に1個がフリーザ第1形態、約40個に1個で第2形態 |
| S戦士 | ライオンの日用品(4903301) | 約25個に1個 |
| アイテム・ドラゴンボール | 花王・ライオン・サントリー・日清・ロッテなど(7桁目が奇数のメーカー) | 約2個に1個がアイテム枠 |
| HP99500級の大物 | 3桁目が2,3,6,7のマイナー・ホビー・輸入品系プレフィックス | 大手ナショナルブランド(4901〜4903系)ではHP99500は構造的に出ない |
逆に、多くの大手メーカーのコードではフリーザ・セル系が1体も出ない(キャラ抽選に使うビットがメーカー固定部で不利に固定されるため)。「サッポロ一番だけやたらフリーザが出る」というのは冗談のような本当の話である。
※この期待値は、そのメーカーの商品コード部(下5桁)10万通りを全部読んだ場合の理論値である。実際に流通している商品はそのごく一部で、しかも採番には偏りがあるため、実際の棚での出方はこの数字どおりにはならない。あくまで棚選びの目安として読んでほしい。
先人の実測記録と突き合わせたとき、8桁バーコードの18件のうち4件だけが1項目ずれていた。長いあいだ原因不明のまま「未解明」として残していたが、ゲーム上で1件ずつ再検証したところ、4件とも元データ側の誤記であることが確認できた。
1件は単純なステータスの書き写し間違いで、コード自体は正しかった。面白いのは残りの3件で、記録されている数字がそもそもバーコードとして成立していなかった。EAN-8には検算用のチェックデジットが付いており、データックの読み取り部はこれをきちんと検証している。つまり数字の並びが検算に合わないコードは、読み取りの段階でエラーになり、そもそも結果が出ない。記録が残っている以上、当時は何かしら読めていたはずである。
そこで3件それぞれについて「1桁だけ直せば検算が通る」候補を探すと、いずれもただ1つに絞れた(3件とも末尾の桁だった)。その補正後のコードを読ませると、キャラクター・HP・BP・DP・必殺技レベルのすべてが記録どおりに再現された。数字の写し間違いだったと断定してよい。
必殺技レベル4の悟空に「元気玉」と「界王拳」の2種類が実測されていた件も、同じやり方で解決した。当時の説明書には必殺技の一覧が載っていて、悟空は技3が界王拳・技4が元気玉と決まっている。レベル4で界王拳が出るのはスーパーサイヤ人悟空のほうで、昇格したキャラクターは技名の並びごと別の行に切り替わる仕組みだった。実測で「悟空のレベル4が界王拳」となっていた3件を実際に読ませたところ表示は元気玉で、こちらも技名欄の書き写し間違いである。技名は昇格後の最終的なキャラクターと必殺技レベルだけで決まり、謎の分岐は存在しなかった。
生成規則そのもの(誰が・どのステータスで生まれるか)は完全に解読できた。残っているのは表示まわりの1点だけである。
実機と判定ツールで結果が食い違う例を見つけた方は、ぜひ教えてほしい。アルゴリズムの反例としては最重要の情報になる。