「format/tah」の編集履歴(バックアップ)一覧はこちら
「format/tah」(2011/09/24 (土) 20:11:39) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
**アーカイブ (.tah)
TDCGのアーカイブ形式です。
公開ソースコード:
-TAHdecrypt (C#)
--関数形式なので流用は難しい。TAH versionに未対応。
-TDCGMan (C#)
--クラスとして実装
-TDCGExplorer (C#)
--TAH読み書きともクラスとして実装
***構造
ヘッダー部分
uint32 magic; ※ TAH2
uint32 numentries; ※ エントリーの数
uint32 version; ※ TAHバージョン
uint32 nouse; ※ 予約
エントリー部分
uint32 hash; ※ ハッシュ値
uint32 offset; ※ データ先頭オフセット
※上記uint32をnumentries回数繰り返す
ディレクトリ部分
uint32 dirlen; ※ 展開後のディレクトリテーブル長
※圧縮データの長さはこの位置から、エントリーの最初のオフセットまで
LZSS Deflate圧縮に、圧縮前の長さをメルセンヌツイスタの初期乱数種で作った乱数と
XORした物によって、以下のデータを格納する(以後同様のデータはDeflate+MTと略する)
TAHdecryptでは32byte以下の圧縮データを生成しない。これはバッファオーバーランが
起きる為であると説明されている。TDCGManではスライド辞書ウインドウの開始位置が、
スライド辞書ウインドウの長さより短いデータを生成してしまう。現時点では、
3Dカスタム少女の動作に支障を与えた例は報告されていないが、いずれの場合に
おいても圧縮されたデータを元に戻す事ができない。いずれの問題も、TDCGExplorerの
TAHクラスでは対応している。
圧縮率はTDCGExplorerが最も高く、TAHdecryptorが低い。この為、同じデータを
両者で圧縮するとファイルサイズが一致しない。これはTAHdecryptorのスライド
辞書ウインドウ候補を4個しか保持しないのに対して、TDCGExplorerは4096個保持する。
圧縮前のデータ構造は以下の様に記述される。
data/<NUL>
script/<NUL>
script/items/<NUL> ※最後に示されたディレクトリ名がファイル名に結合する
N999BODY_A00.TBN<NUL> ※大文字小文字は無視される。内部的には大文字にする方が間違い。
data/icon/<NUL>
data/model/<NUL>
N999BODY_A00.TSO<NUL>
data/icon/items/<NUL>
N999BODY_A00.PSD<NUL>
※<NUL>とは1バイトの0値。
※3Dカスタム少女上では、tbnファイルのみ格納すれば良い。
それ以外のファイル名はハッシュ値によって識別される。
データ実体
ファイル末端まで、以後データ実体が格納される。
データ実体の形式は、
uint32 length; ※展開後のサイズ
Deflate+MT
※上記の構造がヘッダー部numentriesの数だけ繰り返される。
※最後の構造はファイル長さ-オフセットによって圧縮サイズを求める。
**アーカイブ (.tah)
TDCGのアーカイブ形式です。
公開ソースコード:
-TAHdecrypt (C#)
--関数形式なので流用は難しい。TAH versionに未対応。
-TDCGMan (C#)
--クラスとして実装
-TDCGExplorer (C#)
--TAH読み書きともクラスとして実装
***構造
ヘッダー部分
uint32 magic; ※ TAH2
uint32 numentries; ※ エントリーの数
uint32 version; ※ TAHバージョン
uint32 nouse; ※ 予約
エントリー部分
uint32 hash; ※ ハッシュ値
uint32 offset; ※ データ先頭オフセット
※上記uint32をnumentries回数繰り返す
ディレクトリ部分
uint32 dirlen; ※ 展開後のディレクトリテーブル長
※圧縮データの長さはこの位置から、エントリーの最初のオフセットまで
LZSS Deflate圧縮に、圧縮前の長さをメルセンヌツイスタの初期乱数種で作った乱数と
XORした物によって、以下のデータを格納する(以後同様のデータはDeflate+MTと略する)
TAHdecryptでは32byte以下の圧縮データを生成しない。これはバッファオーバーランが
起きる為であると説明されている。TDCGManではスライド辞書ウインドウの開始位置が、
スライド辞書ウインドウの長さより短いデータを生成してしまう。現時点では、
3Dカスタム少女の動作に支障を与えた例は報告されていないが、いずれの場合に
おいても圧縮されたデータを元に戻す事ができない。いずれの問題も、TDCGExplorerの
TAHクラスでは対応している。
圧縮率はTDCGExplorerが最も高く、TAHdecryptが低い。この為、同じデータを
両者で圧縮するとファイルサイズが一致しない。これはTAHdecryptorのスライド
辞書ウインドウ候補を4個しか保持しないのに対して、TDCGExplorerは4096個保持する。
圧縮前のデータ構造は以下の様に記述される。
data/<NUL>
script/<NUL>
script/items/<NUL> ※最後に示されたディレクトリ名がファイル名に結合する
N999BODY_A00.TBN<NUL> ※大文字小文字は無視される。内部的には大文字にする方が間違い。
data/icon/<NUL>
data/model/<NUL>
N999BODY_A00.TSO<NUL>
data/icon/items/<NUL>
N999BODY_A00.PSD<NUL>
※<NUL>とは1バイトの0値。
※3Dカスタム少女上では、tbnファイルのみ格納すれば良い。
それ以外のファイル名はハッシュ値によって識別される。
データ実体
ファイル末端まで、以後データ実体が格納される。
データ実体の形式は、
uint32 length; ※展開後のサイズ
Deflate+MT
※上記の構造がヘッダー部numentriesの数だけ繰り返される。
※最後の構造はファイル長さ-オフセットによって圧縮サイズを求める。