|
|
@@ -0,0 +1,58 @@ |
|
|
|
[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
|
|
|
|
|