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

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

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

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

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

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

进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。 1 ^/ A( L9 C4 o5 M

, p1 H! M$ C9 g- Q& t7 e汉化游戏主要是要找出两种文件及对应的文件格式:
0 r1 U' j9 h; X/ G5 d$ r$ g- R  A7 U$ r3 O6 H' i4 g- G, F
1。游戏的字体文件 3 i( ~0 V% l( j1 r

& h: C3 @" @) k1 `2。游戏的英文脚本文件(就是游戏中的情节、对话部分)
; Y; V3 C- q1 [# q: ^. p5 @7 ]5 [. Y& K, [5 S! b
但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。
3 }, ~9 y4 O1 |0 w) q' D3 E4 v: h* Z
这样看来,找出文件格式主要有两种方式:
% i9 Z2 T4 ^+ |$ h# S
. G  Z0 A8 V3 s, I8 G" p/ F1.  搜索网上的资源,寻找骨灰级玩家,求得帮助。 . U* A/ f" f( ^

  j! }; \* W$ S7 @! @& ^2.  自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。
; ^1 T! L; `' C/ q: E6 y
, g0 E  X/ ^- q幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(http://scumm.mixnmojo.com)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。
& }- M% j2 i3 z2 t7 g3 \, s5 V$ E* F" R5 C' h
  5 ~- c& E- B9 j  m. @, p

3 r/ L$ S0 a/ s7 Q; B1 H$ i/ K下面针对GF开始介绍用到的几种游戏文件格式
" H" r- y6 Q: m! l7 a; R2 a2 A
, {- b: x0 x4 ~9 |" t3 @1..tab文件格式 - b$ _% p8 j0 H( F
/ @$ p- `* M/ y3 h  M) y! k& g, p
是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。 ) H! {0 g' L# L' E0 v0 o6 m" M" {  m( i& d
以下是解密文件的源码(C#):
0 X6 ?( L- d7 H4 v
+ g! o& n& K& @% c) N. e: P- ~5 k3 t: J/ \* c1 X
& D8 K) L  C! |  P
private void button1_Click(object sender, System.EventArgs e)
& s7 I+ p7 w( Q+ f& O4 X        { " p, A8 @0 X) h
            // Create the reader for data. & b) d" Q$ D) H- a
            FileStream  fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read); # N+ y& w5 r2 i* H% w" o
            BinaryReader r = new BinaryReader(fs);
9 I% _8 S! V8 w# ^/ Z6 ~  I! K; \6 B
& Q* g! N! G  |1 s            FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create); 8 o# w4 |6 r$ X' p; U7 K
            BinaryWriter w = new BinaryWriter(fs2);
) u3 U  Q7 \8 u5 [( G3 a* ~            fs.Position = 4; 5 Q' D9 |4 [) d$ O: T5 U( R
            while(fs.Position < fs.Length) ! o2 @# o0 U: r) `' |
            {
$ |5 |" U) d. `( ?8 ^+ X; c4 V5 E                w.Write((byte)(r.ReadByte()^ 0xdd));
* g1 M1 d6 l- @! ]- P1 O* N) z. q            } & i" p) K0 P/ F; X
            r.Close(); : S& ?* _6 V  [3 {7 |
            w.Close(); : A/ B5 ?8 L7 a3 {2 f
            fs.Close();
8 a: l8 ^# _! s# W            fs2.Close(); 2 D- q: g' P  f+ w
3 f1 @$ O. _$ u# Q# i# t
        } ! r7 E: p& H: @) i

/ H7 F. k/ u  v; p) Y: g解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析:
' n9 E' _, E. Z! L( A$ [& l1 E8 A. |% A
4 F0 J+ a5 }0 |- T3 H& S( O0 m$ J' w
sito030  Oh yeah, yeah. Yeah. That is what I told him. 6 U8 Q# w- ]# w* W1 |& X

8 p) p  F& V5 v4 X) \; F  w4 Asito031         Are you kidding me? % s4 |& i7 A: p, k

" r# s8 a: p$ \4 Y. dsito032  gave him the idea in the first place!
  `' w+ j- v/ f) N$ u( B1 c( d' t! o$ X9 X2 v& }  y
可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。 8 }- N4 a! P0 Z# g* p8 J% |: t$ B
: I9 }  o% o3 L
对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断 # f8 Y, ]2 Q$ V! W
1 k2 X4 E! ]* Q4 |* }% z5 }2 [
2..lab文件格式
1 r1 t' Z8 v& o1 G8 W# H+ i* t: `
是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。
: x. |# j/ j: u: s0 G
# @4 C1 D6 M7 Y4 T4 J) WLab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档
& l$ S4 s: o  s4 V3 s- ~
& G4 R" a9 a0 C5 [(1)    文件头
, {$ f2 n! S4 E$ H% n# [
: G/ L9 W3 w: u' w+ z  ) m9 W6 E, d/ }: e* J) z, G0 W
( t4 I  I# l+ [- N# b
字段
# e+ ]8 S) Z6 v) N& W 数据长度
1 l. `8 q% F/ m 描述
0 d* R8 f& r+ r" I2 x 0 z; }+ p- i+ A% B
Id 3 Q' H, N' R) T: \# `! {
Long(4字节) : K* w9 f, B" Y# h7 \9 R
文件头标识LABN
, f3 Y% s. E4 L ! k7 P, I$ B: {8 P; c
Version
7 s8 O) I# y$ w7 R/ M Long(4字节) : T, X: J& ~, U! o" }+ U
文件版本号
- m& X5 `; b" x8 ?5 U5 \
. ~; `( d6 J3 ?Files
; P- p6 ~2 K2 }" V4 _ Long(4字节) . c" w* a1 l! k
此lab文件内包含资源文件的个数 $ f% k& \" [. X! K
" I( o/ S4 ^6 y# l6 [  v) {
a
1 R. P9 E8 `7 D3 ? Long(4字节)
4 Y) {" L+ v; S" ] 未知
% b: K7 Z+ z( \% C2 e
, `* g# ]/ u; H- `9 kb - G! o7 D6 r3 E+ c, [0 c
Long(4字节) : t- e4 z1 r6 a2 H7 e: @- Q
未知
1 F' ^! v. J0 ?" r+ g  }5 b 8 D' n# \# C% _7 O- {
6 g  `" q. e, V& R/ @
(2)    文件偏移量表
1 H  S4 V) G7 k" u
! O; p% O5 L. }* [字段   N, H  A- l- G" C5 F
数据长度 % {5 @$ |/ {4 {
描述 0 ^5 L: k+ o+ a- o/ Q9 l7 A
7 s( s' c0 \7 E" R& @2 d3 C1 n
Ofs * }# \, l4 ]- I5 m* Y
Long(4字节) 5 y2 O, N# Z- X6 A1 F
文件名偏移量,用来找到资源文件名称
& l8 B+ v: ]; o3 x8 ~ , A1 \8 E( y, a1 r
Offset $ K, `  F( Y3 R1 `7 e! T
Long(4字节)   G  ^) Q; r& x: T: k
文件偏移量,用来找到资源文件在lab文件中的相对位置 1 i$ z, m' w5 s, }) [; a- @

9 O6 q; `& R+ w- ~! vSize
/ C8 f: d( w2 o Long(4字节)
. l7 p5 v; v( T* Z. s 文件大小 ! ~4 N/ T, f- W2 d* o3 O
2 ^0 F+ v4 k+ {0 @; s. E
U $ t" m+ p  \) n4 H/ g" z
Long(4字节) / S5 w2 z$ t& k) y8 m4 d$ `  {
总是0
0 h$ ^: H) T/ ^+ I
- G/ @3 p( U" s0 u4 r( b
& f9 A4 e- q' {+ }(3)    文件名列表
0 l- K' Z, l  e! x! \. L
& i2 F) c) Z4 f. q7 ^; v所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。 - \7 h, f0 W( G3 Z

& s! a$ r# ^* I; b$ \- `% X6 ](4)    文件物理存放块
7 q+ v: {" y9 C
" r9 Z# V3 Z1 \' j- g4 [, B# U2 R. x所有资源文件在此块中存放,首尾相连。
# v: M' }. D9 z8 C5 D0 q! s8 ?% k. N1 \7 D% T0 e& i
附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。 ) M. A, c. x! F( ?9 k9 W7 G1 Q# \, Y( |

: u. s5 n5 L0 T+ |( w( {Data005.rar   g; U) G5 Y& v8 r
$ Y% v4 l) Q1 g' H9 n& F
3.Laf文件格式
# A; U! D# s6 C
) i  D7 t9 _4 P) i7 I是游戏的字库文件格式,将会在字库篇作详细介绍。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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