セーブデータ構造

メモリーカードのセーブデータのバイナリ構造を解説します。

はじめに

セーブデータはいわゆるベタイメージを仮定しています。

ノエルのセーブデータが1ブロック目にあることを仮定しています。

アドレスを、値をで示しています。このページの色付きの値は16進数です。

ブロックの情報

PlayStation のメモリーカード管理画面に表示されるセーブデータ名前はアドレス2000205Fに書かれています。

具体的には「NOёL月月/日日」という文字列です。

アイコン

PlayStation のメモリーカード管理画面に表示されるアイコンはアドレス208021FFに描かれています。

アドレス208020FFがアイコン1です。

アドレス2100217Fがアイコン2です。

アドレス218021FFがアイコン3です。

アイコン1, 2, 3でパラパラアニメします。

アニメーションは2タイプあり、メモリーカードに書き込まれるアニメーションはセーブするときにランダムで決定されます。

PRESENT TIME

現在の日付と時刻はアドレス22002203です。

この項目はチェックサムにかかりません。

  2203     2202     2201     2200  アドレス
******** ******** ******** ********
                        -- --    月
                   -----       日
             ---- -         時
      -- ----            分
------                秒

アドレス2200の上位2ビットとアドレス2201の下位2ビットが「月」です。

アドレス2201の上位2ビット目から6ビット目が「日」です。

アドレス2201の上位1ビットとアドレス2202の下位4ビットが「時」です。

アドレス2202の上位4ビットとアドレス2203の下位2ビットが「分」です。

アドレス2203の上位6ビットが「秒」です。

「20時61分」のように誤った値を入れると、ロード時に正しい値が計算されてます。この例の場合は「21時1分」となります。

また、会話した日や会話していない日は記録しないようです。現在時刻を過去に書き換えたら再び会話ができました。セーブすると次の日になるので、十分な実装でしょう。

ID

相手に電話をかけるために必要なIDのフラグはアドレス2205です。

  2205  アドレス
********
 1       代歩
  1      恵壬
   1     由香

代歩が上位2ビット目、恵壬が上位3ビット目、由香が上位4ビット目がそれぞれのフラグです。1が ON で0が OFF です。ただし、代歩を OFF にしても、日付が 9/25 になると、強制的に代歩の ID を知っている状態になります。

VISUAL MAIL

VISUAL MAILは「MAIL所持フラグ」と「送信者」が別々に管理されています。

VISUAL MAILの所持フラグがアドレス22062207です。

VISUAL MAILの送信者がアドレス22462254です。

       2206     2207  アドレス
     ******** ********
*NA*                  VACATION?
2246  1               ATHLETHIC
2248   1              AMUSEMENT
224A    1             CULTURAL FESTA(前日)
224C     1            CULTURAL FESTA(当日)
224E      1           EXCURSION
2250       1          TOURNAMENT(長)
2252        1         TOURNAMENT(短)
2254          1       TOURNAMENT(中)

アドレス2206の上位1ビット目は何の影響もありません。

アドレス2206の上位2ビット目はATHLETICの所持フラグ、アドレス2246が送信者です。

アドレス2206の上位3ビット目はAMUSEMENTの所持フラグ、アドレス2248が送信者です。

アドレス2206の上位4ビット目はCULTURAL FESTA(前日)の所持フラグ、アドレス224Aが送信者です。

アドレス2206の上位5ビット目はCLUTURAL FESTA(当日)の所持フラグ、アドレス224Cが送信者です。

アドレス2206の上位6ビット目はEXCURSIONの所持フラグ、アドレス224Eが送信者です。

アドレス2206の上位7ビット目はTOURNAMENT(長)の所持フラグ、アドレス2250が送信者です。

アドレス2206の上位8ビット目はTOURNAMENT(短)の所持フラグ、アドレス2252が送信者です。

アドレス2207の上位1ビット目はTOURNAMENT(中)の所持フラグ、アドレス2254が送信者です。

また、ゲーム中に表示されるVISUAL MAILは6つまでです。正規プレイではありえませんが、6個以上のフラグが立っている場合には表の上にあるものが優先されます。

送信者の値が00なら代歩から、01なら恵壬から、02なら由香からです。

アドレス224A01以外の数字を入れても、ゲーム中に表示されるメッセージは強制的に恵壬になりますが、エンディングのためのチェックには設定した値が使われます。

条件付ネットワークデータフラグ

ネットワークエージェントデータの一部は以下のフラグを立てることにより検索にヒットするようになります。

そのフラグは アドレス220C
10(上位4ビット目を1)にすると、XMAS CARD
20(上位3ビット目を1)にすると、YUKA DATE MAP
40(上位2ビット目を1)にすると、KAHO DATE MAP
80(上位1ビット目を1)にすると、EMI DATE MAP
がヒットするようになります。

好感度

好感度はアドレス226A226Fです。

アドレス226A226Bが代歩の好感度です。

アドレス226C226Dが恵壬の好感度です。

アドレス226E226Fが由香の好感度です。

初期値は3人ともに1Eです。

代歩フラグ

アドレス2270をちょうど32(10進数で50)にすると10/9に誕生日プレゼントをした会話ができます。

アドレス227064(10進数で100)以上にすると11/29, 12/2に付き合ってる会話ができます。

どちらも、あるビットを立てるわけではないので、正確には「フラグ」ではないです。

プールウインドウ

プールウインドウ関係はアドレス2274227Fです。

640x480ピクセルのボール置き場の一部がウインドウとして画面上に表示されています。

アドレス2274がウインドウの左上のx座標です。

アドレス2276がウインドウの左上のy座標です。

アドレス2278がウインドウの幅です。

アドレス227Aがウインドウの高さです。

x座標の値域が12DE(18 〜 222)ピクセル、y座標の値域が128E(18 〜 142)ピクセルです。

幅の値域が30FC(48 〜 252)ピクセル、高さの値域が30AC(48 〜 172)ピクセルです。ただし幅、高さともにゲーム画面をはみ出さない範囲です。


アドレス227C227Dがゲーム画面を基準としたボール置き場の相対x位置です。

アドレス227D227Eがゲーム画面を基準としたボール置き場の相対y位置です。

相対x位置の値域がFD C200 DE(-574 〜 222)ピクセル、相対y位置の値域がFE 9D00 8E(-414 〜 142)ピクセルです。ただし相対x位置, 相対y位置ともにウインドウのx, y座標を超えない範囲です。


これらを図示すると以下のようになります。

ウインドウサイズ・位置

会話ボール

会話ボールはアドレス229B253Bです。

ボールはひとつ14バイトで構成されています。

ボールは48個まで持てます。アドレスは逆転していますがボールは1から順に埋まります。

ボール48
アドレス229C229Dがx座標です。
アドレス229E229Fがy座標です。
アドレス22A022A3が常に00000000です。
アドレス22A422A5がボールの存在フラグです。
アドレス22A622A7がボールIDです。
アドレス22A822A9が色です。

ボール47
アドレス22AA22ABがx座標です。
アドレス22AC22ADがy座標です。
アドレス22AE22B1が常に00000000です。
アドレス22B222B3がボールの存在フラグです。
アドレス22B422B5がボールIDです。
アドレス22B622B7が色です。

…

ボール1
アドレス252E252Fがx座標です。
アドレス25302531がy座標です。
アドレス25322535が常に00000000です。
アドレス25362537がボールの存在フラグです。
アドレス25382539がボールIDです。
アドレス253A253Bが色です。

座標xの値域は0000027F(0 〜 640)です。

座標yの値域は000001DF(0 〜 480)です。

ボールの存在フラグは0000がOFF、FFFFがONです。

ボールIDは、それぞれ以下のようになります。

代歩のボールであれば、値0000が「バイト中」、0001が「制服」、…、03B2「予感」です。

恵壬のボールであれば、値2000が「夏」、2001が「代歩達」、…、2225が「バレンタイン」です。

由香のボールであれば、値4000が「グチ」、4001が「代歩」、…、41CBが「安心」です。

色の値は332F3330732F7330B32FB330F32F青緑です。通常プレイ中は、会話ボールの色は、ID の 0 から、青、赤、紫、青緑、緑、黄、灰、…と割り振られます。つまり、ID を 7 で割ったあまりで色が決まります。

会話ボールを使用したり、削除したりして、存在しなくなったときは、存在フラグを0000にします。それ以外の値はそのままになります。

新しい会話ボールを取得したときは、ボール1, ボール2, ... ボール48 の順で検索して、最初に見つかった存在フラグが0000のボールのそれをFFFFにして、それ以外の値を新しい会話ボールの値で上書きします。

SOUND

音声のボリュームはアドレス253C2541です。

アドレス253C253DがVOICEです。

アドレス253E253FがSEです。

アドレス25402541がMOVIEです。

値は2バイトです。

初期値は3000です。

値域は04000 (0 〜 16384)です。4001以上の値を入れるとボリュームの数字の部分がバグります。

この値を10進数にして、 99/16384 (表示上の最大/内部データ上の最大)をかけた値(小数点以下切り上げ)が、ゲーム画面での値になります。

ACCOUNT METER

アカウント関係はアドレス2542254Bです。

アドレス25422543が残りアカウントです

アドレス25442545が9月のアカウント消費量です。

アドレス25462547が10月のアカウント消費量です。

アドレス25482549が11月のアカウント消費量です。

アドレス254A254Bが12月のアカウント消費量です。

値域は0000FFFF(0 〜 65535)分です。

ゲーム画面では下3桁のみ表示されます。1000分であれば000、65535分であれば535と表示されます。

すべて分単位で表示・保存されます。秒単位の値は保存されていません。

ボールの使用回数

個々のボールの使用回数はアドレス254C2CF1です。

ボール1つに付き1バイト割り当てられていて、値域は00FF(0 〜 255)回です。

代歩のボールの表の順で、アドレス254Cが「バイト中」、254Dが「制服」、…、28FEが「予感」の使用回数です。

恵壬のボールの表の順で、アドレス28FFが「夏」、2900が「代歩達」、…、2B24が「バレンタイン」の使用回数です。

由香のボールの表の順で、アドレス2B25が「グチ」、2B26が「代歩」、…、2CF1が「安心」の使用回数です。

NETWORK AGENT フラグ

ネットワークデータで、各データを検索してヒットしたことがあるかどうかのフラグのアドレスは 3CC23D25です。

アドレス3CC2が データID: 00(YUKA'S HOMEPAGE) の状態、3CC3がデータID: 01(YUKA'S HOMEPAGE OMOIDE KUN) の状態、…、3D1FがデータID: 5D(3 GIRLS SECRET DATA) の状態を示します。

フラグの状態は、ネットワークエージェントに左から右に、エージェント1、エージェント2、エージェント3、エージェント4、エージェント5とすると、

です。

NETWORK AGENT データ

ネットワークのデータはアドレス3D263D89(100バイト)です。

それぞれ各1バイトにつき1つデータが入ります。

値域は005DFFです。

NETWORK AGENTのデータ順に、00が YUKA'S HOMEPAGE 、01が YUKA'S HOMEPAGE OMOIDE KUN、…、5Dが 3 GIRLS SECRET DATA を表します。

94種類のデータがあります。

データなしを意味するデフォルトはFFです。

正規プレイ中にはありえませんが、同じデータを100個持つこともできます。

ディスクにデータが設定されていない5Eなどの値を指定して、そのデータを選択すると、フリーズしたり、リセットがかかったりします。

データなしを意味するFFを設定したアドレスよりも後ろに、それ以外の値を設定すると、テキストがバグります。データありは連続している必要があります。

チェックサム

チェックサムはアドレス3D8Aです。

計算方式は単純な加算方式です。計算領域はアドレス2204からアドレス3D89です。

ゲームの起動時に、この値が正しくない場合は、データが壊れているとみなされ、最初(9/25 20:00)から初期状態でゲームが始まります。

inserted by FC2 system