|
本帖最后由 differentrain 于 2014-11-17 17:17 编辑
. @9 S- s# k" R! s6 F3 \+ A, A- G) U+ y! S
其实最好是一切文件都不要改,只通过内存修改..# m4 [& @0 [7 c N) v Q" u
* B" x7 q7 N( U/ x! w6 I想从脚本的角度去控制游戏剧情,就看了一下游戏文件。发现游戏文件都是经过压缩或以特殊方式存储的。9 j9 D" c" x. Z |, R6 Q
; W7 Z5 t* s4 M# h& d这里是想说,这种存储方式会让我们产生一个美丽的误会,让我们觉得“呀,能改”....
- W4 s' j/ z. y
* y- Q; Y2 L+ ~===================6 y% P" B" P5 n& I U# a# Q) W
Data\下的文件:存储了游戏的数据。
' h m4 q! O* S4 s3 u: Y. a; j' W( s
虽然内容没压缩,但是却有特殊的格式。 H7 z6 a" J1 B, z
4 d0 N+ f. E, \# |7 v6 v% F- {6 t这个举例吧。3 n4 E1 H8 S# j. I
' B: a Z$ d) J+ {/ Z当我们用BIG码(950)打开文件\Data1\TVCase.dat的时候,除了乱码,我们看到了繁体中文的文字,看到了编号。0 T) D' ~' @ N3 `* w2 U$ t
7 A: G& T, j# j+ i$ s6 n
" [0 d8 \7 e0 y/ q" Q
! ~3 A- ]4 l* J8 Z但是这么改是会有问题的...
) U" b4 g' k$ Y# m. N' X& b% S p/ }2 L& d9 X b" f+ t
看十六进制内容。& P0 F* V3 q6 {( @0 V" z
* Z7 X7 @/ h# t+ _
3 L+ C7 s2 f& ]: S
$ B/ P+ l% h% v" c9 S* J! [就看第一行。
& r) X* {. j; F, {2 F1 a/ d$ N4 ?1 A# s1 V# P2 b; W
0x00的位置:F2 03,是文件头(文件类型的标志)。内容固定。Data下每个文件的最开头都是这样的。8 f- k4 k# O6 V' T
9 w) ~! j7 a& J6 ?1 K往后四字节。0x04的位置起是6F 01;0x08的位置起是A0 01;0x0F位置起对应的字符是TV001.. {+ P1 h" W# B8 j+ M: o/ w
# O4 H# K/ i' F! BTV001肯定是编号了。那前面的两个是什么呢?2 J- n) D" Y+ L, H3 w
$ m! M; t" h5 K7 U% _- B* o4 q, j, X/ k7 x( V" N' V
看文件大小。1 g. @4 l6 x. M: t
4 W4 G% a7 [# N! R k3 I
3 p# b p5 V2 ], K. O' f% P! \
, y+ y5 }& c8 ~1 d& k2 [16进制存储是从低位到高位的。所以6F01对应的十六进制数是16F,而A001对应的是1A0。
, x9 p- Y- b& [( n# Q1 _1 g$ ]7 k9 B% {1 V5 _3 K7 o) n0 O
打开计算器,在16进制模式下把这两个数字相乘。然后转换到10进制。
. J$ K# S8 [0 W- F0 H" }* e3 y- `. ~/ k5 U/ [
我们得到了一个数字:152672; X' k) p6 F9 n2 o6 y" ^3 V: j
1 [9 E S( e4 G. R p熟悉吗...这个数只要加上12,就是这个文件的大小了。而从文件头开始到0xA0 01为止,正好是12个字节。
0 J6 u$ Z2 H8 l ?" l# m, Q4 y
1 l u4 K6 I+ C L6 ]7 Q整理一下格式1 p& K5 w9 d |9 X+ D) b7 {
; E6 E+ y4 c) V+ j! H
- 文件头 四字节数值 四字节数值B 正文
N' w" ?% I* V: i3 ^ - 0x00开始:F2 03 00 00 XX XX XX XX XX XX XX XX XX XX XX XX
复制代码 6 u# L1 h1 X0 G
A*B=正文的长度- s. ` x3 [$ @- s) t; T. v
5 Q' x4 T" \+ w( ~
也就是说,如果要改内容,就一定要改A和B的值,让它们的乘积符合长度,否则很容易出错...# S G9 Q. O' w
7 R7 B8 r. c+ y) v6 @. P' F% r% e2 i
但是仍然有一个问题,就是A和B的值是随便选的,还是有规律呢?
x( E( I- V8 G' t7 d' G; h* ]* Y" P2 Z8 ~
我还不知道..需要调试。
* h' s1 B1 O4 S2 R3 M. v( t. G7 O6 e* d, C0 ^
所以还是不要轻易改的好...
5 x. _* b# r/ C* A0 ~============================/ }" a* K: m' W. `5 A& f2 D
说到脚本,就顺便说一下Script\下的脚本文件格式。 W! F- D8 b4 _$ i$ [+ \
) {( R: e( p+ ~) ?# P6 X2 L不说怎么分析的了。就说结构吧。
2 R% E, P7 G% y8 r' Z# n' n% {# n$ @- 文件头 文件头 压缩前长度 压缩后长度
9 \# t4 i; W, s - 0x00开始:00 00 00 00 80 00 00 00 75 63 49 00 DE CE 22 00
+ D; C9 r, H. }0 R8 M1 Z - ……
8 m% v) A" r& o4 b; \' l8 O; B# J! [ - ……
7 l1 i; {; E. q j( z - 0x80开始:正文
复制代码
! H& a' M% d m7 Q5 w3 S正文内容是LZO压缩后的luaPlus脚本。# N- R/ K2 T( l+ s! B. g& n# y
解压缩算法也还需进一步调试。
% j6 v8 Z$ h4 w! z7 N% q0 _=============================6 f$ K: R5 t' o' x {+ I( W6 Z* |& R
顺便说,为什么改存档就没事。' V2 m! ^2 j W. g
6 V# Q* H0 r1 Y( e; u因为存档既没有加密,前面也只有文件头"EC 03"..所以带胶布。1 T n3 `) y) r8 @# j3 D4 P
0 D, X$ z5 l+ y& b O( o( l% l
|
|