之所以叫汉化备忘录是因为目前还没有时间做详细的研究。 1 n7 D% @5 D! D! t- ?9 t
% t# ^/ i: i4 P; T+ m' [! q' n一直以来,DOS游戏的汉化被认为是最困难的,在DOS下的游戏,基本没有什么共通的API可以使用,所以每个游戏的图形函数库基本上都是不同的。这为我们的汉化造成了很大的困难,但是DosBox这款工具软件的出现为我们提供了一个机会,这是一个windows下的Dos软件模拟器,经过研究我们发现这个模拟器可以使用DirectDraw 或Direct3D来渲染画面,这就意味着我们可以使用代理DLL技术修改某些关键函数,同时结合图像识别技术,也许就能实现DOS下的AVG游戏的汉化。
) ?7 O; u2 V3 {; {( W4 A+ Z
4 M' [0 I( [6 a* O5 Z相关内容可以看这里 ( i. n/ t& p2 |7 _. M- T: l1 y
http://www.si-gamer.net/gulikoza/dosbox.html
4 S& q; \8 R+ R; q" ghttp://www.si-gamer.net/gulikoza/ 0 b r& l( W0 X" s; k3 u" t
+ }% I+ Q: ~% l
DosBox的小方块测试如下 5 i/ s) [4 \2 b* g: f
https://www.chinaavg.com/read.php?tid=17242
2 L: X, [3 w6 N: h3 C
1 [* B3 W1 f" K, e1 W暂时写到这里,有新的发现再更新。
8 I5 t) L7 Q4 E* N4 u( Y
; ^+ E3 A) T( |-----------------------------------------------------
. B: y* q/ I( [9 T1 |- T% T2010.4.6 更新 ` o8 D0 O4 B1 C. ]/ j# w f
放上支持directx版本的dosbox的源代码。
7 i D. B3 B% k写一下对于画面简单的游戏的汉化思路。$ B* g7 M( @ ?) o
比如说是真人AVG,假设游戏在播放和终止视频文件的时候,要调用dosbox的某些文件open和close函数。- c, P4 c" ?: m4 w( N, C2 y
比如 \src\gui\file.cpp 的bool ANSIFile::open(const char *filename, OpenMode mode); O, ?! Y! L4 A% @+ v$ R" o- x
和void ANSIFile::close()函数。: Q- S2 a6 q) `* q" J. d0 n& Q
! t7 p9 y2 U4 |" u4 `1 ~* S! c
我们可以在这些函数里插入一段代码,把文件名和时间写入内存共享区,配合directx9 的proxy dll,在发现内存共享区出现某个文件名的时候,就在present里输出对应的字幕,从而实现汉化的效果。 |