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

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

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

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

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

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

进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。
4 U$ t1 l& f7 I, o) l+ {
! Z3 b+ I: ~9 s7 q$ O$ t0 h汉化游戏主要是要找出两种文件及对应的文件格式: 2 j4 V" e4 K3 a0 b% f
5 I! \# I* P; a- C
1。游戏的字体文件
* |. e7 G5 a: h7 d1 ~9 N7 w, f* I
2。游戏的英文脚本文件(就是游戏中的情节、对话部分)
5 Z) s  A* k# V( r& _. L6 A
, X) s' h' |4 l8 K: r& L/ d( U* c但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。
5 |0 U9 m, _3 Y3 w" J" t
* A. P8 O* }: H% V$ a/ T3 I6 E3 v这样看来,找出文件格式主要有两种方式:
8 y% s  _/ F( _# \2 K
8 Z) c. l3 R$ \4 x& J% O+ ~1.  搜索网上的资源,寻找骨灰级玩家,求得帮助。 , a( j! O; R  P6 R' C2 l+ U

7 s; y; c! W2 U2.  自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。
8 ?! X/ K; }9 j- C! c0 C
1 `( M) h! p2 J$ ^幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(http://scumm.mixnmojo.com)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。 & ]" H0 ^/ x% }
! k2 _0 b# H6 @; t/ A% y9 M$ l* [" I
  
0 e; }' m0 O; f' W6 z4 X9 ]  l- `0 y! P( w
下面针对GF开始介绍用到的几种游戏文件格式 & d7 m  P+ k, B; `0 x' q
4 F. y; y. U$ r* a% ~# `- v
1..tab文件格式 ( P' b6 {$ d: g# f% Q2 w

8 C. o) x( A' ~是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。
) k5 |, Z$ |3 M以下是解密文件的源码(C#):
- N- F: a7 V2 ]+ X1 t9 D9 w. c
# q2 u( I* u5 v! _$ j4 b0 I" g2 L, k* z* W, w+ V0 I( S

( }6 `( q: _! l; w  {" Pprivate void button1_Click(object sender, System.EventArgs e) ( Y* Y3 `2 u2 f
        { ) {$ U/ U, A" ?: I( Y0 p$ `# ^. L
            // Create the reader for data.
2 [: G/ q3 y4 e' q* r+ z            FileStream  fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read); 7 T* X2 ~0 r# J+ D3 b1 K
            BinaryReader r = new BinaryReader(fs);
  U3 X6 H6 J. E3 } 1 P& r# W, q7 o9 e4 C7 A( A  t: F7 H
            FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create);
5 A" W/ ?1 l$ Y3 ^) x0 M8 P            BinaryWriter w = new BinaryWriter(fs2); 1 y' c' F! p* S$ n" f; v8 j
            fs.Position = 4;
* L- ~) R/ C/ v: ^- P            while(fs.Position < fs.Length) ! M/ b. z% z! c2 ~  i
            { 0 q& |/ {  {5 c+ w6 t
                w.Write((byte)(r.ReadByte()^ 0xdd)); : G8 K' M; l7 F2 B
            } & a$ ?4 M  Z0 N; i% e' ^9 C
            r.Close(); ) P/ E- L" e2 v9 u
            w.Close(); ' o8 c$ U7 X. H7 `# y6 M& o
            fs.Close();
" \! H$ F+ O: X1 q% z7 t3 h6 p( m- `            fs2.Close(); 2 X* N) P$ y8 A5 b# K3 I! K* }

1 e* `5 ^7 t% O4 K        } % I7 M5 N( V1 T( X6 l. V

: Y% F1 N* a; r. f& f9 j; ]* h解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析:
+ I+ p7 y' Y! o' o, l/ Y7 L; ]* T. R7 D

) ^; p5 d8 T" Q$ D$ X2 lsito030  Oh yeah, yeah. Yeah. That is what I told him.
9 D! m" q" K0 A( t$ n) T5 Z2 A
$ V% e* d( }, \3 d: U1 p4 d9 Zsito031         Are you kidding me? 6 k8 ~3 C7 r6 i' F, X( w8 O

4 q1 k4 O! F: _# o. c3 h. Z, Msito032  gave him the idea in the first place! # J+ c2 {: t, G' o7 I. y( P
4 g8 i4 w9 G8 M' M  Z) J1 d) X' ~
可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。 / e4 L3 X/ C* O4 Q
! L+ O/ V) P0 V4 p  B% }9 ]
对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断
9 G/ [" ~  J9 J9 n+ q  C' z
2 m7 U+ ]4 A1 ?. q3 f4 S' b- V) b2..lab文件格式
! B8 Z2 T7 Q5 S; v4 A& E% ]
! C7 K5 s7 ]" ~+ B' @是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。 5 |# U1 K7 a9 v) T' I

3 J3 d, |# M1 ?3 J5 DLab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档
! {( ]& C: J; `& w) G+ P& U; x- I: Z2 Y( d
(1)    文件头
+ s1 y3 h0 b6 O4 \2 v. w8 Z6 N3 n; g8 }  Q
  % o$ O$ q/ r4 |! @

8 F- d$ g3 P" B6 p% @字段
+ w: h, `6 K* j1 K 数据长度 - x6 a2 q2 m$ h* Z8 @! Y
描述
) U7 U3 w$ a/ v4 G7 Y/ c# S8 F ( d$ n8 G8 W: `3 r9 W* C1 L
Id
$ w+ y  T; J, l1 {' N$ C Long(4字节)
6 C9 n1 [! l* S; a" I. m" t# ~( F5 w" Z2 M 文件头标识LABN 7 ^0 S+ V' G' d

1 M& |- {" }) L: a+ p- J7 RVersion 2 M2 ^2 Y) O" r; n
Long(4字节)
/ x- y0 ]2 D' T; q 文件版本号 " ^0 |% y6 c9 B) p

7 O9 d7 R7 Y7 c2 M, DFiles $ c* u( g. l/ w6 X  W( W% [
Long(4字节)
2 J* {# z5 K% I+ j7 v9 T 此lab文件内包含资源文件的个数 + P, s- c( ^& c" g

$ Y7 y' ?0 o. N) C$ H- r6 I  ^* Ra
* I4 F  U" J9 Z Long(4字节)
* D% h) d# I9 M7 Z5 O1 u  \ 未知 / e! o& z7 }, P/ b( |
( C+ f  K5 h( M5 c
b
- @* W) j, d/ Y0 X Long(4字节)
5 p$ e) R0 W: ~* l 未知
2 Q1 O, E" L' n  W% \7 X
2 O' _8 @8 f. f0 T0 J7 i+ f
. B4 p5 P  m- M9 m- C5 ~5 q/ I. @(2)    文件偏移量表 0 p& k; ?" C7 ~# K
' D- F' {2 y+ ?4 Z* w
字段
1 [# B3 i) a% `, t+ U) Z 数据长度
: Y2 h- R( g% b/ v$ \2 l. i% p 描述
! b! @5 _( ]/ x & ]& K4 Q5 U# }4 O" g) e3 a4 x; U1 s
Ofs
9 q6 e' o2 V" u7 c7 p' D0 g Long(4字节)
" g7 V7 L) n$ k" s 文件名偏移量,用来找到资源文件名称
! o# T( W& r! j, W9 D+ ?
" F( D, i2 ~/ Q" jOffset
! {1 J! J* ?6 t$ B Long(4字节)
4 H7 @6 o& n) i5 C: E 文件偏移量,用来找到资源文件在lab文件中的相对位置 / G; Q2 I" v2 @+ ~# o% I

) D% q. b+ A8 I+ w6 O3 A9 PSize 3 N( C. q: g/ E" a2 D
Long(4字节) & o1 O4 Z- q5 V& b" f
文件大小
) K" l1 }9 ]0 {- [0 A0 i! k
& I/ c- L* ?; ~( jU ) m# T3 w5 V% i
Long(4字节)
3 P6 [+ L( g8 m, ^8 o 总是0 % C) n8 A2 _1 r, Y3 n
5 i& H4 O4 B# y& Y

" d& {/ N5 v$ {9 R! u) N(3)    文件名列表 2 T0 x0 C0 Q5 @- n; D3 ^, d

; x) c: N8 V2 H1 Y6 {. i8 h7 Q所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。
# s& @0 V0 P4 _0 q8 Y& X  `5 Q+ D( U. {+ v6 v
(4)    文件物理存放块 1 Z- s$ g/ S& M. K# X1 V
$ _' \! w/ j- J1 t
所有资源文件在此块中存放,首尾相连。 0 o" o- Z& ?8 U9 ?0 E

, x- q6 l- m# w7 \0 G6 t3 L附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。 % G: ]5 @/ f- _( k6 G
5 }# j9 X) q1 J6 E* _
Data005.rar
" T& z6 F- |! ^7 |/ L9 Q  i/ b6 R& {) ?4 z* v& P
3.Laf文件格式 * m! O  _2 G- }  H
# ?2 y5 F% j; k6 @. a+ _- H
是游戏的字库文件格式,将会在字库篇作详细介绍。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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