<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>18</ID>
      <Description>"Get Data"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : grim dawn.exe
  Version: 
  Date   : 2023-06-24
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_GET_DATA,Game.dll,F3 0F 10 81 A4 0D 00 00 0F) // should be unique
alloc(newmem,$1000,INJECT_GET_DATA)

label(code)
label(return)
label(i_dbase_addr_2)
label(sd_min_hp_val)
label(is_fill_mp)
label(is_min_hp)

newmem:
  cmp qword ptr [i_dbase_addr_2], 0
  jne do_check
  mov qword ptr [i_dbase_addr_2], rcx

do_check:
chk_mana:
  cmp byte ptr [is_fill_mp], 1
  jne chk_hp

  vmovss xmm15, [rcx+00000E14] // max mana
  vmovss xmm14, [rcx+00000E20] // upkeep mana
  vsubss xmm13, xmm15, xmm14
  vmovss [rcx+00000DA4], xmm13 // mana

chk_hp:
  cmp byte ptr [is_min_hp], 1
  jne endp
  vmovsd xmm15, [rcx+00000D88] // HP
  vmovsd xmm14, [sd_min_hp_val]
  vcomisd xmm15, xmm14
  jge endp

  vmovsd [rcx+00000D88], xmm14

endp:

code:
  vmovss xmm0,[rcx+00000DA4]
  jmp return
align 10 cc
  i_dbase_addr_2:
  dq 0
  sd_min_hp_val:
  dq (double)500
  is_fill_mp:
  db 1
  is_min_hp:
  db 0

INJECT_GET_DATA:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_GET_DATA)
registersymbol(i_dbase_addr_2)
registersymbol(sd_min_hp_val)
registersymbol(is_fill_mp)
registersymbol(is_min_hp)


[DISABLE]

INJECT_GET_DATA:
  db F3 0F 10 81 A4 0D 00 00

unregistersymbol(INJECT_GET_DATA)
unregistersymbol(i_dbase_addr_2)
unregistersymbol(sd_min_hp_val)
unregistersymbol(is_fill_mp)
unregistersymbol(is_min_hp)

dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Game.GAME::Character::GetCurrentMana

Game.GAME::Character::ContributeMiscConversionAttributes+E6: CC                       - int 3 
Game.GAME::Character::ContributeMiscConversionAttributes+E7: CC                       - int 3 
Game.GAME::Character::ContributeMiscConversionAttributes+E8: CC                       - int 3 
Game.GAME::Character::ContributeMiscConversionAttributes+E9: CC                       - int 3 
Game.GAME::Character::ContributeMiscConversionAttributes+EA: CC                       - int 3 
Game.GAME::Character::ContributeMiscConversionAttributes+EB: CC                       - int 3 
Game.GAME::Character::ContributeMiscConversionAttributes+EC: CC                       - int 3 
Game.GAME::Character::ContributeMiscConversionAttributes+ED: CC                       - int 3 
Game.GAME::Character::ContributeMiscConversionAttributes+EE: CC                       - int 3 
Game.GAME::Character::ContributeMiscConversionAttributes+EF: CC                       - int 3 
// ---------- INJECTING HERE ----------
Game.GAME::Character::GetCurrentMana: F3 0F 10 81 A4 0D 00 00  - movss xmm0,[rcx+00000DA4]
// ---------- DONE INJECTING  ----------
Game.GAME::Character::GetCurrentMana+8: 0F 57 C9                 - xorps xmm1,xmm1
Game.GAME::Character::GetCurrentMana+B: F3 0F 5F C1              - maxss xmm0,xmm1
Game.GAME::Character::GetCurrentMana+F: C3                       - ret 
Game.GAME::Character::SetCurrentMana: F3 0F 10 91 A4 0D 00 00  - movss xmm2,[rcx+00000DA4]
Game.GAME::Character::SetCurrentMana+8: 0F 57 C0                 - xorps xmm0,xmm0
Game.GAME::Character::SetCurrentMana+B: F3 0F 5F D0              - maxss xmm2,xmm0
Game.GAME::Character::SetCurrentMana+F: 48 81 C1 68 0D 00 00     - add rcx,00000D68
Game.GAME::Character::SetCurrentMana+16: F3 0F 5C CA              - subss xmm1,xmm2
Game.GAME::Character::SetCurrentMana+1A: E9 11 D6 01 00           - jmp Game.GAME::CharacterBio::AddManaFast
Game.GAME::Character::SetCurrentMana+1F: CC                       - int 3 
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>31</ID>
          <Description>"Fill mana?"</Description>
          <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">0:No
1:Yes
</DropDownList>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>C08000</Color>
          <VariableType>Byte</VariableType>
          <Address>is_fill_mp</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>32</ID>
          <Description>"Keep min HP?"</Description>
          <DropDownListLink>Fill mana?</DropDownListLink>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>C08000</Color>
          <VariableType>Byte</VariableType>
          <Address>is_min_hp</Address>
          <CheatEntries>
            <CheatEntry>
              <ID>33</ID>
              <Description>"min. HP"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <Color>C08000</Color>
              <VariableType>Double</VariableType>
              <Address>sd_min_hp_val</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>19</ID>
          <Description>"HP"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Double</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>D88</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>35</ID>
          <Description>"Max HP"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>12C4</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>22</ID>
          <Description>"Mana"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>DA4</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>36</ID>
          <Description>"Allowed max mana"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>12C0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>21</ID>
          <Description>"Max Mana"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>E14</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>20</ID>
          <Description>"Mana upkeep"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>E20</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>23</ID>
          <Description>"Invisible flag"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Byte</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>1A2C</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>24</ID>
          <Description>"God mode flag"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Byte</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>1A2E</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>25</ID>
          <Description>"Get attacked flag"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>5E4</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>26</ID>
          <Description>"Money"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>132C</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>49</ID>
          <Description>"XP"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>13CC</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>47</ID>
          <Description>"Modifier pt"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>13D0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>27</ID>
          <Description>"Attribute pt"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>13D0</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>29</ID>
          <Description>"Skill pt"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>13D4</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>28</ID>
          <Description>"Devotion pt"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>13D8</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>48</ID>
          <Description>"Affinity"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>13E4</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>41</ID>
          <Description>"Run speed"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>4708</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>42</ID>
          <Description>"Max Run speed"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>470C</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>45</ID>
          <Description>"Cast speed"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>4710</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>46</ID>
          <Description>"Max cast speed"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>4714</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>43</ID>
          <Description>"Attack speed"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>4718</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>44</ID>
          <Description>"Max attack speed"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_dbase_addr_2</Address>
          <Offsets>
            <Offset>471C</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>34</ID>
      <Description>"Fast skill CD"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : grim dawn.exe
  Version: 
  Date   : 2023-06-25
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_FAST_COOLDOWN,Game.dll,00 0F 57 C9 F3 0F 5A C8) // should be unique
alloc(newmem,$1000,INJECT_FAST_COOLDOWN)

label(code)
label(return)

newmem:
  vxorps xmm0,xmm0,xmm0

code:
  xorps xmm1,xmm1
  cvtss2sd xmm1,xmm0

  jmp return



INJECT_FAST_COOLDOWN+01:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_FAST_COOLDOWN)

[DISABLE]

INJECT_FAST_COOLDOWN+01:
  db 0F 57 C9 F3 0F 5A C8

unregistersymbol(INJECT_FAST_COOLDOWN)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Game.GAME::Skill::StartCooldown+12

Game.GAME::Skill::SubtractManaCost+3B: CC                             - int 3 
Game.GAME::Skill::SubtractManaCost+3C: CC                             - int 3 
Game.GAME::Skill::SubtractManaCost+3D: CC                             - int 3 
Game.GAME::Skill::SubtractManaCost+3E: CC                             - int 3 
Game.GAME::Skill::SubtractManaCost+3F: CC                             - int 3 
Game.GAME::Skill::StartCooldown: 48 89 74 24 10                 - mov [rsp+10],rsi
Game.GAME::Skill::StartCooldown+5: 57                             - push rdi
Game.GAME::Skill::StartCooldown+6: 48 83 EC 20                    - sub rsp,20
Game.GAME::Skill::StartCooldown+A: 48 8B F9                       - mov rdi,rcx
Game.GAME::Skill::StartCooldown+D: E8 8E 00 00 00                 - call Game.GAME::Skill::GetCooldownTime
// ---------- INJECTING HERE ----------
Game.GAME::Skill::StartCooldown+12: 0F 57 C9                       - xorps xmm1,xmm1
// ---------- DONE INJECTING  ----------
Game.GAME::Skill::StartCooldown+15: F3 0F 5A C8                    - cvtss2sd xmm1,xmm0
Game.GAME::Skill::StartCooldown+19: 66 0F 2F 0D FF ED 27 00        - comisd xmm1,[Game.GAME::WeaponArmor_Offhand::`vftable'+F58]
Game.GAME::Skill::StartCooldown+21: 76 14                          - jna Game.GAME::Skill::StartCooldown+37
Game.GAME::Skill::StartCooldown+23: 48 8B 07                       - mov rax,[rdi]
Game.GAME::Skill::StartCooldown+26: 0F 57 D2                       - xorps xmm2,xmm2
Game.GAME::Skill::StartCooldown+29: 0F 28 C8                       - movaps xmm1,xmm0
Game.GAME::Skill::StartCooldown+2C: 48 8B CF                       - mov rcx,rdi
Game.GAME::Skill::StartCooldown+2F: FF 90 50 02 00 00              - call qword ptr [rax+00000250]
Game.GAME::Skill::StartCooldown+35: EB 0A                          - jmp Game.GAME::Skill::StartCooldown+41
Game.GAME::Skill::StartCooldown+37: C7 87 B0 01 00 00 00 00 00 00  - mov [rdi+000001B0],00000000
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>50</ID>
      <Description>"EXP multiplier"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : grim dawn.exe
  Version: 
  Date   : 2023-06-26
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_EXP_MULTI,Game.dll,01 51 7C 40 32 FF) // should be unique
alloc(newmem,$1000,INJECT_EXP_MULTI)

label(code)
label(return)
label(vf_exp_multi)

newmem:
  vmovss xmm14, [vf_exp_multi]
  cvtsi2ss xmm15, edx
  vmulss xmm13, xmm14, xmm15
  vcvtss2si edx, xmm13

code:
  add [rcx+7C],edx
  xor dil,dil
  jmp return
align 10 cc
  vf_exp_multi:
  dd (float)3.33333

INJECT_EXP_MULTI:
  jmp newmem
  nop
return:
registersymbol(INJECT_EXP_MULTI)
registersymbol(vf_exp_multi)

[DISABLE]

INJECT_EXP_MULTI:
  db 01 51 7C 40 32 FF

unregistersymbol(INJECT_EXP_MULTI)
unregistersymbol(vf_exp_multi)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Game.GAME::Item::SetIgnoreItemSkillCache+93A

Game.GAME::Item::SetIgnoreItemSkillCache+929: CC                       - int 3 
Game.GAME::Item::SetIgnoreItemSkillCache+92A: CC                       - int 3 
Game.GAME::Item::SetIgnoreItemSkillCache+92B: CC                       - int 3 
Game.GAME::Item::SetIgnoreItemSkillCache+92C: CC                       - int 3 
Game.GAME::Item::SetIgnoreItemSkillCache+92D: CC                       - int 3 
Game.GAME::Item::SetIgnoreItemSkillCache+92E: CC                       - int 3 
Game.GAME::Item::SetIgnoreItemSkillCache+92F: CC                       - int 3 
Game.GAME::Item::SetIgnoreItemSkillCache+930: 48 89 5C 24 18           - mov [rsp+18],rbx
Game.GAME::Item::SetIgnoreItemSkillCache+935: 57                       - push rdi
Game.GAME::Item::SetIgnoreItemSkillCache+936: 48 83 EC 30              - sub rsp,30
// ---------- INJECTING HERE ----------
Game.GAME::Item::SetIgnoreItemSkillCache+93A: 01 51 7C                 - add [rcx+7C],edx
// ---------- DONE INJECTING  ----------
Game.GAME::Item::SetIgnoreItemSkillCache+93D: 40 32 FF                 - xor dil,dil
Game.GAME::Item::SetIgnoreItemSkillCache+940: 8B 41 74                 - mov eax,[rcx+74]
Game.GAME::Item::SetIgnoreItemSkillCache+943: 48 8B D9                 - mov rbx,rcx
Game.GAME::Item::SetIgnoreItemSkillCache+946: 39 41 78                 - cmp [rcx+78],eax
Game.GAME::Item::SetIgnoreItemSkillCache+949: 0F 83 34 01 00 00        - jae Game.GAME::Item::SetIgnoreItemSkillCache+A83
Game.GAME::Item::SetIgnoreItemSkillCache+94F: 48 89 74 24 48           - mov [rsp+48],rsi
Game.GAME::Item::SetIgnoreItemSkillCache+954: 33 F6                    - xor esi,esi
Game.GAME::Item::SetIgnoreItemSkillCache+956: 0F 29 74 24 20           - movaps [rsp+20],xmm6
Game.GAME::Item::SetIgnoreItemSkillCache+95B: F3 0F 10 35 39 7D 43 00  - movss xmm6,[Game.GAME::WeaponArmor_Offhand::`vftable'+F14]
Game.GAME::Item::SetIgnoreItemSkillCache+963: 8B 43 78                 - mov eax,[rbx+78]
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>51</ID>
          <Description>"multiplier"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>C08000</Color>
          <VariableType>Float</VariableType>
          <Address>vf_exp_multi</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>40</ID>
      <Description>"Bypass Ingredient Check on Transmute"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : grim dawn.exe
  Version: 
  Date   : 2023-06-26
  Author :
}

[ENABLE]

aobscanmodule(INJECT_TRANS1,grim dawn.exe,0F 84 D6 00 00 00 48 8B 47) // should be unique
aobscanmodule(INJECT_TRANS2,grim dawn.exe,48 8B 5C 24 38 66 C7 87 C1) // should be unique
alloc(newmem,$1000,INJECT_TRANS1)

label(code)
label(return)

newmem:
  jmp INJECT_TRANS2
code:

  //je "grim dawn.exe"+17D305
  jmp return

INJECT_TRANS1:
  jmp newmem
  nop
return:
registersymbol(INJECT_TRANS1)

[DISABLE]

INJECT_TRANS1:
  db 0F 84 D6 00 00 00

unregistersymbol(INJECT_TRANS1)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: grim dawn.exe+17D229

grim dawn.exe+17D208: 74 11                 - je "grim dawn.exe"+17D21B
grim dawn.exe+17D20A: 48 3B CE              - cmp rcx,rsi
grim dawn.exe+17D20D: 74 0E                 - je "grim dawn.exe"+17D21D
grim dawn.exe+17D20F: 48 8B D6              - mov rdx,rsi
grim dawn.exe+17D212: E8 89 60 0E 00        - call "grim dawn.exe"+2632A0
grim dawn.exe+17D217: 84 C0                 - test al,al
grim dawn.exe+17D219: 75 02                 - jne "grim dawn.exe"+17D21D
grim dawn.exe+17D21B: 33 DB                 - xor ebx,ebx
grim dawn.exe+17D21D: 80 BF 70 27 00 00 00  - cmp byte ptr [rdi+00002770],00
grim dawn.exe+17D224: 48 8B 74 24 30        - mov rsi,[rsp+30]
// ---------- INJECTING HERE ----------
grim dawn.exe+17D229: 0F 84 D6 00 00 00     - je "grim dawn.exe"+17D305
// ---------- DONE INJECTING  ----------
grim dawn.exe+17D22F: 48 8B 47 60           - mov rax,[rdi+60]
grim dawn.exe+17D233: 48 8D 4F 60           - lea rcx,[rdi+60]
grim dawn.exe+17D237: FF 90 A0 00 00 00     - call qword ptr [rax+000000A0]
grim dawn.exe+17D23D: 84 C0                 - test al,al
grim dawn.exe+17D23F: 0F 84 C0 00 00 00     - je "grim dawn.exe"+17D305
grim dawn.exe+17D245: 48 8D 8F 98 02 00 00  - lea rcx,[rdi+00000298]
grim dawn.exe+17D24C: 48 8B 01              - mov rax,[rcx]
grim dawn.exe+17D24F: FF 90 A0 00 00 00     - call qword ptr [rax+000000A0]
grim dawn.exe+17D255: 84 C0                 - test al,al
grim dawn.exe+17D257: 0F 84 A8 00 00 00     - je "grim dawn.exe"+17D305
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>61</ID>
          <Description>"Not fully tested -- may not working"</Description>
          <Color>8000FF</Color>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>52</ID>
      <Description>"Shattered Realm: stop timer"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : grim dawn.exe
  Version: 
  Date   : 2023-07-30
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_Shattered_timer_LOCK,Game.dll,2B C2 89 81 6C 01 00 00) // should be unique
alloc(newmem,$1000,INJECT_Shattered_timer_LOCK)

label(code)
label(return)

newmem:

code:
  //sub eax,edx

  //sub with zero and set flags
  sub eax, 0
  mov [rcx+0000016C],eax
  jmp return

INJECT_Shattered_timer_LOCK:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_Shattered_timer_LOCK)

[DISABLE]

INJECT_Shattered_timer_LOCK:
  db 2B C2 89 81 6C 01 00 00

unregistersymbol(INJECT_Shattered_timer_LOCK)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Game.GAME::PlayStats::UpdateBonusTimer+13

Game.GAME::PlayStats::IsSurvivalScoreLocked+C: CC                    - int 3 
Game.GAME::PlayStats::IsSurvivalScoreLocked+D: CC                    - int 3 
Game.GAME::PlayStats::IsSurvivalScoreLocked+E: CC                    - int 3 
Game.GAME::PlayStats::IsSurvivalScoreLocked+F: CC                    - int 3 
Game.GAME::PlayStats::UpdateBonusTimer: 40 53                 - push rbx
Game.GAME::PlayStats::UpdateBonusTimer+2: 48 83 EC 20           - sub rsp,20
Game.GAME::PlayStats::UpdateBonusTimer+6: 8B 81 6C 01 00 00     - mov eax,[rcx+0000016C]
Game.GAME::PlayStats::UpdateBonusTimer+C: 48 8B D9              - mov rbx,rcx
Game.GAME::PlayStats::UpdateBonusTimer+F: 85 C0                 - test eax,eax
Game.GAME::PlayStats::UpdateBonusTimer+11: 7E 7C                 - jle Game.GAME::PlayStats::UpdateBonusTimer+8F
// ---------- INJECTING HERE ----------
Game.GAME::PlayStats::UpdateBonusTimer+13: 2B C2                 - sub eax,edx
// ---------- DONE INJECTING  ----------
Game.GAME::PlayStats::UpdateBonusTimer+15: 89 81 6C 01 00 00     - mov [rcx+0000016C],eax
Game.GAME::PlayStats::UpdateBonusTimer+1B: 0F B6 89 70 01 00 00  - movzx ecx,byte ptr [rcx+00000170]
Game.GAME::PlayStats::UpdateBonusTimer+22: 84 C9                 - test cl,cl
Game.GAME::PlayStats::UpdateBonusTimer+24: 74 14                 - je Game.GAME::PlayStats::UpdateBonusTimer+3A
Game.GAME::PlayStats::UpdateBonusTimer+26: 3D 10 27 00 00        - cmp eax,00002710
Game.GAME::PlayStats::UpdateBonusTimer+2B: 7C 09                 - jl Game.GAME::PlayStats::UpdateBonusTimer+36
Game.GAME::PlayStats::UpdateBonusTimer+2D: C6 83 70 01 00 00 00  - mov byte ptr [rbx+00000170],00
Game.GAME::PlayStats::UpdateBonusTimer+34: EB 39                 - jmp Game.GAME::PlayStats::UpdateBonusTimer+6F
Game.GAME::PlayStats::UpdateBonusTimer+36: 84 C9                 - test cl,cl
Game.GAME::PlayStats::UpdateBonusTimer+38: 75 35                 - jne Game.GAME::PlayStats::UpdateBonusTimer+6F
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>57</ID>
      <Description>"Inventory: set item min. count"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : grim dawn.exe
  Version: 
  Date   : 2023-07-30
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

//aobscanmodule(INJECT_SET_ITEM_CNT,Game.dll,ERROR: Could not find unique AOB, tried code "8B 87 34 01 00 00") // should be unique
aobscanregion(INJECT_SET_ITEM_CNT,"Game.GAME::Item::SetSoulbound"+39D,"Game.GAME::Item::SetSoulbound"+40E,8B 87 34 01 00 00) // should be unique
alloc(newmem,$1000,INJECT_SET_ITEM_CNT)

label(code)
label(return)
label(i_target_item_cnt)

newmem:
  // safety check
  mov eax,[rdi+0000012C]
  test eax, eax
  jnz code
  mov eax,[rdi+00000130]
  test eax, eax
  jnz code
  mov eax,[rdi+00000138]
  test eax, eax
  jnz code

  // check number
  mov eax,[rdi+00000134]
  cmp eax, [i_min_item_cnt]
  jb code
  cmp eax, [i_target_item_cnt]
  jae code
  mov eax, [i_target_item_cnt]
  mov [rdi+00000134], eax

code:
  mov eax,[rdi+00000134]
  jmp return
align 10 cc
  i_min_item_cnt:
  dd 2
  i_target_item_cnt:
  dd 50


INJECT_SET_ITEM_CNT:
  jmp newmem
  nop
return:
registersymbol(INJECT_SET_ITEM_CNT)
registersymbol(i_target_item_cnt)

[DISABLE]

INJECT_SET_ITEM_CNT:
  db 8B 87 34 01 00 00

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Game.GAME::Item::SetSoulbound+3E2

Game.GAME::Item::SetSoulbound+3A6: 45 33 C0                 - xor r8d,r8d
Game.GAME::Item::SetSoulbound+3A9: E8 02 B3 F6 FF           - call Game.GAME::FilterFunction&lt;GAME::CharacterAction&gt;::operator=+620
Game.GAME::Item::SetSoulbound+3AE: 8B 87 20 01 00 00        - mov eax,[rdi+00000120]
Game.GAME::Item::SetSoulbound+3B4: 89 83 20 01 00 00        - mov [rbx+00000120],eax
Game.GAME::Item::SetSoulbound+3BA: F2 0F 10 87 24 01 00 00  - movsd xmm0,[rdi+00000124]
Game.GAME::Item::SetSoulbound+3C2: F2 0F 11 83 24 01 00 00  - movsd [rbx+00000124],xmm0
Game.GAME::Item::SetSoulbound+3CA: 8B 87 2C 01 00 00        - mov eax,[rdi+0000012C]
Game.GAME::Item::SetSoulbound+3D0: 89 83 2C 01 00 00        - mov [rbx+0000012C],eax
Game.GAME::Item::SetSoulbound+3D6: 8B 87 30 01 00 00        - mov eax,[rdi+00000130]
Game.GAME::Item::SetSoulbound+3DC: 89 83 30 01 00 00        - mov [rbx+00000130],eax
// ---------- INJECTING HERE ----------
Game.GAME::Item::SetSoulbound+3E2: 8B 87 34 01 00 00        - mov eax,[rdi+00000134]
// ---------- DONE INJECTING  ----------
Game.GAME::Item::SetSoulbound+3E8: 89 83 34 01 00 00        - mov [rbx+00000134],eax
Game.GAME::Item::SetSoulbound+3EE: 8B 87 38 01 00 00        - mov eax,[rdi+00000138]
Game.GAME::Item::SetSoulbound+3F4: 89 83 38 01 00 00        - mov [rbx+00000138],eax
Game.GAME::Item::SetSoulbound+3FA: 8B 87 3C 01 00 00        - mov eax,[rdi+0000013C]
Game.GAME::Item::SetSoulbound+400: 89 83 3C 01 00 00        - mov [rbx+0000013C],eax
Game.GAME::Item::SetSoulbound+406: 48 8B C3                 - mov rax,rbx
Game.GAME::Item::SetSoulbound+409: 48 8B 5C 24 30           - mov rbx,[rsp+30]
Game.GAME::Item::SetSoulbound+40E: 48 83 C4 20              - add rsp,20
Game.GAME::Item::SetSoulbound+412: 5F                       - pop rdi
Game.GAME::Item::SetSoulbound+413: C3                       - ret 
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>58</ID>
          <Description>"Requirement: Item count must &gt;= 2"</Description>
          <Color>8000FF</Color>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>59</ID>
          <Description>"Notice: Sell and buy back to reflect changes"</Description>
          <Color>8000FF</Color>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>60</ID>
          <Description>"Target count"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>C08000</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_target_item_cnt</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>62</ID>
      <Description>"Grim Dawn v1.1.9.8 (x64)  /  https://opencheattables.com  /  CE 7.5+"</Description>
      <Color>00A452</Color>
      <GroupHeader>1</GroupHeader>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
