设为首页收藏本站官方微博

[转贴] GF汉化详细教程[文件格式篇]

[复制链接]
查看: 1819|回复: 0
打印 上一主题 下一主题

[转贴] GF汉化详细教程[文件格式篇]

跳转到指定楼层
楼主
发表于 2008-10-6 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

[转贴] GF汉化详细教程[文件格式篇]

进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。
# g" f: N) x+ \* q" f9 @/ Y! j" Q  W, Z# I  |9 ?# F& C$ O
汉化游戏主要是要找出两种文件及对应的文件格式:
. n  Y  M1 h$ l0 u3 D) f7 B2 y
- ~* d. v. v* B& [. b# q% {; {1。游戏的字体文件
" [, b) }6 J  ^7 d. m# ~9 Q8 c, I' N6 I$ I+ s
2。游戏的英文脚本文件(就是游戏中的情节、对话部分) ; P/ m# g/ J4 c* c! j. r3 `2 u: J

# g2 F, J/ M& i但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。
5 `7 C. q2 k: M8 c# \; F4 {" F0 I6 d) z9 i* \
这样看来,找出文件格式主要有两种方式: + ^: i' [) _2 O* M1 i+ D% U& _, ~# P0 i

: l5 o4 w8 W  U! ]6 Q8 n1.  搜索网上的资源,寻找骨灰级玩家,求得帮助。
( z, ?) d" ]# M0 [6 h. H/ A3 c1 d
; D2 E" c3 q6 {' P4 o2 b& R2.  自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。 1 j2 C4 l! f3 S* X. n$ N- ]
& T" H8 e& s8 q' Z
幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(http://scumm.mixnmojo.com)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。
2 i7 N* H- `6 s; N* c
: N* Z- [$ ~0 T! N  : R, F  C4 T! }1 ^* a
, A% z$ p9 A+ x4 W! S- l
下面针对GF开始介绍用到的几种游戏文件格式
" c2 ~. R" S1 i8 p* R5 @8 S
2 Z" ?4 H* V" X1..tab文件格式
+ M3 J: C2 `  `% `9 }1 |" A3 G+ H/ T
6 p8 d( M- x# G" w是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。 / ^5 w" X. P: `4 x# z' k! I
以下是解密文件的源码(C#):
9 _, ]( v: j" a7 \! x2 g
! i0 J# y5 @: p4 T% k+ l* e4 a1 Z. P7 u% g

1 s- o2 C+ y6 x# ]. ^private void button1_Click(object sender, System.EventArgs e) ! h' P; S% M7 U! q: D5 o
        {
+ ~6 Z7 s( S6 p6 t# ^            // Create the reader for data. 8 h2 b; Z& `" p5 E4 n; _7 ^
            FileStream  fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read);
! p! q; G" ], h) y3 B9 [, t; i            BinaryReader r = new BinaryReader(fs);
* \, {# @4 _, F
! O9 l( Z7 A' y! E, F( M. _6 g3 Z            FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create); . s1 n1 S) t0 ~  U' i
            BinaryWriter w = new BinaryWriter(fs2); 8 g6 ?: u+ u1 {3 V1 t1 C
            fs.Position = 4; " D: w5 f% E: z
            while(fs.Position < fs.Length)
4 ]7 t" C$ i% T7 i$ s6 i* X" P$ a            {
" t! w, m! M8 Y6 u' A                w.Write((byte)(r.ReadByte()^ 0xdd));
, y& \; k- V! F& p7 u9 A            } + V3 Y% S; x, X4 X) ~4 M" ~
            r.Close(); ! e& j* G4 N( F( m
            w.Close(); 1 b, }& M/ R0 i, Y5 S( ]5 w
            fs.Close();
, j3 D6 w0 ^$ X3 U            fs2.Close();
$ w  M$ D( Z/ a  u
8 N, ?8 L: |: Y% `* x, [; \        }
$ X" W+ t6 s8 n0 N0 `% @2 t# P# X: ]) W% Q: A
解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析: * n$ {# \* G/ R  G* A8 x$ P$ Y2 T

. w% |. @0 T5 R3 i9 i6 e5 E2 u; [  F) N9 d6 F
sito030  Oh yeah, yeah. Yeah. That is what I told him.
* ~0 `$ d: S& v+ b6 _1 s" }4 u( O
sito031         Are you kidding me?
" r# ^2 C7 Z# M: k3 B3 Z
# o2 l* A+ A2 Z- Jsito032  gave him the idea in the first place! . r4 [; d7 U( T

% I7 D1 y/ v: D可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。
! [- O/ T( e; L( O- |( k+ O$ }3 P5 ^- Z3 X) @4 E5 _
对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断 6 _; f4 i* R& ]! s* Z0 ?

* Y* L- K2 P7 E" P2..lab文件格式 ! H9 P( U" m: J, D7 r4 k1 k8 T% v
% ~# g5 t/ h& A9 Q3 `1 X
是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。
, S8 _# ~8 K% l& _& B- V1 G! J2 g, F) R
Lab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档
* y; M) @% Y4 l( [" @# Z7 I) ~- k) m* x4 t- Z6 ?
(1)    文件头
- g* p8 I, P" ?# h  C
2 D: m& I" l) j# R5 ~2 }, P  3 G; M+ i: w+ g8 z5 B
% f1 l" B  Z- M2 l: j+ E0 e
字段
- B2 i- |3 q# s; Q" Q2 }- {3 Q+ ~+ W; u 数据长度 ! g" l3 R" R4 V+ q! M
描述
: I- b* }8 V4 a; ? 0 Y$ P, N8 |8 r( O
Id
& Z4 S( ~$ x& _) N( S5 }, ] Long(4字节)
5 |4 _+ z% z' Z 文件头标识LABN " g/ f2 a% |9 s; Y3 X/ i* q' i5 d

5 V; a5 I& g# ^$ u8 q7 pVersion ) B# d) x( t0 L8 S9 o7 |0 u
Long(4字节)
8 _) X7 [7 p, X9 ]) E 文件版本号 3 ?& H3 y7 G5 c" N9 Z* K
. ?; u% ~( |" E/ N! S* ^$ \0 I
Files ; ^6 u2 H. H2 W6 x: b2 ?: Q# U/ _
Long(4字节)
* d. O" j7 T  T0 E1 @ 此lab文件内包含资源文件的个数
( y7 h* }6 L. w5 s: ]8 U6 L 9 L5 u) K8 u0 Y4 [: u2 j( f
a
7 l) f2 O' Q, k* Y Long(4字节) + b. N9 V9 J: q% \$ l
未知 * m+ M. |* o' l: a

! @3 `9 s( w5 r' {: @" H2 J4 ]b / I3 b, A, z% B1 h+ @
Long(4字节) $ ~7 b1 V9 P7 L8 Y9 u7 Y
未知
8 J' v. q- \4 M5 E $ k  g! e, o. C, K: e) \( L
- Q$ ^/ ^7 a! C' `/ s8 L5 n1 N8 I
(2)    文件偏移量表 # j! @2 q; J& B4 R% S0 C

6 }# d/ \; b. V) [& v0 n. N字段 ) P2 c8 C+ q6 R1 k3 y
数据长度
) M: A* N- v1 r3 r1 t- ?1 Y3 I 描述
- {! o7 |9 }! [4 T2 U9 f2 |) ^' J / q0 Q9 C" e5 j$ y  b* C# n+ `
Ofs
) K+ h+ z- B9 ` Long(4字节)
* ~; y* F0 `' p0 o 文件名偏移量,用来找到资源文件名称 6 X! k( d2 g7 p) j$ j* m4 O! Z) o

1 E. d5 W9 {1 B$ t( {) rOffset 7 v. `. R" K! W9 g* Q, _9 x) j
Long(4字节)
- e3 H3 x+ K0 Y7 Q- { 文件偏移量,用来找到资源文件在lab文件中的相对位置 ' g* l' w4 n* \. E2 Q3 B3 G

2 C! s+ o! m" v7 c' q8 NSize
9 h$ e* c* m& Q" E0 h* n9 v, K; o Long(4字节)
- L: b' q8 ?: N2 F4 J7 q 文件大小
$ p( U7 r2 b4 Q0 n) m1 }& q
& C1 S  S/ x& H1 ?' vU
8 W0 Y6 x+ E. n, Q5 h$ E9 X; R, i Long(4字节) , |" K- Q& ]# _0 e
总是0
* B1 d; ?- I" j
) P& p* K: [: O& p- y) F( g0 l9 w' c$ @1 S" y+ D$ N/ w/ h7 f
(3)    文件名列表 $ V8 b- t! y1 }: d' h0 l' F

! f" U" ?, x& c5 y: k所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。
* |( B4 o6 p6 f3 G; \
  h' `- a9 O/ `1 L6 U(4)    文件物理存放块 & ]+ g, F# d( m' L  ?- `# {) T
# j; D. r5 }% `" `' P) @: @
所有资源文件在此块中存放,首尾相连。   n7 z( b4 t3 E5 f" `" e
& e! a: m+ n0 s! ~
附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。
" e9 U; f% `! V1 }. [3 q' s* ]  o2 M5 x. S6 [3 a  K
Data005.rar : _% J: K. b) g6 M

+ \; Q: m. Q& J( T$ q8 x- Z7 X  |3.Laf文件格式
7 a8 n5 y" n4 B. m# X
0 m# [0 @8 r2 S4 Z4 }, b- l是游戏的字库文件格式,将会在字库篇作详细介绍。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表