[enable] alloc(newmem,2048) label(returnhere) label(in_air) label(exit) //Vergil currently does not have a input combination: //Lock-ON + Back + Jump //while he is in air in his human form newmem: //still going to do this //currently this will be called every frame //currently esi is address of player character test byte ptr [esi+00001A64],01 pushfd //keep flags for the conditional jump on returning je in_air exit: popfd //restore flags jmp returnhere in_air: //eax, ecx do not need to be pushed/popped //now for preliminary checks //these are done also on Trick Down (air) cmp dword ptr [esi+3924], 02 jne exit cmp byte ptr [esi+3928], 01 jne exit test byte ptr [esi+392c], 10 je exit movq xmm0, [esi+3930] //prepare registers for function call mov ecx, [esi+3940] sub esp, 14 //make room on the stack mov eax, esp movq [eax], xmm0 movq xmm0, [esi+3938] movq [eax+8], xmm0 mov [eax+10], ecx call DevilMayCry4SpecialEdition.exe+4CCD40 //listen lock-on input //cmp [esi+1bfc], C //input for "back" //jne exit //mov eax, [esi] //get starting address for player character methods //mov eax, [eax+234] //push 2a //push animation i.d for trick down //call eax //don't add esp even though it's reasonable jmp exit "DevilMayCry4SpecialEdition.exe"+D2C77: jmp newmem nop nop returnhere: [disable] dealloc(newmem) "DevilMayCry4SpecialEdition.exe"+D2C77: test byte ptr [esi+00001A64],01