设为首页收藏本站官方微博

【汉化资料】【原创】基于图像比对和代理DLL的汉化新方法

[复制链接]
查看: 2267|回复: 6
打印 上一主题 下一主题

【汉化资料】【原创】基于图像比对和代理DLL的汉化新方法

跳转到指定楼层
楼主
发表于 2009-5-24 21:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【汉化资料】【原创】基于图像比对和代理DLL的汉化新方法

对图片字库的汉化进行了一个阶段的研究,现在我提出一种基于图像比对和代理DLL的汉化新方法。
+ v/ q- X- z4 j  N是否能最终实现心里还没有底,不过先写个初稿放在这里,希望各路高手指正。9 a( ?) U. ^7 A# D9 d% W6 m
' o0 A* E1 ]. `2 o% S& f
运用代理DLL技术,我们可以重写DirectX内部的所有成员函数。(对代理DLL技术不清楚的朋友可以参考我发的相关帖子)$ N0 l) f! j5 ~0 h2 r

8 s+ ~* _2 A5 {: l5 |在DirectX调用Present函数时,我们应该有办法取到前台表面和后台表面的内容。其中必有准备向屏幕显示的内容。我们可以实现修改字幕的内容,一般一个游戏的内容有几千句,我们可以用3-4位2进制数来表示。就是说,我们把字幕的内容修改为0000-FFFF。对话字幕一般在屏幕上的显示位置是固定的,都是在某个矩形区域内部。所以我们可以事先截取字幕显示后的样子的小型图片,也就是0000-FFFF用游戏字体所显示的样子。然后在Present函数中,对前台表面和后台表面的相应区域进行对比,可以进行异或操作,如果得到一个全0的字节数组应该就能说明这2块区域完全相同。同时就说明游戏要显示某句字幕,由于这3-4个字母的区域很小,所以比对应该会很快。然后我们可以把这句字幕相应的中文字幕显示到前台表面或后台表面。这样基本就完成了汉化的过程。
% \6 d: W' I* k# p6 s! o" O# `6 \' Y. {9 H
当然,这样的汉化方法有一定的局限性,比如,字幕显示的区域要相对固定。: h' ]! c) ^$ R6 N
如果字幕的显示位置是随机的,那这种方法就不太适用了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2009-8-25 05:37 | 只看该作者
你说的办法跟游侠汉化植物大战僵尸一样啊?
% Z7 _0 Q3 {/ W3 J0 r" G8 Y
* h1 F# r/ L9 v5 a0 S1 U1 c用内挂DLL显示中文
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2009-8-25 06:10 | 只看该作者
你研究过植物大战僵尸?3 z% S( r0 ~" N3 Y- G
不妨仔细说说?
回复 支持 反对

使用道具 举报

地板
发表于 2009-8-25 06:46 | 只看该作者
下载游侠发布植物大战僵尸汉化版分析一下就知道
! h* F) Y* |4 I) |* M- phttp://game.ali213.net/thread-2789340-1-2.htmlu* J9 D3 c! S8 b. [5 i
* p" z# k+ i; O) |$ M1 {
很明显,采用了DLL内挂显示中文和 系统自带中文字体 关于细节游侠没有透露 不管怎么说,已经证明你的是对的,同时看到了小游戏的汉化希望
回复 支持 反对

使用道具 举报

5#
发表于 2009-8-29 14:39 | 只看该作者
楼上网址最末处多了个U
& J7 ^: X, Q0 t: G# `) F2 ~2 N+ q  M2 i# @
偶下到的直接打到一起了的版本
( S2 v6 R- ?- W3 Z所以不知道E文版啥样子的……- m! k/ A5 g( t9 N: T

, q3 s, J  I; f" w在游戏目录下找到了GIF的字符库
3 |% Q' B" [! @' E. |; k! B! U同时还有各种字符的定义及宽度设定文件/ ^: l; F4 S9 J6 k6 |1 w% ?
如果从这里着手
5 Y7 u- C  T6 n用UinCode来对应汉字表
, V+ v' ?" j; _* d应该也很容易做的" S4 g1 G; g. {2 N! z& ~

1 T8 v  Y) u5 ?7 A0 B! X$ r1 {汉化主要工作
2 m( _0 ~" b: p6 Q! Z; ?应该是制作图形界面
6 T# I" B/ k: U) H; f# ^( S0 E难点则在说明文字部分的显示* q' ]& A4 C' f7 h0 }
在主目录下可以看到GDI42.DLL
" M7 p4 U0 m, l估计是用来加载中文显示的
. d$ A( B& u! z' z" |自带了一个方正少儿体
  ?0 j* U7 H6 [( r: P7 L# W9 W, H不过在偶这儿却没能正常加载
回复 支持 反对

使用道具 举报

6#
发表于 2010-4-1 18:16 | 只看该作者
如果是2D游戏,对白输出都是通过固定API函数,很容易做. 看这个textout hook 项目
* V( t& Z8 J' u6 e6 chttp://blgames.proboards.com/ind ... =250&page=1) b8 G0 D3 c4 R
: h0 S  g0 b& i" {# @+ I
D3D游戏的话,基于速度的考虑,一般是采用纹理方式输出,纹理又分动态静态,
0 M, C2 k3 E! u; `. E9 E9 b/ W游戏初始化时一次性创建,显示的时候填充
, u% F% Y6 z+ h  }用到哪里创建哪,每句话根据码表单独创建一个纹理
" g- |8 G) ~; K8 S5 t' l% a: x效率最低的方法是用GDI建立纹理数据,然后填充纹理,最后绘制
( z1 s# T( e9 ]  t效率最高的方法是直接存储每个字母的对应纹理坐标,使用固定纹理0 x# f  I4 G. e6 y
折中的方法是建立每个字母的图像数据,使用哪个字母就建立对应的纹理
4 I; I% r+ I; w$ S总之很多方法,首先要兼容这些不同的输出方式3 f8 A4 i7 Q: R& Y- [; r
: n: f9 A* B  V9 {
另外一点主要是如何区分一般游戏纹理,与文字纹理,还有带文字的图片纹理,
# T, \) M* L) y3 p) W1 v) D然后找到一个不影响效率的时机用自己的汉化后纹理来替换0 ^7 V: x3 K0 T$ h$ H# C, F
# Q* @, n, d( x1 t; T2 ]4 Q- D/ h
LZ 比对图片二进制数据的方式不知能否区分出各类纹理
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2010-4-1 19:22 | 只看该作者
感谢楼上的发言,我提出的只是一个思路。! p, u- m& q6 O1 Y9 t
要实现的话真的是难度很大,我对directx的理解游戏。
$ q$ F; p0 z) z* p- o7 T# q9 A直白地说,我提出的思路目前并无具体方法来实现它。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表