盟军敢死队2及3 Y64文件格式表
盟军敢死队2及3 Y64文件格式表
地狱门神(F.R.C.)整理
|
数据区 |
数据块 |
小数据块 |
数据节 |
数据 |
数据类型 |
长度 |
描述 |
样例数据 |
|
Header DA |
Identifying DB |
|
|
Identifying Sign |
String |
6 |
固定 |
464344450000(FCDE) |
|
|
|
Version Sign |
Int16 |
2 |
盟军版本。盟2是2,盟3是3或4。 |
0200/0300,0400 |
||
|
|
Comment DS |
|
|
40/105 |
盟2中占40字节,盟3中占105字节。 |
|
||
|
Palette DB 0 |
|
Y DS 0 |
|
|
16 |
固定。此块包含Y值。每一个数据节均是Y值的递增数列。 |
|
|
|
...... 16*16 = 总数256 |
|
|||||||
|
Palette DB 1 |
|
Cb DS |
|
|
32 |
此块是Cb值的递增数列。 |
|
|
|
Palette DB 2 |
|
Cr DS |
|
|
32 |
此块是Cr值的递增数列。 |
|
|
|
Info DB for Angles of View |
|
Number DS |
Number of Views |
Int32 |
4 |
这里定义了视角的数量。 |
04000000 |
|
|
Number of Pics |
Int32 |
4 |
这里定义了每个视角的图片数量。 |
02000000 |
||||
|
|
Address DS |
Pic Address |
Int32 |
4 |
View 00, Pic 00的起始地址。 |
98010000 |
||
|
Pic Address |
Int32 |
4 |
View 00, Pic 01的起始地址。 |
A4210B00 |
||||
|
Pic Address |
Int32 |
4 |
View 01, Pic 00的起始地址。 |
F01D1100 |
||||
|
...... Pic Addresses: 总数由Number DS定义 |
||||||||
|
Picture DA 0 |
Info DB |
|
|
Zoom Layer Number |
Int32 |
4 |
这里定义了此图片的缩放层。 |
00000000 |
|
|
|
Pic Width |
Int32 |
4 |
图片宽度。 |
29040000 |
||
|
|
|
Pic Height |
Int32 |
4 |
图片高度。 |
E1020000 |
||
|
|
|
Number of Pic Block |
Int32 |
4 |
这里定义了此图片的图块数(包括附加图块,不包括空图块)。 |
CC000000 |
||
|
|
|
Number of Extra Pic Block Index |
Int32 |
4 |
这里定义了附加图块的索引数。 |
00000000 |
||
|
Block Locating DB |
Index Table SDB |
|
Index/Address |
Int16 |
2/4 |
这是用于在图片上定位图块的索引表/地址表。索引0xFFFF表示空图块(如水)。 |
0000,0100 |
|
|
...... Index: 总数由Pic Width和Pic Height定义 |
||||||||
|
Extra Index Table SDB |
Extra Index DS |
Unknown Sign |
Int32 |
4 |
固定 |
00000000 |
||
|
X Index |
Int32 |
4 |
图块级别的横坐标 |
09000000 |
||||
|
Y Index |
Int32 |
4 |
图块级别的纵坐标 |
09000000 |
||||
|
Index/Address |
Int32 |
4 |
图块索引/图块地址 |
59070000 |
||||
|
...... Extra Index DS: 总数由Number of Extra Pic Block Index定义 |
||||||||
|
Picture DB |
|
|
Separator |
Int64 |
8 |
通常为0xFFFFFFFFFFFFFFFF,但是某些时候变成了0xFFFFFFF |
FFFFFFFFFFFFFFFF |
|
|
Picture SDB |
DS 0 |
Middle Digits |
|
4bits |
这些二进制位应该直接放在指针的位7至位4。但是首先你必须交换这两个字节,因为它们在Comm2.exe中被看作为一个little-endian的16位整数。这些位是到Palette Y的指针(7-0)的一部分。 |
1000.b |
||
|
...... 4*4bits = 总数2 Bytes |
||||||||
|
Unknown Sign |
|
2 |
固定 |
0000 |
||||
|
DS 1 |
High Digits |
|
10bits |
这些二进制位应该直接放在指针的位17至位8。但是首先你必须反转DS1的每4个字节,因为它们在Comm2.exe中被看作为一个32位整数。这些位是到Palette Cb的指针(17-13)和到Palette Cr的指针(12-8)。 |
1110101001.b |
|||
|
...... 16*10bits = 总共20 Bytes |
||||||||
|
DS 2 |
Low Digits |
|
4bits |
这些二进制位应该直接放在指针的位3至位0。但是首先你必须反转DS2的每4个字节,因为它们在Comm2.exe中被看作为一个32位整数。这些位是到Palette Y的指针(7-0)的一部分。 |
0000.b |
|||
|
...... 64*4bits = 总数32 Bytes |
||||||||
|
...... 总共8*8个Picture SDB |
||||||||
|
...... Picture DBs:总数由Number of Pic Block定义 |
||||||||
|
Nothing/Unknown DB |
|
|
|
|
0/6,不确定 |
版本3为6,版本4则很长。 |
14FF00000000 |
|
|
...... Picture DAs: 总数由Number DS定义 |
||||||||
注意:
1、所有的整数数据类型都是little-endian的。
2、有“/”的项,盟军2的在左边,盟军3的在右边。
3、生成调色板时,从Palette DB 0,1,2的位置n0,n1,n2选取数据v0,v1,v2。
(v0,v1,v2) 是一个YCbCr空间中的颜色向量,你可以找到如下的转换公式:
R = Y + 1.402 * (Cr - 128)
G = Y - 0.34414 * (Cb - 128) - 0.71414 * (Cr - 128)
B = Y + 1.772 * (Cb - 128)
Y = 0.299 * R + 0.587 * G + 0.114 * B
Cb = -0.1687 * R - 0.3313 * G + 0.5 * B + 128
Cr = 0.5 * R - 0.4187 * G - 0.0813 * B + 128
注意这样转换得到的值可能超出区间[0,255],所以可能需要将超出的值替换成0或255。
调色板的索引(指针)为(n1 << 13) Or (n2 << 8) Or n0。
参考:
[1]invox
浙公网安备 33010602011771号