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

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

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

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

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

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

scgame
2 j3 r& ~9 G1 f2 ]0 c) I
' S% K- F4 b% E你好,exttextout函数替换工具的功能部分的设计我写好了。 . N( @! A* g& f8 l
请编写后放入gdi32.dll的proxy dll里,谢谢! + J2 R; N$ R# g: t5 |+ F) s
这个工具制作完以后可以通用于所有Exttextout输出字幕的游戏 ,非常有用。
$ L7 S  |7 x, q( X6 B3 O
2 h4 z$ V3 x, I3 T$ J( @hook Exttextout 为myExttextout,对传入的字符串作如下变化。
. c& L; a/ N; W先把hash变换为1个12位的字符串,比如eb013c782344,然后到sub.ini文件寻找key
, m+ g+ f8 Z2 }9 W1 c1 C; Z7 d1 keb013c782344_cn,如有取出key值作为译文,如无,则在eb013c782344_en中写入原文,
7 r! x7 ?1 o- _4 L在eb013c782344_cn写入一个空字符串,以备翻译。 4 d" y2 Q& g0 G$ h& W4 D* T4 p
" b6 L" y2 p  {3 g2 z
对了,为了不导致乱码,还要hook creatfont系列函数。% Y: r7 j, t* G6 ~" ]  d
把charset和字体修改一下,就可以出中文了。4 n, W' M3 C9 d
可以先用那个俄文游戏试试看。+ n1 E9 K; B" D8 H

) x) R) t& u: b  ^" H0 U有问题的话,请提问。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-4-13 10:09 | 只看该作者
汗~~不懂的还真有好多
; Y- R( a0 C* r( {* D) H# Z是不是说把lpstring通过hash改成个12位的字符传然后到sub.ini里找相应的中文?
+ ~5 {4 b2 H+ e8 m* d然后用原来的exttextout输出吗?9 j4 n  Q2 }/ w, K$ M2 M5 O

$ E& p7 X' d/ N: r" Thook createfont就是不管怎么样都载入中文字体?- ]# W6 G& g1 X; b) R3 _$ w. Y

; _: p$ R4 s. f9 j/ U+ S$ D# E9 p不好意思哈,我对windows API不太了解,怎么hook还不是很了解呢,有什么简单的方法测试一下吗?
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2010-4-13 11:12 | 只看该作者
引用第1楼scgame于2010-04-13 10:09发表的 :
2 \; P( q$ J% O( S1 H; k汗~~不懂的还真有好多
) n# J3 e3 a' B# y9 T5 z* h是不是说把lpstring通过hash改成个12位的字符传然后到sub.ini里找相应的中文? : \' Y/ V9 E: x) h# k: S2 |
然后用原来的exttextout输出吗?
4 V% w4 N) E0 i% F
! }+ L: m0 i: H1 z, v; ]6 N: ~hook createfont就是不管怎么样都载入中文字体? 5 @* C) t% \; ^1 ?( x. Z
.......

5 S& P: n/ x# X1 i* n
+ d7 U, }* i( N: [你的理解都对。6 }' U; w! z- ~& P2 g. ~, O1 ^
hook 的方法就是按下面的方法作个gdi32.dll,要修改的就是上面提到的2个函数。& S9 i2 `& O1 b& R! A
完成后请放出源码。
6 y3 F  |. L- {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发表的 :
4 E! R2 _6 J1 c. L9 i# F. @一定要12位的吗?好像看到有32位,16位,12位的没找到啊 [s:102]

- N* R+ h0 L' ?9 D
1 q- F( v8 e+ y1 [6 V4 ]+ J不一定12位的,16位,32位均可。
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2010-4-14 07:58 | 只看该作者
关键是速度和唯一性。8 _4 v4 i: }& N8 b& X# ?% d- U
1 a7 m! W" p% p7 Q$ a  e: ^+ N
我建议这样,
* H# J/ R/ f# b取13位,第1位为字符串长度,后6位为字符串前6个字节的ascii码," y5 u: x" E$ D- H4 l$ q3 H( d
最后6位为字符串最后6个字节的ascii码,不足部分左侧或右侧补0X00.
' V7 r- f; F( a这样可能比较快,也能保持唯一性。
回复 支持 反对

使用道具 举报

7#
发表于 2010-4-14 08:11 | 只看该作者
我现在先抄了个MD5的用用,对HASH还不是很明白; U3 F' w4 Y6 X3 q2 d7 X  g
不过照这个方法的话,那自符串长度一样,中间那段字不一样的话会出错的吧.
回复 支持 反对

使用道具 举报

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

使用道具 举报

9#
 楼主| 发表于 2010-4-14 11:11 | 只看该作者
引用第6楼scgame于2010-04-14 08:11发表的 :
7 L! Q" E5 _4 ?. r8 Z* p, R我现在先抄了个MD5的用用,对HASH还不是很明白
& I6 n4 t; R- S* d不过照这个方法的话,那自符串长度一样,中间那段字不一样的话会出错的吧. # ^9 O. B; g' B, n: z& ~0 [
! L; ?( _$ U% I. g+ h

1 _' H$ B: c, N$ I+ I4 M能按md5来做是最好的,就是担心速度。
# S# s5 a: q9 M* u我的方法的确是有出错的可能性,但是加大取的字节数的话应该可以避免。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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