カスタムテーマ作成


リンク






更新履歴

取得中です。




Counter

Today -
Yesterday -

ptfファイル解析


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

注意事項

  • ここに載せている情報は公式発表されているものではありません
  • 情報の利用は自己責任でお願いします。PSPが壊れても責任は持ちません
  • 情報の追加&修正大歓迎!

参考URL

A peak at the PTF format

大まかな構成

ptfファイルは以下の5つのパートで構成され、それぞれに複数のデータが格納されている。

  1. ヘッダー
    1. タイトル
    2. プロダクトID
    3. バージョン
  2. プレビュー&テーマカラーパート
    1. プレビューアイコン
    2. プレビュー画像
    3. テーマカラー
  3. 壁紙パート
    1. 壁紙
  4. カテゴリー列アイコンパート
    1. カテゴリー列アイコン
  5. 第1階層アイコンパート
    1. 第1階層アイコン
  6. 第2階層アイコンパート
    1. 第2階層アイコン

ヘッダーのデータ構造

ヘッダーは以下のようなデータ構造になっている。

アドレス バイト数 内容
+00 4 PTFファイルシグネチャ (00 50 54 46)
+04 4 不明 (01 00 00)(フォーマットのバージョン情報?)
+08 128 タイトル (UTF-8文字列)
+88 48 プロダクトID
+B8 8 ツールのバージョン
+C0 8 バージョン
+C8 8 不明 (08 00 00 00 00 00 00 00)
+D0 48 データなし (0x00で埋め尽くされている)
+100 4 第1パート先頭アドレス
+104 4 第2パート先頭アドレス
+108 4 第3パート先頭アドレス
+10C 4 第4パート先頭アドレス
+110 4 第5パート先頭アドレス

各パートのデータ構造

ヘッダー以外の各パートは以下のようなデータ構造になっている。

アドレス バイト数 内容
+00 2 パートID
+02 2 格納データ数
+04 4 パート全体サイズ
+08 4 格納データ群先頭アドレス
+0C 20 データなし (0x00で埋め尽くされている)
+20 - データ格納部 (データが順番に並ぶ)

データ格納部

データ格納部には以下の構造を持ったデータが順番に並んでいる。

アドレス バイト数 内容
+00 4 データID (アイコンID)
+04 2 データタイプ ※1
+06 2 圧縮方式? (0x02:RLZ圧縮、0x01:Deflate(zlib deflated), 0x00:無圧縮)
+08 4 データサイズ (圧縮後) = 格納時点のデータサイズ
+0C 4 データサイズ (圧縮前)
+10 16 データなし (0x00で埋め尽くされている)
+20 - 実データ (画像はRLZ圧縮されたデータが格納されている)

※1)データタイプの対応表
0x00 PNG
0x01 JPEG
0x02 TIFF
0x03 GIF
0x04 BMP
0x05 GIM (PSP専用画像形式)

パートIDとデータIDの対応表

パートID データID 内容
0x00 プレビュー&テーマカラーパート
0x00 プレビューアイコン
0x01 プレビュー画像
0x02 テーマカラーID (4バイト)
0x01 壁紙パート
0x00 壁紙
0x02 カテゴリー列アイコンパート
0x00 カテゴリー列デフォルトアイコン
0x01〜 カテゴリー列アイコン
0x03 第1階層アイコンパート
0x00 第1階層デフォルトアイコン
0x01 第1階層デフォルトアイコン (フォーカス)
0x02〜 第1階層アイコン (偶数:本体、奇数:フォーカス)
0x04 第2階層アイコンパート
0x00 第2階層デフォルトアイコン
0x01 第2階層デフォルトアイコン (フォーカス)
0x02〜 第2階層アイコン (偶数:本体、奇数:フォーカス)

RLZ圧縮フォーマット

RLZ圧縮データのフォーマットは以下となっている。
アドレス バイト数 内容
+00 2 0x78 0x9C (内容不明)
+02 N 圧縮データ(gzip形式) N = データサイズ (圧縮後) - 8
+02+N 6 不明

  • 独自の圧縮形式
    • 圧縮データはgzip形式の「圧縮されたブロック」と等しい。
    • ptfファイルにCRC32が見つからないため、gzipではCRCエラーで展開できない。
    • 適当にgzipのヘッダとフッタを圧縮データにつければ、CRC32エラーは起きるが7zipで展開はできることは確認済み。
    • PSP上の自作アプリを使って解凍できることを確認
      • PSP上の場合、圧縮データをPSP上のsceKernelGzipDecompress関数で展開できるらしい。おそらくCRC32チェックをしないgzip展開を行っている。

  • 公式コンバータで作ると画像データがRLZ圧縮されている
    • 背景画像がBMPのRLZ圧縮、他がGIMのRLZ圧縮
    • BMPは指定したファイルそのまま
    • GIMはプレビュー画像がフルカラーでアイコンがインデックスカラー(αつき)の2種類

実験ネタ

  • 無圧縮の画像データを格納しても使えるか?
    • 圧縮フラグや圧縮前後のファイルサイズ値をかえればOK?
      • 無圧縮のGIM画像でためしたがだめぽ(PNGもダメと報告あり)
      • アイコンデータが不適切な場合、デフォルトアイコンが表示される模様
  • 第1階層のデータIDが0x2cと0x2dと0x32以降が使われていない
    • 0x2c、0x2d、0x30、0x31はなにも変わらなかった
    • 他のIDはどうか?
|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|