最近看了一下魔法师西蒙5这个游戏,发现这个游戏也使用了Sqlite3来保存一些游戏数据。
8 u* x8 T' Z7 u6 L# Ugerman.meta和resources.meta这2个文件都是Sqlite3格式的,我们可以用以下这个工具来打开修改。 9 m! k: f% B; \6 n! v" W
https://www.chinaavg.com/read.php?tid=20557
: ^1 L, n0 U$ J4 [其中的几个字段分别对应了包文件index,文件大小和文件在包文件中的偏移量,所以制作解包器应该很容易。
6 T, g1 Q6 E" F r$ g5 Z p* ]
% v2 j* y# Q+ M在文件名表里面,我们发现了在python/目录下面有好多游戏的.py脚本,暂时还没有发现游戏的字幕。 . F" @( n* L- ~/ Q
我把python/adventure/dialog.py文件手工解了出来,让我们来看一下它头部的注释。 3 g$ C% L# f D! i6 [6 z5 T" W6 R
8 R5 V) {4 ^5 ^- k4 i
"""Module to construct, manage and play dialogs. % s9 N5 o* o1 \& n( C' R
) I0 b u+ B0 M- z( a
This modules provides the following classes: & u5 R8 ^$ |% b6 x
/ q6 B" r7 W" w& E# N' h; G; [
Dialog_element - Basis class for all dialog elements. Not to be used directly, use Text or Choice # g) B5 ^6 M v2 x
instead.
. [% T2 Q x0 p1 G5 c
' X: Q# H6 ?3 P/ [Text - This class represents a single text in the dialog (including texts that are part of
% ~6 A% k. t5 `; f& o. y* ~a choice)
M' s' j, o1 \& B4 C! A8 ~1 x' ^( A& T
Choice - This class represents a choice in the dialog. It usually has several Text elements 2 z- d$ F" q# r( i" D
as children. This childrens are the texts that the player can choose from. The Choice itself is a
. p: b/ g: i1 w, I& w, dsilent element.
: q; U, W; F. R% Z/ _: A, ]) D2 `$ b% l5 I9 _# Z; _
Dialog - This class represents a single dialog. A Dialog consists of several Dialog_elements 8 }. Z$ L" m( o, s$ r% }
which are connected with each other in an arbitrary graph.
8 u5 V; z3 w! y
6 X8 F: r4 _8 V: a1 ^Dialog_system - This class manages and plays Dialogs. 7 o/ O* i2 B, M: P8 g' V
0 t5 S& W* K; f+ d1 E2 }7 u6 t' ?
The classes in this module interact with the text database.
- r5 a$ a2 }2 P' H3 WThe id used for a Dialog_element is also used to find the appropriate text in the text database when
E q ?0 B* \: Q% C, G* Bthe Dialog_element is displayed. (i.e. the Dialog_element id and the id of the text in the text
+ ?: d+ a% P! Kdatabase have to be identical for all instances of class Text). . ^/ H7 f Q9 m& _* b- M0 f
""" & e6 V1 v1 h3 y
0 u& _) _: T1 n: v6 u M; ?+ y% P I我推测,在包文件里面还有一个存放字幕的文件,说不定也是SQLITE3格式的,现在由于还没解包,还不清楚。
; ]' y2 G$ g' L另外,还有一个发现在文件名表里面我们发现了一个文件名python/grandmasboy/dwk5_graph.py。
5 L) {" L- ]- h我想起了前不久刚实现汉化的狂野小子5这个游戏,它也是采用了SQLITE3数据库的。 ! g9 k" S1 ?4 O
https://www.chinaavg.com/read.php?tid=20585
3 I& Q) g" X$ k4 A8 E我没有猜错的话,这2个游戏应该是同一个游戏公司开发的,上面的那个文件应该是前一个游戏遗留在游戏引擎里面的东西。
' }; Q" i" u* W1 Q4 r狂野小子5字幕是utf-8的,已经实现了汉化,也许我们能找到一些相似点来实现汉化。 # f( Z! B, n' N4 B/ C
暂时分析到这里,期待有热心的朋友把解包器做出来,以便于进一步研究。
* r v& W$ g3 w7 e2 v6 D放上2个sqlite3格式的文件和dialog.py共研究备用。 6 K6 V. s) U0 J6 x: K: ^
0 q* r5 u/ i. O5 ]
/ n" r1 _9 V' z* s5 e% N. Q1 t4 t8 e-----------------------------------------------------------------------
4 ?* P: t) y! u) @5 n' b2010.2.28 第1次更新 5 R, r+ @, C4 N: t! }! k& }
我在resources.d017中检索font,发现了以下的语句,这和狂野小子5几乎是一样的,应该也是用系统字库的。
/ K# h) x/ G) gself.__cairo_context.select_font_face("Tahoma", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
- R% G# ]5 z; R所以,我感觉这个游戏的汉化希望很大,接下去就是解包后寻找字幕文件了。8 s/ P& w0 Z! D' `' S+ o. d
-----------------------------------------------------------------------
' h) E. z; b# P7 u ]2010.2.28 第2次更新
% n! a) i! ], R6 x; j6 b' C我猜想这个游戏的字幕文件名也许和狂野小子5是一样的。
) Y0 Y# P- w$ d" T. X$ z我用sqlite3的工具打开german.meta,果然发现了一个german/text_db文件。3 t. m8 |4 n1 j$ q+ Q# U; T
这样的话,应该用同样的方法就可以把这个游戏给汉化了。+ x* C& B; X* \! I
等有时间再来做最后的试验。 |