<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="46">
  <CheatEntries>
    <CheatEntry>
      <ID>1</ID>
      <Description>"ENABLE ALL CHEATS"</Description>
      <Options moActivateChildrenAsWell="1"/>
      <GroupHeader>1</GroupHeader>
      <Address/>
      <CheatEntries>
        <CheatEntry>
          <ID>0</ID>
          <Description>"INFINITE STAMINA"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Grimshire.exe
  Version: 
  Date   : 2026-04-17
  Author : egkla

  This script does blah blah blah
}

[ENABLE]

aobscan(INFINITE_STAMINA,89 87 88 03 00 00 48 63) // should be unique
alloc(newmem,$1000,INFINITE_STAMINA)

label(code)
label(return)

newmem:

code:
  mov [rdi+00000388],(int)100
  //mov [rdi+00000388],eax
  jmp return

INFINITE_STAMINA:
  jmp newmem
  nop
return:
registersymbol(INFINITE_STAMINA)

[DISABLE]

INFINITE_STAMINA:
  db 89 87 88 03 00 00

unregistersymbol(INFINITE_STAMINA)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: PlayerController:AdjustStamina+6c

PlayerController:AdjustStamina+43: 85 C0                          - test eax,eax
PlayerController:AdjustStamina+45: 74 1C                          - je PlayerController:AdjustStamina+63
PlayerController:AdjustStamina+47: 33 C9                          - xor ecx,ecx
PlayerController:AdjustStamina+49: BA 14 00 00 00                 - mov edx,00000014
PlayerController:AdjustStamina+4e: 49 BB 19 F3 43 31 31 02 00 00  - mov r11,000002313143F319
PlayerController:AdjustStamina+58: 41 FF D3                       - call r11
PlayerController:AdjustStamina+5b: 85 C0                          - test eax,eax
PlayerController:AdjustStamina+5d: 0F 84 78 00 00 00              - je PlayerController:AdjustStamina+db
PlayerController:AdjustStamina+63: 48 63 87 88 03 00 00           - movsxd  rax,dword ptr [rdi+00000388]
PlayerController:AdjustStamina+6a: 03 C6                          - add eax,esi
// ---------- INJECTING HERE ----------
PlayerController:AdjustStamina+6c: 89 87 88 03 00 00              - mov [rdi+00000388],eax
// ---------- DONE INJECTING  ----------
PlayerController:AdjustStamina+72: 48 63 87 88 03 00 00           - movsxd  rax,dword ptr [rdi+00000388]
PlayerController:AdjustStamina+79: 85 C0                          - test eax,eax
PlayerController:AdjustStamina+7b: 7F 0A                          - jg PlayerController:AdjustStamina+87
PlayerController:AdjustStamina+7d: C7 87 88 03 00 00 00 00 00 00  - mov [rdi+00000388],00000000
PlayerController:AdjustStamina+87: 48 63 87 88 03 00 00           - movsxd  rax,dword ptr [rdi+00000388]
PlayerController:AdjustStamina+8e: 48 63 8F 84 03 00 00           - movsxd  rcx,dword ptr [rdi+00000384]
PlayerController:AdjustStamina+95: 3B C1                          - cmp eax,ecx
PlayerController:AdjustStamina+97: 7E 0D                          - jle PlayerController:AdjustStamina+a6
PlayerController:AdjustStamina+99: 48 63 87 84 03 00 00           - movsxd  rax,dword ptr [rdi+00000384]
PlayerController:AdjustStamina+a0: 89 87 88 03 00 00              - mov [rdi+00000388],eax
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4</ID>
          <Description>"FREEZE TIME AT 9AM"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Grimshire.exe
  Version: 
  Date   : 2026-04-18
  Author : egkla

  This script does blah blah blah
}

[ENABLE]

aobscan(FREEZE_TIME,F3 0F 11 68 1C 48 8B 75) // should be unique
alloc(newmem,$1000,FREEZE_TIME)

label(code)
label(return)

newmem:
  mov [rax+1C],(float)540.0
  jmp return


code:
  //movss [rax+1C],xmm5
  jmp return

FREEZE_TIME:
  jmp newmem
return:
registersymbol(FREEZE_TIME)

[DISABLE]

FREEZE_TIME:
  db F3 0F 11 68 1C

unregistersymbol(FREEZE_TIME)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 1C2A2453F77

1C2A2453F4B: 48 8B 46 28              - mov rax,[rsi+28]
1C2A2453F4F: F3 0F 10 05 39 00 00 00  - movss xmm0,[1C2A2453F90]
1C2A2453F57: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
1C2A2453F5B: F2 0F 5A E8              - cvtsd2ss xmm5,xmm0
1C2A2453F5F: F3 0F 11 68 1C           - movss [rax+1C],xmm5
1C2A2453F64: EB 16                    - jmp 1C2A2453F7C
1C2A2453F66: 48 8B 46 28              - mov rax,[rsi+28]
1C2A2453F6A: F3 0F 10 45 E8           - movss xmm0,[rbp-18]
1C2A2453F6F: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
1C2A2453F73: F2 0F 5A E8              - cvtsd2ss xmm5,xmm0
// ---------- INJECTING HERE ----------
1C2A2453F77: F3 0F 11 68 1C           - movss [rax+1C],xmm5
// ---------- DONE INJECTING  ----------
1C2A2453F7C: 48 8B 75 F8              - mov rsi,[rbp-08]
1C2A2453F80: 48 8D 65 00              - lea rsp,[rbp+00]
1C2A2453F84: 5D                       - pop rbp
1C2A2453F85: C3                       - ret 
1C2A2453F86: 00 00                    - add [rax],al
1C2A2453F88: 3F                       - db 3F
1C2A2453F89: 00 00                    - add [rax],al
1C2A2453F8B: 00 FF                    - add bh,bh
1C2A2453F8D: FF                       - db -01
1C2A2453F8E: FF                       - db -01
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>6</ID>
          <Description>"INFINITE_COINS"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Grimshire.exe
  Version: 
  Date   : 2026-04-18
  Author : egkla

  This script does blah blah blah
}

[ENABLE]

aobscan(INFINITE_COINS,89 46 10 48 63 46 10 85) // should be unique
alloc(newmem,$1000,INFINITE_COINS)

label(code)
label(return)

newmem:
  mov eax,3E7
  mov [rsi+10],eax
  jmp return

code:
  jmp return

INFINITE_COINS:
  jmp newmem
  nop 2
return:
registersymbol(INFINITE_COINS)

[DISABLE]

INFINITE_COINS:
  db 89 46 10 48 63 46 10

unregistersymbol(INFINITE_COINS)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 1559B95500D

1559B954FEE: 00 00                          - add [rax],al
1559B954FF0: 55                             - push rbp
1559B954FF1: 48 8B EC                       - mov rbp,rsp
1559B954FF4: 48 83 EC 70                    - sub rsp,70
1559B954FF8: 48 89 75 F8                    - mov [rbp-08],rsi
1559B954FFC: 48 8B F1                       - mov rsi,rcx
1559B954FFF: 48 89 55 C0                    - mov [rbp-40],rdx
1559B955003: 48 63 46 10                    - movsxd  rax,dword ptr [rsi+10]
1559B955007: 48 63 4D C0                    - movsxd  rcx,dword ptr [rbp-40]
1559B95500B: 03 C1                          - add eax,ecx
// ---------- INJECTING HERE ----------
1559B95500D: 89 46 10                       - mov [rsi+10],eax
// ---------- DONE INJECTING  ----------
1559B955010: 48 63 46 10                    - movsxd  rax,dword ptr [rsi+10]
1559B955014: 85 C0                          - test eax,eax
1559B955016: 7D 07                          - jnl 1559B95501F
1559B955018: C7 46 10 00 00 00 00           - mov [rsi+10],00000000
1559B95501F: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
1559B955026: 49 BB 70 53 95 9B 55 01 00 00  - mov r11,000001559B955370
1559B955030: 41 FF D3                       - call r11
1559B955033: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
1559B955037: F3 0F 10 0D 61 02 00 00        - movss xmm1,[1559B9552A0]
1559B95503F: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
}
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <CheatCodes>
    <CodeEntry>
      <Description>Change of mov [rdi+00000388],eax</Description>
      <AddressString>1FA8924421C</AddressString>
      <Before>
        <Byte>03</Byte>
        <Byte>00</Byte>
        <Byte>00</Byte>
        <Byte>03</Byte>
        <Byte>C6</Byte>
      </Before>
      <Actual>
        <Byte>89</Byte>
        <Byte>87</Byte>
        <Byte>88</Byte>
        <Byte>03</Byte>
        <Byte>00</Byte>
        <Byte>00</Byte>
      </Actual>
      <After>
        <Byte>48</Byte>
        <Byte>63</Byte>
        <Byte>87</Byte>
        <Byte>88</Byte>
        <Byte>03</Byte>
      </After>
    </CodeEntry>
  </CheatCodes>
  <UserdefinedSymbols/>
  <Comments>Instructions:

Infinite stamina:
1. Use a little bit of stamina before activating cheat.
2. Activate cheat.
3. Use more stamina. Stamina will then return to 100 and stay there.

Freeze Time at 9am:
1. Activate the cheat while game is unpaused. 
2. Wait 5 seconds
3. Time will change to 9am and be frozen.
4. Disable cheat to advance time as needed for story events or you can end the day by going to sleep.

Infinite Coins:
1. Activate cheat.
2. Either buy something from a merchant (that you currently have enough coins for) or sell them something.
3. Coins will change to 999 and never decrease.
</Comments>
  <LuaScript>-- Wait 1 second (1000ms) for the UI to settle, then open comments
local t = createTimer()
t.Interval = 1000
t.OnTimer = function(timer)
  timer.destroy() -- Only run this once
  getMainForm().CommentButton.doClick()
end
</LuaScript>
</CheatTable>
