<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="51">
  <CheatEntries>
    <CheatEntry>
      <ID>114982</ID>
      <Description>"&lt;=== Attach to process  and activate mono [Graveyard Keeper 1.407, Steam]"</Description>
      <Options moDeactivateChildrenAsWell="1"/>
      <Color>0000FF</Color>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
  if(getCEVersion() &lt; 7.4) then
    ShowMessage('Warning! CE version should be 7.4 or above')
  end

OpenProcess("Graveyard Keeper.exe")
  if(process == nil) then
    ShowMessage('The process is NOT found!')
  end

LaunchMonoDataCollector()
{$asm}


[DISABLE]

</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>373041</ID>
          <Description>"Item-Cheats - choose exactly ONE of these two"</Description>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>373030</ID>
              <Description>"used items are not being decreased (e.g. Stone repair sets)"</Description>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>define(address,Item:RemoveItemNoCheck+a13 )
define(bytes,41 2B CE)

[ENABLE]
assert(address,bytes)
address:
  nop 3
return:

[DISABLE]

address:
  db bytes
  // sub ecx,r14d

dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Item:RemoveItemNoCheck+a13

Item:RemoveItemNoCheck+9db: 48 89 85 68 FF FF FF           - mov [rbp-00000098],rax
Item:RemoveItemNoCheck+9e2: 48 85 C0                       - test rax,rax
Item:RemoveItemNoCheck+9e5: 0F 84 75 01 00 00              - je Item:RemoveItemNoCheck+b60
Item:RemoveItemNoCheck+9eb: 48 8B 85 68 FF FF FF           - mov rax,[rbp-00000098]
Item:RemoveItemNoCheck+9f2: 48 63 80 90 00 00 00           - movsxd  rax,dword ptr [rax+00000090]
Item:RemoveItemNoCheck+9f9: 41 3B C6                       - cmp eax,r14d
Item:RemoveItemNoCheck+9fc: 0F 8E 99 00 00 00              - jng Item:RemoveItemNoCheck+a9b
Item:RemoveItemNoCheck+a02: 41 03 DE                       - add ebx,r14d
Item:RemoveItemNoCheck+a05: 48 8B 85 68 FF FF FF           - mov rax,[rbp-00000098]
Item:RemoveItemNoCheck+a0c: 48 63 88 90 00 00 00           - movsxd  rcx,dword ptr [rax+00000090]
// ---------- INJECTING HERE ----------
Item:RemoveItemNoCheck+a13: 41 2B CE                       - sub ecx,r14d
// ---------- DONE INJECTING  ----------
Item:RemoveItemNoCheck+a16: 89 88 90 00 00 00              - mov [rax+00000090],ecx
Item:RemoveItemNoCheck+a1c: 48 8B 45 30                    - mov rax,[rbp+30]
Item:RemoveItemNoCheck+a20: 48 85 C0                       - test rax,rax
Item:RemoveItemNoCheck+a23: 0F 84 6A 00 00 00              - je Item:RemoveItemNoCheck+a93
Item:RemoveItemNoCheck+a29: 48 8B 85 68 FF FF FF           - mov rax,[rbp-00000098]
Item:RemoveItemNoCheck+a30: 48 8B 40 10                    - mov rax,[rax+10]
Item:RemoveItemNoCheck+a34: 48 89 85 B0 FE FF FF           - mov [rbp-00000150],rax
Item:RemoveItemNoCheck+a3b: 48 B9 18 59 8B 3F D9 01 00 00  - mov rcx,000001D93F8B5918
Item:RemoveItemNoCheck+a45: 90                             - nop 
Item:RemoveItemNoCheck+a46: 49 BB 10 10 3C EA D6 01 00 00  - mov r11,System.Object:__icall_wrapper_ves_icall_object_new_specific
}
</AssemblerScript>
            </CheatEntry>
            <CheatEntry>
              <ID>373031</ID>
              <Description>"used items are being INCreased (e.g. Stone repair sets)"</Description>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>define(address,Item:RemoveItemNoCheck+a13 )
define(bytes,41 2B CE)

[ENABLE]
assert(address,bytes)
address:
  add ecx,r14d
return:

[DISABLE]

address:
  db bytes
  // sub ecx,r14d

dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Item:RemoveItemNoCheck+a13

Item:RemoveItemNoCheck+9db: 48 89 85 68 FF FF FF           - mov [rbp-00000098],rax
Item:RemoveItemNoCheck+9e2: 48 85 C0                       - test rax,rax
Item:RemoveItemNoCheck+9e5: 0F 84 75 01 00 00              - je Item:RemoveItemNoCheck+b60
Item:RemoveItemNoCheck+9eb: 48 8B 85 68 FF FF FF           - mov rax,[rbp-00000098]
Item:RemoveItemNoCheck+9f2: 48 63 80 90 00 00 00           - movsxd  rax,dword ptr [rax+00000090]
Item:RemoveItemNoCheck+9f9: 41 3B C6                       - cmp eax,r14d
Item:RemoveItemNoCheck+9fc: 0F 8E 99 00 00 00              - jng Item:RemoveItemNoCheck+a9b
Item:RemoveItemNoCheck+a02: 41 03 DE                       - add ebx,r14d
Item:RemoveItemNoCheck+a05: 48 8B 85 68 FF FF FF           - mov rax,[rbp-00000098]
Item:RemoveItemNoCheck+a0c: 48 63 88 90 00 00 00           - movsxd  rcx,dword ptr [rax+00000090]
// ---------- INJECTING HERE ----------
Item:RemoveItemNoCheck+a13: 41 2B CE                       - sub ecx,r14d
// ---------- DONE INJECTING  ----------
Item:RemoveItemNoCheck+a16: 89 88 90 00 00 00              - mov [rax+00000090],ecx
Item:RemoveItemNoCheck+a1c: 48 8B 45 30                    - mov rax,[rbp+30]
Item:RemoveItemNoCheck+a20: 48 85 C0                       - test rax,rax
Item:RemoveItemNoCheck+a23: 0F 84 6A 00 00 00              - je Item:RemoveItemNoCheck+a93
Item:RemoveItemNoCheck+a29: 48 8B 85 68 FF FF FF           - mov rax,[rbp-00000098]
Item:RemoveItemNoCheck+a30: 48 8B 40 10                    - mov rax,[rax+10]
Item:RemoveItemNoCheck+a34: 48 89 85 B0 FE FF FF           - mov [rbp-00000150],rax
Item:RemoveItemNoCheck+a3b: 48 B9 18 59 8B 3F D9 01 00 00  - mov rcx,000001D93F8B5918
Item:RemoveItemNoCheck+a45: 90                             - nop 
Item:RemoveItemNoCheck+a46: 49 BB 10 10 3C EA D6 01 00 00  - mov r11,System.Object:__icall_wrapper_ves_icall_object_new_specific
}
</AssemblerScript>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>373037</ID>
          <Description>"Invulnerability + unlimited energy"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(address,WorldGameObject:IsPlayerInvulnerable)
define(bytes,55 48 8B EC 48 83 EC 30)

[ENABLE]
assert(address,bytes)
address:
  mov eax,1
  ret

[DISABLE]

address:
  db bytes
  // push rbp
  // mov rbp,rsp
  // sub rsp,30

dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: WorldGameObject:IsPlayerInvulnerable

1D9AAFAAD8C: D8 01                          - fadd dword ptr [rcx]
1D9AAFAAD8E: 00 00                          - add [rax],al
1D9AAFAAD90: 00 00                          - add [rax],al
1D9AAFAAD92: 00 00                          - add [rax],al
1D9AAFAAD94: 00 00                          - add [rax],al
1D9AAFAAD96: 00 00                          - add [rax],al
1D9AAFAAD98: 00 00                          - add [rax],al
1D9AAFAAD9A: 00 00                          - add [rax],al
1D9AAFAAD9C: 00 00                          - add [rax],al
1D9AAFAAD9E: 00 00                          - add [rax],al
// ---------- INJECTING HERE ----------
WorldGameObject:IsPlayerInvulnerable: 55                             - push rbp
// ---------- DONE INJECTING  ----------
WorldGameObject:IsPlayerInvulnerable+1: 48 8B EC                       - mov rbp,rsp
WorldGameObject:IsPlayerInvulnerable+4: 48 83 EC 30                    - sub rsp,30
WorldGameObject:IsPlayerInvulnerable+8: 48 89 4D F8                    - mov [rbp-08],rcx
WorldGameObject:IsPlayerInvulnerable+c: 48 8B C1                       - mov rax,rcx
WorldGameObject:IsPlayerInvulnerable+f: 0F B6 80 81 01 00 00           - movzx eax,byte ptr [rax+00000181]
WorldGameObject:IsPlayerInvulnerable+16: 85 C0                          - test eax,eax
WorldGameObject:IsPlayerInvulnerable+18: 74 3E                          - je WorldGameObject:IsPlayerInvulnerable+58
WorldGameObject:IsPlayerInvulnerable+1a: 48 B8 20 3D 45 EA D6 01 00 00  - mov rax,000001D6EA453D20
WorldGameObject:IsPlayerInvulnerable+24: 48 8B 00                       - mov rax,[rax]
WorldGameObject:IsPlayerInvulnerable+27: 48 8B 40 30                    - mov rax,[rax+30]
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>373040</ID>
          <Description>"don't spend money at dealer"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(address,Trading:DoAcceptOffer+16c )
define(bytes,F3 0F 11 68 28)

[ENABLE]
assert(address,bytes)
address:
  nop 5
return:

[DISABLE]
address:
  db bytes
  // movss [rax+28],xmm5


{
// ORIGINAL CODE - INJECTION POINT: Trading:DoAcceptOffer+16c

Trading:DoAcceptOffer+13a: 83 38 00                 - cmp dword ptr [rax],00
Trading:DoAcceptOffer+13d: 48 8B 40 48              - mov rax,[rax+48]
Trading:DoAcceptOffer+141: F3 0F 10 85 78 FF FF FF  - movss xmm0,[rbp-00000088]
Trading:DoAcceptOffer+149: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
Trading:DoAcceptOffer+14d: F2 0F 5A E8              - cvtsd2ss xmm5,xmm0
Trading:DoAcceptOffer+151: F3 0F 11 AD 78 FF FF FF  - movss [rbp-00000088],xmm5
Trading:DoAcceptOffer+159: 83 38 00                 - cmp dword ptr [rax],00
Trading:DoAcceptOffer+15c: F3 0F 10 85 78 FF FF FF  - movss xmm0,[rbp-00000088]
Trading:DoAcceptOffer+164: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
Trading:DoAcceptOffer+168: F2 0F 5A E8              - cvtsd2ss xmm5,xmm0
// ---------- INJECTING HERE ----------
Trading:DoAcceptOffer+16c: F3 0F 11 68 28           - movss [rax+28],xmm5
// ---------- DONE INJECTING  ----------
Trading:DoAcceptOffer+171: F3 0F 10 85 7C FF FF FF  - movss xmm0,[rbp-00000084]
Trading:DoAcceptOffer+179: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
Trading:DoAcceptOffer+17d: 66 0F 57 C9              - xorpd xmm1,xmm1
Trading:DoAcceptOffer+181: 66 0F 2F C8              - comisd xmm1,xmm0
Trading:DoAcceptOffer+185: 0F 8A 35 00 00 00        - jp Trading:DoAcceptOffer+1c0
Trading:DoAcceptOffer+18b: 0F 83 2F 00 00 00        - jae Trading:DoAcceptOffer+1c0
Trading:DoAcceptOffer+191: F3 0F 10 85 7C FF FF FF  - movss xmm0,[rbp-00000084]
Trading:DoAcceptOffer+199: F3 0F 5A C0              - cvtss2sd xmm0,xmm0
Trading:DoAcceptOffer+19d: 48 8B 47 10              - mov rax,[rdi+10]
Trading:DoAcceptOffer+1a1: 48 8B 50 10              - mov rdx,[rax+10]
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>373049</ID>
          <Description>"don't spend skill points when learning new skills"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(address,GameSave:BuyTech+98 )
define(bytes,41 FF D3)
define(address2,GameSave:BuyTech+25 )
define(bytes2,75 07)


[ENABLE]
assert(address,bytes)
assert(address2,bytes2)

address:
  nop 3

address2:
  db EB 07 // jmp instead of JNE
[DISABLE]

address:
  db bytes
  // call r11

address2:
  db bytes2

dealloc(newmem)

{
GameSave:BuyTech+16 - 49 BB A0021AADD9010000 - mov r11,GameSave:CanBuyTech
GameSave:BuyTech+20 - 41 FF D3              - call r11
GameSave:BuyTech+23 - 85 C0                 - test eax,eax
// ---------- INJECTING HERE ----------
GameSave:BuyTech+25 - 75 07                 - jne GameSave:BuyTech+2e
// ---------- DONE INJECTING  ----------
GameSave:BuyTech+27 - 33 C0                 - xor eax,eax
GameSave:BuyTech+29 - E9 8A000000           - jmp GameSave:BuyTech+b8
GameSave:BuyTech+2e - 49 BB 60E0F747D9010000 - mov r11,GameBalance:get_me
GameSave:BuyTech+38 - 41 FF D3              - call r11
GameSave:BuyTech+3b - 48 8B C8              - mov rcx,rax
GameSave:BuyTech+3e - 83 39 00              - cmp dword ptr [rcx],00

// ORIGINAL CODE - INJECTION POINT: GameSave:BuyTech+98

GameSave:BuyTech+6c: 48 8B 40 30                    - mov rax,[rax+30]
GameSave:BuyTech+70: 48 8B C8                       - mov rcx,rax
GameSave:BuyTech+73: 83 39 00                       - cmp dword ptr [rcx],00
GameSave:BuyTech+76: 48 8B 80 98 00 00 00           - mov rax,[rax+00000098]
GameSave:BuyTech+7d: 48 8B 4D E8                    - mov rcx,[rbp-18]
GameSave:BuyTech+81: 48 8B 51 18                    - mov rdx,[rcx+18]
GameSave:BuyTech+85: 48 8B C8                       - mov rcx,rax
GameSave:BuyTech+88: 83 38 00                       - cmp dword ptr [rax],00
GameSave:BuyTech+8b: 66 66 90                       - nop 3
GameSave:BuyTech+8e: 49 BB 00 B8 5C B6 D9 01 00 00  - mov r11,Item:SubFromParams
// ---------- INJECTING HERE ----------
GameSave:BuyTech+98: 41 FF D3                       - call r11
// ---------- DONE INJECTING  ----------
GameSave:BuyTech+9b: 48 8B CF                       - mov rcx,rdi
GameSave:BuyTech+9e: 48 8B D6                       - mov rdx,rsi
GameSave:BuyTech+a1: 48 8D 64 24 00                 - lea rsp,[rsp+00]
GameSave:BuyTech+a6: 49 BB 50 99 1F AD D9 01 00 00  - mov r11,GameSave:UnlockTech
GameSave:BuyTech+b0: 41 FF D3                       - call r11
GameSave:BuyTech+b3: B8 01 00 00 00                 - mov eax,00000001
GameSave:BuyTech+b8: 48 8B 75 F0                    - mov rsi,[rbp-10]
GameSave:BuyTech+bc: 48 8B 7D F8                    - mov rdi,[rbp-08]
GameSave:BuyTech+c0: 48 8D 65 00                    - lea rsp,[rbp+00]
GameSave:BuyTech+c4: 5D                             - pop rbp
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>373051</ID>
          <Description>"durability of Tools do not change"</Description>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(address,Item:set_durability )
define(bytes,55)

[ENABLE]
assert(address,bytes)
address:
  ret

[DISABLE]

address:
  db bytes

dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Item:set_durability

// ---------- INJECTING HERE ----------
Item:set_durability: 55              - push rbp
// ---------- DONE INJECTING  ----------
Item:set_durability+1: 48 8B EC        - mov rbp,rsp
Item:set_durability+4: 48 83 EC 40     - sub rsp,40
Item:set_durability+8: 48 89 4D F0     - mov [rbp-10],rcx
Item:set_durability+c: F3 0F 11 4D E8  - movss [rbp-18],xmm1
Item:set_durability+11: 48 8B C1        - mov rax,rcx
Item:set_durability+14: 48 8B 40 48     - mov rax,[rax+48]
Item:set_durability+18: 48 89 45 E0     - mov [rbp-20],rax
Item:set_durability+1c: F3 0F 10 45 E8  - movss xmm0,[rbp-18]
Item:set_durability+21: F3 0F 5A C0     - cvtss2sd xmm0,xmm0
Item:set_durability+25: F2 0F 5A C0     - cvtsd2ss xmm0,xmm0
}
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>373046</ID>
      <Description>"Debug + Hints"</Description>
      <Options moHideChildren="1"/>
      <Color>C0C0C0</Color>
      <GroupHeader>1</GroupHeader>
      <CheatEntries>
        <CheatEntry>
          <ID>373036</ID>
          <Description>"don't spend money when... dunno."</Description>
          <Color>C0C0C0</Color>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>define(address,Stats:PlayerDecMoney)
define(bytes,55)

[ENABLE]
assert(address,bytes)
address:
  db C3 // ret

[DISABLE]
address:
  db bytes
  // push rbp


{
// ORIGINAL CODE - INJECTION POINT: Stats:PlayerDecMoney

1D9B65C19C9: 04 02              - add al,02
1D9B65C19CB: 05 04 03 01 50     - add eax,50010304
1D9B65C19D0: 00 00              - add [rax],al
1D9B65C19D2: 00 00              - add [rax],al
1D9B65C19D4: 00 00              - add [rax],al
1D9B65C19D6: 00 00              - add [rax],al
1D9B65C19D8: 00 00              - add [rax],al
1D9B65C19DA: 00 00              - add [rax],al
1D9B65C19DC: 00 00              - add [rax],al
1D9B65C19DE: 00 00              - add [rax],al
// ---------- INJECTING HERE ----------
Stats:PlayerDecMoney: 55                 - push rbp
// ---------- DONE INJECTING  ----------
Stats:PlayerDecMoney+1: 48 8B EC           - mov rbp,rsp
Stats:PlayerDecMoney+4: 48 83 EC 30        - sub rsp,30
Stats:PlayerDecMoney+8: F3 0F 11 45 F8     - movss [rbp-08],xmm0
Stats:PlayerDecMoney+d: 48 89 55 F0        - mov [rbp-10],rdx
Stats:PlayerDecMoney+11: F3 0F 10 45 F8     - movss xmm0,[rbp-08]
Stats:PlayerDecMoney+16: F3 0F 5A C0        - cvtss2sd xmm0,xmm0
Stats:PlayerDecMoney+1a: 66 0F 57 C9        - xorpd xmm1,xmm1
Stats:PlayerDecMoney+1e: 66 0F 2F C8        - comisd xmm1,xmm0
Stats:PlayerDecMoney+22: 0F 82 53 00 00 00  - jb Stats:PlayerDecMoney+7b
Stats:PlayerDecMoney+28: 48 8B CD           - mov rcx,rbp
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>373047</ID>
          <Description>"Points to spend for skills are stored ad float Values"</Description>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>373048</ID>
          <Description>"money: is a float. 11,23 = 11 silver and 23 Copper.  Just set higher to get Gold :)"</Description>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
