最近看了一下魔法师西蒙5这个游戏,发现这个游戏也使用了Sqlite3来保存一些游戏数据。 ( H3 O4 I, w. J4 g/ f8 ]5 \! ~
german.meta和resources.meta这2个文件都是Sqlite3格式的,我们可以用以下这个工具来打开修改。
# f/ j' H, L* \. [8 y# `2 V2 Ehttps://www.chinaavg.com/read.php?tid=20557 V- r0 M4 H! p! e* q8 _$ L( `9 D
其中的几个字段分别对应了包文件index,文件大小和文件在包文件中的偏移量,所以制作解包器应该很容易。
8 V) F' ]3 P0 W2 \$ D* O% a& Q- G; e& d8 o# a' |7 b' S
在文件名表里面,我们发现了在python/目录下面有好多游戏的.py脚本,暂时还没有发现游戏的字幕。
+ i9 M6 x; `: A) W我把python/adventure/dialog.py文件手工解了出来,让我们来看一下它头部的注释。
* }8 j( J' W8 Y
5 A% d# S+ j3 Q6 B! z9 _"""Module to construct, manage and play dialogs. - i0 F# _1 C/ N5 w6 v# O
7 N( }8 L% X8 E! A) B2 { P5 S
This modules provides the following classes: & u/ f% b! |( j; X8 `$ T1 r
! ~, }6 W1 j; j n4 `$ i0 b3 RDialog_element - Basis class for all dialog elements. Not to be used directly, use Text or Choice p+ R% i! A5 Z9 {' ^, ^" j
instead. * ]9 D& a$ V6 z* h
+ @- T) z: V( v Z* K
Text - This class represents a single text in the dialog (including texts that are part of ' \! k9 o7 M/ W+ a
a choice)
5 N% A- D) B, b3 U7 H2 c
1 f, M/ l( |* m! zChoice - This class represents a choice in the dialog. It usually has several Text elements ' f% U9 N5 d7 E" F
as children. This childrens are the texts that the player can choose from. The Choice itself is a
$ F5 u& u' N, @% R! T7 V4 Jsilent element.
' T- @# }9 U4 ?$ ~6 U2 e* l+ z/ h$ J% c" v! ^" T" q7 o
Dialog - This class represents a single dialog. A Dialog consists of several Dialog_elements ! H6 F( S- V: o$ q0 ]! g
which are connected with each other in an arbitrary graph. 5 s/ d7 k! B$ `, J
7 L7 h4 H4 s- I, IDialog_system - This class manages and plays Dialogs.
% w9 W+ \3 P/ W7 |3 m) z6 B4 [9 @' M; p* Q& X; V. R
The classes in this module interact with the text database. 4 D: H5 \ N4 U' c# ^4 I1 z
The id used for a Dialog_element is also used to find the appropriate text in the text database when 1 X8 ^9 w* C! w+ o4 I. i
the Dialog_element is displayed. (i.e. the Dialog_element id and the id of the text in the text
% z Z0 K3 f5 @4 U; qdatabase have to be identical for all instances of class Text).
/ K% F( M# A. [5 a" f0 ?% b""" 1 }: O2 e3 b0 N" {) ]
& p5 ~2 G* i+ ?4 Y1 n( K
我推测,在包文件里面还有一个存放字幕的文件,说不定也是SQLITE3格式的,现在由于还没解包,还不清楚。 6 n- g4 |, a: F* `: N
另外,还有一个发现在文件名表里面我们发现了一个文件名python/grandmasboy/dwk5_graph.py。 ! X. ?: M! T Z$ a* _+ q E
我想起了前不久刚实现汉化的狂野小子5这个游戏,它也是采用了SQLITE3数据库的。
. Q! z% f" i7 i( Q+ p, S, Qhttps://www.chinaavg.com/read.php?tid=20585 7 Z# |' O# N' c6 n
我没有猜错的话,这2个游戏应该是同一个游戏公司开发的,上面的那个文件应该是前一个游戏遗留在游戏引擎里面的东西。
8 |. n; a! C# {* U& a狂野小子5字幕是utf-8的,已经实现了汉化,也许我们能找到一些相似点来实现汉化。 / f1 {2 b1 p6 D" B
暂时分析到这里,期待有热心的朋友把解包器做出来,以便于进一步研究。
6 w# e1 `6 J" q) {放上2个sqlite3格式的文件和dialog.py共研究备用。
: ~8 ^" y/ ?7 p1 Y7 X$ S9 Z/ I " @ E# r) [1 E3 `
) t6 T& D+ F a! I9 ~
-----------------------------------------------------------------------
: B& a' W7 G4 i- B2010.2.28 第1次更新
: B6 n7 c' I. U' C K我在resources.d017中检索font,发现了以下的语句,这和狂野小子5几乎是一样的,应该也是用系统字库的。 # X, a* @2 g# V3 \: W* j, b
self.__cairo_context.select_font_face("Tahoma", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
3 J, S4 a: v8 F所以,我感觉这个游戏的汉化希望很大,接下去就是解包后寻找字幕文件了。
: S* G* U: a- S; | D0 E4 g-----------------------------------------------------------------------
+ s3 k2 H% T% c3 O' Z e2010.2.28 第2次更新
. f" W# I0 h5 k3 n$ {% K我猜想这个游戏的字幕文件名也许和狂野小子5是一样的。
. W) o0 V. q" I- j, s我用sqlite3的工具打开german.meta,果然发现了一个german/text_db文件。; u R0 b X" C! e3 ]4 r
这样的话,应该用同样的方法就可以把这个游戏给汉化了。
2 U: g$ t' g/ ~$ m$ A等有时间再来做最后的试验。 |