注意事項
- ここに載せている情報は公式発表されているものではありません
- 情報の利用は自己責任でお願いします。PSPが壊れても責任は持ちません
- 情報の追加&修正大歓迎!
参考URL
大まかな構成
ptfファイルは以下の5つのパートで構成され、それぞれに複数のデータが格納されている。
- ヘッダー
- タイトル
- プロダクトID
- バージョン
- プレビュー&テーマカラーパート
- プレビューアイコン
- プレビュー画像
- テーマカラー
- 壁紙パート
- 壁紙
- カテゴリー列アイコンパート
- カテゴリー列アイコン
- 第1階層アイコンパート
- 第1階層アイコン
- 第2階層アイコンパート
- 第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もダメと報告あり)
- アイコンデータが不適切な場合、デフォルトアイコンが表示される模様
- 圧縮フラグや圧縮前後のファイルサイズ値をかえればOK?
- 第1階層のデータIDが0x2cと0x2dと0x32以降が使われていない
- 0x2c、0x2d、0x30、0x31はなにも変わらなかった
- 他のIDはどうか?