为了说明DRS文件得结构, 用gamedata_x1_p1.drs做例子.
1. 头文件头文件包括版权, 版本和文件类型(tribe),数据表得数量,第一个文件得位置,每个数据表里的文件类型,数据表的位置,和里面文件的数量。
00000000: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 31 39 Copyright (c) 19
00000010: 39 37 20 45 6E 73 65 6D 62 6C 65 20 53 74 75 64 97 Ensemble Stud
00000020: 69 6F 73 2E 1A 00 00 00 31 2E 30 30 74 72 69 62 ios.....1.00trib
00000030: 65 00 00 00 00 00 00 00 02 00 00 00 AC 00 00 00 e...........¬...
00000040: 61 6E 69 62 58 00 00 00 01 00 00 00 20 70 6C 73 anibX....... pls
00000050: 64 00 00 00 06 00 00 00 d......
格式
-----------------------------------------------------------------------
长度 类型 描述
-----------------------------------------------------------------------
40 bytes string 版权信息 Copyright (c) 1997 Ensemble Studios\032.
4 bytes string 文件版本 1.00
12 bytes string 文件类型 tribe
4 bytes long 数据表的数量 02 00 00 00
4 bytes long 第一个文件的位置 AC 00 00 00
4 bytes string 第一个表的数据类型 61 6E 69 62 (anib)
4 bytes long 第一个表的位置 58 00 00 00
4 bytes long 第一个表的中文件数量 01 00 00 00
4 bytes string 第二个表的数据类型 20 70 6C 73 ( pls)
4 bytes long 第二个表的位置 64 00 00 00
4 bytes long 第二个表中文件的数量 06 00 00 00
-----------------------------------------------------------------------
注意,除了版权、版本信息以外,所有的数据都是用4字节的dword存放的,dword中数据是从后往前读的。比如说 54000 是F0 D2 00 00
所以, 第一表是二进制文件(binary),包括所文本文件。第二个表是SLP图象文件。
2. 数据表
数据表存放每个嵌入文件的名字、位置、和长度,
00000058: d4 d3 00 00 ac 00 00 00 01 05 00 00 30 14 00 00 Ôó..¬.......0...
00000068: ad 05 00 00 82 38 00 00 38 14 00 00 2f 3e 00 00 -...‚8..8.../>..
00000078: 82 38 00 00 3e 14 00 00 b1 76 00 00 82 38 00 00 ‚8..>...±v..‚8..
00000088: 62 14 00 00 33 af 00 00 d6 78 02 00 63 14 00 00 b...3ˉ..Öx..c...
00000098: 09 28 03 00 d6 78 02 00 64 14 00 00 df a0 05 00 .(..Öx..d...ß ..
000000a8: d6 78 02 00 Öx..
其中D4 D3 00 00 是第一个文件的名字,54228. AC 00 00 00 是位置,01 05 00 00 是长度。后同。
格式:
-----------------------------------------------------------------------
长度 类型 描述
-----------------------------------------------------------------------
4 bytes long 文件名 D4 D3 00 00
4 bytes long 文件位置 AC 00 00 00
4 bytes long 长度 01 05 00 00
-----------------------------------------------------------------------
3. 嵌入的文件
000000ac:2f 2a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 42 4c 49 /* ********* BLI
000000bc:4e 44 20 52 41 4e 44 4f 4d 20 2a 2a 2a 2a 2a 2a ND RANDOM ******
000000cc:2a 2a 2a 2a 20 2a 2f 0d 0a 2f 2a 20 32 35 20 73 **** */../* 25 s
000000dc:70 72 20 30 31 20 2a 2f 0d 0a 0d 0a 0d 0a 23 69 pr 01 */......#i
000000ec:6e 63 6c 75 64 65 5f 64 72 73 20 72 61 6e 64 6f nclude_drs rando
000000fc:6d 5f 6d...................... 后略. m_m
没什么好讲的,从AC的位置开始,一个接一个,一直到文件尾
DRS文件的里的资源有的优先度, 比如说gamedata_x1_p1.drs里面龟船的图象就可以覆盖掉graphics.drs里同名的龟船文件...
至于文件优先度的顺序,在age2_x1.exe里面。
所以说如果要替换DRS里的哪个文件, 完全没有必要在原文件中替换。比如说要替换graphics.drs里的图象,没有必要替换graphics.drs里的原图。可以把新图加到gamedata_x1_p1.drs里面,用同样的文件名,系统会自动覆盖掉原来的。这样补丁发布起来就容易多了。
[此贴子已经被作者于2007-3-13 12:20:39编辑过]
|