冒险解谜游戏中文网 ChinaAVG
标题:
英雄无敌四读字库函数分析
[打印本页]
作者:
jinxin8866
时间:
2010-3-16 20:33
标题:
英雄无敌四读字库函数分析
参数表
% |+ C7 J0 D! g2 x% r3 F7 B
arg1:[arg1+10]+[arg1+C]*arg3+arg2*2存放缓冲区(应该就是屏幕显示区在内存的映像)基地址
! C0 G8 e7 `7 q9 i' b" u- Q
arg2:字符串宽度 x
+ J- ^& w' H3 _/ B6 j' c9 X
arg3:y
4 v( m' A+ [" \9 q) Z/ v3 R8 W
arg4:颜色
# x2 m( t4 j9 K! r7 t8 l
arg5:与颜色深度有关
% E' C2 v& x8 Z% x
arg6:与颜色深度有关
# W: J/ o: D- n- `1 ~# L
ecx:字符的编码基地址
0 g; h% [2 ]# r' L3 p
7 R# a: a, i+ i ?- s% g9 C' s
0071B820 /$ 83EC 54 sub esp,54
8 F! b2 _9 h6 _9 M5 A# x
0071B823 |. 53 push ebx
6 y0 }. J9 q$ o. Q5 x$ m' @
0071B824 |. 8B5C24 5C mov ebx,dword ptr ss:[esp+5C]
& N3 F+ c! B4 p" t* X
0071B828 |. 55 push ebp
. C7 U" [% y0 g
0071B829 |. 56 push esi
2 S) D' F' b3 a- x9 e/ m9 O
0071B82A |. 8B43 08 mov eax,dword ptr ds:[ebx+8]
& W' C* U+ n0 z0 y: X/ j% o
0071B82D |. 8BF1 mov esi,ecx
8 s$ ~! N# F6 X" g
0071B82F |. 8B4B 04 mov ecx,dword ptr ds:[ebx+4]
! N7 W6 Z6 Y- u& L+ u
0071B832 |. 57 push edi
8 N3 c$ G3 _3 {. h5 Q
0071B833 |. 50 push eax
. \! B, t* l. f H( _
0071B834 |. 51 push ecx
" E% F! H! ]4 [- N& N8 r( i
0071B835 |. 6A 00 push 0
O5 [. k1 a0 z$ Q' U0 p, R
0071B837 |. 6A 00 push 0
* M" Q; k: M$ [# f8 ?1 g
0071B839 |. 8D4C24 54 lea ecx,dword ptr ss:[esp+54]
( K1 X/ s+ g/ m Y8 b- F8 X- u
0071B83D |. 897424 20 mov dword ptr ss:[esp+20],esi
) H$ P( b* S4 P
0071B841 |. E8 6ABCCEFF call heroes4.004074B0
+ H q3 n w, [, |6 @
0071B846 |. 8B56 08 mov edx,dword ptr ds:[esi+8]
4 e4 ?& l. U# a: @* ~5 j
0071B849 |. 8B46 04 mov eax,dword ptr ds:[esi+4]
* S k$ ]5 M5 ~" H2 h
0071B84C |. 52 push edx
4 a( V; _5 A$ X; C3 U
0071B84D |. 50 push eax
+ V( E# W; @, I" R5 l/ H$ v
0071B84E |. 6A 00 push 0
8 z4 h# k: s& v+ r
0071B850 |. 6A 00 push 0
' x3 { M' R3 o$ ?4 C6 s
0071B852 |. 8D4C24 44 lea ecx,dword ptr ss:[esp+44]
! K" V5 Y: f% _7 w$ j6 {
0071B856 |. E8 55BCCEFF call heroes4.004074B0
# |/ v+ W! |. ^
0071B85B |. 8B4C24 34 mov ecx,dword ptr ss:[esp+34]
, ^8 p+ o p' X" C
0071B85F |. 8B5424 38 mov edx,dword ptr ss:[esp+38]
. a) h+ l' j+ |: c% k/ k3 _
0071B863 |. 8B4424 3C mov eax,dword ptr ss:[esp+3C]
$ b0 @0 k# M/ r( v6 D: s5 N V9 y
0071B867 |. 894C24 24 mov dword ptr ss:[esp+24],ecx
+ Z- L! k+ E2 y! S m; v
0071B86B |. 8B4C24 40 mov ecx,dword ptr ss:[esp+40]
0 W# J. o! w- Q2 b2 m
0071B86F |. 895424 28 mov dword ptr ss:[esp+28],edx
7 f+ U7 Z, `& `1 G6 E4 A* F: m
0071B873 |. 8D5424 6C lea edx,dword ptr ss:[esp+6C]
# ^9 y9 G' S' A- R8 s
0071B877 |. 894C24 30 mov dword ptr ss:[esp+30],ecx
+ R" M; e% T! \/ |7 }- b
0071B87B |. 52 push edx
: R3 O) i5 S3 _" O' k9 P
0071B87C |. 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
$ O5 a; {; S( b
0071B880 |. 894424 30 mov dword ptr ss:[esp+30],eax
0 ?1 a9 P* W* b- a
0071B884 |. E8 47BCCEFF call heroes4.004074D0
3 _6 F) ?1 M" c- y8 U+ Z! O
0071B889 |. 8B4424 30 mov eax,dword ptr ss:[esp+30]
! h, `, a5 @# |1 O6 C6 V, x
0071B88D |. 8B4C24 50 mov ecx,dword ptr ss:[esp+50]
! v! c X$ N4 S* U; t
0071B891 |. 3BC1 cmp eax,ecx
7 w0 F2 Y! O' t$ P
0071B893 |. 8BF8 mov edi,eax
! W- \, \7 [/ h; r! S
0071B895 |. 7C 02 jl short heroes4.0071B899
! {! i8 ~5 }; n
0071B897 |. 8BF9 mov edi,ecx
) B( {0 t- r: M" w& V: q; ?
0071B899 |> 8B4424 2C mov eax,dword ptr ss:[esp+2C]
$ {. _% O/ G1 T v2 G' }1 z
0071B89D |. 8B5424 4C mov edx,dword ptr ss:[esp+4C]
8 L6 O* r/ H; ~( K) V4 M/ i
0071B8A1 |. 3BC2 cmp eax,edx
$ W/ o+ @8 I9 S8 u, `$ g. {
0071B8A3 |. 7D 02 jge short heroes4.0071B8A7
* _6 {$ g* d& d# e
0071B8A5 |. 8BD0 mov edx,eax
$ X4 Q {/ e3 O1 d
0071B8A7 |> 8B4424 28 mov eax,dword ptr ss:[esp+28]
8 A4 F$ i& D7 W3 p9 _
0071B8AB |. 8B4C24 48 mov ecx,dword ptr ss:[esp+48]
3 }3 i, J- W/ a: S8 e s
0071B8AF |. 3BC1 cmp eax,ecx
h' h# N6 c7 y8 [% L8 y( _
0071B8B1 |. 7E 02 jle short heroes4.0071B8B5
$ b- Y; r# ~9 i* N
0071B8B3 |. 8BC8 mov ecx,eax
- \2 F9 N: c1 G& ^; C8 h
0071B8B5 |> 8B4424 24 mov eax,dword ptr ss:[esp+24]
5 S b) j% B9 ]1 l% W8 F
0071B8B9 |. 8B7424 44 mov esi,dword ptr ss:[esp+44]
7 Q( @/ D) f% J% b
0071B8BD |. 3BC6 cmp eax,esi
6 O3 S5 ^0 w9 O$ w7 h9 H8 z, `. K
0071B8BF |. 7F 02 jg short heroes4.0071B8C3
7 @1 e H) Z$ F# c* r, f
0071B8C1 |. 8BC6 mov eax,esi
3 D* z; ^2 C% I
0071B8C3 |> 57 push edi
8 C7 F' y6 Q/ d) }, z+ _& S6 f* q# M
0071B8C4 |. 52 push edx
$ W* S+ }+ f4 R6 Z3 O. ]5 a! Z. p
0071B8C5 |. 51 push ecx
, C- Z& |; s! m* I( Q9 i Y }1 g3 [
0071B8C6 |. 50 push eax
, E0 d0 f! Y! E/ ^: k$ O
0071B8C7 |. 8D4C24 64 lea ecx,dword ptr ss:[esp+64]
6 c, _. A( ?4 A& i O1 W" H _
0071B8CB |. E8 E0BBCEFF call heroes4.004074B0
6 p6 e7 m- V( z X
0071B8D0 |. 8B4424 60 mov eax,dword ptr ss:[esp+60]
8 `& W5 ^6 S0 R' a
0071B8D4 |. 8B7424 58 mov esi,dword ptr ss:[esp+58]
/ m. u. ^4 ~& W! h& ^. q( q2 G0 N
0071B8D8 |. 2BC6 sub eax,esi
, N8 u( m, h% M% r! b' y
0071B8DA |. 85C0 test eax,eax
( B% a7 C6 j; P" Y: J* d% k- W( }
0071B8DC |. 894424 18 mov dword ptr ss:[esp+18],eax
) v* J) g# c0 q0 Q& X+ M# z8 ]
0071B8E0 |. 0F8E B0010000 jle heroes4.0071BA96
! a0 l. U! X% I T" B
0071B8E6 |. 8B6C24 5C mov ebp,dword ptr ss:[esp+5C]
* b4 S. C$ p; ~5 f( B) I
0071B8EA |. 8B4C24 54 mov ecx,dword ptr ss:[esp+54] ; 数值上等于arg2
) V s: h/ S& H; K N' b5 T p; T
0071B8EE |. 2BE9 sub ebp,ecx
& W8 o' P- H! D2 M- ^
0071B8F0 |. 85ED test ebp,ebp
! w6 e: Z( ~8 [3 G/ x
0071B8F2 |. 896C24 1C mov dword ptr ss:[esp+1C],ebp
# i1 X; g$ E: @1 O- g! Z+ C! o
0071B8F6 |. 0F8E 9A010000 jle heroes4.0071BA96
1 M5 D1 z1 ~# n/ S9 A& m
0071B8FC |. 8B4424 6C mov eax,dword ptr ss:[esp+6C] ; arg2
3 N3 n, g* Z+ S
0071B900 |. 8BF9 mov edi,ecx
+ Y9 @7 f. P/ |+ Y
0071B902 |. 2BF8 sub edi,eax
/ s% T0 Y) y2 i
0071B904 |. 8B4424 70 mov eax,dword ptr ss:[esp+70] ; arg3
: Y$ w9 [6 R% W; _+ ~2 A! M
0071B908 |. 8BD6 mov edx,esi
, E- Q( v; r ^$ T
0071B90A |. 894C24 24 mov dword ptr ss:[esp+24],ecx
" X; D& G% j \: G
0071B90E |. 2BD0 sub edx,eax
& u J9 k+ d5 z0 J% w0 d$ G9 D
0071B910 |. 8B43 0C mov eax,dword ptr ds:[ebx+C]
$ M# x% W" Q$ b5 l ?; a( D
0071B913 |. 8BD8 mov ebx,eax
4 }" g2 l4 G" P% o" W4 |
0071B915 |. 0FAFDE imul ebx,esi
# I. O8 n4 j; k! t/ X$ _
0071B918 |. 8D344B lea esi,dword ptr ds:[ebx+ecx*2]
- \/ s8 n9 V r1 c0 u$ Z2 Y
0071B91B |. 8B4C24 68 mov ecx,dword ptr ss:[esp+68]
1 |0 H4 h6 k2 H+ b y
0071B91F |. 8B59 10 mov ebx,dword ptr ds:[ecx+10]
. z+ A5 l, s2 a$ M
0071B922 |. 8B4C24 10 mov ecx,dword ptr ss:[esp+10]
# P9 I' D; }1 { ]& \" s
0071B926 |. 03F3 add esi,ebx
6 I' L6 `& X- P, h: B) T
0071B928 |. 8B49 0C mov ecx,dword ptr ds:[ecx+C]
7 }) b. Z% [# Q
0071B92B |. 897424 68 mov dword ptr ss:[esp+68],esi; 重点:将缓冲区地址写入栈内(原arg1处)
6 h1 z+ M% ?9 G2 x
0071B92F |. 8BD9 mov ebx,ecx
& f/ A0 Y2 z! F: z
0071B931 |. 2BCD sub ecx,ebp
% }" C. K# u( b$ D
0071B933 |. 0FAFDA imul ebx,edx
/ w$ R$ F8 l5 r4 o" n* N
0071B936 |. 8B5424 10 mov edx,dword ptr ss:[esp+10]
, E; {0 Z( R, \9 F9 p" U2 C1 B
0071B93A |. 894C24 20 mov dword ptr ss:[esp+20],ecx
8 ^# ^5 X5 C/ U9 K: R- p, d8 v
0071B93E |. 8D4C2D 00 lea ecx,dword ptr ss:[ebp+ebp]
8 j& M1 S0 K9 @! j! S7 n) ~; ]
0071B942 |. 035A 10 add ebx,dword ptr ds:[edx+10]
8 g9 r9 U; d% t5 L. Y4 [
0071B945 |. 8B5424 18 mov edx,dword ptr ss:[esp+18]
A& g( ?. b0 k3 \
0071B949 |. 2BC1 sub eax,ecx
0 V; R+ w7 ~9 z& Y) U3 w: D
0071B94B |. 894424 24 mov dword ptr ss:[esp+24],eax
1 E) X* g0 R8 T4 b3 z% _4 H
0071B94F |. 03DF add ebx,edi
5 O5 \9 q0 q, m% |
0071B951 |. 8BC2 mov eax,edx
0 u, j6 F+ M1 k# N
0071B953 |. 4A dec edx
& U5 F9 e: Y! s' @
0071B954 |. 85C0 test eax,eax
+ D, }+ K1 j8 O, l; X1 A
0071B956 |. 0F84 3A010000 je heroes4.0071BA96
" H, L( F) W( O9 N- R3 u
0071B95C |. 42 inc edx
" P: v/ y0 m# K0 E+ u& D: c5 {+ i
0071B95D |. 895424 18 mov dword ptr ss:[esp+18],edx
% ^( U" b1 K, Z( F
0071B961 |> 85ED /test ebp,ebp
( O3 c# N% ?2 p: q
0071B963 |. 0F84 0E010000 |je heroes4.0071BA77
$ G' ~' Q( Q/ D
0071B969 |. 8B4424 74 |mov eax,dword ptr ss:[esp+74]
! e: g& F H4 {% K
0071B96D |. 896C24 14 |mov dword ptr ss:[esp+14],ebp
" h) e2 W( ~; O( O G' X
0071B971 |. 25 FFFF0000 |and eax,0FFFF
& z" c1 A ~) R* `5 K) g& H, i% a0 }
0071B976 |. 894424 10 |mov dword ptr ss:[esp+10],eax
, h: d# a7 } @1 @
0071B97A |> 8A4424 78 |/mov al,byte ptr ss:[esp+78]
- v* [! L! `/ S$ N2 w/ j# C$ H" B8 h
0071B97E |. 8B2D DCF0AA00 ||mov ebp,dword ptr ds:[AAF0DC]
) b& ?5 w2 r9 i' F; z1 V
0071B984 |. 84C0 ||test al,al
: j! n: l4 x; _7 L- v1 v8 n6 B' c
0071B986 |. 74 6A ||je short heroes4.0071B9F2
7 J$ ]& d$ ^+ j; l' m
0071B988 |. 8A0B ||mov cl,byte ptr ds:[ebx] ; 取字模的像素点
7 O0 u' M z1 F
0071B98A |. 8B4424 7C ||mov eax,dword ptr ss:[esp+7C]
, [9 R7 m! \5 c' V g
0071B98E |. 83E1 0F ||and ecx,0F ; 取低四位
% v9 H2 ~3 ~* N; L3 m9 p- ~4 @
0071B991 |. 25 FFFF0000 ||and eax,0FFFF
* }7 k8 X5 a3 @4 _
0071B996 |. 8BF9 ||mov edi,ecx
% N4 k2 r6 A+ m/ X8 c) P
0071B998 |. 33C9 ||xor ecx,ecx
: ~4 a; t3 P1 \2 i/ a3 |" F
0071B99A |. 66:8B0E ||mov cx,word ptr ds:[esi] ; 取缓冲区的原值
' M$ B2 y! v# ?
0071B99D |. 85FF ||test edi,edi ; 检查字模的像素点低四位是否为0
' E. s# @. f* l
0071B99F |. 74 54 ||je short heroes4.0071B9F5 ; 为0则不作处理
5 A* s: e/ E+ l- N% i, `
0071B9A1 |. 8BD7 ||mov edx,edi
8 C- i5 |% ^# m) b
0071B9A3 |. 8BF1 ||mov esi,ecx
* U+ D" T" c$ Y8 z
0071B9A5 |. C1FA 03 ||sar edx,3
4 Z3 z: U, Z9 G4 q9 N7 b
0071B9A8 |. 83E2 01 ||and edx,1
/ d0 n8 ~! A8 J# h# p e0 i
0071B9AB |. 03FA ||add edi,edx
" t& H& |3 n0 W
0071B9AD |. 8BD1 ||mov edx,ecx
0 `1 R; {$ f! K1 R/ _
0071B9AF |. 8B0D 04F1AA00 ||mov ecx,dword ptr ds:[AAF104]
7 B! @3 |7 Y6 t+ J! m
0071B9B5 |. 23D5 ||and edx,ebp
. ~( ^1 [8 t) i& l' M) ?7 A
0071B9B7 |. 23F1 ||and esi,ecx
5 _0 m$ H, U4 y4 c4 v0 v+ v
0071B9B9 |. 8BC8 ||mov ecx,eax
2 f6 n, `, F% z( _
0071B9BB |. 230D 04F1AA00 ||and ecx,dword ptr ds:[AAF104]
, u8 [! v" z. @: B0 s# K
0071B9C1 |. 23C5 ||and eax,ebp
' D N; R8 h; z+ w0 ?' l
0071B9C3 |. 2BC2 ||sub eax,edx
2 [! E" ?+ W' h- y- e$ o
0071B9C5 |. 2BCE ||sub ecx,esi
& R$ ]% H. `9 F) x# C) b
0071B9C7 |. 0FAFC7 ||imul eax,edi
/ P* U# z7 g0 L+ A
0071B9CA |. 0FAFCF ||imul ecx,edi
1 g5 M8 f" q- E( L5 A) U% k
0071B9CD |. C1E6 04 ||shl esi,4
+ C F* e$ W# V4 x5 A$ U/ v* \
0071B9D0 |. 03CE ||add ecx,esi
5 @3 ]3 ^: F6 ^# I* R. T9 H
0071B9D2 |. 8B35 F4F0AA00 ||mov esi,dword ptr ds:[AAF0F4]
! ` ]6 f% R2 j# |
0071B9D8 |. C1E2 04 ||shl edx,4
! g$ a. x" t2 r. V1 P
0071B9DB |. 23CE ||and ecx,esi
! v$ a' E# L, a
0071B9DD |. 8B35 D8F0AA00 ||mov esi,dword ptr ds:[AAF0D8]
+ q2 {. |* T# I3 l1 r
0071B9E3 |. 03C2 ||add eax,edx
9 E, j& l; d) {! [/ y+ V
0071B9E5 |. 23C6 ||and eax,esi
; [3 y. X6 P. H5 j; z% Z
0071B9E7 |. 8B7424 68 ||mov esi,dword ptr ss:[esp+68]
6 P7 g7 o x) P+ F/ v4 d. [1 |
0071B9EB |. 03C8 ||add ecx,eax
: u J# Y9 O9 [6 q
0071B9ED |. C1F9 04 ||sar ecx,4
5 ~# b/ A( F4 c* E; Y8 Y
0071B9F0 |. EB 03 ||jmp short heroes4.0071B9F5
, H0 \: h" d7 u1 F
0071B9F2 |> 66:8B0E ||mov cx,word ptr ds:[esi]
n- j3 ^3 F2 e2 z- O
0071B9F5 |> 33D2 ||xor edx,edx
( Z+ ~, y! P+ w% r' Z. c9 d
0071B9F7 |. 81E1 FFFF0000 ||and ecx,0FFFF
7 p. |$ j- g6 Y9 l
0071B9FD |. 8A13 ||mov dl,byte ptr ds:[ebx]
- h7 M2 \1 X$ q7 S8 w- I1 s
0071B9FF |. 8BC1 ||mov eax,ecx
% Y( C$ M; ^" Y5 U3 O, \+ j
0071BA01 |. C1EA 04 ||shr edx,4 ; 取高四位
9 |7 b0 j6 S6 P" g3 @+ Y, T
0071BA04 |. 85D2 ||test edx,edx ; 检查字模的像素点高四位是否为0
: |8 \8 P0 U8 V' U3 Q6 ]1 _
0071BA06 |. 74 51 ||je short heroes4.0071BA59 ; 为0则不作处理
! D! j* B8 V- p, M; @ I
0071BA08 |. 8BCA ||mov ecx,edx
( p1 x# I& b& @. t5 k ^4 l. c5 [" H
0071BA0A |. 8BF0 ||mov esi,eax
5 j- b2 G M* x I% \9 H* m
0071BA0C |. C1F9 03 ||sar ecx,3
6 S3 H4 R( S. Z0 O2 b
0071BA0F |. 83E1 01 ||and ecx,1
& `2 o1 ^ p3 G6 t: {& C" b
0071BA12 |. 23F5 ||and esi,ebp
/ L( D5 F5 P# o/ }, r6 g
0071BA14 |. 03D1 ||add edx,ecx
L* w1 O1 m; `! f% w! I2 q
0071BA16 |. 8BC8 ||mov ecx,eax
! i! x: Q/ o2 a5 q; Z
0071BA18 |. 8B4424 10 ||mov eax,dword ptr ss:[esp+10]
3 y- y. \" ]: j- b
0071BA1C |. 8B3D 04F1AA00 ||mov edi,dword ptr ds:[AAF104]
- r0 t7 }" N' v& I: L
0071BA22 |. 23C5 ||and eax,ebp
# x4 t& \, a! I, \# ~- \6 P' M- S
0071BA24 |. 23CF ||and ecx,edi
) c8 W" o" p5 E) R
0071BA26 |. 2BC6 ||sub eax,esi
) d' O3 u- c1 X8 M+ T0 z. ^! L
0071BA28 |. 0FAFC2 ||imul eax,edx
! h! h7 N9 w! s# p5 C
0071BA2B |. C1E6 04 ||shl esi,4
3 Q7 y( D ~8 j7 p- F4 T! z
0071BA2E |. 03C6 ||add eax,esi
# f. H5 C6 W# r; x1 z! f
0071BA30 |. 8B35 D8F0AA00 ||mov esi,dword ptr ds:[AAF0D8]
! `, K2 c4 ?; E' \% h4 T
0071BA36 |. 23C6 ||and eax,esi
3 Y4 r7 o. w2 i6 [* Q
0071BA38 |. 8B7424 10 ||mov esi,dword ptr ss:[esp+10]
4 D/ c% o$ ]" y( d+ i
0071BA3C |. 23F7 ||and esi,edi
9 w- V$ w7 h) `5 L; t9 J3 R
0071BA3E |. 8B3D F4F0AA00 ||mov edi,dword ptr ds:[AAF0F4]
; @2 O% R# m9 R7 _$ p. N1 J0 f
0071BA44 |. 2BF1 ||sub esi,ecx
4 k: C9 W- A+ w4 F {6 T
0071BA46 |. 0FAFF2 ||imul esi,edx
, i+ K- r1 N# i7 j: ~+ H
0071BA49 |. C1E1 04 ||shl ecx,4
4 V1 o3 Z* ]4 h' T, D V9 J
0071BA4C |. 03F1 ||add esi,ecx
" t+ m4 n w2 q/ L5 W" s5 S
0071BA4E |. 23F7 ||and esi,edi
7 C' H! X4 K7 K! v& o$ Q/ t& k/ U
0071BA50 |. 03C6 ||add eax,esi
6 R, x8 C8 T7 C W" B& W8 }
0071BA52 |. 8B7424 68 ||mov esi,dword ptr ss:[esp+68]
3 W1 K8 W* U; _! X/ E
0071BA56 |. C1F8 04 ||sar eax,4
7 I* D! F: d `6 S" l5 ?
0071BA59 |> 66:8906 ||mov word ptr ds:[esi],ax ; 将经过处理后的缓冲区值放回原处
. D/ M) t8 G$ L" x/ b7 B1 H- k1 @
0071BA5C |. 8B4424 14 ||mov eax,dword ptr ss:[esp+14]
9 ]7 w% N) \% v. E( ]- x% J
0071BA60 |. 43 ||inc ebx ; 指向字模的下个像素点
6 N& n4 H0 ?8 {# ^; Q/ i+ ?# Q
0071BA61 |. 83C6 02 ||add esi,2 ; 指向缓冲区的下个点
# O- N: P% w- {, L
0071BA64 |. 48 ||dec eax ; 计数值减1
0 D3 d P. X( |; e- W
0071BA65 |. 897424 68 ||mov dword ptr ss:[esp+68],esi
* C' |. R6 F* `, h4 Q- F' J) w
0071BA69 |. 894424 14 ||mov dword ptr ss:[esp+14],eax
2 @; n+ W" r2 U8 a3 s( t
0071BA6D |.^ 0F85 07FFFFFF |\jnz heroes4.0071B97A
: \7 h. W$ V0 A7 R/ e8 {4 D
0071BA73 |. 8B6C24 1C |mov ebp,dword ptr ss:[esp+1C]
* @2 m3 e6 c) U( t3 c" }, _
0071BA77 |> 8B5424 20 |mov edx,dword ptr ss:[esp+20]
* X" Z$ u/ `# U% f0 u% ^% W
0071BA7B |. 8B4C24 24 |mov ecx,dword ptr ss:[esp+24]
. A; D" e2 }+ }; ^; \2 f
0071BA7F |. 8B4424 18 |mov eax,dword ptr ss:[esp+18]
1 l; T4 Z) r+ i7 C7 F: _
0071BA83 |. 03DA |add ebx,edx ; 指向字模的下行像素点
/ @6 d3 |- e- a1 [2 x
0071BA85 |. 03F1 |add esi,ecx ; 指向缓冲区的下行点
+ `4 f8 Y: r8 p# z
0071BA87 |. 48 |dec eax ; 计数值减1
7 z9 L, Y1 r0 r* L" ^! E
0071BA88 |. 897424 68 |mov dword ptr ss:[esp+68],esi
" @2 b" ` E: F! y2 f
0071BA8C |. 894424 18 |mov dword ptr ss:[esp+18],eax
+ Z7 G C$ J! U8 O0 m, q5 O
0071BA90 |.^ 0F85 CBFEFFFF \jnz heroes4.0071B961
4 g% Z: Z, M3 F
0071BA96 |> 5F pop edi
. F* P& \' F* K& ~
0071BA97 |. 5E pop esi
# _$ a N1 Z3 L _( M3 H
0071BA98 |. 5D pop ebp
$ V* T. i: I; O- B* |) z- j# y
0071BA99 |. 5B pop ebx
- v$ o& m/ l4 M: s6 B! W( w' [
0071BA9A |. 83C4 54 add esp,54
; K! P5 b/ |1 c
0071BA9D \. C2 1800 retn 18
8 M$ U8 ^2 A, P6 z: \
本函数的核心是两层循环,从71B9A1开始就是循环体,整个换算过程是一个比较复杂的算法,可以简单表示为:
! i- \0 a2 T( |, i" m* G
. V$ ^ c- o( y" T5 H- j
buf[x][y]=func(buf[x][y],zm[x/2][y/2])
$ Z# o) m1 N" h9 v# d8 D/ {5 ~
7 Y. r$ E8 R+ o$ V
buf:缓冲区二维数组,两个字节表示一个点
( B7 C: A. G1 u4 r: R8 o
zm:字模二维数组,一个字节表示一个点
作者:
shane007
时间:
2010-3-16 21:37
建议楼主可以内挂一个DLL代替原来的函数。疯人院就是这么搞的.
3 j1 C2 \1 d Z3 j9 [/ n& q
( l8 H: a' Z" B. ~2 A7 v) c
对了,这个游戏是直接写显存的?
3 _% u: U& w# w
不是写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发表的 :
: I8 q( F6 u& m/ X1 p( F
两方面都有!
$ Z. O: {. n+ T) |7 e
论坛很需要像楼主这样的人才啊。希望楼主多多发表后需汉化资料。
9 G2 l& J5 ?! [
目前论坛有几个游戏需要会汇编的人才,不知道楼主可愿意帮忙?
作者:
shane007
时间:
2010-3-17 22:31
[quote]引用第4楼shane007于2010-03-17 22:30发表的 :
/ A1 Z+ B) q" q) c3 S. W$ O3 y8 L
1 G: _% G" r# B8 {( M4 x
2 L3 w' }# ?1 [# X1 x* w- b
论坛很需要像楼主这样的人才啊。希望楼主多多发表后需汉化资料。
" T6 d9 n( N7 Q* l1 t+ i% o
目前论坛有几个游戏需要会汇编的人才,不知道楼主可愿意帮忙?
- n! b& g7 j7 ?* k v0 V
如果愿意的话也一定会让你有所收获的。
作者:
jinxin8866
时间:
2010-3-18 03:21
可以啊,希望能帮上忙
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2