<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="46">
  <CheatEntries>
    <CheatEntry>
      <ID>76</ID>
      <Description>"True Godmode"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-23
  Author : Apocalypticx

  This script does true godmode
}

[ENABLE]

aobscanmodule(godmode,Baldur.exe,66 29 83 7C 05 00 00) // should be unique
alloc(newmem,$1000,godmode)

label(code)
label(return)
label(skipdamage)

newmem:
pushfq
cmp [rbx+0000058C],'None'
jne skipdamage
popfq

code:
  sub [rbx+0000057C],ax
  jmp return

skipdamage:
popfq
jmp return

godmode:
  jmp newmem
  nop
  nop
return:
registersymbol(godmode)

[DISABLE]

godmode:
  db 66 29 83 7C 05 00 00

unregistersymbol(godmode)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe+1AD813

Baldur.exe+1AD7E4: 48 81 C1 68 17 00 00  - add rcx,00001768
Baldur.exe+1AD7EB: 48 8B D0              - mov rdx,rax
Baldur.exe+1AD7EE: E8 6D 74 05 00        - call Baldur.exe+204C60
Baldur.exe+1AD7F3: 48 8D 4D 0F           - lea rcx,[rbp+0F]
Baldur.exe+1AD7F7: E8 04 F6 24 00        - call Baldur.exe+3FCE00
Baldur.exe+1AD7FC: 48 8D 4D 07           - lea rcx,[rbp+07]
Baldur.exe+1AD800: E8 FB F5 24 00        - call Baldur.exe+3FCE00
Baldur.exe+1AD805: 48 8D 4D DF           - lea rcx,[rbp-21]
Baldur.exe+1AD809: E8 F2 F5 24 00        - call Baldur.exe+3FCE00
Baldur.exe+1AD80E: 41 0F B7 46 1C        - movzx eax,word ptr [r14+1C]
// ---------- INJECTING HERE ----------
Baldur.exe+1AD813: 66 29 83 7C 05 00 00  - sub [rbx+0000057C],ax
// ---------- DONE INJECTING  ----------
Baldur.exe+1AD81A: 41 8B 46 48           - mov eax,[r14+48]
Baldur.exe+1AD81E: BE 00 01 00 00        - mov esi,00000100
Baldur.exe+1AD823: A8 09                 - test al,09
Baldur.exe+1AD825: 0F 85 FB 02 00 00     - jne Baldur.exe+1ADB26
Baldur.exe+1AD82B: A8 12                 - test al,12
Baldur.exe+1AD82D: 0F 84 B0 05 00 00     - je Baldur.exe+1ADDE3
Baldur.exe+1AD833: 0F BF 83 7C 05 00 00  - movsx eax,word ptr [rbx+0000057C]
Baldur.exe+1AD83A: 4C 8D 2D E7 11 3E 00  - lea r13,[Baldur.exe+58EA28]
Baldur.exe+1AD841: 8B 4D 9F              - mov ecx,[rbp-61]
Baldur.exe+1AD844: 2B C8                 - sub ecx,eax
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>15</ID>
      <Description>"One Hit Kill"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-19
  Author : Apocalypticx

  This script does one hit kill
}

[ENABLE]

aobscanmodule(onehitkill,Baldur.exe,0F B7 83 7C 05 00 00 BF) // should be unique
alloc(newmem,$1000,onehitkill)

label(code)
label(return)
label(doonehitkill)

newmem:
pushfq
cmp [rbx+0000058C],'None'
je doonehitkill
popfq

code:
  movzx eax,word ptr [rbx+0000057C]
  jmp return

doonehitkill:
popfq
mov [rbx+0000057C],(int)1
movzx eax,word ptr [rbx+0000057C]
jmp return

onehitkill:
  jmp newmem
  nop
  nop
return:
registersymbol(onehitkill)

[DISABLE]

onehitkill:
  db 0F B7 83 7C 05 00 00

unregistersymbol(onehitkill)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe.text+343BCB

Baldur.exe.text+343BA3: E8 48 8A 00 00        - call Baldur.exe.text+34C5F0
Baldur.exe.text+343BA8: E9 D3 10 00 00        - jmp Baldur.exe.text+344C80
Baldur.exe.text+343BAD: 48 8B 03              - mov rax,[rbx]
Baldur.exe.text+343BB0: 48 8B CB              - mov rcx,rbx
Baldur.exe.text+343BB3: FF 90 10 01 00 00     - call qword ptr [rax+00000110]
Baldur.exe.text+343BB9: 8B 83 B4 4C 00 00     - mov eax,[rbx+00004CB4]
Baldur.exe.text+343BBF: 85 C0                 - test eax,eax
Baldur.exe.text+343BC1: 7E 08                 - jle Baldur.exe.text+343BCB
Baldur.exe.text+343BC3: FF C8                 - dec eax
Baldur.exe.text+343BC5: 89 83 B4 4C 00 00     - mov [rbx+00004CB4],eax
// ---------- INJECTING HERE ----------
Baldur.exe.text+343BCB: 0F B7 83 7C 05 00 00  - movzx eax,word ptr [rbx+0000057C]
// ---------- DONE INJECTING  ----------
Baldur.exe.text+343BD2: BF 80 00 00 00        - mov edi,00000080
Baldur.exe.text+343BD7: 66 39 83 80 52 00 00  - cmp [rbx+00005280],ax
Baldur.exe.text+343BDE: 74 29                 - je Baldur.exe.text+343C09
Baldur.exe.text+343BE0: B9 A0 00 00 00        - mov ecx,000000A0
Baldur.exe.text+343BE5: 89 B3 30 53 00 00     - mov [rbx+00005330],esi
Baldur.exe.text+343BEB: E8 B8 1E 1B 00        - call Baldur.exe.text+4F5AA8
Baldur.exe.text+343BF0: 48 85 C0              - test rax,rax
Baldur.exe.text+343BF3: 74 7B                 - je Baldur.exe.text+343C70
Baldur.exe.text+343BF5: 44 8B 43 48           - mov r8d,[rbx+48]
Baldur.exe.text+343BF9: 48 8B D3              - mov rdx,rbx
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>31</ID>
      <Description>"Party Invis"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-19
  Author : Apocalypticx

  This script does invis party
}

[ENABLE]

aobscanmodule(invis,Baldur.exe,80 BE 73 3F 00 00 00) // should be unique
alloc(newmem,$1000,invis)

label(code)
label(return)
label(DoInvis)

newmem:
pushfq
cmp [rsi+0000058C],'None'
jne DoInvis
popfq

code:
  cmp byte ptr [rsi+00003F73],00
  jmp return

DoInvis:
popfq
mov byte ptr [rsi+00003F73],(byte)1
cmp byte ptr [rsi+00003F73],00
jmp return

invis:
  jmp newmem
  nop
  nop
return:
registersymbol(invis)

[DISABLE]

invis:
  db 80 BE 73 3F 00 00 00

unregistersymbol(invis)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe.text+36AD73

Baldur.exe.text+36AD4B: 32 D2                 - xor dl,dl
Baldur.exe.text+36AD4D: C6 44 24 7C 00        - mov byte ptr [rsp+7C],00
Baldur.exe.text+36AD52: 38 96 72 3F 00 00     - cmp [rsi+00003F72],dl
Baldur.exe.text+36AD58: 74 19                 - je Baldur.exe.text+36AD73
Baldur.exe.text+36AD5A: 83 B9 A4 7E 00 00 00  - cmp dword ptr [rcx+00007EA4],00
Baldur.exe.text+36AD61: 75 10                 - jne Baldur.exe.text+36AD73
Baldur.exe.text+36AD63: 83 B9 5C 7E 00 00 00  - cmp dword ptr [rcx+00007E5C],00
Baldur.exe.text+36AD6A: 75 07                 - jne Baldur.exe.text+36AD73
Baldur.exe.text+36AD6C: C6 44 24 7C B4        - mov byte ptr [rsp+7C],-4C
Baldur.exe.text+36AD71: B2 B4                 - mov dl,-4C
// ---------- INJECTING HERE ----------
Baldur.exe.text+36AD73: 80 BE 73 3F 00 00 00  - cmp byte ptr [rsi+00003F73],00
// ---------- DONE INJECTING  ----------
Baldur.exe.text+36AD7A: 74 4F                 - je Baldur.exe.text+36ADCB
Baldur.exe.text+36AD7C: 48 8B 05 1D 93 2F 00  - mov rax,[1406650A0]
Baldur.exe.text+36AD83: 44 8B 80 A0 0F 00 00  - mov r8d,[rax+00000FA0]
Baldur.exe.text+36AD8A: B8 67 66 66 66        - mov eax,66666667
Baldur.exe.text+36AD8F: 41 F7 E8              - imul r8d
Baldur.exe.text+36AD92: C1 FA 05              - sar edx,05
Baldur.exe.text+36AD95: 8B C2                 - mov eax,edx
Baldur.exe.text+36AD97: C1 E8 1F              - shr eax,1F
Baldur.exe.text+36AD9A: 03 D0                 - add edx,eax
Baldur.exe.text+36AD9C: 8D 04 92              - lea eax,[rdx+rdx*4]
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>23</ID>
      <Description>"Do Haste"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-19
  Author : Apocalypticx

  This script does haste
}

[ENABLE]

aobscanmodule(haste,Baldur.exe,44 0F B6 51 58) // should be unique
alloc(newmem,$1000,haste)

label(code)
label(return)
label(DoHaste)

newmem:
pushfq
cmp [rcx+0000058C],'None'
jne DoHaste
popfq

code:
  movzx r10d,byte ptr [rcx+58]
  jmp return

DoHaste:
popfq
mov byte ptr [rcx+58],(byte)0
movzx r10d,byte ptr [rcx+58]
jmp return

haste:
  jmp newmem
return:
registersymbol(haste)

[DISABLE]

haste:
  db 44 0F B6 51 58

unregistersymbol(haste)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe.text+351B25

Baldur.exe.text+351B0B: 5D                             - pop rbp
Baldur.exe.text+351B0C: C3                             - ret 
Baldur.exe.text+351B0D: CC                             - int 3 
Baldur.exe.text+351B0E: CC                             - int 3 
Baldur.exe.text+351B0F: CC                             - int 3 
Baldur.exe.text+351B10: 41 56                          - push r14
Baldur.exe.text+351B12: 48 83 EC 50                    - sub rsp,50
Baldur.exe.text+351B16: 48 8B 05 FB F9 30 00           - mov rax,[Baldur.exe.data+8518]
Baldur.exe.text+351B1D: 48 33 C4                       - xor rax,rsp
Baldur.exe.text+351B20: 48 89 44 24 38                 - mov [rsp+38],rax
// ---------- INJECTING HERE ----------
Baldur.exe.text+351B25: 44 0F B6 51 58                 - movzx r10d,byte ptr [rcx+58]
// ---------- DONE INJECTING  ----------
Baldur.exe.text+351B2A: 4C 8B F1                       - mov r14,rcx
Baldur.exe.text+351B2D: 44 8B 59 48                    - mov r11d,[rcx+48]
Baldur.exe.text+351B31: 41 8B C2                       - mov eax,r10d
Baldur.exe.text+351B34: 41 8B D3                       - mov edx,r11d
Baldur.exe.text+351B37: C7 81 EC 52 00 00 00 00 00 00  - mov [rcx+000052EC],00000000
Baldur.exe.text+351B41: 41 23 C0                       - and eax,r8d
Baldur.exe.text+351B44: 41 23 D2                       - and edx,r10d
Baldur.exe.text+351B47: 3B C2                          - cmp eax,edx
Baldur.exe.text+351B49: 74 16                          - je Baldur.exe.text+351B61
Baldur.exe.text+351B4B: 32 C0                          - xor al,al
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>37</ID>
      <Description>"Allow Casting"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-20
  Author : Apocalypticx

  This script does allow casting while wearing armour
}

[ENABLE]

aobscanmodule(allowcasting,Baldur.exe,44 8B 86 60 0B 00 00) // should be unique
alloc(newmem,$1000,allowcasting)

label(code)
label(return)

newmem:
mov [rsi+00000B60],(byte)0

code:
  mov r8d,[rsi+00000B60]
  jmp return

allowcasting:
  jmp newmem
  nop 2
return:
registersymbol(allowcasting)

[DISABLE]

allowcasting:
  db 44 8B 86 60 0B 00 00

unregistersymbol(allowcasting)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe.text+14EF35

Baldur.exe.text+14EEF2: 8B 86 4C 0B 00 00     - mov eax,[rsi+00000B4C]
Baldur.exe.text+14EEF8: 41 89 86 4C 0B 00 00  - mov [r14+00000B4C],eax
Baldur.exe.text+14EEFF: 8B 86 50 0B 00 00     - mov eax,[rsi+00000B50]
Baldur.exe.text+14EF05: 41 89 86 50 0B 00 00  - mov [r14+00000B50],eax
Baldur.exe.text+14EF0C: 8B 86 54 0B 00 00     - mov eax,[rsi+00000B54]
Baldur.exe.text+14EF12: 41 89 86 54 0B 00 00  - mov [r14+00000B54],eax
Baldur.exe.text+14EF19: 44 8B 86 58 0B 00 00  - mov r8d,[rsi+00000B58]
Baldur.exe.text+14EF20: 45 89 86 58 0B 00 00  - mov [r14+00000B58],r8d
Baldur.exe.text+14EF27: 44 8B 86 5C 0B 00 00  - mov r8d,[rsi+00000B5C]
Baldur.exe.text+14EF2E: 45 89 86 5C 0B 00 00  - mov [r14+00000B5C],r8d
// ---------- INJECTING HERE ----------
Baldur.exe.text+14EF35: 44 8B 86 60 0B 00 00  - mov r8d,[rsi+00000B60]
// ---------- DONE INJECTING  ----------
Baldur.exe.text+14EF3C: 45 89 86 60 0B 00 00  - mov [r14+00000B60],r8d
Baldur.exe.text+14EF43: 44 8B 86 64 0B 00 00  - mov r8d,[rsi+00000B64]
Baldur.exe.text+14EF4A: 45 89 86 64 0B 00 00  - mov [r14+00000B64],r8d
Baldur.exe.text+14EF51: 44 8B 86 68 0B 00 00  - mov r8d,[rsi+00000B68]
Baldur.exe.text+14EF58: 45 89 86 68 0B 00 00  - mov [r14+00000B68],r8d
Baldur.exe.text+14EF5F: 44 8B 86 6C 0B 00 00  - mov r8d,[rsi+00000B6C]
Baldur.exe.text+14EF66: 45 89 86 6C 0B 00 00  - mov [r14+00000B6C],r8d
Baldur.exe.text+14EF6D: E8 EE D9 FF FF        - call Baldur.exe.text+14C960
Baldur.exe.text+14EF72: 49 8B C6              - mov rax,r14
Baldur.exe.text+14EF75: 48 8B 4C 24 28        - mov rcx,[rsp+28]
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>43</ID>
      <Description>"Instant Cast"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-20
  Author : Apocalypticx

  This script does instant cast
}

[ENABLE]

aobscanmodule(instantcast,Baldur.exe,44 0F B7 81 90 49 00 00) // should be unique
alloc(newmem,$1000,instantcast)

label(code)
label(return)
label(DoInstantCast)

newmem:
pushfq
cmp [rcx+00004C94],0
jne DoInstantCast
popfq

code:
  movzx r8d,word ptr [rcx+00004990]
  jmp return

DoInstantCast:
popfq
mov [rcx+00004990],FF
movzx r8d,word ptr [rcx+00004990]
jmp return

instantcast:
  jmp newmem
  nop
  nop
  nop
return:
registersymbol(instantcast)

[DISABLE]

instantcast:
  db 44 0F B7 81 90 49 00 00

unregistersymbol(instantcast)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe.text+391025

Baldur.exe.text+39100B: C3                       - ret 
Baldur.exe.text+39100C: CC                       - int 3 
Baldur.exe.text+39100D: CC                       - int 3 
Baldur.exe.text+39100E: CC                       - int 3 
Baldur.exe.text+39100F: CC                       - int 3 
Baldur.exe.text+391010: 48 89 6C 24 10           - mov [rsp+10],rbp
Baldur.exe.text+391015: 48 89 74 24 18           - mov [rsp+18],rsi
Baldur.exe.text+39101A: 48 89 7C 24 20           - mov [rsp+20],rdi
Baldur.exe.text+39101F: 41 56                    - push r14
Baldur.exe.text+391021: 48 83 EC 20              - sub rsp,20
// ---------- INJECTING HERE ----------
Baldur.exe.text+391025: 44 0F B7 81 90 49 00 00  - movzx r8d,word ptr [rcx+00004990]
// ---------- DONE INJECTING  ----------
Baldur.exe.text+39102D: 41 BE FF FF FF FF        - mov r14d,FFFFFFFF
Baldur.exe.text+391033: 8B F2                    - mov esi,edx
Baldur.exe.text+391035: 48 8B F9                 - mov rdi,rcx
Baldur.exe.text+391038: 41 B9 20 11 00 00        - mov r9d,00001120
Baldur.exe.text+39103E: 41 BA C8 1D 00 00        - mov r10d,00001DC8
Baldur.exe.text+391044: 66 45 3B C6              - cmp r8w,r14w
Baldur.exe.text+391048: 7E 60                    - jle Baldur.exe.text+3910AA
Baldur.exe.text+39104A: 83 B9 A4 4E 00 00 00     - cmp dword ptr [rcx+00004EA4],00
Baldur.exe.text+391051: 41 8B C1                 - mov eax,r9d
Baldur.exe.text+391054: 41 0F 44 C2              - cmove eax,r10d
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>83</ID>
      <Description>"Infravision"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-25
  Author : Apocalypticx

  This script does infravision on and off
}

[ENABLE]

aobscanmodule(infravision,Baldur.exe,0F 86 B1 01 00 00) // should be unique
alloc(newmem,$1000,infravision)

label(code)
label(return)

newmem:

code:
  jae Baldur.exe+36BC6C
  jmp return

infravision:
  jmp newmem
  nop
return:
registersymbol(infravision)

[DISABLE]

infravision:
  db 0F 86 B1 01 00 00

unregistersymbol(infravision)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe+36BAB5

Baldur.exe+36BA8D: 44 0F B6 46 28        - movzx r8d,byte ptr [rsi+28]
Baldur.exe+36BA92: 89 55 A8              - mov [rbp-58],edx
Baldur.exe+36BA95: 48 8D 55 A4           - lea rdx,[rbp-5C]
Baldur.exe+36BA99: 89 45 A4              - mov [rbp-5C],eax
Baldur.exe+36BA9C: E8 1F 72 E1 FF        - call Baldur.exe+182CC0
Baldur.exe+36BAA1: 48 8B 4E 18           - mov rcx,[rsi+18]
Baldur.exe+36BAA5: 8B D8                 - mov ebx,eax
Baldur.exe+36BAA7: 89 45 88              - mov [rbp-78],eax
Baldur.exe+36BAAA: 89 44 24 78           - mov [rsp+78],eax
Baldur.exe+36BAAE: 80 B9 02 02 00 00 00  - cmp byte ptr [rcx+00000202],00
// ---------- INJECTING HERE ----------
Baldur.exe+36BAB5: 0F 86 B1 01 00 00     - jbe Baldur.exe+36BC6C
// ---------- DONE INJECTING  ----------
Baldur.exe+36BABB: F6 86 48 3C 00 00 01  - test byte ptr [rsi+00003C48],01
Baldur.exe+36BAC2: 74 09                 - je Baldur.exe+36BACD
Baldur.exe+36BAC4: 0F B6 86 4E 3C 00 00  - movzx eax,byte ptr [rsi+00003C4E]
Baldur.exe+36BACB: EB 0D                 - jmp Baldur.exe+36BADA
Baldur.exe+36BACD: 48 8B 8E 40 3C 00 00  - mov rcx,[rsi+00003C40]
Baldur.exe+36BAD4: 48 8B 01              - mov rax,[rcx]
Baldur.exe+36BAD7: FF 50 58              - call qword ptr [rax+58]
Baldur.exe+36BADA: 84 C0                 - test al,al
Baldur.exe+36BADC: 0F 84 8A 01 00 00     - je Baldur.exe+36BC6C
Baldur.exe+36BAE2: 48 8B CE              - mov rcx,rsi
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>78</ID>
      <Description>"Max Spells 20 Player Only"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-25
  Author : Apocalypticx

  This script does max spells
}

[ENABLE]

aobscanmodule(maxspells,Baldur.exe,41 0F B7 84 3E 42 1B 00 00 41) // should be unique
alloc(newmem,$1000,maxspells)

label(code)
label(return)
label(max)

newmem:
pushfq
cmp [rdi+0000058C],'None'
jne max
popfq

code:
  movzx eax,word ptr [r14+rdi+00001B42]
  jmp return

max:
popfq
mov byte ptr [r14+rdi+00001B42],(byte)14
jmp return

maxspells:
  jmp newmem
  nop
  nop
  nop
  nop
return:
registersymbol(maxspells)

[DISABLE]

maxspells:
  db 41 0F B7 84 3E 42 1B 00 00

unregistersymbol(maxspells)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe+38F58D

Baldur.exe+38F562: 76 74                             - jna Baldur.exe+38F5D8
Baldur.exe+38F564: 48 8D 15 B2 AE 25 00              - lea rdx,[Baldur.exe+5EA41D]
Baldur.exe+38F56B: 48 8D 4C 24 28                    - lea rcx,[rsp+28]
Baldur.exe+38F570: E8 0B F9 06 00                    - call Baldur.exe+3FEE80
Baldur.exe+38F575: 41 B9 01 00 00 00                 - mov r9d,00000001
Baldur.exe+38F57B: 4C 8D 44 24 28                    - lea r8,[rsp+28]
Baldur.exe+38F580: 8D 56 01                          - lea edx,[rsi+01]
Baldur.exe+38F583: 48 8B CF                          - mov rcx,rdi
Baldur.exe+38F586: E8 E5 86 FE FF                    - call Baldur.exe+377C70
Baldur.exe+38F58B: EB 4B                             - jmp Baldur.exe+38F5D8
// ---------- INJECTING HERE ----------
Baldur.exe+38F58D: 41 0F B7 84 3E 42 1B 00 00        - movzx eax,word ptr [r14+rdi+00001B42]
// ---------- DONE INJECTING  ----------
Baldur.exe+38F596: 41 8B 1F                          - mov ebx,[r15]
Baldur.exe+38F599: 3B D8                             - cmp ebx,eax
Baldur.exe+38F59B: 7E 3B                             - jle Baldur.exe+38F5D8
Baldur.exe+38F59D: FF CB                             - dec ebx
Baldur.exe+38F59F: FF C8                             - dec eax
Baldur.exe+38F5A1: 3B D8                             - cmp ebx,eax
Baldur.exe+38F5A3: 7E 33                             - jle Baldur.exe+38F5D8
Baldur.exe+38F5A5: 66 66 66 0F 1F 84 00 00 00 00 00  - nop word ptr [rax+rax+00000000]
Baldur.exe+38F5B0: 44 8B C3                          - mov r8d,ebx
Baldur.exe+38F5B3: 8B D6                             - mov edx,esi
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>17</ID>
      <Description>"Edit Gold Amount"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-19
  Author : Apocalypticx

  This script does edit gold
}

[ENABLE]

aobscanmodule(gold,Baldur.exe,39 81 88 79 00 00 40 0F 97) // should be unique
alloc(newmem,$1000,gold)

label(code)
label(return)
label(CurrentGold)

newmem:
push rax
mov rax,[CurrentGold]
mov [rcx+00007988],rax
pop rax

code:
  cmp [rcx+00007988],eax
  jmp return

CurrentGold:
dd 0

gold:
  jmp newmem
  nop
return:
registersymbol(gold)
registersymbol(CurrentGold)

[DISABLE]

gold:
  db 39 81 88 79 00 00

unregistersymbol(CurrentGold)
unregistersymbol(gold)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe.text+15925E

Baldur.exe.text+159222: E9 15 2C 00 00        - jmp Baldur.exe.text+15BE3C
Baldur.exe.text+159227: 48 8B 05 72 AE 50 00  - mov rax,[1406650A0]
Baldur.exe.text+15922E: 48 8B 88 90 10 00 00  - mov rcx,[rax+00001090]
Baldur.exe.text+159235: 8B 85 54 03 00 00     - mov eax,[rbp+00000354]
Baldur.exe.text+15923B: 39 81 88 79 00 00     - cmp [rcx+00007988],eax
Baldur.exe.text+159241: 40 0F 94 C6           - sete sil
Baldur.exe.text+159245: E9 F6 2B 00 00        - jmp Baldur.exe.text+15BE40
Baldur.exe.text+15924A: 48 8B 05 4F AE 50 00  - mov rax,[1406650A0]
Baldur.exe.text+159251: 48 8B 88 90 10 00 00  - mov rcx,[rax+00001090]
Baldur.exe.text+159258: 8B 85 54 03 00 00     - mov eax,[rbp+00000354]
// ---------- INJECTING HERE ----------
Baldur.exe.text+15925E: 39 81 88 79 00 00     - cmp [rcx+00007988],eax
// ---------- DONE INJECTING  ----------
Baldur.exe.text+159264: 40 0F 97 C6           - seta sil
Baldur.exe.text+159268: E9 D3 2B 00 00        - jmp Baldur.exe.text+15BE40
Baldur.exe.text+15926D: 48 8B 05 2C AE 50 00  - mov rax,[1406650A0]
Baldur.exe.text+159274: 48 8B 88 90 10 00 00  - mov rcx,[rax+00001090]
Baldur.exe.text+15927B: 8B 85 54 03 00 00     - mov eax,[rbp+00000354]
Baldur.exe.text+159281: 39 81 88 79 00 00     - cmp [rcx+00007988],eax
Baldur.exe.text+159287: 40 0F 92 C6           - setb sil
Baldur.exe.text+15928B: E9 B0 2B 00 00        - jmp Baldur.exe.text+15BE40
Baldur.exe.text+159290: 4C 8D 85 80 03 00 00  - lea r8,[rbp+00000380]
Baldur.exe.text+159297: 48 8D 15 9A B1 50 00  - lea rdx,[140665438]
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>18</ID>
          <Description>"CurrentGold"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>CurrentGold</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>1</ID>
      <Description>"Stat Points"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-19
  Author : Apocalypticx

  This script does editable stat points
}

[ENABLE]

aobscanmodule(stats,Baldur.exe,89 87 78 07 00 00) // should be unique
alloc(newmem,$1000,stats)

label(code)
label(return)
label(TotalStatPoints)

newmem:
push rax
mov eax,[TotalStatPoints]

code:
  mov [rdi+00000778],eax
  pop rax
  jmp return

TotalStatPoints:
dd 0

stats:
  jmp newmem
  nop
return:

registersymbol(stats)
registersymbol(TotalStatPoints)

[DISABLE]

stats:
  db 89 87 78 07 00 00

unregistersymbol(TotalStatPoints)
unregistersymbol(stats)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe.text+2B6C6D

Baldur.exe.text+2B6C50: FE C0                 - inc al
Baldur.exe.text+2B6C52: 41 88 06              - mov [r14],al
Baldur.exe.text+2B6C55: 41 8D 47 FF           - lea eax,[r15-01]
Baldur.exe.text+2B6C59: EB 12                 - jmp Baldur.exe.text+2B6C6D
Baldur.exe.text+2B6C5B: 41 0F B6 06           - movzx eax,byte ptr [r14]
Baldur.exe.text+2B6C5F: 40 3A C6              - cmp al,sil
Baldur.exe.text+2B6C62: 76 0F                 - jna Baldur.exe.text+2B6C73
Baldur.exe.text+2B6C64: FE C8                 - dec al
Baldur.exe.text+2B6C66: 41 88 06              - mov [r14],al
Baldur.exe.text+2B6C69: 41 8D 47 01           - lea eax,[r15+01]
// ---------- INJECTING HERE ----------
Baldur.exe.text+2B6C6D: 89 87 78 07 00 00     - mov [rdi+00000778],eax
// ---------- DONE INJECTING  ----------
Baldur.exe.text+2B6C73: 48 8B 0D D6 D7 3A 00  - mov rcx,[140665450]
Baldur.exe.text+2B6C7A: 48 8D 15 6F AF 2E 00  - lea rdx,[Baldur.exe.rdata+19BF0]
Baldur.exe.text+2B6C81: E8 4A E1 E1 FF        - call Baldur.exe.text+D4DD0
Baldur.exe.text+2B6C86: 48 8B 0D C3 D7 3A 00  - mov rcx,[140665450]
Baldur.exe.text+2B6C8D: 33 DB                 - xor ebx,ebx
Baldur.exe.text+2B6C8F: 41 38 2E              - cmp [r14],bpl
Baldur.exe.text+2B6C92: 8B D3                 - mov edx,ebx
Baldur.exe.text+2B6C94: 0F 94 C2              - sete dl
Baldur.exe.text+2B6C97: E8 F4 E0 E1 FF        - call Baldur.exe.text+D4D90
Baldur.exe.text+2B6C9C: 48 8B 0D AD D7 3A 00  - mov rcx,[140665450]
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>2</ID>
          <Description>"TotalStatPoints"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>TotalStatPoints</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>90</ID>
      <Description>"Prof Slot Points"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-06-22
  Author : Apocalypticx

  This script does prof slots
}

[ENABLE]

aobscanmodule(profslots1,Baldur.exe,89 87 74 07 00 00 48) // should be unique
alloc(newmem,$1000,profslots1)

label(code)
label(return)
label(ProfSlot)

newmem:

code:
mov [rdi+00000774],eax
push eax
mov eax,[ProfSlot]
mov [rdi+00000774],eax
pop eax
jmp return

ProfSlot:
db 0

profslots1:
  jmp newmem
  nop
return:
registersymbol(profslots1)
registersymbol(ProfSlot)

[DISABLE]

profslots1:
  db 89 87 74 07 00 00

unregistersymbol(ProfSlot)
unregistersymbol(profslots1)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe+2BDD77

Baldur.exe+2BDD4F: 48 8B 4D EF              - mov rcx,[rbp-11]
Baldur.exe+2BDD53: 41 FF C8                 - dec r8d
Baldur.exe+2BDD56: 83 BF 68 07 00 00 19     - cmp dword ptr [rdi+00000768],19
Baldur.exe+2BDD5D: 41 B9 01 00 00 00        - mov r9d,00000001
Baldur.exe+2BDD63: 8B D6                    - mov edx,esi
Baldur.exe+2BDD65: 75 07                    - jne Baldur.exe+2BDD6E
Baldur.exe+2BDD67: E8 A4 5A 0F 00           - call Baldur.exe+3B3810
Baldur.exe+2BDD6C: EB 05                    - jmp Baldur.exe+2BDD73
Baldur.exe+2BDD6E: E8 FD 51 0F 00           - call Baldur.exe+3B2F70
Baldur.exe+2BDD73: 41 8D 46 01              - lea eax,[r14+01]
// ---------- INJECTING HERE ----------
Baldur.exe+2BDD77: 89 87 74 07 00 00        - mov [rdi+00000774],eax
// ---------- DONE INJECTING  ----------
Baldur.exe+2BDD7D: 48 8B 55 EF              - mov rdx,[rbp-11]
Baldur.exe+2BDD81: 45 33 C0                 - xor r8d,r8d
Baldur.exe+2BDD84: 48 8B CF                 - mov rcx,rdi
Baldur.exe+2BDD87: E8 F4 93 00 00           - call Baldur.exe+2C7180
Baldur.exe+2BDD8C: 48 8D 4D FF              - lea rcx,[rbp-01]
Baldur.exe+2BDD90: E8 6B F0 13 00           - call Baldur.exe+3FCE00
Baldur.exe+2BDD95: 4C 8B B4 24 88 00 00 00  - mov r14,[rsp+00000088]
Baldur.exe+2BDD9D: 48 8B 9C 24 D0 00 00 00  - mov rbx,[rsp+000000D0]
Baldur.exe+2BDDA5: 48 8B 4D 17              - mov rcx,[rbp+17]
Baldur.exe+2BDDA9: 48 33 CC                 - xor rcx,rsp
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>91</ID>
          <Description>"ProfSlot"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>ProfSlot</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>9</ID>
      <Description>"Edit Slots"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-19
  Author : Apocalypticx

  This script does slots
}

[ENABLE]

aobscanmodule(slots,Baldur.exe,83 B9 74 07 00 00 00) // should be unique
alloc(newmem,$1000,slots)

label(code)
label(return)
label(EditTotalSlots)

newmem:
push rax
mov rax,[EditTotalSlots]
mov [rcx+00000774],rax
pop rax

code:
  cmp dword ptr [rcx+00000774],00
  jmp return

EditTotalSlots:
dd 0

slots:
  jmp newmem
  nop 2
return:
registersymbol(EditTotalSlots)
registersymbol(slots)

[DISABLE]

slots:
  db 83 B9 74 07 00 00 00

unregistersymbol(EditTotalSlots)
unregistersymbol(slots)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe.text+2B0300

Baldur.exe.text+2B02DE: CC                    - int 3 
Baldur.exe.text+2B02DF: CC                    - int 3 
Baldur.exe.text+2B02E0: 40 55                 - push rbp
Baldur.exe.text+2B02E2: 41 55                 - push r13
Baldur.exe.text+2B02E4: 41 57                 - push r15
Baldur.exe.text+2B02E6: 48 8D 6C 24 B9        - lea rbp,[rsp-47]
Baldur.exe.text+2B02EB: 48 81 EC 90 00 00 00  - sub rsp,00000090
Baldur.exe.text+2B02F2: 48 8B 05 1F 12 3B 00  - mov rax,[Baldur.exe.data+8518]
Baldur.exe.text+2B02F9: 48 33 C4              - xor rax,rsp
Baldur.exe.text+2B02FC: 48 89 45 2F           - mov [rbp+2F],rax
// ---------- INJECTING HERE ----------
Baldur.exe.text+2B0300: 83 B9 74 07 00 00 00  - cmp dword ptr [rcx+00000774],00
// ---------- DONE INJECTING  ----------
Baldur.exe.text+2B0307: 4C 8B F9              - mov r15,rcx
Baldur.exe.text+2B030A: 0F 84 7E 03 00 00     - je Baldur.exe.text+2B068E
Baldur.exe.text+2B0310: 48 8B 05 89 3D 3B 00  - mov rax,[1406650A0]
Baldur.exe.text+2B0317: 48 8D 55 07           - lea rdx,[rbp+07]
Baldur.exe.text+2B031B: 4C 8B A8 B8 10 00 00  - mov r13,[rax+000010B8]
Baldur.exe.text+2B0322: 41 8B 8D 70 07 00 00  - mov ecx,[r13+00000770]
Baldur.exe.text+2B0329: E8 62 51 FC FF        - call Baldur.exe.text+275490
Baldur.exe.text+2B032E: 84 C0                 - test al,al
Baldur.exe.text+2B0330: 0F 85 58 03 00 00     - jne Baldur.exe.text+2B068E
Baldur.exe.text+2B0336: 48 8B 05 63 3D 3B 00  - mov rax,[1406650A0]
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>10</ID>
          <Description>"EditTotalSlots"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>EditTotalSlots</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>7</ID>
      <Description>"Exp After Kill"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-19
  Author : Apocalypticx

  This script does experience hack
}

[ENABLE]

aobscanmodule(exp,Baldur.exe,01 82 70 05 00 00) // should be unique
alloc(newmem,$1000,exp)

label(code)
label(return)
label(TotalExp)

newmem:
push rax
mov rax,[TotalExp]
mov [rdx+00000570],rax
pop rax

code:
  add [rdx+00000570],eax
  jmp return

TotalExp:
dd 0

exp:
  jmp newmem
  nop
return:
registersymbol(exp)
registersymbol(TotalExp)

[DISABLE]

exp:
  db 01 82 70 05 00 00

unregistersymbol(TotalExp)
unregistersymbol(exp)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe.text+1CA203

Baldur.exe.text+1CA1DB: 89 82 70 05 00 00                 - mov [rdx+00000570],eax
Baldur.exe.text+1CA1E1: EB BF                             - jmp Baldur.exe.text+1CA1A2
Baldur.exe.text+1CA1E3: 89 82 80 11 00 00                 - mov [rdx+00001180],eax
Baldur.exe.text+1CA1E9: 33 C0                             - xor eax,eax
Baldur.exe.text+1CA1EB: 41 89 80 14 01 00 00              - mov [r8+00000114],eax
Baldur.exe.text+1CA1F2: B8 01 00 00 00                    - mov eax,00000001
Baldur.exe.text+1CA1F7: C3                                - ret 
Baldur.exe.text+1CA1F8: 41 83 78 24 01                    - cmp dword ptr [r8+24],01
Baldur.exe.text+1CA1FD: 41 8B 40 1C                       - mov eax,[r8+1C]
Baldur.exe.text+1CA201: 75 22                             - jne Baldur.exe.text+1CA225
// ---------- INJECTING HERE ----------
Baldur.exe.text+1CA203: 01 82 70 05 00 00                 - add [rdx+00000570],eax
// ---------- DONE INJECTING  ----------
Baldur.exe.text+1CA209: B8 01 00 00 00                    - mov eax,00000001
Baldur.exe.text+1CA20E: 41 C7 80 18 01 00 00 01 00 00 00  - mov [r8+00000118],00000001
Baldur.exe.text+1CA219: 41 C7 80 14 01 00 00 01 00 00 00  - mov [r8+00000114],00000001
Baldur.exe.text+1CA224: C3                                - ret 
Baldur.exe.text+1CA225: 01 82 D0 2A 00 00                 - add [rdx+00002AD0],eax
Baldur.exe.text+1CA22B: 33 C0                             - xor eax,eax
Baldur.exe.text+1CA22D: 41 89 80 14 01 00 00              - mov [r8+00000114],eax
Baldur.exe.text+1CA234: B8 01 00 00 00                    - mov eax,00000001
Baldur.exe.text+1CA239: C3                                - ret 
Baldur.exe.text+1CA23A: CC                                - int 3 
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>11</ID>
          <Description>"TotalExp"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>TotalExp</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>87</ID>
      <Description>"Add Rep 1 Point On F"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-27
  Author : Apocalypticx

  This script does add rep on F keypress
}

[ENABLE]

aobscanmodule(addrep,Baldur.exe,0F BF 81 92 66 00 00 0F BF 0D * * * * 99 F7 F9 0F BF C8 3B 8D 54 03 00 00 E9) // should be unique
alloc(newmem,$1000,addrep)

label(code)
label(return)
label(AddRepPoints)

newmem:
pushfq              //save flags before we jump to our cheat
push RAX
push RCX
push RDX
push R8
push R9
push R10
push R11
sub rsp,28
mov rcx,46           //46 virtual key code is F check microsux for virtual key codes
call GetAsyncKeyState
add rsp,28
pop r11
pop r10
pop r9
pop r8
pop rdx
pop rcx
test ax,8001
pop rax
jnz AddRepPoints

code:
popfq            //restore our flags after we check for the F press
  movsx eax,word ptr [rcx+00006692]
  jmp return

AddRepPoints:
popfq          //restore the flags after we jump to our cheat
add [rcx+00006692],(word)10     //add 1 rep point as it's x 10 for 1 point
movsx eax,word ptr [rcx+00006692]       //original instruction
jmp return

addrep:
  jmp newmem
  nop 2
return:
registersymbol(addrep)

[DISABLE]

addrep:
  db 0F BF 81 92 66 00 00

unregistersymbol(addrep)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe+157CA1

Baldur.exe+157C6E: 48 85 C9              - test rcx,rcx
Baldur.exe+157C71: 0F 84 CC 51 00 00     - je Baldur.exe+15CE43
Baldur.exe+157C77: 48 8B 05 22 D4 50 00  - mov rax,[Baldur.exe+6650A0]
Baldur.exe+157C7E: 8B 51 48              - mov edx,[rcx+48]
Baldur.exe+157C81: 48 8B 88 90 10 00 00  - mov rcx,[rax+00001090]
Baldur.exe+157C88: E8 73 E6 11 00        - call Baldur.exe+276300
Baldur.exe+157C8D: 66 41 3B C7           - cmp ax,r15w
Baldur.exe+157C91: 74 2D                 - je Baldur.exe+157CC0
Baldur.exe+157C93: 48 8B 05 06 D4 50 00  - mov rax,[Baldur.exe+6650A0]
Baldur.exe+157C9A: 48 8B 88 90 10 00 00  - mov rcx,[rax+00001090]
// ---------- INJECTING HERE ----------
Baldur.exe+157CA1: 0F BF 81 92 66 00 00  - movsx eax,word ptr [rcx+00006692]
// ---------- DONE INJECTING  ----------
Baldur.exe+157CA8: 0F BF 0D 61 66 44 00  - movsx ecx,word ptr [Baldur.exe+59E310]
Baldur.exe+157CAF: 99                    - cdq 
Baldur.exe+157CB0: F7 F9                 - idiv ecx
Baldur.exe+157CB2: 0F BF C8              - movsx ecx,ax
Baldur.exe+157CB5: 3B 8D 54 03 00 00     - cmp ecx,[rbp+00000354]
Baldur.exe+157CBB: E9 7C 51 00 00        - jmp Baldur.exe+15CE3C
Baldur.exe+157CC0: 48 8B 44 24 50        - mov rax,[rsp+50]
Baldur.exe+157CC5: 0F B6 88 9C 05 00 00  - movzx ecx,byte ptr [rax+0000059C]
Baldur.exe+157CCC: 3B 8D 54 03 00 00     - cmp ecx,[rbp+00000354]
Baldur.exe+157CD2: E9 65 51 00 00        - jmp Baldur.exe+15CE3C
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>85</ID>
      <Description>"Edit Thief Skills"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version: 
  Date   : 2024-01-25
  Author : muzze

  This script does thief skills editable
}

[ENABLE]

aobscanmodule(thiefskills,Baldur.exe,83 BF 80 07 00 00 00 75) // should be unique
alloc(newmem,$1000,thiefskills)

label(code)
label(return)
label(EditCurrentSkills)

newmem:
push rax
mov rax,[EditCurrentSkills]
mov [rdi+00000780],rax
pop rax

code:
  cmp dword ptr [rdi+00000780],00
  jmp return

EditCurrentSkills:
dw 0

thiefskills:
  jmp newmem
  nop 2
return:
registersymbol(thiefskills)
registersymbol(EditCurrentSkills)

[DISABLE]

thiefskills:
  db 83 BF 80 07 00 00 00

unregistersymbol(EditCurrentSkills)
unregistersymbol(thiefskills)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.SDL_malloc+B71B

Baldur.SDL_malloc+B6F3: E8 A8 E0 D2 FF        - call Baldur.exe+114500
Baldur.SDL_malloc+B6F8: 48 8B F8              - mov rdi,rax
Baldur.SDL_malloc+B6FB: 48 85 C0              - test rax,rax
Baldur.SDL_malloc+B6FE: 75 12                 - jne Baldur.SDL_malloc+B712
Baldur.SDL_malloc+B700: 45 33 C0              - xor r8d,r8d
Baldur.SDL_malloc+B703: 48 8D 15 F6 45 1D 00  - lea rdx,[Baldur.exe+5BAA60]
Baldur.SDL_malloc+B70A: 48 8B CB              - mov rcx,rbx
Baldur.SDL_malloc+B70D: E8 4E C3 D2 FF        - call Baldur.exe+1127C0
Baldur.SDL_malloc+B712: 83 BF 74 07 00 00 00  - cmp dword ptr [rdi+00000774],00
Baldur.SDL_malloc+B719: 75 19                 - jne Baldur.SDL_malloc+B734
// ---------- INJECTING HERE ----------
Baldur.SDL_malloc+B71B: 83 BF 80 07 00 00 00  - cmp dword ptr [rdi+00000780],00
// ---------- DONE INJECTING  ----------
Baldur.SDL_malloc+B722: 75 10                 - jne Baldur.SDL_malloc+B734
Baldur.SDL_malloc+B724: 83 BF E4 09 00 00 00  - cmp dword ptr [rdi+000009E4],00
Baldur.SDL_malloc+B72B: 75 07                 - jne Baldur.SDL_malloc+B734
Baldur.SDL_malloc+B72D: BA 01 00 00 00        - mov edx,00000001
Baldur.SDL_malloc+B732: EB 02                 - jmp Baldur.SDL_malloc+B736
Baldur.SDL_malloc+B734: 33 D2                 - xor edx,edx
Baldur.SDL_malloc+B736: 48 8B CB              - mov rcx,rbx
Baldur.SDL_malloc+B739: E8 62 DD D2 FF        - call Baldur.exe+114200
Baldur.SDL_malloc+B73E: 48 8B 7C 24 50        - mov rdi,[rsp+50]
Baldur.SDL_malloc+B743: B8 01 00 00 00        - mov eax,00000001
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>86</ID>
          <Description>"EditCurrentSkills"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>2 Bytes</VariableType>
          <Address>EditCurrentSkills</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>66</ID>
      <Description>"Teleport S = Store D = Teleport"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Baldur's Gate II - Enhanced Edition - v2.6.6.0
  Version:
  Date   : 2024-01-21
  Author : Apocalypticx

  This script does teleport S to store cords and D to teleport to saved cords
}

[ENABLE]

aobscanmodule(tele,Baldur.exe,4D 8B 18 44 8B 32) // should be unique
alloc(newmem,$1000,tele)

label(code)
label(return)
label(storexyz)
label(doteleport)
label(keychecker)
label(PartyX)
label(PartyY)
label(PartyZ)

newmem:
pushfq              //save flags
cmp [r8+28],0
je keychecker
popfq              //restore flags
jmp code

keychecker:
popfq              //restore flags
push RAX
push RCX
push RDX
push R8
push R9
push R10
push R11
sub rsp,28
mov rcx,53
call GetAsyncKeyState
add rsp,28
pop r11
pop r10
pop r9
pop r8
pop rdx
pop rcx
test ax,8001
pop rax
jnz storexyz
push RAX
push RCX
push RDX
push R8
push R9
push R10
push R11
sub rsp,28
mov rcx,44
call GetAsyncKeyState
add rsp,28
pop r11
pop r10
pop r9
pop r8
pop rdx
pop rcx
test ax,8001
pop rax
jnz doteleport
jmp code

code:
mov r11,[r8]
mov r14d,[rdx]
jmp return

storexyz:
push r9
mov r9,[r8]
mov [PartyX],r9
mov r9,[r8+8]
mov [PartyY],r9
mov r9,[r8+16]
mov [PartyZ],r9
pop r9
mov r11,[r8]
mov r14d,[rdx]
jmp return

doteleport:
push r9
mov r9,[PartyX]
mov [r8],r9
mov r9,[PartyY]
mov [r8+8],r9
mov r9,[PartyZ]
mov [r8+16],r9
pop r9
mov r11,[r8]
mov r14d,[rdx]
jmp return

PartyX:
dq 0

PartyY:
dq 0

PartyZ:
dq 0

tele:
  jmp newmem
  nop
return:
registersymbol(tele)
registersymbol(PartyX)
registersymbol(PartyY)
registersymbol(PartyZ)

[DISABLE]

tele:
  db 4D 8B 18 44 8B 32

unregistersymbol(PartyX)
unregistersymbol(PartyY)
unregistersymbol(PartyZ)
unregistersymbol(tele)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Baldur.exe+17B9C5

Baldur.exe+17B999: 41 57                    - push r15
Baldur.exe+17B99B: 48 83 EC 48              - sub rsp,48
Baldur.exe+17B99F: 0F B7 84 24 98 00 00 00  - movzx eax,word ptr [rsp+00000098]
Baldur.exe+17B9A7: 4D 8B F8                 - mov r15,r8
Baldur.exe+17B9AA: 48 8B D9                 - mov rbx,rcx
Baldur.exe+17B9AD: 66 85 C0                 - test ax,ax
Baldur.exe+17B9B0: 75 13                    - jne Baldur.exe+17B9C5
Baldur.exe+17B9B2: 0F B6 05 E1 21 42 00     - movzx eax,byte ptr [Baldur.exe+59DB9A]
Baldur.exe+17B9B9: 44 0F B6 1D D1 21 42 00  - movzx r11d,byte ptr [Baldur.exe+59DB92]
Baldur.exe+17B9C1: 41 0F AF C3              - imul eax,r11d
// ---------- INJECTING HERE ----------
Baldur.exe+17B9C5: 4D 8B 18                 - mov r11,[r8]
// ---------- DONE INJECTING  ----------
Baldur.exe+17B9C8: 44 8B 32                 - mov r14d,[rdx]
Baldur.exe+17B9CB: 49 8B CB                 - mov rcx,r11
Baldur.exe+17B9CE: 48 89 6C 24 70           - mov [rsp+70],rbp
Baldur.exe+17B9D3: 49 8B FB                 - mov rdi,r11
Baldur.exe+17B9D6: 48 89 74 24 40           - mov [rsp+40],rsi
Baldur.exe+17B9DB: 8B 72 04                 - mov esi,[rdx+04]
Baldur.exe+17B9DE: 48 C1 E9 20              - shr rcx,20
Baldur.exe+17B9E2: 48 C1 EF 20              - shr rdi,20
Baldur.exe+17B9E6: 4C 89 64 24 38           - mov [rsp+38],r12
Baldur.exe+17B9EB: 4C 89 6C 24 30           - mov [rsp+30],r13
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>67</ID>
          <Description>"PartyX"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>PartyX</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>68</ID>
          <Description>"PartyY"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>PartyY</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>69</ID>
          <Description>"PartyZ"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Double</VariableType>
          <Address>PartyZ</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>92</ID>
      <Description>"Donate Paypal"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
--NO_ACTIVATE
if syntaxcheck then return end
if memrec then print(memrec.Description) end

shellExecute('https://paypal.me/apocalypticx?country.x=GB&amp;locale.x=en_GB')

getLuaEngine().MenuItem1.DoClick()
getLuaEngine().Close()

[DISABLE]

</AssemblerScript>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
