冒险解谜游戏中文网 ChinaAVG
标题:
[转贴] GF汉化详细教程[文件格式篇]
[打印本页]
作者:
shane007
时间:
2008-10-6 10:29
标题:
[转贴] GF汉化详细教程[文件格式篇]
进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。
' M8 l3 g2 x7 _; K- d6 F+ _/ ?
& T8 ]$ }7 S3 ^, `& r6 A- c3 z* ~# Y
汉化游戏主要是要找出两种文件及对应的文件格式:
& ^" O1 H6 s- y+ _8 d6 o
. R& @: S( a( @4 ~ s! k4 V
1。游戏的字体文件
1 z z9 n) V, Y0 g( ?4 S+ z
* W9 b* w& N- o
2。游戏的英文脚本文件(就是游戏中的情节、对话部分)
6 G3 h! L6 l+ h
/ `7 t2 W( z; _9 R9 q
但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。
1 g! @, D* ~/ u6 w' R, j
4 @ `, }3 v& @- X9 d8 K& I
这样看来,找出文件格式主要有两种方式:
( q; z, X4 A0 _1 E: V5 m( b/ G( [9 S
O) @. r# ^% U1 e) f1 ^
1. 搜索网上的资源,寻找骨灰级玩家,求得帮助。
, t o# ^: d# h- ]0 d6 N$ z9 M
( N+ E6 K$ N k1 U7 d& _0 a
2. 自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。
+ U# f/ N9 b* S( o: j# f
$ j h$ y5 n) H
幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(
http://scumm.mixnmojo.com
)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。
C5 L" ^5 k, k; V) [, H
) z B; D4 y" k# `9 i
$ W# Q N8 E+ S' z$ z, \, D
5 T+ X8 s- D; c1 [1 W0 S, S( Q! H1 N
下面针对GF开始介绍用到的几种游戏文件格式
: L4 a& e W8 f- e- l1 U, C
. F) V6 w. n3 ?: Q& D
1..tab文件格式
0 H4 Z# e/ O9 u+ b' [3 H; e3 T3 o
# i5 V ?& y& T+ ~+ P
是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。
: `( M0 M1 |# x5 z
以下是解密文件的源码(C#):
# J1 E. U: ]" e$ G9 _. k
5 r; G- Z; N3 V7 h. \3 o* b( l
( ~ V: I: ^ ]( \2 \, U" w
/ }- {9 T% f7 V$ M
private void button1_Click(object sender, System.EventArgs e)
^/ `" U0 `& S" R& v& ?
{
* t7 i0 e0 A% S2 S! L( v/ k$ i
// Create the reader for data.
# Z/ v5 ?( x1 Y
FileStream fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read);
+ a" a( L1 R, V c
BinaryReader r = new BinaryReader(fs);
; ]) c) v) b' r5 c8 U `) [
- t" f; f' J0 t, I1 B- g! @6 w
FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create);
# ^/ j b5 ]# q8 u0 r* C% m6 |
BinaryWriter w = new BinaryWriter(fs2);
: ^" n* [& y# H) g0 Y
fs.Position = 4;
: X( B" [1 n; x- U1 C1 g4 Y
while(fs.Position < fs.Length)
[7 ^6 n X6 y2 [
{
4 \$ P. j# t! _1 k& T( F& T
w.Write((byte)(r.ReadByte()^ 0xdd));
" A+ ]. l2 o/ C K( H1 H
}
9 j; D# Y# K0 U3 c; K
r.Close();
# K7 r6 a5 W" G ~3 w- p
w.Close();
8 `+ m' d8 t G, j9 X/ l! ^+ a
fs.Close();
* V; d o% J: K2 l* r6 e9 n
fs2.Close();
' N) x' z- K. V1 R6 j! {
$ W C6 j; y& L: e9 t
}
* Q7 t5 |/ I! R
! _- q% t1 c2 V9 _5 p! Z: c
解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析:
5 h: I; R% Y1 a6 f
6 ^( O" M. Q. x2 r, O! E- B: [6 w
, h F" s3 s! c/ k" ?$ ~
sito030 Oh yeah, yeah. Yeah. That is what I told him.
8 y6 W8 q; q [5 F5 \1 V J
' \2 d6 G0 `) _
sito031 Are you kidding me?
4 u1 p0 P5 T& c$ p# u) S0 N! a" h
9 _# `0 F% K1 n" l- M4 s
sito032 gave him the idea in the first place!
7 ]& E. W& l' ^& a- z8 I$ y
' p; v3 k' g" m* B
可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。
! n, x8 j! @# u
. w* {" ^3 H( R. u8 R
对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断
% D! Y' m* C8 U
, |! E d1 ] C& V/ G- L
2..lab文件格式
% P" U. k! g* w h% _
0 F( }6 ?+ [& k- m* Z. k8 V
是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。
" Q4 L G% r* G6 N' e
3 h' X6 }! Z! A3 e0 e
Lab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档
2 [1 k# v" \( X3 Z0 U6 ^4 B2 X
3 C) f7 T' v! u2 B6 W2 ]% `' K
(1) 文件头
; ^9 D8 s% I; q0 j# G; ?
& U7 @# s7 R0 l6 H
/ H! r# K! o; _8 T5 u' \
s0 H3 K7 y; U. X6 {+ P
字段
& h/ J% e% b% m5 H2 x/ r3 b
数据长度
! ^/ P( h3 b$ ?* K
描述
, Z& |# v( _. g! T. P
; P% i' X# a" [8 } K' _& N
Id
% T7 v! G3 D' Y2 `7 e
Long(4字节)
, L# U" n! r! |+ {. J7 h) L
文件头标识LABN
5 v- D c5 E7 k* |
& Y5 G1 d/ S _; R$ l. ?2 h! H& j( i
Version
' D# Z" s' P! p" X7 ]
Long(4字节)
6 m+ e1 g) h! D4 r |0 z" x
文件版本号
3 v" ^! X6 @+ h5 K0 q
) x- a9 x$ f' T0 u4 ?3 X! B: ]
Files
3 L' p3 X3 O* q, S2 B! M9 U
Long(4字节)
+ O Z* y1 o: B8 k& v
此lab文件内包含资源文件的个数
9 ?- b" b- Z' D2 {" H+ y6 ~
0 M( l: q6 P/ Y9 ~' O8 p% O
a
. R6 r$ W4 U0 h1 l
Long(4字节)
: ~: I8 v* r+ @) s1 I% ^" Q, U |
未知
( o- V% d# }1 r7 Z& ~1 L
; Z- ]7 ~. U( r
b
# F( U0 i$ R& G3 K2 e$ L
Long(4字节)
" {0 k, `$ }6 R, q4 e4 k- Z( F
未知
/ v8 W0 `- @% h: O
( H: E: u/ R3 }) P, Z- J0 I
/ ?8 m9 A) g/ R; D/ k
(2) 文件偏移量表
1 {" {9 l5 d$ u/ b3 }! @3 d
* H. o$ F& W3 z, g$ R
字段
3 N8 @4 o& M7 j- Y
数据长度
; E) i% J1 k. I: Q
描述
0 h7 Y) O! Q, I) r' C1 B4 Y
- N; k {0 e: |' ?! F1 _
Ofs
' G% D) S& Z- {
Long(4字节)
% i+ y5 F$ Z: z" J( s/ j
文件名偏移量,用来找到资源文件名称
f" s7 X# @4 l+ Z8 M& M
7 n1 z" D( N& G0 U/ S
Offset
8 E1 n( p; D3 a1 s* m3 k- l
Long(4字节)
, d1 D" r p* ^& H6 K
文件偏移量,用来找到资源文件在lab文件中的相对位置
7 X9 |1 G; ^' U: m1 R' w; e
4 \2 a" n p- a4 A4 q
Size
/ Z! z3 p+ _( W) \& e6 b" K9 |
Long(4字节)
0 M/ l6 a. r) E, ~9 t0 g- E. Y
文件大小
$ r. p- M# ]/ }: h- J- d9 b* ^5 \
' Y) [5 y! K- k$ S
U
1 C! s7 [0 ?1 y9 O
Long(4字节)
( x; p& v4 k; b0 a8 V4 F
总是0
- w4 r8 P4 Y; a. C1 w; v+ X
4 {* I/ U, w1 ]( d
& D5 F \6 a. u/ X. h/ s* y
(3) 文件名列表
: \& A+ i! j& s0 k; _
" N" B5 V u1 `7 p9 s* s/ M8 M
所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。
6 f. V- a& O9 j
5 O+ |7 d2 ^; u' C
(4) 文件物理存放块
4 V5 S+ k, Q0 J9 K: ^/ h, L
. T: C5 F2 }9 Q% p/ k+ P7 r! u
所有资源文件在此块中存放,首尾相连。
! E# h* O+ {4 l% i3 C$ |
$ G9 u' v; `6 H0 k/ N% l3 ^# n
附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。
) E% `$ D" W" E8 D# ^
) G* V* g1 d( N0 x( ^+ D9 e
Data005.rar
. Y) B% i4 b6 P @
* W) d3 c. \6 N4 N. S
3.Laf文件格式
/ U3 l" s) F8 G6 G
( N4 d- \1 d& h8 W
是游戏的字库文件格式,将会在字库篇作详细介绍。
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2