6 k9 k: R7 h s' ~/ ?4 V' v0 c, D7 R在文件名表里面,我们发现了在python/目录下面有好多游戏的.py脚本,暂时还没有发现游戏的字幕。 8 D& y7 R- d# L) Q- R5 F( Z- M
我把python/adventure/dialog.py文件手工解了出来,让我们来看一下它头部的注释。 + Z! ~' z7 Y& U. i& _* K
{0 O6 C5 [* D* \! x5 u c"""Module to construct, manage and play dialogs. " S h" N# U# b' S- \/ S, U. v1 q' I- d 9 x/ Q, \+ V' @. n8 H" PThis modules provides the following classes: # E3 b% |- R2 _7 A& C6 u5 f
" O5 D- F4 P0 u) e% w3 Q
Dialog_element - Basis class for all dialog elements. Not to be used directly, use Text or Choice 2 _, m' Y" f! R, @instead. ! i5 f6 i% S3 Y0 x- v0 W5 B# q& q
+ r1 u% p& h& P& i7 {& \$ eText - This class represents a single text in the dialog (including texts that are part of 0 |. O2 ~0 a! ?, }a choice) 2 w* T3 p% V& w" {1 ^4 a2 i
; M, S" X8 |% S
Choice - This class represents a choice in the dialog. It usually has several Text elements + Y% T& x: v) V1 ~9 r1 r) `
as children. This childrens are the texts that the player can choose from. The Choice itself is a & _* d* e, T8 }6 }3 v! }/ ssilent element. ! V* y' q& r A! a: C4 j/ b9 ?
8 k5 ?1 O# m9 e- V' s' LDialog - This class represents a single dialog. A Dialog consists of several Dialog_elements % ?# j) x) A }
which are connected with each other in an arbitrary graph. : I/ b( j; v$ |- u; P+ E. W
# D g* `- f" K. ^6 }Dialog_system - This class manages and plays Dialogs. / \( f1 ~) p" I% I% G* Z" D1 u
: O6 f' V9 L, w8 t( U+ l3 i
The classes in this module interact with the text database. 0 b' y/ V: D, y2 t
The id used for a Dialog_element is also used to find the appropriate text in the text database when 6 Z# h$ v5 D: `* W1 L
the Dialog_element is displayed. (i.e. the Dialog_element id and the id of the text in the text - {; {" X9 X2 n& S3 i: V A, q2 r
database have to be identical for all instances of class Text). " M: g9 u% I$ W& \""" $ m) X8 h" R1 L5 Y7 N7 A 1 c4 P, @7 H2 x我推测,在包文件里面还有一个存放字幕的文件,说不定也是SQLITE3格式的,现在由于还没解包,还不清楚。 1 B# M+ S0 l7 S# o6 M7 R
另外,还有一个发现在文件名表里面我们发现了一个文件名python/grandmasboy/dwk5_graph.py。 1 H+ b5 q6 b4 N: j* [* k我想起了前不久刚实现汉化的狂野小子5这个游戏,它也是采用了SQLITE3数据库的。 ; n; T& k8 h/ P; p- Ihttps://www.chinaavg.com/read.php?tid=20585 / ~4 Z; K# {& g. ]我没有猜错的话,这2个游戏应该是同一个游戏公司开发的,上面的那个文件应该是前一个游戏遗留在游戏引擎里面的东西。 ( I. J7 I X- ]狂野小子5字幕是utf-8的,已经实现了汉化,也许我们能找到一些相似点来实现汉化。 ( [3 [5 X# q u" V0 a
暂时分析到这里,期待有热心的朋友把解包器做出来,以便于进一步研究。 " I! Y& x. s6 X$ n) ]% ^5 T放上2个sqlite3格式的文件和dialog.py共研究备用。 \+ v8 S; {- _8 H; D( v7 P
[attach]15347[/attach] $ [9 r0 t; ~$ f* R) q6 i* a2 e) _$ j1 w1 [+ y5 X3 q
----------------------------------------------------------------------- 8 {" M6 Y# x! P 2010.2.28 第1次更新 ! v- Q, G' T( C& R% C8 n
我在resources.d017中检索font,发现了以下的语句,这和狂野小子5几乎是一样的,应该也是用系统字库的。 , p& }# W& P4 g; O2 z0 A Iself.__cairo_context.select_font_face("Tahoma", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD) 8 W, M, u) y6 Q! s# _0 j ]& y
所以,我感觉这个游戏的汉化希望很大,接下去就是解包后寻找字幕文件了。 0 f2 b2 Z2 V) e. ^( S----------------------------------------------------------------------- 7 L- C7 p4 @3 X/ n! i! B7 W, A 2010.2.28 第2次更新9 q' u, \' y. l9 W4 Y% D8 B0 G
我猜想这个游戏的字幕文件名也许和狂野小子5是一样的。! \! {* N% r8 e) N, n4 z, `/ |
我用sqlite3的工具打开german.meta,果然发现了一个german/text_db文件。' E- w2 J. |0 Y- @' I$ C4 k1 W
这样的话,应该用同样的方法就可以把这个游戏给汉化了。 : B; l2 w7 S7 h5 P9 N& t# n等有时间再来做最后的试验。作者: shane007 时间: 2010-2-28 09:52
2010.2.28 更新作者: shane007 时间: 2010-2-28 14:22
2010.2.28 第2次更新