|
|
转载9 D2 Z* m0 Y6 Z) w. ^7 m
BY SJ( \4 G* D* \3 e9 |- U% s0 Y$ F
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
, r+ F* U+ [1 q0 _8 E$ o9 ? X# }' s, J& ]( V/ M
D2Gfx::D2DrawImage-10041
( H7 l2 s6 B' K4 Q' c' B1、修复技能的背景(不需要可以不要)
^) u2 S2 p/ Y. `offset = D2Client::GetAddress(0x77AA8);; z o2 t' _: `, R% L; u# a+ u
Memory::SetCursor(offset);
! W& e1 i- e$ |# {. r5 HMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);" R0 h7 f5 _ ^9 K7 @! ?
* I ^* w, n% s$ ^& j3 {" z
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]): R: x9 ]' l8 S% K
{: q$ E6 l2 W v
//Init data for print image) s* I' z7 e4 a4 y
sDrawImageInfo data;' {. r! u6 X: K; |7 s0 c$ b
ZeroMemory(&data, sizeof(data));) Y9 _% i4 H5 ]1 { Q4 K$ `. v
( A( {% [0 V6 ?
//print background; g/ o( |$ M2 r/ d
setImage(&data, spellBackgroundImages);& d k" |2 s$ }9 e; J; k
setFrame(&data, 0);
4 y$ q, \0 e6 _5 `4 M/ ^ int fixx = 511;5 G! a/ y( u$ F% W) X
int fixy = 9;1 U7 @* f4 I P1 g& r* ^: Z
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);3 P. e' B/ n6 j7 p3 H: o# ~
setFrame(&data, 1);
% j$ D4 f. |% H9 o( a D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
6 ^0 t7 p3 `$ B6 k+ d setFrame(&data, 2);8 C g5 _! a0 H! {5 \
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432; r6 [0 ^2 T1 E$ q5 @! f8 \
setFrame(&data, 3);$ G" `$ E c$ B( @( _) U
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
! s. x1 U% _! n( t}
- z" k8 I; N1 x4 }7 k__declspec(naked) void caller_SpellBackGroundFix()
) I( @, c+ e" b& \! {{. O* Y4 j8 h4 e G( r7 Z' x
__asm* p; K7 `+ v# X( _5 T6 ]2 h2 a
{
7 A" @' s6 p, z8 e+ Z; C" g PUSHAD
% k+ J7 l0 X0 _+ s lea eax, dword ptr ss : [esp + 0x38]& U9 ]# W6 ^9 l1 J/ K* ?
push eax
2 s; v2 I/ R/ l% [ push dword ptr ss : [esp + 0x38]
% t' d6 i* n0 v% \ push dword ptr ss : [esp + 0x38]
( h; u" N! d q# A/ c: K& H9 x lea eax, dword ptr ss : [esp + 0x38]
) u5 b" d( ?* P% c$ J) _7 z push eax
( F4 O- L/ r$ [4 d3 t1 o lea eax, dword ptr ss : [esp + 0x38]
- `% H! @+ ?3 F push eax" m y: a. L; M/ S
push dword ptr ss : [esp + 0x38]
; a r$ ~/ K4 M4 g7 d! P: f call m_NewStatShow_SpellBackGroundFix7 C/ e- _! y; h9 z5 _* j, p9 Z
POPAD) x; d% b( \" o9 d0 [, F* X
JMP D2Gfx::D2DrawImage
/ l5 t0 Z' s6 b }! n* Y6 G% A' n; |2 a
}3 T0 J6 o0 f! s, p$ y2 e% w6 l
5 H1 F1 D. `8 F+ w
2、我们如法炮制小站的背景
2 I" f" R2 y6 f! h
2 x# a) o2 X1 @) ]; Woffset = D2Client::GetAddress(0xAB010);8 {/ r$ [, i l7 y& ~1 B
Memory::SetCursor(offset);
* ]. t0 |- r1 bMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
: H3 p) {3 l9 K& [1 y' ]% Z
( }& r8 C# y" o, b: U& Pvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])# o c( J L& _/ c9 e0 G) n4 v
{/ A* K0 f+ v' o2 ~3 q7 R5 d
//Init data for print image0 u$ ?6 K( o' v7 v7 b7 r) B7 J
sDrawImageInfo data;! v- S8 G A; D! q
ZeroMemory(&data, sizeof(data));6 Q* [0 y1 } T q! i- Y
4 o- b, g: a/ s8 {7 d
//print background
) F4 x8 B, X+ i7 K setImage(&data, waypointBackgroundImages);6 w4 |: K' O b8 ]6 J
setFrame(&data, 0);
: u) M4 Y% T3 A/ U1 e- p# R/ W int fixx = 0;( j% K q" F% G5 l: e7 S7 w) m- Y
int fixy = 9; g$ l+ k- F9 F0 y' C D# d- T
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
) N* {- O) e% O1 O2 I* E/ r& `$ i setFrame(&data, 1);
4 x* j% o. X0 P0 k, U7 a" d D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
( d* A4 J- L0 L8 G5 d setFrame(&data, 2);
1 p0 i& J8 P5 W8 P' B5 q. k D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432: e; _: {# e8 p; i+ M
setFrame(&data, 3);( x& i* f$ F% J, X# W0 T3 c* s& x
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
" u2 r3 j( B _* k9 e( h: G5 j5 J( @0 {( [) @: L
}- N' B( s* t$ J' A0 s9 S4 Z2 r# [
__declspec(naked) void caller_WayPointBackGroundFix()
' r3 H V7 v5 h- Q9 q% m' }, l) h{2 |9 V Q$ b2 Y4 J
__asm
+ R8 D! \% }% |& n: h; O( ~ {$ Y: ?: ~4 I9 R9 q3 `+ k3 X7 X
PUSHAD6 ^: s; V: @, S, p2 \+ u2 [" D
lea eax, dword ptr ss : [esp + 0x38]6 u( Y! ~6 f; I
push eax
0 E2 v( W: d8 A7 y push dword ptr ss : [esp + 0x38]
$ R* _2 N/ I& Q$ @) J$ _' f push dword ptr ss : [esp + 0x38]& w0 e3 R# r( J6 p7 t
lea eax, dword ptr ss : [esp + 0x38]
* [( l: ?" D% j4 n push eax
1 p! [* P( s' j) z4 k. F lea eax, dword ptr ss : [esp + 0x38]
- O% r) A: s% Z; Q. W z. a8 ` push eax1 g, w% c- i5 W4 u/ B
push dword ptr ss : [esp + 0x38]
: i6 {$ y7 l2 V call m_NewStatShow_WayPointBackGroundFix8 e* a# J: Z, a. V- q1 \, B5 q1 W
POPAD% s, j$ q5 e: Y% J
JMP D2Gfx::D2DrawImage
7 p4 h7 N/ N' J/ o% o( U& Z+ X }. ~6 k3 l5 p/ b, B. n6 O* w* M
}
p5 U8 x# Z: d4 v* f* ^* a/ L2 Q8 R7 Z# K; x" |
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
" X* e& ~' f" E# k& a" _$ w0 d腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复), m7 U: `! x8 ~+ @& ~3 _
{
7 Z1 J" u I Y6 U/ s" J' X class D2MultiRes : public Library<D2MultiRes>
- w6 Z: K* j# T* U {) Z1 ~ C# s. L }& R# ?- }- t
public:/ d8 v! y0 r. D9 o4 H) {7 {5 N
static void Init()
* a4 ^: @6 @% |- e0 c$ ^( X0 D {
2 D& r1 T- L9 Q' M Name = "D2MultiRes.dll";9 w! ]& c; K& F
Offset = LoadDiabloLibrary();
$ ]7 v0 w8 ]& J& o0 }- r }
8 C- n& T( X- T Y! Z% m };5 B8 R6 d$ H3 U
D2MultiRes::Init();# q5 ]# P7 n- ?) [, U8 W. n+ n
D2MultiRes::HookLibrary();+ r' @* W2 n0 e3 a
" M0 T4 b. B. p
9 \4 C, C: E! M9 S j3 r MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);6 q( B" U4 o5 J& Q$ b" Y
Memory::SetCursor(MiscFunctionsOffset);# D% p3 }8 @* k. k! t% L: c' s* o
Memory::ChangeDword(0x1b0, 0x200);& i* B9 A; d- y3 f: W, g
1 l. g. `; F" T$ u( y
) q1 @1 u: I; y% b% ?# \) U MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
: f/ a3 \, ~/ g" V8 H: O1 h Memory::SetCursor(MiscFunctionsOffset);
0 ]& W/ G3 B( T0 { Memory::ChangeDword(0x140, 0x200);
0 G: D/ j& N' l, B
, E! m( C% [4 D; s0 J; M$ J
$ ? @/ m$ E' E* F& E' P- d# P MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
/ P6 q: b4 E) D. f& Z Memory::SetCursor(MiscFunctionsOffset);
7 n4 H! H$ ~2 E4 W+ `* g Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
! A7 t+ K& j* Z( U' C+ N" \5 p# I; {3 c# H- `4 f5 V7 V
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
$ x7 i- X: J( w' C4 N Memory::SetCursor(MiscFunctionsOffset);: w9 m5 o2 i* T/ y
Memory::ChangeDword(0x200,0x299);//下边缘 299最大3 j+ z' P( M# h& o; C$ c3 P) |! e
, r* s# ^+ A$ o# T4 x; z
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
* n' o( @2 Z3 Y" P( Y+ g8 | Memory::SetCursor(MiscFunctionsOffset);( u/ a! W! [4 Z+ \& d4 @+ Q
Memory::ChangeDword(-0x280, -0x400);//这个不要动! ^" x. p$ {4 H- C1 i
}7 _, v1 L6 u* c& M( n9 i
4 m2 C0 V* h2 L) ~. O. Q& O- h
4、快完成了,是不是发现金币啥的位置不对??3 v/ R5 Z; \" X( k* }
, N5 j/ a; K" f
//这里修正我们的装备栏! t0 ]+ B s) H9 O+ ]( ^
offset = D2Client::GetAddress(0x99B6C);$ \9 ?* [+ V$ U# l6 ]9 {& c2 d# S
Memory::SetCursor(offset);" D9 B- c( h% h, h, n5 I
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);& ^) c3 h# R* k2 o7 A
# E5 V1 Y1 @" ]; @. ~ offset = D2Client::GetAddress(0x99BA7);
) y* @, }( q, w$ F9 O! m0 X$ R, m Memory::SetCursor(offset);3 T5 S+ A- }. S+ S' B! l
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
* t" k; D" ?5 S" O9 t
2 ]( W% ~1 x# u. O2 f; a* z offset = D2Client::GetAddress(0x99BE2);; {1 J2 }3 t0 N4 _
Memory::SetCursor(offset);
7 g! N9 O: g; C% k1 O) ] Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);0 f# V* |' I3 c( `( G
! L7 ]# i& _0 A8 G4 d4 j
offset = D2Client::GetAddress(0x99C1C);+ a9 U% P7 b* n
Memory::SetCursor(offset);
2 d' s/ `" M* k% N& E Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
' b& Q$ R6 u8 M9 ?* n# Z+ p. T7 s! ~2 ]
//取消两个popup,偷偷懒不过分6 \ X" B, w+ Q
offset = D2Client::GetAddress(0x9386d);
9 z* ^5 Q$ k* J$ y! ? X Memory::SetCursor(offset);" c r# B9 J% N$ b
Memory::ChangeByte(0x8b, 0x33); C" C# F) M* ^/ ]3 m
Memory::ChangeByte(0xc8, 0xC9);$ s8 {; ~/ y/ {# S
offset = D2Client::GetAddress(0x9390b);
! `0 H9 J7 g6 H6 l Memory::SetCursor(offset);
8 ?) O2 E' M0 ]* s7 K( d. G! B, J Memory::ChangeByte(0x8b, 0x33);) m1 z" Z2 Q7 V$ h6 s
Memory::ChangeByte(0xc8, 0xC9);7 W0 f$ A$ B2 {8 h4 I* P
# B9 e& Y( Y& X. W; a //修正提取金币
0 z5 p2 w& s- m+ b( O. O0 L offset = D2Client::GetAddress(0x8D3E5);9 e ?9 y L0 v; f5 K
Memory::SetCursor(offset);: W0 ?% C/ @$ g7 W0 Z7 i2 K
Memory::ChangeByte(0xA1, 0xE9);/ ?7 T9 X) p g" }, P
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);, [0 s; j+ x; T9 y8 N
) q9 U% W! n7 H' {& a
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);+ t; P7 ]% @ v
Memory::SetCursor(offset);
' Z. k7 y- L& ~/ J' B5 S$ ~ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);! g' Z! F2 n+ H/ \0 n
1 s1 m* B8 L/ y& E" E, L offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
) v4 f. I1 N( z) g Memory::SetCursor(offset);
3 k; W7 k2 E4 R6 {9 [& O Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext); ?9 [- t) m' t0 y8 J
* E6 z6 f2 `! Z7 f& v. O% w
//修正关闭按钮
3 B. f, L1 Z/ c7 f; L; h4 y) i# d offset = D2Client::GetAddress(0x8BD90);
u, {2 q5 d3 ^* q6 h: k* W Memory::SetCursor(offset);
2 _" d |4 z% [7 q3 i Memory::ChangeByte(0xA1, 0xE9);: c. U4 g% K) O% w) A$ [
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);$ p: m m! a+ l2 R4 b) d) o8 K4 ~
/ a3 O. N( X+ Q* y offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000); m% r; `# N$ |9 `
Memory::SetCursor(offset);' A7 [, |! H# |$ d, x' D
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);" |7 f ~: v" O; W
& f# \' _( \( f( @9 p4 B0 M% P2 ]1 P* X
//以下是细节
) F8 S* l: }/ G# Z/ b#define getXGoldCoinFixBtn() RX(0x2d0)
! q7 D( R0 P' F' Z& t, w: x9 T# K#define getLGoldCoinFixBtn() 32
$ H I6 {. s4 J0 S" |) L#define getYGoldCoinFixBtn() RY(-0x59)
7 ?9 C/ J9 F0 J3 x8 d/ }1 w#define getHGoldCoinFixBtn() 32
# p& [, ~% I, W+ y5 E" j#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())$ ?$ ^# V1 S) E l
; A& O- p6 V# t; X9 A# z' U# j# T
#define getXInvCloseFixBtn() RX(0x3db)) ? \, z) v3 U6 P5 z
#define getLInvCloseFixBtn() 32
# i% z8 q( |, m$ s5 X% m$ J) Z#define getYInvCloseFixBtn() RY(-0x63)
4 r* B W8 E' M% \9 z#define getHInvCloseFixBtn() 32
" Y, a7 F# z1 }5 C#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
, @, s6 A& W1 }8 q3 ]! {
5 J' b8 ?/ k$ F5 R9 P4 GBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
! I, M" O" r: N6 C) K{0 _9 w/ p# L( `
DWORD mx = *D2Client::ptMouseX;
7 T' p, M4 B1 {3 A# e# ?* A4 ]/ w7 F DWORD my = *D2Client::ptMouseY;
% w, c* y, p+ `8 S; ?2 a* J if(isOnGoldCoinFixBtn(mx, my))
' ~/ p. n* o ?0 V2 {5 w return TRUE;
" ?6 a! z& V: `7 p8 g return FALSE;! l4 J4 {& t/ a/ c$ L5 R1 h
}: B" S' c9 q3 `
__declspec(naked) void caller_goldcoin()
' e6 B) M; @- j f{3 W7 f- Q! j2 p% r5 a P2 `# x
__asm9 ~; l& ?( L! Z, h) o
{
3 [" D4 C7 ^0 A1 o H# F0 ] push ebx
% G) U' V+ b7 y0 g, ?9 E mov ecx, esi# }: y0 |! `6 d! m5 a
mov edx, edi4 ^: Q* K" e) |- Y: W: l: U
call m_NewStatShow_goldcoin
% i1 h* F V! c: t8 y5 m9 N& f pop ebx
& p* G! B* y4 O! S; H. x. p2 t pop esi
& d5 q$ k& z: G% g9 _, K retn$ H8 ?8 F2 M1 I9 a: g
}% G9 r( t* c, h( T
}( U$ }4 P9 z; w4 z. B
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
) ^. e- G% z$ K' p, O{
; j( `- a4 o+ [- L) Q if (*nXpos > D2Client::ptScreenSize->x / 2)
S2 j# g/ k" H! U, Q9 L5 f {
5 I5 L% M! y( X2 h *nXpos = getXGoldCoinFixBtn();8 |3 L3 R, ~4 q/ p+ U7 l
*nYpos = getYGoldCoinFixBtn();
8 h2 y I- w E }
9 L; s$ ?( b$ y3 U}
+ Q9 E% V7 i( o# H" u__declspec(naked) void caller_goldcoinimg()6 B% _. g0 }5 a V. [/ g6 B$ O
{, ]" ]* f4 I: t
__asm c8 `) u* S: s) U+ O! \
{5 V6 x7 r' o7 l+ C3 a8 ?" G. H+ k
PUSHAD: ?; P/ ], ?- r9 W# n
lea eax, dword ptr ss : [esp + 0x38], i, M3 G$ {' J$ }5 `
push eax
7 ^5 |" n6 B7 l' T0 t push dword ptr ss : [esp + 0x38]4 P2 d- a) R% [* d" ]$ S4 \
push dword ptr ss : [esp + 0x38]& u6 ^6 @/ `& Y+ C( S% Q
lea eax, dword ptr ss : [esp + 0x38]7 U2 L8 I- o( P0 L3 C
push eax: g. L" q6 O$ z7 Z8 Z$ o0 b
lea eax, dword ptr ss : [esp + 0x38]0 ?5 W3 ?: _, i* ]. m
push eax% X/ U) l& d0 o. m' n
push dword ptr ss : [esp + 0x38]
3 m3 d# ?! T" [ call m_NewStatShow_goldcoinimg
# `3 Y$ j: N; Z; j POPAD
" _2 B; o) S1 s9 G" \& K! P& K JMP D2Gfx::D2DrawImage; P' O) I) P& O
}6 b& T. K" |+ V6 |- J! ^3 G
}. i6 h, N z! ?# q; D
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
, w8 n( c. \0 i9 N) Q$ l{* _3 i, j* d. U
if (x > D2Client::ptScreenSize->x / 2)& v4 I" ^: T* }
{
( q9 ~, O* J! k0 V *y = getYGoldCoinFixBtn();
" Z9 e N; r+ r7 }) ^' k0 X return getXGoldCoinFixBtn() + 32;
1 ^7 \7 s) \' B* T1 `7 R/ V }4 o; X) p5 Y* {) v- ~
return x;
8 |: X9 I$ q0 }& F- e}) j2 o+ G- V% _2 n3 x) M& e
__declspec(naked) void caller_goldcointext()/ V6 r( J G$ o" e7 @* C3 H' y
{
0 F7 X# i$ C( z) {1 q$ Z0 y __asm
; H- l$ M) P; z3 p {2 ]$ ?$ I& I, j, w- ~9 P3 X
PUSH ECX
, S6 I" E3 w7 P/ K7 r8 [ PUSH EDI
6 |2 q. ^# |4 o6 K9 F5 }) o! W& l PUSH ESI
b; S, ~' l9 e, \1 y* C PUSH EAX
" ~/ U7 T. k/ V' C' V MOV ECX, EDX! q8 O7 w+ C Y- s" j% @& [* d# p
LEA EDX,[ESP+0X4+0X10]- G1 Y5 s1 E* u7 s' P9 j l# S
CALL m_NewStatShow_goldcointext: L+ d8 p( @% U% L
MOV EDX,EAX
+ M ?0 W1 v2 f8 { T5 | X POP EAX, }: }. m8 s8 d3 A, t( V
POP ESI) L7 o# K) r2 ?6 S- @7 z4 b
POP EDI3 u: K$ @2 H! h* T. r: |
POP ECX+ h8 u+ P. C+ U3 U- ~ Q |
jmp D2Win::D2PrintString;7 G) ~0 p$ }. _9 s H: W
}+ f: w% Y' x9 u# _* M& U" _1 f8 b
}
, \% D8 M; L4 _9 Z% k5 O2 R
$ U. Z( \' W- \$ b/ T# ~BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)5 O: y& _. D8 m" m6 A' c/ E+ C
{5 u: [& t6 C; h
DWORD mx = *D2Client::ptMouseX;, P6 K# n. y, K- \9 P1 z" s( C
DWORD my = *D2Client::ptMouseY;, T' W E: m% i, W4 K- k1 w
if (isOnInvCloseFixBtn(mx, my))5 Y8 c6 o8 Q8 K. e
return TRUE;
0 A- H g+ f2 M+ C return FALSE;
3 p' L, I/ v. T6 l7 X}% P' x7 n& y: Z& r8 p; z
__declspec(naked) void caller_close()( Y+ R; U: T: c1 a
{9 K7 g! Q1 }% N' W
__asm
6 ^" y2 R8 l# s8 w, v8 D2 g) l {7 b8 u" q% d& |( b; r D0 ]$ Y' c
PUSH ESI
( \8 b0 f0 R. f0 v; [0 G. u push ebx
, b* G2 @! ]% z1 t5 u' l% V5 Y call m_NewStatShow_close
8 K3 D4 W5 x) E6 i7 C pop ebx( W# m( T% Z1 }7 g& R2 z: D
pop esi
, W, n u2 B2 S" h7 b; v retn
2 x% [) x# e9 X. a }
" U+ G4 I* H9 z! D$ O: Q}# n, h6 P% i7 H3 l/ Q- o1 {/ E. g8 L& ]
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])) e# Z0 [$ u9 z+ n; Q
{& u. v: Y# z! _7 Z5 V( H4 s( m8 J2 a
*nXpos = getXInvCloseFixBtn();2 O$ j9 S) E1 S; @+ n0 K8 @
*nYpos = getYInvCloseFixBtn();8 x1 y7 W5 _) t5 z$ w9 |7 C
}
/ b' H; F3 D3 A A# l- A__declspec(naked) void caller_closeimg()
4 d5 A8 D2 t9 Z/ Y0 b{. W3 z# t9 I# r) k {# E1 `6 ~
__asm
3 c9 k5 V2 u/ ~( T5 h" L {
( h! D/ f0 S6 B( G# m. E! z PUSHAD7 E M1 a9 n2 D3 r$ ?
lea eax, dword ptr ss : [esp + 0x38]
# ~0 a& H c% B! v3 c push eax
/ T y" u( C! {, f push dword ptr ss : [esp + 0x38]% v$ U' \1 \ Q/ c8 R7 E
push dword ptr ss : [esp + 0x38]: D; Q+ A3 {$ x9 y( a* g6 T
lea eax, dword ptr ss : [esp + 0x38]
$ ^4 |, H3 T* @1 \ push eax1 D$ z# t1 J7 E/ n. C8 R) J0 C
lea eax, dword ptr ss : [esp + 0x38]
0 u5 Z! c& J% R push eax
4 N4 A) [* j+ b2 v& ^ push dword ptr ss : [esp + 0x38]
5 h3 B# i/ F8 R4 n call m_NewStatShow_closeimg" c1 g6 s* R) ~, _/ ]# h6 v% P" Y( R
POPAD2 a3 |. Q: p P8 M
JMP D2Gfx::D2DrawImage
1 D- D+ p5 M' m& y6 h }
6 O/ o- N4 T$ Z4 V}
- p% l( ?, U& i5 c- ~
1 x/ P( x! l$ w
, U3 L# a" p2 u' p% F9 x# {' _* f |
|