<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="34">
  <CheatEntries>
    <CheatEntry>
      <ID>1607</ID>
      <Description>"Activate"</Description>
      <Options moHideChildren="1"/>
      <LastState Activated="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
local gameName = "Fable Anniversary"
local gameProcess = "Fable Anniversary"
if getProcessIDFromProcessName(gameProcess) ~= nil then
   if readInteger(process) == nil then
      openProcess(gameProcess)
   else
       if readInteger(process) ~= readInteger(gameProcess) then
          openProcess(gameProcess)
       end
   end
else
    beep() error(showMessage(string.format("%s is not running.",gameName)))
end
if syntaxcheck then return end

[DISABLE]
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>4</ID>
          <Description>"hero stats"</Description>
          <Options moHideChildren="1"/>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>"Fable Anniversary.exe"+0322FD00</Address>
          <Offsets>
            <Offset>0</Offset>
            <Offset>14</Offset>
            <Offset>44</Offset>
            <Offset>6C</Offset>
          </Offsets>
          <CheatEntries>
            <CheatEntry>
              <ID>3</ID>
              <Description>"hero mana"</Description>
              <VariableType>4 Bytes</VariableType>
              <Address>"Fable Anniversary.exe"+0322FD00</Address>
              <Offsets>
                <Offset>60</Offset>
                <Offset>14</Offset>
                <Offset>44</Offset>
                <Offset>6C</Offset>
              </Offsets>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>0</ID>
          <Description>"hero object"</Description>
          <Options moHideChildren="1"/>
          <VariableType>4 Bytes</VariableType>
          <Address>"Fable Anniversary.exe"+0322FD00</Address>
          <Offsets>
            <Offset>0</Offset>
            <Offset>44</Offset>
            <Offset>6C</Offset>
          </Offsets>
          <CheatEntries>
            <CheatEntry>
              <ID>1</ID>
              <Description>"hero stat address (look at value)"</Description>
              <ShowAsHex>1</ShowAsHex>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>"Fable Anniversary.exe"+0322FD00</Address>
              <Offsets>
                <Offset>14</Offset>
                <Offset>44</Offset>
                <Offset>6C</Offset>
              </Offsets>
            </CheatEntry>
            <CheatEntry>
              <ID>5</ID>
              <Description>"hero experience address"</Description>
              <ShowAsHex>1</ShowAsHex>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>"Fable Anniversary.exe"+0322FD00</Address>
              <Offsets>
                <Offset>13c</Offset>
                <Offset>44</Offset>
                <Offset>6C</Offset>
              </Offsets>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>2</ID>
          <Description>"hero experience"</Description>
          <Options moHideChildren="1"/>
          <VariableType>4 Bytes</VariableType>
          <Address>"Fable Anniversary.exe"+0322FD00</Address>
          <Offsets>
            <Offset>0</Offset>
            <Offset>13C</Offset>
            <Offset>44</Offset>
            <Offset>6C</Offset>
          </Offsets>
          <CheatEntries>
            <CheatEntry>
              <ID>6</ID>
              <Description>"hero general experience"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>4 Bytes</VariableType>
              <Address>"Fable Anniversary.exe"+0322FD00</Address>
              <Offsets>
                <Offset>14</Offset>
                <Offset>13C</Offset>
                <Offset>44</Offset>
                <Offset>6C</Offset>
              </Offsets>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>614</ID>
          <Description>"infinite berserk "</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Fable Anniversary.exe
  Version: 
  Date   : 2022-02-05
  Author : nbarr

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(INJECT,Fable Anniversary.exe,FF 4E 0C EB 0F) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
cmp [esi+76],00
je code
nop
nop
nop
jmp return

code:
  dec [esi+0C]
  jmp "Fable Anniversary.exe"+193DE28
  jmp return

INJECT:
  jmp newmem
return:
registersymbol(INJECT)

[DISABLE]

INJECT:
  db FF 4E 0C EB 0F

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Fable Anniversary.exe+193DE14

Fable Anniversary.exe+193DDF3: F3 0F 11 04 24  - movss [esp],xmm0
Fable Anniversary.exe+193DDF8: E8 13 42 06 00  - call "Fable Anniversary.exe"+19A2010
Fable Anniversary.exe+193DDFD: 80 7E 74 00     - cmp byte ptr [esi+74],00
Fable Anniversary.exe+193DE01: 74 0B           - je "Fable Anniversary.exe"+193DE0E
Fable Anniversary.exe+193DE03: 8B 46 6C        - mov eax,[esi+6C]
Fable Anniversary.exe+193DE06: 8B 4E 0C        - mov ecx,[esi+0C]
Fable Anniversary.exe+193DE09: 3B 48 44        - cmp ecx,[eax+44]
Fable Anniversary.exe+193DE0C: 7D 1A           - jnl "Fable Anniversary.exe"+193DE28
Fable Anniversary.exe+193DE0E: 80 7E 76 00     - cmp byte ptr [esi+76],00
Fable Anniversary.exe+193DE12: 75 05           - jne "Fable Anniversary.exe"+193DE19
// ---------- INJECTING HERE ----------
Fable Anniversary.exe+193DE14: FF 4E 0C        - dec [esi+0C]
// ---------- DONE INJECTING  ----------
Fable Anniversary.exe+193DE17: EB 0F           - jmp "Fable Anniversary.exe"+193DE28
Fable Anniversary.exe+193DE19: 8B 4E 6C        - mov ecx,[esi+6C]
Fable Anniversary.exe+193DE1C: 8B 46 0C        - mov eax,[esi+0C]
Fable Anniversary.exe+193DE1F: 3B 41 44        - cmp eax,[ecx+44]
Fable Anniversary.exe+193DE22: 7C 04           - jl "Fable Anniversary.exe"+193DE28
Fable Anniversary.exe+193DE24: 48              - dec eax
Fable Anniversary.exe+193DE25: 89 46 0C        - mov [esi+0C],eax
Fable Anniversary.exe+193DE28: 8B CB           - mov ecx,ebx
Fable Anniversary.exe+193DE2A: E8 11 D6 1E 00  - call "Fable Anniversary.exe"+1B2B440
Fable Anniversary.exe+193DE2F: F3 0F 10 00     - movss xmm0,[eax]
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>617</ID>
          <Description>"damage multiplier and defense multiplier"</Description>
          <Options moHideChildren="1"/>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Fable Anniversary.exe
  Version: 
  Date   : 2022-02-06
  Author : nbarr

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(INJECT,Fable Anniversary.exe,F3 0F 58 C1 F3 0F 11 86 D0 00 00 00) // should be unique
alloc(newmem,$1000)
alloc(multiplier,4)
alloc(divider,4)


label(code)
label(return)

divider:
dd (float)1

registersymbol(divider)

multiplier:
dd (float)1

registersymbol(multiplier)

newmem:
  cmp [esi+cc],(float)150
  jne code
  divss xmm1,dword ptr[divider]
  addss xmm0,xmm1
  movss [esi+000000D0],xmm0
  jmp return


code:
  mulss xmm1, dword ptr[multiplier]
  addss xmm0,xmm1
  movss [esi+000000D0],xmm0
  jmp return


INJECT:
  jmp newmem
  nop 7
return:
registersymbol(INJECT)

[DISABLE]

INJECT:
  db F3 0F 58 C1 F3 0F 11 86 D0 00 00 00

unregistersymbol(divider)
unregistersymbol(multiplier)
unregistersymbol(INJECT)
dealloc(newmem)
dealloc(divider)
dealloc(multiplier)

{
// ORIGINAL CODE - INJECTION POINT: Fable Anniversary.exe+1B59D20

Fable Anniversary.exe+1B59CEB: 75 0D                    - jne "Fable Anniversary.exe"+1B59CFA
Fable Anniversary.exe+1B59CED: 80 3D 2B B8 54 03 00     - cmp byte ptr ["Fable Anniversary.exe"+31BB82B],00
Fable Anniversary.exe+1B59CF4: 0F 85 0C 03 00 00        - jne "Fable Anniversary.exe"+1B5A006
Fable Anniversary.exe+1B59CFA: 3C 01                    - cmp al,01
Fable Anniversary.exe+1B59CFC: 75 0D                    - jne "Fable Anniversary.exe"+1B59D0B
Fable Anniversary.exe+1B59CFE: 80 3D 2C B8 54 03 00     - cmp byte ptr ["Fable Anniversary.exe"+31BB82C],00
Fable Anniversary.exe+1B59D05: 0F 85 FB 02 00 00        - jne "Fable Anniversary.exe"+1B5A006
Fable Anniversary.exe+1B59D0B: F6 86 D8 00 00 00 01     - test byte ptr [esi+000000D8],01
Fable Anniversary.exe+1B59D12: 0F 84 EE 02 00 00        - je "Fable Anniversary.exe"+1B5A006
Fable Anniversary.exe+1B59D18: F3 0F 10 86 D0 00 00 00  - movss xmm0,[esi+000000D0]
// ---------- INJECTING HERE ----------
Fable Anniversary.exe+1B59D20: F3 0F 58 C1              - addss xmm0,xmm1
// ---------- DONE INJECTING  ----------
Fable Anniversary.exe+1B59D24: F3 0F 11 86 D0 00 00 00  - movss [esi+000000D0],xmm0
Fable Anniversary.exe+1B59D2C: 80 3D 2B B8 54 03 00     - cmp byte ptr ["Fable Anniversary.exe"+31BB82B],00
Fable Anniversary.exe+1B59D33: 0F 84 0A 01 00 00        - je "Fable Anniversary.exe"+1B59E43
Fable Anniversary.exe+1B59D39: 8A 46 10                 - mov al,[esi+10]
Fable Anniversary.exe+1B59D3C: 3C 02                    - cmp al,02
Fable Anniversary.exe+1B59D3E: 74 04                    - je "Fable Anniversary.exe"+1B59D44
Fable Anniversary.exe+1B59D40: 3C 01                    - cmp al,01
Fable Anniversary.exe+1B59D42: 75 0C                    - jne "Fable Anniversary.exe"+1B59D50
Fable Anniversary.exe+1B59D44: F3 0F 5C C1              - subss xmm0,xmm1
Fable Anniversary.exe+1B59D48: F3 0F 11 86 D0 00 00 00  - movss [esi+000000D0],xmm0
}
</AssemblerScript>
          <CheatEntries>
            <CheatEntry>
              <ID>618</ID>
              <Description>"damage multiplier (effects enemies)"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>Float</VariableType>
              <Address>multiplier</Address>
            </CheatEntry>
            <CheatEntry>
              <ID>619</ID>
              <Description>"defense multiplier (effects you)"</Description>
              <ShowAsSigned>0</ShowAsSigned>
              <VariableType>Float</VariableType>
              <Address>divider</Address>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>620</ID>
          <Description>"infinite mana"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Fable Anniversary.exe
  Version: 
  Date   : 2022-02-08
  Author : nbarr

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(INJECT,Fable Anniversary.exe,01 46 60 83 65 F4 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  push ecx
  mov ecx,[esi+64]
  mov [esi+60],ecx
  pop ecx
  and dword ptr [ebp-0C],00
  jmp return
code:
  {add [esi+60],eax
  and dword ptr [ebp-0C],00
  jmp return}

INJECT:
  jmp newmem
  nop 2
return:
registersymbol(INJECT)

[DISABLE]

INJECT:
  db 01 46 60 83 65 F4 00

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Fable Anniversary.exe+19D123F

Fable Anniversary.exe+19D121D: 8B 3D 50 5B 3A 03  - mov edi,["Fable Anniversary.exe"+3015B50]
Fable Anniversary.exe+19D1223: E8 E8 DD 1C 00     - call "Fable Anniversary.exe"+1B9F010
Fable Anniversary.exe+19D1228: 99                 - cdq 
Fable Anniversary.exe+19D1229: F7 FF              - idiv edi
Fable Anniversary.exe+19D122B: 85 D2              - test edx,edx
Fable Anniversary.exe+19D122D: 75 13              - jne "Fable Anniversary.exe"+19D1242
Fable Anniversary.exe+19D122F: 8B CE              - mov ecx,esi
Fable Anniversary.exe+19D1231: E8 AA 66 F6 FF     - call "Fable Anniversary.exe"+19378E0
Fable Anniversary.exe+19D1236: 8B 80 00 01 00 00  - mov eax,[eax+00000100]
Fable Anniversary.exe+19D123C: 8B 40 50           - mov eax,[eax+50]
// ---------- INJECTING HERE ----------
Fable Anniversary.exe+19D123F: 01 46 60           - add [esi+60],eax
// ---------- DONE INJECTING  ----------
Fable Anniversary.exe+19D1242: 83 65 F4 00        - and dword ptr [ebp-0C],00
Fable Anniversary.exe+19D1246: 8D 46 64           - lea eax,[esi+64]
Fable Anniversary.exe+19D1249: 50                 - push eax
Fable Anniversary.exe+19D124A: 8D 45 F4           - lea eax,[ebp-0C]
Fable Anniversary.exe+19D124D: 50                 - push eax
Fable Anniversary.exe+19D124E: 8D 46 60           - lea eax,[esi+60]
Fable Anniversary.exe+19D1251: 50                 - push eax
Fable Anniversary.exe+19D1252: E8 99 9C E1 FF     - call "Fable Anniversary.exe"+17EAEF0
Fable Anniversary.exe+19D1257: 83 C4 0C           - add esp,0C
Fable Anniversary.exe+19D125A: 83 66 68 00        - and dword ptr [esi+68],00
}
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
