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

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

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

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

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

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

进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。 $ z: s9 u( ]$ M$ A$ I  i/ d
! @( v2 t. Y, Z( w: C6 n
汉化游戏主要是要找出两种文件及对应的文件格式:
# E6 U3 [% P% i8 ^, n" U' _" Y4 j( z& k
1。游戏的字体文件 2 N2 n+ L4 n; M  D1 V0 |
7 H% Z2 K' W% V9 G5 P1 N& Y
2。游戏的英文脚本文件(就是游戏中的情节、对话部分) * V* `& o$ O; l1 M7 D$ n/ S

# p( k6 ?0 X1 N- G但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。 1 v' _2 ]) M& ]; S6 U5 `7 ]* \0 t  W

9 Z0 m0 x1 y/ \这样看来,找出文件格式主要有两种方式:
! S' t2 I/ [: F2 R
  K$ |1 M. ]1 i# G- f2 _  N7 R  [1.  搜索网上的资源,寻找骨灰级玩家,求得帮助。
9 j5 f+ p9 a$ l
1 j3 l0 V0 P  |" D+ ~6 A2.  自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。
' @/ P& h7 p% z8 O& K1 p0 I+ P8 g- T5 m
幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(http://scumm.mixnmojo.com)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。
  |$ o, x5 r: a( n' `+ ?3 J
6 C6 }  s. u8 R# N) S  6 r; x: d* A* N9 E5 a9 m$ D& [

$ L5 R1 D3 j5 i( k0 {' i- {下面针对GF开始介绍用到的几种游戏文件格式
8 ?6 l* y# ]% R4 P% q+ U$ O* Y2 x" l9 {
1..tab文件格式 - L" Y+ ^) ?& T( S# f7 X* y
' K. O/ k& S9 l" l8 o/ l! b; _
是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。
% C; G- P! O" [8 [' t. a以下是解密文件的源码(C#):
6 x: B% E: i7 z" W& o! d% m) R
& Q0 W& o" o: I
5 z& N  }+ L' P3 b; p8 N5 c
; }. D5 ~& ?8 Oprivate void button1_Click(object sender, System.EventArgs e)
, ^" o7 |6 @5 O2 e' }& g4 b        {
, T+ ^9 u3 ?! i1 N            // Create the reader for data.
- k" D$ y. l- [7 h            FileStream  fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read);
4 g4 i( ]: V1 C0 g* \5 n            BinaryReader r = new BinaryReader(fs);
1 _, T$ e+ F) h& a
+ |) x& Z( s, @( ^% r( Y' s4 ^) W            FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create); 3 F$ V( B. Y4 X5 u8 b# A+ r/ b
            BinaryWriter w = new BinaryWriter(fs2); 1 a5 B! d7 d! X# ]% @! Y* {
            fs.Position = 4; ; |- \! M! s% I8 s
            while(fs.Position < fs.Length)
7 s; P$ @3 `2 N0 C! ]            {
  p3 h# t+ o1 M4 h                w.Write((byte)(r.ReadByte()^ 0xdd)); " G! D+ n/ c3 a! f& x( b
            } * X) t. B+ t) \. j" P8 @0 T
            r.Close();
! x( V$ z' B& z0 {* C( g( a            w.Close(); $ v; G1 A5 y6 T9 S; Y( @5 E
            fs.Close(); 8 G  n) E+ j# ?* v' G
            fs2.Close();   r* g7 t$ i! p8 C8 z5 c

) k; q8 p$ x2 t! C4 U( L5 n        }
  q3 G* j3 v  v" i$ r' {
( Y1 i! I; [( l9 E% M9 W解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析: , p: c# ^2 q( ?! O/ {: C9 Y

5 A- m5 Y! H2 M2 q) Z7 Q  A
- I5 V: K9 O1 A" |* Osito030  Oh yeah, yeah. Yeah. That is what I told him.
! i: Y& S3 K, P) n: w% e
% Z( N) ^! \) n! H+ L0 msito031         Are you kidding me?
/ J, ]% K2 o* C" X
2 a  o! Y* x$ q" A. X! Ksito032  gave him the idea in the first place!
/ d: ^/ I( l. _/ ?1 l# |# @* F3 B
可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。 * |# O5 [1 w( K" u
3 h$ v& y8 l. E, [. t
对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断 5 G' ]: H7 u: ^* ?8 e6 U4 ?$ o$ H
" ^& Z% ^+ E- ~
2..lab文件格式 ; {4 \9 [7 O4 n6 U
1 ]8 m$ n) S1 V1 i, }
是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。 5 O0 h8 ]- k& |7 j, O/ y2 S

9 v0 e0 n3 @+ K: }2 @Lab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档
5 A& S3 T. f/ v$ _8 U& Q+ I; Q, z; h! `; e* b
(1)    文件头 6 P$ p% b: D( \
" o* E8 x4 E( P
  
; i2 K, D2 R8 x- }0 c7 J, u; [+ \, Y8 V0 M- `
字段
% I- n' s; g9 N 数据长度 + ?$ z0 p0 t0 y
描述 ) e9 l7 s* G6 a+ b* s1 I

7 Y' n5 ^; c5 Z0 i3 R8 _' kId ; R: U% i% {" \7 {: E5 K
Long(4字节)
5 v% a/ r& W# t9 N! w8 P4 @& ~, _ 文件头标识LABN
" [; [! R( c9 C/ Z0 p$ [1 C/ H
! ~7 `, ~, d% Y# d) j! \3 FVersion $ Z( j- w2 D4 P4 |, r8 A6 {, z
Long(4字节)
& L! d" T( a/ d6 {/ l) a/ f 文件版本号
% [5 Q, t, B  h. Y' J 6 ^- B! G$ z% j" g  S& n
Files
- R# `. b7 `) \& \ Long(4字节) 4 f! s: k' z9 v' n& O" j
此lab文件内包含资源文件的个数 & Y+ H, a1 A3 `& P
! l, Y$ ~( x% `( ]" k' w
a
) d5 r# }4 @1 x2 g Long(4字节) ! J6 B+ d- C/ z; H' w4 @) `
未知 ' u7 M2 T0 {& E" G

- f. m1 |3 C# {b   K0 I% [, U4 ]" m7 ^/ U  I% V' D5 F
Long(4字节)
, R! L; Y9 r7 j 未知
9 F# k4 Z; Z- n2 \/ U9 o
6 y/ o7 q( n8 v; |: f& f
$ H* n7 q7 d% \( v' L(2)    文件偏移量表
* X, n* Z$ N/ J' s& l3 K
' |0 P7 c# Y0 w3 A字段
6 f; A# i: E, c: e6 ^8 M: Z6 e9 d 数据长度 , W: g: u" T7 O  E- C+ l% y" F/ j
描述 ' b7 w+ P8 J( h% u- B

4 O- R- T0 v' E: JOfs
8 o# [- J/ ~; h0 J9 w; B+ t) \ Long(4字节) # }, `4 d% _% R  L7 l- c
文件名偏移量,用来找到资源文件名称
' Z% g% Q4 G( C) o0 n1 { $ d( k1 ^% f" ]2 `, R
Offset
( R% x) _0 s# B: E Long(4字节)
6 P1 U* x# J" P; C 文件偏移量,用来找到资源文件在lab文件中的相对位置 9 [4 ]/ L& D9 u) y- d% q* z/ q

$ C3 ~/ i- q# r; V/ B4 c2 `Size
: ?4 f( R1 b! G Long(4字节) % {  y* o& i0 R( d  s  [
文件大小
7 ?/ J8 U* P& x" O0 c$ ]
! ^, n4 q* G' z) l# c" [: t9 IU
" F3 w2 Y6 m( ]4 x- Z5 f  X Long(4字节) 1 E- R2 J( R8 }0 F3 E! ]
总是0 " ^8 x/ N. v8 T& r0 x
/ e; Q$ G! V/ k8 W
: @# M& f8 ]/ c$ @; @  \
(3)    文件名列表 9 X5 B6 P& J5 f5 Z& e4 ?
* E* i" m7 j9 C! q( `, k
所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。 4 q3 j) `; O" @" A) G  \

" J/ T1 Y; \! N7 V  w, W; p  O% ](4)    文件物理存放块 9 A9 g1 `* K: x, W" Z. k
* h- L0 r3 H9 P0 Z& F0 H: A! u& v
所有资源文件在此块中存放,首尾相连。 ) [  ?9 y8 F1 `' j1 k& E
9 c$ O% n0 x, n5 j+ P$ R
附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。
" z: u% z% d- q" b$ m) V8 O2 P' ]8 E. }/ k* E! t
Data005.rar
8 e: V2 G7 D: |! \1 n0 N9 l8 \* r- Q
& p" Z1 p# C2 a9 U8 ]& I5 g3.Laf文件格式 4 Y: a" l/ A! F7 @, s) ?. F

% u# t; N- C$ v: w1 ?; 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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