冒险解谜游戏中文网 ChinaAVG

标题: 【代理DLL汉化研究】借助DosBox汉化Dos AVG新思路备忘录 [打印本页]

作者: shane007    时间: 2009-5-26 21:37
标题: 【代理DLL汉化研究】借助DosBox汉化Dos AVG新思路备忘录
之所以叫汉化备忘录是因为目前还没有时间做详细的研究。   A6 Q$ W9 G& D: C- Z" X! o5 t, P
6 X% S7 Y# c8 e' A! P* C
一直以来,DOS游戏的汉化被认为是最困难的,在DOS下的游戏,基本没有什么共通的API可以使用,所以每个游戏的图形函数库基本上都是不同的。这为我们的汉化造成了很大的困难,但是DosBox这款工具软件的出现为我们提供了一个机会,这是一个windows下的Dos软件模拟器,经过研究我们发现这个模拟器可以使用DirectDraw 或Direct3D来渲染画面,这就意味着我们可以使用代理DLL技术修改某些关键函数,同时结合图像识别技术,也许就能实现DOS下的AVG游戏的汉化。 0 ]5 u8 p6 [) \
) ]. i4 b" @# o
相关内容可以看这里
1 A2 H- q8 @& Hhttp://www.si-gamer.net/gulikoza/dosbox.html . \4 G+ R+ z& B- G/ N& N
http://www.si-gamer.net/gulikoza/   N- K: X4 K# J2 s% U3 l# ?5 g  m

2 k+ F3 S2 Y2 R) O; aDosBox的小方块测试如下 3 ^  A  j- _+ k5 _* X( n* y# q9 I, ^
https://www.chinaavg.com/read.php?tid=17242
/ B! z7 Y6 l  {% N0 T& n1 u
' x$ d  B3 m2 E暂时写到这里,有新的发现再更新。
2 `* x' Q0 N: b4 P) ]; x- D' r
- k2 R! K1 A) ?: U1 P-----------------------------------------------------
; f% J3 n2 a) P0 l: K! O3 J& g2010.4.6  更新
8 f5 s1 c. q) T, t9 w8 e放上支持directx版本的dosbox的源代码。; T% ?! q; _1 G% I9 V9 J9 u
写一下对于画面简单的游戏的汉化思路。7 P8 [: T- t& Y: y- d
比如说是真人AVG,假设游戏在播放和终止视频文件的时候,要调用dosbox的某些文件open和close函数。+ Y. @% |9 {' B2 k, v8 a$ j
比如 \src\gui\file.cpp 的bool ANSIFile::open(const char *filename, OpenMode mode). H) W' Q& ~$ n# l9 z. A8 {; s; d
和void ANSIFile::close()函数。) z, ^7 g* z# |* d( ]* o8 t) j

+ L% X' N: g  l7 F6 D我们可以在这些函数里插入一段代码,把文件名和时间写入内存共享区,配合directx9 的proxy dll,在发现内存共享区出现某个文件名的时候,就在present里输出对应的字幕,从而实现汉化的效果。
作者: firendless    时间: 2009-5-27 16:10
老大...DOS游戏是16位的...补充一下..不是难,是压根不是一类的东西.现在的PC游戏不是32位就是64位...
作者: shane007    时间: 2009-5-27 17:13
引用第1楼firendless于2009-05-27 16:10发表的  :
" H0 Q2 A. t9 i* }/ g1 y' r老大...DOS游戏是16位的...补充一下..不是难,是压根不是一类的东西.现在的PC游戏不是32位就是64位...
2 @2 v5 A3 f7 d2 [0 b
你说的我知道。看来你还没理解我的思路。
" y3 k1 U1 E" S8 m5 w. M3 V我用的方法可不是老式DOS汉化方法喔。
作者: firendless    时间: 2009-5-28 10:04
明白了...借刀杀人...
作者: firendless    时间: 2009-5-28 10:05
我也补充一点,hook api 后有个api或许有用 GetArgumentByName()可以获取参数
作者: shane007    时间: 2009-5-28 11:12
恩,某种情况下确实有用。1 y, M( Z# I1 Z. \( m& L# y

; K6 V& f9 z$ \6 u5 G' q) U- o
$ K. Y; v: N2 x5 X貌似可以用 GetArgumentByName()来直接获取参数
8 j/ b$ B$ v, y0 G3 E" a7 n. g) W$ e
m_oApiHooker.GetArgumentByName(1)'获取第1个参数
. W/ H" M7 O2 j- q( C; m( x' C. }...
6 A, ?$ G3 G1 B0 g, fm_oApiHooker.GetArgumentByName(4)'获取第2个参数
作者: shane007    时间: 2010-4-6 22:11
2010.4.6  更新
作者: scgame    时间: 2010-4-7 10:13
图,图像识别技术 [s:106]
作者: solidji    时间: 2010-4-7 11:55
标题: dosbox
印刷体的图像识别是可行的7 b9 v) U) E% K' P8 r
有些开源支持,如openCV
作者: shane007    时间: 2010-4-7 17:11
标题: Re:dosbox
引用第8楼solidji于2010-04-07 11:55发表的 dosbox : ) X3 l5 b% r4 t/ r8 M+ e
印刷体的图像识别是可行的 5 V7 ^( k" s# t! k0 Z3 {
有些开源支持,如openCV

, e7 d3 o/ Y! |, j$ t! V3 [- P1 ^# B5 G8 k. r) o& F
其实很难,在每帧刷新的时候图像识别,是要讲究速度的。




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2