<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>15</ID>
      <Description>"Enable Console"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : eu5.exe
  Version: 1.0.4
  Date   : 2025-11-06
  Author : nigel11

  Allows console to be opened with ~ and allows all commands
}

[ENABLE]

aobscanmodule(ALLOWCMD,eu5.exe,00 00 75 07 32 C0 48 83 C4 28 C3 B0 01 48 83 C4 28)
aobscanmodule(OPENCONSOLE,eu5.exe,80 3D 29 0C 90 04 00)


ALLOWCMD+0B:
  xor al,al
  add rsp,28

OPENCONSOLE:
  db 90 90 90 90 90 90 90

return:
registersymbol(OPENCONSOLE)
registersymbol(ALLOWCMD)

[DISABLE]

OPENCONSOLE:
  db 80 3D 29 0C 90 04 00

ALLOWCMD+0B:
  db B0 01 48 83 C4 28

unregistersymbol(OPENCONSOLE)
unregistersymbol(ALLOWCMD)
{
// search string refs for console_edit
// ORIGINAL CODE - INJECTION POINT: eu5.exe+2818C76

eu5.exe+2818C5C: 5D                    - pop rbp
eu5.exe+2818C5D: C3                    - ret
eu5.exe+2818C5E: 48 8B 5C 24 50        - mov rbx,[rsp+50]
eu5.exe+2818C63: 32 C0                 - xor al,al
eu5.exe+2818C65: 48 8B 7C 24 58        - mov rdi,[rsp+58]
eu5.exe+2818C6A: 48 83 C4 40           - add rsp,40
eu5.exe+2818C6E: 5D                    - pop rbp
eu5.exe+2818C6F: C3                    - ret
eu5.exe+2818C70: 40 53                 - push rbx
eu5.exe+2818C72: 48 83 EC 30           - sub rsp,30
// ---------- INJECTING HERE ----------
eu5.exe+2818C76: 80 3D 68 C4 8F 04 00  - cmp byte ptr [eu5.exe+71150E5],00
// ---------- DONE INJECTING  ----------
eu5.exe+2818C7D: 48 8B D9              - mov rbx,rcx
eu5.exe+2818C80: 75 0D                 - jne eu5.exe+2818C8F
eu5.exe+2818C82: C6 81 D8 06 00 00 00  - mov byte ptr [rcx+000006D8],00
eu5.exe+2818C89: 48 83 C4 30           - add rsp,30
eu5.exe+2818C8D: 5B                    - pop rbx
eu5.exe+2818C8E: C3                    - ret
eu5.exe+2818C8F: 48 8B 89 E0 06 00 00  - mov rcx,[rcx+000006E0]
eu5.exe+2818C96: 48 85 C9              - test rcx,rcx
eu5.exe+2818C99: 74 65                 - je eu5.exe+2818D00
eu5.exe+2818C9B: 48 83 79 28 00        - cmp qword ptr [rcx+28],00
}
{
// string block_command
// ORIGINAL CODE - INJECTION POINT: eu5.exe+689FD1

eu5.exe+689FAD: 48 8B 01              - mov rax,[rcx]
eu5.exe+689FB0: FF 50 50              - call qword ptr [rax+50]
eu5.exe+689FB3: E8 F8 DF 38 01        - call eu5.exe+1A17FB0
eu5.exe+689FB8: 80 3D DF D1 A5 06 00  - cmp byte ptr [eu5.exe+70E719E],00
eu5.exe+689FBF: 75 09                 - jne eu5.exe+689FCA
eu5.exe+689FC1: 80 B8 32 01 00 00 00  - cmp byte ptr [rax+00000132],00
eu5.exe+689FC8: 75 07                 - jne eu5.exe+689FD1
eu5.exe+689FCA: 32 C0                 - xor al,al
eu5.exe+689FCC: 48 83 C4 28           - add rsp,28
eu5.exe+689FD0: C3                    - ret
// ---------- INJECTING HERE ----------
eu5.exe+689FD1: B0 01                 - mov al,01
// ---------- DONE INJECTING  ----------
eu5.exe+689FD3: 48 83 C4 28           - add rsp,28
eu5.exe+689FD7: C3                    - ret
eu5.exe+689FD8: CC                    - int 3
eu5.exe+689FD9: CC                    - int 3
eu5.exe+689FDA: CC                    - int 3
eu5.exe+689FDB: CC                    - int 3
eu5.exe+689FDC: CC                    - int 3
eu5.exe+689FDD: CC                    - int 3
eu5.exe+689FDE: CC                    - int 3
eu5.exe+689FDF: CC                    - int 3
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>18</ID>
      <Description>"Enable Achievements"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : eu5.exe
  Version: 1.0.3
  Date   : 2025-11-11
  Author : nigel11

  Enables debug achievements
}

[ENABLE]

aobscanmodule(injAchivementBase,eu5.exe,80 B9 34 01 00 00 00 75) // should be unique
alloc(memAchivementBase,$1000, injAchivementBase)
alloc(pAchivementBase,$16, injAchivementBase)

label(retAchivementBase)

memAchivementBase:
  mov [pAchivementBase],rcx
  mov byte ptr [rcx+00000134],01
  cmp byte ptr [rcx+00000134],00
  jmp retAchivementBase

injAchivementBase:
  jmp memAchivementBase
  nop 2
retAchivementBase:
registersymbol(injAchivementBase)
registersymbol(pAchivementBase)

[DISABLE]

injAchivementBase:
  db 80 B9 34 01 00 00 00

unregistersymbol(injAchivementBase)
unregistersymbol(pAchivementBase)
dealloc(memAchivementBase)
dealloc(pAchivementBase)

{
// ORIGINAL CODE - INJECTION POINT: DebugAchivement

eu5.exe+1A19077: CC                    - int 3 
eu5.exe+1A19078: CC                    - int 3 
eu5.exe+1A19079: CC                    - int 3 
eu5.exe+1A1907A: CC                    - int 3 
eu5.exe+1A1907B: CC                    - int 3 
eu5.exe+1A1907C: CC                    - int 3 
eu5.exe+1A1907D: CC                    - int 3 
eu5.exe+1A1907E: CC                    - int 3 
eu5.exe+1A1907F: CC                    - int 3 
eu5.exe+1A19080: 48 83 EC 28           - sub rsp,28
// ---------- INJECTING HERE ----------
DebugAchivement: 80 B9 34 01 00 00 00  - cmp byte ptr [rcx+00000134],00
// ---------- DONE INJECTING  ----------
eu5.exe+1A1908B: 75 43                 - jne eu5.exe+1A190D0
eu5.exe+1A1908D: 80 B9 39 01 00 00 00  - cmp byte ptr [rcx+00000139],00
eu5.exe+1A19094: 74 09                 - je eu5.exe+1A1909F
eu5.exe+1A19096: 80 B9 32 01 00 00 00  - cmp byte ptr [rcx+00000132],00
eu5.exe+1A1909D: 74 38                 - je eu5.exe+1A190D7
eu5.exe+1A1909F: 80 B9 33 01 00 00 00  - cmp byte ptr [rcx+00000133],00
eu5.exe+1A190A6: 74 2F                 - je eu5.exe+1A190D7
eu5.exe+1A190A8: 80 B9 30 01 00 00 00  - cmp byte ptr [rcx+00000130],00
eu5.exe+1A190AF: 74 26                 - je eu5.exe+1A190D7
eu5.exe+1A190B1: 80 B9 31 01 00 00 00  - cmp byte ptr [rcx+00000131],00
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>16</ID>
      <Description>"Debug Toggle"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : eu5.exe
  Version: 1.0.4
  Date   : 2025-11-11
  Author : nigel11

  Toggles debug mode
  If Aob fails debug address has possibly changed.
}

[ENABLE]
aobscanmodule(DebugAddress, eu5.exe, 38 3D 27 55 AE 06)
7FF6CDCDB6F6:
db 1

[DISABLE]
7FF6CDCDB6F6:
db 0

{
00007FF6C71F61B9 | 48:8B01                  | mov rax,qword ptr ds:[rcx]              | rcx:ZwQueryInformationThread+14
00007FF6C71F61BC | FF50 10                  | call qword ptr ds:[rax+10]              |
00007FF6C71F61BF | 41:B8 03000000           | mov r8d,3                               |
00007FF6C71F61C5 | 45:33FF                  | xor r15d,r15d                           |
&gt;&gt;00007FF6C71F61C8 | 44:383D 2755AE06         | cmp byte ptr ds:[7FF6CDCDB6F6],r15b     |
00007FF6C71F61CF | 45:0F45C7                | cmovne r8d,r15d                         |
00007FF6C71F61D3 | 45:33C9                  | xor r9d,r9d                             |
00007FF6C71F61D6 | 48:8D5424 40             | lea rdx,qword ptr ss:[rsp+40]           | [rsp+40]:"zing process 0x%p\n"
00007FF6C71F61DB | 48:8BCF                  | mov rcx,rdi                             | rcx:ZwQueryInformationThread+14
00007FF6C71F61DE | E8 9DA60702              | call eu5.7FF6C9270880                   |
}

</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>12</ID>
      <Description>"Ironman Hook"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : eu5.exe
  Version: 1.0.3
  Date   : 2025-11-05
  Author : nigel11

  Set to 1 or 0 to enable/disable ironman
  achievements seem to work
  disable once address is found incase of game crashes
}

[ENABLE]

aobscanmodule(injIronmanHook,eu5.exe,44 38 B8 32 01 00 00)
alloc(newmem,32,injIronmanHook)
alloc(ptrIronman,8)

label(code)
label(return)


newmem:
  mov [ptrIronman],rax

code:
  cmp [rax+00000132],r15b
  jmp return

injIronmanHook:
  jmp newmem
  nop 2

return:
registersymbol(injIronmanHook)
registersymbol(ptrIronman)


[DISABLE]

injIronmanHook:
  db 44 38 B8 32 01 00 00

unregistersymbol(injIronmanHook)
dealloc(newmem)
//unregistersymbol(ptrIronman)
//dealloc(ptrIronman)

{
// ORIGINAL CODE - INJECTION POINT: eu5.exe+3692D9A

eu5.exe+3692D71: 48 89 9C 24 80 00 00 00  - mov [rsp+00000080],rbx
eu5.exe+3692D79: 48 8B 06                 - mov rax,[rsi]
eu5.exe+3692D7C: 48 8B CE                 - mov rcx,rsi
eu5.exe+3692D7F: FF 50 50                 - call qword ptr [rax+50]
eu5.exe+3692D82: 48 8B E8                 - mov rbp,rax
eu5.exe+3692D85: E8 56 61 37 FE           - call eu5.exe+1A08EE0
eu5.exe+3692D8A: 45 33 FF                 - xor r15d,r15d
eu5.exe+3692D8D: 41 8D 7F 06              - lea edi,[r15+06]
eu5.exe+3692D91: 44 38 3D 3A BF BE 03     - cmp [eu5.exe+727ECD2],r15b
eu5.exe+3692D98: 75 65                    - jne eu5.exe+3692DFF
// ---------- INJECTING HERE ----------
eu5.exe+3692D9A: 44 38 B8 32 01 00 00     - cmp [rax+00000132],r15b
// ---------- DONE INJECTING  ----------
eu5.exe+3692DA1: 74 5C                    - je eu5.exe+3692DFF
eu5.exe+3692DA3: 48 89 5C 24 78           - mov [rsp+78],rbx
eu5.exe+3692DA8: 8B 55 10                 - mov edx,[rbp+10]
eu5.exe+3692DAB: 48 8D 4C 24 78           - lea rcx,[rsp+78]
eu5.exe+3692DB0: E8 5B 48 35 FE           - call eu5.exe+19E7610
eu5.exe+3692DB5: 44 8B C0                 - mov r8d,eax
eu5.exe+3692DB8: 8B 55 18                 - mov edx,[rbp+18]
eu5.exe+3692DBB: 85 D2                    - test edx,edx
eu5.exe+3692DBD: 74 32                    - je eu5.exe+3692DF1
eu5.exe+3692DBF: 83 EA 01                 - sub edx,01
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>8</ID>
          <Description>"Ironman"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>ptrIronman</Address>
          <Offsets>
            <Offset>132</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>25</ID>
      <Description>"Extra Pointers"</Description>
      <Options moHideChildren="1"/>
      <GroupHeader>1</GroupHeader>
      <CheatEntries>
        <CheatEntry>
          <ID>19</ID>
          <Description>"Achievements"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>pAchivementBase</Address>
          <Offsets>
            <Offset>134</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>20</ID>
          <Description>"Ironman"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>pAchivementBase</Address>
          <Offsets>
            <Offset>132</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>21</ID>
          <Description>"No description"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>pAchivementBase</Address>
          <Offsets>
            <Offset>133</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>22</ID>
          <Description>"No description"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>pAchivementBase</Address>
          <Offsets>
            <Offset>130</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>23</ID>
          <Description>"No description"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>pAchivementBase</Address>
          <Offsets>
            <Offset>131</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>24</ID>
          <Description>"No description"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>pAchivementBase</Address>
          <Offsets>
            <Offset>139</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>17</ID>
          <Description>"Debug Mode"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>Byte</VariableType>
          <Address>eu5.exe+711B6F6</Address>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
