<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="50">
  <CheatEntries>
    <CheatEntry>
      <ID>14</ID>
      <Description>"Enable Script"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript Async="1">{$lua}
if syntaxcheck then return end

[ENABLE]
--code from here to '[DISABLE]' will be used to enable the cheat
if (LaunchDotNetInterface() == nil) then
  showErrorMessage("Failed to load .NET Interface.")
end

function pRegisterNetAddr(className, methodName)
  local address = dotnet_findDotNetMethodAddress('', className, methodName)
  if address == nil then
    showErrorMessage("Couldn't find the function "..className.."::"..methodName)
  else
    local symbolName = className.."::"..methodName
    registerSymbol(symbolName, address, true)
  end
end

pRegisterNetAddr('PlayerHealthStat','get_HP')
pRegisterNetAddr('Paris.Game.Actor.Player','get_CanBeHurt')
pRegisterNetAddr('Paris.Game.Actor.Player','get_Energy')
pRegisterNetAddr('Paris.Game.Actor.Player','get_Ammo')
pRegisterNetAddr('Paris.Game.Actor.Player','Tick')
pRegisterNetAddr('Paris.Game.GamePlayerInfo','set_ComboPoints')
pRegisterNetAddr('Paris.Game.GamePlayerInfo','set_Score')

--local size = 1024
--local desiredAddress = ('PlayerHealthStat::get_HP')
--local addr = allocateMemory(size, desiredAddress)
{$asm}
alloc(newmem,1024,PlayerHealthStat::get_HP)
registerSymbol(newmem)

{$lua}
[DISABLE]
--code from here till the end of the code will be used to disable the cheat
unregisterSymbol('PlayerHealthStat::get_HP')
unregisterSymbol('Paris.Game.Actor.Player::get_CanBeHurt')
unregisterSymbol('Paris.Game.Actor.Player::get_Energy')
unregisterSymbol('Paris.Game.Actor.Player::get_Ammo')
unregisterSymbol('Paris.Game.Actor.Player::Tick')
unregisterSymbol('Paris.Game.GamePlayerInfo::set_ComboPoints')
unregisterSymbol('Paris.Game.GamePlayerInfo::set_Score')

{$asm}
//local addr = getAddress("newmem")
unregisterSymbol(newmem)
deAlloc(newmem)
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>9</ID>
          <Description>"Infinite HP"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
//alloc(newmem,100,PlayerHealthStat::get_HP+38)
label(returnhere oriHpcode exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here
fild dword ptr[rax+28]
fistp dword ptr[rax+10]
oriHpcode:
readmem(PlayerHealthStat::get_HP+38,7)
//mov eax,[rax+10]
//add rsp,28

exit:
jmp returnhere

PlayerHealthStat::get_HP+38:
jmp newmem
nop 2
returnhere:
registersymbol(oriHpcode)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
PlayerHealthStat::get_HP+38:
readmem(oriHpcode,7)
//db 8B 40 10 48 83 C4 28
//mov eax,[rax+10]
//add rsp,28
unregistersymbol(oriHpcode)
//dealloc(newmem)
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>13</ID>
          <Description>"Invincible"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
//alloc(newmem,100,Paris.Game.Actor.Player::get_CanBeHurt+7)
label(returnhere oriHurtcode exit)

newmem+16: //this is allocated memory, you have read,write,execute access
//place your code here
mov byte ptr [rax+21],00

oriHurtcode:
readmem(Paris.Game.Actor.Player::get_CanBeHurt+7,5)
//movzx eax,byte ptr [rax+21]
//ret 

exit:
jmp returnhere

Paris.Game.Actor.Player::get_CanBeHurt+7:
jmp newmem+16
returnhere:
registersymbol(oriHurtcode)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
Paris.Game.Actor.Player::get_CanBeHurt+7:
readmem(oriHurtcode,5)
//db 0F B6 40 21 C3
//movzx eax,byte ptr [rax+21]
//ret
unregistersymbol(oriHurtcode)
//dealloc(newmem)
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>5</ID>
          <Description>"Infinite Energy"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
//alloc(newmem,100,Paris.Game.Actor.Player::get_Energy+23)
label(returnhere oriEnergycode exit)

newmem+28: //this is allocated memory, you have read,write,execute access
//place your code here
fild dword ptr[rdx+30]
fistp dword ptr[rdx+18]

oriEnergycode:
readmem(Paris.Game.Actor.Player::get_Energy+23,7)
//mov eax,[rdx+18]
//add rsp,20

exit:
jmp returnhere

Paris.Game.Actor.Player::get_Energy+23:
jmp newmem+28
nop 2
returnhere:
registersymbol(oriEnergycode)
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
Paris.Game.Actor.Player::get_Energy+23:
readmem(oriEnergycode,7)
//db 8B 42 18 48 83 C4 20
//mov eax,[rdx+18]
//add rsp,20
unregistersymbol(oriEnergycode)
//dealloc(newmem)
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>6</ID>
          <Description>"Infinite Ammo"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
//alloc(newmem,100,Paris.Game.Actor.Player::get_Ammo+23)
label(returnhere oriAmmocode exit)

newmem+3e: //this is allocated memory, you have read,write,execute access
//place your code here
fild dword ptr[rdx+38]
fistp dword ptr[rdx+1C]

oriAmmocode:
readmem(Paris.Game.Actor.Player::get_Ammo+23,7)
//mov eax,[rdx+1C]
//add rsp,20

exit:
jmp returnhere

Paris.Game.Actor.Player::get_Ammo+23:
jmp newmem+3e
nop 2
returnhere:
registersymbol(oriAmmocode)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat

Paris.Game.Actor.Player::get_Ammo+23:
readmem(oriAmmocode,7)
//db 8B 42 1C 48 83 C4 20
//mov eax,[rdx+1C]
//add rsp,20
unregistersymbol(oriAmmocode)
//dealloc(newmem)
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>16</ID>
          <Description>"Infinite Combo Time"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
//alloc(newmem,2048,Paris.Game.Actor.Player::Tick+B9D) 
label(returnhere oriComboTimercode exit)

newmem+54: //this is allocated memory, you have read,write,execute access
//place your code here
movss xmm0,[pComboTime]
oriComboTimercode:
readmem(Paris.Game.Actor.Player::Tick+B9D,6)
//vmovss [rdx+48],xmm0

exit:
jmp returnhere

pComboTime:
dd (float)5

Paris.Game.Actor.Player::Tick+B9D:
jmp newmem+54
nop
returnhere:
registersymbol(oriComboTimercode)
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
//dealloc(newmem)
Paris.Game.Actor.Player::Tick+B9D:
readmem(oriComboTimercode,6)
//db C4 E1 7A 11 42 48
//vmovss [rdx+48],xmm0
unregistersymbol(oriComboTimercode)
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>19</ID>
          <Description>"Combo Multiplier"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
//alloc(newmem,2048,Paris.Game.GamePlayerInfo::set_ComboPoints+1B) 
label(returnhere oripHitcode exit)

newmem+76: //this is allocated memory, you have read,write,execute access
//place your code here
add edx,[pHitMulti]

oripHitcode:
readmem(Paris.Game.GamePlayerInfo::set_ComboPoints+1B,13)
//mov [rcx+38],edx
//mov rax,Paris.Game.Data.GameSettings._singleton

exit:
jmp returnhere

pHitMulti:
dd 00

Paris.Game.GamePlayerInfo::set_ComboPoints+1B:
jmp newmem+76
nop 8
returnhere:
registersymbol(pHitMulti oripHitcode)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
//dealloc(newmem)
Paris.Game.GamePlayerInfo::set_ComboPoints+1B:
readmem(oripHitcode,13)
//db 89 51 38 48 B8 58 60 00 90 40 02 00 00
//mov [rcx+38],edx
//mov rax,Paris.Game.Data.GameSettings._singleton
unregistersymbol(*)
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>20</ID>
              <Description>"multiply by"</Description>
              <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">0:1x
1:2x
4:5x
9:10x
19:20x
49:50x
99:100x
</DropDownList>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>pHitMulti</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>23</ID>
          <Description>"Score Multiplier"</Description>
          <Options moHideChildren="1"/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
//alloc(newmem,2048,Paris.Game.GamePlayerInfo::set_Score+8C) 
label(returnhere oriScorecode exit)

newmem+94: //this is allocated memory, you have read,write,execute access
//place your code here
add edi,[pScoreMul]

oriScorecode:
readmem(Paris.Game.GamePlayerInfo::set_Score+8C,7)
//mov [rcx+14],edi
//add rsp,28

exit:
jmp returnhere

pScoreMul:
dd 00

Paris.Game.GamePlayerInfo::set_Score+8C:
jmp newmem+94
nop 2
returnhere:
registersymbol(pScoreMul oriScorecode)
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
//dealloc(newmem)
Paris.Game.GamePlayerInfo::set_Score+8C:
readmem(oriScorecode,7)
//db 89 79 14 48 83 C4 28
//mov [rcx+14],edi
//add rsp,28
unregistersymbol(*)
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>24</ID>
              <Description>"multiply by"</Description>
              <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">0:1x
1:2x
4:5x
9:10x
19:20x
49:50x
99:100x
499:500x
999:1000x
</DropDownList>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>pScoreMul</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
