|
|
转载* K5 r1 k. t" c2 t6 b) r2 k
BY SJ
4 l; Q0 u6 \& [& W3 g# M首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)$ w) H; o8 P6 U# G3 N( Q
% o+ V4 t) T% y+ K0 D* C7 k2 S
D2Gfx::D2DrawImage-10041& ^: \. \& d. ]: f, i) H
1、修复技能的背景(不需要可以不要)7 h& ?; _" Z# ]8 B* p3 q% p
offset = D2Client::GetAddress(0x77AA8);. n1 a+ J/ x, L" m: m7 j
Memory::SetCursor(offset);$ C9 {# j2 ]/ f1 A# E( _$ `3 n, N3 T
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);8 K$ m5 [2 D. n
( n( N" z% \) w% e* t Fvoid __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])1 ]7 S; |' g# V7 E% E
{
6 x# {6 _4 Q- u- T) t* L //Init data for print image! R! H2 Q* u% r4 y
sDrawImageInfo data;% g' G& f' q3 ?. }" @
ZeroMemory(&data, sizeof(data));
5 X( | D `3 ^& s! x% M' D
2 V- z* T: x- I# f& U0 ^) N //print background
% F& |0 l; P. k; g2 ^ setImage(&data, spellBackgroundImages);
" c7 g: T/ S1 J& w- u( c" ^ setFrame(&data, 0);
) B' l) [2 H3 i! s/ w0 x int fixx = 511;! d4 A4 K2 O: T
int fixy = 9;
2 L1 i0 _% S6 M+ e D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
; Y. G. E1 k: m) D+ [ setFrame(&data, 1);0 Q. Y0 g# F6 {" U" U
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256$ g4 \: R# o# h6 C. r. ^
setFrame(&data, 2);- }+ P5 Q; F) i: |, o- w' D
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432& ~. P6 O n! g2 Q8 S& y+ l' S- K% x
setFrame(&data, 3);
6 x8 D. M: M# m$ K {5 _4 R D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
/ i- o& ~9 }( x; l% V2 C7 F' M% ~}# }! H9 S4 t: k$ v$ a' ^( {8 k9 [
__declspec(naked) void caller_SpellBackGroundFix()$ p+ l5 y8 @: z3 Z8 R2 W' _
{; d; y# K3 L- }( N* j
__asm7 ^1 }+ ?) J( q# _6 b* {- X& a
{
2 h* u+ _" ?4 i& h, x+ b9 J0 r6 m3 p PUSHAD
0 S8 W- P; O: \0 M5 O& `- p2 d% X lea eax, dword ptr ss : [esp + 0x38]0 o8 c5 G; D5 ], z/ L
push eax% k1 i: H1 c4 s
push dword ptr ss : [esp + 0x38]2 y9 Z# [5 p* x: ]' _
push dword ptr ss : [esp + 0x38]8 G/ }3 y6 A9 h, e1 O8 e2 k0 N
lea eax, dword ptr ss : [esp + 0x38]
7 b ^' z' ]' O4 i- R push eax* B+ i( W* |! \
lea eax, dword ptr ss : [esp + 0x38]
& p4 K! `8 _" Q5 o: @; f7 F push eax0 {. q7 K* B$ Y8 Q' D! E' `
push dword ptr ss : [esp + 0x38]
, F' r2 J/ n9 A) n! M2 i7 V# m call m_NewStatShow_SpellBackGroundFix
! e+ I* C; p3 `; u& \& ~6 a H POPAD2 J$ _' ? w# d3 H, K- S% n2 B
JMP D2Gfx::D2DrawImage$ W" O4 E% H& `& L5 J& A
}$ a( Y( P4 K$ K9 q6 [
}
" n `. b( X, M( b5 C% N/ f/ F! F( n
2、我们如法炮制小站的背景
- V# q5 x" a2 Q# M+ [$ ]* @& M/ \ t* e: w
offset = D2Client::GetAddress(0xAB010);
# Q) H" ]: u$ X/ D4 EMemory::SetCursor(offset);
1 |2 t% h# p8 u2 B9 t8 k, LMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
& Q0 C$ V) H9 ^/ }2 [# e3 w- E4 ?9 w/ i6 |
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
5 l+ I: V6 Z& b( T: y8 I{
4 x) }4 U( C$ G6 y //Init data for print image, L+ B J& c; C, Q# H
sDrawImageInfo data;' s; I ` K' G8 Z2 U
ZeroMemory(&data, sizeof(data));9 P. A; N$ d9 R) p; J+ w
' N# c1 w x8 G& a" H- C. N) J
//print background
" a! f3 W" u8 K& r* Q setImage(&data, waypointBackgroundImages);
3 q$ a9 F# |, Z, ^+ ~ setFrame(&data, 0);
# c: t6 C+ p4 ?+ V4 o int fixx = 0;
% z& e$ \$ A/ A6 ~! y: C8 J+ F int fixy = 9;- a7 }+ e- R4 b" L' C" ~( d( {
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
' Q; F# H' M1 K4 H setFrame(&data, 1);2 c0 y' Y& O* A4 a
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256; `- s8 ?- k# j' C# I7 j: _
setFrame(&data, 2);% W' P1 C# A' H$ f: {
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//4320 p8 Q4 ]4 F- C5 g1 q: v+ V/ T. H
setFrame(&data, 3);8 R/ o! N: ?# S5 Z( W5 Z
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
- K% g2 X$ z! d9 }( u! H' L6 J6 k& f+ T, V) ?$ v+ Z: p
}; k- l. H9 z- B o/ v9 `: n
__declspec(naked) void caller_WayPointBackGroundFix()! @7 Y3 e& e6 ~" G- u: z4 s1 V1 T
{
2 u3 R" G' _0 k$ Y" U2 P& S __asm
+ @& D1 W: i, Z$ ?" _% y6 ~ {% g E8 ^7 {* N/ h! c
PUSHAD, q0 L" t- D b5 P# T
lea eax, dword ptr ss : [esp + 0x38]
+ w/ C4 W" y3 Z$ ?8 h push eax
/ D6 @8 |8 ~8 V push dword ptr ss : [esp + 0x38]! y3 I' Y3 o4 _( S% M, y$ G
push dword ptr ss : [esp + 0x38]
! y+ W: G4 ?% {8 x" W lea eax, dword ptr ss : [esp + 0x38]! @& f$ k6 j o$ a3 F
push eax
( f Y. ~: q q& Z$ M2 e" u lea eax, dword ptr ss : [esp + 0x38]
$ \' S7 U' d: d& w. O push eax2 X! t$ T( n2 C, y( H/ I
push dword ptr ss : [esp + 0x38]9 D" t0 W) X% v; k
call m_NewStatShow_WayPointBackGroundFix
# D: S0 X; q2 R/ a" F8 D# v4 l POPAD
( `% s" j! \$ i% J# x: p( t" p. o- d JMP D2Gfx::D2DrawImage
0 \; {8 e2 r7 I. n# E }3 C' w* c6 ]4 ^6 X
}* b3 Z& ?. w1 f( o' H1 T. T6 |, h! Y' N
7 W+ H5 {8 q; e' {+ s
3、以下可以搞16*16超级箱子-腾出我们需要的边缘2 o" D; ^+ Q) P
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
; @! F0 [( O" n: D4 @" e# b) {7 p, e! [ {' k6 ?) Z: z( l& f+ F
class D2MultiRes : public Library<D2MultiRes>
6 y. H* R Z( Z3 Y {
1 |2 K- d5 Q6 C public:
; p+ }7 Y# p* O7 m/ a7 I0 l static void Init()! S W/ D* ?0 v/ {7 P! {
{9 @* N z9 z" A' G* G& ?$ M
Name = "D2MultiRes.dll";
8 o! v4 y7 d2 s Offset = LoadDiabloLibrary();8 W" V/ [7 E3 [% y
}; n0 q$ x/ E- F# q$ x' f
};% h+ ^- S- J% M1 S8 q3 g# p
D2MultiRes::Init();
0 x# C5 ~8 b. B8 J* N9 Q4 y D2MultiRes::HookLibrary();5 P- U% n! t' z2 f1 j4 E
4 I- c$ O9 x) q! |+ s5 o
5 G" F7 }. S# P; D' s
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468); a F3 |4 Q, G8 g
Memory::SetCursor(MiscFunctionsOffset);
) _% |( f- {7 A. g4 k _ Memory::ChangeDword(0x1b0, 0x200);6 g; M# U8 ]0 z) |
+ O. T9 O1 n9 [8 _! `. y. \# U+ H# K% T6 m6 g9 X
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);0 m. r% e" g+ z4 M( |: @" L( t" N
Memory::SetCursor(MiscFunctionsOffset);
( h6 b- P8 f1 ^6 I1 e5 r Memory::ChangeDword(0x140, 0x200);6 D' P+ O5 x' z' k% t6 i. C2 i5 y( x
+ K% X5 `9 ]- r p
" a a' ]4 b: h' `; J1 B2 p- y. m
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
: B9 H$ m; t$ d! N/ {" v Memory::SetCursor(MiscFunctionsOffset);% @' |2 x' H/ ^2 i. F
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
5 _. |2 { G$ ?) F
4 t2 `. I$ H3 r MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
( y8 l. _* U8 K9 W9 ]/ ~ Memory::SetCursor(MiscFunctionsOffset);
- \. q( g7 d L, f Memory::ChangeDword(0x200,0x299);//下边缘 299最大
0 l6 c2 ^, C3 s& V f3 |+ l5 w- |1 r* H( _ n, s
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);- J' q6 s; Z; Z2 J+ B8 B7 \
Memory::SetCursor(MiscFunctionsOffset);( R( w- Y7 g1 ~: F/ }, |
Memory::ChangeDword(-0x280, -0x400);//这个不要动& R( q$ J( F. L$ I8 A0 X. p
}4 F+ P! T1 A1 x+ ]" z
. S" S- {5 Q: }" H; a1 w4、快完成了,是不是发现金币啥的位置不对??7 m! ?3 m3 z2 R6 I6 Z* k* V: a0 A
9 t5 E' D2 z6 E0 P+ N4 ]//这里修正我们的装备栏 N$ n( u; w' O0 j3 p
offset = D2Client::GetAddress(0x99B6C);
7 f9 l6 A) B6 u: d R) @, I! _ Memory::SetCursor(offset);5 h% R' s8 n. F2 P" b, M' k
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);; C4 ^4 B' K+ S) D6 a
" y2 J2 f/ S p offset = D2Client::GetAddress(0x99BA7);, }9 g( i/ {7 H4 j
Memory::SetCursor(offset);8 p& X2 ]8 T' b w) S; A0 V: Z+ \
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);$ Y* W; B% X) W
4 W2 Q; u ~, ]3 S3 ` offset = D2Client::GetAddress(0x99BE2);
' n7 E* h# c4 ?: J! a Memory::SetCursor(offset);
# U3 K% W) h/ f) V0 x Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
9 G/ P) u# Y- m. G% l" q# A# ~9 p z' J3 s
offset = D2Client::GetAddress(0x99C1C);$ a3 M2 S/ t$ C+ q
Memory::SetCursor(offset);
& P" f1 e+ {9 k1 c0 F8 c. V1 { Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);- F6 o4 t3 l6 \; B( g
: ?. [7 s) Y' s& S, J
//取消两个popup,偷偷懒不过分
4 R4 I4 d0 L; Q$ y* N offset = D2Client::GetAddress(0x9386d);
, n9 ~$ n4 }6 n+ n, i Memory::SetCursor(offset);
9 n6 t- N3 H* N( F7 n Memory::ChangeByte(0x8b, 0x33);$ R# x. R I$ f8 {
Memory::ChangeByte(0xc8, 0xC9);
5 ~) I$ [) U! [' \: z! O" ^ offset = D2Client::GetAddress(0x9390b);
2 t T3 S; g9 ]; P, K Memory::SetCursor(offset);
- q3 r4 }$ G' } _4 y+ k Memory::ChangeByte(0x8b, 0x33);" N" d, I4 X! s/ O
Memory::ChangeByte(0xc8, 0xC9);) Y9 A9 c' X% L, B4 T' M* b$ X
E7 b; D( `, ~; F1 \# U( f3 H$ H L# D
//修正提取金币
# t: j; E, X7 g* y6 q6 l offset = D2Client::GetAddress(0x8D3E5);+ y8 j' o- f6 G/ N" g( M# z
Memory::SetCursor(offset);
) F9 t7 a7 n/ p; l: ^ Memory::ChangeByte(0xA1, 0xE9);
6 o @; r. T) M Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
t: }9 p2 N, @% t7 v6 l" \4 _- }5 ~5 D! y# f
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);7 F- X- u" \- {1 N6 O
Memory::SetCursor(offset);
9 S8 {, n2 ]. w Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
4 u+ F( }" y5 ]+ L
. M( S0 H2 ?1 k( h' I! j8 f& E! d" \ offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);# v. C; {9 n0 y
Memory::SetCursor(offset);9 V5 p$ x8 r a+ T0 }5 z
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
6 F% U3 o) G2 q' E( Z T& y; L0 n- e: E* I
//修正关闭按钮
/ F2 t+ v- J0 S' G offset = D2Client::GetAddress(0x8BD90);
5 ?5 x. l4 g8 K- b. \ Memory::SetCursor(offset);& U. X/ ]) ~+ ^4 k; P8 Q
Memory::ChangeByte(0xA1, 0xE9);$ N R9 ?& @5 n* q0 Z' b
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
' Z1 a% ^6 X* S, b+ M4 q, }1 I5 k/ N8 b
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);; ^1 s0 `: }3 B* r, A6 N
Memory::SetCursor(offset);5 h8 K) D4 H7 ?
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);/ \8 \) w8 y: y) q( H* j
- t* d" v3 D' O, A5 I# I1 ^4 R" W& E. Y+ L5 K+ v
//以下是细节
7 f+ {/ Z# [* O0 L+ w/ c! A#define getXGoldCoinFixBtn() RX(0x2d0)
. b- ~( K. h% d- t8 _0 v% V4 x#define getLGoldCoinFixBtn() 32/ y o. O9 |& p" s A) e
#define getYGoldCoinFixBtn() RY(-0x59)! G1 ?0 c& K) d* k$ r
#define getHGoldCoinFixBtn() 32
! O2 {3 K" Y ]6 R3 j0 {6 O#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
9 b6 ?" Z/ T6 g# \3 x! D P8 P) I# P( W! g7 F5 T
#define getXInvCloseFixBtn() RX(0x3db)
, `# y2 r6 a$ [- ~#define getLInvCloseFixBtn() 32 l1 _: t- G& M' o1 B; b
#define getYInvCloseFixBtn() RY(-0x63) L& Z1 b$ G( Y4 f: k. I2 K4 r
#define getHInvCloseFixBtn() 320 f# u$ h% g- T- L7 M" y. r! X6 {
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
2 E" k1 |" Y3 I( U" F5 T, s2 g9 n7 ?" i6 b% p0 V2 K- j8 X
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
+ e, }% H* @8 B+ H8 m$ y: r0 e{7 }, H' @2 B+ x' z0 h! h/ J) U
DWORD mx = *D2Client::ptMouseX;
7 H4 o& E# \8 m; G0 M( ~% c DWORD my = *D2Client::ptMouseY;4 J7 M/ m# d6 Q# ^- P. r2 K( p
if(isOnGoldCoinFixBtn(mx, my))
+ y, L- l8 |; l4 L0 v6 u1 a return TRUE;
4 G9 V: L3 {- F* Z9 m' m return FALSE;' _; X. f1 C: B2 ]# g6 S5 T
}+ h& F3 h3 e- T+ L
__declspec(naked) void caller_goldcoin()
$ p; L) o% U/ p7 C, C% E/ g{
1 z$ ]" G$ v: y+ e4 t" S' ] __asm( g5 Z, r1 `3 g, A( ]
{
1 K }& \' \7 W$ ^ push ebx
2 d6 g# d( }! O6 v9 j4 [ mov ecx, esi
3 q$ y' A9 Z& N( k& Z# M mov edx, edi: x1 U2 X5 |+ g" M1 h8 S8 R. W
call m_NewStatShow_goldcoin
6 w% s& k* E& O pop ebx; d" v5 L6 d1 [2 c' W; x
pop esi! W) P' p5 E- z( f5 V; a3 S2 Y
retn- O* D3 w3 |% G% c
}
* B# s. M( F9 V' \: G. ?}: ?4 H" \& T3 |# Y5 X8 T9 s9 E3 e
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
3 [9 q7 C( _ f{
" X1 [' I6 r* e) N* e if (*nXpos > D2Client::ptScreenSize->x / 2)
. C3 U% W+ \% T, G {: P( j4 Q' d$ s. i
*nXpos = getXGoldCoinFixBtn();
* \# c; o2 }, S *nYpos = getYGoldCoinFixBtn();
, ?6 L- O+ R/ T! y2 l7 F8 R }1 ~: [8 x' }5 _, m. x! v
}1 k- N2 b1 X: \+ l0 V2 _; y- a9 }
__declspec(naked) void caller_goldcoinimg()7 v" L1 |, p, f1 J. G5 v
{( z) ]8 a( n7 m, f1 h p
__asm
! j) r0 O/ z& Y, p1 Z {
" X0 W, p# V1 e$ t, A I+ v# v PUSHAD
- p% p# o& x7 h& V1 Z+ J lea eax, dword ptr ss : [esp + 0x38]; R. `1 O `! _" |* w
push eax
2 f2 Z: i1 r/ N1 v+ O9 H7 m push dword ptr ss : [esp + 0x38]
# M F/ A' f/ w& b& F L push dword ptr ss : [esp + 0x38]1 M0 m7 D7 D2 z) h
lea eax, dword ptr ss : [esp + 0x38]* d7 a0 w& W. k: }$ i0 h
push eax
' s6 t' N% X5 s* Q+ ~: _ lea eax, dword ptr ss : [esp + 0x38]/ t6 O0 |( y5 J% p& `! I
push eax
( N- H& Q! ~+ [: a push dword ptr ss : [esp + 0x38]$ T8 J: C9 h7 R4 P6 [
call m_NewStatShow_goldcoinimg7 i/ {. d; h# W+ d
POPAD
8 O/ D9 ~4 e5 q4 A+ o JMP D2Gfx::D2DrawImage- p: Q; y; f. X. v9 q3 q
}' k4 n9 U0 T- L2 @5 y4 g$ `
}7 O9 x( Z; U; u0 n
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
' n. w3 u& Z& X0 S E5 g{, Q$ R, B8 b4 ]- j! i
if (x > D2Client::ptScreenSize->x / 2). B3 H8 M- m: ?! I; K
{
0 s- T% u1 e0 ^4 ]4 i *y = getYGoldCoinFixBtn();
( j3 ^, z b2 M9 I return getXGoldCoinFixBtn() + 32;# X$ n. C2 N: }9 [ u; o% u5 A
}( K {1 s2 b$ `9 V! I8 \# d9 d5 y
return x;
, l4 M1 q+ a) x0 n2 P}4 V0 {# c& C; J
__declspec(naked) void caller_goldcointext(), ^, e2 a, H! t# K
{& r8 d2 J' O% G
__asm- R+ r+ A3 f9 X+ b' g" M
{
) u6 P$ x9 S# D$ V9 T PUSH ECX# r* S; _( w/ a1 Q3 }8 |
PUSH EDI
# T% z4 \, n P- g3 e PUSH ESI, Z0 N) S1 }% J) T8 }5 T# x6 h
PUSH EAX5 A( h& I/ f% c- j* h& F+ t
MOV ECX, EDX' N. _ @) S a* s+ ?
LEA EDX,[ESP+0X4+0X10]$ Y6 a0 F* Y' g; p( ^) {
CALL m_NewStatShow_goldcointext
9 ~. N3 b4 |& {! Z( ^, {; s% {' c& w MOV EDX,EAX
7 U5 K- M J( S9 E POP EAX
. R! C# s8 r3 c+ l- W POP ESI6 m5 G! d5 ?$ \& w+ ~8 O; h
POP EDI
. x9 D3 |6 M' L0 x* M7 M POP ECX3 i( Z6 B4 n( c# I7 b) ~
jmp D2Win::D2PrintString;, W2 h; A/ n7 D# B$ ^, q% l
}
4 a9 Y0 G+ D% i; [}8 ?8 m* U$ \% |! X$ a1 e. w
% L" Q7 V) h/ I. [: [! O9 {% i- {
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
2 d+ Y# J; y% b. Y2 p; x2 u{
* g( p0 D4 w4 T9 R y DWORD mx = *D2Client::ptMouseX;
3 K5 v8 i& L4 ~( o/ ^ DWORD my = *D2Client::ptMouseY;" a/ \+ [; j1 c+ ~& p7 D0 }
if (isOnInvCloseFixBtn(mx, my))
" w' W! a# ~, t1 a! } return TRUE;
, }. S4 g' T. }) }, A return FALSE;
! U1 \! u" }6 w% A. ?' h}
% s9 |+ g1 f/ f7 G' y( O, M__declspec(naked) void caller_close()
, ?" x7 G/ Z9 P9 B; e! z{
& J$ A7 t' P6 f __asm
, S7 o! g- x! G {6 d0 G2 z+ Y! L0 l2 ~
PUSH ESI
% o: Z1 u1 b0 j! j5 m/ G7 o push ebx- q+ v3 Y) S( x, }) O6 S; d
call m_NewStatShow_close
6 S0 ?' M9 {; K" d. y0 a4 c* N4 C5 c pop ebx
" G G0 J2 q% Q4 e Y' A1 G: J! B4 d pop esi
3 C. j, R2 U6 ^5 a" l retn! K2 Z) x% S. ^/ N/ v: G- |
}
6 e8 j# W+ ^6 G& j3 E% ?}
# A; o9 m: Q: l5 i6 ~void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
, P7 p: f, ?) T2 @{
8 ^% p6 C2 k& _) s! \* `& z( Z6 } *nXpos = getXInvCloseFixBtn();/ T- W$ m g& `- J" `, ~8 X
*nYpos = getYInvCloseFixBtn();/ M0 ]" M: q( M T4 c4 O" ]+ t
}
' K( O' g1 J7 J4 d/ H( w+ ?__declspec(naked) void caller_closeimg()- i: i" W- ^+ @8 _* ]
{, m& ^2 Q, l1 K
__asm
% o9 Y) n( s& N. e { {/ ~( ?8 o5 X5 |$ y
PUSHAD. e# ~- j' N o; Q7 F
lea eax, dword ptr ss : [esp + 0x38]
% _5 X" y+ k+ c push eax
) V3 y1 T7 K1 a* l push dword ptr ss : [esp + 0x38]
4 T y3 P" I3 Z% u) M push dword ptr ss : [esp + 0x38]
$ G# m; ?- M: \1 p lea eax, dword ptr ss : [esp + 0x38]
. f. L* G3 A1 ^' ]- J push eax5 r# V9 a. u& k/ d
lea eax, dword ptr ss : [esp + 0x38]
8 x6 V5 ?7 w4 {* }0 l" U* }5 C push eax" |) @' d$ C5 A8 R, f5 C
push dword ptr ss : [esp + 0x38]' {3 s3 Z- H0 b- I) j+ n
call m_NewStatShow_closeimg2 O1 R! F" S: V" M9 j) _+ i
POPAD
+ k7 a+ v+ X1 N3 Y. W0 \; W JMP D2Gfx::D2DrawImage8 ?: `! T k" I- d
}! K0 j+ v' c4 S$ S% L+ ^
}
. \' k. @1 [6 K, m! c
8 t z0 j L4 |
/ ~ c$ X+ p) A/ ^/ |1 O" Y |
|