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

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

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

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

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

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

进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。
  d+ s5 U1 O5 R5 Y- y* _! X% z7 j2 r: B. c
汉化游戏主要是要找出两种文件及对应的文件格式:
4 V8 ]7 I/ x8 }$ |  T" S
- j) J1 Y; C  [$ b8 p1。游戏的字体文件
8 e: Z+ ]; z& a2 N  z/ t$ A
7 r# U. y- `9 N3 h  @8 H2。游戏的英文脚本文件(就是游戏中的情节、对话部分) ; ^* I) z. }2 i5 t% `! E1 Y, J

1 \1 \$ k  D2 L8 F但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。 ( z2 S( X7 C! _- u' ~/ z5 L! l0 x
  P$ K, A! p- e
这样看来,找出文件格式主要有两种方式:
, A; m- s! S& _* G
7 h$ K+ ]1 c  D+ e& {' \1.  搜索网上的资源,寻找骨灰级玩家,求得帮助。
3 S! }4 w2 z) a
- {! \" l( a2 ?: h2.  自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。
& {2 l: C% K* W+ e8 p7 v; V* W2 E- h2 e  X4 h0 b/ J
幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(http://scumm.mixnmojo.com)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。
3 P$ i! [/ h! {2 V" U
% L" }+ I2 B( L4 q* |  0 I6 n) h8 |, X% S! o, g/ n
9 v" g( {; b/ D% s, J% o
下面针对GF开始介绍用到的几种游戏文件格式 & J$ I% y0 W# F. \

+ [; u, \# J/ G3 }$ h6 i1..tab文件格式 ( s1 e/ f8 w4 \; o8 l. x* s

/ h  l6 ~7 s4 ]! ]: w7 ]是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。 " V1 |+ b/ c# q' ]
以下是解密文件的源码(C#):
( W% `8 `1 x2 J( ?
. [1 r# _( m8 e& ~# ~9 b3 y" ^
* K5 E0 T; |+ G. W7 O" \: h* S0 k9 T" g$ [
private void button1_Click(object sender, System.EventArgs e) 9 y( g0 h. `8 L; Y
        { + h. w, }, i' W& U7 V1 \
            // Create the reader for data.
) F1 J6 S) Z  A) n2 K            FileStream  fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read);
6 C8 r2 V& o8 h* E0 [# I$ `$ [            BinaryReader r = new BinaryReader(fs);
- f7 h; Z- Q) W& [$ I
, T9 j9 W9 x/ h6 _& B. K) h            FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create); & B! e) Q8 `7 j, {
            BinaryWriter w = new BinaryWriter(fs2);
; x" `) i1 _2 u( Z4 D1 F            fs.Position = 4;
- s* U4 p4 N( q            while(fs.Position < fs.Length) 9 ?* E8 S2 v8 X! ~4 w, k. ^
            { 6 A* b/ D; \/ ?/ F/ E
                w.Write((byte)(r.ReadByte()^ 0xdd));
' t1 e- \" W. {0 v( r            }
5 b' v$ Y+ J2 s$ [. f- j            r.Close(); $ x" y' ?* y$ n' }
            w.Close();
# p" z- t7 m) U; B0 B. z3 N) `            fs.Close(); 1 r2 Q0 M( C& K0 A9 E
            fs2.Close(); ( q1 }1 B7 w2 }8 F0 X( K( G: |

1 i/ ^& T0 \; F. R5 Z2 x+ C        } ' f. S# j! H4 P+ j

: D: e4 q: c# |. l, l/ E解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析:
" d' i# y! p! E0 v' [* S6 X% t7 S
% V+ V" O4 U2 A9 D; k/ \) [/ t8 `% G' x. `- I
sito030  Oh yeah, yeah. Yeah. That is what I told him. # s! n! c! ?" R5 t- e# v4 J
5 Q% f; t) S5 w! H) K/ b; ]
sito031         Are you kidding me?
8 V# c: s* [5 X4 W& F) M- t) D7 T4 B# H
sito032  gave him the idea in the first place! 7 ]0 x4 u* N. v3 J6 @* U/ i
( d" i6 i; g0 e1 L* d5 o( T/ |
可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。 3 o# h9 P' C  w* f  k! W9 ^: S

) x: u) o9 ^9 o  f+ g. q/ ?对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断 . X) O7 z, Y! N* W/ G

0 `, \* d) E0 {4 \5 G2..lab文件格式
9 V9 r- ~- ?+ F2 R) H$ x( Z( \) s( k+ ~
是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。 " Z% L3 D7 K/ N9 z/ z& M# P0 @1 C

! R5 E7 ?6 a9 e* JLab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档 ( Y( |5 N! H* d3 k
0 z& t! q; _! v
(1)    文件头
0 j& O: x% I4 Q9 o9 T, N" p5 ^* _0 @2 U2 T* e. x
  
" U5 y  |3 M& ^/ a% _8 X" E# f6 g3 A3 D
字段 , S' K& e1 c- @5 T  J
数据长度
7 c  `1 i* X/ F. c- C  y 描述
% H& e  n  N2 u5 [$ C5 i 2 w/ F( b7 [& a9 Y3 M: m
Id
  t3 F5 I" b' k" g% {+ G  G Long(4字节) % C% K* J' F5 S6 |- h
文件头标识LABN
/ p+ N( p! E$ j8 a) X( H. W" E . a; a3 \! ^% O# |# N4 |, x
Version + H* c2 }4 C/ G3 t
Long(4字节) $ n, W9 X3 O; i7 ]. ^
文件版本号 2 ?; O7 S1 p$ s# C

4 K  F& G1 J# s! m8 ZFiles
( R: v* Z, ]) Z4 ?6 I7 L& W Long(4字节) + D1 h7 l$ v6 F) U8 I
此lab文件内包含资源文件的个数 " u4 A; e: O( p9 A3 u, n

6 L) r/ g3 O  @" h( Y: H: v+ o) ia
2 j: Q+ S: d8 @/ U# B  I  |" @1 H3 d# a Long(4字节) ( s; d+ Y! {/ D/ ~7 y' f
未知 8 k. ~0 L' O4 P8 z

/ u' Y: `+ P# J3 X1 U) \b
' R" I, \: v5 P" B: d% U/ `; | Long(4字节) ; N$ T5 c, D0 g- e
未知
  |9 {+ k7 h* T* O7 M7 X) u1 h
4 l3 s( v' |) @" ~( L9 D, K5 d% R5 U( W5 g8 B
(2)    文件偏移量表
( f7 r; T" \6 x8 x3 p* V5 R) l& y& G7 s% z- b
字段 2 R1 S4 Q: j1 ?1 q9 r) a
数据长度 - [; {. P: S- w( g; V/ D
描述 * d$ t9 K: C0 A% V

* ]$ j; B0 Z) i$ s+ m/ eOfs
& R  c+ z' _& I Long(4字节)
7 i8 Q9 a- _: x& i$ O% \0 U* @0 [ 文件名偏移量,用来找到资源文件名称 ) u  r5 i* v4 Y# K: j

% g7 G) z4 u9 C$ Y! |Offset ; j: c. D" B+ d2 O' ~- k, Q6 R
Long(4字节) 9 H# [9 I: m! Q/ d" ~
文件偏移量,用来找到资源文件在lab文件中的相对位置 - p1 i6 i. z/ J4 b% b

" M5 R6 L+ x* p5 G. z3 F0 rSize " A6 |( H8 C: Y6 Y; [. N" b; H6 v( V
Long(4字节)
+ x, w- \- `, O 文件大小
0 s" R! A- h, v' ?& ^ 4 ^/ n7 O( K1 x, ?  Q& A
U
$ Q5 _' v0 i/ b0 p, I. G) x" q Long(4字节)
+ p3 _# j+ v. }3 F6 e+ y  I 总是0 " ?0 }' \5 `. l& H/ z

. a# J' M% i+ ~# [- `" v5 b# y8 L8 @$ e, o/ q. w
(3)    文件名列表
1 D7 o; f# ?' \
2 s. X( B6 d2 y" B2 A. ~所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。 ) A  y9 @2 J! R" S' h- v- c

+ C9 u% a' H1 M(4)    文件物理存放块 1 u1 \* g, |; H; ?9 f. I$ P

( v9 ~  W) v6 B$ s: K5 b, K* q所有资源文件在此块中存放,首尾相连。
% |1 }8 Y( d  X( w
* r% e4 {* q' v) }附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。 % M3 M3 R: o! V; n7 B

0 a" e" s9 Z4 W2 ^Data005.rar # [  u- Z, L( |% v

) C7 P9 H8 v4 s) @9 d) O4 r3.Laf文件格式
- ?2 z' C# G6 ^. `8 T- s: M3 g' R- S: A0 e
是游戏的字库文件格式,将会在字库篇作详细介绍。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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