|
|
转载# t$ D1 ~1 x( G' J& `
BY SJ
4 C' @6 T$ Y* \; f$ a" O/ D首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
+ h) s" C4 J$ ]
8 o9 ~% V. {, X$ hD2Gfx::D2DrawImage-100412 g V* ]2 [/ \5 K
1、修复技能的背景(不需要可以不要): q1 W& |; O \- P; O
offset = D2Client::GetAddress(0x77AA8);
5 y" Y( f1 }1 L0 qMemory::SetCursor(offset);4 g8 n4 |, b# p! x5 d# t# U
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);1 e9 L0 q5 l5 Q. k0 R3 k
7 F3 ~0 d# v" o( j: h/ j
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
, r+ ~. d$ x/ Y! V9 E4 t) {{
5 n2 Y e& Z9 Q5 o, V- G0 ~ //Init data for print image
- ]$ D& v" g- v/ y1 _/ [1 Y sDrawImageInfo data;# A p& E6 k# l
ZeroMemory(&data, sizeof(data));7 X5 D6 l0 S k# m3 t" |
1 l5 m, ?4 x) x$ D& K2 r
//print background& w. V7 I7 B6 z
setImage(&data, spellBackgroundImages);& t# y: M5 Q) @: v& c& a
setFrame(&data, 0); G" F4 k( e9 S/ s2 I2 d, @
int fixx = 511;
- j' }$ Q( A5 b6 {! o5 ~$ K8 X int fixy = 9;
4 W: h( q7 j' V. g! H D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);6 o* M8 I( u" a$ G
setFrame(&data, 1);: p, a1 _( w" b- d/ [# r4 e6 [
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256) G- W; l) Z/ n
setFrame(&data, 2);
8 i9 l' h) [0 O+ e, G D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
; |/ O9 w" I! Q1 V$ n4 [( M setFrame(&data, 3);2 q; D! ^' X8 ]3 s0 n& l- X( @. \
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
; M& Z; `5 M+ ]}
7 U9 H* i" E. h& g! t' t2 X__declspec(naked) void caller_SpellBackGroundFix()
# U$ M0 j9 I' K$ E{
8 g4 t8 u5 t% n* Z __asm
+ c- j/ ]1 f$ ~+ O1 W8 T; L8 B {
) a) Y4 g+ @& [8 p" d" h PUSHAD5 d* K% X& }3 b, V ], R$ I9 z
lea eax, dword ptr ss : [esp + 0x38]
7 C% C6 g0 Z6 _; a1 m/ u! ^9 \) ? push eax+ J- U8 Q3 L7 Z; \, p4 Z
push dword ptr ss : [esp + 0x38]+ D4 C/ k- j4 t, w, P( q' A7 c# Q
push dword ptr ss : [esp + 0x38]3 F- q) C! `, q; B
lea eax, dword ptr ss : [esp + 0x38]5 R/ \) E w& G, @2 } m
push eax( V( z8 l3 F8 y p5 K) B
lea eax, dword ptr ss : [esp + 0x38]8 v1 p! @; j5 E( s1 Z5 j
push eax
I4 i$ j4 x4 P push dword ptr ss : [esp + 0x38]* ~ s8 [' V2 O4 t$ u7 S2 o
call m_NewStatShow_SpellBackGroundFix
1 A+ q, g6 K3 D; N POPAD
3 J+ A0 |( Z% \# k' d1 q( l4 O+ \ JMP D2Gfx::D2DrawImage, J- ]+ r6 x( s- P4 o t4 m* i
}. U# X t) X. w% A1 z
}9 K8 y6 ^* @( F2 j
+ D0 u( Q" f4 f3 v4 ^
2、我们如法炮制小站的背景
7 v" i9 |5 b! l5 ^6 l
3 Q% p1 O; P. [5 I, Qoffset = D2Client::GetAddress(0xAB010);
. d0 U) c( D: r( g( l# R. UMemory::SetCursor(offset);
" g1 m, L1 L* t( J3 x! cMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
2 j; I1 a$ R1 D# e5 |: ^% ]+ D) f, d+ L( ~
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])# C3 \: B" z0 D0 ], ]* A
{$ u' b* o$ B. c. a `
//Init data for print image
: H+ D9 t$ [. M% l sDrawImageInfo data;
4 f8 Y4 z; O% h* I0 m" o* a1 z ZeroMemory(&data, sizeof(data));2 L' _) `6 s5 z0 E/ X% ^
* u- t' G7 [8 U //print background0 U$ q1 \1 d W1 W* q
setImage(&data, waypointBackgroundImages);) i/ J4 i6 R G- D. r3 Z
setFrame(&data, 0);
* G; t' ~ j) o; L- l5 d int fixx = 0;
% n! g. S O. A int fixy = 9;
' o% m9 L. f8 Y1 U1 V; d D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0); x) P* C( d! N1 U7 H5 q
setFrame(&data, 1);
8 ?) n" R0 V: p/ p D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2560 S7 n2 L! G2 s1 u5 Y, P
setFrame(&data, 2);
0 C8 x. i U1 g0 ^) D, ~ D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
5 w7 T9 O: X+ V4 ^) C8 t1 w setFrame(&data, 3);
7 N/ J3 q0 q' Z0 T D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
. m$ J' f( J& k# \3 F9 K
* |9 E4 F3 k4 Q- Q+ C1 @/ G7 }}
+ g- G$ X; z; x6 ~$ V& o/ q) p__declspec(naked) void caller_WayPointBackGroundFix()6 N2 P) H& X7 c, | ?
{' U# O J3 m0 a" G) r1 ^
__asm* N7 J' S$ B7 M2 h5 N8 V
{+ |( M; S: l) g: ^9 R0 U4 d
PUSHAD
3 y z% `' \9 C B. w lea eax, dword ptr ss : [esp + 0x38]' o1 w1 L1 f1 I5 F: K6 D7 }# r, D
push eax, K- @6 g6 l% O- J
push dword ptr ss : [esp + 0x38]0 P5 H% T5 |! F
push dword ptr ss : [esp + 0x38]( r& A* L6 Q3 q& Q; P, J7 y5 l
lea eax, dword ptr ss : [esp + 0x38]$ p9 l( O" r' p4 f7 r0 B$ S
push eax
1 y7 c8 N* p/ n5 A lea eax, dword ptr ss : [esp + 0x38]
z# E, I) K/ w- x' } push eax6 ?' q) J6 A. Q* X
push dword ptr ss : [esp + 0x38]
! O: q6 g3 a7 h: P( k8 O9 m call m_NewStatShow_WayPointBackGroundFix7 u) x* E5 c, c+ g! s+ G# S: R
POPAD* w8 Q$ _: w& F* t' z
JMP D2Gfx::D2DrawImage
6 z, J7 d( r) }+ A$ ~ }' [1 [0 [8 ^0 ]3 |* [# u% g
}
7 g; d! B$ r, ^; u; [) V! ]9 W m/ u
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
$ W r: ^2 B/ f' Y! W2 Y腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)) e, G+ E% T- S* F5 G
{
4 f$ O$ A% [9 {: |6 m1 G class D2MultiRes : public Library<D2MultiRes>
- M1 c! i- N" Y3 c- @ {
5 A+ ]) W/ c3 w( ^ public:* ]. i+ {9 X$ a1 H
static void Init()6 }. E0 `$ G! R3 o
{) D. P5 A" F4 m( |
Name = "D2MultiRes.dll";/ y8 ^. T0 F( Y% h
Offset = LoadDiabloLibrary();
7 D k; h+ p) h* Q/ i5 P }. r6 ?5 I0 o3 l* h5 v) z4 e% X
};1 F t) J* E0 P& h9 i2 s# o+ ?
D2MultiRes::Init();
* ?* l7 h$ x8 \8 M& l! f" L1 H' X D2MultiRes::HookLibrary();, s( g! s! f9 W7 o- d0 d
' C0 }4 ^# R" y; s* R4 F( S( @
$ Z2 x% `5 I8 m- X, } MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
+ {# }' ?& C2 a( T% R* l% G0 I Memory::SetCursor(MiscFunctionsOffset);
' k. R5 R. d( f1 b7 w, n: t2 l Memory::ChangeDword(0x1b0, 0x200);
* }0 B: K8 [, Y7 E* N: u
# g9 w+ M! p: w$ [. D# K+ j( U: e Y. i6 _% q3 q5 |+ [- {
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);# [" r: }) z, _7 f4 J
Memory::SetCursor(MiscFunctionsOffset);
6 p5 m1 ?- N/ x* H/ K e. { Memory::ChangeDword(0x140, 0x200);
6 o3 M2 d) k/ t# M
! `! J3 m% M v4 F' w# w8 N+ T
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
0 ?. D. i! [8 ]7 I: C4 V Memory::SetCursor(MiscFunctionsOffset);
3 F1 M: a& v4 F0 J Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
8 H* W% ~/ U/ |4 w% Y9 }+ h% ^2 c4 }5 M7 n' y1 ^+ i
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);5 q7 c7 x' B/ p j
Memory::SetCursor(MiscFunctionsOffset);$ p% D" V+ V3 W
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
, X4 d8 ]' x" `' d& [$ Y. i. U* `! h" A6 z3 T# d
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
) _" }. @! Z5 t% B8 P2 t' l Memory::SetCursor(MiscFunctionsOffset);" t* X+ q. p8 B1 W
Memory::ChangeDword(-0x280, -0x400);//这个不要动
* l0 T8 }( ]3 q }
i6 f1 m2 K. b& ]1 g4 ]% W W- U7 @: o0 P4 k/ v
4、快完成了,是不是发现金币啥的位置不对??
a$ G$ j: C" v: F
# s- I S1 p' P5 h/ L6 i" v" N//这里修正我们的装备栏- T$ y7 b' v F5 ]0 x
offset = D2Client::GetAddress(0x99B6C);3 [% t8 K7 |6 f* Y% w j0 Q- i
Memory::SetCursor(offset);0 K4 N7 N4 B9 I
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);! J" b0 Z l; X5 T
$ J) B2 a1 N0 d: ?, L) |
offset = D2Client::GetAddress(0x99BA7);4 F: J( D" L$ O9 ~
Memory::SetCursor(offset);
- e/ m" H. c4 a# B# P Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);3 v# q3 w1 ?, c' S, c8 d" z: Y
+ t: o2 n: Q" x, k" |
offset = D2Client::GetAddress(0x99BE2);
" y1 o: c. a4 a: @7 _5 M Memory::SetCursor(offset);
+ J) ?, ]/ S M Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
6 s2 u; I) n' P4 E
+ U! N/ H5 D9 ^7 Z3 o offset = D2Client::GetAddress(0x99C1C);$ C2 X+ O. l2 |( ]4 `
Memory::SetCursor(offset);: h; C: }. G+ U& u" R8 d1 C% `
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);% L- t& V0 i3 _* ?
4 L3 p$ Y; i }
//取消两个popup,偷偷懒不过分 i0 i" A4 V: h6 m' ~% H* G" L3 r
offset = D2Client::GetAddress(0x9386d);
8 K3 p6 W$ D; q# W5 G1 U Memory::SetCursor(offset);
9 `. Z/ P$ a5 ~+ A3 Z+ z0 h7 {0 g Y Memory::ChangeByte(0x8b, 0x33);
& @" E: ~0 l3 M) ]& n4 x; L Memory::ChangeByte(0xc8, 0xC9);
1 e# f; O p$ i0 ~( Y4 Q offset = D2Client::GetAddress(0x9390b);5 ^# l0 f7 }7 W5 q; w' V/ z9 o
Memory::SetCursor(offset);/ O1 m( J$ u4 h& ^& I) v: A
Memory::ChangeByte(0x8b, 0x33);
3 N9 n' |. W! T5 E) T8 T Memory::ChangeByte(0xc8, 0xC9);: n2 q8 V& G7 ~5 q6 g( m
5 V# K7 o6 ?2 E, P: v
//修正提取金币
; ?/ H7 H6 b: r9 Q5 V offset = D2Client::GetAddress(0x8D3E5);0 G3 a* ?' j. q6 |: w! B6 F
Memory::SetCursor(offset);
7 v9 T% A8 w& h Memory::ChangeByte(0xA1, 0xE9); Q# |- ^, O0 x. j
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);4 W( d( p3 a( b' b
9 ?& U1 f n$ j0 I) } offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
" ~- Q9 M) s' x4 C1 R* K Memory::SetCursor(offset);. v1 a1 y8 ?8 h3 V9 B9 b
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
- K* q. |+ t, Y3 Y q3 @ ~- q7 K+ B, X3 g' g4 y5 Y: L
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);3 G3 u6 G$ _! i/ J) ?
Memory::SetCursor(offset);7 c" C, b" d, _) s* @$ c
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
/ n9 Q4 u# d* s2 r: Q" v
, b: V, {# e# J0 @% k6 t; w //修正关闭按钮
- s) U' c1 g3 f; a offset = D2Client::GetAddress(0x8BD90);4 r. j$ q8 F+ d! A* L! o
Memory::SetCursor(offset);- U6 d1 ]/ V6 k
Memory::ChangeByte(0xA1, 0xE9);
0 f- m9 {! p' q! W Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);/ g* ]7 N e; }* `0 `; j
2 }; [4 e7 ~6 W7 e @7 z& N
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
0 T. z2 U+ \" O6 I4 V Memory::SetCursor(offset);! `: _8 E2 B; n/ p# A8 d
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
: J; A5 C# u" O* D: O+ q! a3 @2 [) R; v* |7 U( L3 T$ f7 m- f
! v9 T9 X. C0 y' [3 i8 T* @+ z# N) F
//以下是细节
6 T7 _$ V) k& R6 X2 Z#define getXGoldCoinFixBtn() RX(0x2d0). I6 N( l' D; v5 a+ t1 t
#define getLGoldCoinFixBtn() 327 N- Q! i2 w9 W
#define getYGoldCoinFixBtn() RY(-0x59)
" a) t) v# {8 |, K" r4 I0 G#define getHGoldCoinFixBtn() 320 T( Q/ S3 i3 O) a" N* p1 Y' ]2 {
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
& F5 G2 G; Z" y' d
# m! V {4 w4 N- y. j$ `$ M#define getXInvCloseFixBtn() RX(0x3db)8 X) |4 J r3 H% Q' q. I1 }. H
#define getLInvCloseFixBtn() 32
# C1 j# l" O- d#define getYInvCloseFixBtn() RY(-0x63)
/ k& g+ M6 ^9 j# }6 D) r#define getHInvCloseFixBtn() 324 Z7 N7 u7 f; [/ v, I$ {. ~1 ^
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())! l2 `. E4 U6 d6 W
5 h8 |% O( U8 R" ^BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
8 {6 L1 I6 H" u0 _, {* H i1 _( @{
# v7 ]9 a: ~4 N6 w DWORD mx = *D2Client::ptMouseX;
8 S1 [! H! g2 X+ w1 F' D9 @ DWORD my = *D2Client::ptMouseY;* \) A, p8 b' S
if(isOnGoldCoinFixBtn(mx, my))
2 n4 ?. ]# }! q6 N return TRUE;
/ }1 w1 U4 E6 Y0 h return FALSE;8 Y4 t6 G# Q& m) j
}7 | W1 _" ^1 l8 E
__declspec(naked) void caller_goldcoin()
7 L" ]5 D+ ^9 U& c{: M# s/ l) V8 g0 b0 J# Q: y
__asm9 V+ e& p; P: k/ M9 Y1 o
{
9 M/ t6 U, F3 M3 k push ebx
8 L8 Q9 ^2 |* o# n5 C( R% B* i mov ecx, esi
. S: o6 [) j; c# w) y# i: { mov edx, edi J8 y7 E1 a. ]/ f
call m_NewStatShow_goldcoin
4 i4 Q8 n7 N1 k" A pop ebx
* b0 n% a9 P0 m4 x pop esi
( U+ C9 A- q* K z7 g" @3 G, ? retn+ w( p8 c' \. ~! B( D! x
}1 B0 \9 E i2 W4 e' b0 o2 N
}
/ R0 @' u8 t' }5 ?; N4 n9 ~void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]), G/ W' q# o, j3 \8 X
{
) _* X8 e4 U5 k7 u if (*nXpos > D2Client::ptScreenSize->x / 2)
* L' D* {* \( y/ |9 L {
2 n& T) D. g, q( a- a *nXpos = getXGoldCoinFixBtn(); U3 v" S, @5 W1 n9 @4 q' `2 b, E
*nYpos = getYGoldCoinFixBtn();% H! Z1 K0 v% K1 _* O
}
5 m& Y A1 l( t}
* Z! ?5 S, E. Q8 H__declspec(naked) void caller_goldcoinimg()
* t7 F) \ W6 N2 A{
' Z @' {8 f; y __asm/ E+ I: r3 O+ A! T* f8 o
{7 C, c0 d0 j1 O
PUSHAD
7 g8 v8 N) R; }- H$ v C lea eax, dword ptr ss : [esp + 0x38]
! `0 D2 y/ h+ E" @ push eax6 A2 m) {0 Y# g0 r
push dword ptr ss : [esp + 0x38]
9 K4 [: F! i1 _% g" N9 E: [4 } push dword ptr ss : [esp + 0x38]
! i M, r: b) {: Z lea eax, dword ptr ss : [esp + 0x38]0 C* e. J" _. ?- J/ |) H+ C
push eax- }0 V" H$ b6 ^9 l4 j; o/ Y
lea eax, dword ptr ss : [esp + 0x38]
' Y, `9 x1 R; O% @; [: n" t push eax5 N# O) a* h: {1 k: m0 i$ H& H
push dword ptr ss : [esp + 0x38]4 h8 J2 V& {2 }, A: D4 u: p
call m_NewStatShow_goldcoinimg
7 J& k7 y% ?9 O% |7 B( h# }4 y POPAD+ h9 C6 W) F. u3 N
JMP D2Gfx::D2DrawImage2 s1 P. r( x0 c& @
}8 d. J% M2 U, G0 w( m' K2 x
}+ g* K( k9 A" ?/ b; ?
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标. h8 f2 V& c9 L# r
{& q. m9 y9 Y6 w
if (x > D2Client::ptScreenSize->x / 2)
. T. Z+ ] i! W+ j9 V6 y {; [ ?6 Q' f4 ?; l2 z
*y = getYGoldCoinFixBtn();
3 I& x1 R9 O# J: L return getXGoldCoinFixBtn() + 32;
) W; ^ c; s/ \8 K! t1 K( c }* Q* Z. }- R* e/ G! e
return x;, ?0 F6 O& f; c2 {
}
$ f5 r4 v! Z7 O__declspec(naked) void caller_goldcointext()
) V- r6 ^6 } e/ f. f{: I2 z# z& I* ?6 g1 D/ A
__asm P- m2 S0 M% n& B+ C
{; a& M) g% H; J, ~" ^9 `" |
PUSH ECX
( L3 g! ~/ N6 m- P p: _9 n PUSH EDI
: U3 C- I/ C" J7 O PUSH ESI
0 f( M D; \* n1 R PUSH EAX
8 e, q! t5 a( \. b% K1 ?1 G% c" k MOV ECX, EDX
- [( X2 M# M0 ]3 H- W& F LEA EDX,[ESP+0X4+0X10]" @4 ]( B8 u2 B: X. l
CALL m_NewStatShow_goldcointext
8 @0 j0 j4 x! B+ [7 i2 R! R! L2 a MOV EDX,EAX
5 D" `) M. D3 t5 S) Y1 Y POP EAX
& s {& Y8 ?3 L5 H POP ESI# ] _* G5 _2 b* b% B( E9 e# v
POP EDI4 q6 Q; s" v# O b# s9 ^& z
POP ECX
% z0 \* {. [3 g jmp D2Win::D2PrintString;8 p9 D, c" b% `( W
}
" V: V# W) g# d' J) j}
: G7 E! z& n- a, P7 j
6 i+ k& k+ ^! ABOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
7 j$ Y; G( B a2 K- r; U6 r2 Y/ N5 u{
4 E" F9 J9 u1 r9 v2 a! H8 r DWORD mx = *D2Client::ptMouseX;6 f- ]' Z. P2 H; H7 ]" o& I
DWORD my = *D2Client::ptMouseY;
0 ]. I3 x& b& a' v C: O8 \ if (isOnInvCloseFixBtn(mx, my)); q" c! E3 a1 m/ c5 o
return TRUE;% _! v! s( \; z; @
return FALSE;
3 l1 r+ m6 u8 z; t+ H}+ Z9 t M5 e# `
__declspec(naked) void caller_close()
, G: P1 ]$ B$ O) E$ e' i) k{/ _# @( [: G5 K. l) n: I
__asm8 G! |# F3 W( x1 |8 M9 _
{7 d& m1 W4 C+ a, u, }5 S5 O
PUSH ESI
+ V, r# {/ b1 X7 q" m push ebx
- H1 i6 ^* ^" K1 i call m_NewStatShow_close
& t0 [+ d- i/ X' b9 B5 S( b pop ebx
% l( I/ i+ f" a pop esi
- } y& Z/ ^( @! H4 M retn9 v+ z5 `3 Z# U
}1 m& t* M) B& w$ v) H& z. Q/ h
}5 Q6 G3 u, s! w0 o6 N/ V7 W
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])1 E0 e; L$ Q* K% \* q
{
& Y7 Y2 c/ v8 j- o* c *nXpos = getXInvCloseFixBtn();6 O% C% t5 o* [: Q7 a- a
*nYpos = getYInvCloseFixBtn();
; D3 @% r0 l% E% f}6 a% k$ a; P6 R+ @8 S2 E
__declspec(naked) void caller_closeimg()
3 S4 \6 m2 U8 {6 O7 C1 \{7 E# y1 o5 @; y8 k% }# m' d0 y" X
__asm( Y' Z$ n$ A' a3 V% U# ?0 }! u6 Q6 O
{2 u0 E1 a1 f1 h+ X$ z/ o
PUSHAD. p5 f1 g* Q6 \
lea eax, dword ptr ss : [esp + 0x38]
0 z& b0 }" z! f0 L9 u$ Z0 m2 V- p push eax- ]+ c; E. i- ^; M
push dword ptr ss : [esp + 0x38]
% [0 L6 h6 O, l1 I- D7 Q" f push dword ptr ss : [esp + 0x38]1 P4 \# N( u$ V$ P* n1 V2 `
lea eax, dword ptr ss : [esp + 0x38]% s4 z5 {& u& m2 P, h. F
push eax; M1 @ I; u6 e* p- e5 y
lea eax, dword ptr ss : [esp + 0x38]7 d( @) x# `( \
push eax
% N. k5 Z7 ~0 s+ A0 E6 a1 J4 a push dword ptr ss : [esp + 0x38]5 `: x& g8 T3 R$ p4 Z( }* Z8 z
call m_NewStatShow_closeimg
R) M, W" Y$ F; P$ G POPAD& d4 q X0 |' h
JMP D2Gfx::D2DrawImage
) }" A1 x- k. G) r5 ` }/ {4 @1 D" g6 A% P- Y5 G4 t
}$ f: Q# e f6 Z* F- m+ f1 g: Z
. [7 y" `7 Y1 j, P' p
& y, f, O, N/ M/ i5 |/ E4 @4 e |
|