<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="52">
  <CheatEntries>
    <CheatEntry>
      <ID>1578</ID>
      <Description>"mana no decrease"</Description>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Fable Anniversary.exe
  Version: 
  Date   : 2024-10-10
  Author : User

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(mana,Fable Anniversary.exe,01 07 8D 46 64) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
//  add [edi],eax
  lea eax,[esi+64]
  jmp return

mana:
  jmp newmem
return:
registersymbol(mana)

[DISABLE]

mana:
  db 01 07 8D 46 64

unregistersymbol(mana)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Fable Anniversary.exe+19CE971

Fable Anniversary.exe+19CE952: 8B 45 08              - mov eax,[ebp+08]
Fable Anniversary.exe+19CE955: 56                    - push esi
Fable Anniversary.exe+19CE956: 8B F1                 - mov esi,ecx
Fable Anniversary.exe+19CE958: 80 BE 84 01 00 00 00  - cmp byte ptr [esi+00000184],00
Fable Anniversary.exe+19CE95F: 74 08                 - je "Fable Anniversary.exe"+19CE969
Fable Anniversary.exe+19CE961: 85 C0                 - test eax,eax
Fable Anniversary.exe+19CE963: 0F 88 84 00 00 00     - js "Fable Anniversary.exe"+19CE9ED
Fable Anniversary.exe+19CE969: 83 65 08 00           - and dword ptr [ebp+08],00
Fable Anniversary.exe+19CE96D: 57                    - push edi
Fable Anniversary.exe+19CE96E: 8D 7E 60              - lea edi,[esi+60]
// ---------- INJECTING HERE ----------
Fable Anniversary.exe+19CE971: 01 07                 - add [edi],eax
// ---------- DONE INJECTING  ----------
Fable Anniversary.exe+19CE973: 8D 46 64              - lea eax,[esi+64]
Fable Anniversary.exe+19CE976: 50                    - push eax
Fable Anniversary.exe+19CE977: 8D 45 08              - lea eax,[ebp+08]
Fable Anniversary.exe+19CE97A: 50                    - push eax
Fable Anniversary.exe+19CE97B: 57                    - push edi
Fable Anniversary.exe+19CE97C: E8 6F C5 E1 FF        - call "Fable Anniversary.exe"+17EAEF0
Fable Anniversary.exe+19CE981: 83 C4 0C              - add esp,0C
Fable Anniversary.exe+19CE984: 8B CE                 - mov ecx,esi
Fable Anniversary.exe+19CE986: E8 55 8F F6 FF        - call "Fable Anniversary.exe"+19378E0
Fable Anniversary.exe+19CE98B: 83 3F 00              - cmp dword ptr [edi],00
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>3656</ID>
      <Description>"fishing no decrease"</Description>
      <Options moAlwaysHideChildren="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
[DISABLE]
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1579</ID>
          <Description>"no let"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Fable Anniversary.exe
  Version:
  Date   : 2024-10-10
  Author : User

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(fishinglet,Fable Anniversary.exe,F3 0F 11 4E 2C F3 0F 11 84) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
//  movss [esi+2C],xmm1
  jmp return

fishinglet:
  jmp newmem
return:
registersymbol(fishinglet)

[DISABLE]

fishinglet:
  db F3 0F 11 4E 2C

unregistersymbol(fishinglet)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Fable Anniversary.exe+198FB84

Fable Anniversary.exe+198FB44: F3 0F 10 4B 18              - movss xmm1,[ebx+18]
Fable Anniversary.exe+198FB49: 66 0F 6E 05 50 5B 4F 03     - movd xmm0,["Fable Anniversary.exe"+3015B50]
Fable Anniversary.exe+198FB51: 0F 5B C0                    - cvtdq2ps xmm0,xmm0
Fable Anniversary.exe+198FB54: F3 0F 5E C8                 - divss xmm1,xmm0
Fable Anniversary.exe+198FB58: F3 0F 10 05 18 30 05 03     - movss xmm0,["Fable Anniversary.exe"+2B73018]
Fable Anniversary.exe+198FB60: F3 0F 58 4E 2C              - addss xmm1,[esi+2C]
Fable Anniversary.exe+198FB65: F3 0F 11 44 24 7C           - movss [esp+7C],xmm0
Fable Anniversary.exe+198FB6B: F3 0F 10 05 74 21 B5 02     - movss xmm0,["Fable Anniversary.exe"+2672174]
Fable Anniversary.exe+198FB73: F3 0F 11 84 24 80 00 00 00  - movss [esp+00000080],xmm0
Fable Anniversary.exe+198FB7C: F3 0F 10 05 00 1B B6 02     - movss xmm0,["Fable Anniversary.exe"+2681B00]
// ---------- INJECTING HERE ----------
Fable Anniversary.exe+198FB84: F3 0F 11 4E 2C              - movss [esi+2C],xmm1
// ---------- DONE INJECTING  ----------
Fable Anniversary.exe+198FB89: F3 0F 11 84 24 84 00 00 00  - movss [esp+00000084],xmm0
Fable Anniversary.exe+198FB92: F3 0F 11 84 24 88 00 00 00  - movss [esp+00000088],xmm0
Fable Anniversary.exe+198FB9B: C6 84 24 8C 00 00 00 00     - mov byte ptr [esp+0000008C],00
Fable Anniversary.exe+198FBA3: E8 38 2B 2C 00              - call "Fable Anniversary.exe"+1C526E0
Fable Anniversary.exe+198FBA8: 83 78 04 00                 - cmp dword ptr [eax+04],00
Fable Anniversary.exe+198FBAC: 74 58                       - je "Fable Anniversary.exe"+198FC06
Fable Anniversary.exe+198FBAE: 8B 40 04                    - mov eax,[eax+04]
Fable Anniversary.exe+198FBB1: 8B 10                       - mov edx,[eax]
Fable Anniversary.exe+198FBB3: 8B 52 08                    - mov edx,[edx+08]
Fable Anniversary.exe+198FBB6: 6A 00                       - push 00
}
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>1580</ID>
          <Description>"no snap"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>{ Game   : Fable Anniversary.exe
  Version: 
  Date   : 2024-10-10
  Author : User

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(fishingsnap,Fable Anniversary.exe,F3 0F 11 46 34 F3 0F 10 46 2C) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
//  movss [esi+34],xmm0
  jmp return

fishingsnap:
  jmp newmem
return:
registersymbol(fishingsnap)

[DISABLE]

fishingsnap:
  db F3 0F 11 46 34

unregistersymbol(fishingsnap)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Fable Anniversary.exe+198F25C

Fable Anniversary.exe+198F235: F3 0F 10 4B 14           - movss xmm1,[ebx+14]
Fable Anniversary.exe+198F23A: 85 C0                    - test eax,eax
Fable Anniversary.exe+198F23C: 74 15                    - je "Fable Anniversary.exe"+198F253
Fable Anniversary.exe+198F23E: F3 0F 10 40 34           - movss xmm0,[eax+34]
Fable Anniversary.exe+198F243: F3 0F 59 05 A4 3F B1 02  - mulss xmm0,["Fable Anniversary.exe"+2693FA4]
Fable Anniversary.exe+198F24B: 0F 2F C8                 - comiss xmm1,xmm0
Fable Anniversary.exe+198F24E: 76 03                    - jna "Fable Anniversary.exe"+198F253
Fable Anniversary.exe+198F250: 0F 28 C8                 - movaps xmm1,xmm0
Fable Anniversary.exe+198F253: F3 0F 10 46 34           - movss xmm0,[esi+34]
Fable Anniversary.exe+198F258: F3 0F 58 C1              - addss xmm0,xmm1
// ---------- INJECTING HERE ----------
Fable Anniversary.exe+198F25C: F3 0F 11 46 34           - movss [esi+34],xmm0
// ---------- DONE INJECTING  ----------
Fable Anniversary.exe+198F261: F3 0F 10 46 2C           - movss xmm0,[esi+2C]
Fable Anniversary.exe+198F266: F3 0F 5C C2              - subss xmm0,xmm2
Fable Anniversary.exe+198F26A: F3 0F 11 46 2C           - movss [esi+2C],xmm0
Fable Anniversary.exe+198F26F: C6 46 24 01              - mov byte ptr [esi+24],01
Fable Anniversary.exe+198F273: E8 98 FD 20 00           - call "Fable Anniversary.exe"+1B9F010
Fable Anniversary.exe+198F278: 5F                       - pop edi
Fable Anniversary.exe+198F279: 5B                       - pop ebx
Fable Anniversary.exe+198F27A: 89 46 28                 - mov [esi+28],eax
Fable Anniversary.exe+198F27D: 5E                       - pop esi
Fable Anniversary.exe+198F27E: 83 C4 08                 - add esp,08
}
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>7</ID>
      <Description>"ohko"</Description>
      <Options moAlwaysHideChildren="1" moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1"/>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{
  Game          : Fable Anniversary.exe
  Version       : 20140922_1454_835964
  Cheat Engine  : 6.4
  Table version : v1.0
  Date          : 2014-09-24
  Author        : Reaper79

  Changes       :

  v0.1          Initial Release for Game Version (20140911_1134_830221)
  v0.2          Bug Fix God Mode
  v0.3          Added One Hit Kill
  v0.4          Added Infinite Skill Points
  v0.5          Fixed/Improved One Hit Kill (hopefully only "player targets" get onehitted)
  v0.6          Silver Keys Temporary Pointer added (till i find the inventory structure pointer)
  v0.7          Fixed / Added Silver-Keys usage
  v0.8          updated to Game Version (20140915_2025_832816)
  v0.9          fixed silver-keys (open chests everywhere, anytime, even in tutorial, even if you own 0 keys)
  v1.0          updated to Game Version (20140922_1454_835964)
                small bugfix in aobscan
}

[ENABLE]

aobscanmodule(aobPlayerPointer,Fable Anniversary.exe,04 7E 02 8B C7 8B 48 04 8B 11) // should be unique
aobscanmodule(aobPlayerHealth,Fable Anniversary.exe,F3 0F 11 86 D0 00 00 00 80 3D) // should be unique

alloc(newmem,2048)

label(codePlayerPointer)
label(retPlayerPointer)
label(pPlayer)
registersymbol(pPlayer)

label(codePlayerHealth)
label(codePlayerHealth2)
label(codePlayerHealth3)
label(retPlayerHealth)

label(iEnableGodMode)
registersymbol(iEnableGodMode)
label(iEnableOneHitKill)
registersymbol(iEnableOneHitKill)

// ========== [CAVE]
newmem:
iEnableGodMode:
  dd 0
iEnableOneHitKill:
  dd 0
pPlayer:
  dd 0

codePlayerPointer:
  mov ecx,[eax+04] // original
  mov [pPlayer],ecx // save pointer to Player
  mov edx,[ecx] // original
  jmp retPlayerPointer

codePlayerHealth:
  push eax
  cmp [iEnableGodMode],0    // is disabled?
  je codePlayerHealth2      // if disabled, jmp original
  mov eax,[pPlayer]         // get player health pointer
  mov eax,[eax+4]
  cmp esi,eax               // is player?
  jne codePlayerHealth2     // if not jmp original
  movss xmm0,[esi+000000CC] // mov (float) max Health to current health

codePlayerHealth2:
  movss [esi+000000D0],xmm0 // original
  cmp [iEnableOneHitKill],0 // is disabled?
  je codePlayerHealth3      // if disabled, jmp original
  mov eax,[pPlayer]         // get player health pointer
  mov eax,[eax+4]
  cmp esi,eax               // is player?
  je codePlayerHealth3     // if jmp original
  cmp eax,ebp              //does player hit the target?
  jne codePlayerHealth3    //if not jmp
  mov [esi+000000D0], (float)-1 // set Health to -1

codePlayerHealth3:
  pop eax
  jmp retPlayerHealth

// ========== [INJECTS]
aobPlayerPointer+05:
  jmp codePlayerPointer
retPlayerPointer:
registersymbol(aobPlayerPointer)

aobPlayerHealth:
  jmp codePlayerHealth
  db 90 90 90
retPlayerHealth:
registersymbol(aobPlayerHealth)

[DISABLE]

aobPlayerPointer+05:
  db 8B 48 04 8B 11

aobPlayerHealth:
  db F3 0F 11 86 D0 00 00 00

unregistersymbol(iEnableGodMode)
unregistersymbol(iEnableOneHitKill)
unregistersymbol(pPlayer)
unregistersymbol(aobPlayerPointer)
unregistersymbol(aobPlayerHealth)

dealloc(newmem)
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>24</ID>
          <Description>"(enable)"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
iEnableOneHitKill:
  dd 1
[DISABLE]
iEnableOneHitKill:
  dd 0
</AssemblerScript>
          <Hotkeys>
            <Hotkey>
              <Action>Toggle Activation</Action>
              <Keys>
                <Key>98</Key>
              </Keys>
              <ID>0</ID>
            </Hotkey>
          </Hotkeys>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <CheatCodes>
    <CodeEntry>
      <Description>Change of movss [esi+2C],xmm1</Description>
      <AddressString>Fable Anniversary.exe+198FB84</AddressString>
      <Before>
        <Byte>05</Byte>
        <Byte>00</Byte>
        <Byte>1B</Byte>
        <Byte>B6</Byte>
        <Byte>02</Byte>
      </Before>
      <Actual>
        <Byte>F3</Byte>
        <Byte>0F</Byte>
        <Byte>11</Byte>
        <Byte>4E</Byte>
        <Byte>2C</Byte>
      </Actual>
      <After>
        <Byte>F3</Byte>
        <Byte>0F</Byte>
        <Byte>11</Byte>
        <Byte>84</Byte>
        <Byte>24</Byte>
      </After>
    </CodeEntry>
    <CodeEntry>
      <Description>Change of add [edi],eax</Description>
      <AddressString>Fable Anniversary.exe+19CE971</AddressString>
      <Before>
        <Byte>00</Byte>
        <Byte>57</Byte>
        <Byte>8D</Byte>
        <Byte>7E</Byte>
        <Byte>60</Byte>
      </Before>
      <Actual>
        <Byte>01</Byte>
        <Byte>07</Byte>
      </Actual>
      <After>
        <Byte>8D</Byte>
        <Byte>46</Byte>
        <Byte>64</Byte>
        <Byte>50</Byte>
        <Byte>8D</Byte>
      </After>
    </CodeEntry>
    <CodeEntry>
      <Description>Change of add [eax+ecx*4],ebp</Description>
      <AddressString>Fable Anniversary.exe+1A050D7</AddressString>
      <Before>
        <Byte>4F</Byte>
        <Byte>0C</Byte>
        <Byte>8B</Byte>
        <Byte>42</Byte>
        <Byte>1C</Byte>
      </Before>
      <Actual>
        <Byte>01</Byte>
        <Byte>2C</Byte>
        <Byte>88</Byte>
      </Actual>
      <After>
        <Byte>80</Byte>
        <Byte>7F</Byte>
        <Byte>65</Byte>
        <Byte>00</Byte>
        <Byte>8D</Byte>
      </After>
    </CodeEntry>
  </CheatCodes>
  <UserdefinedSymbols/>
  <LuaScript>--auto attach
attachlist=getAutoAttachList()
stringlist_add(attachlist,"Fable Anniversary.exe");
--compact view
function cycleFullCompact(sender,force) local state = not(compactmenuitem.Caption == 'Compact View'); if force~=nil then state = not force end; compactmenuitem.Caption = state and 'Compact View' or 'Full View'; getMainForm().Splitter1.Visible = state; getMainForm().Panel4.Visible    = state; getMainForm().Panel5.Visible    = state; end; function addCompactMenu() if compactmenualreadyexists then return end; local parent = getMainForm().Menu.Items; compactmenuitem = createMenuItem(parent); parent.add(compactmenuitem); compactmenuitem.Caption = 'Compact View'; compactmenuitem.OnClick = cycleFullCompact; compactmenualreadyexists = 'yes'; end; addCompactMenu(); cycleFullCompact(nil,true)
</LuaScript>
</CheatTable>
