最近抽时间看了一下埃及3这个游戏,又有了一个挺大的新发现。
" h" U( w$ k* y& }以前我一直认为这个游戏是支持不解包的,但是一直没有发现正确的方法。 9 ]" Z+ L% i7 p# J( f
最近我再次研究的时候,我发现了一个以前一直忽视的重要文件
0 n0 h/ F$ x6 q\datas\CMN\CMN\INS\Install.ins ( ?7 k( w, z0 g: A; V% }
1 V0 W, B: u* R' S: U- u; A
内容大致如下
+ t' U: [9 [1 o \5 Q$ kSetGameVersion(1.0.0)
% o7 |) g0 E& x' TAddBigFile("cmn_cmn.bf",0,1) 1 x; x7 O1 s$ n" o2 l# Z
AddBigFile("cmn_med.bf",0,1)
7 p1 k7 T& e* O& Z; P8 {AddBigFile("loc_UK_cmn.bf",0,1) 6 C7 c& l* l2 j8 d5 h
AddBigFile("loc_UK_med.bf",0,1) & c% P, W; _5 q
AddBigFile("cmn_cmn.bf",1,1) / X& A! ]6 r! F" h2 Z* ?/ _* g
AddBigFile("cmn_med.bf",1,1) 2 N8 W8 T* ^( n: n
AddBigFile("loc_UK_cmn.bf",1,1) 2 x/ l8 o; f+ q
AddBigFile("loc_UK_med.bf",1,1) : G$ T6 ~2 D' y ~* r: p
AddBigFile("cmn_cmn.bf",2,1) ! a& \( @$ v$ ^) z7 `
AddBigFile("cmn_med.bf",2,1)
9 t0 E7 b$ A2 G1 J& FAddBigFile("loc_UK_cmn.bf",2,1) . b) ~: ^ f: l+ Q( w0 U
AddBigFile("loc_UK_med.bf",2,1)
( x0 e7 W4 J6 N* d8 \1 A0 o AAddFile("TXT\egypteIII.bin",0,1)
- P8 p4 i/ O; d4 wAddFile("TXT\egypteIII.idx",0,1)
! Z. k. D/ V+ `; d$ } b..... 3 P6 U; ]9 m- ^6 K/ Y
..... - v" e3 J# s% d7 T; ?0 d" Z
AddFile("TXT\CINE_01.srt",2,1) 2 J- h: T. c- q! B3 y
AddFile("TXT\CINE_04.srt",2,1) ; O2 C; o5 Z& q6 k
AddFile("TXT\CINE_09.srt",2,1)
. |4 I/ F, X' z U1 E! m/ m) F- `. c" o6 PAddFile("TXT\CINE_11.srt",2,1) 3 m# H2 H+ c \( W" y/ z- V/ ~
AddFile("TXT\CINE_12.srt",2,1) / e" a1 O7 F3 t7 v+ }
AddFile("TXT\CINE_15.srt",2,1) 1 ^3 L8 ?. A" N. o% k' u
AddFile("TXT\CINE_16.srt",2,1)
2 G: i, }2 I+ ~( F5 D6 gAddFile("TXT\CINE_17.srt",2,1) ! T) b& s) Q4 s4 }% C# C, P( F, \
AddFile("TXT\CINE_22.srt",2,1) 6 B2 T# e- `. R
AddFile("TXT\CINE_24.srt",2,1) 4 a0 ~0 p2 u) B
AddFile("TXT\CINE_31.srt",2,1) 5 W7 E3 \( |9 [: D, z2 U; P7 j/ y ?
AddFile("TXT\CINE_32.srt",2,1)
- a% z3 n& N3 g- bAddFile("VID\Cine_01.hnm",255,0)
, p$ i7 y) F1 P* F- jAddFile("VID\Cine_02.hnm",255,0) M) ^/ \! a) ?3 F9 b' N/ e
AddFile("VID\Cine_03.hnm",255,0)
+ ?8 ]' f2 h7 [( g6 P, wAddFile("VID\Cine_04.hnm",255,0) 0 p0 C0 j9 T! r. a3 c8 V
) t) P; i/ {, i
* E+ m, z3 x4 Q- l! b2 G$ |这个文件的意思还是很好猜的:
1 J, Z4 `( v$ `& v% E第1个参数是文件名 ' X) q$ N/ _. R; h9 s: }1 h. z
9 @0 V- M; q/ ~$ O
第2个参数表示读取源 5 W: G O0 K. t& e
0 从cd1的bf文件中读取 1 o4 K% x; X3 P" S/ v, J
1 从cd2的bf文件中读取
( r6 s: o; ^) } G. H) y2 从cd3的bf文件中读取
+ Z' q: F' @9 }, v255 从外置的loc相应目录中读取
" H8 }' t7 Q4 `9 p. A8 g& T$ q1 `/ ^% r& j1 y0 I
第3个参数表示从bf包文件中读取还是从外置目录中读取 $ O9 n) l6 Z q7 I1 L" d" h
0 从外置文件中读取 ! F- `3 x% n! v& x
1 从bf包文件中读取
. t: h) Q2 L) n, a& J- A% n' [2 k. p+ t2 ^4 c+ r/ h8 H
这样的话,修改这个文件就可以使游戏免打包了。
- S: N+ t0 V! E# y! W比如,要使视频字幕CINE_01.srt等外置的话,可以把
# ^4 a% w L) kAddFile("TXT\CINE_01.srt",2,1)
; K0 A& n- V' C- _ W6 c修改为 " X" s2 M: D0 Q% l* ? o/ R0 R
AddFile("TXT\CINE_01.srt",255,0) & L: t/ {$ D. _6 }) t
3 V- t+ z! Y0 Q这样游戏就能从外置目录中读取视频字幕并显示了。 3 H( N; U. K/ q9 Z
这个外置目录是\datas\LOC\UK\CMN\TXT " S) e* w5 p+ g7 {) T4 u
对话字幕的修改也是类似的,暂未测试,以后更新。 & T( _; [' r, t* \
+ a( ^: K9 c( }- y/ g附上抓图,以及修改后的Install.ins
8 O/ |5 ]* k6 k7 g, \
2 p- V& {; t& W! I$ k# v' C" f
/ u8 d" x3 v( {9 E& B------------------------- y; h: h! X- O) @* ^$ T9 o. l
2010.7.3 第2次更新 % B1 `& m6 S& R5 [1 }$ F
/ f4 I7 q* ?, Q% l, o
分析了一下字幕文件的格式,格式比较简单,我先把格式写一下。 " u. x0 C# x1 B/ k
我准备自己写一个字幕文件的导出和导入工具,并能把肥牛生成的文件里的内容都给导入回去。
( T2 c. t* k) F7 g; \! j& w$ X) |! E# o8 g
字幕文件格式如下
- k$ z$ I& f) v L1 b1 m% c字幕文件版本号 12字节 固定为STRv02.00.00
$ B$ B2 B7 o+ i* R/ j6 V- |字幕索引的结束位置 4字节 真正的字幕从这个位置的下一个字节开始 1 ]# k+ z6 L" ~" o' }
字幕数 4字节 表明共有多少条字幕
! A$ u2 s f$ k$ s3 M! v. S1 |! T C
2 [. x9 C7 X# i1 r. Y& u从后面开始每16个字节为1组定义1条字幕
2 C" k6 i3 I# ^# H1-4字节 字幕序号
# Q2 E7 Z" c. C; n5-8字节 字幕类型 0 x5 ~- c3 H. U+ D
9-12字节 字幕的字节数(这个字节数指可见字符外加3个0x00的字节数,最后还有一个0x00不算)
9 G/ Z4 D* ~. \2 O' j2 ]13-16字节 固定为4个0x00
8 \( w! j9 x8 G; { m: w0 @
# J# `' m, j5 E# a! ]附上原版字幕文件供参考 |