冒险解谜游戏中文网 ChinaAVG
标题:
英雄无敌四读字库函数分析
[打印本页]
作者:
jinxin8866
时间:
2010-3-16 20:33
标题:
英雄无敌四读字库函数分析
参数表
8 D% o! ^7 W, b& X4 A
arg1:[arg1+10]+[arg1+C]*arg3+arg2*2存放缓冲区(应该就是屏幕显示区在内存的映像)基地址
) E. W0 l) |+ `3 @- v( {, I
arg2:字符串宽度 x
5 Q8 o- b+ M! ?0 C9 I
arg3:y
. N' f9 P9 c( Q8 e2 D2 \
arg4:颜色
3 E) V' o# j% X# S, z
arg5:与颜色深度有关
( a1 x5 w3 a/ `3 E4 b
arg6:与颜色深度有关
, w2 ^* q) n8 N, Z4 Z
ecx:字符的编码基地址
5 \# a, Z9 x. w# n& ^! _
! I4 u( t+ ?& i2 B
0071B820 /$ 83EC 54 sub esp,54
0 X6 |6 @ O5 }6 S- y
0071B823 |. 53 push ebx
0 X# J T1 R+ g' J
0071B824 |. 8B5C24 5C mov ebx,dword ptr ss:[esp+5C]
2 H% m' [) m2 ?' X' W7 ]
0071B828 |. 55 push ebp
) m2 f: i8 I3 n9 ~" k
0071B829 |. 56 push esi
! F7 B; G0 j& r/ G5 i$ L4 p/ `
0071B82A |. 8B43 08 mov eax,dword ptr ds:[ebx+8]
, [" W5 K9 [$ x! q8 \& o
0071B82D |. 8BF1 mov esi,ecx
6 r# s/ H, a& _+ {$ u
0071B82F |. 8B4B 04 mov ecx,dword ptr ds:[ebx+4]
. C' r' a0 B- V: u* A7 W- I1 {6 h$ s
0071B832 |. 57 push edi
$ @/ {) b3 O3 o" Y* {
0071B833 |. 50 push eax
# q" E5 l, e$ m: T/ I
0071B834 |. 51 push ecx
. F% L- \4 c4 Y( N
0071B835 |. 6A 00 push 0
- {' F+ t& p9 `- Y( t6 p9 h
0071B837 |. 6A 00 push 0
+ w; V# j0 _; I% C7 Y! [( U; M
0071B839 |. 8D4C24 54 lea ecx,dword ptr ss:[esp+54]
( y$ {4 N7 U( C. p/ B' P+ H' W* @: {
0071B83D |. 897424 20 mov dword ptr ss:[esp+20],esi
+ W7 n4 p/ c* f! g) u! U6 ]4 Z
0071B841 |. E8 6ABCCEFF call heroes4.004074B0
9 m' L" _/ m/ x) k2 y7 E; B
0071B846 |. 8B56 08 mov edx,dword ptr ds:[esi+8]
' f3 b& Q' k- d$ o
0071B849 |. 8B46 04 mov eax,dword ptr ds:[esi+4]
9 E5 k1 u, I, C0 U' A' [
0071B84C |. 52 push edx
- a( K& G% t" J+ ]
0071B84D |. 50 push eax
( g: P1 X# T4 M) x
0071B84E |. 6A 00 push 0
& P$ v3 k( P2 @7 K& D9 Z1 [* Y
0071B850 |. 6A 00 push 0
" M7 u% @0 K5 \$ g) W7 Q
0071B852 |. 8D4C24 44 lea ecx,dword ptr ss:[esp+44]
+ K1 ]& Y) S) M7 [
0071B856 |. E8 55BCCEFF call heroes4.004074B0
) b N. c7 Y+ P( L
0071B85B |. 8B4C24 34 mov ecx,dword ptr ss:[esp+34]
\# f1 U- q8 U3 c! [! B
0071B85F |. 8B5424 38 mov edx,dword ptr ss:[esp+38]
" m0 P! y6 S1 s6 q Y. b
0071B863 |. 8B4424 3C mov eax,dword ptr ss:[esp+3C]
- i0 a: q2 Z; Q j. ^
0071B867 |. 894C24 24 mov dword ptr ss:[esp+24],ecx
+ m Y7 X2 K1 K% K. x+ q, I( C
0071B86B |. 8B4C24 40 mov ecx,dword ptr ss:[esp+40]
0 m5 N t* S( ?! }# i; ~) N( F* s/ X
0071B86F |. 895424 28 mov dword ptr ss:[esp+28],edx
: ^2 P1 f) v s& i: V. |
0071B873 |. 8D5424 6C lea edx,dword ptr ss:[esp+6C]
% [. m5 L9 }2 u k7 y. a5 I
0071B877 |. 894C24 30 mov dword ptr ss:[esp+30],ecx
" N0 B9 j. t6 ~, Z$ ?. \
0071B87B |. 52 push edx
; c3 ^: I3 \; C; \4 L! W
0071B87C |. 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
2 g( @$ Y8 r, R( B& J7 K( U
0071B880 |. 894424 30 mov dword ptr ss:[esp+30],eax
, U/ U+ X9 d# X |' B
0071B884 |. E8 47BCCEFF call heroes4.004074D0
* Q# v: X" K0 A. B9 a8 g
0071B889 |. 8B4424 30 mov eax,dword ptr ss:[esp+30]
/ a3 V- r) U: ~2 F1 L1 q
0071B88D |. 8B4C24 50 mov ecx,dword ptr ss:[esp+50]
5 s* F+ l9 r* K! f
0071B891 |. 3BC1 cmp eax,ecx
2 D$ d$ P; W4 O3 N' V
0071B893 |. 8BF8 mov edi,eax
6 q% u1 S3 i, h. _
0071B895 |. 7C 02 jl short heroes4.0071B899
% Q! C/ H, y+ J9 M$ w
0071B897 |. 8BF9 mov edi,ecx
1 ?& \- P6 F$ I+ q5 ~4 G& h
0071B899 |> 8B4424 2C mov eax,dword ptr ss:[esp+2C]
W+ w) Q; [4 i; A" k/ T: S0 b
0071B89D |. 8B5424 4C mov edx,dword ptr ss:[esp+4C]
4 H0 L5 W$ E! B& o. ?' R, d) |
0071B8A1 |. 3BC2 cmp eax,edx
3 R; k' ?' i. _5 h% j
0071B8A3 |. 7D 02 jge short heroes4.0071B8A7
0 e' v+ B2 r7 g% b6 E
0071B8A5 |. 8BD0 mov edx,eax
; h' L* W+ v) Z+ ?; X) B
0071B8A7 |> 8B4424 28 mov eax,dword ptr ss:[esp+28]
& B. Z6 E/ H$ ^2 K' w3 ]0 p" _
0071B8AB |. 8B4C24 48 mov ecx,dword ptr ss:[esp+48]
/ f- L5 `3 ?2 M- N; _4 F
0071B8AF |. 3BC1 cmp eax,ecx
. i) A( d: Z; W) `8 I
0071B8B1 |. 7E 02 jle short heroes4.0071B8B5
+ |: S$ W8 c p$ s; |
0071B8B3 |. 8BC8 mov ecx,eax
" s& f- U% ?. Y. ?9 W
0071B8B5 |> 8B4424 24 mov eax,dword ptr ss:[esp+24]
) A; Q$ @4 e3 C" I* u$ H3 u
0071B8B9 |. 8B7424 44 mov esi,dword ptr ss:[esp+44]
* M9 m5 \+ K' ~
0071B8BD |. 3BC6 cmp eax,esi
9 ~: r$ n) S1 g( U
0071B8BF |. 7F 02 jg short heroes4.0071B8C3
$ J: B& q" \" M% R
0071B8C1 |. 8BC6 mov eax,esi
, i) W# L6 c9 j4 X7 G/ X( V+ |
0071B8C3 |> 57 push edi
+ E+ X0 V) z' B z
0071B8C4 |. 52 push edx
+ w+ b' T( _! W/ ?# {
0071B8C5 |. 51 push ecx
/ ~ R q8 j: \1 v' W! Q2 U8 J- l
0071B8C6 |. 50 push eax
1 W5 s3 J3 x% h5 k7 n9 A- {
0071B8C7 |. 8D4C24 64 lea ecx,dword ptr ss:[esp+64]
6 D& d, k: K4 \
0071B8CB |. E8 E0BBCEFF call heroes4.004074B0
5 ?. @9 l5 X! H% F: ~/ ?% \: G
0071B8D0 |. 8B4424 60 mov eax,dword ptr ss:[esp+60]
+ a1 f( B I) a
0071B8D4 |. 8B7424 58 mov esi,dword ptr ss:[esp+58]
4 \/ o' U1 Z9 Y. q% }+ w6 M
0071B8D8 |. 2BC6 sub eax,esi
6 l% E# ]: v, | L; u9 T6 E
0071B8DA |. 85C0 test eax,eax
7 K2 o# j0 }! X- n$ u' K
0071B8DC |. 894424 18 mov dword ptr ss:[esp+18],eax
" f6 W2 v1 p" Z
0071B8E0 |. 0F8E B0010000 jle heroes4.0071BA96
" K% K9 }8 O0 a- Z
0071B8E6 |. 8B6C24 5C mov ebp,dword ptr ss:[esp+5C]
) I( W- \: v J; P- h) k) c
0071B8EA |. 8B4C24 54 mov ecx,dword ptr ss:[esp+54] ; 数值上等于arg2
8 j- Y- }- p4 \: J% s/ ?
0071B8EE |. 2BE9 sub ebp,ecx
+ Y. ^* x! r# A p. f/ @+ k0 ]
0071B8F0 |. 85ED test ebp,ebp
* T+ w6 V2 u! W, v0 o: ~+ f
0071B8F2 |. 896C24 1C mov dword ptr ss:[esp+1C],ebp
) R7 N, m8 h( {# J! [( C
0071B8F6 |. 0F8E 9A010000 jle heroes4.0071BA96
* \! x3 `8 C: E
0071B8FC |. 8B4424 6C mov eax,dword ptr ss:[esp+6C] ; arg2
2 i" [ L, g4 Q# l# l7 ^
0071B900 |. 8BF9 mov edi,ecx
+ H0 ]2 m" W Q# M) |( B7 h
0071B902 |. 2BF8 sub edi,eax
; D2 H7 Y, ?' ]5 N
0071B904 |. 8B4424 70 mov eax,dword ptr ss:[esp+70] ; arg3
4 l0 V9 O: I1 Y* X- z
0071B908 |. 8BD6 mov edx,esi
6 V3 z( h5 `) r" `- [
0071B90A |. 894C24 24 mov dword ptr ss:[esp+24],ecx
$ ^ o) n2 f/ h$ `- W
0071B90E |. 2BD0 sub edx,eax
; i v! O% L. q% k$ L
0071B910 |. 8B43 0C mov eax,dword ptr ds:[ebx+C]
: y! D) i* S8 ^8 B& Q( S7 x6 @
0071B913 |. 8BD8 mov ebx,eax
" ?4 ?# |0 N# B
0071B915 |. 0FAFDE imul ebx,esi
6 j; Y2 ?6 n$ H& o, c
0071B918 |. 8D344B lea esi,dword ptr ds:[ebx+ecx*2]
+ X. s% g( t% K. `3 }
0071B91B |. 8B4C24 68 mov ecx,dword ptr ss:[esp+68]
9 a% \/ }% P2 @3 L. y% f2 x' J$ S0 h6 k
0071B91F |. 8B59 10 mov ebx,dword ptr ds:[ecx+10]
0 ^) u7 Q$ y' j
0071B922 |. 8B4C24 10 mov ecx,dword ptr ss:[esp+10]
$ {8 Y' ] {$ J% j y" I7 \5 W
0071B926 |. 03F3 add esi,ebx
- p& l% ~( g; j# f/ l* g
0071B928 |. 8B49 0C mov ecx,dword ptr ds:[ecx+C]
0 e5 {- P+ g, `, C6 G! J
0071B92B |. 897424 68 mov dword ptr ss:[esp+68],esi; 重点:将缓冲区地址写入栈内(原arg1处)
. X, d6 R# D+ W4 g' U: q
0071B92F |. 8BD9 mov ebx,ecx
* b$ [* j& _2 u4 a; M! |
0071B931 |. 2BCD sub ecx,ebp
' S" l4 Q3 o ~
0071B933 |. 0FAFDA imul ebx,edx
I4 A- ?( N5 k3 e2 b
0071B936 |. 8B5424 10 mov edx,dword ptr ss:[esp+10]
8 x6 I3 I8 G' o+ p0 v$ J
0071B93A |. 894C24 20 mov dword ptr ss:[esp+20],ecx
/ r! [" l/ T/ e7 }* J
0071B93E |. 8D4C2D 00 lea ecx,dword ptr ss:[ebp+ebp]
- J" V' Z/ r8 i! r1 D
0071B942 |. 035A 10 add ebx,dword ptr ds:[edx+10]
4 J& ?+ k: k$ |" a0 l
0071B945 |. 8B5424 18 mov edx,dword ptr ss:[esp+18]
d2 v5 ]8 n) {2 g' B. G/ X) s
0071B949 |. 2BC1 sub eax,ecx
" j- d0 k+ |- z
0071B94B |. 894424 24 mov dword ptr ss:[esp+24],eax
1 C: K% s* N. v( t3 a2 ?: r
0071B94F |. 03DF add ebx,edi
0 {* t9 X# F0 Y' P! H/ `
0071B951 |. 8BC2 mov eax,edx
0 ^# G; j8 r9 V2 v. a2 s# I
0071B953 |. 4A dec edx
5 ~3 |$ v- O3 U& L
0071B954 |. 85C0 test eax,eax
2 w. V6 ~2 G% E' j6 }
0071B956 |. 0F84 3A010000 je heroes4.0071BA96
% W( E3 O6 e( w7 a
0071B95C |. 42 inc edx
2 D8 Y% [: D1 G" N2 r) e: D% W1 L2 i8 w
0071B95D |. 895424 18 mov dword ptr ss:[esp+18],edx
' M' `7 P( \# B, u
0071B961 |> 85ED /test ebp,ebp
# j% e& C. r/ d3 e5 S8 k
0071B963 |. 0F84 0E010000 |je heroes4.0071BA77
8 f7 j* M7 M6 b" F: F
0071B969 |. 8B4424 74 |mov eax,dword ptr ss:[esp+74]
8 a7 G4 W( \4 `" G* x0 @- [
0071B96D |. 896C24 14 |mov dword ptr ss:[esp+14],ebp
/ P# _# n2 c7 B( ]5 W6 n8 ~' y+ Q
0071B971 |. 25 FFFF0000 |and eax,0FFFF
1 _2 C! o5 Q8 c3 m) O
0071B976 |. 894424 10 |mov dword ptr ss:[esp+10],eax
" e( O: S. l7 c2 e/ ~
0071B97A |> 8A4424 78 |/mov al,byte ptr ss:[esp+78]
# @8 n; P+ F( v( ?1 a1 s# i+ `; T
0071B97E |. 8B2D DCF0AA00 ||mov ebp,dword ptr ds:[AAF0DC]
! Q' a; K7 m8 T1 k2 B( k# t
0071B984 |. 84C0 ||test al,al
|$ [% g+ G) X+ F6 f, h
0071B986 |. 74 6A ||je short heroes4.0071B9F2
, z3 u0 j( B" @
0071B988 |. 8A0B ||mov cl,byte ptr ds:[ebx] ; 取字模的像素点
! E' y- ]- m/ ~5 o" D) z, r% k" Q
0071B98A |. 8B4424 7C ||mov eax,dword ptr ss:[esp+7C]
- ~2 r# H1 s- @2 }% {
0071B98E |. 83E1 0F ||and ecx,0F ; 取低四位
& Y1 R& ]( {8 n
0071B991 |. 25 FFFF0000 ||and eax,0FFFF
, @. r5 b* P) g; {, E" S7 i( s
0071B996 |. 8BF9 ||mov edi,ecx
7 }& D( `3 M( Z# L. b3 T9 o
0071B998 |. 33C9 ||xor ecx,ecx
) Z: w& t0 z: Q/ Z
0071B99A |. 66:8B0E ||mov cx,word ptr ds:[esi] ; 取缓冲区的原值
; ?# e, H' z6 ]8 W" |$ j1 ~; o
0071B99D |. 85FF ||test edi,edi ; 检查字模的像素点低四位是否为0
/ {: g n+ W3 B9 s3 Z# e
0071B99F |. 74 54 ||je short heroes4.0071B9F5 ; 为0则不作处理
1 O" q& L8 X6 J& s
0071B9A1 |. 8BD7 ||mov edx,edi
# d/ E' a: m! o; ]1 p: y. V% m) r
0071B9A3 |. 8BF1 ||mov esi,ecx
/ J/ T* u/ Q9 t
0071B9A5 |. C1FA 03 ||sar edx,3
) F, ~& M4 O1 r k& F7 {1 r* h5 @
0071B9A8 |. 83E2 01 ||and edx,1
4 r: W p) J% H' l
0071B9AB |. 03FA ||add edi,edx
, {9 N3 L3 a2 O4 u6 i# m( H
0071B9AD |. 8BD1 ||mov edx,ecx
( F- N, x. l" s$ i8 D+ K0 ?
0071B9AF |. 8B0D 04F1AA00 ||mov ecx,dword ptr ds:[AAF104]
8 k8 c6 d! }0 ?, f/ g
0071B9B5 |. 23D5 ||and edx,ebp
' f0 S4 [' F8 |" I1 B2 s
0071B9B7 |. 23F1 ||and esi,ecx
1 m% {3 B5 s* S. l$ ^# {( ^
0071B9B9 |. 8BC8 ||mov ecx,eax
4 H4 ?9 d$ _( Z$ K( Y
0071B9BB |. 230D 04F1AA00 ||and ecx,dword ptr ds:[AAF104]
$ c# z' S3 |, X' e; D4 \3 \5 H% q
0071B9C1 |. 23C5 ||and eax,ebp
3 @* E# W6 W6 R8 g
0071B9C3 |. 2BC2 ||sub eax,edx
+ H$ [7 J! V0 a2 U, T* [# W
0071B9C5 |. 2BCE ||sub ecx,esi
: `- J: O1 f6 g. s
0071B9C7 |. 0FAFC7 ||imul eax,edi
* y" s' x! L: I$ p5 H
0071B9CA |. 0FAFCF ||imul ecx,edi
/ `1 S, z1 d7 I0 a" J" A4 K
0071B9CD |. C1E6 04 ||shl esi,4
, O% \+ A8 j; t+ p& ?
0071B9D0 |. 03CE ||add ecx,esi
5 F6 L& K, R* T1 k/ |& ^; Y
0071B9D2 |. 8B35 F4F0AA00 ||mov esi,dword ptr ds:[AAF0F4]
/ o- e9 j- Z3 q7 Z" d
0071B9D8 |. C1E2 04 ||shl edx,4
* d9 p9 b0 x# Q5 M0 n
0071B9DB |. 23CE ||and ecx,esi
, F) T' u! J. S( Z+ ?
0071B9DD |. 8B35 D8F0AA00 ||mov esi,dword ptr ds:[AAF0D8]
# T4 Z+ C% N& _ ?8 z i; W) M
0071B9E3 |. 03C2 ||add eax,edx
8 Q+ g, g9 _. }/ m
0071B9E5 |. 23C6 ||and eax,esi
7 s7 Y' l0 E% {' }( b( A9 ~$ \
0071B9E7 |. 8B7424 68 ||mov esi,dword ptr ss:[esp+68]
, v. v. I4 B5 y# v% k3 I
0071B9EB |. 03C8 ||add ecx,eax
; i3 q$ N J$ w- R& \, e
0071B9ED |. C1F9 04 ||sar ecx,4
- c* b4 a3 z0 W( e# ^, @/ M
0071B9F0 |. EB 03 ||jmp short heroes4.0071B9F5
; `" z! c/ f" J! [8 \
0071B9F2 |> 66:8B0E ||mov cx,word ptr ds:[esi]
! h) v. j' z8 c$ e( }8 H; F
0071B9F5 |> 33D2 ||xor edx,edx
# U5 i: D8 J2 a2 A2 j( G& g
0071B9F7 |. 81E1 FFFF0000 ||and ecx,0FFFF
' \$ T* E7 b3 |4 Q! L+ {! o/ |
0071B9FD |. 8A13 ||mov dl,byte ptr ds:[ebx]
0 d' [% a1 ^/ Q$ P2 g% ]2 d- O
0071B9FF |. 8BC1 ||mov eax,ecx
( G3 ?( t; K; D2 V) ]+ B7 x
0071BA01 |. C1EA 04 ||shr edx,4 ; 取高四位
& T9 p* n7 e: d& v9 u' w# J
0071BA04 |. 85D2 ||test edx,edx ; 检查字模的像素点高四位是否为0
0 o% z* m$ u2 W( \5 G0 H
0071BA06 |. 74 51 ||je short heroes4.0071BA59 ; 为0则不作处理
) B, f# a( l7 Y8 y! G
0071BA08 |. 8BCA ||mov ecx,edx
$ o: X5 V6 G8 x. |
0071BA0A |. 8BF0 ||mov esi,eax
( f* ]( o3 k5 E& C' _2 c# y$ X, h
0071BA0C |. C1F9 03 ||sar ecx,3
9 w7 H8 M" h5 f0 T! K8 }7 U( q
0071BA0F |. 83E1 01 ||and ecx,1
! `0 w/ B4 ]9 p) u5 l" d& j. {: b, a
0071BA12 |. 23F5 ||and esi,ebp
+ c# Q' c5 b$ D" Y- |7 ~5 V
0071BA14 |. 03D1 ||add edx,ecx
& R1 h; |& u P
0071BA16 |. 8BC8 ||mov ecx,eax
( j' c: y! R; m5 t8 y* u
0071BA18 |. 8B4424 10 ||mov eax,dword ptr ss:[esp+10]
2 @+ e% a1 G; H; ?# O, o, ^
0071BA1C |. 8B3D 04F1AA00 ||mov edi,dword ptr ds:[AAF104]
. T) k9 W$ T8 q7 Z/ Z
0071BA22 |. 23C5 ||and eax,ebp
! | w& w) C k) o
0071BA24 |. 23CF ||and ecx,edi
* I7 y, w- r' v
0071BA26 |. 2BC6 ||sub eax,esi
) u4 t. l. Z4 B. ^! J# g* F0 j
0071BA28 |. 0FAFC2 ||imul eax,edx
: \$ U! N; J3 k& p
0071BA2B |. C1E6 04 ||shl esi,4
$ ^0 d k& b- V( M$ ^
0071BA2E |. 03C6 ||add eax,esi
1 _' @/ }. A b1 k' M
0071BA30 |. 8B35 D8F0AA00 ||mov esi,dword ptr ds:[AAF0D8]
# @( T4 {! x R
0071BA36 |. 23C6 ||and eax,esi
5 X* u# j9 v ~" G/ B
0071BA38 |. 8B7424 10 ||mov esi,dword ptr ss:[esp+10]
+ a! O1 X0 x8 o F" K% G* K
0071BA3C |. 23F7 ||and esi,edi
0 y) V1 T& o/ V5 A
0071BA3E |. 8B3D F4F0AA00 ||mov edi,dword ptr ds:[AAF0F4]
. S% A. F) ^6 b' M$ H
0071BA44 |. 2BF1 ||sub esi,ecx
3 I$ s( l7 ? N4 b# Z
0071BA46 |. 0FAFF2 ||imul esi,edx
4 J% s$ B( e$ X- Y; v& }
0071BA49 |. C1E1 04 ||shl ecx,4
9 X1 j; c4 \2 P, c6 D
0071BA4C |. 03F1 ||add esi,ecx
3 p# p; X0 r- D! `3 t
0071BA4E |. 23F7 ||and esi,edi
3 b6 }% Q; x) m
0071BA50 |. 03C6 ||add eax,esi
h% L7 b% \( S' a6 p; w; k
0071BA52 |. 8B7424 68 ||mov esi,dword ptr ss:[esp+68]
/ L4 [; i! F, D3 v: p5 w8 G& ?4 n
0071BA56 |. C1F8 04 ||sar eax,4
0 f m7 M# `4 [3 e8 y J! f
0071BA59 |> 66:8906 ||mov word ptr ds:[esi],ax ; 将经过处理后的缓冲区值放回原处
6 g# F C; s3 Z/ d7 d
0071BA5C |. 8B4424 14 ||mov eax,dword ptr ss:[esp+14]
3 M- c" ^- @# ~/ l
0071BA60 |. 43 ||inc ebx ; 指向字模的下个像素点
/ e+ v' L7 V: E# x! L6 D
0071BA61 |. 83C6 02 ||add esi,2 ; 指向缓冲区的下个点
7 r+ @6 n* Z/ A i3 d3 n7 m
0071BA64 |. 48 ||dec eax ; 计数值减1
9 _: ]# x% K6 b( t, T
0071BA65 |. 897424 68 ||mov dword ptr ss:[esp+68],esi
. \: H: s U' ~, i7 `
0071BA69 |. 894424 14 ||mov dword ptr ss:[esp+14],eax
3 F9 N6 l, Y5 \) `, y! @/ S
0071BA6D |.^ 0F85 07FFFFFF |\jnz heroes4.0071B97A
9 [$ g6 W$ u; f$ [- ?0 D! a
0071BA73 |. 8B6C24 1C |mov ebp,dword ptr ss:[esp+1C]
. p v5 Z2 b7 A: A2 G
0071BA77 |> 8B5424 20 |mov edx,dword ptr ss:[esp+20]
' k" F+ y; ]6 f# Z3 u: w8 `1 L
0071BA7B |. 8B4C24 24 |mov ecx,dword ptr ss:[esp+24]
, V* k5 @' K2 z0 S# f+ J6 a9 N9 d
0071BA7F |. 8B4424 18 |mov eax,dword ptr ss:[esp+18]
9 ]! U+ {& K. x/ N
0071BA83 |. 03DA |add ebx,edx ; 指向字模的下行像素点
2 G4 k" e0 S$ Y, D! m
0071BA85 |. 03F1 |add esi,ecx ; 指向缓冲区的下行点
8 F3 I8 b. C* m+ @" n8 i& m
0071BA87 |. 48 |dec eax ; 计数值减1
; a- v" {( p0 r F
0071BA88 |. 897424 68 |mov dword ptr ss:[esp+68],esi
. F4 A( N- C" d3 M8 q+ d: C
0071BA8C |. 894424 18 |mov dword ptr ss:[esp+18],eax
( _; L( v. a: p4 G" c2 e. x. x
0071BA90 |.^ 0F85 CBFEFFFF \jnz heroes4.0071B961
' I8 j6 A% x( G8 Y8 z# K
0071BA96 |> 5F pop edi
' |9 H: Y0 s0 D# o& N6 f2 T' y: [
0071BA97 |. 5E pop esi
- h6 [5 X9 t# j+ z. A& B! k" x% h- r. `
0071BA98 |. 5D pop ebp
; K! _' u8 v/ s) z4 O: A
0071BA99 |. 5B pop ebx
" ]) P% ?4 H; s
0071BA9A |. 83C4 54 add esp,54
: z; n. Y, N3 K$ S7 ?* j& f* k& G
0071BA9D \. C2 1800 retn 18
% Z- A N: O l9 C Z( T4 p3 F3 o
本函数的核心是两层循环,从71B9A1开始就是循环体,整个换算过程是一个比较复杂的算法,可以简单表示为:
5 @9 W9 {! P! H M4 R/ `% g3 R
0 N& E5 q2 a- N1 ]& k
buf[x][y]=func(buf[x][y],zm[x/2][y/2])
; d% U+ J* E; i Z- ]) p$ l
( X: n9 H8 r, I" f' z( b
buf:缓冲区二维数组,两个字节表示一个点
& z! r- l0 f% R% ~) N; \. ~
zm:字模二维数组,一个字节表示一个点
作者:
shane007
时间:
2010-3-16 21:37
建议楼主可以内挂一个DLL代替原来的函数。疯人院就是这么搞的.
6 j, r- x; n1 ^9 t, U- m( F
6 d1 {# N, I) y. L
对了,这个游戏是直接写显存的?
- }% s0 M* Z: } G
不是写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发表的 :
# Z# U; n2 X5 K1 d
两方面都有!
& R% J( O5 ?: Z
论坛很需要像楼主这样的人才啊。希望楼主多多发表后需汉化资料。
& S" H' i2 Y) S3 P3 ^% t
目前论坛有几个游戏需要会汇编的人才,不知道楼主可愿意帮忙?
作者:
shane007
时间:
2010-3-17 22:31
[quote]引用第4楼shane007于2010-03-17 22:30发表的 :
6 _+ L5 l2 ?* r$ [: P
~3 h m% G* v& j; j
( Q# A9 h3 H2 {* Q+ A
论坛很需要像楼主这样的人才啊。希望楼主多多发表后需汉化资料。
* W5 I4 }" N. V$ C2 r3 z! H& L
目前论坛有几个游戏需要会汇编的人才,不知道楼主可愿意帮忙?
' g; E$ I8 R! Z) u! h! s4 ~7 W
如果愿意的话也一定会让你有所收获的。
作者:
jinxin8866
时间:
2010-3-18 03:21
可以啊,希望能帮上忙
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2