アーカイブ (.tah)

アーカイブ (.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の数だけ繰り返される。
   ※最後の構造はファイル長さ-オフセットによって圧縮サイズを求める。


  • 最終更新:2013-12-08 22:48:58

このWIKIを編集するにはパスワード入力が必要です

認証パスワード