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

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

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

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

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

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

scgame ! Y% z8 }+ R9 b: \( P

' j. @! \+ K( k4 i% v你好,exttextout函数替换工具的功能部分的设计我写好了。
8 O. d; b! y/ g  k+ H% H0 i请编写后放入gdi32.dll的proxy dll里,谢谢! 5 X) R/ V* O9 U. l6 `
这个工具制作完以后可以通用于所有Exttextout输出字幕的游戏 ,非常有用。  u, z' e; j7 K* G  d
; H- W* p+ {2 r4 Q$ B/ d2 d. P$ {
hook Exttextout 为myExttextout,对传入的字符串作如下变化。
1 e+ f1 c2 I' Y: W1 E先把hash变换为1个12位的字符串,比如eb013c782344,然后到sub.ini文件寻找key * D% P, ~6 d4 X% t% P5 C, ?
eb013c782344_cn,如有取出key值作为译文,如无,则在eb013c782344_en中写入原文,
& J+ f& o( B, }在eb013c782344_cn写入一个空字符串,以备翻译。 $ m5 {+ _/ T$ x/ ~
* i, p; y6 L" g" T
对了,为了不导致乱码,还要hook creatfont系列函数。
$ u: H9 d. e8 K* ~* p/ p. _把charset和字体修改一下,就可以出中文了。" D2 ]& |) _, b4 k$ ]1 h; G
可以先用那个俄文游戏试试看。
+ I: N& x% R- q. e$ M% W& J1 f# v& ~$ h% k. ]  K
有问题的话,请提问。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

9#
 楼主| 发表于 2010-4-14 11:11 | 只看该作者
引用第6楼scgame于2010-04-14 08:11发表的 : , J! m: a: `$ D; `8 @4 M+ \
我现在先抄了个MD5的用用,对HASH还不是很明白
  w/ s( \8 s* k不过照这个方法的话,那自符串长度一样,中间那段字不一样的话会出错的吧. + ]% p: P9 {0 e* q' }/ n# X! D

6 R; s* `- _" g7 ~! z
3 `$ A' H% y6 R7 M( m* D能按md5来做是最好的,就是担心速度。, A  e& O, l! F6 y1 i% s) n" S5 e
我的方法的确是有出错的可能性,但是加大取的字节数的话应该可以避免。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

6#
 楼主| 发表于 2010-4-14 07:58 | 只看该作者
关键是速度和唯一性。
* p! Z! i+ H0 f: d9 z& `6 g7 R% }+ Q
我建议这样,
7 h) d. i" a" k: r! P取13位,第1位为字符串长度,后6位为字符串前6个字节的ascii码,7 w4 |, V" l" Q: r5 U3 x
最后6位为字符串最后6个字节的ascii码,不足部分左侧或右侧补0X00." `* _' h" \0 v: j
这样可能比较快,也能保持唯一性。
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2010-4-14 06:01 | 只看该作者
引用第3楼scgame于2010-04-13 23:54发表的 :
+ |% H8 @, e- h2 o. Q一定要12位的吗?好像看到有32位,16位,12位的没找到啊 [s:102]

  r; p% t9 h% Z. m  f4 f5 T% L2 t% t
- _  z1 P  t4 Q& g( L* b/ Y不一定12位的,16位,32位均可。
回复 支持 反对

使用道具 举报

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

使用道具 举报

板凳
 楼主| 发表于 2010-4-13 11:12 | 只看该作者
引用第1楼scgame于2010-04-13 10:09发表的 :
- W: h$ P& x- W; c4 |8 A! t5 q/ i) s汗~~不懂的还真有好多 " ?( {% ]( f; ^
是不是说把lpstring通过hash改成个12位的字符传然后到sub.ini里找相应的中文? " [/ E+ I. F+ }2 Y8 ]" R2 o
然后用原来的exttextout输出吗?
8 S2 @/ s9 R- z, _' Z5 t7 O+ A+ [+ ]: w* r( V' q' F" N7 m% o
hook createfont就是不管怎么样都载入中文字体? ! t' S8 q3 _  n3 e
.......

2 A, i8 E2 S' d6 H/ C5 v! ~- U/ C1 E( M6 G
你的理解都对。! M, I% w7 Y: R1 F# V$ ?
hook 的方法就是按下面的方法作个gdi32.dll,要修改的就是上面提到的2个函数。( K4 A. L; |0 o' ~7 O5 b
完成后请放出源码。; I. s* Z! E. e
https://www.chinaavg.com/read.php?tid=21849
回复 支持 反对

使用道具 举报

沙发
发表于 2010-4-13 10:09 | 只看该作者
汗~~不懂的还真有好多  U* A/ H9 Y8 J9 C+ E4 g1 g' |" O
是不是说把lpstring通过hash改成个12位的字符传然后到sub.ini里找相应的中文?8 @8 q9 n1 _3 U* `7 ?' E
然后用原来的exttextout输出吗?9 K. V9 t/ E+ m; o$ z' [

3 ~8 f  [+ N" yhook createfont就是不管怎么样都载入中文字体?8 J1 |+ s( O0 L2 t

4 v. \% W  Q; k. y不好意思哈,我对windows API不太了解,怎么hook还不是很了解呢,有什么简单的方法测试一下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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