最近看了一下魔法师西蒙5这个游戏,发现这个游戏也使用了Sqlite3来保存一些游戏数据。 2 O8 d! A! x! s* X' j" T
german.meta和resources.meta这2个文件都是Sqlite3格式的,我们可以用以下这个工具来打开修改。 k Q+ f( D! K- E% X) q) `% [
https://www.chinaavg.com/read.php?tid=20557
6 u8 Z; }; ?, g3 F' O) o& T其中的几个字段分别对应了包文件index,文件大小和文件在包文件中的偏移量,所以制作解包器应该很容易。 ; }$ ]8 A) h- M$ d7 [. |; W6 X
4 E p/ u. M4 K; Z在文件名表里面,我们发现了在python/目录下面有好多游戏的.py脚本,暂时还没有发现游戏的字幕。 6 `' C. h3 G. T+ ]: i
我把python/adventure/dialog.py文件手工解了出来,让我们来看一下它头部的注释。 4 p% Y9 D: i# V* `3 ^$ w( [& P
! t8 G8 U' x* s g% S1 |* B
"""Module to construct, manage and play dialogs.
& l6 F+ ^' [# T. {- b8 [ |0 k! k, z2 P: q' s
This modules provides the following classes: - ~% y0 u( I; @2 U; p2 ^
% [8 D0 _* U; L5 uDialog_element - Basis class for all dialog elements. Not to be used directly, use Text or Choice
8 y, a" t1 |- Sinstead.
& I# ?4 o' ^& u7 \7 Y5 ]+ t4 S$ q, o5 K$ F, H
Text - This class represents a single text in the dialog (including texts that are part of " n3 Y3 D% V- N9 F- J( X3 M' ~
a choice) - _ d9 B% ?, s& i( h
2 v0 W' Q. \6 ^# b0 S) |Choice - This class represents a choice in the dialog. It usually has several Text elements + @+ |) W4 n. L. ~% c3 ?7 j
as children. This childrens are the texts that the player can choose from. The Choice itself is a
' P3 b( t4 f V; [8 s5 N/ q) Vsilent element.
' W- H/ I/ x }4 ^" s
( I! ]* k0 g- _9 DDialog - This class represents a single dialog. A Dialog consists of several Dialog_elements , H2 T7 r* g5 g% H" F5 u3 [0 j* F
which are connected with each other in an arbitrary graph. 3 _1 ~1 R. w& p4 M6 r F
" D4 O% s. I/ [
Dialog_system - This class manages and plays Dialogs.
4 A3 \9 U& U4 w" A6 C) V( c1 _3 b; r( M5 U( o& h. p
The classes in this module interact with the text database. ' h; ?2 N6 F7 {& U9 R# k
The id used for a Dialog_element is also used to find the appropriate text in the text database when 4 y* ?3 H& E S; X! T: ?% L
the Dialog_element is displayed. (i.e. the Dialog_element id and the id of the text in the text . O! K; `$ p" _1 e* l% n) H
database have to be identical for all instances of class Text). 1 a' g7 z. \' a
"""
' C: j& C8 M3 B4 G* g- }& Z' k' E# A2 J2 r. R4 Q- F! `
我推测,在包文件里面还有一个存放字幕的文件,说不定也是SQLITE3格式的,现在由于还没解包,还不清楚。
! _5 z! p/ G6 `1 ~另外,还有一个发现在文件名表里面我们发现了一个文件名python/grandmasboy/dwk5_graph.py。
' ]+ s" ~, C# F我想起了前不久刚实现汉化的狂野小子5这个游戏,它也是采用了SQLITE3数据库的。 8 {8 D- Q7 \; f0 j& B) m8 ]' @, I& H" h
https://www.chinaavg.com/read.php?tid=20585
6 Q" j( h" a t2 V2 G& e5 x1 s/ A& S1 W我没有猜错的话,这2个游戏应该是同一个游戏公司开发的,上面的那个文件应该是前一个游戏遗留在游戏引擎里面的东西。 0 |3 P/ H; g& X5 J$ V! u& E
狂野小子5字幕是utf-8的,已经实现了汉化,也许我们能找到一些相似点来实现汉化。 . @7 x2 [$ V' O8 I% Y* k- {+ s
暂时分析到这里,期待有热心的朋友把解包器做出来,以便于进一步研究。
: E% m, |) X$ k) b放上2个sqlite3格式的文件和dialog.py共研究备用。
1 _( y6 Y5 s4 D) G& `8 o 7 K' A# |" U! {. i' u: w$ T8 r
1 G- T6 V8 G$ `$ O+ m----------------------------------------------------------------------- 3 M* {1 p7 t+ Q$ h
2010.2.28 第1次更新
9 W0 E( G- ~5 b6 t V. @, s# J我在resources.d017中检索font,发现了以下的语句,这和狂野小子5几乎是一样的,应该也是用系统字库的。 3 F: M6 b- h+ {: z0 _& ?2 C
self.__cairo_context.select_font_face("Tahoma", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
% `2 ?0 m! l Z: Q% Q5 O所以,我感觉这个游戏的汉化希望很大,接下去就是解包后寻找字幕文件了。
* e8 v7 Q: Y( m( N$ T* f" y1 _; z----------------------------------------------------------------------- $ y7 ]$ |# C4 x. z# Z
2010.2.28 第2次更新
. T& x! L4 H- f' @我猜想这个游戏的字幕文件名也许和狂野小子5是一样的。2 t8 O; k, N- f' Q
我用sqlite3的工具打开german.meta,果然发现了一个german/text_db文件。& w3 t" U2 u& h$ c
这样的话,应该用同样的方法就可以把这个游戏给汉化了。. E" h/ N3 _1 s5 u' N6 Y* W
等有时间再来做最后的试验。 |