最近在准备制作内嵌于script的WME引擎字幕翻译工具。
5 s1 a, Z) Y9 e- |制作工具之前,想把script格式分析一下。 ! z# r" @' G% }" Y
下面公布目前的发现:
5 I& n A4 V4 n/ S8 ^( o; [8 n
& K- _# C/ @8 @; G# e, I/ N+ j' g; B. c暂时以迷迭香的scenes\TomHouse\scr\mom.script 为例子来说明
3 _) j1 C8 g# ~3 a$ G* s$ E3 \4 f% |1 a3 J
1.文件头部1 7 y1 g( c3 W- z6 D. Y1 u& k
这部分的内容是固定的,共32个字节
% E7 Y" L1 j3 P4 U/ {& [7 a! W( L9 n
DEADC0DE
4 l) N3 q8 I$ ?( \- C02010000 3F000000 77150000 8B150000 C3170000 0A180000 0E180000 + e1 X3 @- A4 L$ n1 R) m% e; k# c Z
; G% n2 ^3 J, U! P* x* t" i+ I最前面的是软件公司的标记,后面红色的意思不太明确,可能是版本号,3F000000 不知道是个什么数量. 后面蓝色的是5组偏移量,77150000 就是偏移00001577h,这一点测试过是正确的。 * \7 E3 Y& a7 a6 C6 r, R7 r, x
找到那个偏移量后又是一个结构。
; M3 i2 T6 C$ C& ]结构如下
2 H- }$ N) g, B/ Y) P' C1 Z1 y+ ]" {* ?8 K6 F- [
4bytes ------->1个数字N
- u! b* z8 |6 W( M( O: z4 VN*(4+m) bytes---->N组小结构,前面4个字节好像是个偏移量,后面是个字符串,好像是命令或函数。 $ l7 z; Z% r O+ T1 _# O2 i5 r! L
$ r, x1 b& e8 [6 A6 o* d8 d( m2.文件头部2
* `$ m4 z+ e; l% m# e/ ^存放的是这个script文件的相对路径名。 & G3 i6 W. H; d# E4 J8 V
比如scenes\TomHouse\scr\mom.script,00结尾。
0 Y/ E7 I! x, d3 F5 F% K% X0 p
+ G! c- R2 n& p# K) L3.文件头部3
( d$ K3 C$ [( K! J% ?512个字节,每4个字节1组,好像代表一个什么数字?
5 P' j$ a7 \ ]5 w3 z7 S8 K
. @/ u6 B: a$ D, h4.数据部
" q# W/ H5 @2 n& j数据部也有一个结构,再不断重复着。可能和尾部的数据也有关。
5 V8 \: Y; S3 j `. O' T0 S8 v人物对话的Talk函数就写在这个数据部里面。有待进一步分析。
0 k5 s" e+ s, a, j. J1 A+ H3 U& s* L4 i8 c' ?+ R' G
5.尾部 $ E4 j& k# a* }: a7 y& S
前面头部的蓝色部分的偏移量都指向尾部。
* X4 ], ?* C% X. [! @! s. J( J$ ^1 w% c6 X) G" _, ?
分析到这里暂时已经知道为什么修改中间的字幕时,如果改变字幕字节长度就会出错了。 * S; e, f P3 J
因为数据部的长度改变以后,头部的偏移量却没变,自然到原来的地方就找不到原来的数据了。 * X1 I3 A/ n; x/ W! ?1 h8 l
我们把文件结构分析清楚以后,应该可以做到任意改变字幕的长度。 & d# r2 }2 E3 @2 z0 B
放上几个样本文件可以供分析用。 5 S; {5 Q; L, e9 S8 Y
-----------------------------------------------
( X" K2 x, a( h4 b2009.7.15 更新 5 Y4 }/ m( W* M7 s1 y7 d
我试验成功了,我在迷迭香的游戏开始的那句话里面加了2个字节。
0 ?5 A5 Y: }8 p8 s. U然后把上面的5组偏移量都加上2,比如99 12 00 00 变为9b 12 00 00 ,进入游戏可以正常运行。 0 }+ L4 x, g w8 G
附上2个文件,带目录拷贝到游戏根目录就行。
; V9 O* d8 t$ A; a, S5 o" i深绿可以下载看看,你什么地方改错了?我是用hexworkshop来加上2个字节的。
+ N# ~8 O4 u: V, t$ f, r- d接下去可以着手开发工具了。
7 R4 \# D* a) c) h) Q, k1 Y$ V/ R: w/ s2 b
抓图* w3 p2 P5 S) w9 k4 o8 M1 l5 ~
|