冒险解谜游戏中文网 ChinaAVG
标题:
英雄无敌四读字库函数分析
[打印本页]
作者:
jinxin8866
时间:
2010-3-16 20:33
标题:
英雄无敌四读字库函数分析
参数表
5 D& [5 i0 _6 b$ T( b- |
arg1:[arg1+10]+[arg1+C]*arg3+arg2*2存放缓冲区(应该就是屏幕显示区在内存的映像)基地址
+ k" z! p0 N# }7 P4 M/ }9 x
arg2:字符串宽度 x
d: q4 Q! G* d- H+ d3 L
arg3:y
# q( d: H' O; A P
arg4:颜色
: B$ S" |8 s+ q+ D& E
arg5:与颜色深度有关
/ D% \. w) S1 ?* x. n
arg6:与颜色深度有关
' ?. A/ S, L( Q! S* j! W) N6 A5 `& z! k
ecx:字符的编码基地址
) o# l2 O* ^4 l
+ S3 @7 p1 ` ~8 o' A; |
0071B820 /$ 83EC 54 sub esp,54
, M8 P, {7 J6 {2 ]9 ?9 N$ [7 L+ o" w
0071B823 |. 53 push ebx
" ^$ i1 l7 t. o1 Q
0071B824 |. 8B5C24 5C mov ebx,dword ptr ss:[esp+5C]
% a3 | Z; E9 q# e+ }
0071B828 |. 55 push ebp
( f" }2 ]0 Q F3 R5 _! d: n0 K
0071B829 |. 56 push esi
# p, ?; x5 I1 O1 A
0071B82A |. 8B43 08 mov eax,dword ptr ds:[ebx+8]
y4 C1 s" i, f$ C* ]5 s+ d l6 H
0071B82D |. 8BF1 mov esi,ecx
- n% L) Z. g6 k* ]; T0 [! [
0071B82F |. 8B4B 04 mov ecx,dword ptr ds:[ebx+4]
5 P% Z% r4 S5 @$ a8 q4 D: R A
0071B832 |. 57 push edi
* v7 |6 P& Q4 A! k0 |
0071B833 |. 50 push eax
* M* ]' i( O1 D. V- k" q
0071B834 |. 51 push ecx
2 D; b( A8 M- w
0071B835 |. 6A 00 push 0
, ]9 H* i* N- {/ O& P' B2 J
0071B837 |. 6A 00 push 0
( }/ {3 y1 A" D0 N9 f
0071B839 |. 8D4C24 54 lea ecx,dword ptr ss:[esp+54]
1 ~" q: v* k1 ~/ @) K: h3 g
0071B83D |. 897424 20 mov dword ptr ss:[esp+20],esi
# l( ~$ d% L- q: H0 h' E
0071B841 |. E8 6ABCCEFF call heroes4.004074B0
) V8 I. G+ }( n7 f) k
0071B846 |. 8B56 08 mov edx,dword ptr ds:[esi+8]
C, E( `/ l6 g) E8 H1 s
0071B849 |. 8B46 04 mov eax,dword ptr ds:[esi+4]
" p/ C8 g9 s! U/ _* b
0071B84C |. 52 push edx
! A; y9 C) r; P; A. s% J
0071B84D |. 50 push eax
- @6 Y7 L+ u! I; Q- W2 T
0071B84E |. 6A 00 push 0
& |1 {2 F. c/ G# P& G) Q* h2 `
0071B850 |. 6A 00 push 0
; Q, t# X# X' f2 l" k0 U
0071B852 |. 8D4C24 44 lea ecx,dword ptr ss:[esp+44]
$ p! O1 W ^+ W" L9 r
0071B856 |. E8 55BCCEFF call heroes4.004074B0
9 H+ d6 F+ S6 n1 r
0071B85B |. 8B4C24 34 mov ecx,dword ptr ss:[esp+34]
) [6 j; T `2 \7 \4 W
0071B85F |. 8B5424 38 mov edx,dword ptr ss:[esp+38]
8 u5 ]( u6 V$ I, b; x( n
0071B863 |. 8B4424 3C mov eax,dword ptr ss:[esp+3C]
, k, Z) Y4 }* M2 [) Q3 T! N6 ?; R
0071B867 |. 894C24 24 mov dword ptr ss:[esp+24],ecx
, a5 p8 X3 ~# |1 Q
0071B86B |. 8B4C24 40 mov ecx,dword ptr ss:[esp+40]
1 d3 O! [1 j8 f
0071B86F |. 895424 28 mov dword ptr ss:[esp+28],edx
3 S. `2 ~4 ^6 V m7 b! e
0071B873 |. 8D5424 6C lea edx,dword ptr ss:[esp+6C]
0 w% w4 F( }% x
0071B877 |. 894C24 30 mov dword ptr ss:[esp+30],ecx
. q9 {- ^. Y5 I' m- q
0071B87B |. 52 push edx
' E, y1 Q" i) f/ P8 i
0071B87C |. 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
) M f4 a5 X. i: G
0071B880 |. 894424 30 mov dword ptr ss:[esp+30],eax
; \2 P, \& U1 B+ Y2 a+ ?/ S
0071B884 |. E8 47BCCEFF call heroes4.004074D0
! d$ T; X _) r
0071B889 |. 8B4424 30 mov eax,dword ptr ss:[esp+30]
1 J9 F+ G% U6 C4 H% |
0071B88D |. 8B4C24 50 mov ecx,dword ptr ss:[esp+50]
; T) H) Z3 i, q' b
0071B891 |. 3BC1 cmp eax,ecx
# b+ _5 {: e4 s# Q! x
0071B893 |. 8BF8 mov edi,eax
, g3 U% Q( x/ b4 r0 I
0071B895 |. 7C 02 jl short heroes4.0071B899
! Y x+ ?3 h/ w3 u: A
0071B897 |. 8BF9 mov edi,ecx
! l0 Q5 ]' W( T4 M( D
0071B899 |> 8B4424 2C mov eax,dword ptr ss:[esp+2C]
5 t' j$ J, v7 b8 [; N# t3 p
0071B89D |. 8B5424 4C mov edx,dword ptr ss:[esp+4C]
/ P0 I" O u( _ G
0071B8A1 |. 3BC2 cmp eax,edx
$ S2 j2 u$ v1 }( O( I6 _
0071B8A3 |. 7D 02 jge short heroes4.0071B8A7
2 B5 a* f$ b# Q1 \
0071B8A5 |. 8BD0 mov edx,eax
/ v0 T; X" ]; Z( j) r
0071B8A7 |> 8B4424 28 mov eax,dword ptr ss:[esp+28]
, X) G" K/ q2 @% _0 T, s, P/ E
0071B8AB |. 8B4C24 48 mov ecx,dword ptr ss:[esp+48]
% R+ }1 a- ]( U/ T t
0071B8AF |. 3BC1 cmp eax,ecx
4 C3 Z# o* }% M& ]& c
0071B8B1 |. 7E 02 jle short heroes4.0071B8B5
' g, E) P( ~( k D; H& g
0071B8B3 |. 8BC8 mov ecx,eax
3 X/ m% V. q2 C0 b
0071B8B5 |> 8B4424 24 mov eax,dword ptr ss:[esp+24]
3 c7 D1 i2 j. W M' U }0 R
0071B8B9 |. 8B7424 44 mov esi,dword ptr ss:[esp+44]
; ~) A9 D' n$ j% m8 p2 P3 ?. J
0071B8BD |. 3BC6 cmp eax,esi
, o- c$ F X8 V6 l
0071B8BF |. 7F 02 jg short heroes4.0071B8C3
! _% [. p# W6 q3 j: Q3 w
0071B8C1 |. 8BC6 mov eax,esi
$ _1 k9 m9 b" E p4 J/ J
0071B8C3 |> 57 push edi
/ ]2 D8 \. R( v! v2 r- N! f. x
0071B8C4 |. 52 push edx
- h& ]( V& I T
0071B8C5 |. 51 push ecx
# R4 m/ w- J1 d$ d
0071B8C6 |. 50 push eax
: u4 E* U$ z$ ^8 c/ u( u
0071B8C7 |. 8D4C24 64 lea ecx,dword ptr ss:[esp+64]
' y% W, X$ S6 ?8 O
0071B8CB |. E8 E0BBCEFF call heroes4.004074B0
' l c& r. Z1 l) y8 m
0071B8D0 |. 8B4424 60 mov eax,dword ptr ss:[esp+60]
. @/ |, N* N: ~9 ?
0071B8D4 |. 8B7424 58 mov esi,dword ptr ss:[esp+58]
* V; C# {6 }' h
0071B8D8 |. 2BC6 sub eax,esi
- S: k7 Z6 G9 J
0071B8DA |. 85C0 test eax,eax
# g3 J* v6 z! y8 K: Q
0071B8DC |. 894424 18 mov dword ptr ss:[esp+18],eax
+ |/ n8 u3 ^8 b# d7 ~0 ?
0071B8E0 |. 0F8E B0010000 jle heroes4.0071BA96
5 G2 \+ }! W, M0 E: f, @
0071B8E6 |. 8B6C24 5C mov ebp,dword ptr ss:[esp+5C]
! \* K4 r# r% h( d- Z
0071B8EA |. 8B4C24 54 mov ecx,dword ptr ss:[esp+54] ; 数值上等于arg2
7 S8 y5 V2 \3 t! M, Q
0071B8EE |. 2BE9 sub ebp,ecx
d! g$ \; E" q" Y
0071B8F0 |. 85ED test ebp,ebp
; u/ p8 L- y( |- `! b5 p1 j
0071B8F2 |. 896C24 1C mov dword ptr ss:[esp+1C],ebp
- v* B8 H" ?5 ?* J- E& W5 ~
0071B8F6 |. 0F8E 9A010000 jle heroes4.0071BA96
& `, N( M, c# E3 G, s+ N/ [
0071B8FC |. 8B4424 6C mov eax,dword ptr ss:[esp+6C] ; arg2
/ u( b- X5 O4 p: w8 e& e% l, j
0071B900 |. 8BF9 mov edi,ecx
( A* ] k! f- I& K2 ]9 n# W4 r S
0071B902 |. 2BF8 sub edi,eax
- |' w s3 r& _: R* a
0071B904 |. 8B4424 70 mov eax,dword ptr ss:[esp+70] ; arg3
3 o, y0 O' V9 e* Z! ]% D
0071B908 |. 8BD6 mov edx,esi
, X- W Z- @: n3 E$ @
0071B90A |. 894C24 24 mov dword ptr ss:[esp+24],ecx
' g; I, e/ A; s0 _: B* d+ S
0071B90E |. 2BD0 sub edx,eax
9 r- f/ h% i% `& z$ ^
0071B910 |. 8B43 0C mov eax,dword ptr ds:[ebx+C]
1 `3 {6 j( E% `; Q6 a! a7 ^
0071B913 |. 8BD8 mov ebx,eax
, M6 ~2 u& v$ M9 p6 R9 B
0071B915 |. 0FAFDE imul ebx,esi
4 h8 J* d2 K9 X6 P+ A
0071B918 |. 8D344B lea esi,dword ptr ds:[ebx+ecx*2]
& z! |$ L. n0 q' p4 `
0071B91B |. 8B4C24 68 mov ecx,dword ptr ss:[esp+68]
( S9 J/ l; s- L9 j; x( J
0071B91F |. 8B59 10 mov ebx,dword ptr ds:[ecx+10]
& z: p. i# M9 U5 g5 a) `; t
0071B922 |. 8B4C24 10 mov ecx,dword ptr ss:[esp+10]
4 I/ J+ k: g" w0 y% L( X3 o
0071B926 |. 03F3 add esi,ebx
8 h) i- W: g8 |$ a0 F0 |! J. v
0071B928 |. 8B49 0C mov ecx,dword ptr ds:[ecx+C]
/ g$ k# M: T; o! J# C3 o
0071B92B |. 897424 68 mov dword ptr ss:[esp+68],esi; 重点:将缓冲区地址写入栈内(原arg1处)
& S9 u0 Y/ }- Q% V/ E, K) v( c
0071B92F |. 8BD9 mov ebx,ecx
4 ]# \1 \# W% Z0 U7 @0 a6 i
0071B931 |. 2BCD sub ecx,ebp
( U/ b b0 v5 a' ~+ H9 h5 w
0071B933 |. 0FAFDA imul ebx,edx
( T* u W+ n B% X2 D3 a
0071B936 |. 8B5424 10 mov edx,dword ptr ss:[esp+10]
7 E% F/ @1 x6 r" H5 I2 Q7 a
0071B93A |. 894C24 20 mov dword ptr ss:[esp+20],ecx
, l* t* t2 v! M4 j; q) Y/ @
0071B93E |. 8D4C2D 00 lea ecx,dword ptr ss:[ebp+ebp]
. R, u+ A5 y6 P
0071B942 |. 035A 10 add ebx,dword ptr ds:[edx+10]
$ ^: Z: l" [% S: Z6 z
0071B945 |. 8B5424 18 mov edx,dword ptr ss:[esp+18]
w) B5 `! K! G6 g
0071B949 |. 2BC1 sub eax,ecx
+ }+ \- [2 e$ S8 f. t# S0 Z8 O
0071B94B |. 894424 24 mov dword ptr ss:[esp+24],eax
: ], n# [" x/ {/ L# J
0071B94F |. 03DF add ebx,edi
0 ?" E+ K9 H$ Z8 O1 s+ i% W9 `
0071B951 |. 8BC2 mov eax,edx
* S7 R3 m! `& O. y
0071B953 |. 4A dec edx
1 [( [7 W7 D) N9 B
0071B954 |. 85C0 test eax,eax
D0 l" G3 a7 q
0071B956 |. 0F84 3A010000 je heroes4.0071BA96
" C4 [6 O# i7 U2 P/ v/ c
0071B95C |. 42 inc edx
+ z% e& |; s* ]" p# d @
0071B95D |. 895424 18 mov dword ptr ss:[esp+18],edx
+ g9 R+ g: X4 a8 j/ Z [
0071B961 |> 85ED /test ebp,ebp
0 x! z0 `# m1 n: B; ?
0071B963 |. 0F84 0E010000 |je heroes4.0071BA77
* ?# O3 f4 A- c/ q
0071B969 |. 8B4424 74 |mov eax,dword ptr ss:[esp+74]
$ O8 I4 \. J# H/ J! T. x) ]2 n
0071B96D |. 896C24 14 |mov dword ptr ss:[esp+14],ebp
: Z+ H. c9 Z( P3 F1 h
0071B971 |. 25 FFFF0000 |and eax,0FFFF
. Q/ `' C c+ {( p B
0071B976 |. 894424 10 |mov dword ptr ss:[esp+10],eax
/ ~, z$ B8 j/ x. [% z' R6 ^
0071B97A |> 8A4424 78 |/mov al,byte ptr ss:[esp+78]
' f$ O) c- j+ p+ M- q
0071B97E |. 8B2D DCF0AA00 ||mov ebp,dword ptr ds:[AAF0DC]
* t6 n; O4 { E. @
0071B984 |. 84C0 ||test al,al
! a' M/ r) ] l& s
0071B986 |. 74 6A ||je short heroes4.0071B9F2
3 i, x7 w9 W8 \% @" k& J0 w% i
0071B988 |. 8A0B ||mov cl,byte ptr ds:[ebx] ; 取字模的像素点
! D. k' a& g ]9 n' E
0071B98A |. 8B4424 7C ||mov eax,dword ptr ss:[esp+7C]
1 r& ?# H" b+ y" g
0071B98E |. 83E1 0F ||and ecx,0F ; 取低四位
( B4 c: D1 M: s
0071B991 |. 25 FFFF0000 ||and eax,0FFFF
8 B, r- G9 }/ Z2 i
0071B996 |. 8BF9 ||mov edi,ecx
- ~9 p r$ ?+ E. g, x; f
0071B998 |. 33C9 ||xor ecx,ecx
. D8 _9 W8 h. s" h0 a
0071B99A |. 66:8B0E ||mov cx,word ptr ds:[esi] ; 取缓冲区的原值
; R9 s. }. O) ^- _$ Q4 s' a
0071B99D |. 85FF ||test edi,edi ; 检查字模的像素点低四位是否为0
( }, r6 j( G# W: Y
0071B99F |. 74 54 ||je short heroes4.0071B9F5 ; 为0则不作处理
+ o; ^6 @9 h! A2 D- u- ?* G
0071B9A1 |. 8BD7 ||mov edx,edi
" Y2 Z" R3 k9 B# E6 Z
0071B9A3 |. 8BF1 ||mov esi,ecx
- e. ?; S0 F9 A& A
0071B9A5 |. C1FA 03 ||sar edx,3
/ ?% K9 G2 M K9 z6 V
0071B9A8 |. 83E2 01 ||and edx,1
2 s8 B. A+ W% I% S
0071B9AB |. 03FA ||add edi,edx
. V6 l3 v- i1 y* x
0071B9AD |. 8BD1 ||mov edx,ecx
4 \9 h# _; o$ [8 b! [ }# z( J0 b
0071B9AF |. 8B0D 04F1AA00 ||mov ecx,dword ptr ds:[AAF104]
. a. |* L; H( n: x3 `( r( y
0071B9B5 |. 23D5 ||and edx,ebp
4 s, l& v" g/ r
0071B9B7 |. 23F1 ||and esi,ecx
5 D% \! ^& b4 R5 |
0071B9B9 |. 8BC8 ||mov ecx,eax
F1 q9 ?" `1 H9 Z4 s' N2 s* ^
0071B9BB |. 230D 04F1AA00 ||and ecx,dword ptr ds:[AAF104]
/ b: A' r8 A* [" \' t
0071B9C1 |. 23C5 ||and eax,ebp
5 {- T" {4 \9 M h. e& |* V
0071B9C3 |. 2BC2 ||sub eax,edx
4 D/ v# C4 r8 O% P; P2 K
0071B9C5 |. 2BCE ||sub ecx,esi
0 Q* O C' j' h3 r6 ~
0071B9C7 |. 0FAFC7 ||imul eax,edi
) X1 ~. i }9 {! }3 H! M
0071B9CA |. 0FAFCF ||imul ecx,edi
/ B* T8 k$ `; c) U$ f, C" B7 B
0071B9CD |. C1E6 04 ||shl esi,4
1 [; o" }5 C+ F1 ]
0071B9D0 |. 03CE ||add ecx,esi
% a; ?, \' T W( u" _5 k
0071B9D2 |. 8B35 F4F0AA00 ||mov esi,dword ptr ds:[AAF0F4]
) a: j4 i" S- [
0071B9D8 |. C1E2 04 ||shl edx,4
# ?! q& S5 o1 c
0071B9DB |. 23CE ||and ecx,esi
0 } n- d) N: I& {6 P O8 n
0071B9DD |. 8B35 D8F0AA00 ||mov esi,dword ptr ds:[AAF0D8]
" H9 I4 ~' c- G0 ?9 Y
0071B9E3 |. 03C2 ||add eax,edx
# H, \! V, \; N- ~6 A
0071B9E5 |. 23C6 ||and eax,esi
0 R" ]0 w$ E2 G) j
0071B9E7 |. 8B7424 68 ||mov esi,dword ptr ss:[esp+68]
8 r4 }4 b4 R( |, Q
0071B9EB |. 03C8 ||add ecx,eax
% v$ w5 f1 y- W6 S
0071B9ED |. C1F9 04 ||sar ecx,4
7 C$ k1 ?0 q5 o# W, C; v/ O
0071B9F0 |. EB 03 ||jmp short heroes4.0071B9F5
1 i7 R# O/ {* _ ~
0071B9F2 |> 66:8B0E ||mov cx,word ptr ds:[esi]
5 P! e* N) m: s3 I+ o9 A8 W
0071B9F5 |> 33D2 ||xor edx,edx
2 e2 u3 p, a. w. y I0 W
0071B9F7 |. 81E1 FFFF0000 ||and ecx,0FFFF
, d8 h( q3 \, I- s
0071B9FD |. 8A13 ||mov dl,byte ptr ds:[ebx]
/ B L( |/ K+ k% d! L3 i) T
0071B9FF |. 8BC1 ||mov eax,ecx
1 @( U) Z" o) `! M3 D- U
0071BA01 |. C1EA 04 ||shr edx,4 ; 取高四位
9 N( a) A9 [' j, O3 N! V
0071BA04 |. 85D2 ||test edx,edx ; 检查字模的像素点高四位是否为0
: m0 {7 x7 k/ a. W& q4 H3 X- z
0071BA06 |. 74 51 ||je short heroes4.0071BA59 ; 为0则不作处理
7 \5 ?' u9 K3 y- _2 F+ {
0071BA08 |. 8BCA ||mov ecx,edx
" X* Z3 E/ i; J$ B* u
0071BA0A |. 8BF0 ||mov esi,eax
. c9 E2 G- h" R* r! s5 i
0071BA0C |. C1F9 03 ||sar ecx,3
7 F5 i$ R$ i) Q- K2 t
0071BA0F |. 83E1 01 ||and ecx,1
+ o7 l, Q7 H! j+ t& K
0071BA12 |. 23F5 ||and esi,ebp
% ~; Z1 Y) ~; t6 Z z
0071BA14 |. 03D1 ||add edx,ecx
% G7 ~3 p3 n1 `* S) t
0071BA16 |. 8BC8 ||mov ecx,eax
4 [! D2 Z% m) V1 V* f% \
0071BA18 |. 8B4424 10 ||mov eax,dword ptr ss:[esp+10]
$ D& r1 n- r! I0 J8 ]
0071BA1C |. 8B3D 04F1AA00 ||mov edi,dword ptr ds:[AAF104]
2 I' r& ]- V O" y
0071BA22 |. 23C5 ||and eax,ebp
' ^& W2 u V, l2 y
0071BA24 |. 23CF ||and ecx,edi
$ F0 E; k4 V. }
0071BA26 |. 2BC6 ||sub eax,esi
# X3 V0 V3 {! U( o* W
0071BA28 |. 0FAFC2 ||imul eax,edx
/ j' Y+ R; N& P
0071BA2B |. C1E6 04 ||shl esi,4
2 u* g; F) C, G- S
0071BA2E |. 03C6 ||add eax,esi
; O* h! p# O( A/ L0 d# m( I" ~
0071BA30 |. 8B35 D8F0AA00 ||mov esi,dword ptr ds:[AAF0D8]
3 B' {" c6 v. K& M3 K
0071BA36 |. 23C6 ||and eax,esi
5 K+ a( B/ Q8 N' _
0071BA38 |. 8B7424 10 ||mov esi,dword ptr ss:[esp+10]
- O: o1 Z& e; y- v
0071BA3C |. 23F7 ||and esi,edi
% Z, F/ B" o* j" j, K0 G* o
0071BA3E |. 8B3D F4F0AA00 ||mov edi,dword ptr ds:[AAF0F4]
. w! }) {6 I, [3 ~
0071BA44 |. 2BF1 ||sub esi,ecx
# p5 T# x8 ]0 n& _; T
0071BA46 |. 0FAFF2 ||imul esi,edx
0 G: y& u; B4 s/ _
0071BA49 |. C1E1 04 ||shl ecx,4
8 c6 Y+ B$ a5 C5 Z4 O Y
0071BA4C |. 03F1 ||add esi,ecx
7 p- f6 S5 a9 J0 n
0071BA4E |. 23F7 ||and esi,edi
. f" J) J U T! V& V+ V
0071BA50 |. 03C6 ||add eax,esi
3 U1 E4 U% g; M. M3 ]9 A. a
0071BA52 |. 8B7424 68 ||mov esi,dword ptr ss:[esp+68]
% S% e6 J5 O* K' U" w+ ]" @: O
0071BA56 |. C1F8 04 ||sar eax,4
$ B c/ t% b, T/ c2 A7 o/ V) y. q
0071BA59 |> 66:8906 ||mov word ptr ds:[esi],ax ; 将经过处理后的缓冲区值放回原处
& I0 Z, f9 K/ U" I
0071BA5C |. 8B4424 14 ||mov eax,dword ptr ss:[esp+14]
# b/ }2 Z# Q, R. |" y
0071BA60 |. 43 ||inc ebx ; 指向字模的下个像素点
" R$ T$ {- Y5 B# j; F
0071BA61 |. 83C6 02 ||add esi,2 ; 指向缓冲区的下个点
# W$ ?9 Q/ t" f
0071BA64 |. 48 ||dec eax ; 计数值减1
, ~9 m9 S1 w) b" r, |5 s
0071BA65 |. 897424 68 ||mov dword ptr ss:[esp+68],esi
3 `* M) N# K0 b2 v; `0 b2 k
0071BA69 |. 894424 14 ||mov dword ptr ss:[esp+14],eax
% b" u' t: ]% P* D0 r) N# n
0071BA6D |.^ 0F85 07FFFFFF |\jnz heroes4.0071B97A
6 u( ~8 B2 n3 [% N' g/ F
0071BA73 |. 8B6C24 1C |mov ebp,dword ptr ss:[esp+1C]
+ G& J% ~- v0 |) A, o( W
0071BA77 |> 8B5424 20 |mov edx,dword ptr ss:[esp+20]
4 x' W0 v$ D5 b$ O1 u/ T
0071BA7B |. 8B4C24 24 |mov ecx,dword ptr ss:[esp+24]
% Z- q) I& \# _
0071BA7F |. 8B4424 18 |mov eax,dword ptr ss:[esp+18]
2 `9 c8 V! ~) Z9 R; n1 W9 C
0071BA83 |. 03DA |add ebx,edx ; 指向字模的下行像素点
$ y, [" L$ F+ X) L$ r) q
0071BA85 |. 03F1 |add esi,ecx ; 指向缓冲区的下行点
5 [2 ]/ ]# Z/ C' W: F6 y
0071BA87 |. 48 |dec eax ; 计数值减1
4 {( P* R4 P7 W8 Y2 Y) f4 d5 C I. j6 Y
0071BA88 |. 897424 68 |mov dword ptr ss:[esp+68],esi
, i# d# V5 |* o8 I8 C, D+ v4 K7 U/ k
0071BA8C |. 894424 18 |mov dword ptr ss:[esp+18],eax
" ?& p4 Z1 z& S: l+ S
0071BA90 |.^ 0F85 CBFEFFFF \jnz heroes4.0071B961
W1 {: O- f6 t8 T( k3 D
0071BA96 |> 5F pop edi
3 L& A& ]0 g" s) ^3 c8 U' Q
0071BA97 |. 5E pop esi
& n- C/ W% B- _% z
0071BA98 |. 5D pop ebp
( t% y- ^+ `: Q% h7 ]
0071BA99 |. 5B pop ebx
0 ]0 s) H) H% d! f" S" ~ }! { T
0071BA9A |. 83C4 54 add esp,54
! a: _( S! h5 ^' B4 c
0071BA9D \. C2 1800 retn 18
( y) R5 e3 f1 [' I2 m
本函数的核心是两层循环,从71B9A1开始就是循环体,整个换算过程是一个比较复杂的算法,可以简单表示为:
/ C* L" S+ I9 y+ i
4 H7 u5 P9 _8 W: s) E
buf[x][y]=func(buf[x][y],zm[x/2][y/2])
8 s* ]+ n8 K: G0 o$ Y! X
3 k) x5 b5 U2 h6 _0 F
buf:缓冲区二维数组,两个字节表示一个点
* S+ Z( B r5 @. L
zm:字模二维数组,一个字节表示一个点
作者:
shane007
时间:
2010-3-16 21:37
建议楼主可以内挂一个DLL代替原来的函数。疯人院就是这么搞的.
! P; a) c9 q7 ~! A' U8 ?
. l! b7 j0 b, r1 X4 K
对了,这个游戏是直接写显存的?
, K( n% v- D. E; [( p" {8 c5 J
不是写directx的surface?
作者:
shane007
时间:
2010-3-16 21:45
对了,我想问一下楼主,你是不是对这个游戏很感兴趣?还是只是想研究汉化技术呢?
作者:
jinxin8866
时间:
2010-3-17 18:11
两方面都有!
作者:
shane007
时间:
2010-3-17 22:30
引用第3楼jinxin8866于2010-03-17 18:11发表的 :
: a) {7 U* j9 I* j6 o3 Q6 K( y- y
两方面都有!
2 n: w T; L3 Y w
论坛很需要像楼主这样的人才啊。希望楼主多多发表后需汉化资料。
( \+ s; W: y; k9 C4 k" K, H
目前论坛有几个游戏需要会汇编的人才,不知道楼主可愿意帮忙?
作者:
shane007
时间:
2010-3-17 22:31
[quote]引用第4楼shane007于2010-03-17 22:30发表的 :
. C: D0 |: H) {, U
* ~) R Y/ C1 u6 r* ]8 @3 H. @
; K. c& ~# F- i+ f: x
论坛很需要像楼主这样的人才啊。希望楼主多多发表后需汉化资料。
- s5 G8 z4 B9 G8 `( M. M8 C; g6 J
目前论坛有几个游戏需要会汇编的人才,不知道楼主可愿意帮忙?
; {9 A1 z4 E8 j& E" B; G
如果愿意的话也一定会让你有所收获的。
作者:
jinxin8866
时间:
2010-3-18 03:21
可以啊,希望能帮上忙
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2