KeyFC欢迎致辞,点击播放
资源、介绍、历史、Q群等新人必读
KeyFC 社区总索引
如果你找到这个笔记本,请把它邮寄给我们的回忆
KeyFC 漂流瓶传递活动 Since 2011
 

[文物] Planetarian 汉化测试第一版下载

[ 45397 查看 / 59 回复 ]

回复:Planetarian 汉化测试第一版下载

由于没时间用只能给楼主点建议:
1.如果楼主使用DC写屏建议改为DirectDraw写屏(加DoubleBuffer)这或许可以避免中日文重叠
具体方法为:
启动=======================================================================
查找程序进程->获取MainForm句柄->用DDraw建立两个Buffer(Buffer A、Bufer B)
===========================================================================
线程1(循环运行)==========================================================
封闭Buffer A -> 取内存识别游戏当前显示页(这个偶不懂)-> 在Buffer A中生成覆盖原文的背景 -> 将翻译文字写入Buffer A(用光栅运算抠像)-> 开放Buffer A -> 延时
===========================================================================
线程2(循环运行)==========================================================
判断buffer A是否封闭,当前buffer A是否已写入 Buffer B -> 如果buffer A已开放且buffer A未写入buffer B则将buffer A 复制到buffer B -> 将buffer B切换到游戏MainForm最前页覆盖当前屏幕
===========================================================================
线程2可防止游戏刷新屏幕造成重叠

2.本程序的兼容性问题与GDI版本和DirectX版本有关,编译时最好用VC++的编译器,另外不要使用GDI+和Win3.X的API,建议在DirectX9.0c环境下开发补丁,把DirectX9.0c客户端与补丁放在一起供人下载

这只是一个设想供楼主参考,如果楼主用的是更好的方法那么54以上内容,由于对线程、内存操作等API和DirectX8.1不太熟所以本人只有抬着嘴说的份,技术上看来是帮不了什么忙了。
分享 转发


传播音乐梦想的种子,让音乐的美在人们心中破土成长
拥有梦,拥有未来!
TOP

回复:Planetarian 汉化测试第一版下载

以下引用scegg在2004-12-17 10:07:02的发言:
我是来支持的,顺问一下,AIR的汉化什么时候好……

某人说元旦前后或Air开播时


传播音乐梦想的种子,让音乐的美在人们心中破土成长
拥有梦,拥有未来!
TOP

回复:Planetarian 汉化测试第一版下载

以下引用kkkklll在2004-12-17 11:03:37的发言:
多谢大家的测试和意见。

不过DirectDraw这东西,老实说,偶不会,最近也没时间去学。据说是好繁的说。偶只会直接用CopyRect、OutText之类的写屏。因为我毕竟不是这方面的专业人员,比起系统,我更熟悉算法。

上面的那些日文的擦掉后是黑的的问题,估计可以用让它不显示日文来解决(正在进行中……)。还有我的屏幕从来都是800*600的,所以没有考虑其他分辨率……呵呵。下次看看能不能加上去。

全屏模式下显示出错的问题,我怀疑是用的Delphi版本有Bug(原来用的是6.0,正在下载最新版)或者是某些函数在某系统的全屏下无效?……(呵呵)

用到函数:CopyRect和Mask、GetDC。有哪位大侠知道吗?


楼上用的函数在Win9X以上的系统中都能用(参考MSDN2003 Oct),但是问题是游戏是基于DirectX的程序,其优先级很高,而且是以缓存+换页的方式显示,自然在覆盖上会存在问题。不知道楼主会不会把文字写在一张位图上(反正我不会),位图字用颜色0xFFFFFF,底版用颜色0x000000,建立一个程序MainForm的DC,把位图载入DC中用光栅运算“AND”,这样就获得抠像后的文字DC,禁止日文显示后,反复将这个DC复制到窗体本生的DC中或许可以解决覆盖问题。至于文字移位的问题我建议统一一下DirectX的版本收集测试结果,如果确认是操作系统的兼容问题,那么就在启动时先识别操作系统版本,分别确定左上角位置。

我还有一种想法:继承游戏的主窗体再建一个子窗体,用SetWindowPos()函数(记不清是不是这个名字来着)将窗体置为最前,然后把文字显示在那个窗体上....


传播音乐梦想的种子,让音乐的美在人们心中破土成长
拥有梦,拥有未来!
TOP

回复:Planetarian 汉化测试第一版下载

严重支持楼上的!


传播音乐梦想的种子,让音乐的美在人们心中破土成长
拥有梦,拥有未来!
TOP

回复:Planetarian 汉化测试第一版下载

以下引用kkkklll在2004-12-17 17:23:54的发言:
偶知道是虾米问题了,显不出是因为切换了屏幕后没有改变写的位置,结果写到外面去了,呵呵。

我的机器一直是800×600分辨率,所以可以显示。


我想还是表用绝对坐标,因为窗体样式可改,容易引起误差。

以下引用亡灵之猫在2004-12-17 12:28:16 的发言:
我还有一种想法:继承游戏的主窗体再建一个子窗体,用SetWindowPos()函数(记不清是不是这个名字来着)将窗体置为最前,然后把文字显示在那个窗体上....


还有千万不要想用嵌入的方式写屏。我的想法就是因为这个而行不通的。
程序redraw时会把我的窗体也给覆盖了,只有通过不断Refersh来维持窗体,这会使得字幕不稳定,显示图之类的更是惨不忍睹,看来楼主只有在程序外部作文章了!
以下是程序草稿和源代码(Delphi7),虽然实现不了,但是也许对楼主有所帮助:

这里下载

先启动我的程序,再启动planetarian,用鼠标点击planetarian窗体任意位置即可看到实现的效果。

PS:看到寄生窗体中的那些数字了吗?他们是文字窗的相对坐标,依次代表x,y,cx,xy(从横行看起)


传播音乐梦想的种子,让音乐的美在人们心中破土成长
拥有梦,拥有未来!
TOP

回复:Planetarian 汉化测试第一版下载

以下引用wdx04在2004-12-18 0:38:19的发言:
    问一下楼主,外挂字幕是如何实现和游戏同步的?是通过API Hook、调试API、硬件断点还是别的技术?


我想没那么复杂吧,对基于DirectX编写的程序来说API Hook等钩子是不起作用的,因为对系统的调用都交给了DX。似乎要同步外挂字幕只需要监控程序内存,获得当前换页的相关参数就可以实现

以下引用wdx04在2004-12-18 0:38:19的发言:
    另外游戏中的文字到底是用什么方法显示的也不清楚。SoftICE装载了ddraw.dll,d3d8.dll,d3d9.dll
之后,DirectDrawCreate、DirectDrawCreateEx、Direct3dCreate8、Direct3dCreate9及常规GDI中的
TextOut、ExtTextOut、DrawText、DrawTextEx等函数都拦截不到文本输出。


wdx兄作个实验看看,直接用光栅运算为文字和图片作镂空(即“抠像”),发现问题了吗?直接镂空的文字和图片其曲线边缘有明显锯齿,而你看游戏中图像和文字(高品质下),边缘十分平滑,没有锯齿。
要实现这种效果有两种方法:
1. 3D实现法,将文字以贴图的方式画在一个面片上,打开平滑渲染模式,由硬件计算半透明镂空。
2. 2D实现法,将文字预先DRAW到一个Buffer中,用光栅运算镂空,在把Buffer中的图与背景叠加并计算一个半透明的边。

显然,无论以上哪种方法,写文字时都用不到绘图API函数,自然不能截取。既然已知文字的解密途径,不如监控文字Buffer的位置,这样便可以拦截到文字。
根据我的验证Planetarian的引擎使用了上述的“方法2”,因为在实验窗体时我发现文字是以块为单位画上去的,每个文字都是一个矩形块,而且这样做也方便了字幕滚动效果的生成。


传播音乐梦想的种子,让音乐的美在人们心中破土成长
拥有梦,拥有未来!
TOP