最近看了一下魔法师西蒙5这个游戏,发现这个游戏也使用了Sqlite3来保存一些游戏数据。 % k" ]( j! J% x
german.meta和resources.meta这2个文件都是Sqlite3格式的,我们可以用以下这个工具来打开修改。
- _6 f' l4 L) a8 v5 R, B5 {; qhttps://www.chinaavg.com/read.php?tid=20557
, A0 o' j$ W; W其中的几个字段分别对应了包文件index,文件大小和文件在包文件中的偏移量,所以制作解包器应该很容易。
3 X6 v% s- Z6 q% @
( }1 C+ r* N" H$ w在文件名表里面,我们发现了在python/目录下面有好多游戏的.py脚本,暂时还没有发现游戏的字幕。 % L$ y, t+ C/ E, w" ]7 F* [1 k* G( b
我把python/adventure/dialog.py文件手工解了出来,让我们来看一下它头部的注释。
4 o* ~; c0 v2 a7 _3 X4 `2 N, f. ~# }' d( b( v, }' z0 `) P
"""Module to construct, manage and play dialogs.
% L1 I% u- ^6 I% G
+ Z0 N$ j/ x; |- SThis modules provides the following classes:
9 q6 m6 z2 E& @) D {2 |
; b# j4 h$ A" S. b! [( H5 sDialog_element - Basis class for all dialog elements. Not to be used directly, use Text or Choice
9 s- U! ]( ?' Z. a6 Finstead.
- X$ Z: \7 `( ?0 v' _% I. h$ }
6 d O9 @, V, o2 GText - This class represents a single text in the dialog (including texts that are part of
9 z. ~0 D* Y! U$ e4 Ra choice)
- i& X* V ~! v, L9 l, {8 }7 B5 s: E
1 V" ~! [3 @+ }4 D( AChoice - This class represents a choice in the dialog. It usually has several Text elements - c8 l" a2 K! D Y2 w( J% X
as children. This childrens are the texts that the player can choose from. The Choice itself is a * z2 R' `4 l1 D* `/ e- q
silent element. ; H5 h, e: R" z- ~8 ~! F: r
, t8 Q& H( n3 D5 d
Dialog - This class represents a single dialog. A Dialog consists of several Dialog_elements
$ n" h, C: x1 W' |& {1 hwhich are connected with each other in an arbitrary graph. % I+ u8 ]4 v1 l8 X2 K
/ h5 P$ _/ s G# @Dialog_system - This class manages and plays Dialogs.
+ E0 E1 e. s5 k* M. g
# J! l. ^0 ?8 @( DThe classes in this module interact with the text database.
8 I; d( b9 P. _+ @The id used for a Dialog_element is also used to find the appropriate text in the text database when
6 z( Z% P, r5 @- P" Ythe Dialog_element is displayed. (i.e. the Dialog_element id and the id of the text in the text 6 ]8 k }' D L
database have to be identical for all instances of class Text).
3 }9 W7 u" i8 @: K, K. x"""
9 ^8 D, H: G I5 g$ ?. F& `7 G" B) s( s, x7 w2 i
我推测,在包文件里面还有一个存放字幕的文件,说不定也是SQLITE3格式的,现在由于还没解包,还不清楚。
6 _! r$ Y: h/ @4 a- z: I+ D另外,还有一个发现在文件名表里面我们发现了一个文件名python/grandmasboy/dwk5_graph.py。 * e# G! w4 { W( d% n; `# H! h
我想起了前不久刚实现汉化的狂野小子5这个游戏,它也是采用了SQLITE3数据库的。
! K- @* }$ e! Z5 w9 r2 r' R Xhttps://www.chinaavg.com/read.php?tid=20585 : H% e! `, K* x( s3 Q( {. q
我没有猜错的话,这2个游戏应该是同一个游戏公司开发的,上面的那个文件应该是前一个游戏遗留在游戏引擎里面的东西。 ' n R8 r, U* f' [3 N: h
狂野小子5字幕是utf-8的,已经实现了汉化,也许我们能找到一些相似点来实现汉化。
2 G- d& p' l- c1 q暂时分析到这里,期待有热心的朋友把解包器做出来,以便于进一步研究。 ; U' C6 }- o+ ^8 S3 [1 o, f
放上2个sqlite3格式的文件和dialog.py共研究备用。
1 h7 U0 S- B( Z, V/ K, T 0 e% g, {) e0 t: |
2 ~8 {" a- A7 G$ _, w7 K1 f-----------------------------------------------------------------------
' b8 g0 m) u) M* S: ~' W2010.2.28 第1次更新
# o3 r- N! X0 D6 D; K我在resources.d017中检索font,发现了以下的语句,这和狂野小子5几乎是一样的,应该也是用系统字库的。
+ e/ m' B% F$ g b. m5 Yself.__cairo_context.select_font_face("Tahoma", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
5 Y$ L2 C. F+ ^/ o& [所以,我感觉这个游戏的汉化希望很大,接下去就是解包后寻找字幕文件了。6 G2 y/ k. I$ \: Q6 {0 n
----------------------------------------------------------------------- ; U. F. E9 i$ a, i7 L# e t
2010.2.28 第2次更新7 o9 P& Z% x. Y; T( ]7 u% j
我猜想这个游戏的字幕文件名也许和狂野小子5是一样的。7 ~% R2 e+ p$ C( E( K' p$ `- n. q, F' g" L
我用sqlite3的工具打开german.meta,果然发现了一个german/text_db文件。 w& j0 ^9 n- t/ S( ]
这样的话,应该用同样的方法就可以把这个游戏给汉化了。3 b9 b2 y- _( F& U" I3 q/ z) w% j
等有时间再来做最后的试验。 |