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

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

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

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

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

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

进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。 + P9 h1 j% \) d7 M* `$ I
. t; V8 @- c& O; \, _  P! v* p$ K, W# R
汉化游戏主要是要找出两种文件及对应的文件格式:
' t7 o! j) v8 q# o$ G+ P! g
- |! f! n) N5 `5 r! y. ^( N1。游戏的字体文件
* h0 s, Y  q' p0 k9 U9 S* }- H% \! |6 _, h, x5 N4 \
2。游戏的英文脚本文件(就是游戏中的情节、对话部分)
- a$ ^5 f. W5 g& P5 k# x5 b- q- z. R# D6 B0 b; A( f. `
但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。
9 }* [$ D( e4 K/ K1 X" `+ t6 R/ H2 T" i% H: E
这样看来,找出文件格式主要有两种方式:
4 f* r# S& K/ k$ `$ ~2 {- m5 [3 R. y2 `0 K, i- c
1.  搜索网上的资源,寻找骨灰级玩家,求得帮助。
+ Y* I& Y! Z  c7 Z. ?2 f4 _0 `$ u  ]( h4 w* d% s' Q% W) a' |* x
2.  自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。 + Z: z* a& x( _7 D! y4 @& q

1 T- I* T2 A7 x+ n. \, _. e  @幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(http://scumm.mixnmojo.com)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。 $ e. `/ i- G% r
( L. d  h2 M! |& e
  ' y% D+ r* d$ H" \* X8 r

( M5 A0 G3 {, A; u下面针对GF开始介绍用到的几种游戏文件格式 ( e: q4 ^' n' L1 f3 v3 J$ _0 e5 X2 C

' L( c1 e4 t% B1..tab文件格式
+ P0 {) x( L2 F" D; d+ _) b) J: o# e2 J/ v6 T: e0 a6 R% \- D
是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。 5 m, N( ?3 [$ k; ^2 ~& N
以下是解密文件的源码(C#): 2 ]: c* T& V7 b  }8 J! C. f3 {3 e
. K- v' ]# O4 X$ G2 n8 q
& Z/ {; p: T* v0 {" K
- q% h, P! B, j2 L5 ]7 f
private void button1_Click(object sender, System.EventArgs e)
' h) ?( j! h9 A" c# S5 a' ?. l+ U        {
) u% i3 N- t3 z0 ?% S            // Create the reader for data. * c1 @6 p9 C9 F: h1 d
            FileStream  fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read);
* u8 e( h/ m6 X) |0 N' @            BinaryReader r = new BinaryReader(fs);
0 P1 a. C( |$ n. P0 p4 j0 D# T % ?# r/ H. G' _% r/ ]) D
            FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create); % l, J) g+ D; Z0 G: E2 \; a
            BinaryWriter w = new BinaryWriter(fs2);
/ F7 g- o2 @# U4 N9 I5 ?            fs.Position = 4;
0 j  n7 |. q0 q# w            while(fs.Position < fs.Length)
. \! ?' F5 b8 c( ]1 Q7 M. `- C$ T            { 0 O9 J" C1 w+ y+ g9 c5 `, z! \, T0 y
                w.Write((byte)(r.ReadByte()^ 0xdd));
! S3 T5 g8 w- y5 R; W2 t            } 5 ~2 }. r. j. k$ i
            r.Close();
8 e/ T6 Q7 P  Y  v# _            w.Close();
! }+ x+ o& ~) n7 d' J, n5 k' M            fs.Close(); " v1 [) M' A4 S) p" D
            fs2.Close();
5 d0 g* |/ N5 q3 m% O% U$ w5 p ' B7 @3 X! S" m
        } 6 s8 s0 _" \% j/ E3 V' q% A, n
! s$ S# o5 J8 O: b
解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析:
: T- q( f% L* I; g3 G1 S
' G+ L: r' ^+ E3 _
  y/ I  l. W2 e1 v; i+ x5 Y: T; Rsito030  Oh yeah, yeah. Yeah. That is what I told him. 5 v5 l0 D  `- R$ G

% a$ |" I" j# B' Nsito031         Are you kidding me?
1 a- U- _) {2 y$ @7 O3 ], G
8 Y1 D, h3 e. z6 t- O, E5 f. @sito032  gave him the idea in the first place!
* e2 p# y* e& e2 l7 l* |. }) W( U
. r" R% H6 r* P2 c& S% W2 c% p  O可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。
: p$ }/ f! B" d" B1 {5 z
8 n7 @# y6 B& Q2 S对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断
, ?/ ^4 d, K" a6 F& N% p6 [# l
% _% d' h" t8 J& `9 q2..lab文件格式 5 K+ A3 R6 G0 \4 U

' B" ~( I/ Q6 t$ I是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。
1 r5 ^( I2 h7 h$ N1 s; v" }5 m1 \/ e
Lab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档 # J8 T; O6 @% b; c  S% ~8 Z
% k6 _  W- @& }4 I/ V) S
(1)    文件头 ( K2 o1 y, j2 y" _! l9 ~
5 X. `; H- R' p* }! C1 y7 ~
  
3 V1 l9 h* q5 \* _0 f& c' _8 `
" N7 g4 f% F' X2 a- L) {3 g字段 2 D) ^( {' v# \: v7 R% n" h7 f
数据长度 # P3 e8 c8 z) M1 X7 l  y- d
描述 ) _, b3 H6 m6 X2 T2 h
, i; A3 I' l" |3 E" A% A
Id
1 i5 j. i8 J& i& z Long(4字节) 3 c1 R& G8 j1 J. \  c9 }; a" m: s
文件头标识LABN . d* i% h# L' D. ~1 g
8 C6 s" D+ u5 s/ P9 p5 A
Version
' p, d. R  V; C Long(4字节) 7 Y6 L, j: l5 Y  F5 X8 x7 W
文件版本号 ' r6 a# w0 v3 O# J7 X5 y6 T( V
$ K; O# _' {& N  r
Files * ^. v, I" A; f
Long(4字节)
/ V; u4 a; `! x/ L2 N0 ?! @; o 此lab文件内包含资源文件的个数
4 w3 W& Y0 s8 H/ y/ _4 k0 d
* J2 H% U. ^! l0 ua
7 }6 }8 u0 C0 F) n! P Long(4字节)
! H5 g; k+ {" [ 未知 ; V9 O( y) z5 Q1 I% u% @* Q# n

+ u7 e7 ~; c+ Z; Z( \# z" Vb
" P& H% H. f$ R; }+ m0 U. d9 @ Long(4字节) . r% Z: Q* S  g
未知
& A0 `9 g3 G7 {' s5 k7 Q" v! ^, [ " w4 v5 d5 Y) F9 ]

1 L2 C7 X6 Q5 W' T7 k(2)    文件偏移量表
& ]( M# B$ ^2 I: V1 H: P& b! X2 _4 {9 X: R* D. F4 z2 b
字段
: j6 n" u: p) b" | 数据长度
; B9 n9 Q3 M; Y/ B 描述
; T  t6 J; J, W5 X: a) v
, @8 w3 L. e! n/ A& ~+ N+ \. ?Ofs . R' ?( e+ G9 M
Long(4字节)
. E+ z$ G6 z2 G7 d 文件名偏移量,用来找到资源文件名称 - T1 l$ ^% {0 I+ K. x0 N
6 @$ k# [3 o* E, a
Offset * l2 s& e4 q" `4 u
Long(4字节) 6 V5 @5 Y$ \- x: k
文件偏移量,用来找到资源文件在lab文件中的相对位置 # a2 a4 z7 i+ s1 d
( E0 ?- |' L- y% X
Size + Y% C) U+ `- \
Long(4字节)
5 R6 c- Q+ U2 k3 L( ^: u  Z 文件大小
- h2 Y6 R0 o4 l5 Y3 [+ W
# ~5 j) ~5 i4 O2 i" K' @3 b& h/ }( wU
: Y1 Z' i# h3 _+ L Long(4字节) ' b. l' Y/ ?, x( _/ S# r+ N
总是0
; H) |4 {" B- L( Y # w. H+ d$ L* u' m6 i% b

9 Y9 ^4 ?, ^" p4 V(3)    文件名列表
& O0 v& c0 q3 d4 }# H# n& O
' J7 G+ n7 ]: }- E; O6 g所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。 2 X( D" B+ ?! L4 w
- Y8 S; P7 f* n! N5 S
(4)    文件物理存放块
( E! C3 ~# H/ m0 v; A  ?' I
8 E$ o5 M2 a8 G0 I所有资源文件在此块中存放,首尾相连。   c% U4 @5 _; G  S% r5 F
! t6 i" h3 E) t( e( {/ w* A
附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。
, H, y1 v. B. \% ?" w6 \
* s! d# m  v8 I! I9 i0 v0 b. d$ w" oData005.rar " F- t* ?8 V3 r' E1 c6 @
2 T- o; X3 J; X2 x
3.Laf文件格式   a, E5 l0 v) T' `3 V
& T1 O" p. s" O! ?. l( x
是游戏的字库文件格式,将会在字库篇作详细介绍。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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