|
|
转载
3 q, m/ `: B- OBY SJ
M" @; g% r: C8 ]7 g2 x首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)+ A h; ?8 I* l7 L5 \
* ?8 M, x Q0 ~$ ]D2Gfx::D2DrawImage-10041. C# T; G `- y
1、修复技能的背景(不需要可以不要)4 l. s: J( P1 S- Z* ?" @" }
offset = D2Client::GetAddress(0x77AA8);
/ [, Q- F1 w$ w7 a8 h7 s$ EMemory::SetCursor(offset);: R5 `0 O6 {2 x0 g) d( ^' Z
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);% c; e3 C# P" |' M0 p
! }8 _( z% R, R0 i% Z8 A
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])- l- E$ V1 c8 O" x
{
) w9 c1 _6 f" y) [ //Init data for print image
B$ j p( ], v& a sDrawImageInfo data;, z6 x2 {: w# s$ c0 i1 k
ZeroMemory(&data, sizeof(data));
, I+ Z$ H% }# V, Q9 l
) j! f" H$ k3 F3 @7 ]3 \ //print background% ?$ G3 r/ g2 V, U" a2 P( C
setImage(&data, spellBackgroundImages);4 J- J0 w3 b+ P4 |6 F
setFrame(&data, 0);
3 O$ I" ]% z; w! C, N int fixx = 511;$ t7 N3 ?# B$ f9 G: S
int fixy = 9;
) O5 P9 e& n6 m7 R: @ D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
0 M5 _6 f, z! q2 t) f. ]3 \- y setFrame(&data, 1);
! o& r) }' U/ O8 P* k D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
2 }& j' @! J! E2 s v setFrame(&data, 2);
! u8 y' Z) x3 O+ e @0 l D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432+ U( V4 V/ y( [" t7 X; X/ I; e
setFrame(&data, 3);$ k. A' h! |$ ^) |3 `' l
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);6 @8 s9 D9 T+ _) z; j6 p/ X% C
}- c+ A4 O3 ]9 f0 O6 o
__declspec(naked) void caller_SpellBackGroundFix()
+ z8 J: F& t: a! D ~: W {{ A% Q. S5 c% K3 c# Z: n
__asm- V4 u5 P# B) l
{
; v: n+ n P+ P2 O! }* S6 @ PUSHAD& s( ^' x2 U6 |0 h
lea eax, dword ptr ss : [esp + 0x38]8 w) D$ B" E8 W0 Q$ M9 d# J
push eax- I1 b" N& r( ^, }* h" c% C
push dword ptr ss : [esp + 0x38]
* H9 i! j6 o2 @% }8 \ push dword ptr ss : [esp + 0x38]1 v- Z: Y4 @0 v+ t3 b
lea eax, dword ptr ss : [esp + 0x38]
7 G+ d- x' o+ o0 k push eax$ }8 t3 a. t% I; J$ b9 _
lea eax, dword ptr ss : [esp + 0x38]
% f/ {) o* T* `* O2 N% G8 L% D0 [8 P push eax
7 D1 I3 V: V* b push dword ptr ss : [esp + 0x38]
" ~' P7 n0 g& ]6 N& z call m_NewStatShow_SpellBackGroundFix, n0 S( i" L7 M! G2 U* k
POPAD! R2 Q9 C% s- W) l
JMP D2Gfx::D2DrawImage1 L' ^" C3 O* o7 T Z4 g& d( m6 T5 ?
}3 N! U% I( \9 n9 ^" ^
}& S9 b5 y( N" [+ l
3 `* B1 C; g: d6 c1 w1 g- U
2、我们如法炮制小站的背景6 M' y. c: p$ L; D4 j. O
; @3 J8 q6 J9 T# ooffset = D2Client::GetAddress(0xAB010);
. K5 y% ?4 r. {% R. OMemory::SetCursor(offset);$ D& D% y, g5 e+ E1 R3 x
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);' S( \! c1 h. E" }/ n7 u
) G' u4 H3 B5 J1 B) Dvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
9 X: Y& g$ Y4 r$ y5 R Y{
- X* W3 D' Z& v5 u //Init data for print image0 i3 K# D! I" ]- M0 @8 y
sDrawImageInfo data;6 I& q8 j5 R% x
ZeroMemory(&data, sizeof(data));# a7 I+ ?/ ?8 g; @7 W
4 K# L& ^+ j! `8 b. u s
//print background9 S( v, e* V% q% x
setImage(&data, waypointBackgroundImages);
6 e! R/ q J. a$ V setFrame(&data, 0);
/ k3 ^& w' z# a! x- e7 z) B. ]8 z int fixx = 0;" N @9 e# ~3 X1 n
int fixy = 9;
( A. o( Y9 ~# C D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);2 ]! H8 N! u5 O9 ^$ \, a0 C) X
setFrame(&data, 1);
' m0 M' n K! X6 s2 T- | D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
7 D' L9 S& F1 J" Q setFrame(&data, 2);9 t2 E# P9 W) \
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
# U& T2 J/ r* q0 i: g: @ O& z; B) w setFrame(&data, 3);
/ _0 ~: j5 V# g/ ] D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
& K$ \: ^* r' ^ R4 v1 b5 d" X, D: Q3 b* K" k
}6 S3 ^+ C! T5 o
__declspec(naked) void caller_WayPointBackGroundFix()- n7 a8 A+ C( P- [
{$ x; {& s8 H ^
__asm1 [* C7 j# Q3 O4 G
{
8 |+ l) d) d4 p: A2 d# \' D PUSHAD
! a4 h0 a& b7 m1 b( B8 S, @0 z9 o( B lea eax, dword ptr ss : [esp + 0x38]# Q |% }) J8 v" d6 A. ^+ E6 |
push eax4 V$ c" _ f& X6 z
push dword ptr ss : [esp + 0x38]) F* b5 W: `$ x8 [) r
push dword ptr ss : [esp + 0x38]* s6 F# z4 U; I) c- d* n
lea eax, dword ptr ss : [esp + 0x38]
$ @# P: ?# k9 E z- `1 J5 D push eax
8 m' {. @: `0 Y( c lea eax, dword ptr ss : [esp + 0x38]: @& V0 l( j* X. [7 K( O% w9 U
push eax
: Y& v. R B' u! I push dword ptr ss : [esp + 0x38]+ k! r" E; g' t) Q% [- R
call m_NewStatShow_WayPointBackGroundFix
0 e! g: ?! S1 V6 \1 [8 G! M9 @ POPAD
5 W D8 G" B8 M# p JMP D2Gfx::D2DrawImage, n" c9 Z6 i/ G- w% o
}
% Z( M7 C0 I! F2 @. i+ |}3 l1 l' F) Y" `3 ~, u" R$ b
( x& T5 k) J0 e* _! I
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
- z! w: W% U! |! A7 G: C0 G! i腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
m) Q- J" |& c. d7 _ {1 \& \' X5 \0 n
class D2MultiRes : public Library<D2MultiRes>
) \% s0 e7 `+ p4 X$ K {
: E$ o) c; ^& w0 M; {) F k public:
! T6 E( \7 e, J& L5 t static void Init()& x( ?7 ]7 Z+ M2 U# k( ^
{1 w$ e r7 L9 p) i( @$ w& F- p
Name = "D2MultiRes.dll";; F1 E7 A* S0 O* ^; W( e
Offset = LoadDiabloLibrary();4 ^2 f0 {, _$ t4 J7 Z, f7 @
}+ _5 _- ]( V, @; I, q( o- [
};
: m6 C0 t1 R0 M$ u1 J D2MultiRes::Init();2 _& i! l3 J B4 @
D2MultiRes::HookLibrary();; A5 a! Q0 H7 T/ o5 y c. f3 o
" @0 n) m) [ \4 ?; b" v$ i8 y( ^' ?3 d5 |/ J% n( X) Q% g0 L/ r" E. Y# Y3 G; [/ i
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);8 X5 C W8 Y7 c& B/ M0 l
Memory::SetCursor(MiscFunctionsOffset);0 Q; @& m8 v" d4 S
Memory::ChangeDword(0x1b0, 0x200);
$ g5 V3 N% P" v5 Q
3 l! ?: M: y8 P0 T `2 R* @: m+ s3 C" m
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);3 w' ?7 e( I: ~! `4 x' N$ |( ~
Memory::SetCursor(MiscFunctionsOffset);
5 I. }) c. l# ], A! R Memory::ChangeDword(0x140, 0x200);5 d) j/ l& D; [. y
! o; I& Y5 g& j1 C! c% `
% t! v% F. K* N6 r/ u MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
1 }* o. h3 T) W# A _' H- Q Memory::SetCursor(MiscFunctionsOffset);
- ?0 x% ]' a. W7 v Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
! s$ y) W: @$ Q8 e4 E9 b5 Y( t0 ?" }9 F9 y1 \' F. g
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
" Z& E9 M1 A* P5 U. O3 z5 s8 d Memory::SetCursor(MiscFunctionsOffset);- P& C y/ X0 ]2 K( w9 f7 D" Z
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
. ^; e, J# _4 k+ d( a
4 i% g9 q$ |' b4 e& ~ MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);% e2 X- ?) s0 m( \) k$ K, m
Memory::SetCursor(MiscFunctionsOffset);
5 w2 D2 ~+ t2 ~7 q+ ~8 S4 r p Memory::ChangeDword(-0x280, -0x400);//这个不要动
- T6 w) Z6 q% m4 ? }
/ L5 O) }+ p' p4 K, F4 h, f# ]: n& H% O( h% t. _* t8 y0 \6 ?
4、快完成了,是不是发现金币啥的位置不对??! C ^0 V7 A: H* u2 b Q+ o( \
8 z% l6 C: Q6 g//这里修正我们的装备栏9 K( b. l' h" ] K* w( v
offset = D2Client::GetAddress(0x99B6C);5 a6 U9 |8 c7 `
Memory::SetCursor(offset);
$ `8 _- ^9 P) W! N1 j; O) c5 U Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
Z/ A5 u1 w+ `3 y+ T1 f
! x. N1 k1 a6 l offset = D2Client::GetAddress(0x99BA7);
7 ~- D1 o# c6 t2 t# m P Memory::SetCursor(offset);
. Q6 ^7 ?- Z, c& e0 O( Q Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);, f2 ?( s/ r$ W5 @( h- k# W
0 B! Y0 j$ M9 ^: q) f offset = D2Client::GetAddress(0x99BE2);8 e2 c- a$ T2 X7 X" X* K
Memory::SetCursor(offset);' g _7 S: K( b- J5 R
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
6 E p# q2 i5 S, \
/ b1 c' u6 B0 g offset = D2Client::GetAddress(0x99C1C);
) ^5 e* M' M( b8 v; j# b Memory::SetCursor(offset);8 _) {8 J2 I+ n# ]; a( V' D( \
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
8 q( A. P' ], F1 z, J# q& L
# M. r+ U' {. J/ P; @ //取消两个popup,偷偷懒不过分; n! n0 C/ V$ H. l
offset = D2Client::GetAddress(0x9386d);/ Q$ e. Y( I7 l/ y- K
Memory::SetCursor(offset);
2 R o# U) V9 w' _9 N Memory::ChangeByte(0x8b, 0x33);
( p% ^9 i/ @ T7 A Memory::ChangeByte(0xc8, 0xC9);
: D: R% w& @( S: B offset = D2Client::GetAddress(0x9390b);# t P- m" t' U
Memory::SetCursor(offset);$ @2 p$ H/ G; p& |
Memory::ChangeByte(0x8b, 0x33);
' J# l. _. V: J Memory::ChangeByte(0xc8, 0xC9);7 P5 o; K4 S* \ v5 M& x. c7 d" j
( E9 N8 h7 n8 [7 W+ M/ b2 p& z //修正提取金币7 @9 w1 e; a( v
offset = D2Client::GetAddress(0x8D3E5);
% l( S! G& r! ~ Memory::SetCursor(offset);
7 z/ d! X" R+ Q. i9 w7 v Memory::ChangeByte(0xA1, 0xE9);
4 p% i/ v" U- A8 M& A Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);) l- ?- `$ c2 q# _
3 H l: f- v1 k U7 d6 p% A9 w3 i offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
, E8 X4 k0 {) v# L3 _ Memory::SetCursor(offset);$ @, { N/ E! r8 m! a! Y1 P \
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
|5 ~& @; s$ @* I/ P! k k. f5 J* ]2 _4 d+ \- B
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);$ r) a4 g, G( o+ C
Memory::SetCursor(offset);% ^6 [" Y, C# m, c2 D, b& [
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);+ B5 G E1 {3 u9 _
v6 D. W4 ^; ?: f! M2 P1 T
//修正关闭按钮
3 H; i( |3 j' H offset = D2Client::GetAddress(0x8BD90);. N. U: H) B' i8 O0 I4 ^) x5 s
Memory::SetCursor(offset);
* c. o" p4 w& O3 P" a a( z Memory::ChangeByte(0xA1, 0xE9);, B, E0 n# C9 ]* `% ]
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
* `/ N; [: ~ N9 x7 W7 s
3 C) ^& h8 N+ |+ Y# }: g9 e9 R5 ? offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
7 u2 n$ c/ h9 u2 m4 g* \ Memory::SetCursor(offset);/ Y% _3 p5 R* s5 D+ {3 {
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);2 ?& v, s+ ]/ k/ [
) a/ Y: U" |1 ]5 N! z* v6 @
. t# e/ P e; j0 V; t$ a//以下是细节; J& a, v9 D6 S! Z( Q) w9 t
#define getXGoldCoinFixBtn() RX(0x2d0)+ P' C% q& E+ Q* X( B+ l
#define getLGoldCoinFixBtn() 32
9 O3 I9 a r- J" d; O6 Y' f9 J#define getYGoldCoinFixBtn() RY(-0x59)
1 U. w1 ]9 U8 p* x& H& ^( c [#define getHGoldCoinFixBtn() 32
' _" q; h1 O+ O2 Z! r/ L0 _! |#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())) w* e/ x4 Z; y! x! O0 K
- ~ m4 d' p( }3 \! j! Y1 J#define getXInvCloseFixBtn() RX(0x3db)3 ~' h; y3 l9 }7 j* m }
#define getLInvCloseFixBtn() 32
+ {' L# @9 e+ i& w#define getYInvCloseFixBtn() RY(-0x63)
, C& k# U5 q- w u, R0 |; ^#define getHInvCloseFixBtn() 32
5 r8 z# _% h" y7 A8 Q, [/ {#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())0 R/ F# U/ z8 {
9 K- D# d. ^, W( a# gBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)" k. E! ?/ p v O( k2 W* C9 b
{+ x c8 ]* X5 q6 v T: }5 }
DWORD mx = *D2Client::ptMouseX;/ w4 N4 W4 y# Y" D! r
DWORD my = *D2Client::ptMouseY;
/ g3 E! x3 F9 H F1 H if(isOnGoldCoinFixBtn(mx, my))( @5 t- g' R9 e
return TRUE;
5 Y7 [; Q5 ]9 t/ U+ h return FALSE;$ R ?+ l* \/ B+ I0 P8 @ a
}: E v" Z8 G' n5 ~/ S4 a% _6 \6 x
__declspec(naked) void caller_goldcoin()
# \7 ^& n5 p( Z/ u! s' P{: O1 C+ a( o6 j0 @. _
__asm- | b0 X" O' ]5 @
{
0 U( N& `% [. Z push ebx
* b! T% @, z, E mov ecx, esi! |6 M1 o d ] f) {$ a7 v
mov edx, edi+ O6 F' g @# j6 f! x r' |
call m_NewStatShow_goldcoin
) B( {+ N$ \0 S; Q7 a8 V pop ebx
( U; Y0 g3 c1 C2 Q7 i7 r! z# m J pop esi
1 @1 ?2 Y- r ]2 v( N0 c: V retn
2 r2 D: Z# f3 ~! w5 l! K }1 U0 u4 _3 ~6 V) C
}
9 ~0 T4 a1 U0 Lvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
8 m& t- B# @ w- T' I5 N; h{
0 M0 H' l3 R8 p7 m' }# c if (*nXpos > D2Client::ptScreenSize->x / 2)# r. _& Y% c, `0 F6 f+ d+ ]
{5 f$ F" M4 E5 z. G4 |& Z+ s
*nXpos = getXGoldCoinFixBtn();
- e: |4 D. c; c- [ *nYpos = getYGoldCoinFixBtn();* b; D: h. c" e. w7 o) f6 p7 ~
}: `+ ?+ S* _7 c$ z7 G
}! F( T1 m# d; x$ p
__declspec(naked) void caller_goldcoinimg(); ]) M$ S4 Y' I g9 g2 M
{+ ~- k( x# p" D [
__asm2 x K& t) i0 h! U
{
+ J4 Y4 o4 m' p- R PUSHAD
$ w4 F6 _: Q& ~ lea eax, dword ptr ss : [esp + 0x38]
1 S: l/ u, i! h% i5 g6 G$ u push eax
$ x2 Z+ b" u2 K, M' |. f push dword ptr ss : [esp + 0x38]( c, F! ^, \8 p. `4 \5 D- C) W
push dword ptr ss : [esp + 0x38]
2 I' Z! n- l/ E) o lea eax, dword ptr ss : [esp + 0x38]+ f U+ C2 A% }1 S% I
push eax1 c4 d% @ o3 H/ S0 V% E6 t
lea eax, dword ptr ss : [esp + 0x38]3 g1 ^5 C. \( G5 Q
push eax
4 C h; N3 \, _* d5 T1 P push dword ptr ss : [esp + 0x38]; |+ B, M% F% |$ E' O
call m_NewStatShow_goldcoinimg
* p4 {2 b3 U" b6 _ POPAD
, N/ {1 C! {* o- |, w JMP D2Gfx::D2DrawImage6 [4 a% ]+ S. `; M! n
}# v" N- s* l7 s
}7 ], B. y2 K& I o4 i
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标/ S# r' T1 Y5 i- g5 J# w
{
: a0 y9 u) K) H: Q5 o; y if (x > D2Client::ptScreenSize->x / 2)
; D8 f6 ?$ P; V5 s4 d. ^" W {
8 f: o! R, q+ c& c( { *y = getYGoldCoinFixBtn();
# @4 v: r* B% g9 O# |. I return getXGoldCoinFixBtn() + 32;! B% \& V0 k* u) J9 F4 J
}# C' T7 h9 T( P! {/ P( O: i8 q% K
return x;
4 N' ]. k. j6 s6 u( E4 U& O}! g5 I- Y5 @; c! i1 m/ R2 o0 K* z
__declspec(naked) void caller_goldcointext()
" }. |) h8 b# H8 ]{
& ~2 |2 q6 z; c1 N/ y. x! E% s5 F __asm
0 C% H" ^$ Y* d) n' u {
% Q2 T' u: K$ r3 Y1 M# u& E! ~4 m PUSH ECX" ~0 a1 m8 X! p% Z2 l7 ~
PUSH EDI
* |# Z1 l- Q) X3 ^3 K PUSH ESI
G! N) p% y0 x0 M) {; f1 | PUSH EAX* G& p: k/ t/ f8 }8 P3 Y
MOV ECX, EDX
, [% k- c# t; {% v LEA EDX,[ESP+0X4+0X10]$ r4 e5 }7 Q$ T
CALL m_NewStatShow_goldcointext" A ^" z) e+ q" R+ c* v" {1 b
MOV EDX,EAX
+ L! l7 m3 `; F. H POP EAX
& T P+ w! s- p. @) m i/ y POP ESI/ x/ @5 G" n K W$ b- P1 E; }
POP EDI& d. G1 ~4 V6 Z5 G/ @$ e
POP ECX, v) V0 ~1 L) b. b+ @
jmp D2Win::D2PrintString;
' O% E* b8 R- {0 K: J } }2 V, d: {4 y$ H" \$ p
}; r# w" m1 n0 u' m9 E$ R3 e) K5 E
6 W8 `7 J8 h2 g, G( }! _* _1 xBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
+ ~- m- t5 p! O0 @. J{
7 d/ F- n( @' b8 K DWORD mx = *D2Client::ptMouseX;
8 O o0 c i$ F! A; D" ` DWORD my = *D2Client::ptMouseY;: C* k6 v' P) l% y% n7 `
if (isOnInvCloseFixBtn(mx, my))
- W1 N0 c4 O. K* b4 J5 G* B7 N return TRUE;
5 f* g. Q- E3 b: L7 O2 R return FALSE;( g [9 ?$ t; v, X# ]+ K ~
}3 o# Q* S! G9 T5 D( f0 m6 u
__declspec(naked) void caller_close()# p* P& F) y7 l/ a$ @7 {
{
& Z2 Y/ A$ }- L* h4 k9 n __asm' t! M2 O" d/ n6 d2 f" B$ \% J# K
{* H4 Y3 n: ]/ w, Y: o" `
PUSH ESI; A% d# ^- B3 e6 u7 L; U5 |6 V
push ebx
}/ c, K8 `' l2 k call m_NewStatShow_close
1 T- y* M% g6 o" c. }: q( M) h pop ebx# b" u& ?6 [ k S. t: D/ j
pop esi* \& v: T7 A; r) p
retn' n6 A7 y; x( Z: H4 ?/ m4 Q# a
}0 [' a0 c2 ?2 |3 T6 q) A/ a- G
}5 l2 F5 ` [5 c, i( p* R( b0 z
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
s5 c, ?3 C6 }7 b1 b8 T5 `' o{9 I6 h7 j. a/ Z$ y* J2 \) n) ?
*nXpos = getXInvCloseFixBtn();+ b% e* g% ]) y
*nYpos = getYInvCloseFixBtn();
( S' C1 B, |) l0 M6 y}
6 w1 v2 V L0 R__declspec(naked) void caller_closeimg()
( v* U# ?' `3 s o. I{
# r8 i( H7 j" c. ` __asm9 l2 ^; Z. ]. j9 u1 t
{; p/ b, e5 g8 w* T- H( y# w
PUSHAD
& h0 e/ a1 e8 Y" U1 y lea eax, dword ptr ss : [esp + 0x38]- D6 P6 \; P: G$ x
push eax& e( q1 `( _1 |" C
push dword ptr ss : [esp + 0x38]
& h3 n* J* B7 R) D0 @ push dword ptr ss : [esp + 0x38]
. K4 Z1 b$ v) e; I% f. ` lea eax, dword ptr ss : [esp + 0x38]# }2 I0 _+ h" d; W8 y9 I
push eax8 C H) @* D) J0 C( Z4 T
lea eax, dword ptr ss : [esp + 0x38]3 r; E2 j4 j! ]) R( q2 J% t: d
push eax
}* p+ g" @5 s% i push dword ptr ss : [esp + 0x38]# D4 [3 Z7 K' @4 i! _( |
call m_NewStatShow_closeimg
" }0 n0 u, i& Q POPAD
& n- a' }" H) Q) U: N7 t0 v% O JMP D2Gfx::D2DrawImage
( s6 r6 H1 e; c0 O) {5 t* z }
/ s3 W9 E. _# o. N}
+ G" y% ~! J( x5 n8 J* @
- y' \- F; V, q( o
8 r Y' @, F5 I [9 ] I) a |
|