|
|
转载
! F' t) y7 s2 d; oBY SJ
2 Y& |& q+ S9 y首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
. {1 w8 Y2 ]) l* @' m" L1 B
9 W3 J, O( B5 DD2Gfx::D2DrawImage-10041$ x8 M& t. u7 T5 T
1、修复技能的背景(不需要可以不要) w- @* W# ?( R- m6 u; K
offset = D2Client::GetAddress(0x77AA8);4 w' B0 Q$ b" c# I
Memory::SetCursor(offset);# W) h! K# N9 f0 Z$ F1 {
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);. U5 u6 w+ b# j* H R3 ?
" q* t% h% D& D& ~* [8 z+ g
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
( o8 b8 p& O- B9 f{
0 J0 d6 q; L( X Z3 e. f' b //Init data for print image
( y! ~, s" V3 J& W2 w7 m' Y C sDrawImageInfo data;3 y' | I& v2 \5 \
ZeroMemory(&data, sizeof(data));
% h: i( r0 V- L6 Y5 C) t( q. X" v+ Q+ P$ F
//print background, I7 U0 d; B, {/ {4 A1 ?
setImage(&data, spellBackgroundImages);
+ d" s) G6 U- v1 S; L% r/ o4 D setFrame(&data, 0);4 m$ }5 o+ ?9 w1 i
int fixx = 511;* T# u6 B* l( G
int fixy = 9;
. u8 X% {2 [+ Q1 @+ T% R* ]# W D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);0 P' J5 ^0 [. O% A% }
setFrame(&data, 1);' G$ T9 N+ J; L7 w3 Z/ B
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
/ d) b+ M& X! F% C setFrame(&data, 2);
- `) b0 ?+ \8 b1 ^: p% e D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
3 g& Q2 I' |: S: W setFrame(&data, 3);: x! x( ^3 v( @% g
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
" n+ ~5 ~7 S( h# J* Z; i}4 i. b+ C- A9 r% m
__declspec(naked) void caller_SpellBackGroundFix(), j z' T1 Y$ b4 [$ j
{# H1 l4 _8 ]7 Y9 @1 |1 x) v+ I
__asm. k. i+ W( @' S4 K% _# x w1 A$ G
{1 k6 j+ w! v+ b) h% [# s
PUSHAD
& ?/ B/ c1 B' M lea eax, dword ptr ss : [esp + 0x38]# W/ ^. n. W* \+ V& k K
push eax5 O2 k" J O' V5 @/ \
push dword ptr ss : [esp + 0x38]
6 q3 F4 _! D! q# X$ } push dword ptr ss : [esp + 0x38]
& c& b9 ]- Z! C4 O% Z# G& @3 `# V lea eax, dword ptr ss : [esp + 0x38]
/ N+ l; d% Z8 o1 @5 t push eax& O8 S; S) e, n7 c V
lea eax, dword ptr ss : [esp + 0x38]+ e6 h3 l; P; r( T0 v
push eax2 K$ X) Z( i4 j% K# M
push dword ptr ss : [esp + 0x38]) Q; Y( M5 G! w; `
call m_NewStatShow_SpellBackGroundFix% f5 r! {9 X$ y# E% A5 w
POPAD
' a6 s# K `9 g, a2 j! G" n x; h, H& @ JMP D2Gfx::D2DrawImage
! b$ h3 ]# E8 y' p% _ }: O. f7 u/ t I2 P1 F
}
4 K, j& [; o, a9 z) B* W6 x8 q- g* I" ?4 W
2、我们如法炮制小站的背景
' I" I) O% _& C) D2 T: u( u9 ] A' I. a' s7 D' N; C
offset = D2Client::GetAddress(0xAB010);1 S3 R* @' R) l6 @: }
Memory::SetCursor(offset);4 K; w/ B; i* V; _% I
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
" s( u9 C: x% K8 \+ P
) B* g" _1 ?. Qvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
2 I, @3 k% T% \. A% C. A- r, ]{
/ D; a4 C3 H3 e3 T //Init data for print image
5 x; I' R9 x4 T; Z sDrawImageInfo data;5 W4 x# k% ]9 x+ J
ZeroMemory(&data, sizeof(data));) m& x' r4 r5 Y# i
% @% \3 `+ _/ z
//print background
1 s. n( H# U. G X setImage(&data, waypointBackgroundImages);
- q, K, @% D2 P( P; e8 e" y setFrame(&data, 0);; j0 w% F3 z; Z1 m
int fixx = 0;
9 b( w9 q: j# O int fixy = 9;! u4 C- L: e/ b% E, a% g3 D2 X- Z
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0); x* o% ?, s6 @
setFrame(&data, 1);
! d* L! K0 s- o1 Y. ^ D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256* ?6 ^& q$ X3 x3 s& j/ q! Z
setFrame(&data, 2); A# c$ V# F. J2 O
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432, p2 a1 i7 t) |. B& ~
setFrame(&data, 3);
: X4 ^) L: {4 z1 Q D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);% E/ p8 `! I5 c O! t. K
2 t) W2 N4 K0 ?0 C% r9 q, n. c( y" |
}5 O% ^7 `8 R( q) b- {$ c+ n. b
__declspec(naked) void caller_WayPointBackGroundFix()# d; }$ ~! P9 N5 K1 p5 b8 d
{5 w# N1 m6 A$ _3 X+ i
__asm, V- P+ D$ Q- Q! L8 u
{
/ H' D' c+ V2 j# J PUSHAD/ k3 g' D2 v A$ A; [# G' [
lea eax, dword ptr ss : [esp + 0x38]2 H, o" b7 `5 X( Z1 ^9 H* f: e
push eax, b9 M* a! j; x0 r3 v; x
push dword ptr ss : [esp + 0x38]
; S- t5 Q! f: I$ h; ] push dword ptr ss : [esp + 0x38]& m6 [- ~$ | e; U9 N6 g) i5 n2 b
lea eax, dword ptr ss : [esp + 0x38]
/ X4 ~' i: m8 q/ ] push eax
* s! L0 L, c3 b) r/ `. Z3 o lea eax, dword ptr ss : [esp + 0x38]: z* F* z* w9 p7 Y$ [
push eax" x8 t% P' E* ?' \/ }1 u
push dword ptr ss : [esp + 0x38]$ @# F- ]/ r, ]- e2 q
call m_NewStatShow_WayPointBackGroundFix. C0 L+ W; H, k5 R1 u8 N$ Z
POPAD
. R! T2 ^7 v, ~4 v4 [7 G1 O JMP D2Gfx::D2DrawImage
+ t* U) ]4 o' l7 T; m }
. r" m7 Y8 a' n$ s, |! Z# o2 h4 t t}
7 L2 o" w* U4 h/ v( C# `. K, q4 r. e( A$ j, `' Q# v
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
9 R- i) ~+ I3 n1 b" Q腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
- G9 U& q* ?4 U- u$ y7 l { V2 t8 S- C3 w; v0 j1 R
class D2MultiRes : public Library<D2MultiRes>( y2 p, W& X" a) U( Q
{$ b$ v2 U0 V% ^* @# i+ |$ @$ x
public:/ R; g) ~7 _' I' H
static void Init()# x! [# m, }: ?. _$ X& B) t/ [
{) T0 V' |8 ]2 S+ i9 Y1 ]
Name = "D2MultiRes.dll";
4 M6 X7 I3 V2 ?$ K- A* C Offset = LoadDiabloLibrary();6 ]6 b# s( [. _) h
}0 h4 N! N2 d4 L. x. T* q* @
};
8 G/ d2 V. d b# ? x D2MultiRes::Init();( z4 L/ ~5 O% r
D2MultiRes::HookLibrary();8 M1 C8 K4 W* ]7 H/ ?6 k
! }9 ~) f# K) n
* b" y+ ]% I# S. j5 `$ r MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);: m6 C: b# J+ G8 M' q
Memory::SetCursor(MiscFunctionsOffset);
* D |$ F& O4 `' B, V1 E6 a Memory::ChangeDword(0x1b0, 0x200);
/ N6 C& M; w, M5 e0 j) ~% I
8 t) d+ H- i. b% T) x: v7 b0 J5 E
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
) t! ~: i3 U+ z. |; N# Q Memory::SetCursor(MiscFunctionsOffset);; ^9 f" x0 a- H$ n3 W
Memory::ChangeDword(0x140, 0x200);
! \% x; k+ e- k$ u. ^
* b# F! J Q$ a3 K1 c0 U# i" B. m
9 T' F6 g, `8 V, b4 B0 x2 ^* v( V [ MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
1 @3 T- k o1 ?% K, j3 K9 ^3 @ Memory::SetCursor(MiscFunctionsOffset);$ }3 h' F6 w$ I4 O9 k9 F- U* @
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块3 H+ G. B# |* F; [5 k
' c& P" W8 P% v MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);6 _/ S k6 n1 q1 ^3 x
Memory::SetCursor(MiscFunctionsOffset);
9 W" k, l! k- B: ]$ f5 _ Memory::ChangeDword(0x200,0x299);//下边缘 299最大* B. k& m( `% W( v$ F* e4 Q
. b" a( g& O+ e9 a) ?7 `8 M! b
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);8 s( ~) D, t9 C% i9 g# D9 `& ]1 x3 q
Memory::SetCursor(MiscFunctionsOffset);
& e8 Q) A" `& \ y7 }1 ~ Memory::ChangeDword(-0x280, -0x400);//这个不要动
( s$ _3 }. p( J/ w! h }
+ i; }8 o; g/ ]8 J
* o: _0 U: l( {2 C4 a4、快完成了,是不是发现金币啥的位置不对??; }3 _7 ~2 j) }1 h0 v9 k7 R
- Y6 k% k* a; \% q
//这里修正我们的装备栏
9 W8 @0 U& A9 Y- K5 d- c. j! }6 h offset = D2Client::GetAddress(0x99B6C);
! a+ h+ K F/ q' [+ m. s' N Memory::SetCursor(offset);
- L ]! [: A5 x4 _. b7 t Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
& W) R. I8 ?( ?2 E
; Q4 D. P: |# p! g1 n( y4 f offset = D2Client::GetAddress(0x99BA7);$ P+ V1 ~% Q+ j0 A2 R1 ~2 G$ D1 H
Memory::SetCursor(offset);& v$ k' p: ^" @# N& R
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);) w, R) H8 H! {
: r. R5 J8 \9 E! u# ]- t. X( W0 M offset = D2Client::GetAddress(0x99BE2);9 e. d& j) Y: T8 Q9 l1 {- A" s
Memory::SetCursor(offset);
0 X6 O# ?* ~: K+ U5 \* B! Y Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
; z3 |* `' X) P4 d0 {8 v5 x
9 w$ I2 W6 ~' @6 |9 x offset = D2Client::GetAddress(0x99C1C);
$ f, _: m5 Y$ ?0 Z' k Memory::SetCursor(offset);" p( z' H2 I7 m- ^1 C- l: b1 W6 ]
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
$ e& B- t8 j* Q' v! f p& l) O& Z& D* `$ H% Z {4 E% p
//取消两个popup,偷偷懒不过分
/ e6 b; f( @0 S! @% r( n offset = D2Client::GetAddress(0x9386d);
& ^) g: Z# _. r2 {+ p. L, x Memory::SetCursor(offset);
: I b8 X- l! T$ D5 R, j Memory::ChangeByte(0x8b, 0x33);) g; V6 n. E( N
Memory::ChangeByte(0xc8, 0xC9);& D9 _- S# `$ h/ C$ d
offset = D2Client::GetAddress(0x9390b);
5 [9 r( d) p$ W' Y1 J! c4 c# W0 L/ U Memory::SetCursor(offset);3 ]. B+ r$ T$ A; s9 a W% l0 C# Z
Memory::ChangeByte(0x8b, 0x33);
$ d8 o; D" X: M/ O# x Memory::ChangeByte(0xc8, 0xC9);1 t( i8 x: n v4 f" t+ v
G. j* C+ X) W [3 C! ~$ q
//修正提取金币8 B2 e% h) U& Q6 v
offset = D2Client::GetAddress(0x8D3E5);
. k7 S8 |; @' W Memory::SetCursor(offset);
4 q9 d- |- a" n0 Y$ g5 U3 ?1 C' o Q Memory::ChangeByte(0xA1, 0xE9);
( Q- ?, s/ ^3 b( U7 R1 b Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
7 A* N( k E* W* U: ^) c x+ e( V4 ^$ ^
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);$ D7 N8 n& F7 o4 y3 z- \ `2 X& i
Memory::SetCursor(offset);
]- q. G. Z/ [+ w# r* ?2 _ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
% p7 j% x2 g, K4 y9 S" U/ w1 W5 Z" M* N3 q! s/ V! }
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);& p9 q1 f4 V: v4 r7 T
Memory::SetCursor(offset);
% j) ]) L7 S3 e7 l3 ] Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);5 [0 i$ E- H4 d, |
* \( T9 C) b4 n" P; g: c& L: v% Z
//修正关闭按钮" v% y9 m x3 f) P7 b
offset = D2Client::GetAddress(0x8BD90);5 D5 N7 u# f7 F5 S( Q8 y9 w
Memory::SetCursor(offset);& a ?& w; {+ Q
Memory::ChangeByte(0xA1, 0xE9);
2 i0 K- N e4 b( q3 p- [ Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
1 ^0 j4 J0 G. ~& J, ~0 ~& u4 u/ K2 H# p5 n$ X% D
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
+ u( v2 C' A! G! T: M; Q5 ?7 k Memory::SetCursor(offset);2 N5 A. e7 w5 G- E; h
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
. q: N. I Z3 I0 V8 F; r1 S! c7 h2 @4 h% _+ ^: [; M
. e* b% ]; o/ f4 `: ?- c//以下是细节+ P+ U0 ^1 D0 f' Y
#define getXGoldCoinFixBtn() RX(0x2d0)
, L' J* |7 I B( R" w! @#define getLGoldCoinFixBtn() 32
* }# A s, J+ j: e5 G#define getYGoldCoinFixBtn() RY(-0x59)
. i8 J: O1 Q9 p$ I; g) E0 _#define getHGoldCoinFixBtn() 32# b* Y# M7 H% e h i: k" a" G
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
7 H2 k U, \, K ]/ F# w6 _4 _; B4 j8 o" p) p: ~
#define getXInvCloseFixBtn() RX(0x3db)
$ ^0 L- E8 [; N" N#define getLInvCloseFixBtn() 32
4 f( i/ A8 G5 W#define getYInvCloseFixBtn() RY(-0x63)* A4 L; s$ t) D6 F6 p
#define getHInvCloseFixBtn() 32
3 c9 @6 J. a( H x/ r# h {% C6 u' y/ h#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())% ]! H- [4 [) j. J: H. x9 |
% k! |- W2 d( y$ h* V$ QBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)- w) |1 [, U# M! [# {
{
* _* w1 H! g+ o% E DWORD mx = *D2Client::ptMouseX;
' @- ]) L3 z3 r DWORD my = *D2Client::ptMouseY;
7 d3 f: c( I2 |% g& E# Y" e if(isOnGoldCoinFixBtn(mx, my))4 e$ v* ^# A9 n; S, M$ Y. [- P
return TRUE;
. t+ z3 f) u5 V3 D2 \ return FALSE;3 z3 t7 N; B3 _0 A- ` A
}
! T) n; r& g# Z/ R6 H' e! `) H( G__declspec(naked) void caller_goldcoin()
' J N6 s# {/ R( Q{7 r7 ^* s' ?3 F: f! A
__asm
( f3 w6 a; w. g, u {
$ g0 g: M- f1 C8 M3 u9 _) T* `. a push ebx
) q( E* W3 p) S1 r' k mov ecx, esi
8 \, q+ a- L! q; @ mov edx, edi5 ?6 r& c! ?/ {$ d. J; B
call m_NewStatShow_goldcoin
1 q) Y) R. I4 p& m" p pop ebx
: h: N& f: \5 \+ p) h9 G pop esi
( ^) t& Z- r8 w# y2 U- g retn
* {2 g. M4 a5 J' B8 v1 l6 n- l }0 p+ w5 r( k: n& B0 i; U6 H3 ?; G9 U
}5 N. k0 R) x0 s
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
: \# n* m3 ]. I( p{
# ]7 z/ @: j2 [5 r if (*nXpos > D2Client::ptScreenSize->x / 2)# u3 Q! A3 p0 J c7 C4 I/ X7 g S
{, S; Y K" ~. y) [6 t# `3 X9 b
*nXpos = getXGoldCoinFixBtn();
% l1 B" w4 G9 s6 ?; r) o# E' w *nYpos = getYGoldCoinFixBtn();
5 U* u! G' R: o }
0 c O* z0 l3 ?: |}4 R! Q& O9 s) X' d/ ^" G* h A
__declspec(naked) void caller_goldcoinimg()5 d: v' Y( y* h" G; e1 n$ Q
{: B+ o/ R `, ^5 U( U
__asm$ n8 x8 U7 L& ]- `
{
( m- ~, r: F$ |! B, F PUSHAD6 A/ R) w" j( I- p$ a5 B H. m5 A
lea eax, dword ptr ss : [esp + 0x38]
" H, G4 R3 G, n1 f( F$ O4 R push eax9 n) u3 N" `" t% |! H. o
push dword ptr ss : [esp + 0x38]. p2 G$ z$ [% f. O9 Z
push dword ptr ss : [esp + 0x38]
) i6 C) _8 }! l, p' t* y. N lea eax, dword ptr ss : [esp + 0x38]6 A6 ^& N) H: ]4 @
push eax: D+ X/ ^2 k( N1 L1 ^
lea eax, dword ptr ss : [esp + 0x38]; [, W3 b9 J" o
push eax; ^; f4 H( _" ^& u
push dword ptr ss : [esp + 0x38] \# L6 j* x2 h0 q/ ?6 z
call m_NewStatShow_goldcoinimg
! G7 O9 B) ]! N POPAD; d2 n* E" r* r- N3 \
JMP D2Gfx::D2DrawImage) V6 U# D7 c! k7 ?- H
}
" I" h N4 n' ~0 d}
8 `2 s2 _8 d# p( n _DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
7 {% u5 a9 P5 F9 p{! G6 H; h/ q! }+ f
if (x > D2Client::ptScreenSize->x / 2)! F$ b, Q/ E$ ]+ h# B9 f
{
! b. f& P" {- D3 N *y = getYGoldCoinFixBtn();
: C$ h# X+ V- D$ L% x return getXGoldCoinFixBtn() + 32;, }! `! K$ C F5 v
}8 P/ `% b. I4 {+ w' i( f
return x;$ ]8 K5 W" b2 @
}4 [4 @5 r0 b( c6 y" v0 {
__declspec(naked) void caller_goldcointext()- z; \- l3 K& @: P9 @, X4 ^
{: X% j. |" o5 E! \' P5 A
__asm
: {8 T' X+ C/ v$ X9 W( _. F {& U, ^# M) I" P, C2 n' \
PUSH ECX0 M/ @+ p5 c$ S) p; t# w
PUSH EDI
* {' u5 Y5 K- U9 J; H PUSH ESI( S% v( Q$ s# ~, O, y' }
PUSH EAX
* F3 S% d7 T: {0 a/ m MOV ECX, EDX9 n, W& b0 \/ x" T* s' G
LEA EDX,[ESP+0X4+0X10]+ S3 R2 ^" M2 A' P
CALL m_NewStatShow_goldcointext
( f0 P1 ^* n# L1 _ MOV EDX,EAX
3 T" e6 R& W) Y' Q% Q POP EAX
6 u3 M: v, v- M' Z7 L% U POP ESI
; @* F- R, U) ]+ a; Q POP EDI' l6 o2 e- r9 H3 I* H+ s- A
POP ECX% c: a: z) Y& G
jmp D2Win::D2PrintString;3 l1 p$ ]6 l1 Z4 e. S! {
}6 L2 W( F& S# O D
}
8 _7 w$ V3 S* K/ F7 u
9 P) w' M9 s1 Y9 vBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
' L# n* Z: Q& H; s) O3 B* H{
8 F; \: X+ k" E( q$ B5 h DWORD mx = *D2Client::ptMouseX;4 J5 O1 Y: }" s
DWORD my = *D2Client::ptMouseY;
; e6 j8 y* B( P if (isOnInvCloseFixBtn(mx, my)) \7 r8 y. k+ Y+ `9 e, [
return TRUE;
" b4 n2 _& R6 T return FALSE;; d3 m) _$ @: b& S& O' `6 Y
}
* w8 h% g6 |/ s& G8 D! p y( C$ G0 ]__declspec(naked) void caller_close()+ K# A, r+ m% l+ Q5 @
{" m) ^1 y9 G; P% Y- ^9 \
__asm0 T5 A0 v! A0 E* T8 K
{9 [, z. X1 @6 p" ~
PUSH ESI; O, G, C7 v( u% M( P' h: u
push ebx7 y) t) U" b' d
call m_NewStatShow_close
7 ?- {- d$ I. M/ M u, a! H8 q5 X pop ebx7 ?, X9 P0 Y- u, q$ n5 G. b
pop esi
+ g% d9 l) K& s/ G* f) E retn% k& X, g$ z8 w2 ]8 E4 o. O
}
) o4 w2 r4 O d* f6 j: W* l}- a6 g( l% h: d2 m$ W# {
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]) C- e6 h) G! r d) Y6 U& J
{
! F% i9 F+ {+ j; C& \- n *nXpos = getXInvCloseFixBtn();6 t( M& `+ ]: F) c" O* ? x
*nYpos = getYInvCloseFixBtn();
4 z. o; {* d6 I; O- D6 C$ r( G}' r C# G7 b7 T/ x# [2 j1 u% C
__declspec(naked) void caller_closeimg()" I4 E/ c" Z4 e) O2 n* j
{0 K! W+ f5 a( W2 D( [
__asm" E. I; A& I% u6 N! x; X. v( ~
{/ E" M1 S7 y2 y( b5 D6 t% \) ]1 o
PUSHAD6 G: v! R+ e; w. O7 x0 b2 `
lea eax, dword ptr ss : [esp + 0x38]
. M% u- q1 P! }4 d/ b push eax
7 H: B) n( f! `& J7 z push dword ptr ss : [esp + 0x38]( P9 V0 E' p$ }/ v$ C
push dword ptr ss : [esp + 0x38]
; U: s9 j' c+ p Y+ D8 l5 C. @$ p ] lea eax, dword ptr ss : [esp + 0x38]) F2 ]9 C9 d0 X6 B
push eax
' q6 ?+ I) g/ ]& t5 D5 i( r lea eax, dword ptr ss : [esp + 0x38]
. N0 C7 b1 M( W8 j n1 @7 U; ~5 g4 } push eax& ]9 l N& U3 G. t) |6 V" Y+ y
push dword ptr ss : [esp + 0x38]
B+ ^1 L8 G6 n& r0 ~ call m_NewStatShow_closeimg/ x7 y7 \& H4 K6 t, B
POPAD
* K4 @7 ?+ q M# Q JMP D2Gfx::D2DrawImage: Q4 F N7 `( ~2 d1 b0 Y% w* X
}
3 q7 M! a9 B, n- w# q C: o}& `# D0 Z i* _! z, ?+ T# @, P& q4 N
! d3 }; n, E( R+ `6 |1 W% \
1 B: N5 h2 N% H" v |
|