最近看了一下魔法师西蒙5这个游戏,发现这个游戏也使用了Sqlite3来保存一些游戏数据。
* B0 n d% c) s' N2 \! Qgerman.meta和resources.meta这2个文件都是Sqlite3格式的,我们可以用以下这个工具来打开修改。
' g* M |- t5 U5 ?7 Q/ Jhttps://www.chinaavg.com/read.php?tid=20557 % d( }& l; s. U6 n3 d
其中的几个字段分别对应了包文件index,文件大小和文件在包文件中的偏移量,所以制作解包器应该很容易。
- F- p1 p3 S/ t: N) v2 h# V6 X
在文件名表里面,我们发现了在python/目录下面有好多游戏的.py脚本,暂时还没有发现游戏的字幕。
" A9 U$ M0 C. m9 N- ]我把python/adventure/dialog.py文件手工解了出来,让我们来看一下它头部的注释。
7 D9 c# a3 {& O" l( Q) F; @. h0 l& o L4 n. s. j- p3 {
"""Module to construct, manage and play dialogs.
4 x1 B" y. I) }( I. U: n+ [; y% N8 |' y' \
This modules provides the following classes:
! l3 r2 f" z- B" S
o# }8 ]" B- O! N. Y9 C& aDialog_element - Basis class for all dialog elements. Not to be used directly, use Text or Choice
' j$ @$ L/ z/ b7 Q) Sinstead.
4 D6 Z5 G" i- N7 Y# r9 Q
@+ Z4 [3 W2 c! s4 F& PText - This class represents a single text in the dialog (including texts that are part of 0 |$ Q/ U1 h6 {" t' I
a choice)
, m. Q" C; [$ H- X5 v0 C
1 H$ |, y0 R/ F6 A! P/ B, H _$ }Choice - This class represents a choice in the dialog. It usually has several Text elements
4 ?/ ^7 h( b9 Q4 [4 H5 [! P6 s4 z1 i& \as children. This childrens are the texts that the player can choose from. The Choice itself is a ! L' s2 A: p$ I8 w) J9 L7 a
silent element.
0 C# ?0 E! y0 _+ t' y8 M% G
* f# D/ p P# M; v0 zDialog - This class represents a single dialog. A Dialog consists of several Dialog_elements % g* [: ]. U0 P1 y
which are connected with each other in an arbitrary graph.
: g/ o+ T a; K7 Y
& O4 R: P! ~ P4 Q! _Dialog_system - This class manages and plays Dialogs. " [9 w9 R( m x9 q9 X4 R
3 D; B& a6 `& N4 V+ _. r
The classes in this module interact with the text database.
4 n0 |5 y3 q" Q4 JThe id used for a Dialog_element is also used to find the appropriate text in the text database when
( k d' U c3 K" m7 ~5 X) H+ Lthe Dialog_element is displayed. (i.e. the Dialog_element id and the id of the text in the text 2 z3 X3 m* ^% n6 s
database have to be identical for all instances of class Text).
; `: [4 z( C2 P""" / b, U2 ^, P2 ]; ~
) h: t$ n, L2 @$ `我推测,在包文件里面还有一个存放字幕的文件,说不定也是SQLITE3格式的,现在由于还没解包,还不清楚。
$ N( D; Q2 U7 b2 @) h另外,还有一个发现在文件名表里面我们发现了一个文件名python/grandmasboy/dwk5_graph.py。
, `# A, F( e( s, e8 U5 k我想起了前不久刚实现汉化的狂野小子5这个游戏,它也是采用了SQLITE3数据库的。
0 @* Y" I4 @- b3 L: [https://www.chinaavg.com/read.php?tid=20585
1 ^. d% e1 e% i, n3 g, U我没有猜错的话,这2个游戏应该是同一个游戏公司开发的,上面的那个文件应该是前一个游戏遗留在游戏引擎里面的东西。 - T+ t: E0 r3 a; X) d7 B
狂野小子5字幕是utf-8的,已经实现了汉化,也许我们能找到一些相似点来实现汉化。 ' ^# D n _. k, _7 e, i. P9 }
暂时分析到这里,期待有热心的朋友把解包器做出来,以便于进一步研究。 5 {6 P2 M% u7 L( Q$ i2 R! v
放上2个sqlite3格式的文件和dialog.py共研究备用。 C# t6 d6 q1 Y( a
# e5 R% p6 L3 D2 ^2 ^: k- ]) E4 I1 \
# p; G3 ?! U) l& _+ q9 F3 h-----------------------------------------------------------------------
( G- Z: ]% D- f& K! N8 S2 e2010.2.28 第1次更新 . H1 ^& ]! H+ W+ o9 h8 t1 b+ O6 [0 Y
我在resources.d017中检索font,发现了以下的语句,这和狂野小子5几乎是一样的,应该也是用系统字库的。 ( ?2 p+ z8 M W# I
self.__cairo_context.select_font_face("Tahoma", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD) 9 g2 ?( N- X" M% F5 [3 p3 X0 Z( p! h
所以,我感觉这个游戏的汉化希望很大,接下去就是解包后寻找字幕文件了。. t: [* r3 y5 t8 p. b
----------------------------------------------------------------------- / A2 g. J, `, S( V6 E' m& D& W
2010.2.28 第2次更新& O' O2 N2 S9 P
我猜想这个游戏的字幕文件名也许和狂野小子5是一样的。
2 f* R7 T& P* o6 V3 A4 Z( p9 K我用sqlite3的工具打开german.meta,果然发现了一个german/text_db文件。2 n( |7 t! i, y, A [6 z& Q/ g, X' x
这样的话,应该用同样的方法就可以把这个游戏给汉化了。
( P3 |3 F3 j8 J& t2 r d等有时间再来做最后的试验。 |