|
|
转载
: s& K- g; H' Y! `: C& GBY SJ
' B. z9 v& L* e. z! m% s首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
( _) ^- K% k% W7 L: X9 ~$ h! Y" }$ a
8 f v: }' `) N0 bD2Gfx::D2DrawImage-10041- Z5 }! Q) k n( h
1、修复技能的背景(不需要可以不要)' I4 k$ T; }; {2 u$ [; R
offset = D2Client::GetAddress(0x77AA8);( {. U5 T; n1 B4 o; T* O `
Memory::SetCursor(offset);
# C/ p* A2 p$ n0 {) D( e' hMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
* \$ y2 D, O7 R9 A+ {+ w2 G5 l' R% s e9 _6 ?
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])9 e7 q- t' @5 _: Z
{& `& F# @/ r5 M2 z1 r6 O& D. H
//Init data for print image
1 ^7 j/ F3 A0 d sDrawImageInfo data;
- I R8 R$ m; H% V3 `6 } ZeroMemory(&data, sizeof(data));7 y* @% b+ f9 T$ h5 u
$ e6 a6 J1 q( e0 T# I+ b
//print background: P) b/ ~/ Q4 v% H2 P/ y
setImage(&data, spellBackgroundImages);
: ~) i" B; E6 D5 H setFrame(&data, 0);0 e2 D. p& m( J" C! J
int fixx = 511; q, @+ H4 B5 N: u8 s1 |/ B# F" p
int fixy = 9;4 I8 X0 @- h* }
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
; J$ }) g y2 ]# M# ~ setFrame(&data, 1);" C" m d% m6 ?. Y
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256- S7 O1 W/ L& [3 Y3 ]
setFrame(&data, 2);, z' n: E- X5 P& j. _+ J9 B
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432/ y& X0 z: y" G' `) d
setFrame(&data, 3);% _& f, P: A# ^7 `% Y6 D
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
$ o9 o3 I- {9 O- |* R# k}
, s+ U8 L7 e4 O8 s/ ~* k__declspec(naked) void caller_SpellBackGroundFix()# M. {0 w$ _/ U
{
' I& q6 g" m7 D1 c, z1 [ __asm
+ u7 y8 p- y& j {
+ F3 W" H" F# b6 O8 Z' N4 _' [- j2 \4 i PUSHAD
! l" b7 @, f" ?7 z1 }1 _5 _; G lea eax, dword ptr ss : [esp + 0x38]
; K. r5 q' d# k) o- b- z: o push eax
; o, S8 ~: }3 Q9 p. `- h push dword ptr ss : [esp + 0x38]
; v4 U5 V5 {3 C5 O7 O s push dword ptr ss : [esp + 0x38]5 X; P5 k b5 r) _" ^/ p
lea eax, dword ptr ss : [esp + 0x38]
7 y) v5 ~. Q8 Q! w push eax
' p! |% S: B" p, b } lea eax, dword ptr ss : [esp + 0x38]! P- k3 F+ B- I. C8 ]* y" |
push eax6 Q3 F, y, V5 m
push dword ptr ss : [esp + 0x38]
u, U0 q/ U5 n, q* } call m_NewStatShow_SpellBackGroundFix
$ h% t8 w4 k) J5 |1 O5 o4 A POPAD: K; W+ m4 @" w* l
JMP D2Gfx::D2DrawImage- T. E+ B3 q5 H0 x2 `
}
( r; _9 n, h3 F# o# C$ G}
$ G* N1 {+ N' r: }" P/ h9 l
8 N' X3 G, Q) X1 g7 X. P/ O. E; @" j2、我们如法炮制小站的背景7 b/ [% e4 u( y# ?6 x% x' y
5 X1 A F5 [) H6 }/ Ioffset = D2Client::GetAddress(0xAB010);
9 u- ]) F& U) |! t; H8 A- p7 cMemory::SetCursor(offset);
+ v v3 s. s7 ?& lMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);2 Q" P8 r& W8 b1 Q9 v3 q
) y3 h9 K6 b1 h, g$ e9 Tvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
^) T+ p/ a D7 }, l+ Y$ H{: t9 h7 G9 W7 i3 b* \ x, |6 ~
//Init data for print image1 m7 E; [, X: v) f: l
sDrawImageInfo data;
( _- t4 K- L: ]' ^! I ZeroMemory(&data, sizeof(data));
1 n- I0 ^2 T: g5 W0 H4 ]1 h! Z2 ^/ H
//print background7 ^, g% o" l5 a! j2 a8 F
setImage(&data, waypointBackgroundImages);1 P- U/ Q' X& ?! O
setFrame(&data, 0);+ n) z+ X7 T9 o. n
int fixx = 0;/ ~) `' h: Y/ s$ Y
int fixy = 9; [9 o* ^ T) A+ Y
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);8 p7 [$ d; w4 V
setFrame(&data, 1);' D( _/ [% m+ d8 a, o! n3 f
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2561 e4 [! Z, X: @) t0 u' J
setFrame(&data, 2);9 F+ H9 g/ C& `- t
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
8 B/ N( u. F0 v2 K2 [ setFrame(&data, 3);
8 e( ]* n, }- I/ T( { D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);- ~* U. j* a. M$ u) S5 }# d0 f
* W1 F0 @4 _ n% L
}
4 R/ P) u, G3 u& s8 l+ V. p- Q__declspec(naked) void caller_WayPointBackGroundFix()
7 Q: O& i" J( ~4 e& [{) \" a: b+ Y E/ x4 q, N7 Y* c
__asm
+ x9 F9 W5 p' v {* R1 p. {, |0 U
PUSHAD
$ H5 {7 n. B0 a7 P: M0 X lea eax, dword ptr ss : [esp + 0x38]
. P( p. [; i8 l: Z1 E push eax; r3 y, f7 W( F U
push dword ptr ss : [esp + 0x38]
3 X. ?" k2 }: q7 R* ^, A push dword ptr ss : [esp + 0x38]
5 f/ S! S: N) P3 q: ^( f! Y lea eax, dword ptr ss : [esp + 0x38]
5 Z# p8 l3 y' Q( V push eax. \3 a; Y) {% \6 K/ x
lea eax, dword ptr ss : [esp + 0x38]; B$ p/ R4 B: V- ? |7 Z i
push eax( c3 `- o" K& E" f& r
push dword ptr ss : [esp + 0x38]
$ l: v& U) v) k% O+ o/ s+ ^" B, k call m_NewStatShow_WayPointBackGroundFix
/ m& N% o! m& L2 Z, M0 R POPAD; a! W2 \# y- m
JMP D2Gfx::D2DrawImage
3 J' q; _5 ]/ B4 T }! w# v. K h2 b) }
}' g; \8 {/ h. F) o$ T) j
: F- k3 j+ N5 T# P9 W' \$ D
3、以下可以搞16*16超级箱子-腾出我们需要的边缘2 }7 E* X8 G& _( Q
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)2 Z! B, J8 W* {, V v. {2 v4 H" G( U
{
3 c" M+ r) R8 V% F class D2MultiRes : public Library<D2MultiRes>) M* H; Q3 B7 {. _; s, x, o
{
$ E) R6 B* @2 N" K$ E( V public:7 Y1 N o" X3 v4 w6 x* L
static void Init()
6 b+ f* E& N' j' P& O {
1 k9 n2 @7 S$ Z Name = "D2MultiRes.dll";
& I8 M4 g1 T3 x; s0 L; i Offset = LoadDiabloLibrary();
+ n9 G# v1 p6 E' f$ @& K$ G5 d }2 D3 q+ t) c7 v7 q6 q( A
};
' \- }" I3 r K! B7 x! T D2MultiRes::Init();1 U- S+ P9 H0 [0 _
D2MultiRes::HookLibrary();2 u5 h8 r" X# ?& N, W6 n
W5 i; f9 f. ]$ l# M. Z
3 `+ P# ?: d6 r- \1 m6 R) R MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
' o& w Z% i: P' y% c Memory::SetCursor(MiscFunctionsOffset); } _: m: f7 {- S
Memory::ChangeDword(0x1b0, 0x200);2 s7 I0 n1 v# U7 d
9 v# d& n- t3 \2 V( F" Q2 ^" d |0 t& \+ q
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);- w/ n, d3 V, |5 D, I i& t4 E
Memory::SetCursor(MiscFunctionsOffset);' N/ ~7 Q; l% c: g, i- K r+ J
Memory::ChangeDword(0x140, 0x200);
* L7 L4 O, p$ x& m2 b8 x# W3 M) d* ~9 U& v, n" L
3 }+ c% N/ H1 K- b* {6 N, F
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);; T4 c! I! \0 h( \
Memory::SetCursor(MiscFunctionsOffset);
9 w$ {9 u* p6 {( R9 a+ d Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
; V: C5 W* s. Y2 Y- n$ o( y# O V# [' ]* O O8 L, r; v) U, r4 O# o/ c
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);8 D& z* c- M& c' o( ] y8 _* @
Memory::SetCursor(MiscFunctionsOffset);- g* r' F4 o: I! e9 W
Memory::ChangeDword(0x200,0x299);//下边缘 299最大+ O- D9 [1 _2 u7 H6 M
" g6 X9 P% M4 p+ f7 G9 g' N
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
; v3 Z" R# z# `3 N6 C* _3 C Memory::SetCursor(MiscFunctionsOffset);
/ b5 _3 T$ w Y a. Q& | E Memory::ChangeDword(-0x280, -0x400);//这个不要动
% W7 N7 c9 r' ~& g* d }
7 v2 ^8 m( S- [3 ?9 a" }3 z& D& R7 }* I0 @
4、快完成了,是不是发现金币啥的位置不对??
/ N. ]" g. L* z( S g- s% Y5 A( G; P( w: [7 @$ u8 {
//这里修正我们的装备栏2 K8 J" C1 S4 \8 m3 n( e, M7 S- e
offset = D2Client::GetAddress(0x99B6C);' J3 H; T+ y$ s s0 [( V/ B+ B1 i+ G
Memory::SetCursor(offset);
. s M/ H3 p; ^- c6 `1 v Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);& _6 ?7 Z6 ^" N+ x
2 q( M/ R i% t# I$ O3 {3 H6 i offset = D2Client::GetAddress(0x99BA7);
7 `5 y" G8 u' j# w, y Memory::SetCursor(offset);$ S6 I- Z* j7 c$ y
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
3 y1 h5 ^" {+ w- K% z) ^& M) x h- q0 @
offset = D2Client::GetAddress(0x99BE2);. \# B( s6 G( r$ P$ N: ~3 b5 |
Memory::SetCursor(offset);
& ]( w! A) t& R! k8 k Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
: w; P6 r. z6 l7 `6 _
3 O2 Q6 X; ]3 y3 A6 S8 g offset = D2Client::GetAddress(0x99C1C);4 _' t/ i1 D5 v
Memory::SetCursor(offset);
. O7 P+ K" N! W+ J* m Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
4 f' M5 w* j5 E, k8 w% O/ g2 H V+ d' [
//取消两个popup,偷偷懒不过分
# F! K9 ^$ r* j. }" h) ` offset = D2Client::GetAddress(0x9386d);
: S3 q. }) N% Q0 | Memory::SetCursor(offset);
* O0 w/ m1 I/ U1 b5 p Memory::ChangeByte(0x8b, 0x33);! p9 T6 o* `' Z2 y
Memory::ChangeByte(0xc8, 0xC9);# T h$ |9 y. l
offset = D2Client::GetAddress(0x9390b);& ~. M! U8 |0 R. D+ P6 Z% i w/ C) g
Memory::SetCursor(offset);
5 @/ I* z' L6 L4 v# e Memory::ChangeByte(0x8b, 0x33);
4 j! Y7 o8 M; v; U- N9 \( f8 I Memory::ChangeByte(0xc8, 0xC9);5 y) D: i0 Z1 X) q$ A" D
$ z. m; e! |; t3 b5 E d* S
//修正提取金币. ]( m* n2 ?2 R; M9 }8 o. W
offset = D2Client::GetAddress(0x8D3E5);
2 [. X0 P) b: d Memory::SetCursor(offset);
( x" y; E- Q$ { }+ G Memory::ChangeByte(0xA1, 0xE9);
5 H1 p1 z. U# ?, F& ]0 W Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);# X" t% m; u* [' _! a
# z: `# L; o7 B. g5 U# l
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
# q! h1 w K8 G, g" N# g Memory::SetCursor(offset);
$ s! K1 H( x e8 n: Q Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
/ w2 i0 t- B5 J; b/ J1 K; |0 t
7 ^+ T3 y* w: \/ p' s8 S$ U- p4 n/ } offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);; N i! }6 F. l0 ?6 d7 K
Memory::SetCursor(offset);% ~$ H6 A' X% \4 f1 p# f8 X5 c
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);. P* z; `1 u$ w% M) o, t
( d5 [. s- T2 x4 H. y* |3 ], P/ C //修正关闭按钮8 T9 p' V2 K8 c/ p
offset = D2Client::GetAddress(0x8BD90);4 F. ]$ L' o9 f4 I+ J* G0 K
Memory::SetCursor(offset);2 e" M w D4 C" q8 Z
Memory::ChangeByte(0xA1, 0xE9);# w* p, C; k) a2 O$ }& \
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
; o1 k8 b9 Y& i" b* A$ u! m8 Q5 x/ `1 N2 f8 c( r7 S
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);& E5 w0 ^' m! L% @; B M, u
Memory::SetCursor(offset);" O) v, | x# a4 z; {
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);" P$ I' X- f: `6 ~4 @- o
6 b+ U4 c$ Y% r, U3 Z0 Z
7 D) @( G$ S& h5 E/ p5 `//以下是细节
2 R1 W" G) g [" g- C2 v& n# |#define getXGoldCoinFixBtn() RX(0x2d0)/ [2 T. Q, I! e$ N$ m1 ?; q
#define getLGoldCoinFixBtn() 32
" K$ D7 ?; i! o$ A# N#define getYGoldCoinFixBtn() RY(-0x59)
8 e' l6 e$ U) L* |" R2 f#define getHGoldCoinFixBtn() 32 Y, b" C4 n* Y
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
2 B% f9 G0 s# {2 ^" @- p1 s& _: b. X6 s
#define getXInvCloseFixBtn() RX(0x3db)
% m7 d1 [" q; O Q% @, j/ n#define getLInvCloseFixBtn() 32- E/ X! _- ` y# n
#define getYInvCloseFixBtn() RY(-0x63)! o/ X' a3 t' C) q2 U# Y
#define getHInvCloseFixBtn() 32
8 S- J* @8 B3 `* J( ^8 Z#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
: g& Z/ W1 R4 f) G- n/ T4 R# [: ~$ }( j- r
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)* V8 c/ s$ w! E4 `1 C
{
" P. M; i9 Z: s DWORD mx = *D2Client::ptMouseX;
5 }0 |7 y3 b: s9 |; { DWORD my = *D2Client::ptMouseY;
5 t6 R. G5 f o# R0 P% }( R& B if(isOnGoldCoinFixBtn(mx, my))- ~" V j, x+ ~7 W9 { f2 o1 {
return TRUE;+ i6 H+ Z* d3 \, E5 W' j
return FALSE;
- v- v4 |0 v2 _; c}- I& h1 n+ }# y& P1 h$ Y# w3 ^$ o2 D
__declspec(naked) void caller_goldcoin()
% Z0 J+ u6 U9 P$ m{
P5 j% ]% m9 C4 R( A6 C& d __asm
3 D; {& k$ N+ J* L4 j: O {& z; l0 c: i. Q
push ebx
! M% O2 c4 Y% j6 H+ w; @; g mov ecx, esi: `. t# u0 J% E6 H- g
mov edx, edi# s! N6 [8 _: D* p. `1 }0 Z
call m_NewStatShow_goldcoin/ l4 \8 ?4 O' O4 I- X5 L9 \. \
pop ebx
3 a y7 f5 u) |' w5 @ pop esi
6 t! S$ U1 T9 P! c( \; V retn
4 s9 {* f% g6 w) b, i; \8 f }
2 d' q( c3 \8 X}
6 j1 G4 Q( g. _& C; A% `0 fvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
c1 Q4 Z: N, b8 [{
6 l$ z L# t) H$ F5 N if (*nXpos > D2Client::ptScreenSize->x / 2) T1 y8 T8 O9 @+ C/ b* n B n5 P
{
- m" Y; r6 X( A* S8 Y/ v( a *nXpos = getXGoldCoinFixBtn();8 o! R9 @, y. \. X
*nYpos = getYGoldCoinFixBtn();
; @, e% \+ i; ~ }
: A: H* q0 f {# L}3 B% L1 R" {! b, S2 i6 y
__declspec(naked) void caller_goldcoinimg()
* B& j" b& S! [{3 ], ?1 Q0 Y+ g) u5 s" a
__asm* r6 i& X: p b* L
{
# R# ~6 a! R* x6 N1 A, u0 p PUSHAD, e+ l0 _, n8 w. }8 I+ p
lea eax, dword ptr ss : [esp + 0x38]4 E6 |& _, o% |/ \& j
push eax5 _3 ^) e: V. L8 b9 j& x+ W
push dword ptr ss : [esp + 0x38]' V3 l& a2 b$ ~6 ]
push dword ptr ss : [esp + 0x38]
% c2 Q: @. ]* @3 X$ j8 k/ M s/ l lea eax, dword ptr ss : [esp + 0x38]! P9 `7 N: h; H( \% @
push eax
, x( j. l' T% M" q6 Z lea eax, dword ptr ss : [esp + 0x38]& B, y. J9 Y% `$ U0 K: k" d P
push eax1 S+ G; K9 V2 R! j
push dword ptr ss : [esp + 0x38]( T6 k4 c* B# e* i
call m_NewStatShow_goldcoinimg
+ Y1 K8 O4 n2 w6 c" ]5 k; r: |* q POPAD
7 u `8 a7 Y# E& i. I JMP D2Gfx::D2DrawImage3 ~% j/ b( P6 G" `
}
+ ~: A5 }5 H% J}; a( H2 ?+ W( y% N3 s
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标5 c, a6 @4 P' @4 L! w
{5 g6 G: }( r. x/ o) C& o
if (x > D2Client::ptScreenSize->x / 2)1 O" b5 a6 H! r3 X2 `1 w
{
, P0 v3 E3 Q5 v- B( r *y = getYGoldCoinFixBtn();
$ N7 i T* u" {; d( d8 x. ^ return getXGoldCoinFixBtn() + 32;: f- q1 ^+ t6 r1 X% D: f
}
, Q* _. {$ S& i7 \ return x;
+ C: y1 J" r1 N- _}9 D% l1 i4 W1 K- J3 ~
__declspec(naked) void caller_goldcointext(): \) o2 `% c, z& V; X
{
1 M" c2 c. f6 n" s v+ V P: B: d __asm
! ]/ G# S6 z- f4 l {
7 Z8 C8 |+ s e PUSH ECX+ n3 W& {2 n; K6 m2 z) T
PUSH EDI
2 ~' q# } b S2 ~7 a- e5 w8 h0 ` PUSH ESI
6 |1 T# c: o; v7 O6 c, F6 I PUSH EAX
3 ~4 j5 @$ l k! G0 U MOV ECX, EDX4 X2 k2 E1 N3 A. Z3 A* k# }3 e% a
LEA EDX,[ESP+0X4+0X10]. f1 z) R% a5 `. P: w! X0 F# T2 ~ s
CALL m_NewStatShow_goldcointext
4 h* Y& U3 e$ l, D- E' v j/ Z" u MOV EDX,EAX" p' X4 I7 P/ D9 s o# p6 g1 [
POP EAX' x' h H/ t% E+ t P9 \* r
POP ESI" W- g7 q3 S P3 G+ O. D
POP EDI
+ f2 i" h$ s! }$ ~2 N; S- J POP ECX! ]) C2 ]8 F" t; m
jmp D2Win::D2PrintString;
+ v: q, Y- L) v' g ?7 x! ^8 D9 R }
1 R4 F- x t- D}
+ W1 a6 U$ g( a$ R
/ H" |9 r) k9 s1 u$ v' V3 v% VBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)3 u) d" B, {# H0 E6 J( A+ F# S
{
9 T0 {, c) d" S- u DWORD mx = *D2Client::ptMouseX; g% Q; Q# e/ T# d) H% V* S5 A
DWORD my = *D2Client::ptMouseY;+ D" E" j, j( a4 ^1 `; Q' B* B2 t
if (isOnInvCloseFixBtn(mx, my))
" ?9 V! J0 x b, s) L( F; T return TRUE;
% |" L# \! x" ~3 ]0 y return FALSE;
9 {' u1 a* R1 h8 _}3 s+ \8 Z+ W5 e" R
__declspec(naked) void caller_close()
( e1 ?) @ x, h* L4 r{* K4 L$ @" ]5 T+ ~6 J
__asm) W. t. }$ k0 \/ z: `
{5 v7 Q# A% I$ \& u. `
PUSH ESI
z$ v) o0 D1 Q4 W# |4 S H+ }1 [ push ebx
, S" Z" F [$ ]0 m( V6 U call m_NewStatShow_close. r, y( s6 d; J5 B, Q: A7 R! Y, T
pop ebx5 M, j) N, y1 `$ p
pop esi/ E" u; e6 @2 ?
retn$ y, w- [, s# ^0 f5 k/ E
}* ~, V' x! B, X: j" I" R7 h* V
}# u8 Y% Y; i! X, n: M
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
% {, {- ]' z3 a( K O& z1 \: x2 S0 p- S{$ r' l2 R' I r0 Y N' J: w/ b8 N
*nXpos = getXInvCloseFixBtn();9 ^6 u3 s" r* m2 K2 Z: [
*nYpos = getYInvCloseFixBtn();
3 Y! Q$ _( I7 N% v/ ^$ [}3 ]- D& }8 F* j; p
__declspec(naked) void caller_closeimg()
" ^/ D3 ^1 l! d+ i) z. t) G/ [; U6 Q{
: J/ _$ [ E# m __asm
, S% Y' |' p- w1 U# s' } {! V& K5 [- f* y
PUSHAD* W( x0 L) V; R: B: P
lea eax, dword ptr ss : [esp + 0x38]
, {0 ^0 a+ x# C; v0 ^ push eax/ @! a) k- T, y# K! v
push dword ptr ss : [esp + 0x38]
, g; d V" g$ f+ ] push dword ptr ss : [esp + 0x38]2 a9 C5 F5 Y y0 {
lea eax, dword ptr ss : [esp + 0x38]4 Q$ }) P% j$ d9 F3 Q; z& A+ B
push eax' i. E9 V5 P# [
lea eax, dword ptr ss : [esp + 0x38]
/ p* w0 Z4 A) ~+ w1 Q: c push eax9 [ p( M3 f- T# R2 \
push dword ptr ss : [esp + 0x38]5 N+ K$ @1 }% R. w9 r
call m_NewStatShow_closeimg! u1 ]7 n* S2 a' p$ m
POPAD6 I% V; f' v V; J" z
JMP D2Gfx::D2DrawImage# c% s3 y5 Y" x4 s5 U! i
}
; V: j+ w* H1 U1 W: P}3 M. h. _2 t; M }' A) p
* h7 `4 \0 ?# d+ x& A' G3 t0 C6 z+ Q5 Z
- U2 u0 Z; y$ p7 F V6 T |
|