最近看了一下魔法师西蒙5这个游戏,发现这个游戏也使用了Sqlite3来保存一些游戏数据。 + i s' b# s& }8 \+ U( I
german.meta和resources.meta这2个文件都是Sqlite3格式的,我们可以用以下这个工具来打开修改。 , k: V9 E5 p7 W2 V
https://www.chinaavg.com/read.php?tid=20557
/ U; r; i! Y% [其中的几个字段分别对应了包文件index,文件大小和文件在包文件中的偏移量,所以制作解包器应该很容易。 $ f4 L* h: W# h0 ~* K# K; i& }4 w
2 m k; s5 w' Q
在文件名表里面,我们发现了在python/目录下面有好多游戏的.py脚本,暂时还没有发现游戏的字幕。 ; ], W+ E b w1 {! M3 J2 V
我把python/adventure/dialog.py文件手工解了出来,让我们来看一下它头部的注释。
( O7 O/ M3 Q0 d1 H+ g1 t5 f/ u+ d; d! c! K4 G; t* }! v/ |' v( e
"""Module to construct, manage and play dialogs. 5 ?/ d- T! E# D
; z+ @. S5 m1 s. @& C1 VThis modules provides the following classes:
0 `5 a4 H& ~- V& E) o! g8 J9 B9 ?! U* g0 ^" S2 Y9 j
Dialog_element - Basis class for all dialog elements. Not to be used directly, use Text or Choice
+ _! \+ D/ S: g+ v& Minstead. # n9 ]2 n- q2 r9 N
0 E/ \6 O1 ?+ M) N) f
Text - This class represents a single text in the dialog (including texts that are part of
' i( {) H2 b0 g4 ^( n E6 b' Wa choice)
3 R% J* \# z* S N6 e: h. Q0 H9 G) v+ O4 @" |( S( s
Choice - This class represents a choice in the dialog. It usually has several Text elements
W5 h, N& {% \4 a6 G. H+ Kas children. This childrens are the texts that the player can choose from. The Choice itself is a % O* K, c0 J- o- }
silent element.
( R0 h7 c5 [' R# w5 z* q: b
- x3 i2 d1 r. D1 [% s% E$ tDialog - This class represents a single dialog. A Dialog consists of several Dialog_elements
, T, x H* _0 _/ C+ h, |1 j; c- Qwhich are connected with each other in an arbitrary graph.
9 Y; \1 h% }7 A! p8 l+ H
, _# M9 ]# U! w* f+ QDialog_system - This class manages and plays Dialogs.
3 U' ?8 i' t& ~$ ]# B! {- }! v: j& B
The classes in this module interact with the text database. * `6 s3 F" k% y: M/ O2 r, ]3 [* N
The id used for a Dialog_element is also used to find the appropriate text in the text database when
6 a4 T2 i9 c/ K% n1 Qthe Dialog_element is displayed. (i.e. the Dialog_element id and the id of the text in the text - P' L. n4 Z! {/ t
database have to be identical for all instances of class Text). . Q1 o' o; K- U
"""
2 u% Y( G( o, u6 y+ R; |/ X* V7 ]! ~5 k7 U R& U: \
我推测,在包文件里面还有一个存放字幕的文件,说不定也是SQLITE3格式的,现在由于还没解包,还不清楚。 ' {' f7 k2 o3 A4 U. W4 u
另外,还有一个发现在文件名表里面我们发现了一个文件名python/grandmasboy/dwk5_graph.py。 # t0 l( `9 S& O" ]
我想起了前不久刚实现汉化的狂野小子5这个游戏,它也是采用了SQLITE3数据库的。 9 e: F& j& [ T# J9 q% Z
https://www.chinaavg.com/read.php?tid=20585 ! h1 H* c; e( b4 a. B
我没有猜错的话,这2个游戏应该是同一个游戏公司开发的,上面的那个文件应该是前一个游戏遗留在游戏引擎里面的东西。 + ~% u( X( b3 U( b5 x) }. x3 O
狂野小子5字幕是utf-8的,已经实现了汉化,也许我们能找到一些相似点来实现汉化。 ' ?' h0 d1 i0 G+ m! p; ^, n3 V
暂时分析到这里,期待有热心的朋友把解包器做出来,以便于进一步研究。
5 V1 P. y" z" Z: V: h/ a' _放上2个sqlite3格式的文件和dialog.py共研究备用。
: s$ {7 v1 f0 m$ x- ^% P ; m3 s6 ` C- J% C: @; ]* h
6 Q$ q' I. d' t, ?* X-----------------------------------------------------------------------
+ H0 S6 R# [3 Z1 U% C. I2010.2.28 第1次更新
9 A/ x& G8 y5 d! q. g$ u我在resources.d017中检索font,发现了以下的语句,这和狂野小子5几乎是一样的,应该也是用系统字库的。
8 u8 o% ?( }0 h3 X, ]8 \self.__cairo_context.select_font_face("Tahoma", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
3 W9 `0 ?- t( ^0 {; K! l所以,我感觉这个游戏的汉化希望很大,接下去就是解包后寻找字幕文件了。& `8 C$ D1 @9 |
----------------------------------------------------------------------- P* H) G) l7 Y% V
2010.2.28 第2次更新8 r9 U) l$ ?! K
我猜想这个游戏的字幕文件名也许和狂野小子5是一样的。
4 @, P" D x+ `/ G/ S我用sqlite3的工具打开german.meta,果然发现了一个german/text_db文件。2 X7 ?) z, S; u, n' ?' i
这样的话,应该用同样的方法就可以把这个游戏给汉化了。
# P. s) K+ G3 H3 e" D8 a% a等有时间再来做最后的试验。 |