|
|
转载
" _( }9 m& R5 `& v1 {BY SJ/ y& B, l% R) h" g; n
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)! z" V, T/ k! s" D) Q
9 S& f- W" e6 {, |4 }# V
D2Gfx::D2DrawImage-10041* V( A4 A- b8 W8 ?- X; a( N0 H Z# ~
1、修复技能的背景(不需要可以不要)
0 s9 W* @ z4 ^: e. V6 P1 z8 \offset = D2Client::GetAddress(0x77AA8);7 B" A' D5 v# i3 W4 \ {) L6 r
Memory::SetCursor(offset);
. z5 w3 T2 @) N; i9 M# k; qMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);$ H) r. x8 d" X% Q9 V
2 A( a6 m- T2 p1 @" Q! J
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])6 x E$ u% t+ I, D! i( t; V' B( l
{
~7 b& y. y7 o9 [$ Z3 W //Init data for print image
3 g9 i4 r8 t. h+ D4 m8 r sDrawImageInfo data;
+ c3 J+ ^ r2 d8 U) P ZeroMemory(&data, sizeof(data));( X7 t- u/ ]4 W) N& T4 K2 x
$ S" Y# I/ d; {' v( p8 S0 t- C
//print background* J6 {% z4 J* R& W* n
setImage(&data, spellBackgroundImages);+ c$ f8 v$ u$ A9 L/ o5 E
setFrame(&data, 0);
! P7 b8 P: U0 \6 n int fixx = 511;+ S, m* {* Y0 A
int fixy = 9;
- Q- v) q4 x# P2 Z D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
1 d1 e5 G X6 @: a setFrame(&data, 1);+ o2 z7 x; v' u1 G
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256 r8 C$ Z. W# p8 ^* t
setFrame(&data, 2);
]3 D9 E5 E8 o" Z6 R+ M P& O D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432" ?0 `/ V$ A- |( i4 @- e
setFrame(&data, 3);
% i( h& _- K4 T) Z" ? D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
: B( C; p) P/ D: s- g+ y5 s# r( N}
5 j3 [- l$ k1 g/ c__declspec(naked) void caller_SpellBackGroundFix()
! M% n: l/ F, n& Q. y% \9 c{
" \" v+ ^$ @* P: {, l% e0 F __asm
1 W- _9 G* ^+ M& X2 _ ^, r; I {
2 J9 m/ p5 y, |5 J6 Y# B PUSHAD
# ?4 Y% o% m' q6 [ L lea eax, dword ptr ss : [esp + 0x38]9 m! q# X( z8 k3 P. `$ |+ f
push eax2 _: H1 l! Z5 E+ Z
push dword ptr ss : [esp + 0x38]
+ \) z6 X+ E, J push dword ptr ss : [esp + 0x38]: t6 I$ E$ Z1 o, H+ J; ?3 B: T
lea eax, dword ptr ss : [esp + 0x38]$ b7 J# ^% \4 j# m; G
push eax
- [: H: o* `- f" p1 e4 p0 s1 c lea eax, dword ptr ss : [esp + 0x38]
9 L, a- \ B' @ push eax0 |+ r2 p/ E/ G$ O' C4 \' t. L
push dword ptr ss : [esp + 0x38]: [; [5 M8 y) ^' n
call m_NewStatShow_SpellBackGroundFix
2 v! g8 q# Y8 j5 O7 [ POPAD
% U( L2 }0 U n4 g/ Z JMP D2Gfx::D2DrawImage
4 {5 c5 |: s* M4 E8 h }
: F% E! n, L. L' J}
% g" d1 G* I N( M+ B; \, t" D- K5 g: c6 e6 h
2、我们如法炮制小站的背景
. v! b; ~3 k1 m' \+ ^" @4 m$ E9 X: Q! V) I- Y# c1 S
offset = D2Client::GetAddress(0xAB010);" {( ?0 n/ \, a0 T* g
Memory::SetCursor(offset);
$ `3 C" K! i3 g; KMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
& @+ k) N k+ Y3 h3 E5 c* o6 e5 M% t
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
$ G' o. r) k4 @3 m{* ^" O" L5 t: N, R8 Z& O" q/ X
//Init data for print image
# S1 T" j1 K7 S% o) V6 N( C7 I sDrawImageInfo data;
# X% I+ c2 {5 [+ Y ZeroMemory(&data, sizeof(data));0 m6 f3 F' E7 l4 A
& _5 M, Y" D0 D& n( g O5 u //print background
% j( d# U k' c3 u \ setImage(&data, waypointBackgroundImages);
. `2 f" {) S! y setFrame(&data, 0);
: A9 H( m) C* m/ j! @ int fixx = 0;& |3 ]) [7 b$ r) Y
int fixy = 9;
2 |( [4 p1 Z2 H! s' h% Y B* A D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);( S& u) C# M$ u N% i" J" u
setFrame(&data, 1);) i' M% \! w1 ]
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256; i6 A5 v, E. H: N: Z
setFrame(&data, 2);
! S+ J# D t. O2 D% Z2 ? D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432# |+ P) w/ G+ }( n! L0 o
setFrame(&data, 3);
7 E% S1 p5 m9 H. {' Y7 U. ^3 ` D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
: ?0 q% \8 I G3 L, s: B; z! G: P# W1 x
}/ q* d$ a6 A+ Q$ v/ @' \
__declspec(naked) void caller_WayPointBackGroundFix()8 W8 D- T' t+ I+ h% v+ a
{
; d3 O/ H! D+ |6 l9 B: { __asm- [. B9 F3 d0 a5 H0 z7 [
{" j$ y2 l6 p7 C/ M: V, ]
PUSHAD
2 w6 l+ z" N! W* r lea eax, dword ptr ss : [esp + 0x38]
6 I+ S" [$ R z- N5 ?; u' e0 a8 W push eax
" g# r% p6 L \- r+ q2 ~ push dword ptr ss : [esp + 0x38]8 K6 Q9 Q, O; E8 c
push dword ptr ss : [esp + 0x38]% b* q# {; x* X# c; o. E
lea eax, dword ptr ss : [esp + 0x38]- I$ t# j7 y2 b- @ n6 q
push eax1 @' s: w3 F, ]1 f8 Z8 F0 \) ?9 z
lea eax, dword ptr ss : [esp + 0x38]5 V0 C/ ^; f! q2 m$ h
push eax8 w+ j: A4 B* v& I/ G# j0 M) g
push dword ptr ss : [esp + 0x38]
8 ]+ `# I( g3 H call m_NewStatShow_WayPointBackGroundFix2 W! D, x: s- k4 b* \5 G1 @
POPAD8 C, I' z+ O' o$ E$ s
JMP D2Gfx::D2DrawImage6 N. B! l+ C. g' [# q( ?4 W* p
}% e- w6 G6 u% @/ v8 F: `, |$ w. v0 i
}1 N7 ~+ n/ W3 E z; m+ R$ B
: B9 b5 k9 G3 A5 F( _( s) ~3、以下可以搞16*16超级箱子-腾出我们需要的边缘# c0 ~3 v3 b/ y: r
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)" `; |, r( X3 l" W
{0 x$ q6 r$ Z. R
class D2MultiRes : public Library<D2MultiRes>7 V& ~# c0 G6 w6 y# m& U+ I
{3 E% }/ F0 ?7 b3 j, }
public:% ]: u1 D* B; S! D
static void Init()5 g3 d1 z5 f9 S
{8 I1 b0 |' Y+ q2 h
Name = "D2MultiRes.dll";
+ ]+ g) Q3 Q9 W/ g+ k" g1 A; \ Offset = LoadDiabloLibrary();
3 ]% Q) W9 ` d9 \ }* Z+ X" |+ p2 ?8 v
};$ d% g5 {* [$ m, x
D2MultiRes::Init();
# f( X1 M! R1 a% J D2MultiRes::HookLibrary();
& [' e+ w' ~8 C: m- F% n1 C/ y2 W6 W5 m% j7 E1 W9 {! x
$ r& o7 N' o- T1 d0 U MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
; f& f( E$ k2 B$ e Memory::SetCursor(MiscFunctionsOffset);
$ a$ e6 i) K; p1 I9 M: Y$ o. L Memory::ChangeDword(0x1b0, 0x200);" m: {% o5 T# j* {; z. k( Y. Z
! @' ?% u2 ~4 j! Q! B( K, q x
6 L2 z3 o$ L$ {! b8 ~ MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
. n" j) v! k# w: \4 Z Memory::SetCursor(MiscFunctionsOffset);
$ N3 \" h9 [6 j( w v4 Q6 Y8 g Memory::ChangeDword(0x140, 0x200);
1 G, H T( I. ]: u1 R( d( \" O9 v. k% i( u6 x* _
% ]9 r V& v6 O: D8 O# h/ H5 P2 `
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
1 _6 c2 b; o1 j- t8 t# z! Y Memory::SetCursor(MiscFunctionsOffset);
: D6 @6 _2 X' X3 l1 y* e Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块. L) Y" {- o; d5 e
5 a; m. Z1 u: N+ o6 d" Y% i MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);# W7 [' g) K& G: [% |3 V
Memory::SetCursor(MiscFunctionsOffset);
; J! n, f" |; S4 w' Y a1 t Memory::ChangeDword(0x200,0x299);//下边缘 299最大: h4 O. S, G+ ]. U
4 l& Z _, @1 _1 y4 v; n8 S MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);% G9 v. P$ C3 m. o9 i
Memory::SetCursor(MiscFunctionsOffset);/ \4 u' t2 }4 T
Memory::ChangeDword(-0x280, -0x400);//这个不要动6 X T/ F0 M, |3 u
}
4 G0 y6 M! _/ c7 S. _6 [0 M& q2 N
) R- a: y3 V& f* ` W* k# F0 _4、快完成了,是不是发现金币啥的位置不对??* C1 g: q+ ~# `! h
0 u Y4 ], W1 k3 D! F- Q7 x$ ]* f
//这里修正我们的装备栏$ l$ U/ w# n- [4 Q9 l& {3 r, d
offset = D2Client::GetAddress(0x99B6C);
* Y$ k: r6 S$ f1 z8 @" H! y- @$ p Memory::SetCursor(offset);0 A& L, T; e+ k# Z' Z; [
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);, m9 ]! P3 _! ^; a' e7 g& R
$ X ?+ G! d3 X: {3 h. R5 _ offset = D2Client::GetAddress(0x99BA7);
3 E) n2 I3 c3 I& [7 z% _& k+ N Memory::SetCursor(offset);0 W% \& Z, Q K1 D
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);* o5 K0 R" R0 i& y
' v9 S- g {* Q offset = D2Client::GetAddress(0x99BE2);
1 r8 c5 `1 I* x2 D2 r Memory::SetCursor(offset); U* Y0 Q. b c4 {$ u' y, P7 G
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
: i) n0 m& N% s9 V# `
b' s2 R3 ?. [; | offset = D2Client::GetAddress(0x99C1C);) C- ^( t/ E& ^; a0 ~" U
Memory::SetCursor(offset);* j$ D+ Z. `. N
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);' |/ p/ k6 I+ |9 V. N* I. U* f
. a' S2 }; x. y9 G# h% i6 r //取消两个popup,偷偷懒不过分 G) q# I" R/ T! X7 p6 T# B4 t1 A
offset = D2Client::GetAddress(0x9386d);5 ~- i$ K) P! G4 l* a& C3 w1 k+ p
Memory::SetCursor(offset);
_+ i' |7 j( L" D/ d Memory::ChangeByte(0x8b, 0x33);
l) z7 l- o; ] Memory::ChangeByte(0xc8, 0xC9);1 z, W# E' k6 q
offset = D2Client::GetAddress(0x9390b);
$ i) H3 x# f( x3 @' v, p0 @* R( s Memory::SetCursor(offset);
) }1 T D* @- w$ A! z Memory::ChangeByte(0x8b, 0x33);
: T. u2 O7 T% e' Y Memory::ChangeByte(0xc8, 0xC9);
9 [1 z! p5 [+ I2 i) U' v2 l9 A( t. ?( N0 s& \# ^. b) I* A# q3 \, L
//修正提取金币
/ r k; l: J' {" L offset = D2Client::GetAddress(0x8D3E5);; C' f2 {0 p9 t+ N' G4 G
Memory::SetCursor(offset);0 k2 J: r5 ^4 m0 Y. D$ p
Memory::ChangeByte(0xA1, 0xE9);
. U6 U% @ u, L* U1 | Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);9 @5 f1 t/ A5 Q$ V( X& \3 o5 d
]( [+ d& v. X/ i& B" Y offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
) v3 H% y4 F/ u9 d Memory::SetCursor(offset);
0 b% @) U) ?) q b& S- ^7 T, Y Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);$ u5 ]& s7 `3 [2 t. z3 F
8 A$ ^" y) E+ n) b" A1 x offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
5 X5 G$ g% q: A% s2 a Memory::SetCursor(offset);9 ]0 V# k( m" C
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
) J. X. w/ ]/ l; [7 q
9 h, B+ B! m1 d: M5 X //修正关闭按钮
! v, P1 c- k& w% o. p; p$ r offset = D2Client::GetAddress(0x8BD90);8 G+ H8 ]4 g0 O/ D
Memory::SetCursor(offset);
1 A# ~" @: t/ T$ G0 Y* U Memory::ChangeByte(0xA1, 0xE9);
" R% ^6 a! a" j1 r( i! s8 ^3 ? Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
0 G( N" ^8 s3 G8 a# r$ T3 c" C3 U f" H
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);8 m# _8 F# V* v/ C8 t: o1 c+ A
Memory::SetCursor(offset);2 f* r! }% Y. D7 U' u
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
6 _6 B2 S! Z4 _, {1 r8 d1 k
1 |# E+ s+ P# H$ t( D' t G! @; v Y! |* U+ E, b6 L7 ~
//以下是细节
3 j$ L4 d3 t% {! x#define getXGoldCoinFixBtn() RX(0x2d0)% s i9 |2 |! g! [+ U7 S
#define getLGoldCoinFixBtn() 324 k6 U) z; m; H' G- K; E
#define getYGoldCoinFixBtn() RY(-0x59)/ q) k2 b/ T" `9 _( M& `- j9 Z. }
#define getHGoldCoinFixBtn() 32: r- r. l7 l% ?$ o' y) W' X
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn()); r) f7 S' t3 v4 ?9 y+ C; b( E$ L
; I& R2 S! {) g* S( K3 r- ?#define getXInvCloseFixBtn() RX(0x3db)
8 S' j6 b8 ?, D1 A% d* @( V; O3 Z#define getLInvCloseFixBtn() 32: E( O% k; ~+ F' b! K
#define getYInvCloseFixBtn() RY(-0x63)
2 P3 |7 f$ Q2 @" m$ t1 i3 [+ M' q#define getHInvCloseFixBtn() 32
& y2 H1 L5 L4 A9 M* s#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
" k4 ]+ x$ Q% Z3 }/ d- Q# R u6 g, n
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
0 Z; t! P7 w: a; w{! d$ W; F6 l6 I6 d
DWORD mx = *D2Client::ptMouseX;
; ]2 W" L; M; ~ DWORD my = *D2Client::ptMouseY;2 R6 N9 ]# {3 M8 b: F
if(isOnGoldCoinFixBtn(mx, my))' i8 w6 b) K t: c8 U4 z6 H
return TRUE;
6 M3 B9 R$ z9 `8 v return FALSE;
7 ~5 @. h1 k% }+ G# x# }* C}) }0 q! D8 Q; S7 g, t
__declspec(naked) void caller_goldcoin()3 X$ k: c# |9 K3 |% @! p
{8 @$ ^0 ]& c* T4 |" z! s
__asm
. U" L* O: [7 H6 ~6 U {0 e) c2 S2 w: o% N
push ebx
' p( z( i: h0 g( I2 | mov ecx, esi
- Q2 a! q% P+ E( C mov edx, edi! l3 K0 `# {; k" [$ t
call m_NewStatShow_goldcoin
( c* H9 l" z& W& g9 W+ j) ]% f( h/ v pop ebx4 t9 o) w& L- o
pop esi
1 w2 l9 F; h& v5 q1 W4 o retn
+ }+ N3 \; y: S" A8 n- ~2 [ }
# ]- J7 y* S9 X+ d}/ I" u9 S( V4 B/ b, e- ?
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
2 H3 ]& C% Q. i R{
* V) z- K; {. ^' E$ L2 E if (*nXpos > D2Client::ptScreenSize->x / 2) o; }- p9 Z3 D1 {
{
. f# y6 d0 w1 y *nXpos = getXGoldCoinFixBtn();
* p7 W- `' p. l5 U *nYpos = getYGoldCoinFixBtn();
! @: J, O, e; f# S2 m+ k' B }
+ {8 H6 l) [) n5 |& ]# g/ f}4 [2 L7 f. S# a
__declspec(naked) void caller_goldcoinimg()* P* ]% Z4 H# I* L: s
{
, m- U: u3 u3 B' b/ b, k __asm& p, {) W4 R/ B3 E
{
9 n+ v/ T8 o. A% B1 a6 T PUSHAD
* U9 f# k0 b4 g9 z a7 u, F lea eax, dword ptr ss : [esp + 0x38]
T6 V; |" F) s push eax6 D# v; y( \0 |) H" n6 N. o7 T
push dword ptr ss : [esp + 0x38]7 q& n: c: A$ i- S% L
push dword ptr ss : [esp + 0x38]
5 ^, L" L7 W, Y2 I8 N' M lea eax, dword ptr ss : [esp + 0x38]
, w# I8 Z( Z. \/ i, h push eax. z6 p4 t+ d4 T8 x& L. ] j
lea eax, dword ptr ss : [esp + 0x38]
4 K) o8 C; ~: A- U push eax9 J2 U- U% ?, ?$ J" \9 ~
push dword ptr ss : [esp + 0x38]5 {2 m% o$ c8 C- G+ H3 B! `
call m_NewStatShow_goldcoinimg3 z6 z) S8 v. \6 u6 j# I& Z
POPAD
- V/ K1 ] }, p9 l& t' [- ^+ L) N4 n JMP D2Gfx::D2DrawImage
5 M+ O+ n/ m& ? }
7 K: K; s5 S3 q}/ j! g: i& M& f3 x p5 T4 |6 `
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
3 ? \$ Z! L3 x{
4 g8 f9 J1 `8 L! Z2 C% B if (x > D2Client::ptScreenSize->x / 2)# O1 _! q1 o {; h' ]% A
{
9 `1 T1 _0 l& v- \/ V *y = getYGoldCoinFixBtn();
- C$ r6 u& g. X3 {4 } return getXGoldCoinFixBtn() + 32;5 {; B; X6 u6 j( X7 G0 M
}
+ F. j# u) V( @0 x" _ return x;
# |/ ]6 Y- h3 m. M: \3 g- S( _) T}% q4 m% y% R( @( A
__declspec(naked) void caller_goldcointext()8 m6 U" J7 n( n5 W
{
' p$ b( Z* S1 C$ b __asm
& H. @, D* e9 K1 h2 }: U {* L* s* t& n0 |1 c
PUSH ECX
& Y+ o5 P" u7 v) J- j PUSH EDI
+ c8 e! |6 q' C3 J) d PUSH ESI
6 n# a$ d; m: M5 ?" ? PUSH EAX
3 _. z9 N& G' T7 } k- W9 r MOV ECX, EDX# _6 s. Z6 \$ i" e; ^# C1 S; Z4 g
LEA EDX,[ESP+0X4+0X10]/ m& z/ c% w9 G
CALL m_NewStatShow_goldcointext
. e+ T4 q. A* p# w/ \4 [7 d MOV EDX,EAX
$ i# b9 }( U. h: @+ X3 p o POP EAX! Z2 L* `1 ^2 R3 l. m: s
POP ESI
6 L# l0 z9 R5 w( F3 L POP EDI
2 t% Q1 S% `8 f& R POP ECX( o# p: x2 }8 ?, b
jmp D2Win::D2PrintString;. }5 I K0 G# m3 O1 c
}: E4 F. t c: P3 z8 J
}
: o0 f( p d, s! r0 M( z. f P/ @' @
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
, q* l0 ^/ F, K, ?) C( F; m; s8 o7 c{
( G; H/ x3 J1 x: z: A DWORD mx = *D2Client::ptMouseX;9 l2 S U5 e' U1 Y
DWORD my = *D2Client::ptMouseY;
3 b/ |2 E- r8 W$ w0 c, r1 V if (isOnInvCloseFixBtn(mx, my))
8 C2 u- ], Z. d4 y3 ], G return TRUE;
. S: @5 [2 F9 K% ^ return FALSE;
' ?% ?$ j+ C( b6 B' G* |8 |4 \/ I; y}$ }; h3 F% Q6 O
__declspec(naked) void caller_close()( X5 {, E o/ Z* v( ?
{
% p' U2 f# L& l t __asm
9 ^% S. T/ e2 x1 ?: h {
. K) `! n7 [" [+ [ PUSH ESI
" [- W/ C+ \# A8 ^6 F: J/ Q- Q push ebx/ ]# h& n, |8 F* I1 D
call m_NewStatShow_close
) d) \- {1 N$ m8 `& C0 m pop ebx
4 q# n( m% Q" x- R: s# t# }. I pop esi0 l5 D- ]) j: y/ d3 O x j& ~
retn
0 ]8 w9 \. Z) j }
1 B' B2 r$ ?+ f' ^/ v* y. u} P2 Z Z" p& h4 t4 j
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])) r8 T# ~1 C, C/ H. g3 a0 u
{
5 y! Y8 o0 m* g* k, f *nXpos = getXInvCloseFixBtn();& Q0 m9 I: B$ E4 L" @
*nYpos = getYInvCloseFixBtn();
" z, u3 @/ ~& n8 F- ^" c}: |( z& b; B! }; n# g- O
__declspec(naked) void caller_closeimg()
4 U- K7 ]/ _# B! V! \. N8 c; Z4 k{+ L$ W7 E# J5 B
__asm
# w5 v$ h. E2 x% x2 d {
* u8 i9 Z- O# F/ m0 y PUSHAD( v# _ v4 \! y4 n- N- X1 f& ]' |0 x
lea eax, dword ptr ss : [esp + 0x38]
8 B/ {8 m" d8 Z* _6 x1 R: B push eax
. G5 T$ D3 I! `2 V; C3 @ push dword ptr ss : [esp + 0x38]
8 e0 b& W; Q l- F6 t" M push dword ptr ss : [esp + 0x38] s% P% W8 M8 F
lea eax, dword ptr ss : [esp + 0x38]
- c1 _7 b- w7 W: r- \ push eax7 X" d8 v. d" V: a1 l; ~9 z
lea eax, dword ptr ss : [esp + 0x38]" l6 p* |8 r6 c* K
push eax
$ \4 P2 E% {) ~2 ~7 p4 w- K6 ~+ x push dword ptr ss : [esp + 0x38]
4 y* D* y' a6 F call m_NewStatShow_closeimg! r+ X6 m" }9 m: M1 t4 W, t1 ~/ y
POPAD3 D9 x. D3 T* f7 s# Q- n
JMP D2Gfx::D2DrawImage9 U6 E+ F: g: D+ T4 f3 n$ t
}# j+ z% }% v7 ^, S- j8 G" I/ O
}8 K# M n0 [! j7 i2 c2 W. v+ @
0 R. g5 U! V% T% W) a6 P1 v. Q+ m6 C7 K
9 K9 h- ^: e! }# Z8 j
|
|