之所以叫汉化备忘录是因为目前还没有时间做详细的研究。
- B! ]: [2 F4 l7 k. L2 }+ J& H; f* r8 {$ X; s6 j) i$ p2 X
一直以来,DOS游戏的汉化被认为是最困难的,在DOS下的游戏,基本没有什么共通的API可以使用,所以每个游戏的图形函数库基本上都是不同的。这为我们的汉化造成了很大的困难,但是DosBox这款工具软件的出现为我们提供了一个机会,这是一个windows下的Dos软件模拟器,经过研究我们发现这个模拟器可以使用DirectDraw 或Direct3D来渲染画面,这就意味着我们可以使用代理DLL技术修改某些关键函数,同时结合图像识别技术,也许就能实现DOS下的AVG游戏的汉化。
4 y7 O( `" ^. m Y( W: {. g* _; O% J( R- R6 ^
相关内容可以看这里 3 {8 ?, o8 C0 J$ {( Y+ j
http://www.si-gamer.net/gulikoza/dosbox.html
- g6 W+ S0 }; I. _http://www.si-gamer.net/gulikoza/
6 M( v" x* A- U( G$ X
- ~7 n) ?) D4 @( v; kDosBox的小方块测试如下 - ^# {/ {1 P2 H3 v, }1 w* D
https://www.chinaavg.com/read.php?tid=17242 1 H) H; g* O" {' v, V4 D
) M& l; W3 t( m4 E
暂时写到这里,有新的发现再更新。
- b# Y v) B* l$ x8 h2 z+ b0 L$ `( I
) d u1 p& c& y-----------------------------------------------------( K1 j3 I+ ]/ G
2010.4.6 更新. `7 S7 A8 O0 ~9 r4 h& t% c
放上支持directx版本的dosbox的源代码。
/ p2 C9 S0 \! I) ~8 J* g& V/ n+ ?: m写一下对于画面简单的游戏的汉化思路。
8 J' k3 U0 a0 s比如说是真人AVG,假设游戏在播放和终止视频文件的时候,要调用dosbox的某些文件open和close函数。
- V' E& B$ |+ l& {比如 \src\gui\file.cpp 的bool ANSIFile::open(const char *filename, OpenMode mode)
/ F* p' d6 |. y2 e ~5 Z& u和void ANSIFile::close()函数。
) I2 T8 i9 o+ E, p! B0 c5 _* K9 z; t8 Q$ w; {; b' D
我们可以在这些函数里插入一段代码,把文件名和时间写入内存共享区,配合directx9 的proxy dll,在发现内存共享区出现某个文件名的时候,就在present里输出对应的字幕,从而实现汉化的效果。 |