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

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

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

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

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

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

scgame
6 T- @$ [6 g6 p. C
  H( ?( c8 q/ {8 E: w你好,exttextout函数替换工具的功能部分的设计我写好了。 2 ^- P  N3 b4 T+ r% ]
请编写后放入gdi32.dll的proxy dll里,谢谢!
" T5 A) l# k$ K& a4 p这个工具制作完以后可以通用于所有Exttextout输出字幕的游戏 ,非常有用。
7 Q% B$ B5 u9 R, \' A  u( N$ X/ g
+ @! d$ S5 U* n( J; Phook Exttextout 为myExttextout,对传入的字符串作如下变化。
; b8 I) T- `3 G4 ^2 O6 l先把hash变换为1个12位的字符串,比如eb013c782344,然后到sub.ini文件寻找key ! C4 z9 ]8 h, x
eb013c782344_cn,如有取出key值作为译文,如无,则在eb013c782344_en中写入原文,
- L! \2 c" V. H( s# p' q5 L  h6 }在eb013c782344_cn写入一个空字符串,以备翻译。
/ f- E. E- z. t/ o4 j( I
  H/ r) j8 A& ^6 S1 N对了,为了不导致乱码,还要hook creatfont系列函数。
$ C6 E. K- r: i把charset和字体修改一下,就可以出中文了。
/ x3 J7 O5 m, L6 @可以先用那个俄文游戏试试看。0 U8 U3 p- h4 y3 I+ [0 A+ o9 J
" q" Y: D4 ^" X- i6 `; O4 j
有问题的话,请提问。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-4-13 10:09 | 只看该作者
汗~~不懂的还真有好多
* H0 u/ o* @3 r是不是说把lpstring通过hash改成个12位的字符传然后到sub.ini里找相应的中文?! [% q& [% D* ]% \% U
然后用原来的exttextout输出吗?# r# H0 o- p9 r4 [6 }* Y
, Z- C2 B2 }% y. Q
hook createfont就是不管怎么样都载入中文字体?  f8 F% q8 U4 R* g$ d
# Z3 {! P+ Q) D! ]
不好意思哈,我对windows API不太了解,怎么hook还不是很了解呢,有什么简单的方法测试一下吗?
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2010-4-13 11:12 | 只看该作者
引用第1楼scgame于2010-04-13 10:09发表的 : + z" n% @5 `* q: @
汗~~不懂的还真有好多
' ~( I: _) O2 ?  F3 `. }$ h是不是说把lpstring通过hash改成个12位的字符传然后到sub.ini里找相应的中文?
. D6 [& U! I' A9 c, x3 ]* h  c然后用原来的exttextout输出吗? 5 f, g& H* ?- x; a

8 b. c; J* R1 z6 ?6 Dhook createfont就是不管怎么样都载入中文字体? ( O7 `0 D$ s  e5 n0 ~- F+ }: n3 j
.......
9 ^0 C, n0 J3 a+ }7 r( @

( M5 \- g- O( O+ x9 E你的理解都对。- h) [+ U0 _6 h" i
hook 的方法就是按下面的方法作个gdi32.dll,要修改的就是上面提到的2个函数。
2 G/ J9 R* D" s# B( B& F+ w: b完成后请放出源码。: {% O5 C4 W, D, w1 Z1 K) ^& a
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发表的 :
7 T6 x4 Z( {2 s1 o0 V一定要12位的吗?好像看到有32位,16位,12位的没找到啊 [s:102]

) i0 r* Y8 e1 }* g& m" [8 Q  H% D8 ^1 U  t  z
不一定12位的,16位,32位均可。
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2010-4-14 07:58 | 只看该作者
关键是速度和唯一性。+ ^3 e+ X1 l1 ~2 J/ F

* l4 d  c4 }' o' D: Z! l+ R4 z& e我建议这样,
7 Y& r8 L* f& U1 ?+ M, i取13位,第1位为字符串长度,后6位为字符串前6个字节的ascii码,7 F9 O! G" h* q1 i. d, T3 _1 C* r
最后6位为字符串最后6个字节的ascii码,不足部分左侧或右侧补0X00.
& h- ]$ J9 z" H" g/ D1 \这样可能比较快,也能保持唯一性。
回复 支持 反对

使用道具 举报

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

使用道具 举报

8#
发表于 2010-4-14 08:17 | 只看该作者
哦,对了,我现在为了方便,并没有给hash加上_cn和_en
% f. \3 A/ u. s( ^% x+ B: B0 e只是把英文原文写到了一个新的文件里,而在sub.ini相应的字符串前添加了个*以方便查找
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 2010-4-14 11:11 | 只看该作者
引用第6楼scgame于2010-04-14 08:11发表的 :
2 e* a7 ?$ s4 m5 u4 J6 O6 s我现在先抄了个MD5的用用,对HASH还不是很明白
! w; O  k# z! [: ~4 c. P4 ~8 ?$ _不过照这个方法的话,那自符串长度一样,中间那段字不一样的话会出错的吧.
* q$ f' `7 d" u9 I1 o& [  P6 J% ^

$ p+ u# \/ z( b9 q: t' Q2 t( ]4 a$ P% d( H- s6 l' r4 O2 d
能按md5来做是最好的,就是担心速度。8 v0 p/ `  w5 x! `  t; N
我的方法的确是有出错的可能性,但是加大取的字节数的话应该可以避免。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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