冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2009-5-26 21:37
标题: 【代理DLL汉化研究】借助DosBox汉化Dos AVG新思路备忘录
之所以叫汉化备忘录是因为目前还没有时间做详细的研究。
* x  \/ }* R  X; c! L- w. X% c
' n0 k7 I# }$ Y8 I  n一直以来,DOS游戏的汉化被认为是最困难的,在DOS下的游戏,基本没有什么共通的API可以使用,所以每个游戏的图形函数库基本上都是不同的。这为我们的汉化造成了很大的困难,但是DosBox这款工具软件的出现为我们提供了一个机会,这是一个windows下的Dos软件模拟器,经过研究我们发现这个模拟器可以使用DirectDraw 或Direct3D来渲染画面,这就意味着我们可以使用代理DLL技术修改某些关键函数,同时结合图像识别技术,也许就能实现DOS下的AVG游戏的汉化。 7 {& i, u! f( s2 |  ?6 J" x' r

) ?- u( g( {/ M/ Q相关内容可以看这里
" D2 Z* @- i" l* ?! {+ q1 Zhttp://www.si-gamer.net/gulikoza/dosbox.html - v9 D' U. n7 a! i# ^
http://www.si-gamer.net/gulikoza/
3 n9 k% ]" @* O2 H4 C: m7 R- k, l2 O; ^! H2 U) y/ |8 u
DosBox的小方块测试如下
- u. K. S* z$ ]  o* g; D$ _9 Qhttps://www.chinaavg.com/read.php?tid=17242
  N0 D# j; p/ t2 g3 W1 T5 i5 H2 f' G0 i1 I$ G4 B
暂时写到这里,有新的发现再更新。 8 \! L" D8 g' G% v

- [; p, G  t' j0 Q7 n3 z; Q4 X-----------------------------------------------------* W* Y; S. V& [  P+ {. Y
2010.4.6  更新
# P- t* e; l% S' V" \3 [4 u0 f( b/ b放上支持directx版本的dosbox的源代码。2 C5 k' D+ Q& e- ~, p1 D* D# S0 ^
写一下对于画面简单的游戏的汉化思路。0 F' T+ h, q: a- |# e: H
比如说是真人AVG,假设游戏在播放和终止视频文件的时候,要调用dosbox的某些文件open和close函数。/ B3 I2 @- c5 R- @/ H) ~% Y* X. A; `9 H& o
比如 \src\gui\file.cpp 的bool ANSIFile::open(const char *filename, OpenMode mode)
7 Q6 y) Q0 ]% f6 \- X' t) g8 _6 v和void ANSIFile::close()函数。/ Q" X% e5 X2 r5 M
3 z+ ^8 I: P- h- n- S* n, O  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发表的  :" Q- \+ _& H5 x) e3 d
老大...DOS游戏是16位的...补充一下..不是难,是压根不是一类的东西.现在的PC游戏不是32位就是64位...

, e# M: T2 z* i1 E+ {6 R你说的我知道。看来你还没理解我的思路。! P9 G$ ^0 V  y( k
我用的方法可不是老式DOS汉化方法喔。
作者: firendless    时间: 2009-5-28 10:04
明白了...借刀杀人...
作者: firendless    时间: 2009-5-28 10:05
我也补充一点,hook api 后有个api或许有用 GetArgumentByName()可以获取参数
作者: shane007    时间: 2009-5-28 11:12
恩,某种情况下确实有用。$ \1 }( Z: x3 S5 |, _/ o4 a
8 E5 V. q- e% ]5 p8 e! a

; o3 ^7 M# V  E貌似可以用 GetArgumentByName()来直接获取参数0 G+ j9 c1 ?0 A

( K. I# F, w9 |m_oApiHooker.GetArgumentByName(1)'获取第1个参数8 m8 i) V* z+ ?6 M% o8 c: T
...1 g7 [, K0 o" ]& T5 R6 v! X) }9 y
m_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
印刷体的图像识别是可行的
/ j/ |6 b2 v0 Z: ?5 B3 s有些开源支持,如openCV
作者: shane007    时间: 2010-4-7 17:11
标题: Re:dosbox
引用第8楼solidji于2010-04-07 11:55发表的 dosbox : & v9 f. I4 L" i/ E
印刷体的图像识别是可行的 + `9 d2 O& d; e6 X( r7 u5 h; K1 O
有些开源支持,如openCV

8 U5 ]8 J( g! N9 r
% x! b* _' o- B0 t9 }其实很难,在每帧刷新的时候图像识别,是要讲究速度的。




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