冒险解谜游戏中文网 ChinaAVG
标题:
[转贴] GF汉化详细教程[文件格式篇]
[打印本页]
作者:
shane007
时间:
2008-10-6 10:29
标题:
[转贴] GF汉化详细教程[文件格式篇]
进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。
7 n. H$ A( C: u' Q' ?4 Y
/ Z, } @! e) A" u
汉化游戏主要是要找出两种文件及对应的文件格式:
/ |; H$ a' Z9 F! o0 m! q. Y% N
, _3 Y5 G5 a7 j8 g% I
1。游戏的字体文件
3 P! [* e. B0 M( T/ L
8 @* G3 u3 F" w) D6 i! x
2。游戏的英文脚本文件(就是游戏中的情节、对话部分)
- c) { o/ E/ s9 d9 Y; ~# l
$ K7 Y+ F2 N; d& s* q* M5 s. w
但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。
# ]9 r' `7 C# Y8 r# P+ @
! j" j1 x: P+ t$ G H1 y
这样看来,找出文件格式主要有两种方式:
7 d+ G, Z W/ E+ ` `
5 l& J9 S# M7 S: T& k8 [
1. 搜索网上的资源,寻找骨灰级玩家,求得帮助。
% j! G g/ Q! g2 H, L+ t
+ I6 X4 ^/ S K1 k* }# s1 V2 r2 [& C
2. 自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。
2 O/ z4 Q w9 f9 d7 r" [0 ]
7 B4 w: }4 K8 ~* ]/ O9 z
幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(
http://scumm.mixnmojo.com
)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。
, o" V5 @6 ^; T2 g9 W
/ _$ `- e) |6 X: b2 R ?, T3 t0 q
& O' a s* | C8 t. l6 B' B' j. T
% x7 o6 t1 [. j# D& e
下面针对GF开始介绍用到的几种游戏文件格式
7 @9 d+ l5 a$ ]+ I* |+ S3 J+ p
) D+ g% [! ~3 G
1..tab文件格式
0 k. p4 b6 }; `: d8 D
. u- |: P. R+ f
是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。
5 Q* l% e( r4 W, S: V5 W8 j- y: u
以下是解密文件的源码(C#):
5 @4 |' J4 k0 `5 U- U
& A! l& _( `* R2 W1 M3 D5 e
+ o! k7 X3 T; [6 l
; j$ Z; ^! V- M: J$ P
private void button1_Click(object sender, System.EventArgs e)
( Y- q1 j) q/ b. b
{
+ ^- _1 ^9 J4 O* s) J; q! e& Y7 y
// Create the reader for data.
! c8 y+ c4 g- L2 }% v; F
FileStream fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read);
6 ~. v ?$ ^ w& u4 T
BinaryReader r = new BinaryReader(fs);
& k- x# q0 K" ^% z! f0 d
" s( y j/ M$ f! U( q% u4 O( q. F
FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create);
3 s; g! W o6 Q/ W) F( N! i* T' O* c
BinaryWriter w = new BinaryWriter(fs2);
9 b+ r' p: S+ g1 C! g8 |4 C
fs.Position = 4;
$ A6 b2 k& O1 Y/ l$ v8 B
while(fs.Position < fs.Length)
& w9 N4 l9 m+ g1 [! O6 A& a& |
{
5 u O0 b: r& b7 h) J" z( K
w.Write((byte)(r.ReadByte()^ 0xdd));
8 g4 H$ B* X" k% I) b7 o$ G
}
- v* m- H4 t C+ [: B g
r.Close();
- x, I# S. A" N0 R* B# M
w.Close();
. A' c5 V2 U8 S" @ \
fs.Close();
1 U( l% I) G. g
fs2.Close();
' w& h8 Z3 `' S F6 l" k
( S2 \4 q, ~/ F3 Q' m z
}
. y7 p A) ~2 S6 L: C# {& a& @
1 a5 }6 [( F# R, y: u/ X
解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析:
( o& j8 k4 ^3 C, m3 L, I6 v; q
4 A2 s! `! d) J& m
' c/ `8 ]1 j! f5 Q2 X7 i' G* {: p
sito030 Oh yeah, yeah. Yeah. That is what I told him.
9 p c+ b' |, G, |9 K) L$ R, X
, r- z5 S; h3 i6 m
sito031 Are you kidding me?
8 O, A) V: m" }3 x2 f5 l* g; ~8 | _
, x. H9 ]: e* p) C
sito032 gave him the idea in the first place!
- q% y4 x/ W; \: I- J! X8 C+ @
, f6 q# c, d e: }( B
可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。
9 l6 o+ m+ c( @
7 ?0 ^8 |0 l: S, Y3 Z* B0 o
对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断
4 K Y c2 f0 O5 B. l
" I- V. P" W: R1 ], W
2..lab文件格式
( m4 q8 G" |! s2 v9 x f' F
# s$ Z0 M; n# _* `- q/ c
是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。
+ ]6 F6 t9 }5 A" Q; s) ~
) B. u0 \3 E6 \+ {* U V( l
Lab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档
4 Z a5 f! C% X) C9 d% W* E, U i
/ }4 V" l ?) e- G5 ~3 H
(1) 文件头
* K3 Z1 e3 O3 C! l
6 G1 q( Q3 _3 @5 Q
! l7 @/ f5 p9 p
! T A) R; K$ o
字段
: u- Q) G& @/ ], o6 B4 O3 [# }5 V
数据长度
7 ? b" J8 q9 q1 f _2 e
描述
$ n& ?: g4 w8 g" J9 Q! t
! i7 J. @ A* M6 o
Id
. B$ N! I! L. s
Long(4字节)
; E* A: |9 U* C* l
文件头标识LABN
5 i, L" K8 q/ d, F, T. d/ N( u) T0 ]
' P$ _4 _& D, h/ ~% @
Version
2 g1 `( A/ {+ e# L" Y
Long(4字节)
7 _9 y# g9 f6 g( a# |0 v. E
文件版本号
1 _5 x+ H( z7 o) G9 y$ X
, [1 U5 S1 M6 Z
Files
! P D5 K- C* B; Z" }& ^9 u4 |" x: l
Long(4字节)
" B) a* L. _, Z( r2 {7 T
此lab文件内包含资源文件的个数
9 q5 Q' B3 B, z* _% |
. l/ f4 r% I0 k4 p% q" h, m
a
. f* R+ P- q' ~" j9 e
Long(4字节)
) w$ R4 s+ Q, b7 m! w0 q
未知
7 n2 { \4 ^# h+ B9 V
+ k* o, K& r9 J1 F$ b
b
/ T8 m- _( b. d% }
Long(4字节)
' Z2 R3 Z% l' _
未知
- b+ l. g' [3 u8 g
, z4 U O* Z" M' u! Z i
( n0 M5 S2 b& ^8 e1 J+ f) u
(2) 文件偏移量表
& M: r8 V8 o5 M3 e
; j, `! z' y7 [* s Z6 W4 f
字段
?( d8 G6 U0 J
数据长度
\7 f" p% Z/ @3 N
描述
# D4 g# R, Y- A" r: T4 Y) \9 T# U
1 x, c: Z1 I6 p% B; q
Ofs
8 ]4 ]3 g4 S9 W' l
Long(4字节)
, n. @ Q8 D6 g7 q: c* s" Q
文件名偏移量,用来找到资源文件名称
k; k- J0 }2 s5 ]& I
& V! ?! S: {% h: }8 [& N5 K) _3 N" W
Offset
4 I! `& \. S8 {: S3 p7 S
Long(4字节)
4 j7 x. ]6 Z3 T( E1 U
文件偏移量,用来找到资源文件在lab文件中的相对位置
! A, S8 U' W9 C: i- R% Z& D" i' @$ j: Y
- z5 @2 |" Y1 T6 K
Size
; s" I+ N6 Y8 o* H- a7 X
Long(4字节)
3 r5 N* v8 P: P
文件大小
?1 K, u4 B' ?" y
- X# G7 c6 L( P6 O' c
U
2 {( j' j# \! U' y7 M
Long(4字节)
4 y7 L! c' M' A
总是0
; t) h" C8 }9 h5 {2 t
6 p* S! \. [. ^* K+ s3 E4 S- _1 D
. @2 f4 R7 p/ ]; p; h$ U
(3) 文件名列表
/ _4 {' c: ]" o# [+ f& u% f
% l3 n# A3 w# A
所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。
. T! K4 h/ c# j+ A$ y! ~( Y2 E
' O" Y6 F- \' r/ `( K1 C) D5 d
(4) 文件物理存放块
- M& s) r: w* {2 S5 W* `
/ c+ `# _; B" Z/ b9 }: ^( ?2 a( L: h
所有资源文件在此块中存放,首尾相连。
* g, o0 @- X3 \/ m
% E& I& U# S9 u9 o! c
附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。
2 u+ C$ s1 \2 A; u7 K- r' [0 [
. K( N" e8 \) B3 n) @- U
Data005.rar
$ E/ R8 |7 ^/ o9 p: G
8 _0 S' q$ f9 c z8 K/ i# n
3.Laf文件格式
- H& }) w4 K; S6 V# \' m1 r9 R
6 [0 v$ _4 u. ^3 h
是游戏的字库文件格式,将会在字库篇作详细介绍。
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2