|
|
转载% h, u# s* l( J% ^6 n+ ]& h/ ^
BY SJ
/ U4 e. V$ D3 \ M/ M首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)0 z/ x6 K9 {7 e5 E9 j
) s; d6 E y) u
D2Gfx::D2DrawImage-100413 d5 J; z1 D* X4 z
1、修复技能的背景(不需要可以不要)
% z" W+ I3 V6 t! ]+ N0 q; Goffset = D2Client::GetAddress(0x77AA8);9 c6 Q- Q! L8 ~# l# S5 y
Memory::SetCursor(offset);, g/ g3 b4 I$ J
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);! [; w% V& ^/ d7 Z
: a& h, L! _. W( Z3 q
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
) s+ Q, t( \5 ?/ @# B" f2 |{
8 S+ \! R+ O5 E4 |/ f! E //Init data for print image
( F8 j! K8 V' T sDrawImageInfo data;* ?0 N9 {2 t" ^2 @
ZeroMemory(&data, sizeof(data));
) G. o& W& B! I1 C+ ^ j; Z
W0 z5 y5 T: @7 m: D5 ] //print background
s p3 a* U: \8 N setImage(&data, spellBackgroundImages);# F$ d- y, S! e: u9 J
setFrame(&data, 0);
6 X3 c7 { t* z* }7 W int fixx = 511;( k- P2 d, t5 [1 y2 e% A7 R+ r
int fixy = 9;
# i( {2 ~" O3 R8 ~; i! ^& j D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);3 v, V! t2 U3 j" K$ a; o
setFrame(&data, 1);
/ F) |: T/ a& h9 @/ e D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2569 c0 }9 e& y& E+ q& f- Z3 O/ I
setFrame(&data, 2);
% E. S! l: k' P1 O# [) _ D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432* \# L9 E: l& B y6 l
setFrame(&data, 3);
7 t+ k I# s% \, t! [ D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);$ _8 Q6 M" t' g, r3 Y) w
} f" v! z% t8 K5 V5 ]
__declspec(naked) void caller_SpellBackGroundFix()
: R H3 _6 Y T0 c* Y/ x e{
t9 N. @4 z# H# y __asm
# I! U$ l0 ~2 r, ]2 [ {; ^( s5 ]! j+ Z9 t) Z
PUSHAD& w; V3 b% f B0 D; {8 h
lea eax, dword ptr ss : [esp + 0x38]
7 t) q; i# \+ ]6 z push eax% P9 S: b; b D2 C. u
push dword ptr ss : [esp + 0x38]* J$ K1 \9 c. D
push dword ptr ss : [esp + 0x38]# g+ n4 Y, u6 l5 D* ]0 s
lea eax, dword ptr ss : [esp + 0x38]3 ~( g' O" i2 u' |& ~- I3 `
push eax
5 T/ x- p% P- d$ J: l0 Y+ Q# I6 N7 Z lea eax, dword ptr ss : [esp + 0x38]! Z" \7 \/ `+ ^. `
push eax" D( S+ a5 u) Z# _! M* z% |
push dword ptr ss : [esp + 0x38]: q: i6 U+ O2 d" E4 X
call m_NewStatShow_SpellBackGroundFix4 U7 `$ d5 d! W; k
POPAD
+ n* _( a+ @ m& a1 V; B JMP D2Gfx::D2DrawImage
3 _3 d& ?. L, @9 c }' f4 l6 | ?0 G: d9 t9 y
}
+ i! N2 m8 m- Q: |* O: S& u$ @7 `' X" J
2、我们如法炮制小站的背景# H, k% e( F, c8 d0 j7 A; f
4 l: Z" w& |9 toffset = D2Client::GetAddress(0xAB010);
0 o3 x( K6 j" K) tMemory::SetCursor(offset);
) x' n+ d q" aMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);) U3 K4 Z# G( F& z. T: `( A" _, O( B
" o- P1 i2 E- V6 e7 w. S$ v
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
6 h0 H4 Q" G( Z7 H% t8 Y1 i{
+ y, W/ k2 K/ |2 Y" ~9 m //Init data for print image
Y* A. |: x* q4 n$ J sDrawImageInfo data;
3 n/ e' J4 Q+ }7 F! C# ?# C* }1 f ZeroMemory(&data, sizeof(data));
% e! L8 n: s0 \' @
! _4 {( }; K9 b6 U //print background' l+ x5 M9 V, Z% C
setImage(&data, waypointBackgroundImages);
. `7 s6 j0 J3 O, q; _4 f setFrame(&data, 0);
9 x! _3 s! ^ |. l7 F' ^+ E int fixx = 0;5 Y! I% r! K9 v
int fixy = 9;
B* `3 g2 u c: b D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);0 W' d3 k3 b8 X+ d
setFrame(&data, 1);; ~# l7 O) ]- S, B# C! j$ J
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
: c7 a8 z1 D% O8 _ _ setFrame(&data, 2);
4 {; y& U. x2 c6 O# h D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432/ W" U) A. a3 j2 w) I
setFrame(&data, 3);: q% _/ n( G/ p* I
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);/ v* e; F! [! i W8 Y' a# D
. {5 z' ~3 r/ e# D2 l2 T7 R& b
}1 R5 [8 U& g% Z+ [/ W$ C4 v
__declspec(naked) void caller_WayPointBackGroundFix()
( O" T9 n; y$ W7 @, ^{
$ S6 f* }+ e+ R& Y3 [" I2 G5 P: T+ R __asm
! J A$ m% r2 N+ A {
5 i6 K6 ~+ ]" i PUSHAD% K @3 I6 ?3 h1 [" w. J( Y
lea eax, dword ptr ss : [esp + 0x38]
! \/ G- c, `! _- c push eax
) n4 t( F8 U; \) p/ { push dword ptr ss : [esp + 0x38]
4 @' K2 l% c( ^1 }* h j# y push dword ptr ss : [esp + 0x38] r$ \& l9 k5 E# S4 p1 E0 V' l
lea eax, dword ptr ss : [esp + 0x38]
, P, p' o/ y) C( x1 j4 q push eax; Y( S5 U, A8 O) T: R+ X( |
lea eax, dword ptr ss : [esp + 0x38]5 z* C* e! n. T0 j+ T, e$ L5 H
push eax; T( f/ j( P8 L. P
push dword ptr ss : [esp + 0x38]
& D* C5 H+ O0 m2 {& C call m_NewStatShow_WayPointBackGroundFix+ i, S+ ~6 ~. C- X# X# H }
POPAD) L1 }4 H+ b2 {' _8 S" }
JMP D2Gfx::D2DrawImage5 C) E; R4 m& W# B" @' M6 T) l
}
8 y) T! h3 g! J; M9 S}
5 F+ Y/ W- j6 y; k+ h/ p0 l$ L/ j- }# m# }! P
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
; l) T2 n: ^" E. z0 Y! T- N& ~腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复). t9 D5 I- h0 ^1 d
{: y3 v5 \5 X9 ]1 D& ]5 e) T( J
class D2MultiRes : public Library<D2MultiRes>
M( h. e. {0 f: H) W) N$ J {7 V6 q. ^3 A U, o4 X
public:
5 ]% v7 u: [' M$ H8 \- [ static void Init()
' Q! S4 U3 J, v4 n4 F) D; p {
" }% h0 ]; l/ L, _, A3 x/ S Name = "D2MultiRes.dll";9 o2 P6 I3 _3 |( z+ ^& C
Offset = LoadDiabloLibrary();5 J4 B* J- H" j7 ]0 y
}
; }" `6 i9 H; @+ t* G };
' { N) f( G# \: I D2MultiRes::Init();: h! w( k/ {/ q
D2MultiRes::HookLibrary();
6 j: v' H% ~0 X9 J( y3 k
' V5 G. I- r a' x1 G! Q' A) D4 B9 M: P* @3 P' A2 l7 g
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
. k t$ @6 F; c8 n! B7 i* N5 k# P Memory::SetCursor(MiscFunctionsOffset);
! v0 J2 f7 R$ |7 g1 l" ^ Memory::ChangeDword(0x1b0, 0x200);
& H& `9 a+ F, X9 y9 S( n4 h0 H& s/ _& N9 z/ W$ B+ ]
/ C. @; p# ]' x* B( p7 j MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
1 a3 d+ A5 \! k+ ^ Memory::SetCursor(MiscFunctionsOffset);% z+ F: ^+ P9 m) n
Memory::ChangeDword(0x140, 0x200);
1 i) I/ \& Y6 l( k b. Q+ I7 b7 K- U" K& k" ^: ~5 }* M
& p& r8 I, n6 Q, F+ { MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
6 W; Z/ |4 Q: E4 K% l3 p Memory::SetCursor(MiscFunctionsOffset);8 s3 [; _7 d) O. i' S: r
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块6 C2 J4 @7 ?, \5 t" Y7 {
: T- ? m$ p! ?5 r; B MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
2 B5 v# L, _+ @- ^7 l1 E$ W Memory::SetCursor(MiscFunctionsOffset);! u& A- ?" ?+ k$ U' m' ?
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
7 {3 j* j7 z1 W) C V' t7 H9 A& g5 U: g* N# W, J
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
) M% N/ |$ S; ?* H w! h, Z# b# D) C Memory::SetCursor(MiscFunctionsOffset);# a& P1 u2 w& l* b7 w
Memory::ChangeDword(-0x280, -0x400);//这个不要动
2 f. \0 t) Q% z8 l& [ }
- V5 H7 Q- O+ B% A5 i, u5 t+ D7 t) y- q4 W
4、快完成了,是不是发现金币啥的位置不对??
7 x3 z B9 x. b
+ i& ~ K0 ]( A& y% p5 k1 ]//这里修正我们的装备栏
; X0 j+ O( M! p4 T: i offset = D2Client::GetAddress(0x99B6C);% o( P# _( _; d4 q% A
Memory::SetCursor(offset);
! G* h2 ] _ P+ c$ ` Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);9 `8 J7 i8 C7 X; d
- G1 d0 u% J- R
offset = D2Client::GetAddress(0x99BA7);$ Y8 T2 `: a4 g: a
Memory::SetCursor(offset);
) C6 e5 Q6 J4 [2 Q Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);! x4 s" Q, Y* x5 I' |6 i |/ i2 m
' g3 [( N" I% P* }4 q
offset = D2Client::GetAddress(0x99BE2); J8 l2 U$ ]; B9 h5 Z) g8 O: [
Memory::SetCursor(offset);" d3 C" ~ I& F. ?. ]# d
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);6 @) \2 s$ s4 ?, _
4 Q& w% v# Z* P1 c offset = D2Client::GetAddress(0x99C1C);7 H& g+ x }. J; _* @' k
Memory::SetCursor(offset);" j/ `$ P& n9 |1 e# p, l1 q
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
) c" A. N$ U9 K& }# f) d3 `! C* o% y0 F# c* X
//取消两个popup,偷偷懒不过分4 t. n$ k9 L2 S( Y
offset = D2Client::GetAddress(0x9386d);% a5 v7 r0 W y, y# K5 l5 \
Memory::SetCursor(offset);9 a$ }* @; o+ x: I
Memory::ChangeByte(0x8b, 0x33);- a. y9 ?. j4 M0 f/ @
Memory::ChangeByte(0xc8, 0xC9);/ {5 [1 f' U3 `, c2 A. R, ]% {
offset = D2Client::GetAddress(0x9390b);
% b; K5 x# V4 i( x Memory::SetCursor(offset); D2 O- s, `6 o2 D: J, \; v" D* R' L
Memory::ChangeByte(0x8b, 0x33);
C( [5 C$ e$ }* Q9 y- K Memory::ChangeByte(0xc8, 0xC9);3 o r8 K$ w7 v6 K" P# U
/ W9 V+ i- z1 A9 R
//修正提取金币
( n6 K9 t6 M4 o offset = D2Client::GetAddress(0x8D3E5);7 T4 k" G; Y9 J, q% f2 s
Memory::SetCursor(offset); w, n$ ], [" \2 l% p
Memory::ChangeByte(0xA1, 0xE9);
- Y1 |8 X! m7 b# ] Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);4 |$ v" G% u# _: Y1 N4 X
( n. f0 i% [! \* W9 i8 S: ^
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
2 W2 |& x( B9 G: S6 ~' }$ |* X Memory::SetCursor(offset);7 Y. j6 Q9 g E$ F1 G# d( R; n
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
3 }0 k0 _- u$ R5 u% o A& F, S
. h8 P3 w5 R! W% s4 A R. c k offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
% {6 v" X1 _/ J4 x2 ~) ` Memory::SetCursor(offset);; N U3 d+ K4 ?2 D' o: @
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);7 G! e' Y4 `5 n% J% q
* x; F* O1 B# u //修正关闭按钮
3 \' {1 E1 @ K2 N! S offset = D2Client::GetAddress(0x8BD90);% Y+ D* c, I2 h. p, b7 L4 j
Memory::SetCursor(offset);
+ Z* D) A, W8 I- u* h _. C H Memory::ChangeByte(0xA1, 0xE9);: K# i" h& G1 C
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);: s- R2 M5 D4 ~+ P) g% [
8 D% ` H& }( I2 f$ h$ Y/ v
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
* Q* m, ?: }6 ^ u" d Memory::SetCursor(offset);
6 Z7 P1 f1 { ]5 J Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
3 }/ H. P2 C2 q) k1 g% B+ ~- I8 Y# {7 L
/ `/ K2 q: r' O! N, y
//以下是细节- ]& x" F/ Y) C* K7 F2 _6 c9 |6 E
#define getXGoldCoinFixBtn() RX(0x2d0)" I! a7 Y; m( B/ k# D/ f4 B" w1 D
#define getLGoldCoinFixBtn() 32
3 |7 R/ J# y, Q; L1 h#define getYGoldCoinFixBtn() RY(-0x59)/ V0 k5 ?: I5 e* ^( C" Z
#define getHGoldCoinFixBtn() 32
% [; b3 X5 Z Z0 a- i; l& X#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
4 n) T g0 d. J* G$ k3 {; c* ]5 t, |4 {
#define getXInvCloseFixBtn() RX(0x3db)
9 H3 ~5 m7 J- b- O0 ^! Z# C#define getLInvCloseFixBtn() 32% P+ }, _, x3 S) N) {/ }
#define getYInvCloseFixBtn() RY(-0x63)& L r- l5 H8 Q
#define getHInvCloseFixBtn() 32
% S6 T; w1 B$ o" M#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
: |: o* a3 m! h) O
9 b! L7 Y0 e. f: I7 ?BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)3 A: d+ T& C7 ^2 G" K
{
) v2 u0 E- |# O9 X DWORD mx = *D2Client::ptMouseX;
+ {% s. W! {9 C DWORD my = *D2Client::ptMouseY;
8 f% y$ u5 g4 ?# ?# @ if(isOnGoldCoinFixBtn(mx, my))3 Z$ k5 s) E& H+ s3 x* J/ x
return TRUE;3 }: R& U4 P6 T8 O/ |
return FALSE;
- O+ v7 g5 M. N}- Z+ `3 U, J7 h5 |& ^* Y
__declspec(naked) void caller_goldcoin()
9 i( N; @& F- e; s, f{& G9 W5 i8 r9 h9 Q7 W
__asm
( z: Q/ s* x* }2 {. l9 G, v3 L8 `% t0 n {. z0 n1 c7 F& n5 t& J
push ebx
1 B( e2 l5 P! _% Q& t mov ecx, esi
; t R; w& b& K9 i mov edx, edi3 o. M) P1 \; b" o0 b
call m_NewStatShow_goldcoin: m% K' H2 C! i' E0 e
pop ebx
9 R/ n t* O/ E) i" i" q; V. y) m! A pop esi a; v& Y) Y( ]$ C; ?% G. x- u- G
retn/ C" b2 J6 Z& z0 u& M0 r' K1 A
}4 a. `% f% g3 Y( d0 ` g& G, [3 r) M
}' F$ L! z7 ]* c) i$ o2 V) ^1 x
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
* E }2 M( {8 D: V9 q{! S: H2 c$ N3 g1 F M4 _ J& e+ j8 v6 G
if (*nXpos > D2Client::ptScreenSize->x / 2)( V2 I6 C) ~7 c4 ?
{
% P' n" K0 v; J9 X* `/ s+ z *nXpos = getXGoldCoinFixBtn();
5 c! \' |9 R4 Z, X$ v! x7 P *nYpos = getYGoldCoinFixBtn();
) F* B g& l1 \# l0 { }
$ P7 ?) `# q Q- t$ T/ O}
" t$ K4 B4 {! V' W__declspec(naked) void caller_goldcoinimg()) J1 D( K5 d# K- c
{ t; \* u+ r) C" B7 Z& z
__asm
; N: l! Y. G$ z% ] {- I" Y7 }. E. d2 q
PUSHAD# `1 k6 R4 {1 W" D8 @( W& g
lea eax, dword ptr ss : [esp + 0x38]7 D" N- z+ ] c- B8 D( ~
push eax+ V8 u8 e, a# N: s1 d- I
push dword ptr ss : [esp + 0x38]
: g! m1 {2 H! m# E, y, ]& p push dword ptr ss : [esp + 0x38]
6 v4 D1 k* h; g% m lea eax, dword ptr ss : [esp + 0x38]
% `. d1 T& Q0 I0 L4 [2 m! K9 I% S" x push eax
' J4 ~: S6 s0 u3 q9 R4 ?4 f- ] lea eax, dword ptr ss : [esp + 0x38]! H+ f0 I1 |' I
push eax* J) _" {3 [6 Z2 l) D! B, I# a
push dword ptr ss : [esp + 0x38]
; m. ~) X8 Y, D9 x% ` call m_NewStatShow_goldcoinimg
7 i' Q$ ?! g8 ?$ _+ ~ f POPAD4 \" B/ L6 O! U ]2 M9 l7 i
JMP D2Gfx::D2DrawImage/ x* m! @ m% e# {7 O
}( R: V- v9 e: b, c0 c$ Q
}
( Y0 A4 z& u7 d( D" UDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
2 c. P0 \% O) u{
) v" L) S! p5 V4 }! b, ~0 Z if (x > D2Client::ptScreenSize->x / 2); @: b. `5 [- \# s, ]5 p( Q8 C: a
{" E7 y4 g5 p3 |# U
*y = getYGoldCoinFixBtn();
|6 N( D- F4 N* }: U1 U2 Q return getXGoldCoinFixBtn() + 32;% [* P. ~. K+ I1 a6 }
}
$ `, D; @8 s+ ?8 _) j% S1 T return x;" x; T" D2 W: |1 h6 `5 w0 ?
}
3 u) Z9 A3 N/ k__declspec(naked) void caller_goldcointext()! |9 y: s; k5 T1 n2 L. }
{
. ? o# b) l3 h1 x3 m __asm
4 t8 _4 q- V) |' C" u {3 k3 c. { p( `7 q: \0 ?$ ^
PUSH ECX! V9 O% q, b- r7 X8 L( e3 Q
PUSH EDI
$ G6 d2 K, C) J$ h" j PUSH ESI/ C* g3 Z* y9 y& G
PUSH EAX
" p- S5 m E( D& h9 V MOV ECX, EDX
# }6 H8 J/ X9 w. D/ s' w LEA EDX,[ESP+0X4+0X10]" K" B* O$ C2 @! k0 R5 }( ~5 x
CALL m_NewStatShow_goldcointext
* x [/ n, S( Q+ |5 A6 B MOV EDX,EAX
& G) p' ?# Q, v$ {5 J' X POP EAX0 a: Q2 t' ?& o* U [" ]
POP ESI# v- T- F' V! y! b3 O; V
POP EDI! q F$ b( G' Z* G/ o: K/ p( Z% Y
POP ECX
, f1 T: W7 L" S' g jmp D2Win::D2PrintString;
, Q9 ?7 d* K G* p$ s5 u }
2 K$ C6 U# ]$ q# _# I! a) `7 H I}
) K& ^' `* L" ~+ L: L; m7 {# F7 Q7 d0 ] B6 u- p) r
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
8 I' n2 Y- k0 V" r7 g; ]{
/ A C0 u G4 ^, s DWORD mx = *D2Client::ptMouseX;
; J& }' w* j9 }9 `1 B DWORD my = *D2Client::ptMouseY;9 n+ N& L9 I, i8 [
if (isOnInvCloseFixBtn(mx, my))
0 }% Z- L7 y7 i# k return TRUE;; i$ V8 K+ z' G: J( n1 g5 I# L
return FALSE;
! u5 w" t8 T e6 Z }}
% D( y7 _4 F1 ]5 J. `5 r6 ~) v, t__declspec(naked) void caller_close()- X/ L0 ~+ t+ x' l3 g9 ^8 l: n6 X
{
- y; R) D+ K) X! ?, h __asm
, ^3 h2 y: B, a {8 z! u- c# q! q* O$ I. o
PUSH ESI* c6 y" s* Z8 h4 T. u4 s3 b
push ebx0 b, U6 M. D. i3 y( ?2 t0 q
call m_NewStatShow_close
- W* j, x3 I- w+ Q pop ebx' J* Z$ F3 d* g( t( K2 C2 l
pop esi$ C0 D3 P0 J5 p8 W! D7 `
retn
: f! p+ e" g% t9 ]8 s }
{* f4 o7 z: p$ ?7 V& k6 d}
% d$ Z; a" v' j# J% _ `. M1 ~void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
4 p. K" u6 A+ z7 J; C{$ i' x$ i6 V$ y; U) r: c
*nXpos = getXInvCloseFixBtn();; [$ e! U e* q2 R# {$ o. i& C2 G
*nYpos = getYInvCloseFixBtn();
& f4 B) t( L+ a- r% g}
. z% }+ Y5 F# C" R. W0 L9 ]__declspec(naked) void caller_closeimg()6 @$ E9 |* f- c e2 W8 _$ ?1 f
{
; y- _, Z; r; z g. s. Y# i8 D __asm) D' R. S0 u7 @ G% ?! \
{/ n! h: C) q( f: X. w% j$ O- W
PUSHAD, s$ ~% ]/ E4 B/ E4 }5 x j
lea eax, dword ptr ss : [esp + 0x38]/ o+ J8 s6 m, y/ _7 G4 L
push eax( j1 Q+ T5 k5 f( d6 [4 w8 W! ]
push dword ptr ss : [esp + 0x38]4 b ]. b. |8 H7 q
push dword ptr ss : [esp + 0x38], s. C/ b8 o9 \! ^" X7 f
lea eax, dword ptr ss : [esp + 0x38]
& h, G1 j' g! e R/ s push eax4 M" p! D( A6 m! X* k. v. q$ ?
lea eax, dword ptr ss : [esp + 0x38]
$ t# e7 t* W: Z& h* o push eax
! N9 d/ ^' j9 U) q& s; \% K push dword ptr ss : [esp + 0x38]
! `3 ~# h' ?9 j7 B' q4 Q. E! @6 k$ w call m_NewStatShow_closeimg0 Q$ k! s& w. {* M
POPAD
+ x$ t+ x/ Q& m" _* L JMP D2Gfx::D2DrawImage
) ^$ O( Q7 ]7 T. S$ ^/ e! k }
, E, ?1 i, F0 U3 ]5 ]9 l} O1 Z) G! z3 L0 q6 Z
8 }' K7 Y1 a: d( {3 t* f4 p
- `% D F8 v& Z. u |
|