|
|
转载) a; l* O2 T+ r( x2 w l
BY SJ" i' E2 \& }$ @5 u
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的). D5 w* | O# v
. D! {# {$ t, KD2Gfx::D2DrawImage-10041' o- V' z6 g/ S
1、修复技能的背景(不需要可以不要)' p7 I$ q7 K, G$ }2 ~8 `0 D3 I
offset = D2Client::GetAddress(0x77AA8);
: }( Y# f. i1 s9 i- hMemory::SetCursor(offset);
3 ?) `7 r2 R1 b4 M; }Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
( x' k4 K) B) T- G; c' {/ G$ `; |3 K q a% E, C" h5 B2 E# U w
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
; s4 x9 j$ K$ }2 K" M8 x{
: X; W# u a: y% r //Init data for print image: T1 I& T' V5 s
sDrawImageInfo data; g0 ?6 V3 }) b! g
ZeroMemory(&data, sizeof(data)); W+ ]; j) f; r" a/ {9 t
5 N* U% n: q2 ]; \ //print background
2 r9 @- e9 M5 n/ Q+ D9 C- L7 y1 ]; r setImage(&data, spellBackgroundImages);0 F) ?- r2 s" z
setFrame(&data, 0);: r/ R6 g5 {0 ]. B X, @
int fixx = 511;. {( u9 @1 t& J0 e6 k
int fixy = 9;
# Q: Z) T* V& x" l! X D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);- N: w1 n" V k
setFrame(&data, 1);% b8 \6 l4 k G: v$ @
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
4 \9 h4 z5 x% I* S8 o" G2 R0 H setFrame(&data, 2);% N7 g% X' J+ Y. h
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432% Z% c2 d. [! O' ^" {
setFrame(&data, 3);5 F2 t: I6 p: P* p7 e: a8 w$ d
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
6 F6 v! \2 _) H+ Z+ v7 K}6 u/ Q5 p" w& w/ K2 L
__declspec(naked) void caller_SpellBackGroundFix()
J# _" Y: C0 R, C{
% I" Y! V* X1 v/ U __asm, I( c# k9 J S4 E( ?3 }
{
3 `! w+ h! W3 v H5 y, p6 k' z5 ~! y PUSHAD" V0 A6 {& d0 f5 B
lea eax, dword ptr ss : [esp + 0x38]! x9 g! u5 d, A' r/ _: Z: B5 t
push eax5 ?/ m5 B5 s+ ~& k0 {$ `4 f
push dword ptr ss : [esp + 0x38] b3 F8 k& M4 a2 a% u C% y) ^
push dword ptr ss : [esp + 0x38]
% p* {4 z6 E/ G$ [ lea eax, dword ptr ss : [esp + 0x38]
5 e# {! s( Q4 i6 C' v push eax9 W9 W6 l6 V6 P% A# Y+ u. O
lea eax, dword ptr ss : [esp + 0x38]
% u8 `* _3 v. M% a7 {+ X push eax
) z: g5 i! l$ A/ B2 k. W push dword ptr ss : [esp + 0x38]% i8 T/ h& |8 x. H6 G! R
call m_NewStatShow_SpellBackGroundFix
( K7 n) ~/ P$ m% a" U" w POPAD! q5 q* V+ Q# B* F$ L
JMP D2Gfx::D2DrawImage
9 h' A+ u4 V3 s5 k. U# [) c5 } }
& A3 V# U% R* [6 u; Z3 v}
7 q0 ^1 j9 P5 l, }2 p% \# k H' H
2、我们如法炮制小站的背景
# i/ s5 u. p0 d" T3 c
; [: E% v0 g- U* Joffset = D2Client::GetAddress(0xAB010);
% o3 Q. _4 d( f2 x% C8 JMemory::SetCursor(offset);% O3 w; @5 d- t* f, y4 @( y
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
* O5 S" {1 ~5 T8 V. ]) W' h
9 c1 T1 w s& k# h" L0 x$ }void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
5 X0 U% R% D$ O1 _ M" @- k{: k$ m7 B) w# M. q4 g
//Init data for print image& h/ X$ ~7 u: c. j5 z
sDrawImageInfo data;7 u1 R; Y+ d- v' D: A! {
ZeroMemory(&data, sizeof(data));8 j, V; n. }5 \( _
+ \1 A0 o/ H3 N% v5 |' I$ F8 f% ] //print background
$ C6 ~6 R8 i( d1 p setImage(&data, waypointBackgroundImages);
( k4 K2 b; m$ }7 c7 P setFrame(&data, 0);9 k; m' K2 F; r' `( V T, a
int fixx = 0;& }7 x( p6 m* Z2 l# w; q0 \
int fixy = 9; `; n+ K0 I+ H# C7 Y5 d
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);- H7 u& {1 e0 w+ V
setFrame(&data, 1);
) C$ b2 p0 [1 C+ w D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256% g# o* [% ^( P+ q8 r
setFrame(&data, 2);0 d; m8 V+ D! L, Z+ {
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
) m6 K) C$ @, {2 I! w. x setFrame(&data, 3);) ]. ]; Z1 o% d! |7 b1 z
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0); _* @) M0 k7 H
3 G' K# t; B) @6 J( i" G
}
' M# Z/ ^1 L% p' ~% j__declspec(naked) void caller_WayPointBackGroundFix()) y0 Y! }5 e; D0 Y" @# l
{% `/ C' |% j; J" r) ~
__asm
0 }9 Z' q# H' b4 g9 Y9 c! Q% s0 x {
/ y' C' L' _5 p2 T+ V PUSHAD
1 v; W! Y! w) P" f lea eax, dword ptr ss : [esp + 0x38]
L f! G, l$ q7 P4 N push eax
5 B# F A6 K K) L( l push dword ptr ss : [esp + 0x38]5 L& M4 v( J9 l; x" c3 b8 Q2 p
push dword ptr ss : [esp + 0x38]
0 s. P1 V. M5 ~ lea eax, dword ptr ss : [esp + 0x38]
" Y% v/ C! g8 i5 S9 ? push eax6 s2 { @3 n3 z4 }+ t) g* C2 T
lea eax, dword ptr ss : [esp + 0x38]
: H1 |$ x1 q5 W% d! X3 A push eax4 o1 @$ E n8 c0 G% Y
push dword ptr ss : [esp + 0x38]
8 K3 w8 P. e. y0 }' `/ f& }; n) @7 X call m_NewStatShow_WayPointBackGroundFix
. T6 V0 ?9 Z* D% [$ Q* @* y POPAD' B% ^% b) Y, _% n
JMP D2Gfx::D2DrawImage
3 f) a/ D/ v" M" B- a }
9 A5 `( `) X( R5 @4 X}8 ~& J( o: ^; e8 U" v, m+ {, s
( s9 H: d$ r O3、以下可以搞16*16超级箱子-腾出我们需要的边缘1 d2 `5 y S' @8 W; `; i; h; A8 }
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
4 f; O8 L, U5 f8 Q$ k/ [ {3 K' F$ C0 l; C0 Z. i! A
class D2MultiRes : public Library<D2MultiRes>6 w# H. V4 p+ o% R2 U
{3 n5 y2 V1 a% N& U. R* J
public:/ V; F1 D) k- `0 o! V$ z, a8 K
static void Init()8 x% R% p- y6 b( B
{
- ~# ^7 d4 g+ U# G Name = "D2MultiRes.dll";
, j8 l) E; X. a8 v% k2 p Offset = LoadDiabloLibrary();
$ i+ w- V4 Z% } }
" @ B* J1 W9 j7 W };
* s( ?2 j3 J" j d D2MultiRes::Init();6 H# H2 X- ]6 v5 n) y
D2MultiRes::HookLibrary();: X5 K# C! }7 G0 m: R; Z- g
2 H* f+ N4 U; k; N8 P/ K/ m& Q
, Y( v% ^6 K0 A/ u* e3 Z( f MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
% h4 w7 k1 R7 }; v r Memory::SetCursor(MiscFunctionsOffset);) ^% ^3 G9 H+ f( s, k' o
Memory::ChangeDword(0x1b0, 0x200);
6 |& n# E6 z+ M5 o: z3 o# W D1 M$ R) r" n
* p' K$ C, Y) ~, c, a MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
8 B9 O7 y5 I% v Memory::SetCursor(MiscFunctionsOffset);
+ n. Y* {" a# N$ [* f: ^ Memory::ChangeDword(0x140, 0x200);
5 e5 r7 }8 u6 T, ]
8 L9 A' `8 {8 y! M3 R: `9 X" t, C% W3 G
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
+ n( O8 C: `6 H0 h6 s& j( f K Memory::SetCursor(MiscFunctionsOffset);
?, p/ z2 `1 {1 H3 P Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块1 Z% ~6 S8 Q% k
# \1 }' E# P8 H/ n$ B+ `, t& K MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
) c1 L: k; U. ?+ _" ~6 k) _ Memory::SetCursor(MiscFunctionsOffset);
8 X9 W- n7 ~$ o+ r- A( O0 b Memory::ChangeDword(0x200,0x299);//下边缘 299最大
! ^0 s- T4 @2 p$ ]4 i
. t( U& N! h- D& A4 d MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);- m9 |! b5 T+ Q! D
Memory::SetCursor(MiscFunctionsOffset);
' n& J% ]4 @1 D- ^2 e Memory::ChangeDword(-0x280, -0x400);//这个不要动6 L6 u4 P3 L: `# }3 B. Y
}
9 L+ h& s( z% t }( G. l, x) D( v: ]0 Z3 V( {! E
4、快完成了,是不是发现金币啥的位置不对??
* X6 m4 j6 `; L! a0 `/ l: I" I7 O; Z( H
//这里修正我们的装备栏
2 L8 [$ k9 J& W offset = D2Client::GetAddress(0x99B6C);. Y* C) s2 `* o P! S/ L1 Q# \
Memory::SetCursor(offset);
; z4 v7 N* H9 R Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
/ ~. @: m1 k+ d1 D( Z( r) f+ S7 L( h! O. A# n
offset = D2Client::GetAddress(0x99BA7);* M& u! K% m6 i
Memory::SetCursor(offset);1 D7 b* m: ]6 v$ j! {% V8 w5 G$ k
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
Y& ^% _6 A/ i; {
7 b6 n7 b9 t( v offset = D2Client::GetAddress(0x99BE2);
4 w- {8 V: L! d' g/ U) U& c6 V Memory::SetCursor(offset);
7 j3 }7 F; C& K# f; z" [ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
' Z5 D, O/ h, k' |" Y& |6 D/ y% b- _. w/ L5 S" |" d% S
offset = D2Client::GetAddress(0x99C1C);
1 o- x! l9 K8 p; i1 C9 k; U Memory::SetCursor(offset);, V! X5 T3 K0 x5 f) n, {* w
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
: \0 A7 m# m9 ^( G( j
# T' @2 i# p0 l5 |' S; | //取消两个popup,偷偷懒不过分
3 g. N6 x8 p2 g% J& c! o offset = D2Client::GetAddress(0x9386d);$ R& S* }1 }& G% S! L3 Y
Memory::SetCursor(offset);& [, R7 J* D4 v% R
Memory::ChangeByte(0x8b, 0x33);; k. S! A1 P8 q, \: ?
Memory::ChangeByte(0xc8, 0xC9);8 {1 x( B0 _" t
offset = D2Client::GetAddress(0x9390b);- w, _3 O! M: S4 R' W( p4 x% R2 S
Memory::SetCursor(offset);
/ d6 Y3 C9 ?- ~. e! o- R. o/ ^ Memory::ChangeByte(0x8b, 0x33);) T& y9 o! M3 Y+ @9 @
Memory::ChangeByte(0xc8, 0xC9);
; G% y5 s3 ]+ B: q/ x7 q _) z4 l# Q' h v4 ?2 r! x: V9 x" V8 P7 a$ R+ M# b5 B
//修正提取金币+ t" z2 q) x+ i
offset = D2Client::GetAddress(0x8D3E5);
/ F4 F p( i5 n0 ?: \" P Memory::SetCursor(offset);+ {/ H8 u: e0 {
Memory::ChangeByte(0xA1, 0xE9);1 O$ @) ^8 A K m/ g- g* p- w9 G
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
. _1 Y4 T9 E* z: {8 K9 x1 F- p% I" E. G7 e6 t
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);4 w; ~; g: ^, N; L! S/ m
Memory::SetCursor(offset);
2 k% Q$ _4 r4 J7 i Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
; Y$ J+ X# o: m6 e, I
`5 t* `# B3 _' v; U offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);" X: x6 _7 q% D/ X: T& D
Memory::SetCursor(offset);
7 h0 ^" G1 \" [. O3 Y2 q; x& @ Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);9 x1 a, _, X) V$ o M5 e
1 G) ]! Q* V% F+ U) g& a6 W
//修正关闭按钮8 [3 ^6 u' ]) C/ @- @& [* m9 u v
offset = D2Client::GetAddress(0x8BD90);
5 ~: e" V5 K2 b) ^ Memory::SetCursor(offset);
' ^7 R& {8 X% h( J6 W4 y& R4 z* D Memory::ChangeByte(0xA1, 0xE9);
- k1 m" N) H+ K' i' y1 |! C' Y Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
, @; ?/ l/ U( V& ]( b. a0 }6 W% M& ?9 s. ~' `# @& F3 @9 E
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
& ~, i3 y* `$ S/ w* l4 V/ J Memory::SetCursor(offset);
# g5 F m8 S; a& i$ ` Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
5 Q' \% n8 G! g. l' B* Q$ o
" r2 s- X! |$ I8 t( `4 ]) F* E) K7 h7 c' Z1 Z5 J0 d7 P
//以下是细节+ A; P. Y0 V, Z0 b1 \8 x! `% J
#define getXGoldCoinFixBtn() RX(0x2d0)
3 ~ [! m* P; I#define getLGoldCoinFixBtn() 32
- u5 S! u" @2 P7 g- y#define getYGoldCoinFixBtn() RY(-0x59)& C- K9 R$ ~1 K3 J) C* ]
#define getHGoldCoinFixBtn() 32
! R9 w* P; @8 j#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
. @" }3 X3 U! |6 [: X8 R
) q; T7 m. B' m+ E$ f+ b#define getXInvCloseFixBtn() RX(0x3db)
- l: B. L; d$ W* l#define getLInvCloseFixBtn() 32" D* @$ s8 O% X. y2 Q6 u# d. d
#define getYInvCloseFixBtn() RY(-0x63)
R$ ?1 v n7 d% }& R#define getHInvCloseFixBtn() 32
+ X# U! v# g! B* v! p! g2 A#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())4 F2 m6 o) `: v# M. E. w
4 b0 I6 J% A% f: eBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)1 _) ^. P. X; B; A' }3 m
{+ S* G$ [0 O7 C% }3 g# Z2 b
DWORD mx = *D2Client::ptMouseX;
5 \6 f3 I9 J' x- E, y5 }9 P5 l. n DWORD my = *D2Client::ptMouseY;
" P9 K: ^2 w, B if(isOnGoldCoinFixBtn(mx, my))
0 A$ R* d) i6 z$ M4 U4 i) ^ return TRUE;
p/ ?- H L( y' A+ F! X return FALSE;* ]1 C0 a) f o! A
}- O, r9 f# |0 d& E2 o
__declspec(naked) void caller_goldcoin()) F5 J) v) l6 G( b. @, H) r9 G
{
3 ^& W( V/ E4 A; b: W6 n __asm
4 ] m# x4 j6 ?" W6 ] {* {1 y; g* F) {$ S4 Q0 z
push ebx
7 R/ \; b: F6 U' {! U) v" T mov ecx, esi
5 q6 K- E" H7 _1 X2 P# E# b. x7 V mov edx, edi
* ]3 @2 N+ {4 h4 s call m_NewStatShow_goldcoin
& J k4 \/ |% U; `" V" q pop ebx/ ^8 W* I, Y; @, A/ v, i+ D2 c
pop esi
/ ?0 _; K& }3 q7 d2 O! u/ _ retn
7 p3 f& _6 c6 W( Z/ X }5 L4 W0 {( p6 N
}
6 `2 u j) G- ~6 i! T3 F5 kvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
5 ?+ _+ [8 O0 E: W% j5 f{ T4 Z) n6 c& a+ J+ v% ~
if (*nXpos > D2Client::ptScreenSize->x / 2)
- x& x, ^1 A2 O' a {
5 m( h. m* p% w; M *nXpos = getXGoldCoinFixBtn();7 q5 V8 N) |2 g7 e
*nYpos = getYGoldCoinFixBtn();5 q4 v: u n2 ~2 n4 O8 F7 X5 `
}
0 l1 e. Z5 I& b}! o& `6 I# T6 E0 b: p. W8 h: V$ ^
__declspec(naked) void caller_goldcoinimg()
5 d* [0 G7 _+ i* t- H8 o$ w{ b( x5 r# G% _! }1 q
__asm9 t, @4 ?/ S) x% P$ Y6 R
{
: n+ z! @. X9 u1 \5 u! Q% ^6 H PUSHAD
/ e# P- g. F; a+ Q lea eax, dword ptr ss : [esp + 0x38]% z( }9 v( J. K# y. Y6 Q# `
push eax& ~( \, W$ F( E) G1 ^$ m8 d
push dword ptr ss : [esp + 0x38]/ g- I) y2 f; N8 G9 S: k/ H
push dword ptr ss : [esp + 0x38]
6 q& f" E) M7 L; k lea eax, dword ptr ss : [esp + 0x38]
w I L+ M/ p/ d- e* W push eax3 X: u0 q/ f) n! I7 o6 q
lea eax, dword ptr ss : [esp + 0x38]) `4 m$ M5 Q. E# ]
push eax
i, s0 P/ Z) i* b5 B push dword ptr ss : [esp + 0x38]
& E- t! c+ l# f1 \1 B$ o# f: R call m_NewStatShow_goldcoinimg
( }! l4 x9 s- a4 T. ^+ m POPAD/ t V# j( D) D$ i* ^
JMP D2Gfx::D2DrawImage) W g8 J. f, a1 G) q
}$ j( u9 F+ V7 j& C% a
}
0 Z# M& c0 Q) m" }3 S" LDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
) Y2 J) s& g7 F5 R; r) z8 R& m{
7 C" E; T( \) Q) l/ E if (x > D2Client::ptScreenSize->x / 2)
" T0 c, M$ D4 a) `1 v {
' z2 r$ O, w3 L* t *y = getYGoldCoinFixBtn();
7 L U# o$ A3 ?( C) A return getXGoldCoinFixBtn() + 32;
1 a! R% `1 j8 u* ^/ a+ }/ `9 g }7 w7 |% [; ?3 j. m$ o
return x;
6 L" ?5 g% M3 @1 Q1 t" V}( t4 C" k7 I- x- Z- U+ W6 n
__declspec(naked) void caller_goldcointext()6 N. M7 J( L8 n# V" Z
{8 H4 d8 j5 H9 w: }+ h
__asm5 T$ n6 S2 ~( \7 D3 T$ l7 m# t
{
/ U' V) Y7 k! O3 ` PUSH ECX2 M) X) _# Z1 V7 h
PUSH EDI" F# Z: _+ h2 r4 }
PUSH ESI' e. [, h! c' A2 ?0 B
PUSH EAX3 G2 i) r& s: q/ B; h
MOV ECX, EDX9 W7 Q# K) [# M
LEA EDX,[ESP+0X4+0X10]
# h5 {& d% P- ^: I( Z5 V CALL m_NewStatShow_goldcointext; h0 B" w! ^4 L3 l* M
MOV EDX,EAX% `6 U2 W) w0 w, `. l' M& v1 S) Y
POP EAX6 M( w5 c& L+ u8 }" b0 V/ N
POP ESI" ?# u* w( U& H+ S
POP EDI' G& |' S1 ]6 P2 i2 y+ Z
POP ECX
( T5 K9 }' B0 _' H2 p% ^- f! G" J jmp D2Win::D2PrintString;( n6 ~) A5 g( a$ h
}
0 q- O. U P+ t}3 T1 r2 ^( p0 W$ T, A! y! @- @9 i
$ K! b( I$ ~' x7 E# GBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)3 k* Q6 F- p S2 g
{
2 N, C; c6 O; ?+ t( ? DWORD mx = *D2Client::ptMouseX;2 C& A, P8 l- I$ l P# B* G
DWORD my = *D2Client::ptMouseY;& h+ U; k c$ K- y- W6 M4 Q) s
if (isOnInvCloseFixBtn(mx, my))1 q, B5 F" R8 m2 W- o
return TRUE;
; j: e! U% @) {. V% I return FALSE;
+ r$ d+ T0 Z" Z4 k' w, C4 i# B% u# T \}9 R1 d, Q3 D' l- F o$ L
__declspec(naked) void caller_close()
4 |0 D( s& l1 @& `. F& V+ |{1 ~3 I6 R3 g/ ^, |8 @4 ]
__asm
& H- e: F* d( E4 k; r {$ G$ B8 n- p# n8 X) o) L/ h
PUSH ESI% X4 J$ d& ^' J7 G: s. q
push ebx1 I. }7 b% ^" b! [; y; X; \: i6 g+ i
call m_NewStatShow_close
$ i# c2 ?8 q/ g) p pop ebx$ d0 }8 V1 H7 p% U( T% n7 c( ]6 Y
pop esi" d! |' f6 |$ [" N9 K0 p
retn
9 ~& S7 n! U3 y( h }
: |8 _: w5 l5 ?# ~}
; Z4 p- S& s1 V6 s( j/ M! X2 avoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
?2 G, X# g, |8 R{9 P% j* v E( a0 w, m! v' X. T
*nXpos = getXInvCloseFixBtn();
9 U/ T9 f/ l0 \& K( L9 ] *nYpos = getYInvCloseFixBtn();
" Q# ~5 h" d# S6 ~3 t- K}
. l {- `8 ?( e/ ^0 Z) k/ i__declspec(naked) void caller_closeimg()1 z$ M, I5 `. _1 I4 }5 ]$ d2 [% ]
{+ _( j6 p1 z8 X/ \% ^" l+ i
__asm9 n0 O; \& K- s# t- y( u$ h
{
+ G1 ?5 H8 l% z1 L! u, t PUSHAD$ E+ g! e/ e+ p, f0 F; A7 D
lea eax, dword ptr ss : [esp + 0x38]
7 G6 V0 J& D; ]" b" ?4 i5 ]% M5 [2 L push eax
% G0 L2 i* C" } push dword ptr ss : [esp + 0x38]
) n# G/ h+ p) C/ p$ [ push dword ptr ss : [esp + 0x38]/ \2 t3 v, M! J& w7 N5 n
lea eax, dword ptr ss : [esp + 0x38]1 F) h$ t3 y* l9 T" G# _$ H
push eax
3 D3 R/ e# N8 c% ?3 x! A! ]5 r lea eax, dword ptr ss : [esp + 0x38]
4 J. q0 ?) K5 h- U push eax
6 T5 Z3 [) @$ }' O+ {' Q push dword ptr ss : [esp + 0x38]
* W3 p4 b7 }# S# Z# L9 d call m_NewStatShow_closeimg: v2 d( T) k1 H3 {; K
POPAD2 a1 @( f5 p( E5 y8 P- y
JMP D2Gfx::D2DrawImage
! W* r8 K7 T2 p+ n! \ }
; c& M; T: Z$ j) x0 e}/ ^7 a1 J8 P9 _. ?2 ]+ G' \$ Z ]
' q/ \+ ]' x6 o/ _! `
& Q o2 Y+ Z; ~8 j1 l |
|