最近在准备制作内嵌于script的WME引擎字幕翻译工具。
+ i' g }. V& J; y制作工具之前,想把script格式分析一下。
2 ^" d G. [* F/ S4 K下面公布目前的发现: # w, ?$ e- {$ @" Y
& h, J# e, Z$ `1 n暂时以迷迭香的scenes\TomHouse\scr\mom.script 为例子来说明 3 ^- ~% u4 C0 y2 z C( M* m
* g1 v' d4 n+ r
1.文件头部1 . H3 C$ }" H# i! p0 W. q! v
这部分的内容是固定的,共32个字节 8 c$ B$ d" t: E& D( [7 Y/ V
+ i3 [1 t: B; Z" q. }
DEADC0DE & `' J$ l* \. X8 f
02010000 3F000000 77150000 8B150000 C3170000 0A180000 0E180000
' L/ s0 N1 l8 i6 q) [6 w
0 `; N8 j* K0 M$ x3 ]& ~6 X# S最前面的是软件公司的标记,后面红色的意思不太明确,可能是版本号,3F000000 不知道是个什么数量. 后面蓝色的是5组偏移量,77150000 就是偏移00001577h,这一点测试过是正确的。 H" ?$ d. X; T! p+ [4 w1 E
找到那个偏移量后又是一个结构。
x' x' q- G1 s7 _( _) I结构如下 2 d) e0 t, {$ ?" W6 e6 l
8 C3 I7 j4 E3 y' C! v. X
4bytes ------->1个数字N 6 |% _1 Y2 x; [2 \9 p% P
N*(4+m) bytes---->N组小结构,前面4个字节好像是个偏移量,后面是个字符串,好像是命令或函数。
$ M/ @/ C9 [( c+ |, n6 N* e s& u% M
2.文件头部2
! a% q- z9 N- x$ t存放的是这个script文件的相对路径名。
5 ]- H/ \' [, E# ^比如scenes\TomHouse\scr\mom.script,00结尾。 ; A: E& ^3 v: i/ A7 ]% @% L5 x
" Q4 K% L# s5 J( ^( b4 I+ F \) g" Y3.文件头部3
) r' `$ H3 N- t512个字节,每4个字节1组,好像代表一个什么数字?
' p' Z9 ?- _5 p8 ?7 {/ h6 M8 s% x% B8 a' x6 h+ k$ t
4.数据部
) `3 g: i; G7 Z3 n数据部也有一个结构,再不断重复着。可能和尾部的数据也有关。 3 M+ S2 F# v, K" D5 q' g' |4 M
人物对话的Talk函数就写在这个数据部里面。有待进一步分析。
! X6 D8 s; B( M) l0 @* e" w& ^$ Q4 u
5.尾部 1 e7 W9 m2 c" V0 Y
前面头部的蓝色部分的偏移量都指向尾部。
' u7 e" q0 x- N4 D, Z
+ k+ R8 \# Q6 f* G3 p8 Z" w分析到这里暂时已经知道为什么修改中间的字幕时,如果改变字幕字节长度就会出错了。
d2 u6 f3 Q4 W3 V9 J* f! f& x因为数据部的长度改变以后,头部的偏移量却没变,自然到原来的地方就找不到原来的数据了。 1 [2 r- f# a$ b
我们把文件结构分析清楚以后,应该可以做到任意改变字幕的长度。 " c0 {" D, A" J# w
放上几个样本文件可以供分析用。
, R( m- C( ?4 Z4 T; J: K# N# ^8 j-----------------------------------------------
8 C7 n2 C4 y! Q; V2009.7.15 更新
9 Z+ z2 g" U# D/ d7 n. Q% E ]8 o我试验成功了,我在迷迭香的游戏开始的那句话里面加了2个字节。
# P4 s3 y( R' H/ F, s" s然后把上面的5组偏移量都加上2,比如99 12 00 00 变为9b 12 00 00 ,进入游戏可以正常运行。
. h; s3 V: I# P' i' B7 z! {; g0 C$ \附上2个文件,带目录拷贝到游戏根目录就行。 ( J$ r7 x' [% p+ w* m5 M/ y6 ]
深绿可以下载看看,你什么地方改错了?我是用hexworkshop来加上2个字节的。" `6 Z9 j4 z8 E) @5 S9 `$ C) B
接下去可以着手开发工具了。1 N; `9 x# m* `' s( j G
* X" J1 f! }) ~, X抓图
% {& N- Y& ~$ U6 k |