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

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

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

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

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

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

进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。   k: Q3 K- b6 M# `" G

; d$ @7 |1 l! t- U9 w汉化游戏主要是要找出两种文件及对应的文件格式: ; o! p! u  c8 R/ L6 j

2 n& B; [; n6 d% J1。游戏的字体文件 / x' f6 Z; Q) X# y0 b6 z  }9 E# f
' A: B  b1 [1 E, V) D
2。游戏的英文脚本文件(就是游戏中的情节、对话部分) 6 h) e2 q0 u0 p7 e7 K3 Y+ {

3 f+ m! Y  Z0 A3 D) }但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。
/ U, Z* q0 f; `( F( W
- h8 f1 E1 L& t. ?' u% t2 p9 c这样看来,找出文件格式主要有两种方式:
* N, {% B, C/ O# X  D
3 O1 B! L- Z' u* C6 l1.  搜索网上的资源,寻找骨灰级玩家,求得帮助。
6 K" a7 s4 d/ O, g# y# S) Q
* {  j% r$ A) C5 M, }2 u8 b2.  自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。 / j9 C' R, O) F7 y9 W9 X/ t0 e
0 T( Y) R5 w& k7 `
幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(http://scumm.mixnmojo.com)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。
" d' S0 L/ b6 b& J7 |4 X  n: c' v7 ?5 W2 v+ h2 P% N8 m1 J1 U
  " ?3 f) o% f" L* }/ x0 n

8 K% Z" v2 p, m/ D, y, r1 a! k下面针对GF开始介绍用到的几种游戏文件格式 - d6 ~( P- F4 S
  @$ n  H) z4 l* [
1..tab文件格式
  _0 h1 r/ q3 _
- a! e6 R" h& ^4 f是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。
5 R# a5 B: @& _9 |以下是解密文件的源码(C#):
( a  J. E9 i) m0 b! S7 }
- N0 O; _7 T0 ?% z2 L& U! ]$ [, P+ I6 {. F
9 n! ~2 ]3 }8 \* A4 D! E3 u
private void button1_Click(object sender, System.EventArgs e)
' C; ~) y# C9 k3 c        { 5 {% g" G2 F9 I" D1 |+ F$ J
            // Create the reader for data. 3 i$ t9 z, L" }; I- f% t: q
            FileStream  fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read); - O5 @# |9 E- M" b: a) Z  X
            BinaryReader r = new BinaryReader(fs);
2 ^& M; ?5 B+ v( }1 C$ w. g# [
4 w" [! Q$ p, f3 h" P+ U) @            FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create);
( T/ y  R% q0 Z; A" Q            BinaryWriter w = new BinaryWriter(fs2);
* d- C7 X( s9 H. x- k% O) y6 r            fs.Position = 4;
8 S$ I, G" e: u% ?' U            while(fs.Position < fs.Length) 5 W0 f  j1 c5 `$ n) g
            {
8 W% I/ X) w: ?' ?' ?                w.Write((byte)(r.ReadByte()^ 0xdd)); 0 g6 ]# T# Q% y: i8 Q
            } ; [% w+ y8 R2 @  c' M
            r.Close(); 3 J8 X, \9 _: [, _1 [
            w.Close(); 6 Y7 u& w8 Y* A) O8 F6 G& l
            fs.Close();
0 D8 I& Q* ]9 |            fs2.Close();
0 o& z& ?, g) B! r& M( R/ J. T" O' _
8 w2 G7 c% a4 U2 V0 Q0 Q  M        }
# `; y- k& i5 i
3 {4 R1 e9 ^' i& \解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析:
6 {% I& |$ y' Y( F2 d$ u
5 g1 L8 ~: _/ G' ~" c. X% R/ ^( F& P5 ]: S5 I9 V" u
sito030  Oh yeah, yeah. Yeah. That is what I told him. # W) C5 T) S) w( l3 a! Y
# H$ G2 w+ H' U1 e5 X7 ?* F
sito031         Are you kidding me? 6 O: F, Q! W! C. O' |1 O- Y1 K
1 Y' t1 u  _9 r& O' P" T
sito032  gave him the idea in the first place!
. ?* d- M  N) S' t
! _+ D6 D+ Z4 J3 [可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。
0 |: f$ s5 C% P4 ~4 m5 K
) ^; e- c- X8 s; U+ m( M对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断
7 ?) `% \) \; H8 N$ A8 y" |
3 p, a; V, z  F% ]2..lab文件格式
, o5 x! M. o9 @- b7 v% g
; t8 x. T) Z) r/ O/ H7 g是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。 5 p& Q: X: [0 c
4 U1 k3 L4 I3 s
Lab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档 " m; U; k" e: h- M" n

& G* B0 }3 ^9 w(1)    文件头
' n; @2 r% m# Q4 n# @& }0 g) J0 R+ w' J: W% o
  + {9 K$ h8 F! _

0 W2 N; ]$ Y) j7 q$ J# w字段
7 d% E* C5 l) _5 H 数据长度
8 i% ~( `* c# S5 j, |- H8 e9 v 描述
& ]* I( Q- }' G6 Q8 V
" Z3 F2 B5 W& h& @& |3 _; y6 BId $ k- ~  H& Q" ~; x3 K: `
Long(4字节)
% f% t9 K% P5 L 文件头标识LABN + m8 V" W9 b: A% }* {
) o6 T2 F8 n, Z  D7 J  `4 L, ^
Version
7 `2 y3 i0 y7 d% |6 ~# m6 @6 f6 l# T Long(4字节)
! ~/ V' g6 |8 o+ b+ ~/ h 文件版本号
0 J1 _  k8 ?( ^. |5 F9 E, J
9 ^9 J4 K7 |: {/ s# X% ]Files
" p4 B8 H% l' N! y, W: d Long(4字节) ' y7 W& i/ |) C! r
此lab文件内包含资源文件的个数
; j! E" s/ j0 |  D, A. d8 a. X8 y 4 \6 X$ z2 K/ G9 J7 ^
a / q0 }, E6 [% U1 O. ]7 \
Long(4字节)
* b  v9 m2 T6 L& i1 c2 S 未知 * k3 i# W7 ]& V$ ?* P. q
6 R, |+ U: P1 `- b. F) D. w1 n
b
( b: H4 s8 }5 H3 l6 W# X Long(4字节) + u. s7 k' q& J8 p
未知   D  t4 m' V3 q/ k

% t' w: `! ]7 m# H; F( @
# I8 l1 z$ n3 H: |  F0 ](2)    文件偏移量表
: l2 d3 u1 f2 ?0 a( s
/ ^0 A6 O; O) `* V# v# g* Q( N2 t字段
, M6 U" c  k5 a 数据长度 0 W4 o, O- J2 \! m; E: v" H( d
描述 5 `/ h* u( j! a' s6 m4 p

! w- T9 \. `2 POfs 5 \" N, K2 i! m( U: R/ J% P
Long(4字节) 5 N+ J6 p* H8 T" A, s8 g
文件名偏移量,用来找到资源文件名称 . P) Q$ Y; u, c

' G' e1 H. H& @! v1 Q( M4 E$ \* GOffset ( u1 Y. Q9 W6 M* a/ Y. g6 z9 c
Long(4字节)
* G2 R4 @6 C8 Z. ]! Y# ] 文件偏移量,用来找到资源文件在lab文件中的相对位置 . b. E, A# j- J" p
* Z8 P2 k. P0 m3 }. Z
Size
) i) O7 }6 b- ]1 Z0 {; [! `6 D Long(4字节) $ h4 v+ F* u3 W/ x  b- R
文件大小
, C' ~! W; n6 o
8 g) g- K7 G: Y. O, v8 nU
! F3 e9 D, U; Y Long(4字节)
& z7 S/ U- V+ x3 W5 J' O) c) \+ _ 总是0
: i% f: L) y6 A$ J* i( z5 [/ l
9 j! I# S8 P" n2 s5 L; a
+ w, L5 }0 S! H0 c! Y; P# c(3)    文件名列表
$ a; q) Y4 i' `* Q: p, X7 ^! U2 g4 u9 v! S( P0 U
所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。 5 F+ C+ K6 x8 @

% m/ [  }2 B% V' L- Y" t(4)    文件物理存放块
' k2 ?6 O( S" n  G$ _5 Z& R/ ^3 ~2 I, |8 Q( i  s7 e3 S
所有资源文件在此块中存放,首尾相连。
) ~2 S+ w# j$ g8 X! j) x
5 C3 [. z5 {/ Y& ~* P附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。 / r" ^& G3 C$ [/ R3 w' _: u

! r5 P1 _9 d1 @" \Data005.rar 6 M9 y, u0 x7 d1 h, j
. T0 J/ Y2 }, z5 Y* \
3.Laf文件格式
( `3 g+ ]+ s; o; L: N4 t  T3 ^0 d, C9 L- b
是游戏的字库文件格式,将会在字库篇作详细介绍。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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