<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="42">
  <CheatEntries>
    <CheatEntry>
      <ID>908</ID>
      <Description>"Enable"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : SaintsRow_DX12.exe
  Version: 
  Date   : 2022-09-12
  Author : seneeki
}
[ENABLE]
{$lua}
if syntaxcheck then return end
function infNitro()
  ni = readFloat('[plNit]+160')
  writeFloat('[plNit]+1ac',ni)
end
{$asm}
aobscanmodule(get_player_for_health_compare,SaintsRow_DX12.exe,eb ** F3 0F 10 ** ** ** ** ** F3 ** ** ** 44 ** ** ** ** C7) //F3 0F 10 B0 F0 00 00 00 F3 0F
aobscanmodule(player_wont_die,SaintsRow_DX12.exe,F3 0F 11 B3 F0 00 00 00 F3 0F 5C) //this one needs reviewing
aobscanmodule(open_phone_exp,SaintsRow_DX12.exe,74 ** 48 ** ** FF ** ** 8B ** ** 48 ** ** ** 66 ** ** ** f3) // 8b 48 3c 48 8b 43 10
aobscanmodule(player_gain_exp_money,SaintsRow_DX12.exe,0f 42 ** 89 ** ** 2B ** 74) //89 6E 3C 2B E9
aobscanmodule(clip_ammo,SaintsRow_DX12.exe,74 ** 0f 10 ** ** 0F 28 ** 0F 11 ** ** e9) //0F 28 07 0F 11 40 08
aobscanmodule(access_max_nitrous,SaintsRow_DX12.exe,0f 10 ** ** ** ** ** 0F 2F ** ** ** ** ** 0f 83 ** ** ** ** f3 0f 10) //0F 2F 8B 60 01 00 00
alloc(ammomem,$1000,clip_ammo+6)
alloc(plhmem,$1000,get_player_for_health_compare+2)
alloc(pwdmem,$1000,player_wont_die)
alloc(opemem,$1000,open_phone_exp+8)
alloc(gemmem,$1000,player_gain_exp_money+3)
alloc(nitmem,$1000,access_max_nitrous+7)
label(nit_retmem ope_retmem plh_retmem plh_exit plPointer pwd_exit pwdcheck infHP OHK kill enemy ope_exit plExp plMon exp_mult mon_mult expmon_continue expmon_exit mon_on exp_on exp_chk exp_multi mon_multi ammo_exit ammo_on ammo_continue nit_exit plNit)
registersymbol(nit_retmem ammo_continue expmon_continue ope_retmem plh_retmem get_player_for_health_compare plPointer player_wont_die infHP OHK open_phone_exp plExp plMon player_gain_exp_money exp_mult mon_mult mon_on exp_on clip_ammo ammo_on access_max_nitrous plNit)
plhmem:
 mov [plPointer+0],rax
plh_retmem:
  readmem(get_player_for_health_compare+2,8)   //movss xmm6,[rax+000000F0]
  jmp plh_exit
plPointer:
  dq 0
  align 8,cc
get_player_for_health_compare+2:
  jmp plhmem
  nop 3
plh_exit:
pwdmem:
  cmp dword ptr [infHP+0],1
  jne pwdcheck
  cmp [plPointer],rbx
  jne pwdcheck
{$luacode}
  writeFloat('[plPointer]+f0',6000)
{$asm}
  jmp pwd_exit
pwdcheck:
  cmp dword ptr [OHK],1
  je kill
  movss [rbx+000000F0],xmm6
  jmp pwd_exit
kill:
  cmp [plPointer],rbx
  jne enemy
  movss [rbx+000000F0],xmm6
  jmp pwd_exit
enemy:
  movss [rbx+000000F0],xmm2
  jmp pwd_exit
infHP:
  dd 0
  align 4,cc
OHK:
  dd 0
  align 4,cc
player_wont_die:
  jmp pwdmem
  nop 3
pwd_exit:
opemem:
  mov [plExp+0],rax
  mov [plMon+0],rax
  add [plMon+0],50
ope_retmem:
  readmem(open_phone_exp+8,7)
  jmp ope_exit
plExp:
  dq 0
  align 8,cc
plMon:
  dq 0
  align 8,cc
open_phone_exp+8:
  jmp opemem
  nop 2
ope_exit:
gemmem:
  cmp dword ptr [mon_on+0],1
  jne exp_chk
  cmp [plMon+0],rsi
  je mon_multi
exp_chk:
  cmp dword ptr [exp_on+0],1
  jne expmon_continue
  cmp [plExp+0],rsi
  je exp_multi
  jmp expmon_continue
mon_multi:
  sub ebp,[rsi+3c]
  imul ebp,[mon_mult+0]
  add ebp,[rsi+3c]
  jmp expmon_continue
exp_multi:
  sub ebp,[rsi+3c]
  imul ebp,[exp_mult+0]
  add ebp,[rsi+3c]
expmon_continue:
 readmem(player_gain_exp_money+3,5)
  jmp expmon_exit
exp_mult:
  dd 1
  align 4,cc
mon_mult:
  dd 1
  align 4,cc
mon_on:
  dd 0
  align 4,cc
exp_on:
  dd 0
  align 4,cc
player_gain_exp_money+3:
  jmp gemmem
expmon_exit:
ammomem:
  cmp dword ptr [ammo_on+0],1
  jne ammo_continue
  inc [rdi]
ammo_continue:
  readmem(clip_ammo+6,7)
  jmp ammo_exit
ammo_on:
  dd 0
  align 4,cc
clip_ammo+6:
  jmp ammomem
  nop 2
ammo_exit:
nitmem:
  mov [plNit+0],rbx
nit_retmem:
  readmem(access_max_nitrous+7,7) //comiss xmm1,[rbx+00000160]
  jmp nit_exit
plNit:
  dq 0
  align 8,cc
access_max_nitrous+7:
  jmp nitmem
  nop 2
nit_exit:
[DISABLE]
get_player_for_health_compare+2:
  readmem(plh_retmem,8)
 // db F3 0F 10 B0 F0 00 00 00
player_wont_die:
  db F3 0F 11 B3 F0 00 00 00
open_phone_exp+8:
  readmem(ope_retmem,7)
 // db 8B 48 3C 48 8B 43 10
player_gain_exp_money+3:
  readmem(expmon_continue,5)
  //db 89 6E 3C 2B E9
clip_ammo+6:
  readmem(ammo_continue,7)
  //db 0F 28 07 0F 11 40 08
access_max_nitrous+7:
  readmem(nit_retmem,7)
  //db 0F 2F 8B 60 01 00 00
unregistersymbol(*)
dealloc(*)
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1337092471</ID>
          <Description>"Pointers (open phone to see all)"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>902</ID>
              <Description>"Health"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>Float</VariableType>
              <Address>plPointer</Address>
              <Offsets>
                <Offset>f0</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>912</ID>
              <Description>"Money"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>plMon</Address>
              <Offsets>
                <Offset>3c</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>900</ID>
              <Description>"Exp"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>plExp</Address>
              <Offsets>
                <Offset>3c</Offset>
              </Offsets>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>1337092478</ID>
          <Description>"Scripts"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>909</ID>
              <Description>"Infinite Health"</Description>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[enable]
infHP:
 db 1
[disable]
infHP:
 db 0
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>911</ID>
              <Description>"One Hit Kills"</Description>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[enable]
OHK:
 db 1
[disable]
OHK:
 db 0
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337092477</ID>
              <Description>"Money Multiplier (open phone before enabling)"</Description>
              <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[enable]
mon_on:
  db 1
[disable]
mon_on:
  db 0
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>1337092475</ID>
                  <Description>"Multiplication Factor"</Description>
                  <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">0:No Gain
1:Default
2:Double
3:Triple
10:Fast Cash
20:Faster Cash
50:Overnight Millionaire
100:Jackpot
200:What to buy now?
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>mon_mult</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>1337092479</ID>
              <Description>"Exp Multiplier (open phone before enabling)"</Description>
              <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[enable]
exp_on:
  db 1
[disable]
exp_on:
  db 0
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>1337092476</ID>
                  <Description>"Multiplication Factor"</Description>
                  <DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">0:No Gain
1:Default
2:Double
3:Triple
10:Fast Levelling
20:Faster Levelling
50:Power Levelling
100:Fast Powerlevelling
200:Very Fast Powerlevelling
500:Just Max Me Out Already
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>4 Bytes</VariableType>
                  <Address>exp_mult</Address>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
            <CheatEntry>
              <ID>1337092486</ID>
              <Description>"Infinite Nitrous"</Description>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{$lua}
if syntaxcheck then return end
[enable]
ntimer = createTimer()
ntimer.setInterval(100)
ntimer.onTimer = infNitro
[disable]
ntimer.destroy()
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>916</ID>
              <Description>"Infinite Ammo (select weapon at least once before enabling)"</Description>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[enable]
ammo_on:
  db 1
[disable]
ammo_on:
  db 0
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337092489</ID>
              <Description>"Unlimited / Ignore Finisher"</Description>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[enable]
aobscanmodule(finisher_cooldown_check,SaintsRow_DX12.exe,48 ** ** e8 ** ** ** ** 84 ** 0F 84 ** ** ** ** 8B ** ** 85 ** 0f 88) //84 C0 0F 84 DE 00 00 00 8B
alloc(fccmem,$1000,finisher_cooldown_check+a)
alloc(fccretmem,$1000)
label(fccexit fccjump)
registersymbol(fccjump finisher_cooldown_check fccretmem)
fccmem:
  readmem(finisher_cooldown_check+8,2) // test al,al
  cmp [plPointer+0],al
fccjump:
  readmem(finisher_cooldown_check+a,6) //je SaintsRow_DX12.exe+63C759
  jmp fccexit
fccOn:
  dd 0
  align 4,cc
finisher_cooldown_check+8:
  jmp fccmem
  nop 3
fccexit:
fccretmem:
  readmem(finisher_cooldown_check+8,8)
[disable]
finisher_cooldown_check+8:
  readmem(fccretmem,8)
  //db 84 C0 0F 84 DE 00 00 00

</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337092493</ID>
              <Description>"Unlimited / Ignore Flow"</Description>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>[ENABLE]
aobscanmodule(flow_check_on_use,SaintsRow_DX12.exe,33 C9 E8 ** ** ** ** 48 ** ** 74 ** 48 ** ** e8 ** ** ** ** 0f 2f) // 33 C9 E8 E6 A9 36 01
aobscanmodule(set_flow_max,SaintsRow_DX12.exe,0f 28 ** 8B ** ** ** ** ** 3b ** 0f 8e ** ** ** ** 0f 2f) //8B 0D 66 6F 41 02
aobscanmodule(flow_check_player,SaintsRow_DX12.exe,cc 40 53 48 ** ** ** 48 ** ** ** 48 ** ** 48 ** ** ** e8 ** ** ** ** 84 ** b9 ** ** ** **  ba ** ** ** ** 0F 44 ** 48 ** ** ** 48 ** ** ** 5b e9 ** ** ** ** cc ) //0F 44 D1 48 8D 0C 1A 48 83 C4 20 5B E9 8D)
alloc(flowmem,$1000,set_flow_max+3)
label(flow_exit flow_retmem)
registersymbol(flow_check_player flow_check_on_use set_flow_max flow_retmem)
flow_check_on_use-6:
db 90 e9
flow_check_player+23:
  nop 3
flowmem:
flow_retmem:
  readmem(set_flow_max+3,6)
  mov ecx,5
  jmp flow_exit
set_flow_max+3:
  jmp flowmem
  nop
flow_exit:


[DISABLE]
flow_check_on_use-6:
  db 0f 8d
set_flow_max+3:
readmem(flow_retmem,6)
  //db 8B 0D 66 6F 41 02
flow_check_player+23:
  db 0F 44 D1
unregistersymbol(*)
dealloc(*)

</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>1337092497</ID>
              <Description>"Car Invinicibility (only invinicible after getting into car at least once, re-enter if enabled while sitting in car)"</Description>
              <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : SaintsRow_DX12.exe
  Version: 
  Date   : 2022-09-26
  Author : seneeki

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(access_on_enter_vehicle,SaintsRow_DX12.exe,f3 ** 0f 10 ** ** ** 48 ** ** ** ** ** ** 44 ** ** ** 41 ** ** ** f3 0f ** ** ** ** ** ** f3 0f ) //F3 0F 10 86 80 00 00 00
aobscanmodule(cars_get_damaged,SaintsRow_DX12.exe,74 ** F3 0F 58 ** ** ** 00 00 44 ** ** ** ** 00 00 49) //F3 0F 58 89 80 00 00 00 44
alloc(cgdmem,$1000,cars_get_damaged+2)
alloc(aevmem,$1000,access_on_enter_vehicle+16)

label(aev_exit aev_retmem plVehicle cgd_exit cgd_retmem killchk COHK)
registersymbol(access_on_enter_vehicle aev_retmem plVehicle cars_get_damaged cgd_retmem COHK)
aevmem:
  mov [plVehicle+0],rsi
aev_retmem:
  readmem(access_on_enter_vehicle+16,8)
  jmp aev_exit
plVehicle:
  dq 0
  align 8,cc
access_on_enter_vehicle+16:
  jmp aevmem
  nop 3
aev_exit:

cgdmem:
  cmp [plVehicle],rcx
  jne @f
  xorps xmm0,xmm0
  comiss xmm1,xmm0
  jae @f
  movss xmm0,[rcx+80]
  subss xmm0,xmm1
  movss [rcx+80],xmm0
  jmp cgd_retmem
killchk:
  cmp dword ptr [COHK+0],1
  jne @f
  push rbx
  mov [rbx],(float)0.01
  movss xmm2,[rbx]
  pop rbx
  movss [rcx+80],xmm2
cgd_retmem:
 readmem(cars_get_damaged+2,8) //addss xmm1,[rcx+00000080]
  jmp cgd_exit
COHK:
  dd 0
  align 4,cc
cars_get_damaged+2:
  jmp cgdmem
  nop 3
cgd_exit:

[DISABLE]

access_on_enter_vehicle+16:
  readmem(aev_retmem,8)
  //db F3 0F 10 86 80 00 00 00
cars_get_damaged+2:
  readmem(cgd_retmem,8)
  //db F3 0F 58 89 80 00 00 00
unregistersymbol(*)
dealloc(*)

{
// ORIGINAL CODE - INJECTION POINT: SaintsRow_DX12.exe+AFED30

SaintsRow_DX12.exe+AFED1E: 48 8B 7C 24 48  - mov rdi,[rsp+48]
SaintsRow_DX12.exe+AFED23: 48 83 C4 20     - add rsp,20
SaintsRow_DX12.exe+AFED27: 41 5E           - pop r14
SaintsRow_DX12.exe+AFED29: C3              - ret 
SaintsRow_DX12.exe+AFED2A: CC              - int 3 
SaintsRow_DX12.exe+AFED2B: CC              - int 3 
SaintsRow_DX12.exe+AFED2C: CC              - int 3 
SaintsRow_DX12.exe+AFED2D: CC              - int 3 
SaintsRow_DX12.exe+AFED2E: CC              - int 3 
SaintsRow_DX12.exe+AFED2F: CC              - int 3 
// ---------- INJECTING HERE ----------
SaintsRow_DX12.exe+AFED30: 48 89 5C 24 08  - mov [rsp+08],rbx
// ---------- DONE INJECTING  ----------
SaintsRow_DX12.exe+AFED35: 48 89 6C 24 18  - mov [rsp+18],rbp
SaintsRow_DX12.exe+AFED3A: 48 89 74 24 20  - mov [rsp+20],rsi
SaintsRow_DX12.exe+AFED3F: 57              - push rdi
SaintsRow_DX12.exe+AFED40: 41 56           - push r14
SaintsRow_DX12.exe+AFED42: 41 57           - push r15
SaintsRow_DX12.exe+AFED44: 48 83 EC 30     - sub rsp,30
SaintsRow_DX12.exe+AFED48: 41 0F B6 E9     - movzx ebp,r9l
SaintsRow_DX12.exe+AFED4C: 49 8B F0        - mov rsi,r8
SaintsRow_DX12.exe+AFED4F: 48 8B DA        - mov rbx,rdx
SaintsRow_DX12.exe+AFED52: 4C 8B F9        - mov r15,rcx
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>1337092499</ID>
                  <Description>"Explosive NPC Cars"</Description>
                  <VariableType>Auto Assembler Script</VariableType>
                  <AssemblerScript>[enable]
COHK:
  db 1
[disable]
COHK:
  db 0
</AssemblerScript>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols>
    <SymbolEntry>
      <Name>game_spawn_limits</Name>
      <Address>7FF727CC44DF</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>game_spawn_limits::Asm</Name>
      <Address>7FF727CC44EC</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>game_spawn_limits::Base</Name>
      <Address>7FF729FA9CF0</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>hknpWorldInstruction</Name>
      <Address>7FF7277A632D</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>hknpWorld</Name>
      <Address>7FF72CA93868</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>hknpWorldGetPlayerPositionInstruction</Name>
      <Address>7FF7292B5610</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>IsGamePausedInstruction</Name>
      <Address>7FF7288045A4</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>IsGamePaused</Name>
      <Address>7FF72CA92508</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>FreezePlayerInstruction</Name>
      <Address>7FF728A87F0F</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>FreezePlayer</Name>
      <Address>7FF72C9CE8A0</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>rl_camera</Name>
      <Address>7FF72866F4BA</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>rl_camera::Asm</Name>
      <Address>7FF72866F4C1</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>rl_camera::Base</Name>
      <Address>7FF72C9CD638</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>cameramatrixwrite::sub</Name>
      <Address>7FF728538F66</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>camerafovwrite</Name>
      <Address>7FF728538FA3</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>camera_fov</Name>
      <Address>7FF72852889D</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>camera_fov_NB::Base</Name>
      <Address>7FF72AFCDD8C</Address>
    </SymbolEntry>
    <SymbolEntry>
      <Name>camera_fov::Base</Name>
      <Address>7FF72C9CD668</Address>
    </SymbolEntry>
  </UserdefinedSymbols>
  <LuaScript>
</LuaScript>
</CheatTable>
