|
|
转载
. N+ P" _4 v- L* EBY SJ8 C9 o! a5 y1 |4 x6 D
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
2 o$ ]6 X# E2 s$ o7 T% S5 h- g: L+ p( I
7 S# C" Q4 x/ b0 L2 cD2Gfx::D2DrawImage-10041
$ Y% |" x# W X7 L' u. ~1、修复技能的背景(不需要可以不要)
; u2 s! U9 {( d1 F' b0 }offset = D2Client::GetAddress(0x77AA8);
" l9 A* l# H% B2 }! G8 I! w% {Memory::SetCursor(offset);
+ v6 v8 k. X9 l5 mMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);; q e# ?: i5 C3 k9 A
9 Z% ^5 X" {. D9 V5 t, T9 Z
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
`! c1 ]& @, i* l0 {! |" E{
: o% j) @4 ~& a- q //Init data for print image
: c5 o. v+ W1 c' \ sDrawImageInfo data;
2 [5 Q Q9 W0 J' [* l ZeroMemory(&data, sizeof(data));' J e7 J: Q; e. h8 F, @, H
4 R' h( \3 Q9 C$ z* e, I4 A5 N
//print background- G: b4 d- ?6 W2 P; ~ K
setImage(&data, spellBackgroundImages);
8 K: u, q+ q4 m setFrame(&data, 0);
# K- p% F0 t# R4 N* z. m9 _) a int fixx = 511;
1 z3 O, N# K( a int fixy = 9;
$ |! J7 m+ n0 z5 `/ n# f* ? D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
, [* O) p3 _: T8 D4 m& j3 x; C setFrame(&data, 1);; k" M2 P* A2 L8 ]4 G& S( T* f
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256! P: u3 y# j5 {5 C# W4 k( [8 `+ m
setFrame(&data, 2);1 r: o& `& C, ?8 I" L) q
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//4327 r4 y, {6 U5 s2 |% k
setFrame(&data, 3);# @3 \9 s' A* l
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
: d7 k- f' A3 v3 L; b( @$ M}5 l$ k' r! I' K& U
__declspec(naked) void caller_SpellBackGroundFix()& z% |8 t& @. V* o+ p
{
6 ]) z& w+ c' {3 k __asm" g7 O1 H. L9 c% X% @
{
X; D8 {0 `, @9 w PUSHAD4 m: \7 d) F3 J
lea eax, dword ptr ss : [esp + 0x38]; O' f/ ~( p; J8 C
push eax* F% F+ T5 h& t: }: ?
push dword ptr ss : [esp + 0x38]. Y9 v' K4 Z9 ?
push dword ptr ss : [esp + 0x38]& m9 I3 ?7 Y/ |, p( b- W6 `
lea eax, dword ptr ss : [esp + 0x38]
% U8 Q, M/ K8 f5 x5 \, ~ push eax
; H! D2 _3 d; Z' r* p. a lea eax, dword ptr ss : [esp + 0x38]
' R. }* x: a0 [: g! [% L; Y push eax# J! c6 C* f" b( j4 f8 {9 t' i
push dword ptr ss : [esp + 0x38]' E* x$ x& x( @; e& S
call m_NewStatShow_SpellBackGroundFix
5 t% Z0 }# b5 w4 D' c POPAD
% l0 J; s5 g( q8 N+ ? JMP D2Gfx::D2DrawImage
9 O) n+ X) f3 O0 {: @ }
& |1 R. S. W4 U' h; H}/ j- m) d1 U, X, h
5 W+ t7 ?% y6 C$ c. t. {3 t" R, C
2、我们如法炮制小站的背景
5 f) Y5 U& l1 F* v- U1 S
# C3 T2 n J4 C9 M$ ^offset = D2Client::GetAddress(0xAB010);: u" | ^# m8 Y% @
Memory::SetCursor(offset);9 X8 `" T r3 E: m% j4 \; z
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
B( X9 [# \2 M; j3 U0 s& \; j1 @5 v" D! Y* [# I( O9 ?; _
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
: F0 Q( {2 w% F. R$ R{
5 L' ^* H9 z. z3 l //Init data for print image
7 Q5 \0 T6 H9 d3 m- B# p" s sDrawImageInfo data;: b, e4 \9 a( w8 ]' y4 I# W; f
ZeroMemory(&data, sizeof(data));
1 i5 _ |. ^+ Q/ h# p. \# u1 X
$ }) ? D& b0 T0 v, g //print background$ p( w! [2 x3 m1 x6 `
setImage(&data, waypointBackgroundImages);
7 p# @ t/ r; g' j) D, \) |/ |( e setFrame(&data, 0);
8 W, [- f+ \6 t# G, R! {, {7 ^ int fixx = 0;
: y' V1 H# G- g: p0 W4 P0 W$ _8 t int fixy = 9;# Z4 w W; \: |: F1 T. D' A
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
/ g5 p/ s3 I2 ~, T8 P6 c0 u setFrame(&data, 1);1 n, j9 D- f' x
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2563 i1 f3 Z" Z5 O" y: ]* M
setFrame(&data, 2);
S4 k, [1 [1 o, w. V D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432+ |: m7 P# G$ K+ F7 Q' Q
setFrame(&data, 3);
4 r! Z* y5 h( T; L5 A1 m" Y! d D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);2 r( Y; v& D6 l2 q, z4 K7 |' r6 y
; e O9 ?1 V9 L2 m* i
}
: v3 ~! h( m" q; K& N X. T- r) ^__declspec(naked) void caller_WayPointBackGroundFix()2 _2 ~6 M( z* g# _5 N
{
: T! d$ M/ s6 U. b __asm
) {* H' Z. m4 b& R d8 b. V' W {
' Z2 e |- n8 |: |( z PUSHAD
& ~: E4 _0 a' C+ {/ ?6 q- o x lea eax, dword ptr ss : [esp + 0x38]" Q% C5 Y! a7 W" g
push eax, z4 I! m! ?8 v
push dword ptr ss : [esp + 0x38]' P- ~' z9 f8 p& M5 J
push dword ptr ss : [esp + 0x38]' z) w' z# Q) A- x- \6 x
lea eax, dword ptr ss : [esp + 0x38]( ]" H4 ^, U2 Q, b1 H
push eax
# ^2 r; N5 j* J5 x+ @2 B3 l' O# h9 Z lea eax, dword ptr ss : [esp + 0x38]
+ f2 g7 a' T2 j% y9 L" F push eax; b% s: h6 j, `& X9 l
push dword ptr ss : [esp + 0x38]4 M6 E( Q5 h, W- ^) p6 ^+ M7 K2 b
call m_NewStatShow_WayPointBackGroundFix
1 x4 u+ a' P5 S- S) F7 L+ h3 a POPAD
/ ~- e8 Z3 y1 y& O JMP D2Gfx::D2DrawImage
! R/ N' a0 ?- z8 S) i8 p: X) @ }- S- K7 }& U* j5 F* c/ p
}' h1 Q9 y& n8 b5 p- S) W% Q: Y; c- g
. ^7 I1 l# t# r F5 u6 f
3、以下可以搞16*16超级箱子-腾出我们需要的边缘# ^. M9 @' e9 ?+ `3 ~* _5 Z
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
; W1 e G9 R% a. w' F {
8 H1 O% c* m6 _# d0 x class D2MultiRes : public Library<D2MultiRes>* }7 C6 b- R3 A. W9 O/ _# Y; @
{
3 t# i8 Q9 x4 \8 V, G public:
- G- Q# c- s1 u+ U0 h! M static void Init(), \$ ^2 \7 c: Y; O" A
{
0 c' g' C$ ~+ i' G! C, d* L Name = "D2MultiRes.dll";2 [0 n9 Z) v, {. p7 B4 N' K
Offset = LoadDiabloLibrary();
6 [3 }$ G7 m( }1 W n& }; B* p }
9 l0 L) ]( S. x: p: r0 n. ^ };% F1 G. r3 `$ H1 V/ X
D2MultiRes::Init();
- ~4 _2 B* H) {' O- p D2MultiRes::HookLibrary(); t M& q& x; O9 S# E# ?5 x
0 y% w' Z0 u/ o3 ?* U
. G0 K2 v9 _7 [- u MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
& s: E% a6 o1 s Memory::SetCursor(MiscFunctionsOffset);
( h1 ^+ X! t8 q$ a/ h Memory::ChangeDword(0x1b0, 0x200);
- S0 L d& ~/ h7 e h. [2 Q. A6 R6 u( s
. ]/ h B4 y3 _/ @4 P; Y
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
$ Y* @: z r5 x: |2 w4 i Memory::SetCursor(MiscFunctionsOffset);; k' k$ w( I2 I: }1 G j
Memory::ChangeDword(0x140, 0x200); b: a, j9 ?; A: M
8 I8 ]) ~5 u, [3 |- @( n4 O5 k
& H* V1 d; e( @ MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);. f0 e( C: y/ r- M1 }
Memory::SetCursor(MiscFunctionsOffset);
0 e4 t) X- d* G" D6 x Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
, S3 S, y0 r# r& D5 ^ z/ P
, C/ D: M; `0 O& Z MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);! s3 F3 k0 {" Q5 g7 n3 p5 R+ T
Memory::SetCursor(MiscFunctionsOffset);
8 p! f+ I9 b" O1 m$ g! L Memory::ChangeDword(0x200,0x299);//下边缘 299最大
3 l9 q$ T' S6 r6 r0 K! S; @, \3 Z: T
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
% M. @+ z3 E3 x9 q Memory::SetCursor(MiscFunctionsOffset);& {2 A: q& `8 \
Memory::ChangeDword(-0x280, -0x400);//这个不要动
* u n4 D Z) E6 N! @5 `) j }% x" }. x, _# }. s
2 G# X/ j G: c# [5 b
4、快完成了,是不是发现金币啥的位置不对??
$ b: \: p# K. u" h; @ Y$ y
. N# V: W. t* j1 v. c5 r: P//这里修正我们的装备栏
; ]5 ?* |" I- `1 w0 ^% F offset = D2Client::GetAddress(0x99B6C);$ Z. L) L+ O% B5 C7 n- h$ x
Memory::SetCursor(offset);5 ]. S2 y w8 }5 k5 A* _
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);* {. o- h- B* O+ W2 j
6 o; v; ]) O% x0 Y4 }8 R" S& j E offset = D2Client::GetAddress(0x99BA7);, v) j1 I0 o& Q& E6 g, G. h
Memory::SetCursor(offset);6 {6 [4 Z6 k) j2 h- N& T* F ^; H) u3 a/ |
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);* F& w, g! Z0 Z$ ^
' K( [! H5 K/ _6 r offset = D2Client::GetAddress(0x99BE2);1 J2 L8 o3 R4 p
Memory::SetCursor(offset);
- I# d; b* @' T. }7 { Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);% E p8 @, E w
- S T8 N4 q0 r% y, I
offset = D2Client::GetAddress(0x99C1C);
7 u4 a9 M* A8 x( n4 }& U- y1 ]5 R Memory::SetCursor(offset);
5 [' Z" ?4 S: `9 g/ _% |/ Z Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
8 ^: N1 J W( i4 s) R4 ?1 m! a. x# I& s2 H0 b8 c% P3 U# o
//取消两个popup,偷偷懒不过分
9 G! ^4 L, z8 a7 Y4 O& @8 B" ~ offset = D2Client::GetAddress(0x9386d);
" B2 j* X* O: @ Memory::SetCursor(offset); H* ^) `% |. Z2 E2 ^
Memory::ChangeByte(0x8b, 0x33);
; E3 }: ^, M1 y: ]1 d& O1 Y Memory::ChangeByte(0xc8, 0xC9);
- L- J" x: P" e% ?% z offset = D2Client::GetAddress(0x9390b);
* U+ E) m. A# ] J5 ?5 X. u Memory::SetCursor(offset);
9 W; }7 R7 H/ y Memory::ChangeByte(0x8b, 0x33);) I' O7 }4 P- C/ `
Memory::ChangeByte(0xc8, 0xC9);2 T$ d4 J3 Z+ D" H/ k: }& n$ A' E1 a
* u0 f+ J) K9 q9 }! b4 H. F7 h
//修正提取金币) I, O" F5 H5 i3 V- Q) x
offset = D2Client::GetAddress(0x8D3E5);; ] s. A$ {! f
Memory::SetCursor(offset);4 T2 r0 V4 Z) k* o( H
Memory::ChangeByte(0xA1, 0xE9);0 _( y; j! ?; u4 c x6 g9 T, a
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
+ x& p) W9 Z& X& V3 q- G1 }- r6 ] c; `7 _! h W
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);/ \0 E8 K9 E0 h* N
Memory::SetCursor(offset);
7 _- p, ?6 I" q Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
9 P" s% c* G8 m* A
* g4 a2 [, @9 r offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);5 y1 M# A: s5 O
Memory::SetCursor(offset);
& y6 _0 \) {" ?, {; a Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);! g& R# E$ S. }* G8 b
1 ]: M) C! b9 k( B) H
//修正关闭按钮" j! F" b: m! K8 a: ]- s
offset = D2Client::GetAddress(0x8BD90);2 J4 n7 `4 x& Q; X+ Y) D- J& W
Memory::SetCursor(offset);5 f' ^) i1 ~0 X6 }6 O
Memory::ChangeByte(0xA1, 0xE9);( u/ n$ }! C- e' w/ `* ^; E8 M. Y
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);+ W& o. P- m6 L+ a3 M# M& @
/ l9 B6 l% O! r4 R% u9 J offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);- r( m, C* j% a8 z# |3 v6 b) U- p
Memory::SetCursor(offset);/ f+ h: A$ \% Y. ?' L
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);, X. Q4 n! D, H9 k X4 J0 q
1 e- Q6 W" Q3 l
& J( H" P* x8 ?" J( X//以下是细节" T0 J9 L& d" E
#define getXGoldCoinFixBtn() RX(0x2d0)
) a! L% [8 S B#define getLGoldCoinFixBtn() 32
+ Z: Y* L1 X! ^4 w! h q5 m#define getYGoldCoinFixBtn() RY(-0x59)+ B; Q6 }1 _3 z7 k0 N
#define getHGoldCoinFixBtn() 32
( b: j. T! k) l6 o, F2 X% _#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())# X$ U/ B, R3 d Y
3 x8 w! ?; Y1 f
#define getXInvCloseFixBtn() RX(0x3db)
* x( A: @) n8 d* _#define getLInvCloseFixBtn() 32+ e" u2 P& o3 H8 y/ B9 ^9 c
#define getYInvCloseFixBtn() RY(-0x63), L/ h& s8 I7 R
#define getHInvCloseFixBtn() 324 O. J0 i) h& K8 G" w
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
: n8 O! h& |9 T5 R, R3 F( X4 O- s3 W
7 `# i8 l8 H' J) s! [+ s1 fBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
$ y* T4 f8 J( t{0 S# o2 l( w6 t+ m( n$ |7 j
DWORD mx = *D2Client::ptMouseX;
; k% Z v$ s" V DWORD my = *D2Client::ptMouseY;! H6 l- i6 L U5 J5 D0 {. l
if(isOnGoldCoinFixBtn(mx, my))' s$ p; [8 h3 N' m
return TRUE;
% ^9 W- b) p1 H9 t) @/ L return FALSE;
0 T: Y) r/ Z/ a7 h; D}; g U2 z+ b- O, |; |: H% G2 S2 N
__declspec(naked) void caller_goldcoin()
& B$ D: }! Z1 H{' i& v5 Z, S: {5 R$ f0 z1 Y; l
__asm
* I) o% ]3 }8 x6 v" K$ B {
2 m6 [5 O, @; c1 ~0 X push ebx
2 T# V' y4 B; k- o8 e/ a mov ecx, esi& R! L- j, {0 _& d% W% S3 k, @
mov edx, edi
, c! w0 U% R- K call m_NewStatShow_goldcoin
) Z; P( Y$ j- _1 V' D pop ebx
Q, E. J; s5 `" R k2 T! [! _& O3 D pop esi' } H) b: |6 o& x
retn
+ l8 m7 m' w! K% N$ o' ] }$ L) k& z! x/ ]1 ?5 F( Y
}1 V- e( X8 z+ ?% \' p- b/ i6 @7 t6 I
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])# k% Q) z9 I7 i
{1 ~) t. L& M7 G1 J
if (*nXpos > D2Client::ptScreenSize->x / 2)0 J8 c& `# n6 m0 J$ X2 K
{; u }* w7 G* j& ]2 `% z" K4 {
*nXpos = getXGoldCoinFixBtn();
) I" G: l4 k- m i) F$ Z *nYpos = getYGoldCoinFixBtn();
- b/ P U. I9 r3 r+ }6 k& S, W- { }. P& d& @% r- V1 F4 A
}
' H. ]7 q' n9 L4 x- @5 V__declspec(naked) void caller_goldcoinimg()0 r& f8 ]/ L! p {% ?
{
, E! n. i* k3 Z( `" Y __asm
. l- M" I- |% t1 {/ y- D {: s: k: G4 y- F( h6 @; A8 _
PUSHAD! P( g( E& v; `" K0 F! Y0 O1 J
lea eax, dword ptr ss : [esp + 0x38]) g5 g7 f; v4 J0 V3 @4 L
push eax
+ b' D" G- [7 c/ m push dword ptr ss : [esp + 0x38]
) l& T! w$ o1 D. k; k push dword ptr ss : [esp + 0x38]5 F% u& U( K5 N- T0 D- @
lea eax, dword ptr ss : [esp + 0x38]$ p" g |. |- y2 }7 {+ i3 g1 { [
push eax% E# c- I5 z7 X9 }
lea eax, dword ptr ss : [esp + 0x38]
( i/ I5 [6 U. b3 c9 ?. ?- j push eax U6 T( S7 h( q, r
push dword ptr ss : [esp + 0x38]
% o: e* P+ N' M4 r& X% I call m_NewStatShow_goldcoinimg. q4 h1 k1 a( t+ _1 @1 {+ |& [
POPAD
1 [& z2 Y$ q4 ~! g8 X. p, M( e JMP D2Gfx::D2DrawImage
" @' B5 k( v/ E7 y }4 Y. d+ P" r5 T! @, o1 Z! c2 Y9 V
}, f6 G% ^: g. i
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标! V3 f& \: [* t$ \" @
{
! S: A* N2 {9 p1 G% j2 [ if (x > D2Client::ptScreenSize->x / 2)
6 R( G3 O- `5 e \* N4 D1 a {( Y3 d& ]9 ^* d: P% w
*y = getYGoldCoinFixBtn();
) ~# ^; _- |9 t+ ? return getXGoldCoinFixBtn() + 32;
/ T+ x! `% U' P6 T# m3 p }" M# c+ i: i j! B
return x;
' N6 M# k! ?2 F2 t/ ~+ c}8 y5 H# C! B; H. H
__declspec(naked) void caller_goldcointext()8 F$ X9 I' V( _4 v7 u) K5 k
{
. w9 ^( x& s s# X% k( ]: e __asm3 B9 l6 {' I& M4 z4 j7 s5 c
{
; o" d( i. o& Z# l PUSH ECX
; x2 f2 }* _; Q; g0 |) [ PUSH EDI. G. E% X2 d6 V& N9 Z/ u7 }# B
PUSH ESI9 o; |" [, l4 ?9 h
PUSH EAX
3 m7 V$ V% U( w7 n- U+ Z MOV ECX, EDX. V5 ]" O1 ?' U( p2 p' R. h6 N
LEA EDX,[ESP+0X4+0X10]
' B; Q( \' R* ~. \: n2 f) ?" V CALL m_NewStatShow_goldcointext
, x7 V( ]8 Q" f0 @ MOV EDX,EAX% j$ N* O, ~2 s0 M( B6 `8 h
POP EAX. k, ~, _2 l6 D' _/ R9 }" g5 G
POP ESI
9 n$ x" T; `( C1 }3 X' G POP EDI
/ n8 V! m+ n4 d, x POP ECX
- W/ ^3 v. d* X" t jmp D2Win::D2PrintString;
; K' X3 W- c0 V }
7 H J* @8 V! [' k' \}2 v! O- D5 Y% L
" ?) M3 m( V* l, n# \3 h1 Q
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)" I, {3 n5 F, C
{
- T9 O* Y8 B* y( { DWORD mx = *D2Client::ptMouseX;; |: ?3 h) c) `; C4 Q' v
DWORD my = *D2Client::ptMouseY;4 p3 t0 r1 X; m# W; d8 _
if (isOnInvCloseFixBtn(mx, my))
S# t* P L& y* e5 p9 m1 p return TRUE;7 C& g; h7 R3 i/ {) X, W/ r
return FALSE;
2 m2 [; c5 T. M) G+ f( }! ^1 W$ B- z6 A}; I( w" @1 f6 d3 C' c
__declspec(naked) void caller_close()$ ]# L4 P2 W) C8 {; |& Y) }
{
! j4 {* A. m( T) [! P7 O __asm
L9 a. \, Y2 ]! _2 O, v {' j+ J6 Z b0 Y0 U, j1 E
PUSH ESI
4 g$ q- e( A6 ]! D4 e& m3 d push ebx
5 W/ D0 M6 U; d, I call m_NewStatShow_close
) X- o9 [% h# V3 F( }5 X( J- @3 \ pop ebx2 G. l4 L4 N, B9 ]; P
pop esi
( U& c* t- `: m% c* y retn
1 P, q( d4 D r) l }: ?. p0 x- a& n$ C2 S
}+ `4 Y" T @7 q3 ~! K- Z
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]); b7 |% j! v0 C& \% I2 u6 c' M. c
{ v) m/ o3 q! x/ O
*nXpos = getXInvCloseFixBtn();
2 P% d' h5 |: G2 r4 @" v- h0 h0 A! [! T *nYpos = getYInvCloseFixBtn();0 N+ `$ d2 g) A( s: c; W/ K
}; d8 [2 u. j/ _: }. Z+ a5 T
__declspec(naked) void caller_closeimg()) y2 ^+ P& J& [
{
3 {; s% a# o& k, c$ O( ? __asm2 y3 k" k# b. A" L, W) c& j
{ Y/ p: B5 _: B a8 b
PUSHAD/ a8 w' B/ K( q0 C5 h1 _5 ]8 [/ q, \
lea eax, dword ptr ss : [esp + 0x38]
* h7 p9 @, `$ G$ x push eax: c) h) [- o5 `6 j* m, d( s
push dword ptr ss : [esp + 0x38]
' f- z; ^% | a' w& r, F1 L' R+ ^0 L push dword ptr ss : [esp + 0x38]* P( U# u! S- _3 h" E) V
lea eax, dword ptr ss : [esp + 0x38]5 u0 }6 d% w5 Y1 G+ A* |
push eax7 A. _( }0 c: ~5 p& e
lea eax, dword ptr ss : [esp + 0x38]
' F b2 i9 d0 m9 J) d push eax( c0 W' R3 ^* x1 w7 J5 W& u* j
push dword ptr ss : [esp + 0x38]5 Y$ }1 ]7 H3 L9 y: o( y8 Q( W0 }
call m_NewStatShow_closeimg% ^. W r0 f, E
POPAD$ ]+ I# M9 J/ J+ E/ \
JMP D2Gfx::D2DrawImage" S/ p/ D* P- y/ [
}
5 L. e9 }8 H7 _' z3 g}$ E4 [ p+ a1 T/ ~/ F0 d) t
) R* ^7 v+ @: c1 E' |. |$ F
! ?% P$ `- ?* o L |
|