assets 解析
Unity は assets というファイルにパッケージされています。
今回の対象は Unity5 です。
struct Assets {
header_size: u32, // BigEndian
full_size: u32, // BigEndian
version: u32, // BigEndian
base_offset: u32, // BigEndian
zero_guess: u32,
version_string: String, // Null 終端
num0: u32,
zero: u8,
base_count: u32,
bases: Vec<Base>,
entry_count: u32,
num1: Vec<u8>, // padding
entries: Vec<Entry>
}
struct Base {
num0: i32,
array: Vec<u8>, // num0 が負 size 0x20,num0 が正 size 0x10
}
struct Entry {
index: u32,
zero: u32,
offset: u32, // include filename size.
size: u32, // include filename size.
type: u32,
xtype: u16,
num0: i16,
zero: u32,
}
BigEndian と LittleEndian が混在していますので注意
翻訳データの loca_ge をエクスポートする処理を考える。
上記のヘッダを読み込んだ時点で
assets.base_offset = 0x19890
entries[578] (loca_ge の entry)
index = 579, offset = 0x17C15E78, size = 0x31638
が判明している
base_offset + offset = 0x17C2F708
entry.offset の先には
struct FileName {
filename_length: u32,
filename: Vec
}
テキストデータの先頭には data_size: u32 が付加されている。
17C2F708: 07 00 00 00 6C 6F 63 61 5F 67 65 00 DA 15 03 00
filename_length = 7, filename = "loca_ge", data_size = 0x315DA
filename は Null 終端では無い。filename の後の 0x00 はパディングなので注意。可変長
この後に実際のデータがあるので filename で data_size 分出力すれば良い。
フォントデータは ヘッダー, data_size, ttf, フッターとなっているので ttf の部分だけ抜きだせば良い。
この辺りの処理は UnityEx というツールがあるのでそれを使えば良い。
Unity は assets というファイルにパッケージされています。
今回の対象は Unity5 です。
struct Assets {
header_size: u32, // BigEndian
full_size: u32, // BigEndian
version: u32, // BigEndian
base_offset: u32, // BigEndian
zero_guess: u32,
version_string: String, // Null 終端
num0: u32,
zero: u8,
base_count: u32,
bases: Vec<Base>,
entry_count: u32,
num1: Vec<u8>, // padding
entries: Vec<Entry>
}
struct Base {
num0: i32,
array: Vec<u8>, // num0 が負 size 0x20,num0 が正 size 0x10
}
struct Entry {
index: u32,
zero: u32,
offset: u32, // include filename size.
size: u32, // include filename size.
type: u32,
xtype: u16,
num0: i16,
zero: u32,
}
BigEndian と LittleEndian が混在していますので注意
翻訳データの loca_ge をエクスポートする処理を考える。
上記のヘッダを読み込んだ時点で
assets.base_offset = 0x19890
entries[578] (loca_ge の entry)
index = 579, offset = 0x17C15E78, size = 0x31638
が判明している
base_offset + offset = 0x17C2F708
entry.offset の先には
struct FileName {
filename_length: u32,
filename: Vec
}
テキストデータの先頭には data_size: u32 が付加されている。
17C2F708: 07 00 00 00 6C 6F 63 61 5F 67 65 00 DA 15 03 00
filename_length = 7, filename = "loca_ge", data_size = 0x315DA
filename は Null 終端では無い。filename の後の 0x00 はパディングなので注意。可変長
この後に実際のデータがあるので filename で data_size 分出力すれば良い。
フォントデータは ヘッダー, data_size, ttf, フッターとなっているので ttf の部分だけ抜きだせば良い。
この辺りの処理は UnityEx というツールがあるのでそれを使えば良い。
コメント