ユーザ用ツール

サイト用ツール


技術資料

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
技術資料 [2024/02/21 01:50] – [部屋データ] araki技術資料 [2025/10/20 01:34] (現在) – [セーブデータファイル] araki
行 17: 行 17:
   * 音データファイル   * 音データファイル
   * メッセージファイル((QT版のみ))   * メッセージファイル((QT版のみ))
 +  * セーブデータファイル((保存された場合))
 ===== ゲームエンジン仕様 ===== ===== ゲームエンジン仕様 =====
  
行 197: 行 198:
  
 先頭には、トーンパターンが何色分定義されているのかが1byteで表されている。 先頭には、トーンパターンが何色分定義されているのかが1byteで表されている。
-トーンパターンは、1-7の色を指定されたパターンで置き換えるためのもので、カラーパレット機能のようなものである。+トーンパターンは、1-6の色を指定されたパターンで置き換えるためのもので、カラーパレット機能のようなものである。
  
 その後ろに3バイト(BRG)のトーンデータが指定された数だけ続き、その後ろがようやく最初の描画データになる。 その後ろに3バイト(BRG)のトーンデータが指定された数だけ続き、その後ろがようやく最初の描画データになる。
行 212: 行 213:
  
 トーンデータは最初に書いたように、パターン数+パターン数*3バイトのパターンデータとして登録されている。 トーンデータは最初に書いたように、パターン数+パターン数*3バイトのパターンデータとして登録されている。
-最大で6 (カラーコード1-7に対応)のパターンがあり、対応するカラーコードを置き換えていく。+最大で6 (カラーコード1-6に対応)のパターンがあり、対応するカラーコードを置き換えていく。
  
 PC-9801では、パターンデータのままに、縞模様を使った中間色画像として描画されたが、PalmOS以降ではそれらしい色に置き換えるように変更してある。 PC-9801では、パターンデータのままに、縞模様を使った中間色画像として描画されたが、PalmOS以降ではそれらしい色に置き換えるように変更してある。
行 229: 行 230:
  
 トーンデータは、3バイトを一組として、BRGの横8dot分のトーンパターンを定義している。 トーンデータは、3バイトを一組として、BRGの横8dot分のトーンパターンを定義している。
-カラーコード1-7で描かれている部分をこのトーンパターンで置き換え、中間色表現による色表現を行う。+カラーコード1-6で描かれている部分をこのトーンパターンで置き換え、中間色表現による色表現を行う。
  
-要は、当該カラーコードのある点に対して、<code>((b >> (7 - (x % 8)) & 1) | (((r >> (7 - (x % 8)) & 1) << 1) | (((g >> (7 - (x % 8)) & 1) << 2)</code> の色を置いていく(8色モードの場合)ことになる。+要は、当該カラーコードのある点に対して、<code cpp>((b >> (7 - (x % 8)) & 1) | (((r >> (7 - (x % 8)) & 1) << 1) | (((g >> (7 - (x % 8)) & 1) << 2)</code> の色を置いていく(8色モードの場合)ことになる。
  
 なお、今どきの端末の多くはRGB565であったり ARGB8888であったりと、より多色を使った表示がかのうなので、あえて中間色を使う必要性は高くない。 なお、今どきの端末の多くはRGB565であったり ARGB8888であったりと、より多色を使った表示がかのうなので、あえて中間色を使う必要性は高くない。
行 279: 行 280:
 なお、通常のアイテムの描画データの扱いは一意だが、先生だけは異なった処理を行う。 なお、通常のアイテムの描画データの扱いは一意だが、先生だけは異なった処理を行う。
 ===== 語句辞書仕様 ===== ===== 語句辞書仕様 =====
 +
 +辞書ファイルは、0x200バイトの動詞領域および0x200バイトの目的語領域からなる。
 +語句は逆HAL符号((命名はわたし。))で符号化され、5bytesを一組としている。
 +
 +^0^1^2^3^4^
 +|符号化語||||意味|
 +
 +符号化語部分は最大4byteだが 0が現れたらその後ろは無視される。
 +先頭が0か0x200バイトを超えたらそれ以上はワードは存在しない。
 +
 +符号化されたワードをデコードすると英単語が得られる。
 +単語の意味するところは意味バイトが示している。
 +つまり、例えば look と see とに同じ意味バイトを割り当てることで、どちらの動詞が与えられても「見る」という意味として解釈できる仕組みになっている。
 +
 +目的語に関しても同様の構造になっている。
 +
 +===== 初期データ =====
 +
 +初期データは、以下の3つのパートからなる。
 +
 +  * マップ間のリンク情報(8bytes x 87)
 +  * アイテムの所在情報(12bytes)
 +  * フラグ(15bytes)
 +
 +スタート時に初期状態が読み込まれ、セーブ/ロード時にはこれらの情報が保存され読み込まれる。
 +つまり、ゲームのステータスのすべてはこの情報だけで完結している。
 +===== 音データ =====
 +
 +===== メッセージファイル =====
 +
 +
 +===== セーブデータファイル =====
 +
 +ゲームデータがセーブされるとセーブデータファイルが作成される。
 +セーブデータファイルはシステム間で互換性が保たれている。
 +ファイル形式で保存され、ファイルシステム経由でアクセスできる、M5版、Raspberry Pi Pico版、Windows版、Qt版、SDL2版、AvaloniaUI版では相互にセーブデータをコピーすれば他のプラットフォームでもそのままロードしてプレイすることができる。
 +
 +Web版は、ブラウザが管理するローカルDBに、Androidもシステムの提供するDB内に保存される関係で、他のプラットフォームとセーブデータをやり取りすることはできない。
 +
 +セーブデータは、コアシステムのワークとユーザデータ((マップ間のリンクデータおよびアイテム情報、フラグ情報))からなり、バイトデータの集合となっている。
 +データがすべてバイト単位であるため、エンディアンに関わらず、データに互換性がある。
 +
 +==== コアデータ ====
 +
 +コアデータはシステムの状態を保持している8bytesのデータ列である。
 +
 +^オフセット^内容^
 +|+0|現在のマップID|
 +|+1|ビューマップID|
 +|+2|直近の動詞|
 +|+3|直近の目的語|
 +|+4|選択された選択肢|
 +|+5|乱数値|
 +|+6|選択状態|
 +|+7|選択肢のメッセージID|
 +
 +多分、現在のマップIDとビューマップID以外は実は保存する意味はない。
 +
 +==== ユーザデータ ====
 +
 +ユーザデータは、マップ間のリンク、フラグ情報、アイテム情報の三つからなっている。
 +
 +=== マップリンク ===
 +
 +マップ間のリンクは、マップIDごとに、北、南、西、東、上、下、入、出の8bytesからなり、87部屋分のデータ配列となっている。
 +それぞれ、その部屋の各方向にはどの部屋がつながっているのかを部屋IDで表している。
 +
 +リンクはユーザの行動によって変化するので、断面データを見ても、ゲーム全体の正解ルートはわからないし、この先にどう変化するのかもわからないので、ゲーム攻略には多分使えない。
 +
 +=== フラグ ===
 +
 +フラグは、特定の動作が行われたかどうかや、消耗するアイテムの場合消耗度合いなどが記録されたデータで15bytesのデータである。
 +
 +=== アイテム ===
 +
 +アイテムは12種類存在している。
 +それぞれのアイテムがどこにあるのかの所在が記されている。
 +消費されて消えてなくなったのかどうかもここに記されている。
 +
 +データを改ざんして、すべてのアイテムを最初から所有している状態から始めることもできるだろうが、だとしても、それだけで攻略できるほどこのゲームはぬるくはない。
 +
 +仮にすべてのアイテムを保有した状態から開始したとしても、そもそも学校に入れないし、コアデータを改ざんして、学校内のどこかの部屋にいることにしたとして、それでもほとんどの行動はできない。
 +
 +アイテムを集めなくていいので行かなければならない場所は減るが、それでも必要なフラグを立てるための行動が求められるので、ほとんど難易度は下がらないだろう。
 +
 +
  
  
技術資料.1708480221.txt.gz · 最終更新: by araki