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

汉化任务 exttextout函数替换工具(scgame请进)

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

[汉化任务] exttextout函数替换工具(scgame请进)

跳转到指定楼层
楼主
发表于 2010-4-13 07:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

exttextout函数替换工具(scgame请进)

scgame
, a5 f* L0 [/ Q0 d
' r8 j# r5 m! k9 M* D3 W0 r你好,exttextout函数替换工具的功能部分的设计我写好了。
9 \# @& {1 h: Z* d+ |& P3 m请编写后放入gdi32.dll的proxy dll里,谢谢! 5 y' u  Y% a: a% n9 j9 T
这个工具制作完以后可以通用于所有Exttextout输出字幕的游戏 ,非常有用。7 C1 D; T* }- X2 A6 S

; D3 j7 i+ g) Whook Exttextout 为myExttextout,对传入的字符串作如下变化。 ; Q4 ?' q* U2 i. N* |2 P
先把hash变换为1个12位的字符串,比如eb013c782344,然后到sub.ini文件寻找key 2 \1 n3 |& a+ p8 i! c7 E
eb013c782344_cn,如有取出key值作为译文,如无,则在eb013c782344_en中写入原文, 8 @1 \( J# I2 e+ ~. n; A
在eb013c782344_cn写入一个空字符串,以备翻译。
: M0 B( i" G$ G/ U: Z
% n7 H. m0 r& F' }+ d# K, Q对了,为了不导致乱码,还要hook creatfont系列函数。% v  ~  I/ F/ @4 ]
把charset和字体修改一下,就可以出中文了。2 D3 a2 M: @! i% u2 H
可以先用那个俄文游戏试试看。& h" B, x2 M  p- {2 v: N: K
3 P) k; n, _2 R: h+ G/ X6 f5 {
有问题的话,请提问。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-4-13 10:09 | 只看该作者
汗~~不懂的还真有好多
& k5 y' P' m4 [6 k" R! A是不是说把lpstring通过hash改成个12位的字符传然后到sub.ini里找相应的中文?
9 n! M/ {2 h9 l然后用原来的exttextout输出吗?
. K2 C* |; j) O, d2 `2 y0 X9 V0 f  K% W: b/ d9 n7 @8 r
hook createfont就是不管怎么样都载入中文字体?3 J9 m9 t+ L  S% j% @6 O1 t5 s

/ `3 w0 @7 j1 R# l不好意思哈,我对windows API不太了解,怎么hook还不是很了解呢,有什么简单的方法测试一下吗?
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2010-4-13 11:12 | 只看该作者
引用第1楼scgame于2010-04-13 10:09发表的 : * D0 R' g# M0 U4 ^
汗~~不懂的还真有好多
# T. N: p3 ^4 Y* P7 O" t: f# r是不是说把lpstring通过hash改成个12位的字符传然后到sub.ini里找相应的中文?
1 O4 k1 j% n* Q& R然后用原来的exttextout输出吗? 4 H/ G" Q7 |  c- q- N  m" A6 p0 \7 u; |
8 D9 h/ M3 S7 m+ h2 Z, d' a! v& T
hook createfont就是不管怎么样都载入中文字体?
* @5 J) ?( z6 V$ B.......
1 _- [' A! T& H" }) W

$ f$ o' Y0 o1 r你的理解都对。' c% K2 q% a" o3 u1 w- b
hook 的方法就是按下面的方法作个gdi32.dll,要修改的就是上面提到的2个函数。3 `0 H0 K! y, R* N$ [3 I
完成后请放出源码。5 t7 u3 }' U( w4 K; `
https://www.chinaavg.com/read.php?tid=21849
回复 支持 反对

使用道具 举报

地板
发表于 2010-4-13 23:54 | 只看该作者
一定要12位的吗?好像看到有32位,16位,12位的没找到啊 [s:102]
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2010-4-14 06:01 | 只看该作者
引用第3楼scgame于2010-04-13 23:54发表的 :
0 {% S( A5 A  c, ?' W一定要12位的吗?好像看到有32位,16位,12位的没找到啊 [s:102]
* q7 W9 B; q1 k

4 f. e) R! d( e不一定12位的,16位,32位均可。
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2010-4-14 07:58 | 只看该作者
关键是速度和唯一性。/ g8 C7 d# n8 F

0 s/ d, F- h2 }; ?: L我建议这样,, a" K* y  x1 `! c! O
取13位,第1位为字符串长度,后6位为字符串前6个字节的ascii码,' e3 W# T8 ]# K; A, A4 D& H5 h( a& g
最后6位为字符串最后6个字节的ascii码,不足部分左侧或右侧补0X00.
1 @! N1 s* ^0 Y* B3 }& Q$ B1 {8 B这样可能比较快,也能保持唯一性。
回复 支持 反对

使用道具 举报

7#
发表于 2010-4-14 08:11 | 只看该作者
我现在先抄了个MD5的用用,对HASH还不是很明白
$ Q1 `: s& D, Z不过照这个方法的话,那自符串长度一样,中间那段字不一样的话会出错的吧.
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-14 08:17 | 只看该作者
哦,对了,我现在为了方便,并没有给hash加上_cn和_en7 N- v6 i7 |" x- v3 U/ T
只是把英文原文写到了一个新的文件里,而在sub.ini相应的字符串前添加了个*以方便查找
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 2010-4-14 11:11 | 只看该作者
引用第6楼scgame于2010-04-14 08:11发表的 : 4 M5 V2 m% v2 U$ V* `
我现在先抄了个MD5的用用,对HASH还不是很明白   N2 R  B9 j1 s: z* c
不过照这个方法的话,那自符串长度一样,中间那段字不一样的话会出错的吧. ) z. ~" o4 q) W
' Q* f  B! K4 b6 u2 Y
% \' l# h" C6 Q! p9 Y  m. v& n! N
能按md5来做是最好的,就是担心速度。2 E4 ]0 ?) ]- z+ o% J0 q6 h
我的方法的确是有出错的可能性,但是加大取的字节数的话应该可以避免。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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