
「燃えろ!ジャスティス学園」には特定のキャラクターを選択するとフリーズするバグが存在します。その発生する原因や発生条件についてちょっと調べてみました。なお、NAOMI版だけでなく、ドリキャス版のアーケードモードでも同様のフリーズバグが発生します。
はじめに
この記事は意図的にフリーズバグを発生させることを目的としておらず、発生条件を知ることでフリーズを回避してプレイを楽しむことを目的としています。
特にNAOMI版(ゲーセン)においては、フリーズバグという特性上、意図しない負荷が発生し機器の損傷の恐れや、リセット作業が必要になりオペレーターに迷惑が掛かるので、意図的にフリーズバグを発生させるようなことは絶対にしないでください。
NAOMI版には初期版と後期版の存在があります。初期版は恭介浮遊バグが存在し、後期版ではそれができなくなっています(その他にもいくつかのバグが修正されているらしい)。今回検証に使ったNAOMI版は初期版であり、後期版では今回のバグは修正されている可能性があります。
また、あくまで現時点で自分の方で確認できた暫定的な内容ということを踏まえていただければと思います。



バグの発生条件(暫定)
現時点で再現性のある発生条件。NAOMI版、ドリキャス版のアーケードモードにおいて、条件A、条件Bのどちらか、または両方を満たす場合に発生。
- 条件A
- 対人戦で一人目に対象キャラを選択して勝利
- その後のモード選択でフリーモードを選択すると発生
- ただし勝利したのが乱入された側で、尚且つ既にモード選択していた場合はモード選択やキャラセレに移行しないため発生しない。
- 条件B
- 対人戦で一人目に対象キャラを選択して敗北
- コンティニューで乱入すると発生
対象キャラとそれぞれの挙動
以下のキャラを一人目に選択し、上記条件を満たすと発生。
- ひなた2
- フリーズ
- 将馬2
- ボーマン2
- 一人目選択時のカーソル初期位置が枠外(0x31)に表示
- 初期位置で移動せず決定するとボーマン2が選択可能
- 選択後はバツ(0x01)にカーソルが移動
- 初期位置から各方向へ移動した場合(移動後は初期位置に戻ることはできない)
- 上:岩(0x0C)
- 下:枠外(0x00)
- 左:枠外(0x80)
- 右:枠外(0x00)
枠外での移動や選択はフリーズの要因となるので注意。
状況整理
- キャラセレの前提
- 初期プレイ時(条件A、条件Bを満たしていない場合)の一人目のカーソル初期値
- 1P=0x01(バツ)
- 2P=0x0B(あきら)
- 一人目~三人目はそれぞれ1byteごと別のアドレスで管理されている
- 1Pで3byte、2Pで3byte
- 二人目、三人目の初期位置は前のキャラ決定直前のキャラから一つ左隣に位置するキャラの値がセットされる(左端の場合は右端のキャラの値)
- 別衣装を持つ各キャラの値
- ひなた=0x02
- ひなた2=0x2A
- 将馬=0x04
- 将馬2=0x2C
- ボーマン=0x09
- ボーマン2=0x31
- 決定前は通常版キャラの値だが、別衣装キャラに決定した時点で値が変更される
- ひなたにカーソルを合わせる=0x02
- ひたな2に決定する=0x2A
- 初期プレイ時(条件A、条件Bを満たしていない場合)の一人目のカーソル初期値
- 発生条件を満たす場合、前回使用したキャラの値が初期値にセットされたままになる
- 初期値がリセットされないのは、前回使用したキャラをすぐ選べるようにする配慮と思われる(他格ゲーでもよくある)
- 初期値が対象キャラの値の場合、枠内の値として存在しないため枠外へカーソルが移動
- 初期値=0x01~0x24は枠内
- 初期値=0x00,0x25~は枠外
- 別衣装キャラはこちらに含まれる
- ドリキャス版の対戦モード系のキャラセレでは処理の仕方が違うため、別衣装キャラによる同様のバグは発生しない
- 前試合で三人目に選んだキャラが一人目の初期値となる
- 二人目、三人目の初期値は前キャラの値がそのままセットされる
- 初期値が別衣装キャラの場合は通常衣装キャラの値がセットされる
アーケードモードにも「初期値が別衣装キャラの場合は通常衣装キャラの値がセットされる」という処理が入っていれば発生しなかったはず。現にドリキャスの海外版ではそのような処理が入っており同様のバグは発生しない。
原因
燃えジャスのキャラセレバグのメモ
— ぽめ (@pomegd) 2024年3月29日
各キャラごとに4byte分のテーブルデータが用意されていて
カーソル位置が各キャラ(Chara_ID)の位置のとき、Up,DownLeft,Rightを入力するとその値のキャラの位置にカーソルが行く
例えば0D:英雄にカーソルがある場合、下入力すると10の雹に移動する#dreamcast pic.twitter.com/Ts1P9xRwB0
しかし、このテーブルはChara_IDが1Eの分(0C2026F4)までしか用意されておらず、以降については別のデータの情報が格納
— ぽめ (@pomegd) 2024年3月29日
で、バグが起こるChara_IDはそれぞれ
2A:ひなた2
2C:将馬2
31:ボーマン2
いずれもキャラセレのテーブル以外の場所を読み、存在しないChar_IDを読み込んでしまうためバグる pic.twitter.com/Ss6njprJex
回避策(暫定)
- プレイヤー側の対策
- 対象キャラを使用しない
- 対象キャラを一人目に選択しない
- 対人戦でコンティニューしない
- 乱入した側が一人目に対象キャラ入れて勝利したら条件A発生
- モード選択前に乱入しない
- 乱入した側が一人目に対象キャラ入れて勝利したら条件A発生
- 対戦モードで対戦する(ドリキャス版限定)
- オペレーター側の対策
- 「CONTINUE」をOFFにする
- 条件Bにのみ有効だが、弊害として一人プレイ時もコンティニューできなくなる
- 「JOIN IN」をOFFにして乱入禁止にする
- 当然対人戦ができなくなる
- 対戦会、大会などの際は「EVENT」をONにする
- 一人プレイができなくなるほか、1クレジットで対人戦が可能になってしまうため、あくまでイベント時限定
- 「CONTINUE」をOFFにする
確実に回避する方法は赤字のものとなるが、現実的な方法としては「対象キャラを一人目に選択しない」となる。特にひなた2を一人目にして敗北、コンティニューしまうとキャラセレが表示された瞬間にフリーズ確定なので要注意。
なお、対象キャラを三人目にしても発生した、という情報を頂いたが現時点で当方の検証では再現せず。また、三人目の値の変動を見る限り二人目のキャラ選択に依存する形で変動するため、今回の発生条件を満たしたときに起こるバグとは別の原因の可能性がある。そのうち改めて検証。
Appendix
| 値 | キャラ |
|---|---|
| 00 | NONE |
| 01 | バツ |
| 02 | ひなた |
| 03 | 恭介 |
| 04 | 将馬 |
| 05 | 夏 |
| 06 | ロベルト |
| 07 | ロイ |
| 08 | ティファニー |
| 09 | ボーマン |
| 0A | エッジ |
| 0B | あきら |
| 0C | 岩 |
| 0D | 英雄 |
| 0E | 響子 |
| 0F | 九郎 |
| 10 | 雹 |
| 11 | Pアキラ |
| 12 | 委員長 |
| 13 | ダイゴ |
| 14 | 隼人 |
| 15 | ラン |
| 16 | 流 |
| 17 | ザキ |
| 18 | もも |
| 19 | ゆりか |
| 1A | Bバツ |
| 1B | D雹 |
| 1C | Wダイゴ |
| 1D | ヴァツ |
| 1E | 太陽学園 男子 |
| 1F | 太陽学園 女子 |
| 20 | 五輪高校 男子 |
| 21 | 五輪高校 女子 |
| 22 | パシフィックHS 男子 |
| 23 | パシフィックHS 女子 |
| 24 | 外道高校 |
| 25 | 聖純女学院 |
| 26 | ジャスティス学園 男子 |
| 27 | ジャスティス学園 女子 |
| 28 | NONE(バツ) |
| 29 | バツ |
| 2A | ひなた2 |
| 2B | 恭介 |
| 2C | 将馬2 |
| 2D | 夏 |
| 2E | ロベルト |
| 2F | ロイ |
| 30 | ティファニー |
| 31 | ボーマン2 |