<?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_IsActivePlayerObject')
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')
--pRegisterNetAddr('Paris.Game.Actor.Player','get_CanCurrentlyBeGrabbed')
--pRegisterNetAddr('Paris.Game.Actor.Character','get_CanBeArmored')
--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_IsActivePlayerObject')
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')
--unregisterSymbol('Paris.Game.Actor.Player::get_CanCurrentlyBeGrabbed')
--unregisterSymbol('Paris.Game.Actor.Character::get_CanBeArmored')

{$asm}
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>25</ID>
          <Description>"Invincibility"</Description>
          <Color>000000</Color>
          <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::get_CanCurrentlyBeGrabbed+13) 
label(returnhere oriPlayercode PlayerGame exit)
newmem+16: //this is allocated memory, you have read,write,execute access
//place your code here
push rax
mov rax,PlayerGame
mov [rax],rcx
pop rax
mov byte ptr[rcx+20],01

oriPlayercode:
readmem(Paris.Game.Actor.Player::get_IsActivePlayerObject+23,7)
//mov r11d,[rcx]
//mov rcx,[rcx+10]

exit:
jmp returnhere

PlayerGame:

Paris.Game.Actor.Player::get_IsActivePlayerObject+23:
jmp newmem+16
nop 2
returnhere:
registersymbol(oriPlayercode PlayerGame)
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
{$lua}
writeByte('[PlayerGame]+20',00)

{$asm}
//dealloc(newmem)
Paris.Game.Actor.Player::get_IsActivePlayerObject+23:
readmem(oriPlayercode,7)
//db 44 8B 19 48 8B 49 10
//mov r11d,[rcx]
//mov rcx,[rcx+10]
unregisterSymbol(*)
</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+44: //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+44
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+5a: //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+5a
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+70: //this is allocated memory, you have read,write,execute access
//place your code here
maxss xmm0,[pComboTime]
oriComboTimercode:
readmem(Paris.Game.Actor.Player::Tick+B9D,6)
//vmovss [rdx+48],xmm0

exit:
jmp returnhere

pComboTime:
dd (float)1

Paris.Game.Actor.Player::Tick+B9D:
jmp newmem+70
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+8c: //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+8c
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+aa: //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+aa
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>
