ユーザーディスクには途中セーブの情報、各面の最速記録およびそのリプレイデータが記録されます。
データ構造
アドレス | データサイズ | 説明 |
$0 | 2byte | 「01 00」の値 |
$2 | 9byte | 'USER DISK'の文字列 (55 53 45 52 20 44 49 53 4B) |
$B | 1byte | 00 |
$C | 4byte | ユーザーディスク作成日時 |
$10 | 8byte*10 | セーブデータ-情報1 |
$60 | 3byte*10 | セーブデータ-情報2 |
$80 | 16byte*12 | 最速記録の情報 |
$210 | 8byte*10 | セーブデータ-情報3 |
$2000 | 8192($2000)byte*14 | リプレイデータ(最速記録) |
$20000 | 8192($2000)byte*2*10 | リプレイデータ?(セーブデータ毎?) |
※$10以降の各項目ではデータがセーブデータの数(最速記録関連では面数分)だけ続きます。
※LEVEL12は実際にはLEVEL12〜14の3つに分かれているので、内部的には全14面になります。
(実はラスボス戦中のマップは独立したマップ(LEVEL15)なので、
正確に言えば「LEVEL12は内部的には4面(全15面)」ですが、このマップはあくまでも
LEVEL14から呼び出される専用のマップなので実質全14面です。
ユーザーディスク作成日時
「ユーザーディスク作成」でディスクを初期化したときの日付と時刻が記録されます。
この値はディスクの区別に使われ、セーブや最速記録更新などでデータを書き込む時に
値が違っている(=違うディスクに入れ替えた)場合は警告メッセージが出ます。
日時の情報は次のようにビット単位で記録されます。
アドレス | $C | $D | $E | $F |
ビット |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
情報 |
年 |
月 |
日 |
時 |
分 |
秒 |
※年は下6bit部分のみ(00年と64年ではどちらも0になります)
セーブデータ
途中セーブの情報が記録されます。
大きく分けると3箇所に記録され、それぞれの箇所ではデータがセーブデータの数(10個分)だけ続きます。
※以降の説明において、アドレスは各セーブデータ情報の先頭位置を$0としています。
・情報1($10〜)
$0 | 1byte | レベル(面番号) |
$1 | 1byte | ライフ |
$2 | 1byte | 残り時間(分) |
$4 | 2byte | 残り時間(秒) |
$6 | 1byte | 移動速度設定 |
$7 | 1byte | 戦闘速度指定 |
レベル部分が0の場合、そのデータは未登録扱いになります。
また、LEVEL12は内部的にはLEVEL12〜14の3つに分かれていますが、
12〜14のどの場合でもゲーム中では「12」と表示されます。
残り時間の秒部分は1/8秒単位です。
(1=1/8秒、2=2/8秒、8=1秒、9=1+1/8秒(9/8秒)...となります)
速度設定は通常は1〜9まで設定できますが、このデータを直接書き換えて
0にすると速度1よりもゲームスピードが速くなります。
逆に10以上にすると速度9よりも遅くなります。
・情報2($60〜)
その面を開始した時の残り時間が記録されます。
これは各面でのプレイ時間の基準となる値で、この値からクリア時の残り時間を
引いたものがその面のプレイ時間になりますが、
この値が使われるのは(セーブ時の再開ポイントが複数ある)LEVEL12だけです。
その他の面では最後にロードしたときの残り時間が基準になります。
(LEVEL12以外ではロードしてから再びセーブするとロード時の残り時間に変わっています)
・情報3($210〜)
各データのプレイヤー名が記録されます。
最速記録の情報($80〜)
$0 | 1byte | 時間(分) |
$2 | 2byte | 時間(秒) |
$4 | 8byte | 名前 |
$B | 2byte | リプレイデータの有無 (あり:FF FF、なし:00 00) |
$E | 1byte | ライフ |
$F | 1byte | LEVEL12のみ02、それ以外は00 (n+1面分のリプレイデータを読み込むという意味?) |
時間が00:00だと記録なし(空白データ扱い)になります。
最速記録のリプレイデータ($2000〜)
各面の最速記録のリプレイが記録されます。
1面あたりのデータサイズは$2000byteで、これが面数分(14個)続いています。
プレイ中、リプレイデータのサイズが$2000を超えた状態で記録更新した場合、
プレイ時間は記録されますがリプレイデータは保存されません。
リプレイデータは、1byteごとに[キー状態]→[カウント]の繰り返しになります。
「キー状態」は押されているキーに対応した値を足したものになります。(表を参照)
「カウント」は指定されたカウントの間、同じキー状態が続きます。
(1byteなので最大は$FFですが、例えばキー状態が$04でずっと続く場合は
「04 FF 04 FF 04 FF ...」のようになります)
ちなみに、デモ画面のキー操作データであるDEMOPLAY.KEYも同じ形式です。
・キー状態
+$1 | ↑ |
+$2 | ↓ |
+$4 | ← |
+$8 | → |
+$10 | Space |
+$20 | Shift |
例:
↓+→ $2+$8=
$A
リプレイデータが書き込まれる時は、プレイ内容に関係なく
メモリ上のリプレイデータが記録されている領域から$2000byte分書き込まれます。
この領域は面スタート時にクリアされないので、ディスクにはリプレイとは
関係ないデータも書き込まれてしまっています。
(このため、どこまでがリプレイデータなのかを見分けるのは困難です)
セーブデータ毎のリプレイデータ?($20000〜)
詳しくは調査していないのですが、セーブデータ単位でリプレイデータ(と思われるもの)が
(各セーブデータにつき)2つ分記録されます。
おそらく、3つの面に分かれているLEVEL12で、最初の2面分のリプレイデータを
一時保存しておくための領域だと思われます。