技術資料
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
技術資料 [2024/02/20 07:17] – [画面データ仕様] araki | 技術資料 [2024/02/21 01:50] (現在) – [部屋データ] araki | ||
---|---|---|---|
行 193: | 行 193: | ||
このため、移植する際には、まずグラフィックスの描画ルーチンを実装し、データを実際に描かせてみてから先へ進めることにしている。 | このため、移植する際には、まずグラフィックスの描画ルーチンを実装し、データを実際に描かせてみてから先へ進めることにしている。 | ||
とはいえ、昨今は256x152のビットマップバッファを作って、それをターゲットの環境にレンダリングさせているだけなので、ほぼほぼ、問題なく動いている。 | とはいえ、昨今は256x152のビットマップバッファを作って、それをターゲットの環境にレンダリングさせているだけなので、ほぼほぼ、問題なく動いている。 | ||
+ | |||
+ | === 描画データ === | ||
+ | |||
+ | 先頭には、トーンパターンが何色分定義されているのかが1byteで表されている。 | ||
+ | トーンパターンは、1-7の色を指定されたパターンで置き換えるためのもので、カラーパレット機能のようなものである。 | ||
+ | |||
+ | その後ろに3バイト(BRG)のトーンデータが指定された数だけ続き、その後ろがようやく最初の描画データになる。 | ||
+ | |||
+ | 描画を始める前に、描画域全体を青(色コード1)で塗りつぶす。 | ||
+ | |||
+ | (x, | ||
+ | 読みだした(x, | ||
+ | yだけが0xffの場合はそのペアを捨てて、次のペアを新しい始点として線を描いていく。 | ||
+ | |||
+ | 続いて、(x, | ||
+ | |||
+ | 画像によっては、この後ろに、白線での輪郭描画、黒線での輪郭描画のデータが続き、最後にトーン処理を行う。 | ||
+ | |||
+ | トーンデータは最初に書いたように、パターン数+パターン数*3バイトのパターンデータとして登録されている。 | ||
+ | 最大で6 (カラーコード1-7に対応)のパターンがあり、対応するカラーコードを置き換えていく。 | ||
+ | |||
+ | PC-9801では、パターンデータのままに、縞模様を使った中間色画像として描画されたが、PalmOS以降ではそれらしい色に置き換えるように変更してある。 | ||
+ | |||
+ | PalmOSとAndroidには縞模様の中間色画像を表示する機能も付けてあるが、あえて表示する価値はないと思われる。 | ||
+ | ^ トーンデータ ^^^^^ 線画データ ^^^^^^^^^^^^^^ | ||
+ | |n|t1(B)|t1(R)|t1(G)|...|x0|y0|x1|y1|...|xn|0xff|x0|y0|x1|y1|...|0xff|0xff| | ||
+ | |||
+ | ^ ペイントデータ ^^^^^^^^^ 白線データ ^^^^^^^^^^^^ | ||
+ | |x|y|c|x|y|c|...|0xff|0xff|x0|y0|...|xn|0xff|x0|y0|x1|y1|...|0xff|0xff| | ||
+ | |||
+ | ^ 黒線データ ^^^^^^^^^^^^^^ | ||
+ | |x0|y0|x1|y1|...|xn|0xff|x0|y0|x1|y1|...|0xff|0xff| | ||
+ | |||
+ | == トーンデータ == | ||
+ | |||
+ | トーンデータは、3バイトを一組として、BRGの横8dot分のトーンパターンを定義している。 | ||
+ | カラーコード1-7で描かれている部分をこのトーンパターンで置き換え、中間色表現による色表現を行う。 | ||
+ | |||
+ | 要は、当該カラーコードのある点に対して、< | ||
+ | |||
+ | なお、今どきの端末の多くはRGB565であったり ARGB8888であったりと、より多色を使った表示がかのうなので、あえて中間色を使う必要性は高くない。 | ||
+ | |||
+ | 中間色は、要は、交互に色を並べることで、その中間の色に見せる(白+赤ならピンクに見えるように)というものなので、パターンのうち1が立っているビットの密度を数えて、それをB/ | ||
+ | |||
+ | |||
+ | === メッセージデータ === | ||
+ | |||
+ | メッセージデータは、部屋データのオフセット 0x500から0x500バイトの領域に配置される。 | ||
+ | 先頭からメッセージ番号0, | ||
+ | |||
+ | メッセージは最初の2バイトがメッセージ長で、その後ろに長さ分のメッセージデータが続き、その後ろに次のメッセージが配置される。 | ||
+ | メッセージはUTF-8でエンコーディングされている。 | ||
+ | オリジナルとなったPC-9801版はShift_JISだったが、時代にそぐわないので、PalmOS版を作るときにすべてUTF-8にした。 | ||
+ | メッセージ長はbig endianであるので、処理には注意。 | ||
+ | メッセージ長0の文字列が現れたらメッセージは終わりである。 | ||
+ | |||
+ | メッセージ番号0のメッセージは、そのマップが表示されたときに表示されるメッセージで、それ以外のメッセージは、その場所で特定の動作をしたときに表示されるメッセージである。 | ||
+ | その特定の動作は、コマンド・メッセージリンクで定義されている。 | ||
+ | |||
+ | ^メッセージ長^^メッセージ^メッセージ長^^メッセージ^ ^終端マーク^^ | ||
+ | |上位|下位|文字列0(UTF-8)...|上位|下位|文字列1(UTF-8)...|...|0|0| | ||
+ | |||
+ | === コマンド・メッセージリンク === | ||
+ | |||
+ | 描画データのあと、オフセット0x400から0x100バイトのデータが、コマンド・メッセージリンクになる。 | ||
+ | 3バイト一組のデータで、動詞+目的語+メッセージIDである。 | ||
+ | 後続のメッセージ部のメッセージ数分だけのエントリーが存在している。 | ||
+ | |||
+ | その場所で、動詞+目的語の動作をしたときに、ID番目のメッセージを表示する。 | ||
+ | |||
+ | ただ表示するだけなので、ゲーム中で何ら作用を持たないものであることは明らかであるが、 | ||
+ | こういう仕掛けを一所懸命しこんだであろう原作者たちの思いを表すものである。 | ||
+ | |||
+ | ^リンクデータ0^^^ ^終端マーク^ | ||
+ | |動詞|目的語|メッセージ番号|...|0| | ||
==== ものデータ ==== | ==== ものデータ ==== |
技術資料.1708413469.txt.gz · 最終更新: 2024/02/20 07:17 by araki