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

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

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

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

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

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

进行游戏汉化最开始的工作就是分析游戏的文件格式,找出要汉化的部分在哪个文件里,文件结构是什么样子的,应该怎么修改。
; G( K1 |7 G4 g: `. M7 Y/ Z$ i$ r
8 g1 v# y8 U$ s; S$ b$ T汉化游戏主要是要找出两种文件及对应的文件格式:
7 T. }  A" T+ d# _1 E* j
0 _% c- X. {, `- v" z$ _* Z# J1。游戏的字体文件 # m1 S- a( b6 b% Y, @8 u

8 y% Y' p. |/ J+ \7 S2 A% w" o2。游戏的英文脚本文件(就是游戏中的情节、对话部分)
6 O5 Z( Y6 w$ _$ H! a1 E& i$ y! R8 B  d1 }( ?" D  r. ?6 B! a" w. F
但是如何找,这却是一个难题。由于游戏厂商一般对自已出品的游戏文件格式都是不公开的,它们不希望玩家能随意修改游戏(这仅仅是一厢情愿罢了),很多骨灰级玩家还是能够找出游戏的文件结构,进而修改游戏。
- r0 O0 F, J; Y/ D
1 W* d: w( x, B/ d% h; I" o: O这样看来,找出文件格式主要有两种方式: 5 B( B3 ?* ~; r8 g

1 M* J* |  k1 V' [" I9 R1.  搜索网上的资源,寻找骨灰级玩家,求得帮助。 & R0 X4 n2 ]$ E( o

# U7 k, t! y/ M3 ~2 d) ?2.  自己充当骨灰级玩家,分析出游戏文件的格式来,难度较大。 0 _1 M% v4 d7 y8 }$ D, U% q

$ k9 i; _* [! p8 r幸运的是Lucas公司的游戏Fans很多,甚至还成立了一个专门的网站LucasHacks(http://scumm.mixnmojo.com)用来讨论怎么修改其出品的各种游戏。我所需要的游戏文件格式的文档全是出自此网站,从而为汉化工作提供了极大的帮助,节省了很多时间,在此表示万分感谢,向那些撰写文档的前辈们致敬。
% V8 C6 k6 O- ^) F* w$ J% p  Y5 r" L# O( z4 m
  - v* x2 U& f) m" S& t8 [
$ X5 a% s" G0 a$ m" t
下面针对GF开始介绍用到的几种游戏文件格式 ( @) d% I2 `2 [6 i# a6 Q. `3 w2 `

( J' v& c6 j" P: e' A2 k1..tab文件格式 % n0 }2 R4 |6 a
8 J" P+ o; @: P% W/ E; l4 J" z8 `) k6 p
是存放游戏所有英文脚本的文件,文件内容是加密存储的,用一般文本编辑器打开是看不到任何可用信息。解密内容的方法是对文件所有字节与0xDD进行异或操作。
3 J' Z6 F! R  ?: ~# L9 Y以下是解密文件的源码(C#): + E; L- [0 A7 E8 U' c/ F
0 F. S& o0 c+ x8 g) @% C& W5 v

- Z) }) E7 Y9 Q" o6 ]
2 N9 Q) s. j- I9 H! L2 I& yprivate void button1_Click(object sender, System.EventArgs e)
) E  b, r' m. ]9 ?7 ]$ B2 h" A        {
9 I0 Q+ A8 @  g2 A            // Create the reader for data.
, `0 K, o! S: z            FileStream  fs = new FileStream("c:\\grim.tab", FileMode.Open, FileAccess.Read);
. w+ V6 V* }! F' }; {; V            BinaryReader r = new BinaryReader(fs); ) s3 {! @% L  Q7 F5 I+ u
1 \% h& X( E1 X+ p7 s3 H8 R
            FileStream fs2 = new FileStream("c:\\text.txt", FileMode.Create); ' @# v# F1 S- R0 h  Z; b
            BinaryWriter w = new BinaryWriter(fs2); : @& R  z, I/ w1 \# G: L2 M
            fs.Position = 4; , @3 D# x6 \7 X$ W  o6 ]" {4 a
            while(fs.Position < fs.Length) 7 k1 s; }9 S6 L& v
            {
! L4 L3 }) w! ^& }& w                w.Write((byte)(r.ReadByte()^ 0xdd)); - \) N( @- _2 V2 q% a* @- g  ?
            } & ?' Z" O# H6 x: x
            r.Close(); : O# \" q/ q. u1 }3 |1 n# v
            w.Close();
( R9 y; m9 }& t, q9 {9 e" e            fs.Close(); / z, d# x6 m5 N/ k
            fs2.Close(); & V6 l; n8 G! t8 f; b2 z

& t. f+ P$ w3 L3 g6 g        }
2 z7 F% m! n9 k4 s4 y9 B& |/ {  @* f+ @3 \* ?6 u
解密后的文件内容就是一般的文本,可以看到所有游戏对话都在其中。下面节选文件内容的2段进行分析:
. K1 b+ O) O% Q8 j5 h: o& {8 E- {5 y0 D) R

, n' c% N4 a* c/ J2 nsito030  Oh yeah, yeah. Yeah. That is what I told him. 6 r% O" K' Y7 J9 P  r2 V

, ?, S7 y& |+ ~; ^: z+ {sito031         Are you kidding me? 3 p- S/ g( w; u3 u: b
; S1 o1 Z" V7 L. P+ y2 T5 O+ u
sito032  gave him the idea in the first place!
! R8 o  o- O6 P: E& p% V- G8 Y) k' Q% U( q; C$ Y1 _
可以看出左边是说话人的名称标识,右边是说话的内容,分割这两者的是看似一个空格,其实是ASCII码表中的制表符Tab,16进制表示是0x09。 % ^  j2 A, O* H# l; k
) O, x( j2 M; p6 c( r
对游戏角本的汉化修改此文件的内容为中文就可以了,还有一点值得注意,修改完此文件后无需再对其反加密,只要将解密的文件保存成以前加密文件的文件名覆盖即可。应该是游戏运行时候会对文件是否加密进行判断
. e+ s! Z1 g* b( R: e6 R6 }; ], @4 A, Y( G& S6 k6 L
2..lab文件格式
# |) O3 [9 I' |* z# x9 P1 x: m: Y$ P( u, B( h, {
是游戏的资源文件格式,游戏所有的资源声音、图片、动画、全存于此。它很类似于常用的压缩文件的格式,如zip、rar,作用是把很多文件压缩成一个文件,需要用的时候再解压出来供使用。Lab文件也是这个用途,它把很多用到的声音、动画等文件放到一个lab文件中,供需要时调用。Lab文件不对文件进行压缩,只是简单地把所有文件头尾相连,保存成一个文件而已。 0 f; \, ]2 Q9 h. ~6 J9 y, f* ^

! S" x# x  j; `Lab文件由文件头、文件偏移量表、文件名列表、文件物理存放块组成。以下内容选自LucasHacks的文档
, ?+ m, h, D9 u; {
3 ]( M- \' O' O" n" X. Q; l) Q2 \(1)    文件头 ' _" B. @" G* p/ r$ u: r( |# t9 I# D

7 {0 N& X$ O* k( a- G4 k- W  
% h1 i* n$ U' J5 `2 N" b
/ Q/ Y. v8 Z: E; R) K' ~* e# ^# I字段 ( U: ~+ a" C6 q- f( Q
数据长度
& Y# j4 X; x+ M* } 描述
" i: Z$ `# C! }7 N% q- A9 D. Q! f 9 p- [2 X$ M  h/ }. U1 E; |# v
Id 4 J+ N. s4 u8 k  ~6 v; e: O
Long(4字节) 5 J+ M& S( z6 l6 y* V. [8 ?
文件头标识LABN 4 u0 v- m4 X5 m5 \4 A: x' X
  o+ {& G) _4 w. P) ^; k
Version 4 u+ ?; O  y- ^4 _' X
Long(4字节)
- ?7 j; S7 Z& ]/ A1 M# n" a) M 文件版本号
% [5 ]8 O: N& ?  {# Y$ ]6 b2 c/ N
1 i; H  C$ c( Z: {0 _% BFiles
. \* n" }: n, o* S' B Long(4字节) 3 S  Q& u' M# B5 Z% B
此lab文件内包含资源文件的个数
9 |+ H" k  J% l 5 Q7 }, V' J# C3 y6 U) D; w* F
a 8 e) l5 S; [8 m# S
Long(4字节)
, W1 T& a% G# A+ M! |5 V# _ 未知
) R' Z) I8 o  Z0 b" l, s 1 \5 q$ n7 }' C1 f, M
b ; `% n% H1 }2 R
Long(4字节)
, p* ^8 d5 ^1 a) A 未知 9 c0 Y9 R7 I" i/ l( c# V  p: J
' D, J/ q$ L5 B0 w% |) @/ f" S

4 F1 {. n) |) ~7 g(2)    文件偏移量表
0 U& O9 Y. K( J5 G' x/ {" l# d. I5 @) W1 e) @; v
字段 # Z* l) j# o( c/ y) H. S
数据长度 6 w$ j3 }' t- ]" E. k3 q% {
描述
1 u4 Q1 V4 @1 G9 T" ^
" y3 B5 z) J. @Ofs ; J, z! M3 ?+ ~3 L! |+ J
Long(4字节)
" z6 H) I( F% ]8 c 文件名偏移量,用来找到资源文件名称
1 w- w6 Z5 ]1 c5 {0 c . j/ t. P& U: ~& k
Offset
5 K% A6 r3 v2 K: ]$ l5 U Long(4字节)
1 X4 j& @3 A+ ?8 J- ` 文件偏移量,用来找到资源文件在lab文件中的相对位置 4 ^* w' G/ J+ I, L

( P- r/ p* t# A2 l& C8 V" h/ XSize , y+ `  D8 h' h2 x5 V. L. i
Long(4字节) ! b/ `; K0 A" l7 U/ ]3 ^
文件大小 ! ?! Q# g7 d3 _8 M% U
$ }; m  x# Z/ Q
U ( A& A1 f  u; F4 L% z1 Q+ ]. \
Long(4字节) - }7 ~3 H- F1 I) e* F. b
总是0
! A8 K7 B5 w$ H- z& @) @& E. {/ C
: g1 m& e$ q6 r7 \3 W6 L7 @1 j7 |8 B0 l& `1 h
(3)    文件名列表 0 o* P$ {5 _; h

. D( _7 L: |6 K" u/ f- q& z1 X所有在lab文件中的资源文件的文件名,每两个文件名中间用0x00分隔。 ) D. ]) {- |/ X) g% U0 s7 q

' z( G* _# X0 g8 H! d2 x(4)    文件物理存放块 ; T* @6 `: Y( H' J  }" U- X

) R) [6 J6 \2 |1 E  Z/ ?所有资源文件在此块中存放,首尾相连。 , u* K) _. \: Q6 T3 K" V0 F: N3 N( S

5 E  [' H( V% Y, }6 L附上一个lab文件,可用二进制编辑器打开,对照结构,加深理解。 ; s& ?7 q/ C5 f: c. T* D3 H

" L. _7 }: ^1 }, q4 Y! zData005.rar ! v: h' I! p3 s) D- V
8 Z/ V: g3 f/ u- Q
3.Laf文件格式
! i0 ?6 x* U8 ~3 e" ]) b2 c; m. i! u! B% q+ P9 [7 u; p- T
是游戏的字库文件格式,将会在字库篇作详细介绍。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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