<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="29">
  <CheatEntries>
    <CheatEntry>
      <ID>12</ID>
      <Description>"Always full Health and Mana"</Description>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : TheBardsTaleTrilogy.exe
  Version: 
  Date   : 2019-11-03
  Author : Ich

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(checker,GameAssembly.dll,83 B9 84 00 00 00 00 0F 94) // should be unique
alloc(newmem,$1000,"GameAssembly.dll"+1F20D0)

label(code)
label(return)

newmem:
  push eax

  mov eax,[rcx+80]         // load full health
  mov [rcx+84], eax        // write it to current health

  mov eax,[rcx+88]         // load full mana
  mov [rcx+8c], eax        // write it to current mana

  pop eax
code:
  cmp dword ptr [rcx+00000084],00
  jmp return

checker:
  jmp newmem
  nop 2
return:
registersymbol(checker)

[DISABLE]

checker:
  db 83 B9 84 00 00 00 00

unregistersymbol(checker)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "GameAssembly.dll"+1F20D0

"GameAssembly.dll"+1F20C6: CC                             -  int 3 
"GameAssembly.dll"+1F20C7: CC                             -  int 3 
"GameAssembly.dll"+1F20C8: CC                             -  int 3 
"GameAssembly.dll"+1F20C9: CC                             -  int 3 
"GameAssembly.dll"+1F20CA: CC                             -  int 3 
"GameAssembly.dll"+1F20CB: CC                             -  int 3 
"GameAssembly.dll"+1F20CC: CC                             -  int 3 
"GameAssembly.dll"+1F20CD: CC                             -  int 3 
"GameAssembly.dll"+1F20CE: CC                             -  int 3 
"GameAssembly.dll"+1F20CF: CC                             -  int 3 
// ---------- INJECTING HERE ----------
"GameAssembly.dll"+1F20D0: 83 B9 84 00 00 00 00           -  cmp dword ptr [rcx+00000084],00
// ---------- DONE INJECTING  ----------
"GameAssembly.dll"+1F20D7: 0F 94 C0                       -  sete al
"GameAssembly.dll"+1F20DA: C3                             -  ret 
"GameAssembly.dll"+1F20DB: CC                             -  int 3 
"GameAssembly.dll"+1F20DC: CC                             -  int 3 
"GameAssembly.dll"+1F20DD: CC                             -  int 3 
"GameAssembly.dll"+1F20DE: CC                             -  int 3 
"GameAssembly.dll"+1F20DF: CC                             -  int 3 
"GameAssembly.dll"+1F20E0: 0F B6 41 22                    -  movzx eax,byte ptr [rcx+22]
"GameAssembly.dll"+1F20E4: C3                             -  ret 
"GameAssembly.dll"+1F20E5: CC                             -  int 3 
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>15</ID>
      <Description>"Always get 10.000 gold when looting"</Description>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : TheBardsTaleTrilogy.exe
  Version: 
  Date   : 2019-11-03
  Author : Ich

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(getmoregold,GameAssembly.dll,48 8B 57 68 48 03 D6) // should be unique
alloc(newmem,$1000,"GameAssembly.dll"+201AA7)

label(code)
label(return)

newmem:
  mov rsi,#10000
code:
  mov rdx,[rdi+68]
  add rdx,rsi
  jmp return

getmoregold:
  jmp newmem
  nop 2
return:
registersymbol(getmoregold)

[DISABLE]

getmoregold:
  db 48 8B 57 68 48 03 D6

unregistersymbol(getmoregold)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "GameAssembly.dll"+201AA7

"GameAssembly.dll"+201A81: 74 0E                 -  je GameAssembly.dll+201A91
"GameAssembly.dll"+201A83: 83 B9 D8 00 00 00 00  -  cmp dword ptr [rcx+000000D8],00
"GameAssembly.dll"+201A8A: 75 05                 -  jne GameAssembly.dll+201A91
"GameAssembly.dll"+201A8C: E8 3F EC E5 FF        -  call GameAssembly.dll+606D0
"GameAssembly.dll"+201A91: 33 C9                 -  xor ecx,ecx
"GameAssembly.dll"+201A93: E8 88 4A 04 00        -  call GameAssembly.dll+246520
"GameAssembly.dll"+201A98: 48 85 C0              -  test rax,rax
"GameAssembly.dll"+201A9B: 0F 84 E5 00 00 00     -  je GameAssembly.dll+201B86
"GameAssembly.dll"+201AA1: 80 78 18 00           -  cmp byte ptr [rax+18],00
"GameAssembly.dll"+201AA5: 75 6E                 -  jne GameAssembly.dll+201B15
// ---------- INJECTING HERE ----------
"GameAssembly.dll"+201AA7: 48 8B 57 68           -  mov rdx,[rdi+68]
"GameAssembly.dll"+201AAB: 48 03 D6              -  add rdx,rsi
// ---------- DONE INJECTING  ----------
"GameAssembly.dll"+201AAE: 48 89 57 68           -  mov [rdi+68],rdx
"GameAssembly.dll"+201AB2: 48 8B 05 6F FA C3 00  -  mov rax,[GameAssembly.dll+E41528]
"GameAssembly.dll"+201AB9: 48 8B 88 B8 00 00 00  -  mov rcx,[rax+000000B8]
"GameAssembly.dll"+201AC0: 48 8B 09              -  mov rcx,[rcx]
"GameAssembly.dll"+201AC3: 48 85 C9              -  test rcx,rcx
"GameAssembly.dll"+201AC6: 0F 84 BA 00 00 00     -  je GameAssembly.dll+201B86
"GameAssembly.dll"+201ACC: 45 33 C0              -  xor r8d,r8d
"GameAssembly.dll"+201ACF: E8 DC 4E FD FF        -  call GameAssembly.dll+1D69B0
"GameAssembly.dll"+201AD4: 48 8B 05 CD F3 C3 00  -  mov rax,[GameAssembly.dll+E40EA8]
"GameAssembly.dll"+201ADB: 48 8B 88 B8 00 00 00  -  mov rcx,[rax+000000B8]
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>54</ID>
      <Description>"Editor for currently "opened" Character"</Description>
      <LastState Value="0" RealAddress="1C64B3A3DD0"/>
      <VariableType>Binary</VariableType>
      <BitStart>0</BitStart>
      <BitLength>1</BitLength>
      <ShowAsBinary>0</ShowAsBinary>
      <Address>"GameAssembly.dll"+00E464E0</Address>
      <Offsets>
        <Offset>0</Offset>
        <Offset>18</Offset>
        <Offset>0</Offset>
        <Offset>B8</Offset>
      </Offsets>
      <CheatEntries>
        <CheatEntry>
          <ID>22</ID>
          <Description>"Experience"</Description>
          <LastState Value="1015" RealAddress="1C64B3A3E20"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+50</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>23</ID>
          <Description>"Strength"</Description>
          <LastState Value="12" RealAddress="1C64B3A3E28"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+58</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>24</ID>
          <Description>"Intelligence"</Description>
          <LastState Value="9" RealAddress="1C64B3A3E2C"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+5c</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>25</ID>
          <Description>"Dexterity"</Description>
          <LastState Value="14" RealAddress="1C64B3A3E30"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+60</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>26</ID>
          <Description>"Constitution"</Description>
          <LastState Value="10" RealAddress="1C64B3A3E34"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+64</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>27</ID>
          <Description>"Luck"</Description>
          <LastState Value="6" RealAddress="1C64B3A3E38"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+68</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>28</ID>
          <Description>"Level"</Description>
          <LastState Value="2" RealAddress="1C64B3A3E4C"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+7c</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>29</ID>
          <Description>"Hitpoints (max)"</Description>
          <LastState Value="30" RealAddress="1C64B3A3E50"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+80</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>30</ID>
          <Description>"Hitpoints (current)"</Description>
          <LastState Value="30" RealAddress="1C64B3A3E54"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+84</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>31</ID>
          <Description>"Mana (max)"</Description>
          <LastState Value="0" RealAddress="1C64B3A3E58"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+88</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>32</ID>
          <Description>"Mana (current)"</Description>
          <LastState Value="0" RealAddress="1C64B3A3E5C"/>
          <VariableType>4 Bytes</VariableType>
          <Address>+8c</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>55</ID>
      <Description>"Backup Pointer 1"</Description>
      <LastState Value="0" RealAddress="1C64B3A3DD0"/>
      <VariableType>Binary</VariableType>
      <BitStart>0</BitStart>
      <BitLength>1</BitLength>
      <ShowAsBinary>0</ShowAsBinary>
      <Address>"GameAssembly.dll"+00E45CA8</Address>
      <Offsets>
        <Offset>0</Offset>
        <Offset>18</Offset>
        <Offset>20</Offset>
        <Offset>B8</Offset>
      </Offsets>
    </CheatEntry>
    <CheatEntry>
      <ID>56</ID>
      <Description>"Backup Pointer 2"</Description>
      <LastState Value="0" RealAddress="1C64B3A3DD0"/>
      <VariableType>Binary</VariableType>
      <BitStart>0</BitStart>
      <BitLength>1</BitLength>
      <ShowAsBinary>0</ShowAsBinary>
      <Address>"GameAssembly.dll"+00E46048</Address>
      <Offsets>
        <Offset>0</Offset>
        <Offset>18</Offset>
        <Offset>10</Offset>
        <Offset>B8</Offset>
      </Offsets>
    </CheatEntry>
    <CheatEntry>
      <ID>57</ID>
      <Description>"Backup Pointer 3"</Description>
      <LastState Value="0" RealAddress="1C64B3A3DD0"/>
      <VariableType>Binary</VariableType>
      <BitStart>0</BitStart>
      <BitLength>1</BitLength>
      <ShowAsBinary>0</ShowAsBinary>
      <Address>"GameAssembly.dll"+00E2ABF8</Address>
      <Offsets>
        <Offset>0</Offset>
        <Offset>18</Offset>
        <Offset>0</Offset>
        <Offset>B8</Offset>
        <Offset>340</Offset>
      </Offsets>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
