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

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

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

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

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

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

scgame
. B! I/ N1 u2 n3 T. J" J" R' \# |9 ^7 z- ]$ k) G- ~- C0 j* t
你好,exttextout函数替换工具的功能部分的设计我写好了。 2 u  |) }* D* h0 c' L' N5 e
请编写后放入gdi32.dll的proxy dll里,谢谢!   r2 {$ v. i9 Z9 V% t7 X  Q5 U
这个工具制作完以后可以通用于所有Exttextout输出字幕的游戏 ,非常有用。6 ~5 s# C% s4 T* |) [, b
. d% H/ H: _7 a( u
hook Exttextout 为myExttextout,对传入的字符串作如下变化。 5 @6 U$ h- r: A* O
先把hash变换为1个12位的字符串,比如eb013c782344,然后到sub.ini文件寻找key
+ h% v  j9 S8 ~) l0 eeb013c782344_cn,如有取出key值作为译文,如无,则在eb013c782344_en中写入原文,
) A$ e2 x( p* O6 `- v在eb013c782344_cn写入一个空字符串,以备翻译。 6 K8 E' z$ L/ f* `6 U7 n' P5 `
/ p3 d1 i9 L5 {3 l/ C, U
对了,为了不导致乱码,还要hook creatfont系列函数。% X$ J& {( ~7 T0 u0 |; w
把charset和字体修改一下,就可以出中文了。
; Y9 C- y7 v+ m& i/ F可以先用那个俄文游戏试试看。( p) c* Z, {. s! F
; u! E9 w" e7 \" K4 _
有问题的话,请提问。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-4-13 10:09 | 只看该作者
汗~~不懂的还真有好多
4 p3 s9 b) N- U0 l- w- [  B是不是说把lpstring通过hash改成个12位的字符传然后到sub.ini里找相应的中文?/ M5 ~6 D5 p+ h2 K8 K' O; o
然后用原来的exttextout输出吗?; f: z3 I: E. Q4 w* G1 i/ G

, |! U; H7 K8 _! s+ yhook createfont就是不管怎么样都载入中文字体?: J. C1 B' G+ V5 _2 ~

# f* ^! e  N% w+ @9 e0 F& [( F1 }不好意思哈,我对windows API不太了解,怎么hook还不是很了解呢,有什么简单的方法测试一下吗?
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2010-4-13 11:12 | 只看该作者
引用第1楼scgame于2010-04-13 10:09发表的 :
$ A9 M& n4 r& D: W汗~~不懂的还真有好多
* P5 @# v/ A0 P2 y1 B是不是说把lpstring通过hash改成个12位的字符传然后到sub.ini里找相应的中文?
! o- b: |9 E5 r  x3 `* x然后用原来的exttextout输出吗?
5 y1 a* p5 A- j6 t+ a' D- x4 U0 b. o5 x& U/ j: K* d
hook createfont就是不管怎么样都载入中文字体?
* h5 m, V1 }; U0 {) s.......

' l& D9 Q9 [+ z1 {: V  I9 i1 U; @
你的理解都对。, y% r3 I* ~1 A5 f4 T
hook 的方法就是按下面的方法作个gdi32.dll,要修改的就是上面提到的2个函数。
1 q  ?: c* {0 r! ?5 t) M7 t& d完成后请放出源码。8 T. b# q- y- J' \; h
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发表的 :
5 a! _9 U; t1 f一定要12位的吗?好像看到有32位,16位,12位的没找到啊 [s:102]
! q) X2 Q6 q" e

/ i. I/ b* O& ~不一定12位的,16位,32位均可。
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2010-4-14 07:58 | 只看该作者
关键是速度和唯一性。2 I) [- a* u( C0 Y2 K9 M8 ^; G! j

, C. B8 z. {5 j3 ]. b  I我建议这样,
) W) t$ g' J* Y, i3 o2 Y* \# g取13位,第1位为字符串长度,后6位为字符串前6个字节的ascii码,# c7 X% ?8 H) d0 _1 H# Z" L# m
最后6位为字符串最后6个字节的ascii码,不足部分左侧或右侧补0X00.( g! W; R, k  j
这样可能比较快,也能保持唯一性。
回复 支持 反对

使用道具 举报

7#
发表于 2010-4-14 08:11 | 只看该作者
我现在先抄了个MD5的用用,对HASH还不是很明白
- {" Y+ c+ V. p5 H- }: r不过照这个方法的话,那自符串长度一样,中间那段字不一样的话会出错的吧.
回复 支持 反对

使用道具 举报

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

使用道具 举报

9#
 楼主| 发表于 2010-4-14 11:11 | 只看该作者
引用第6楼scgame于2010-04-14 08:11发表的 :
5 e4 c0 Q( n+ p+ Z$ e5 \我现在先抄了个MD5的用用,对HASH还不是很明白 ' q3 q; D; B( k
不过照这个方法的话,那自符串长度一样,中间那段字不一样的话会出错的吧.
& b" `% Z% b& A. W+ d

. j* F; z% L1 W
4 C  ?! c% w0 p! E能按md5来做是最好的,就是担心速度。# d) g- N6 G* f' Y7 b
我的方法的确是有出错的可能性,但是加大取的字节数的话应该可以避免。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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