|
|
转载8 Q. U% h, j9 {2 ?
BY SJ
9 p0 W+ P$ I7 @/ S: G2 ]6 Y; p首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的): b9 F- k# w& K( O
j1 A5 E p; H/ w; w/ w1 i
D2Gfx::D2DrawImage-100418 t- x: z6 I4 e0 {5 q+ h- o
1、修复技能的背景(不需要可以不要)
) A' ^( b3 Q! N, w7 aoffset = D2Client::GetAddress(0x77AA8);
; b& W5 T# l) p* XMemory::SetCursor(offset);
( I! E& w9 M: ^4 \Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);* B) p( ?$ B6 e6 o3 a
3 \. B- X9 O2 A: V% C) e6 D- j
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
; n* R3 Z6 V! r2 G2 G8 c{
' }% e; _3 v+ {5 o5 { //Init data for print image/ b& Y. K0 }4 {- O F
sDrawImageInfo data;
% h. {; ]' ]# f& P7 d( } ZeroMemory(&data, sizeof(data));
$ `4 ~; c1 c" k2 {8 i6 _! u( V/ ~
//print background
8 L' S4 a" V# X# D setImage(&data, spellBackgroundImages);
. E& N& w$ v0 A3 r. r& E setFrame(&data, 0);( T$ J$ S' d2 ~& J& G$ V3 {6 M
int fixx = 511;8 f6 n* {2 {2 h
int fixy = 9;, T( \3 y1 f, k& s: l
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
2 q) ]2 c8 F; }1 i/ o setFrame(&data, 1);
2 z' g9 ], M% ^& m- A% W3 I D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256$ i$ k% G. M1 e d' j
setFrame(&data, 2);$ i4 Y% x# w$ t. J- m( T# s
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
# V' A" d# B$ ?0 Z2 b8 }) ` setFrame(&data, 3);
1 A5 @) f3 ^% Z) r5 d D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
. r0 D' N9 I+ ~4 t; c}( d& e Z' g. J" y) S* R
__declspec(naked) void caller_SpellBackGroundFix()! i. Q. s1 ]1 F, h$ _! V4 n7 W
{
5 A( N5 ?, Y* g. J3 \3 U7 E __asm; ]& y+ r3 @% e0 U! b, d6 S5 B: ]
{
1 r2 m' b8 R/ ~" ?9 g. u PUSHAD7 M, p9 g( h8 C6 P0 H8 t
lea eax, dword ptr ss : [esp + 0x38] ]9 Q- G/ V& z/ G( U0 c ]/ i$ B$ U
push eax" _+ I0 o! I# Y0 I9 i f
push dword ptr ss : [esp + 0x38]
9 r9 P0 N! Q% o push dword ptr ss : [esp + 0x38]
) k' \6 A! b1 W+ \1 w2 A" ^" e lea eax, dword ptr ss : [esp + 0x38]
- Y7 R% @6 k: R8 m- ` push eax+ M# V2 h$ d1 M: T# Q7 t; _( u
lea eax, dword ptr ss : [esp + 0x38]" e- H3 n- x' G( B/ H' P& p. K% R
push eax
9 W6 w0 e2 H. O/ F1 m l! f7 f push dword ptr ss : [esp + 0x38]8 ?1 ], u9 P1 N! o! T
call m_NewStatShow_SpellBackGroundFix* V- J2 X. m$ G
POPAD
, ~+ ^) f' ~3 y/ _ JMP D2Gfx::D2DrawImage' F3 u! x4 e' M4 F `2 I6 \1 L m
}
! W/ Q6 {$ U5 f' W}9 g. r& k; {) d9 J7 f7 m
6 G9 B# E9 F- R7 @- r! q% v2 d) a
2、我们如法炮制小站的背景
& s2 B7 t' I, ]# |
1 J- S7 W5 N8 L, Loffset = D2Client::GetAddress(0xAB010);3 t7 a# ^0 x, E! M9 B/ a
Memory::SetCursor(offset);( i, h9 l7 Z+ N
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
/ W3 j) u+ b; _, F
Z/ R& u2 D. T4 P: [: C# Nvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])7 E8 H/ i5 F [1 u* L
{
: m# x6 j: }9 b% [ //Init data for print image
+ e: ?+ s: ^* z* `) A3 t, S& W sDrawImageInfo data;/ R" W8 {" P4 D
ZeroMemory(&data, sizeof(data));
9 P' {2 v4 f! ]7 {/ S3 u8 p$ h7 y) @5 ]) Y/ O l, f
//print background1 W% ^, A8 M7 f6 H/ e( F: k1 ^
setImage(&data, waypointBackgroundImages);
( K; ^$ t& U7 h* f* h setFrame(&data, 0);* {- a5 _9 Y' n0 h8 j, a
int fixx = 0;
9 n, Q1 Z; N& f' H. A* X int fixy = 9;
4 y" D& j& T T( q D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);/ f: l5 i' y' D, f" a+ K
setFrame(&data, 1);8 p/ D. \: ?; |% a2 _4 h
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
! } D P; `6 ?- r* W2 `$ q setFrame(&data, 2);! w: J0 B! ~: w* P
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
: w% V, A5 R% E- ]5 u( O& L/ b& Z6 _+ P# y setFrame(&data, 3);
: j' `% o3 T! Z$ R D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
% e }, B- y3 P; j$ W! U( w! m7 l( _* F! p" V) ?
}, D7 ?8 P/ u) ~' u+ b9 n& d
__declspec(naked) void caller_WayPointBackGroundFix()
/ T9 D& _1 g% t4 r N7 {{. J* [( Y. p- v4 ?: T
__asm
# o: p6 C/ x+ v3 E% g+ H {
! T: ]7 h0 z1 y2 w5 J' t& s1 Y PUSHAD
7 w9 l0 I" e* Z: _ lea eax, dword ptr ss : [esp + 0x38]
6 w4 l5 l4 G, w. m7 Z1 m& I" R push eax! @2 Q5 X& W$ J) x. \( s
push dword ptr ss : [esp + 0x38]
( s# Z; p) V" K! j. O1 y3 h) c push dword ptr ss : [esp + 0x38]
5 i3 _# B) I4 G- g8 N! k' l lea eax, dword ptr ss : [esp + 0x38]5 g9 F0 \4 P3 r
push eax
- j4 L) L9 S. z* W, Z1 U6 P lea eax, dword ptr ss : [esp + 0x38]6 K( X5 H$ j/ [0 ~8 f- g% x) g. x
push eax% S! \, v1 E6 P. X% Y
push dword ptr ss : [esp + 0x38]7 Y( q* I/ c8 p0 i) e" y/ v, r
call m_NewStatShow_WayPointBackGroundFix/ J5 x5 L7 H% c/ M4 {) e* ?
POPAD' o8 [4 i, v- x$ V: K) l, d
JMP D2Gfx::D2DrawImage$ u5 `/ I& p- M+ @# k) z
}' c: V+ S1 Q+ ~6 \" y
}6 g' f) W+ F1 q( B% T: w
8 p! Y6 v1 X1 f7 N' r
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
- c( C5 `+ m" T m. I腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)1 A7 z, |7 ]. K. |: j, p; U
{
( q6 u2 U+ [: `2 g& N' {: h+ ` class D2MultiRes : public Library<D2MultiRes> Y: j" t) i. w( g1 T
{
, Y2 N: t8 U8 d, b public:
- \$ P* R+ F! }0 k8 P) T( O/ N static void Init()7 E {/ J4 H4 o6 X7 r7 E$ p3 h
{/ T0 J" ^. ^5 s; ~; x
Name = "D2MultiRes.dll";/ |: t# z) X/ U% h6 ^3 ^
Offset = LoadDiabloLibrary();% B) f" P9 b- D; t, b' j
}
) L4 Y5 Y" B6 V! k3 C };
7 S1 w7 f# d# g; }/ s( o* z- [- K D2MultiRes::Init();/ i( Q' ^$ H6 I
D2MultiRes::HookLibrary();
! B0 j9 _0 Y* f( D1 H2 @
9 c/ ?9 {5 z! D& i" ?
3 k9 r7 M9 L. K& `: ? MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
1 R0 B# ?. R) d, i: i0 R Memory::SetCursor(MiscFunctionsOffset);% C6 }1 J, }9 e: t
Memory::ChangeDword(0x1b0, 0x200);
, p9 L1 o! ?5 m7 M6 z9 q0 `" i7 C. g& A4 N A, Z: \6 A
% N% x' H# A2 y, _0 X% O MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
1 @$ _. N! ^5 A# y: u Memory::SetCursor(MiscFunctionsOffset);
5 E* B/ C2 [# x6 n# G, L, ]. n Memory::ChangeDword(0x140, 0x200);
7 P7 g, e) N- C | h
/ V/ R5 }+ n r' w6 f K/ L3 }' }! ^8 b1 X% ~) }3 V* W
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);! s; W4 j, E4 a c8 y
Memory::SetCursor(MiscFunctionsOffset);
/ H) k9 Q9 t& R4 H/ v7 c- Z& M Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块5 Y" e C3 ~: e+ C: X/ F' t6 \5 ^* X
) @% {# U9 K7 M9 T MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
- F9 m7 j! f3 r Memory::SetCursor(MiscFunctionsOffset);6 W" R8 J+ Q/ P8 g% [
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
8 I" F3 w- }8 S0 ]
. |% o; d$ y% Q u0 F1 b$ o# N) ` MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
0 Z; Q* {& ]0 Q4 |1 L9 f Memory::SetCursor(MiscFunctionsOffset);( E$ d3 e6 c$ ^0 Y# ~- O/ A5 a
Memory::ChangeDword(-0x280, -0x400);//这个不要动) ~ G- o) u# N; i
}8 ~8 t) f1 @. H0 t7 _0 j
1 F# R* ?' X# r8 O- _, P" x' S4、快完成了,是不是发现金币啥的位置不对??
: x2 X. F% ~$ B+ T/ Q
: z4 S! {8 v$ a* a//这里修正我们的装备栏
. w: }! ^8 @+ U' f7 ~ offset = D2Client::GetAddress(0x99B6C);
/ m4 `8 M; H( |* d Memory::SetCursor(offset);
; R: w* ]# h, }5 y# ~: B( f q/ r Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
. B+ c. V6 f8 I, X
}0 _% u0 ]) \; s offset = D2Client::GetAddress(0x99BA7);
+ e1 Z& b' p1 X l Memory::SetCursor(offset);2 z& ?7 s& H4 Y* Y
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);' F. M: X8 ~" \, V- `
* d2 S; J% D, g! [ offset = D2Client::GetAddress(0x99BE2);( E1 a# E; x$ _( h% s( B
Memory::SetCursor(offset);' U, _+ u" b* Y4 }5 }
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);( ] X1 X8 G m6 o, R3 v: L
' y0 c" }. A3 {0 I4 ~) C7 P' I/ [
offset = D2Client::GetAddress(0x99C1C);
! ]5 z$ f# t! m6 ` Memory::SetCursor(offset);: |$ ]. v9 O! r
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
$ z% l0 G9 W# d, W6 r
" ~$ C6 m* K% h. p/ n$ f //取消两个popup,偷偷懒不过分/ N" V' U3 x! g7 C+ n# D
offset = D2Client::GetAddress(0x9386d);
' g# i/ e L- X9 q4 s& { Memory::SetCursor(offset);
2 B/ D' Q: S( l* T9 _ Memory::ChangeByte(0x8b, 0x33);5 U$ P: W! |: r! ]* B: @0 l
Memory::ChangeByte(0xc8, 0xC9);
% ?4 _6 J/ K: \6 e6 q6 b offset = D2Client::GetAddress(0x9390b);: X2 g5 Z9 j+ P4 G' V
Memory::SetCursor(offset);
- h |; {. t7 }( ] Memory::ChangeByte(0x8b, 0x33);$ Q# w0 O& M5 `$ h! O6 N
Memory::ChangeByte(0xc8, 0xC9);
3 G( Q% l$ m; d1 ^* O/ Y* g7 A5 F+ Y V6 H* G
//修正提取金币6 p7 X8 v( b0 ]% c
offset = D2Client::GetAddress(0x8D3E5);5 \: B* V" R' v( P3 D3 i
Memory::SetCursor(offset);
, q2 ?9 H! K# y: M" Z Memory::ChangeByte(0xA1, 0xE9);8 y7 v, o7 u# `3 ~& n
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);3 v, D- Q1 W3 U; t3 u
4 j2 {5 Y5 [7 _
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);; a9 A' K3 A& B) N
Memory::SetCursor(offset);
0 X' k' G/ d; \2 J6 ^5 S& _ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);9 w4 `$ d. G& S4 |
) {; Z% `# s+ w( g |+ Q offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
+ [- J& i8 ?! v/ o0 u Memory::SetCursor(offset);6 u" d/ Q8 J! u
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);: ~$ a1 U+ z# H+ f, l
% ?+ x a- w$ D6 H
//修正关闭按钮- N/ {, j4 x) q; _, v" @0 Q1 U! n: \
offset = D2Client::GetAddress(0x8BD90);
( Y& J" h2 ~ N' b: t* }; [ Memory::SetCursor(offset);0 o2 W* v' n% O, h3 J$ Q
Memory::ChangeByte(0xA1, 0xE9);5 R4 b- l2 I/ W% R0 p, u1 Z& v+ S3 ~5 L
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);. |/ z7 o7 O4 l
; d: w" o' M# V4 ~ offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
( l# j1 I4 @$ [1 v' k5 U Memory::SetCursor(offset);# |6 T0 t1 `% U- K( M
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);5 s0 p7 p3 K" ~9 }1 U1 z: g
( W. w! @8 b" |6 [% }* E
0 s1 J$ y" x+ _: _//以下是细节7 ?+ i; a4 R& R" I o, r+ l
#define getXGoldCoinFixBtn() RX(0x2d0)2 r8 p! `: q6 z, f
#define getLGoldCoinFixBtn() 32
* p0 m! O) I# |: N. N#define getYGoldCoinFixBtn() RY(-0x59)& Z k- a/ O+ F- o7 k4 h
#define getHGoldCoinFixBtn() 32
, m8 Y; H! `5 g3 E#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn()). `/ l+ l, I; m" d9 F% c3 C e
; T) n1 [" N8 W4 o$ u; @$ u$ c! J#define getXInvCloseFixBtn() RX(0x3db)8 U) f7 C$ U8 V' ^* K8 p
#define getLInvCloseFixBtn() 327 E) i; f, q/ C8 X
#define getYInvCloseFixBtn() RY(-0x63)
4 ]4 W& c8 e i#define getHInvCloseFixBtn() 32' N7 n# f* G9 Q6 M- m. R7 r
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())/ D3 q+ [2 q8 g& p
+ b2 x4 f& i+ w7 {( T4 c. n
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
) {! G$ A( I+ f- O5 f4 q& @: d. A& v{
" u" A) W8 x( {( ` DWORD mx = *D2Client::ptMouseX;/ v5 X- |3 B7 ?! W4 y* w, o7 {- a7 w
DWORD my = *D2Client::ptMouseY;
4 h `: _$ |( s" k; \" S( X( W if(isOnGoldCoinFixBtn(mx, my))4 N {" }1 [$ R8 X+ t. C$ z5 t' ]
return TRUE;
5 w8 o( r; `0 @9 R |4 E; M5 S' o8 v" J return FALSE;
" Y- @- e+ \1 a4 d. g}
4 A8 g0 O5 Z, Z1 V__declspec(naked) void caller_goldcoin()& G* a+ G" A: y5 D1 @
{
5 A9 c. c5 {+ n" N w3 z1 O: z __asm
$ E# p, m8 k @, s* o8 ~2 D {. |' `5 b- t' x9 i
push ebx5 O. s+ r) u7 a
mov ecx, esi
+ a# ^% }( {% x mov edx, edi5 ~, P) J$ S, r$ ?) n
call m_NewStatShow_goldcoin1 ~- t- M$ I6 T9 z
pop ebx
3 O- L9 T& `3 P. a pop esi
$ l8 |7 I, Y7 m$ H3 W retn* P) I$ {# r, ]: ~' m: S
}
4 [/ r( E- r" m: X. ^7 F}% w! F* D: z% F$ B- ~7 I+ X- P
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
+ b* Y) w. @$ x% e4 k6 ]{
& `: U, l" Q0 m$ i. k3 F if (*nXpos > D2Client::ptScreenSize->x / 2)" F* E. W! e+ y
{* o, ?* T: M/ B# _
*nXpos = getXGoldCoinFixBtn();
' t2 u4 ], p% e *nYpos = getYGoldCoinFixBtn();% k% H7 ~, ^9 \* [6 a
}
3 s1 l; q% N, S& ~}
: b8 x) B3 I8 C. _8 v__declspec(naked) void caller_goldcoinimg()/ e. o( x- V9 F& b# f
{4 ~8 J9 `1 V9 U+ T+ T: X
__asm
* x( b/ q- h4 t+ G: m7 t {7 A- ~% J6 F3 I4 y# |, s2 v
PUSHAD
+ q( m& H% ]" e6 }, W0 ]0 O& T) Z$ c lea eax, dword ptr ss : [esp + 0x38]5 e. Y( h% P: b. n
push eax
. E2 W6 E( W! \9 ]- T* W( t push dword ptr ss : [esp + 0x38]) ] P8 y+ o5 S: G- U
push dword ptr ss : [esp + 0x38]5 R% S- F. Q b
lea eax, dword ptr ss : [esp + 0x38]
" o$ S( u7 b$ n# H9 l push eax3 y+ A7 M! m5 {0 ~, S+ L
lea eax, dword ptr ss : [esp + 0x38]
* o: L% r- H+ D7 s, B8 a; }( p push eax* Q1 L2 }8 J- C) g. t( ^
push dword ptr ss : [esp + 0x38]
" a! f& w% U# c1 Y0 O+ R, Y8 C call m_NewStatShow_goldcoinimg; b) c2 G# C9 [9 r
POPAD9 q1 e. M2 `( N9 C6 C& g5 ]9 B! O
JMP D2Gfx::D2DrawImage; C( L1 D4 L( R, R2 g- D
}/ b3 {) G3 g5 @8 Z7 K0 z- f. ?0 m
}
9 d$ t) R' B; H4 @DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标6 W( [# r4 G# ]6 g/ F* V" q
{
$ m' @- k5 ]2 k5 V4 I, I4 r$ C if (x > D2Client::ptScreenSize->x / 2)( J; J1 H% o G; s. P5 L
{, i# k# }" L5 y8 h, u% c5 X; o
*y = getYGoldCoinFixBtn();
, T3 ]! v9 C& X& P- `8 E return getXGoldCoinFixBtn() + 32;* u3 K! v- f& k1 B/ X3 X
}
, }0 d# W4 s( b' T7 l1 I return x;5 W) V8 Q1 A* I9 ^4 U8 z& Y; K
}
s) _+ v# l% V1 j; \__declspec(naked) void caller_goldcointext()
% L3 w! s! H7 b& x0 A{
5 z* k U. Y/ {! I% P __asm( O' c7 J% y$ l- U1 y: u
{
0 c1 C# ^5 a) w& | PUSH ECX
0 A6 T% z/ ]- t. R. D# R PUSH EDI1 y( S+ p1 [0 ^( ^- _# j/ G
PUSH ESI
3 A' N' d, ^' r8 Q$ s2 a. @ PUSH EAX. B8 L; f+ r1 F2 p
MOV ECX, EDX* N1 ~9 Q# m5 N% t4 N
LEA EDX,[ESP+0X4+0X10]
' Z v/ j) L/ `- l1 w/ M CALL m_NewStatShow_goldcointext1 e9 D4 A/ A; i: g
MOV EDX,EAX
6 ~2 B0 W8 g6 a+ v+ k5 p6 @0 o% L POP EAX
: F, a/ t. j6 M9 X* ]1 ~' S! z" I POP ESI
' O- t' q1 j5 Q" e3 B POP EDI+ v7 D/ m# g8 b" b2 _
POP ECX( Y+ c" g9 f9 D- h" L$ r* x: E
jmp D2Win::D2PrintString;
$ g1 Z$ c4 M! B) [- z5 S( ^ }: A* w) i9 ^+ T2 {
}
' z; T* I0 @2 k; [+ A, w8 E" p, ^) T/ B1 F
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)4 A6 d( n- Z2 b" ]# V' r6 n2 S v0 v
{( G. j; c9 S& X. o/ u) l
DWORD mx = *D2Client::ptMouseX;
( Y. d& R5 C5 _, p$ t0 z [5 I+ p DWORD my = *D2Client::ptMouseY; ^- x \5 X8 t
if (isOnInvCloseFixBtn(mx, my))( t# w% k9 @9 ?" S' s
return TRUE;; z3 I1 A* f: s# [ m" {& S7 h3 |0 d
return FALSE;( H/ L' P# t2 c9 U
}
4 E9 i" r, N6 z* P" ^" S1 b+ U__declspec(naked) void caller_close()- F" U2 R5 @9 Q+ r
{6 J2 s2 d p$ v0 P+ Y
__asm7 W+ ?; t! }+ w
{
8 s3 H P" ^9 J" {" h. G$ t PUSH ESI
0 V' h% t9 Z4 d& y2 ?$ k u push ebx
, e3 [# n' d U8 ~ call m_NewStatShow_close
. Y5 Q( q8 m- w% R$ f. v pop ebx5 \, m; G, y5 P. o
pop esi
; ?. j& q- H% ^8 V6 O retn
0 m1 E5 ^" D1 b" c# E }
# c2 o, E8 d9 R. N+ s5 |}
/ R+ f$ o, H/ w9 ovoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])$ t0 x) {' |2 l$ V3 [; M
{0 n# |5 p2 i( O: ~8 }8 T; J
*nXpos = getXInvCloseFixBtn();
% n a: L# G5 d& Y *nYpos = getYInvCloseFixBtn();7 B) I+ p; V$ s8 S- J
}
2 g# v# d: y1 K2 U9 y__declspec(naked) void caller_closeimg()
9 U) ~, ]% @# b/ X" Y{
+ o2 {/ K9 ?7 z* t3 c __asm
: l& L5 a$ `- n1 Y9 i {
% z+ V- ^& t4 A D' I; L PUSHAD
+ u1 U) e6 F+ u6 H1 d- U lea eax, dword ptr ss : [esp + 0x38]
- K2 u- `* u, H* B% l1 C& L' k" x push eax
$ e2 m$ A8 n6 m; M- G$ r: ~; h push dword ptr ss : [esp + 0x38]
! H% c9 h* t3 l4 k. m push dword ptr ss : [esp + 0x38]
4 W0 N1 \# N3 {$ \ lea eax, dword ptr ss : [esp + 0x38]" k0 U, o; F8 J# K8 \/ x3 a- v
push eax
/ `) E6 I, D3 w) q% m, t4 N lea eax, dword ptr ss : [esp + 0x38]
# F( w$ P* @& i% {: m1 ~$ O- f push eax
2 U- m. i- w# \/ L9 k push dword ptr ss : [esp + 0x38]* X) u2 u* u/ m$ c8 ?2 s
call m_NewStatShow_closeimg. f5 ]( @; y- |
POPAD
3 P* S e! r0 T" Z$ K. s JMP D2Gfx::D2DrawImage
' m1 Z7 u8 I, D Z8 w }4 j5 Q. \- U7 k' B, R/ ?' T8 k
}
2 j+ `; r( q7 y" U( A
# \2 w3 U- G. ~( U* Q
; m- m' D% \9 G2 @2 @# p3 u9 ? |
|