1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
void G::UseHook( xTreeID root, s32 endian, s8 cIndex, s8 cCount )
{
HACK* hack = mGetHack( root );
if ( hack->use )
{
CODE code;
u64 value;
u64 hookStart;
bool tBool;
bool recurse = false;
s8 v, vCount;
u8 i, iCount;
u64 address, fliped, ptr;
s8 p, pCount;
if ( cCount < 0 )
{
recurse = true;
cCount = hack->GetCount();
}
for ( ; cIndex < cCount; ++cIndex )
{
code = ( *hack )[ cIndex ];
value = code[ 0 ];
hookStart = hookArray[ code.ram ];
p = 0;
pCount = code.ptrDepth;
v = 0;
vCount = code.loop;
address = hookStart + code.byte;
GetAddress( address, fliped, code.size, endian );
ptr = fliped;
if ( hookApp )
{
for ( ; p < pCount; ++p )
{
fliped = ptr;
GetRamX( appHandle, fliped, &ptr, 4u );
}
}
else
{
for ( ; p < pCount; ++p )
{
fliped = ptr;
bin_BF.Seek( fliped, wxFromStart );
bin_BF.Read( &ptr, 4u );
}
}
switch ( code.type )
{
case CT_WRITE:
if ( hookApp )
{
do
{
SetRamX( appHandle, ptr, &value, code.size );
ptr += code.increment;
value += code.slide;
++v;
} while ( v < vCount );
}
else
{
do {
bin_BF.Seek( ptr, wxFromStart );
bin_BF.Write( &value, code.size );
ptr += code.increment;
value += code.slide;
++v;
} while ( v < vCount );
}
break;
case CT_COPY:
|