Memory Execute

Signature

int tim_memoryExecute(int callAddress, int/float arg1, int/float arg2, int/float arg3, int/float arg4); //id:0x1002

Description

Executes the call address with the provided arguments.

  • The first four integer or pointer arguments are passed in the ecx, edx, r8d and r9d registers.

  • The first four floating-point arguments are passed in the first four SSE registers, xmm0-xmm3.

  • Any additional arguments are passed on the stack via the Memory Push Stack function.

  • Forwards the integer or pointer value returned in the eax register from the called function.

Examples

Parameter Passing

function allInt()
{
    regI0 = 1; //ecx
    regI1 = 2; //edx
    regI2 = 3; //r8d
    regI3 = 4; //r9d
    tim_memoryPushStack(5); //rsp+24
    tim_memoryPushStack(6); //rsp+28
    tim_memoryExecute(0x00000000, regI0, regI1, regI2, regI3); 
}

function allFloat()
{
    regF0 = 1.0; //xmm0
    regF1 = 2.0; //xmm1
    regF2 = 3.0; //xmm2
    regF3 = 4.0; //xmm3
    tim_memoryPushStack(5.0); //rsp+24
    tim_memoryPushStack(6.0); //rsp+28
    tim_memoryExecute(0x00000000, regF0, regF1, regF2, regF3);
}

function mixed()
{
    regI0 = 1; //ecx
    regF1 = 2.0; //xmm1
    regI2 = 3; //r8d
    regF3 = 4.0; //xmm3
    tim_memoryPushStack(5); //rsp+24
    tim_memoryPushStack(6.0); //rsp+28
    tim_memoryExecute(0x00000000, regI0, regF1, regI2, regF3);
}

Set All Party Members To Max Level

for (regI0 = 0; regI0 < 40; regI0++)
{
    regI1 = tim_memoryExecute(0x00320A40, regI0, 0, 0, 0); //getBattleUnitKeep(...)
    regI2 = 99 //level
    tim_memoryExecute(0x0030C470, regI1, regI2, 0, 0); //setStats(...)
}

Notes

Last updated