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

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

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

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

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

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

进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。
) l. P' G9 l$ E# _% p' Y% _* S5 J7 t. L4 I0 F% j1 T( o
汉化游戏主要是要找出两种文件及对应的文件格式:
) o* X. [( g8 @
1 B5 m% H0 b0 E2 A' y1。游戏的字体文件 5 D$ K$ E$ S0 U: P( ]" @7 w) q8 }

  J2 w0 U& \! b& A- t- s. k( V- e- ?2。游戏的英文脚本文件(就是游戏中的情节、对话部分)
0 L, y( h/ Q1 ]- w1 M. |# t& O
9 n' X0 B0 o8 Z3 I但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。 " Q' P  S) L/ c. M& H$ x

) h. G$ T) Q, B0 M  ?这样看来,找出文件格式主要有两种方式: 1 P, [* Y3 p5 t9 a( A; t" Q
$ K' j" [, k# q. A' g
1.  搜索网上的资源,寻找骨灰级玩家,求得帮助。 ( h- g4 k$ ?3 B2 c, B, [

: L7 x2 R$ c' \# S0 E# G8 {" D& U4 Q2.  自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。 4 A- W4 f, C# z- F! d+ S7 N# H: d- M
( f( {+ A# m4 c. W9 ?
幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(http://scumm.mixnmojo.com)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。
. D6 n  R% C0 ]/ f7 E/ A) o) V
0 n7 \. k/ n4 ^: R6 V5 i/ |  
- c( R  ?9 _+ n, Q6 i2 M
* \1 r" L& Q" L# _. M7 r9 N下面针对GF开始介绍用到的几种游戏文件格式 ) Q+ d6 _0 }3 C: ^) v
" d# h. H% y& Q4 x- k4 g
1..tab文件格式
+ }5 H; d4 |9 c, x% ?0 o% ~* k6 ~. p8 `* b8 i' V
是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。
6 u! V" b3 P% m6 J) ?6 z以下是解密文件的源码(C#):
2 Y' R( m% P! l7 s( h4 J$ e
! I1 q; d7 J0 _' z+ [
; `) W+ P- J4 P5 m4 {+ H' `* X" ?$ d: ~
private void button1_Click(object sender, System.EventArgs e) 6 `3 ]# m0 t5 X0 q. F" I
        {   a" r3 B3 F# `( x+ k
            // Create the reader for data.
) V0 @9 d- h7 C. l. u            FileStream  fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read);
+ G. @1 h. H' G" J8 E5 C            BinaryReader r = new BinaryReader(fs); , f- {# T- ?3 P1 q3 `( H2 g: @
( T. S9 ?% T" g" S
            FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create); / S5 e% T0 F$ q
            BinaryWriter w = new BinaryWriter(fs2);
8 [4 _3 @8 O% V5 |2 W            fs.Position = 4; . T0 ]# ~: M1 s% U7 X
            while(fs.Position < fs.Length) $ Q8 Y2 \' a: t& ^
            {
& F  M# f( ~2 c* j                w.Write((byte)(r.ReadByte()^ 0xdd));
: q7 J$ g6 f3 w+ q9 U            } 8 j0 u: q& n# a3 Q  l
            r.Close();
! L. Y' b$ y' l+ ?& L! O3 H( O  o. Z            w.Close();
6 P8 G! _2 X, s- ?            fs.Close();
" T4 g! s9 N& w; r4 ?. l1 o7 _4 s            fs2.Close(); % X# W; E. G5 \1 d2 V
7 ?/ a6 H# K7 E2 E; Z* f+ l
        }
8 J) R/ K+ K* o9 Y
* r5 {# j4 i  d' C解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析: 9 v) `+ d( I5 d
% E! O. w- F$ x2 N# N: j1 ~

; `2 n, W6 ~  W, l3 K4 m; G. o; [sito030  Oh yeah, yeah. Yeah. That is what I told him. 7 P% W, X# j0 c  `* t

6 j$ z9 Y! ?$ E* A: K- e! @sito031         Are you kidding me?
# N/ q' z3 W4 {9 m9 n0 b& `" M9 ~8 M% s5 B1 Y7 L, L
sito032  gave him the idea in the first place!
0 T# M7 Z9 c" T: T1 i' i0 @! {" V/ F* }, J, S: t4 p
可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。
4 b3 m, X9 r" }* f
/ `& R) W+ F8 \$ D对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断
/ j9 P# s/ q0 |  P& z8 L. `( O7 x  m: t" x- b
2..lab文件格式 * f7 a5 O/ h, F6 p; [

" E+ }3 ^( F) z/ p& V" H* t4 Z( b是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。
" d0 |6 X/ O* Y- Q7 S. t  ]+ f, a( K6 R& b2 v) L
Lab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档
8 X0 {, P9 d- F9 d& b, T  |" ^8 h2 x
(1)    文件头
4 E1 V: x5 N" L+ n# `/ R7 `5 Y  Y; y, Z5 s2 L1 I& L. B1 K
  / Z, o; {1 H( l

+ }) t- Y! H2 C字段 + ~. A* ~; }# W$ k$ E
数据长度 % E2 B- N* k& R+ g* V
描述 7 l( p) j- K$ ]# ]
7 o4 C4 m2 Z. C7 }
Id
4 C' z( z. s6 {4 c3 e4 q Long(4字节)
$ y& @9 J( z# e8 L 文件头标识LABN $ a% q9 `. W" X' G1 o: L' T$ z
6 Y6 ~* l0 \+ A4 w
Version
* c& U& d! b8 T9 x7 | Long(4字节)
+ W6 V. y9 b9 z1 s* m* U5 F 文件版本号
  ~, p5 K; x$ u: F9 r2 [  x
2 b. [% P) {! V( d+ ~" K  UFiles , t! G8 ^, o: M0 S4 n8 p
Long(4字节) 3 x- N3 D* [7 C9 c( E4 o
此lab文件内包含资源文件的个数
% f+ P4 G7 q  {
: ?2 s: {0 S  L) da 4 a0 K/ C2 k4 d* Z5 Q& N
Long(4字节) " U: v4 P7 X7 a$ v# M% P3 X  h, i  {
未知
4 n% @( V& Y7 J+ ?6 C0 Q 1 A, y0 ]8 a: l1 s
b 0 r* j; o, k% v
Long(4字节) * c! K( A7 v; y4 p( y2 H8 F9 u
未知
* z' ^% ?) g9 l3 |+ P2 ]
( J: |( `/ c  k8 Z* J2 P7 P0 y2 O' q, a' y4 [- j
(2)    文件偏移量表
# V* H4 O9 v( ?: M: p4 m5 U0 m2 {1 W. C
字段 * u" m# Y4 E, h" \2 \
数据长度
5 m  H3 S; Y5 {' S* O 描述
. l; M- n- [! L$ k  C0 f$ X2 v: y 4 o( ~2 _' `: ~; f" d
Ofs $ S3 K6 k6 ^+ h1 B9 W$ T" ^
Long(4字节) * C- x' k9 T- m7 c9 Z+ [- O
文件名偏移量,用来找到资源文件名称
* w1 @2 ]3 A" e. k6 d4 E* z1 b9 J
3 I' |6 _4 w) ?% ~8 n8 M4 h3 POffset ! C( K. m* ?9 b
Long(4字节) # W. |( {" O$ G5 w
文件偏移量,用来找到资源文件在lab文件中的相对位置
& ]( C; p9 m& z& s 3 @. D3 Y, m( P8 _
Size
5 g; n$ y4 J* W) T# j8 v0 A+ x1 `7 N Long(4字节) # c- |  w. R3 |  r
文件大小 9 u3 l: F5 O, G+ R) R

7 u2 _2 O% f6 C) _1 o+ O# C! lU ' r, H) Z* D0 Q* ]" n& q$ W- p, s
Long(4字节) ! o- `& u; n4 k- L
总是0 1 y( J" [+ f9 k6 R' |( x

4 [: m+ D$ }0 c$ Q' c% E  J" N6 |% N& C* W+ t
(3)    文件名列表
2 q2 U- o- G- X7 N0 r1 `7 K5 G9 ]  i. x$ k5 k
所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。 , n0 t$ o  I( V

9 [4 u" @# I; S2 @( K% \5 X(4)    文件物理存放块
: e) c2 h, y) g& x! \7 u& y5 v5 @) y# m6 Q6 O) }8 s4 ~2 i
所有资源文件在此块中存放,首尾相连。 6 A) H: p: _( h8 M  b

/ \5 d( u! O7 }. _* T. k0 L附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。
4 ~6 @/ Y1 K! G' F3 J- k
7 f+ p) K5 v; b1 Q9 b# iData005.rar ; p! P9 b$ U- @* y! l  j2 B: \
! r( z1 D9 g0 W7 ^: ~0 ~6 Z
3.Laf文件格式 3 J/ D8 }3 H, Y/ P

- p2 I/ q2 ?' t7 ?3 I  G) 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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