|
|
转载7 b$ C+ f0 F, _9 H7 W
BY SJ
4 K' W- r1 P% _1 a首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
* X1 O" s# P/ k) ]- j! z/ n. d
D2Gfx::D2DrawImage-10041
M1 J# G# u% Q9 S, v; _8 o1、修复技能的背景(不需要可以不要)
( K" [; ^7 K) k& xoffset = D2Client::GetAddress(0x77AA8);
( A! x$ \$ B5 U3 pMemory::SetCursor(offset); i ~1 f3 u6 s- R& l& l/ o
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);% f0 U6 U, U `
! G5 z9 w- F i" S. @% Kvoid __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
5 V; q2 m3 C+ s b. N6 {# m% \{1 X7 ]6 Z6 l$ _9 M8 q1 f7 j" L
//Init data for print image
$ x5 R7 D# ?+ D! o sDrawImageInfo data;
. a7 Q7 l0 l% w' } H ZeroMemory(&data, sizeof(data));
' `2 V. ~! f5 V8 W# A2 H* g4 I: O1 P2 `
//print background
, y# ?2 k6 W4 Q; w9 q9 |6 A setImage(&data, spellBackgroundImages); e X( s: `" v& x( T8 o+ O5 }- ?
setFrame(&data, 0);) O+ c! g' T* J% F5 a P4 Q t
int fixx = 511;
$ h; ?! k0 t" H+ y int fixy = 9;8 s% E# L, N' o; c M
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);0 G# P9 O" J2 T# ^! ~
setFrame(&data, 1);
9 ^( h0 r5 C$ p( ~+ @ D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
. } I6 s" q9 M& | setFrame(&data, 2);6 s! k# ~7 l( L4 l
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
2 F+ ]9 J; ? g4 b t8 @ setFrame(&data, 3);/ l' w( ]# K7 g0 _" W" |1 c. y
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
1 U' p5 R8 Y& J, P! b- O( }/ k}
! J5 G* b6 O# K% x6 G__declspec(naked) void caller_SpellBackGroundFix()
1 @+ @8 o$ c) I, M( g{( {6 l/ ~8 N3 N4 Q
__asm: A) d4 R$ H- x# k9 A2 A' b
{
. R# o- W& j1 |! q6 | PUSHAD
$ w# n5 ]. N# w3 n6 X0 @ lea eax, dword ptr ss : [esp + 0x38]# i- B8 ?) P h0 M
push eax
4 L, s7 e; k/ W) L$ X8 L$ H push dword ptr ss : [esp + 0x38]& K5 W! e0 l( H( ~4 b" G- e& Y* ]1 Q
push dword ptr ss : [esp + 0x38]
+ s7 |! C0 L* \/ `) s lea eax, dword ptr ss : [esp + 0x38]
6 }! R" |7 t' q! z- t push eax
* G; J" L* N! r, N, f lea eax, dword ptr ss : [esp + 0x38]
& u1 }5 f5 O6 N, H push eax; p i% v: `8 w3 }4 z
push dword ptr ss : [esp + 0x38]
1 [5 g; }" S1 M' {1 E call m_NewStatShow_SpellBackGroundFix
# i8 u/ `# \ p% t7 P3 s POPAD
! a. F' I! d) D6 `( g) F) a8 e JMP D2Gfx::D2DrawImage
+ C$ o! C/ O. F+ H3 T# ~( e5 @ }
; N, v! i) k" L9 W- J; X}
, M7 J9 b9 s9 N2 e/ e. p1 ~
* y2 L3 F- d3 G' X* `2、我们如法炮制小站的背景
: }' Q6 i& r" C F* [1 @. X3 X0 _9 j9 p& d$ |
offset = D2Client::GetAddress(0xAB010);: n* H0 L* z! Q
Memory::SetCursor(offset);! @( H! \# k' C) N( w* \3 q* Q1 W
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
1 j. `5 e9 s0 r4 A' G- A5 T: o( D" ^5 ?% `4 J" ^
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
/ ^& ?2 U& m# {& L4 y4 Y: n. e{+ c5 W+ d1 C+ D$ p" ?5 f8 K9 V
//Init data for print image! G. n" q! E* A( ^0 ]
sDrawImageInfo data;
6 O- g L# E; K* N ZeroMemory(&data, sizeof(data));- |6 a6 @4 k1 p
& m9 `1 @# R% W$ `
//print background
. J# P5 p: k ]' ^7 G setImage(&data, waypointBackgroundImages);9 `# S3 x q. [9 {% ^2 U
setFrame(&data, 0);, L. |9 u8 G) {# y2 C$ W
int fixx = 0;
9 i+ Q5 S( q) T! }* x int fixy = 9;9 T( p- t C/ m. V$ D+ C) b
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
" S, u3 J: h6 |: V setFrame(&data, 1);7 |( ?2 y7 S3 `: }* ~8 j4 }4 w; G
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
q3 g+ i, X$ g2 e setFrame(&data, 2);1 S& |" @/ P0 w3 J; ~* s, z
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
2 y( W) G9 \* z+ Q9 ~$ X setFrame(&data, 3);
) V$ F6 q+ j. X5 z' R: [ D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);' q) m8 P0 Y: n- r7 c
& g/ M8 |9 V4 [5 H
}' {3 b, O9 o8 o' A" b6 {
__declspec(naked) void caller_WayPointBackGroundFix()
( {+ S$ B& g% D# f{
% l1 j. n @0 e! R1 c( L __asm
" S# R+ X& P x" z" S {
/ o: h: S I( a$ z( | PUSHAD
- z2 r7 O7 s8 l6 M% e lea eax, dword ptr ss : [esp + 0x38]( w; @. Z3 f2 a8 N& S0 h, ?
push eax' m ?# t* J8 r, v1 L1 ~/ Z
push dword ptr ss : [esp + 0x38]
6 E* z7 U( v. K" l* D9 R- f8 | push dword ptr ss : [esp + 0x38]% M( w1 C6 L+ j" w) n
lea eax, dword ptr ss : [esp + 0x38]( ^. h; k4 q" Z" Z) a: }
push eax3 c! T) f5 I2 b8 I5 T
lea eax, dword ptr ss : [esp + 0x38]
+ H2 v* G/ |4 N3 N/ Q. G push eax
) F# C! X' s7 r! J) _1 O push dword ptr ss : [esp + 0x38]4 ~- Y: v' M. |/ y7 z
call m_NewStatShow_WayPointBackGroundFix
1 V, e0 j- O* T Z- | POPAD$ A4 d0 h7 D* w, M' s- g. ~3 P
JMP D2Gfx::D2DrawImage2 }8 [+ ^5 M* l- q8 q
}
5 Q) O& i8 i# t1 _8 r7 _}
3 ] w( o6 |4 `7 b+ @( i$ n' B4 B2 Z! l& d( ~, F$ q0 e: j9 D, E
3、以下可以搞16*16超级箱子-腾出我们需要的边缘% E7 L5 u; J* a% W) E* g8 q
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
# b$ ^1 o9 r3 h5 b7 a3 T {
* w& Q. @( U; K6 a b% M+ }2 Q5 N class D2MultiRes : public Library<D2MultiRes>8 B8 ?# @# z K. E
{' A1 x* I4 G, ~* q7 \
public:2 t o, v) i$ A9 ~7 m% m
static void Init()
% i, G w, ^3 Z3 J$ U# k I {
% { v: O* H$ H$ r) b Name = "D2MultiRes.dll";6 i; O/ O O, y# K G/ m+ O
Offset = LoadDiabloLibrary();' M0 G* c: C. w& F- s" G& L i
}5 |) E% g W4 F
};
9 `$ R& J& m$ u! t D2MultiRes::Init();
7 a& [; W4 w5 ?% H9 i( p+ E" p D2MultiRes::HookLibrary();$ j0 ?" J3 I, Y! g1 K
* t$ \9 Z: p6 \1 e
& i0 p$ @0 X8 w$ w" _) @: d
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
, q1 |* e1 X) u Memory::SetCursor(MiscFunctionsOffset);
- a: z( A) I3 F% z Memory::ChangeDword(0x1b0, 0x200);
* V4 O( r0 [( z8 [& R3 D; s
: @! |" X$ k# B2 S& H5 D' |4 O6 M. ^. D
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
8 o# u1 F+ V6 [5 ?$ a: D9 F Memory::SetCursor(MiscFunctionsOffset);
0 M, |+ X# V; ~ Memory::ChangeDword(0x140, 0x200);
Y2 d7 j/ k# N. B1 l9 U* H3 u- m7 b7 s U! `
, }2 M% a1 H6 |( } MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);2 F) F9 c5 p% W1 ]- M
Memory::SetCursor(MiscFunctionsOffset);
' t, Z7 z$ j/ [# R Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块 W. ]7 z9 H* k
# l+ a: E$ Z0 y; \' F8 p; b" K: z9 V
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
/ ?/ f' k6 |/ Q$ i Memory::SetCursor(MiscFunctionsOffset);# @/ v$ ?% E2 R+ ~- P4 r
Memory::ChangeDword(0x200,0x299);//下边缘 299最大& j$ Z5 N1 ` D9 g& l- C5 S
' R) H7 ~% x% d MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
" r- q$ _ ~" M Memory::SetCursor(MiscFunctionsOffset);
, N9 i8 H' k/ G7 n5 r7 Q Memory::ChangeDword(-0x280, -0x400);//这个不要动+ i- Y; c& j% u, Y! |" h
}( B% J! l" }1 p4 @# z& `
& s: N: h0 y Z/ b0 c/ P
4、快完成了,是不是发现金币啥的位置不对??* x7 E& o; I* c( G3 y
# i+ R' T9 O) I! P//这里修正我们的装备栏; r n9 p {/ L5 g- a n) V
offset = D2Client::GetAddress(0x99B6C);! I4 c4 p! K) N! W2 t
Memory::SetCursor(offset);
5 J5 r/ i7 }5 w8 b Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix); y. L+ f6 P9 Z1 l, B' M5 |3 `
! f4 l* p* c4 @$ `! F( M" x offset = D2Client::GetAddress(0x99BA7);. |9 l$ D+ T) D
Memory::SetCursor(offset);
$ o% A7 Y) N. S- v0 I1 B Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);$ W0 g. j! }5 m6 B* ] k5 C$ S# E
. @. W$ L% R! E& H0 j' f! H offset = D2Client::GetAddress(0x99BE2);
9 e+ n$ A* ?, r0 i/ ?/ Q0 v Memory::SetCursor(offset);3 @# u* {% I' m5 ~! |1 Y/ x0 j2 r
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
: b3 k- n: v/ @2 f2 b) B
: J. T- @5 { p6 x# V) w- e offset = D2Client::GetAddress(0x99C1C); ?: f( B# {7 ~ O) v: d6 ?
Memory::SetCursor(offset);
& k% z- c* y9 t: ^! I' @ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);* c1 u& {% K4 I. T4 X
% Z9 O7 S1 n* Q; M) ]* j) L5 Y/ S( @ //取消两个popup,偷偷懒不过分
) T" N4 W4 V9 [9 l offset = D2Client::GetAddress(0x9386d);. S, l# B, ^& S+ u
Memory::SetCursor(offset);5 F- }% Y+ m3 O! f
Memory::ChangeByte(0x8b, 0x33);
& w) ^; Z$ J! y0 L Memory::ChangeByte(0xc8, 0xC9);( y* g6 \7 t [0 X0 K
offset = D2Client::GetAddress(0x9390b);
% M% w; \" k; a: d( D5 b. @* I Memory::SetCursor(offset);
( A3 \& F; X$ h5 I: n Memory::ChangeByte(0x8b, 0x33);
% E: Y/ h' ]2 w. t* k Memory::ChangeByte(0xc8, 0xC9);
# l8 G# } Q; P$ L9 f, h) a
! `2 u* A: t/ u1 {% W //修正提取金币
0 `) y$ t# H- E% z offset = D2Client::GetAddress(0x8D3E5);8 C9 i5 w; Y# A! @# v/ Y$ y1 q
Memory::SetCursor(offset);
5 G" e% h- Q+ R' D) O Memory::ChangeByte(0xA1, 0xE9);
. d) j9 N1 Z2 c, [# T Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);6 `7 \* r! l' i) s
+ |! p4 ^% [+ P/ S c offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);, x* d) A4 s3 @7 r# G1 }6 u
Memory::SetCursor(offset);+ r: m$ p' s( a: G, v5 R/ m
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);7 E3 Q$ A5 o1 {" y9 W# x7 ]
1 H" m* ~" }. C1 }+ y @; E0 u6 J offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
% k" C8 O- j' L- U5 E4 Y9 c9 C Memory::SetCursor(offset);1 }9 H' j) }, m
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
( n" e1 D; l% _2 }" x8 |4 J
* e( t* d4 M+ z! d+ F- D1 { //修正关闭按钮3 b1 \! Z `% ]" {1 {: K' Q4 Y1 A' B
offset = D2Client::GetAddress(0x8BD90);
+ P/ ]2 G8 d" Y/ ?% A7 D' P, d Memory::SetCursor(offset);
* V4 p. U+ k% X1 Z7 ~8 L. g( z9 [& `- m Memory::ChangeByte(0xA1, 0xE9);$ l" r4 ~4 i1 u% p% e; F
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);3 t b) \: B* B1 a' i
# d3 x8 u2 q" j6 p
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
" T0 a D: B& P7 Z9 | Memory::SetCursor(offset);
, c* F, _$ ~) z' y( \4 N6 K Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);9 m5 g1 h3 @# x
) U( N5 _# e/ v) E% d$ g
4 `7 f. t! \& S* d% D( a- o! Y- P//以下是细节, C& w x4 ^+ c/ r
#define getXGoldCoinFixBtn() RX(0x2d0)
1 }' S* [- E4 F8 ?. D0 Q+ E- w#define getLGoldCoinFixBtn() 32
- h( @# {9 l5 I" w+ e#define getYGoldCoinFixBtn() RY(-0x59)
2 P8 Z' S+ E+ w#define getHGoldCoinFixBtn() 32
( m/ C9 V+ K/ y#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())8 `/ r0 g% U' a
: K1 W' B3 ?1 @* e. t#define getXInvCloseFixBtn() RX(0x3db)
B! H9 o2 n) Y* v7 k' ~; Q#define getLInvCloseFixBtn() 32* f0 c- R" I3 I; O
#define getYInvCloseFixBtn() RY(-0x63) @& Y6 N7 o4 d5 w
#define getHInvCloseFixBtn() 32
8 K5 n3 E- j: j8 \* O9 m& P#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())6 D+ B& H# L& g% [" v( @
: c# ~' ^% I& Q" e" ?BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
* b5 A* t0 [; g. f# r9 R{! x8 X* t6 L: W$ q2 |. {' o
DWORD mx = *D2Client::ptMouseX;
/ k3 V& n: k9 q8 }0 s C$ p DWORD my = *D2Client::ptMouseY;3 ^ a% h3 Q( w5 w3 u& z
if(isOnGoldCoinFixBtn(mx, my))
: g+ @! s) w& o) R& q6 L$ B1 e o return TRUE;! H% o8 Q. F T& ]0 Q
return FALSE; `1 {7 V( p) k/ q' Y6 H! `& J# h1 b
}
8 |" ?# @* l' _! d) a__declspec(naked) void caller_goldcoin()
& X0 ^1 X3 G" d. N1 @+ L$ s{4 n) s" G& H7 U* ?" y
__asm
: N' g9 {, \2 I# G* t! t1 q {
1 Z& x+ c9 L( k3 m push ebx
) ^5 p9 e! j- c* {' b: {) |* w+ D mov ecx, esi
4 M- ^/ d0 D$ y* _! o mov edx, edi m2 P: d' f; Q3 m
call m_NewStatShow_goldcoin* k& z1 m, o- Z' j' K3 T
pop ebx
1 u9 r' L0 _- y9 G$ X8 Q pop esi r- |& v6 ^1 q8 a- @7 u, m! e
retn9 ^6 m; \. x4 l1 @4 U# A
}
3 x; o1 r) s7 p* c( H, u; S4 M" O% l; \}
7 E- ~! g4 O/ U; A! a$ z+ `void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])) N6 H+ j6 y! O. G
{
' T* E p) o( @! W- Z. \! ^9 W& v% Y if (*nXpos > D2Client::ptScreenSize->x / 2)
3 e1 T" |( ]" W4 @" j {
" r" @( }$ j O5 c! R$ Y' j *nXpos = getXGoldCoinFixBtn();, `+ B) D+ O7 Z
*nYpos = getYGoldCoinFixBtn();( x2 \* I) z0 b" x" N3 ~" d. X1 b
}
' C) d, d, g) w h+ C}* D9 T1 W$ M# V
__declspec(naked) void caller_goldcoinimg()3 k2 x% A b; w* r; z3 E
{
& i/ f* F; _2 m __asm4 @# E0 e- C8 I, w* d; Y3 q
{: F x7 B- y8 N
PUSHAD7 t [; k* f8 h" K: M9 L
lea eax, dword ptr ss : [esp + 0x38]$ j, V. v& M$ _5 R5 h
push eax6 M3 I$ c8 ^9 ^5 J8 z
push dword ptr ss : [esp + 0x38]1 D7 n. F9 s( ^0 N+ U
push dword ptr ss : [esp + 0x38]9 n; B8 g% Z. ?% \
lea eax, dword ptr ss : [esp + 0x38]
6 S5 }# i' s. _2 x push eax9 N, S# l& b& A4 ?
lea eax, dword ptr ss : [esp + 0x38]
% K6 ^- N# S- E W* @$ w) }) p: ?/ N push eax3 @0 t) r3 ?+ e* t* U+ ^0 p
push dword ptr ss : [esp + 0x38]
3 f5 W* d- p4 ~3 B& R call m_NewStatShow_goldcoinimg
. v9 O! ~" g% `% }( N POPAD
8 C5 ^9 s; ?1 L% t# } JMP D2Gfx::D2DrawImage
! d- S; z; S5 G8 e/ a+ _5 \ }
$ o( ^' K/ Y* Q}5 P9 X. y0 E5 G) u
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标5 l( }6 v; b, v+ }+ i5 ?
{! h8 A. {- ]% \8 A" b
if (x > D2Client::ptScreenSize->x / 2)
8 p) W4 J' _8 K Z( S {9 J$ K" T4 G$ M7 x0 V1 C
*y = getYGoldCoinFixBtn();1 c3 o& w8 t9 }
return getXGoldCoinFixBtn() + 32;/ D3 E. m. ~% J& d: `% ~6 |
}0 ?) N1 `' [4 K$ P% Q
return x;( w! F8 r3 v' n# _ w# n5 n
}
3 r- Q. e- a% \& T__declspec(naked) void caller_goldcointext()' ^; i) F- z/ O4 {' T: C7 @! t- h
{
4 r# J3 T! Q" g0 ~" ]4 H __asm
3 F3 h- m) D3 l {
( D9 g1 Z% ^% I! R PUSH ECX
, \4 t* r* s! h PUSH EDI
& v$ i3 f4 a$ P PUSH ESI6 w+ D+ Q, C/ I- r/ {! z% ^
PUSH EAX
f( s: e( [7 x& X5 B4 L5 C MOV ECX, EDX. R+ w3 ~, b2 b( h* d
LEA EDX,[ESP+0X4+0X10]
. o0 `) v# X: `# j' t CALL m_NewStatShow_goldcointext
a. m* P( K. |( _' z MOV EDX,EAX8 O1 S0 n: y `& }
POP EAX
( R5 @; F9 @' @& y2 N! x) | F. I POP ESI
+ L7 `1 p. A3 a POP EDI4 S. x6 l: G& S; f% E, b/ l- X
POP ECX5 w; |: D7 [4 W5 Y4 K0 H7 ^/ q
jmp D2Win::D2PrintString;, N7 u0 _. J9 o7 }. y- m1 l8 [$ Y
}
* q4 T- O$ y1 D8 ]}7 ?8 C# q Y$ u0 V( c4 `/ E- O
0 }& A9 P- |" K* O: a/ ]' H
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
/ W H! R! v* r+ u9 i, U! f( L{' n- L- M- [" K4 U
DWORD mx = *D2Client::ptMouseX;
$ h5 V! `+ y# D7 m8 ?- i7 k DWORD my = *D2Client::ptMouseY;
% v& O! q* S$ m if (isOnInvCloseFixBtn(mx, my))
- U6 t5 o( Q6 G6 n' b4 ` return TRUE;
+ x8 d/ g3 q* {' \' {% C return FALSE;, p* L/ z4 `; n1 N0 ^$ A; K1 ?# Q! s3 h
}
2 m$ F3 k! f( y" Q__declspec(naked) void caller_close(): T6 ~0 c( y- S9 Y1 t
{
@) c1 B3 c1 A1 h __asm) a7 d8 [) b, z6 G4 E' F. C
{- {6 d% M8 d! P. ^" B! P7 o
PUSH ESI
7 L% ?/ h- D6 Q2 e push ebx8 B/ \: W0 C( S) w/ M2 Y- J8 _
call m_NewStatShow_close
& Y& f$ u- P: S2 `' y* y. b! } pop ebx. O5 M% I8 h( V$ W
pop esi* g4 T. _9 ~; o8 @9 B) y
retn6 \- L: \9 M0 {1 h9 z7 c3 ? {
}
* T" [6 c$ M7 s3 G# u+ v}
( o! a, T s6 N# k+ ~) e* Pvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
; V# O% f4 r x! X7 C4 Q( Y" V{
3 q- H/ T" w5 G1 i# M; m: E *nXpos = getXInvCloseFixBtn();
: Q+ z! ^# c* @2 t+ S: }$ I8 O( M( j* { *nYpos = getYInvCloseFixBtn();
. z `4 b0 M6 W* g4 w- [' Q}, V8 m! |6 K9 g
__declspec(naked) void caller_closeimg()
0 _# V9 f& l7 W- A# h& ^{+ w/ I# F" Y) m
__asm1 H- F9 ]3 N3 P6 K& v
{
% R* n V* o3 W( L PUSHAD$ C8 u! m4 O( }" W& x) W3 k
lea eax, dword ptr ss : [esp + 0x38]
" x7 @3 p4 b/ t+ [ push eax* e- h3 E' b5 A+ n
push dword ptr ss : [esp + 0x38]9 }/ `/ e; Y# m7 |% A$ f- r
push dword ptr ss : [esp + 0x38]
# f& Y6 f% u8 Y9 o& ?* B9 Z lea eax, dword ptr ss : [esp + 0x38]
% S. k7 u9 |2 V/ c T push eax
$ w( |" m/ N( R0 p0 t( g lea eax, dword ptr ss : [esp + 0x38]
. U O5 \! o5 X3 g J. p: O push eax
; v6 A4 a* a5 ~& O& C1 i push dword ptr ss : [esp + 0x38]$ @2 X/ d7 a: y) K
call m_NewStatShow_closeimg
" c' G! ~; X" ~$ T POPAD. O! d" Z! Z- ?/ g* r
JMP D2Gfx::D2DrawImage
\! _0 b# r; o! R' ^ }
; A: W! L. w. R2 _}
/ | G. j: Y; t) s# P' N0 q; h+ [7 W' Z' u! e
' h- ?6 F, u" v. g7 {3 Z5 j
|
|