FC2ブログ

三角端。

Δ-sphere管理人三角区也による絵日記/ゲーム開発日記。コメントは右側のweb拍手からどぞー。

バイナリファイルのお作法

今日はバイナリファイルのお話です。

以前作っていたフォント用ファイルが今見てみると大変扱いにくいファイルフォーマットだったので作り直していました。
あとテキストテーブルがなかったことに気付いたので新規に。

テキストテーブルというのは専用のIDと文字列が紐付けされたテーブルです。
たとえば
ID:text_000 text:オープニング・・・魔王が攻めてきてうんたらかんたら・・・
そんな感じ。
ツクールをやっている人からしたら直接イベントに書き込んでしまえばいいじゃん、って思うかもしれませんが、
テキストの変更をしたいときに変更箇所を探すのが大変になってしまいます。
それが複数箇所で使われていたりするともう何箇所変更すればよいのやら・・・
(あとは、まあ、翻訳することがあればすごく楽になるんじゃないかなあ・・・)


自分はバイナリフォーマットを作るときに、
[ヘッダ]
[データ1]
[データ2]
・・・
という形をとります。
ヘッダにはバージョンと各データ先頭までのオフセット値を入れてます。
そうするとバージョンアップしたときに対応しやすくなります。

今回のテキストテーブルは
[ヘッダ]
[データヘッダ列]
[テキスト列]
[ハッシュ列]
という形をとりました。

データヘッダは[テキストIDのオフセット][テキスト本文のオフセット]となっていて
それぞれがテキスト列のどの位置かを指し示すようにしました。
文字列はデータサイズが一定ではないのでちょっと面倒ですね・・・


これでデータを探すときは
1.ハッシュ列に対して大体どのあたりにデータがあるかを探す
2.1の値をもとにデータヘッダを探索
3.2で見つけたデータヘッダの指し示すテキスト本文を取得
という流れになりました。

それでこの解析器を独立したモジュールにしたのでもう安心です。
過去の自分は何を血迷ったか、データヘッダにデータの構造体しか書いていなくて
どういったファイル構造なのかまったくわからない状態になっていました。
まさか、過去の自分が書いたコードをリバースエンジニアリングする羽目になろうとは・・・
スポンサーサイト