トップ小ネタPrince of Persia > ユーザーディスク


ユーザーディスク

ユーザーディスクには途中セーブの情報、各面の最速記録およびそのリプレイデータが記録されます。

データ構造
アドレス データサイズ 説明
$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面分のリプレイデータを
一時保存しておくための領域だと思われます。

戻る