<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>104</ID>
      <Description>"Compact mode"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
--https://forum.cheatengine.org/viewtopic.php?t=570055
LuaCall(function cycleFullCompact(sender,force) local state = not(compactmenuitem.Caption == 'Compact View Mode'); if force~=nil then state = not force end; compactmenuitem.Caption = state and 'Compact View Mode' or 'Full View Mode'; 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 Mode'; compactmenuitem.OnClick = cycleFullCompact; compactmenualreadyexists = 'yes'; end; addCompactMenu(); cycleFullCompact(nil,true))

[DISABLE]
LuaCall(cycleFullCompact(nil,false))

</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>3</ID>
      <Description>"Enable (enable twice)"</Description>
      <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then
    return
end
if process == nil then
    ShowMessage("Process is not selected.")
elseif readInteger(process) == 0 then
    ShowMessage("Process cannot be opened.")
else
    if monopipe ~= nil and monopipe.ProcessID ~= getOpenedProcessID() then
        monopipe.destroy()
        monopipe = nil
    end
    if monopipe == nil then
        LaunchMonoDataCollector()
    end
end


{$asm}
//define(PlayerControllerManagedUpdateProc,"PlayerController.ManagedUpdate")

//registersymbol(PlayerControllerManagedUpdateProc)


[DISABLE]
{$lua}
if syntaxcheck then return end;if not syntaxcheck and monopipe then monopipe=nil,monopipe.Destroy()end

{$asm}
unregistersymbol(*)

</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>8</ID>
          <Description>"Get resources"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>5</ID>
              <Description>"&lt;=== Press "P" to pause game, enable me"</Description>
              <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Sovereign.exe
  Version: 
  Date   : 2024-01-06
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_GET_RES,Logic.Resource:Set+e5, Logic.Resource:Set+105, F3 0F 11 28 48 8B 75 F0) // should be unique
alloc(newmem,$1000,INJECT_GET_RES)

label(code)
label(return)
label(i_base_res_addr)

newmem:
  cmp qword ptr [i_base_res_addr], 0
  jne code
  mov [i_base_res_addr], rax

code:
  movss [rax],xmm5
  mov rsi,[rbp-10]
  jmp return
align 10 cc
  i_base_res_addr:
  dq 0

INJECT_GET_RES:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_GET_RES)
registersymbol(i_base_res_addr)
[DISABLE]

INJECT_GET_RES:
  db F3 0F 11 28 48 8B 75 F0

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Logic.Resource:Set+ee

Logic.Resource:Set+c8: 3B F0                          - cmp esi,eax
Logic.Resource:Set+ca: 7D 26                          - jnl Logic.Resource:Set+f2
Logic.Resource:Set+cc: 48 8B 47 18                    - mov rax,[rdi+18]
Logic.Resource:Set+d0: F3 0F 10 45 C0                 - movss xmm0,[rbp-40]
Logic.Resource:Set+d5: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Logic.Resource:Set+d9: 48 63 CE                       - movsxd  rcx,esi
Logic.Resource:Set+dc: 39 48 18                       - cmp [rax+18],ecx
Logic.Resource:Set+df: 0F 86 1B 00 00 00              - jbe Logic.Resource:Set+100
Logic.Resource:Set+e5: 48 8D 44 88 20                 - lea rax,[rax+rcx*4+20]
Logic.Resource:Set+ea: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
// ---------- INJECTING HERE ----------
Logic.Resource:Set+ee: F3 0F 11 28                    - movss [rax],xmm5
// ---------- DONE INJECTING  ----------
Logic.Resource:Set+f2: 48 8B 75 F0                    - mov rsi,[rbp-10]
Logic.Resource:Set+f6: 48 8B 7D F8                    - mov rdi,[rbp-08]
Logic.Resource:Set+fa: 48 8D 65 00                    - lea rsp,[rbp+00]
Logic.Resource:Set+fe: 5D                             - pop rbp
Logic.Resource:Set+ff: C3                             - ret 
Logic.Resource:Set+100: BA 3C 00 00 00                 - mov edx,0000003C
Logic.Resource:Set+105: B9 86 01 00 00                 - mov ecx,00000186
Logic.Resource:Set+10a: 48 8D 6D 00                    - lea rbp,[rbp+00]
Logic.Resource:Set+10e: 49 BB D0 20 69 D1 53 02 00 00  - mov r11,00000253D16920D0
Logic.Resource:Set+118: 41 FF D3                       - call r11
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>6</ID>
                  <Description>"Royal Treasury"</Description>
                  <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">100000:100000
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>-14</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>12</ID>
                  <Description>"Food income"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>-10</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>11</ID>
                  <Description>"??"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>-C</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>10</ID>
                  <Description>"Books"</Description>
                  <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">1000:1000
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>-8</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>9</ID>
                  <Description>"Religion"</Description>
                  <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">1000:1000
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>-4</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>7</ID>
                  <Description>"??"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>0</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>13</ID>
                  <Description>"??"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>4</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>14</ID>
                  <Description>"Kingdom levies"</Description>
                  <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">1000:1000
</DropDownList>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>8</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>15</ID>
                  <Description>"??"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>C</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>16</ID>
                  <Description>"??"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>10</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>17</ID>
                  <Description>"??"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>14</Offset>
                  </Offsets>
                </CheatEntry>
                <CheatEntry>
                  <ID>18</ID>
                  <Description>"??"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <VariableType>Float</VariableType>
                  <Address>i_base_res_addr</Address>
                  <Offsets>
                    <Offset>18</Offset>
                  </Offsets>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>81</ID>
          <Description>"Get kingdom stability"</Description>
          <Options moHideChildren="1"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>80</ID>
              <Description>"&lt;=== Press "P" to pause game, enable me"</Description>
              <Options moHideChildren="1"/>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Sovereign.exe
  Version: 
  Date   : 2024-01-10
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_SET_KINGDOM_STAB,Logic.Kingdom:GetRebellionRiskGlobal+28,Logic.Kingdom:GetRebellionRiskGlobal+60,39 00 F3 0F 10 40 68) // should be unique
alloc(newmem,$1000,INJECT_SET_KINGDOM_STAB)

label(code)
label(return)
label(i_stab_addr)
newmem:
  cmp qword ptr [i_stab_addr], 0
  jne code
  mov [i_stab_addr],rax
  vmovss xmm14, [vf_120]
  vmovss xmm15, [rax+68]
  vcomiss xmm15, xmm14
  jae code
  vmovss [rax+68], xmm14

code:
  movss xmm0,[rax+68]
  jmp return
align 10 cc
  i_stab_addr:
  dq 0
  vf_120:
  dd (float)1

INJECT_SET_KINGDOM_STAB+02:
  jmp newmem
return:
registersymbol(INJECT_SET_KINGDOM_STAB)
registersymbol(i_stab_addr)

[DISABLE]

INJECT_SET_KINGDOM_STAB+02:
  db F3 0F 10 40 68

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Logic.Kingdom:GetRebellionRiskGlobal+2e

Logic.Kingdom:GetRebellionRiskGlobal+8: 48 8B F1              - mov rsi,rcx
Logic.Kingdom:GetRebellionRiskGlobal+b: 48 8B 86 00 03 00 00  - mov rax,[rsi+00000300]
Logic.Kingdom:GetRebellionRiskGlobal+12: 48 85 C0              - test rax,rax
Logic.Kingdom:GetRebellionRiskGlobal+15: 75 0A                 - jne Logic.Kingdom:GetRebellionRiskGlobal+21
Logic.Kingdom:GetRebellionRiskGlobal+17: 66 0F 57 C0           - xorpd xmm0,xmm0
Logic.Kingdom:GetRebellionRiskGlobal+1b: F2 0F 5A C0           - cvtsd2ss xmm0,xmm0
Logic.Kingdom:GetRebellionRiskGlobal+1f: EB 2E                 - jmp Logic.Kingdom:GetRebellionRiskGlobal+4f
Logic.Kingdom:GetRebellionRiskGlobal+21: 48 8B 86 00 03 00 00  - mov rax,[rsi+00000300]
Logic.Kingdom:GetRebellionRiskGlobal+28: 48 8B C8              - mov rcx,rax
Logic.Kingdom:GetRebellionRiskGlobal+2b: 83 39 00              - cmp dword ptr [rcx],00
// ---------- INJECTING HERE ----------
Logic.Kingdom:GetRebellionRiskGlobal+2e: F3 0F 10 40 68        - movss xmm0,[rax+68]
// ---------- DONE INJECTING  ----------
Logic.Kingdom:GetRebellionRiskGlobal+33: F3 0F 5A C0           - cvtss2sd xmm0,xmm0
Logic.Kingdom:GetRebellionRiskGlobal+37: F2 0F 5A E8           - cvtsd2ss xmm5,xmm0
Logic.Kingdom:GetRebellionRiskGlobal+3b: F3 0F 11 6C 24 08     - movss [rsp+08],xmm5
Logic.Kingdom:GetRebellionRiskGlobal+41: F3 0F 10 44 24 08     - movss xmm0,[rsp+08]
Logic.Kingdom:GetRebellionRiskGlobal+47: F3 0F 5A C0           - cvtss2sd xmm0,xmm0
Logic.Kingdom:GetRebellionRiskGlobal+4b: F2 0F 5A C0           - cvtsd2ss xmm0,xmm0
Logic.Kingdom:GetRebellionRiskGlobal+4f: 48 8B 34 24           - mov rsi,[rsp]
Logic.Kingdom:GetRebellionRiskGlobal+53: 48 83 C4 18           - add rsp,18
Logic.Kingdom:GetRebellionRiskGlobal+57: C3                    - ret 
18073141358: 01 04 01              - add [rcx+rax],eax
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>82</ID>
                  <Description>"value"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>FF8080</Color>
                  <VariableType>Float</VariableType>
                  <Address>i_stab_addr</Address>
                  <Offsets>
                    <Offset>68</Offset>
                  </Offsets>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <ID>20</ID>
          <Description>"Get castle info"</Description>
          <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
          <GroupHeader>1</GroupHeader>
          <CheatEntries>
            <CheatEntry>
              <ID>19</ID>
              <Description>"Enable"</Description>
              <Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
              <VariableType>Auto Assembler Script</VariableType>
              <AssemblerScript>{ Game   : Sovereign.exe
  Version: 
  Date   : 2024-01-06
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_GET_CASTLE_INFO,Logic.Castle:GetVar+1b00, Logic.Castle:GetVar+1d00, F3 41 0F 10 85 08 02 00 00) // should be unique
alloc(newmem,$1000,INJECT_GET_CASTLE_INFO)


label(code)
label(return)
label(i_base_castle_addr)
label(i_kingdom_id)


newmem:
  mov [i_base_castle_addr], r13
  push r15
  mov r15d, [r13+90] //kingdom_id
  mov [i_kingdom_id], r15d
  pop r15

code:
  movss xmm0,[r13+00000208]
  jmp return
align 10 cc
  i_base_castle_addr:
  dq 0
  i_kingdom_id:
  dd 0

INJECT_GET_CASTLE_INFO:
  jmp newmem
  nop 4
return:
registersymbol(INJECT_GET_CASTLE_INFO)
registersymbol(i_base_castle_addr)
registersymbol(i_kingdom_id)

[DISABLE]

INJECT_GET_CASTLE_INFO:
  db F3 41 0F 10 85 08 02 00 00

unregistersymbol(*)
dealloc(newmem)


{
// ORIGINAL CODE - INJECTION POINT: Logic.Castle:GetVar+1b1f

Logic.Castle:GetVar+1ae7: 48 89 01                       - mov [rcx],rax
Logic.Castle:GetVar+1aea: 48 83 C1 08                    - add rcx,08
Logic.Castle:GetVar+1aee: 48 8B 85 D0 F9 FF FF           - mov rax,[rbp-00000630]
Logic.Castle:GetVar+1af5: 48 89 85 50 F7 FF FF           - mov [rbp-000008B0],rax
Logic.Castle:GetVar+1afc: 48 89 01                       - mov [rcx],rax
Logic.Castle:GetVar+1aff: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
Logic.Castle:GetVar+1b06: 49 BB 30 11 72 D1 53 02 00 00  - mov r11,System.Object:wbarrier_conc
Logic.Castle:GetVar+1b10: 41 FF D3                       - call r11
Logic.Castle:GetVar+1b13: 48 8B 85 50 F7 FF FF           - mov rax,[rbp-000008B0]
Logic.Castle:GetVar+1b1a: E9 23 28 00 00                 - jmp Logic.Castle:GetVar+4342
// ---------- INJECTING HERE ----------
Logic.Castle:GetVar+1b1f: F3 41 0F 10 85 08 02 00 00     - movss xmm0,[r13+00000208]
// ---------- DONE INJECTING  ----------
Logic.Castle:GetVar+1b28: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Logic.Castle:GetVar+1b2c: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
Logic.Castle:GetVar+1b30: F3 0F 11 AD 6C F7 FF FF        - movss [rbp-00000894],xmm5
Logic.Castle:GetVar+1b38: F3 0F 10 85 6C F7 FF FF        - movss xmm0,[rbp-00000894]
Logic.Castle:GetVar+1b40: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Logic.Castle:GetVar+1b44: 66 90                          - nop 2
Logic.Castle:GetVar+1b46: 49 BB 50 59 0C 5A 55 02 00 00  - mov r11,System.Math:Round
Logic.Castle:GetVar+1b50: 41 FF D3                       - call r11
Logic.Castle:GetVar+1b53: F2 0F 5A C0                    - cvtsd2ss xmm0,xmm0
Logic.Castle:GetVar+1b57: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
}
</AssemblerScript>
              <CheatEntries>
                <CheatEntry>
                  <ID>59</ID>
                  <Description>"Kingdom ID"</Description>
                  <ShowAsSigned>0</ShowAsSigned>
                  <Color>808080</Color>
                  <VariableType>4 Bytes</VariableType>
                  <Address>i_kingdom_id</Address>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>61</ID>
                      <Description>"Selected owned city: Set units in city: min level and morale modifier"</Description>
                      <Options moHideChildren="1"/>
                      <VariableType>Auto Assembler Script</VariableType>
                      <AssemblerScript>{ Game   : Sovereign.exe
  Version: 
  Date   : 2024-01-07
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_SET_UNIT_DATA,UIUnitSlot:UpdateLevel+70,UIUnitSlot:UpdateLevel+d0,0B 48 8B 87 A0 00 00 00 4C) // should be unique
alloc(newmem,$1000,INJECT_SET_UNIT_DATA)

label(code)
label(return)
label(i_kingdom_id2)
newmem:
  cmp dword ptr [i_kingdom_id2], #99999
  je code
  //mov eax, [i_kingdom_id2]
  //test eax, eax
  //jz endp

  mov al, [rdi+F4] //m_ShowDisband
  test al, al // no disband icon
  jz code

  mov rax, [rdi+B8] //&lt;Castle&gt;k__BackingField
  test rax, rax
  jz code

  mov eax, [rax+90] //kingdom_id

  push r15
  mov r15d, [i_kingdom_id2]
  cmp eax, r15d
  jne endp

  mov r15, [rdi+A0] //&lt;UnitInstance&gt;k__BackingField
  test r15, r15
  jz endp

  // reset damage
  mov eax, [r15+48] //damage
  test eax, eax
  jz next2
  xor eax, eax
  mov [r15+48], eax

next2: // set level to 2, if lower
  mov eax, [r15+54] //level
  cmp eax, 5
  jae next3
  mov eax, 5
  mov [r15+54], eax

next3:
  //jmp endp

  mov r15, [r15+20] // army
  test r15, r15
  jz endp
  mov r15, [r15+130] // morale
  test r15, r15
  jz endp

  vmovss xmm15, [r15+5C] //morale_in_own_realm
  vmovss xmm14, [vf_32]
  vcomiss xmm15, xmm14
  jge endp
  vmovss [r15+5C], xmm14 //morale_in_own_realm
  vmovss [r15+68], xmm14 //morale_in_enemy_realm
  vmovss [r15+60], xmm14 //morale_in_allied_realm
  vmovss [r15+64], xmm14 //morale_in_neutral_realm

endp:
  pop r15
  jmp code

code:
  mov rax,[rdi+000000A0]
  jmp return
align 10 cc
  vf_32:
  dd (float)32
  i_kingdom_id2:
  dd #99999

INJECT_SET_UNIT_DATA+01:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_SET_UNIT_DATA)
registersymbol(i_kingdom_id2)

[DISABLE]

INJECT_SET_UNIT_DATA+01:
  db 48 8B 87 A0 00 00 00

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: UIUnitSlot:UpdateLevel+8c

UIUnitSlot:UpdateLevel+5f: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
UIUnitSlot:UpdateLevel+66: 49 BB 70 19 23 E6 F7 01 00 00  - mov r11,UnityEngine.Object:op_Equality
UIUnitSlot:UpdateLevel+70: 41 FF D3                       - call r11
UIUnitSlot:UpdateLevel+73: 85 C0                          - test eax,eax
UIUnitSlot:UpdateLevel+75: 0F 85 A8 05 00 00              - jne UIUnitSlot:UpdateLevel+623
UIUnitSlot:UpdateLevel+7b: 48 8B 87 A0 00 00 00           - mov rax,[rdi+000000A0]
UIUnitSlot:UpdateLevel+82: 48 85 C0                       - test rax,rax
UIUnitSlot:UpdateLevel+85: 75 05                          - jne UIUnitSlot:UpdateLevel+8c
UIUnitSlot:UpdateLevel+87: 45 33 E4                       - xor r12d,r12d
UIUnitSlot:UpdateLevel+8a: EB 0B                          - jmp UIUnitSlot:UpdateLevel+97
// ---------- INJECTING HERE ----------
UIUnitSlot:UpdateLevel+8c: 48 8B 87 A0 00 00 00           - mov rax,[rdi+000000A0]
// ---------- DONE INJECTING  ----------
UIUnitSlot:UpdateLevel+93: 4C 63 60 54                    - movsxd  r12,dword ptr [rax+54]
UIUnitSlot:UpdateLevel+97: 4D 8B FC                       - mov r15,r12
UIUnitSlot:UpdateLevel+9a: 49 BA 48 66 54 66 F6 01 00 00  - mov r10,000001F666546648
UIUnitSlot:UpdateLevel+a4: 49 8B CC                       - mov rcx,r12
UIUnitSlot:UpdateLevel+a7: 48 BA 60 20 6F 80 F8 01 00 00  - mov rdx,000001F8806F2060
UIUnitSlot:UpdateLevel+b1: 49 B8 30 20 6F 80 F8 01 00 00  - mov r8,000001F8806F2030
UIUnitSlot:UpdateLevel+bb: 45 33 C9                       - xor r9d,r9d
UIUnitSlot:UpdateLevel+be: 49 BB 00 56 C0 FB FB 01 00 00  - mov r11,Defs:GetObj
UIUnitSlot:UpdateLevel+c8: 41 FF D3                       - call r11
UIUnitSlot:UpdateLevel+cb: 48 89 85 28 FF FF FF           - mov [rbp-000000D8],rax
}
</AssemblerScript>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>63</ID>
                          <Description>"Read kingdom ID from above"</Description>
                          <VariableType>Auto Assembler Script</VariableType>
                          <AssemblerScript>[ENABLE]
{$lua}
--NO_ACTIVATE
if syntaxcheck then return end
local kid = 0
kid = readInteger('i_kingdom_id')
writeInteger('i_kingdom_id2', kid)

[DISABLE]
{$lua}
if syntaxcheck then return end


</AssemblerScript>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>62</ID>
                          <Description>"Set kingdom ID (must):"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>C08000</Color>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_kingdom_id2</Address>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>73</ID>
                      <Description>"Selected unit: set food supply, morale"</Description>
                      <Options moHideChildren="1"/>
                      <VariableType>Auto Assembler Script</VariableType>
                      <AssemblerScript>{ Game   : Sovereign.exe
  Version: 
  Date   : 2024-01-07
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_UPDATE_ARMY_SUPPLY,UIArmyFood:UpdateSupplies+b1,UIArmyFood:UpdateSupplies+1b1,48 8B 87 38 01 00 00 48 8B C8 83 38) // should be unique
alloc(newmem,$1000,INJECT_UPDATE_ARMY_SUPPLY)

label(code)
label(return)
label(i_kingdom_id3)

newmem:
  cmp dword ptr [i_kingdom_id3], #99999
  je code

  push r15
  push r14
  push r13

  mov r14d, [rdi+90]
  cmp r14d, [i_kingdom_id3]
  jne endp

  mov r15, [rdi+138] //supplies
  test r15, r15
  jz set_morale

  mov r14d, [r15+24] //maxVal
  mov [r15+20], r14d //curVal
  mov r14d, [vf_001]
  mov [r15+2C], r14d //rate

set_morale:
  mov r15, [rdi+130] // morale
  test r15, r15
  jz set_hp

  vmovss xmm14, [vf_16]
  vmovss [r15+5C], xmm14 //morale_in_own_realm
  vmovss [r15+60], xmm14 //morale_in_allied_realm
  vmovss [r15+64], xmm14 //morale_in_neutral_realm
  vmovss [r15+68], xmm14 //morale_in_enemy_realm

set_hp:
  mov r15, [rdi+D8] // units
  test r15, r15
  jz endp

  mov r14d, [r15+18] // units -&gt; _size
  test r14d, r14d
  jz endp

  mov r15, [r15+10] // units -&gt; _items
  test r15, r15
  jz endp

  cmp r14d, 20 // &gt; 32 troops?
  ja endp

  vxorps xmm15, xmm15, xmm15

  vmovss xmm13, [vf_0_09]

set_hp_loop:
  dec r14d
  cmp r14d, 0
  je endp

  lea r13, [r15+r14d*8+20] // get address of units -&gt; _items -&gt; Item[?]
  test r13, r13 // move into address of units -&gt; _items -&gt; Item[?]
  jz set_hp_loop_in_1
  mov r13, [r13]
  test r13, r13
  jz set_hp_loop_in_1

set_hp_loop_in_0:

  vmovss xmm14, [r13+48]
  vcomiss xmm14, xmm13
  jle set_hp_loop_in_1

  vmovss [r13+48], xmm15 // units -&gt; _items -&gt; Item[?] -&gt; damage
  vmovss xmm13, [r13+4C] // units -&gt; _items -&gt; Item[?] -&gt; speed_mod
  vmovss xmm14, [vf_3_33]
  vcomiss xmm13, xmm14
  jge set_hp_loop_in_1
  vmovss [r13+4C], xmm14

set_hp_loop_in_1:
  //mov r13d, [r13+54] // Debug: get unit level

  cmp r14d, 0
  je endp
  jmp set_hp_loop


endp:
  pop r13
  pop r14
  pop r15

code:
  mov rax,[rdi+00000138]
  jmp return
align 10 cc
  i_kingdom_id3:
  dd #99999
  vf_001:
  dd (float)-0.01
  vf_16:
  dd (float)16
  vf_3_33:
  dd (float)3.33333
  vf_0_09:
  dd (float)0.09



INJECT_UPDATE_ARMY_SUPPLY:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_UPDATE_ARMY_SUPPLY)
registersymbol(i_kingdom_id3)

[DISABLE]

INJECT_UPDATE_ARMY_SUPPLY:
  db 48 8B 87 38 01 00 00

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: UIArmyFood:UpdateSupplies+b6

UIArmyFood:UpdateSupplies+85: 48 8B B8 E8 00 00 00           - mov rdi,[rax+000000E8]
UIArmyFood:UpdateSupplies+8c: 48 8B C7                       - mov rax,rdi
UIArmyFood:UpdateSupplies+8f: 48 85 C0                       - test rax,rax
UIArmyFood:UpdateSupplies+92: 0F 84 ED 00 00 00              - je UIArmyFood:UpdateSupplies+185
UIArmyFood:UpdateSupplies+98: 48 8B 87 38 01 00 00           - mov rax,[rdi+00000138]
UIArmyFood:UpdateSupplies+9f: 48 85 C0                       - test rax,rax
UIArmyFood:UpdateSupplies+a2: 0F 84 DD 00 00 00              - je UIArmyFood:UpdateSupplies+185
UIArmyFood:UpdateSupplies+a8: F3 0F 10 46 4C                 - movss xmm0,[rsi+4C]
UIArmyFood:UpdateSupplies+ad: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
UIArmyFood:UpdateSupplies+b1: F2 0F 11 45 B8                 - movsd [rbp-48],xmm0
// ---------- INJECTING HERE ----------
UIArmyFood:UpdateSupplies+b6: 48 8B 87 38 01 00 00           - mov rax,[rdi+00000138]
// ---------- DONE INJECTING  ----------
UIArmyFood:UpdateSupplies+bd: 48 8B C8                       - mov rcx,rax
UIArmyFood:UpdateSupplies+c0: 83 38 00                       - cmp dword ptr [rax],00
UIArmyFood:UpdateSupplies+c3: 66 66 90                       - nop 3
UIArmyFood:UpdateSupplies+c6: 49 BB 60 24 36 FA E0 01 00 00  - mov r11,Logic.ComputableValue:Get
UIArmyFood:UpdateSupplies+d0: 41 FF D3                       - call r11
UIArmyFood:UpdateSupplies+d3: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
UIArmyFood:UpdateSupplies+d7: 48 8D AD 00 00 00 00           - lea rbp,[rbp+00000000]
UIArmyFood:UpdateSupplies+de: 49 BB 20 1A 24 82 DE 01 00 00  - mov r11,System.Math:Ceiling
UIArmyFood:UpdateSupplies+e8: 41 FF D3                       - call r11
UIArmyFood:UpdateSupplies+eb: F2 0F 10 C8                    - movsd xmm1,xmm0
}
</AssemblerScript>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>70</ID>
                          <Description>"Read kingdom ID from "Selected owned city""</Description>
                          <VariableType>Auto Assembler Script</VariableType>
                          <AssemblerScript>[ENABLE]
{$lua}
--NO_ACTIVATE
if syntaxcheck then return end
local kid = 0
kid = readInteger('i_kingdom_id')
writeInteger('i_kingdom_id3', kid)

[DISABLE]
{$lua}
if syntaxcheck then return end


</AssemblerScript>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>69</ID>
                          <Description>"Set kingdom ID (must)"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>C08000</Color>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_kingdom_id3</Address>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>75</ID>
                      <Description>"Set min army HP (may not working)"</Description>
                      <Options moHideChildren="1"/>
                      <VariableType>Auto Assembler Script</VariableType>
                      <AssemblerScript>{ Game   : Sovereign.exe
  Version: 
  Date   : 2024-01-08
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_SET_ARMY_HP,Logic.Kingdom:CalcASTroopStrength+1af, Logic.Kingdom:CalcASTroopStrength+3af, 05 00 00 F3 0F 5A C0 F3 41 0F 10 4C 24 48) // should be unique
alloc(newmem,$1000,INJECT_SET_ARMY_HP)

label(code)
label(return)
label(i_kingdom_id4)
label(vf_min_hp)

newmem:
  cmp dword ptr [i_kingdom_id4], #99999
  je code

  push r15
  mov r15, [r12+20] // army
  test r15, r15
  jz endp

  mov r15d, [r15+90] // kingdom_id
  cmp r15d, [i_kingdom_id4]
  jne endp

  vmovss xmm15, [r12+48] // damage
  vmovss xmm14, [vf_min_hp]
  vcomiss xmm15, xmm14
  jle endp
  vxorps xmm14, xmm14, xmm14
  vmovss [r12+48], xmm14  // damage

endp:
  pop r15

code:
  movss xmm1,[r12+48]
  jmp return
align 10 cc
  vf_min_hp:
  dd (float)0.01
  i_kingdom_id4:
  dd #99999

INJECT_SET_ARMY_HP+07:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_SET_ARMY_HP)
registersymbol(i_kingdom_id4)
registersymbol(vf_min_hp)

[DISABLE]

INJECT_SET_ARMY_HP+07:
  db F3 41 0F 10 4C 24 48

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Logic.Kingdom:CalcASTroopStrength+1c9

Logic.Kingdom:CalcASTroopStrength+18e: 49 BB 30 23 88 8D E6 02 00 00  - mov r11,Logic.Resource:Get
Logic.Kingdom:CalcASTroopStrength+198: 41 FF D3                       - call r11
Logic.Kingdom:CalcASTroopStrength+19b: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Logic.Kingdom:CalcASTroopStrength+19f: F2 0F 11 85 50 FF FF FF        - movsd [rbp-000000B0],xmm0
Logic.Kingdom:CalcASTroopStrength+1a7: F2 0F 10 85 50 FF FF FF        - movsd xmm0,[rbp-000000B0]
Logic.Kingdom:CalcASTroopStrength+1af: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
Logic.Kingdom:CalcASTroopStrength+1b3: F3 0F 11 6D B8                 - movss [rbp-48],xmm5
Logic.Kingdom:CalcASTroopStrength+1b8: 41 83 3C 24 00                 - cmp dword ptr [r12],00
Logic.Kingdom:CalcASTroopStrength+1bd: F3 0F 10 05 4B 05 00 00        - movss xmm0,[Logic.Kingdom:CalcASTroopStrength+710]
Logic.Kingdom:CalcASTroopStrength+1c5: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
// ---------- INJECTING HERE ----------
Logic.Kingdom:CalcASTroopStrength+1c9: F3 41 0F 10 4C 24 48           - movss xmm1,[r12+48]
// ---------- DONE INJECTING  ----------
Logic.Kingdom:CalcASTroopStrength+1d0: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
Logic.Kingdom:CalcASTroopStrength+1d4: F2 0F 5C C1                    - subsd xmm0,xmm1
Logic.Kingdom:CalcASTroopStrength+1d8: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
Logic.Kingdom:CalcASTroopStrength+1dc: F3 0F 11 AD 4C FF FF FF        - movss [rbp-000000B4],xmm5
Logic.Kingdom:CalcASTroopStrength+1e4: F3 0F 10 85 4C FF FF FF        - movss xmm0,[rbp-000000B4]
Logic.Kingdom:CalcASTroopStrength+1ec: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Logic.Kingdom:CalcASTroopStrength+1f0: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
Logic.Kingdom:CalcASTroopStrength+1f4: F3 0F 11 6D B4                 - movss [rbp-4C],xmm5
Logic.Kingdom:CalcASTroopStrength+1f9: 49 8B 44 24 10                 - mov rax,[r12+10]
Logic.Kingdom:CalcASTroopStrength+1fe: 48 8B C8                       - mov rcx,rax
}
</AssemblerScript>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>77</ID>
                          <Description>"Read kingdom ID from "Selected owned city""</Description>
                          <VariableType>Auto Assembler Script</VariableType>
                          <AssemblerScript>[ENABLE]
{$lua}
--NO_ACTIVATE
if syntaxcheck then return end
local kid = 0
kid = readInteger('i_kingdom_id')
writeInteger('i_kingdom_id4', kid)

[DISABLE]
{$lua}
if syntaxcheck then return end


</AssemblerScript>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>76</ID>
                          <Description>"Set kingdom ID (must):"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>C08000</Color>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_kingdom_id4</Address>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>78</ID>
                          <Description>"min. HP damage ratio (0.01-0.9)"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>C08000</Color>
                          <VariableType>Float</VariableType>
                          <Address>vf_min_hp</Address>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>87</ID>
                      <Description>"Set player siege attack/defense (may not working)"</Description>
                      <Options moHideChildren="1"/>
                      <VariableType>Auto Assembler Script</VariableType>
                      <AssemblerScript>{ Game   : Sovereign.exe
  Version: 
  Date   : 2024-01-10
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_SIEGE_DEFENSE,Logic.Battle:get_castle_defender_bonus+147,Logic.Battle:get_castle_defender_bonus+247,F3 0F 10 8E 44 02 00 00 F3 0F 5A C9 F2 0F 5C) // should be unique
alloc(newmem,$1000,INJECT_SIEGE_DEFENSE)

label(code)
label(return)
label(i_kingdom_id5)

newmem:
  cmp dword ptr [i_kingdom_id5], #99999
  je code
  push r15
  mov r15d, [i_kingdom_id5]
  cmp [rsi+90], r15d
  jne chk_player_is_attacker
  vmovss xmm14, [rsi+254] //initial_resilience
  vmovss xmm15, [vf_100]
  vcomiss xmm14, xmm15
  jae next1
  vmovss xmm14, [vf_100]

next1:
  vmovss [rsi+258], xmm14 //resilience

  vmovss xmm14, [rsi+24C] //initial_siege_defense_pre_condition
  vmovss [rsi+244], xmm14 //siege_defense
  jmp endp

chk_player_is_attacker:
  mov r15, [rsi+D0] // attacker
  test r15, r15
  jz endp
  mov r15d, [r15+90] // kingdom_id
  cmp r15d, [i_kingdom_id5]
  jne endp

  // player is attacker
  vmovss xmm14, [vf_1]
  vmovss xmm15, [rsi+244] //siege_defense
  vcomiss xmm15, xmm14
  jbe next2_1
  vmovss [rsi+244], xmm14

next2_1:
  vmovss xmm15, [rsi+258] //resilience
  vcomiss xmm15, xmm14
  jbe endp
  vmovss [rsi+258], xmm14

endp:
  pop r15


code:
  movss xmm1,[rsi+00000244]
  jmp return
align 10 cc
  i_kingdom_id5:
  dd #99999
  vf_100:
  dd (float)100
  vf_250:
  dd (float)250
  vf_1:
  dd (float)1

INJECT_SIEGE_DEFENSE:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_SIEGE_DEFENSE)
registersymbol(i_kingdom_id5)

[DISABLE]

INJECT_SIEGE_DEFENSE:
  db F3 0F 10 8E 44 02 00 00

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Logic.Battle:get_castle_defender_bonus+153

Logic.Battle:get_castle_defender_bonus+11d: 48 8B 80 90 00 00 00           - mov rax,[rax+00000090]
Logic.Battle:get_castle_defender_bonus+124: F3 0F 10 88 8C 00 00 00        - movss xmm1,[rax+0000008C]
Logic.Battle:get_castle_defender_bonus+12c: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
Logic.Battle:get_castle_defender_bonus+130: F2 0F 5C C1                    - subsd xmm0,xmm1
Logic.Battle:get_castle_defender_bonus+134: F2 0F 11 45 C8                 - movsd [rbp-38],xmm0
Logic.Battle:get_castle_defender_bonus+139: F3 0F 10 45 F4                 - movss xmm0,[rbp-0C]
Logic.Battle:get_castle_defender_bonus+13e: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Logic.Battle:get_castle_defender_bonus+142: F2 0F 11 45 C0                 - movsd [rbp-40],xmm0
Logic.Battle:get_castle_defender_bonus+147: F3 0F 10 86 4C 02 00 00        - movss xmm0,[rsi+0000024C]
Logic.Battle:get_castle_defender_bonus+14f: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
// ---------- INJECTING HERE ----------
Logic.Battle:get_castle_defender_bonus+153: F3 0F 10 8E 44 02 00 00        - movss xmm1,[rsi+00000244]
// ---------- DONE INJECTING  ----------
Logic.Battle:get_castle_defender_bonus+15b: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
Logic.Battle:get_castle_defender_bonus+15f: F2 0F 5C C1                    - subsd xmm0,xmm1
Logic.Battle:get_castle_defender_bonus+163: F2 0F 10 0D 65 00 00 00        - movsd xmm1,[Logic.Battle:get_castle_defender_bonus+1d0]
Logic.Battle:get_castle_defender_bonus+16b: 66 66 90                       - nop 3
Logic.Battle:get_castle_defender_bonus+16e: 49 BB 90 E1 E3 64 7C 01 00 00  - mov r11,System.Math:Pow
Logic.Battle:get_castle_defender_bonus+178: 41 FF D3                       - call r11
Logic.Battle:get_castle_defender_bonus+17b: F2 0F 10 E0                    - movsd xmm4,xmm0
Logic.Battle:get_castle_defender_bonus+17f: F2 0F 10 45 D8                 - movsd xmm0,[rbp-28]
Logic.Battle:get_castle_defender_bonus+184: F2 0F 10 4D D0                 - movsd xmm1,[rbp-30]
Logic.Battle:get_castle_defender_bonus+189: F2 0F 10 55 C8                 - movsd xmm2,[rbp-38]
}
</AssemblerScript>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>89</ID>
                          <Description>"Read kingdom ID from "Selected owned city""</Description>
                          <VariableType>Auto Assembler Script</VariableType>
                          <AssemblerScript>[ENABLE]
{$lua}
--NO_ACTIVATE
if syntaxcheck then return end
local kid = 0
kid = readInteger('i_kingdom_id')
writeInteger('i_kingdom_id5', kid)

[DISABLE]
{$lua}
if syntaxcheck then return end


</AssemblerScript>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>88</ID>
                          <Description>"Set kingdom ID (must):"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>C08000</Color>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_kingdom_id5</Address>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>105</ID>
                      <Description>"Fast structure building"</Description>
                      <Options moHideChildren="1"/>
                      <VariableType>Auto Assembler Script</VariableType>
                      <AssemblerScript Async="1">{ Game   : Sovereign.exe
  Version: 
  Date   : 2024-01-11
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanregion(INJECT_FAST_BUILD,Logic.Castle+Build:Update+220,Logic.Castle+Build:Update+430,F3 0F 11 6E 2C F3 0F 10 46) // should be unique
alloc(newmem,$1000,INJECT_FAST_BUILD)

label(code)
label(return)
label(i_kingdom_id6)
newmem:
  cmp dword ptr [i_kingdom_id6], #99999
  je code

  push r15
  mov r15, [rsi+10] // Owner
  test r15, r15
  jz endp

  mov r15d, [r15+90] // kingdom_id
  cmp r15d, [i_kingdom_id6]
  jne endp

  vmovss xmm5, [vf_1000000]

endp:
  pop r15

code:
  movss [rsi+2C],xmm5
  jmp return
align 10 cc
  i_kingdom_id6:
  dd #99999
  vf_1000000:
  dd (float)1000000

INJECT_FAST_BUILD:
  jmp newmem
return:
registersymbol(INJECT_FAST_BUILD)
registersymbol(i_kingdom_id6)
[DISABLE]

INJECT_FAST_BUILD:
  db F3 0F 11 6E 2C

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Logic.Castle+Build:Update+234

Logic.Castle+Build:Update+203: 83 38 00                       - cmp dword ptr [rax],00
Logic.Castle+Build:Update+206: 49 BB 80 84 36 FF F2 01 00 00  - mov r11,Logic.Resource:get_Item
Logic.Castle+Build:Update+210: 41 FF D3                       - call r11
Logic.Castle+Build:Update+213: F3 0F 5A C8                    - cvtss2sd xmm1,xmm0
Logic.Castle+Build:Update+217: F2 0F 10 45 C8                 - movsd xmm0,[rbp-38]
Logic.Castle+Build:Update+21c: F3 0F 10 15 CC 00 00 00        - movss xmm2,[Logic.Castle+Build:Update+2f0]
Logic.Castle+Build:Update+224: F3 0F 5A D2                    - cvtss2sd xmm2,xmm2
Logic.Castle+Build:Update+228: F2 0F 59 CA                    - mulsd xmm1,xmm2
Logic.Castle+Build:Update+22c: F2 0F 58 C1                    - addsd xmm0,xmm1
Logic.Castle+Build:Update+230: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
// ---------- INJECTING HERE ----------
Logic.Castle+Build:Update+234: F3 0F 11 6E 2C                 - movss [rsi+2C],xmm5
// ---------- DONE INJECTING  ----------
Logic.Castle+Build:Update+239: F3 0F 10 46 2C                 - movss xmm0,[rsi+2C]
Logic.Castle+Build:Update+23e: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Logic.Castle+Build:Update+242: F3 0F 10 4E 28                 - movss xmm1,[rsi+28]
Logic.Castle+Build:Update+247: F3 0F 5A C9                    - cvtss2sd xmm1,xmm1
Logic.Castle+Build:Update+24b: F2 0F 5E C1                    - divsd xmm0,xmm1
Logic.Castle+Build:Update+24f: F2 0F 5A E8                    - cvtsd2ss xmm5,xmm0
Logic.Castle+Build:Update+253: F3 0F 11 6E 30                 - movss [rsi+30],xmm5
Logic.Castle+Build:Update+258: F3 0F 10 46 30                 - movss xmm0,[rsi+30]
Logic.Castle+Build:Update+25d: F3 0F 5A C0                    - cvtss2sd xmm0,xmm0
Logic.Castle+Build:Update+261: F3 0F 10 0D 77 00 00 00        - movss xmm1,[Logic.Castle+Build:Update+2e0]
}
</AssemblerScript>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>107</ID>
                          <Description>"Read kingdom ID from "Selected owned city""</Description>
                          <VariableType>Auto Assembler Script</VariableType>
                          <AssemblerScript>[ENABLE]
{$lua}
--NO_ACTIVATE
if syntaxcheck then return end
local kid = 0
kid = readInteger('i_kingdom_id')
writeInteger('i_kingdom_id6', kid)

[DISABLE]
{$lua}
if syntaxcheck then return end


</AssemblerScript>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>106</ID>
                          <Description>"Set kingdom ID (must):"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>C08000</Color>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_kingdom_id6</Address>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
                <CheatEntry>
                  <ID>55</ID>
                  <Description>"1. Click on owned city"</Description>
                  <Color>8000FF</Color>
                  <GroupHeader>1</GroupHeader>
                </CheatEntry>
                <CheatEntry>
                  <ID>56</ID>
                  <Description>"2. Move cursor over "Stored food" label around bottom-right"</Description>
                  <Color>8000FF</Color>
                  <GroupHeader>1</GroupHeader>
                </CheatEntry>
                <CheatEntry>
                  <ID>60</ID>
                  <Description>"Data+"</Description>
                  <Options moHideChildren="1"/>
                  <GroupHeader>1</GroupHeader>
                  <CheatEntries>
                    <CheatEntry>
                      <ID>43</ID>
                      <Description>"nid"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>78</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>50</ID>
                      <Description>"uid"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>7C</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>51</ID>
                      <Description>"flags"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>80</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>52</ID>
                      <Description>"kingdom_id"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>FF8080</Color>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>90</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>53</ID>
                      <Description>"position"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>94</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>44</ID>
                      <Description>"population [198]"</Description>
                      <GroupHeader>1</GroupHeader>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>21</ID>
                          <Description>"pop_acc"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>Float</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>30</Offset>
                            <Offset>198</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>48</ID>
                          <Description>"rebelion_acc"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>FF8080</Color>
                          <VariableType>Float</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>34</Offset>
                            <Offset>198</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>47</ID>
                          <Description>"workers"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>38</Offset>
                            <Offset>198</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>45</ID>
                          <Description>"rebels"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>FF8080</Color>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>3C</Offset>
                            <Offset>198</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>46</ID>
                          <Description>"last_calc_frame"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>40</Offset>
                            <Offset>198</Offset>
                          </Offsets>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>91</ID>
                      <Description>"name-&gt;Value"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>String</VariableType>
                      <Length>20</Length>
                      <Unicode>1</Unicode>
                      <CodePage>0</CodePage>
                      <ZeroTerminate>1</ZeroTerminate>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>14</Offset>
                        <Offset>160</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>57</ID>
                      <Description>"&lt;level&gt;k__BackingField"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>124</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>90</ID>
                      <Description>"fortifications (1B0)"</Description>
                      <GroupHeader>1</GroupHeader>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>96</ID>
                          <Description>"level"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>30</Offset>
                            <Offset>1B0</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>94</ID>
                          <Description>"state"</Description>
                          <ShowAsSigned>1</ShowAsSigned>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>34</Offset>
                            <Offset>1B0</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>49</ID>
                          <Description>"production_cost"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>FF8080</Color>
                          <VariableType>Float</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>38</Offset>
                            <Offset>1B0</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>92</ID>
                          <Description>"current_production_amount"</Description>
                          <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">20000:20000
</DropDownList>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>FF8080</Color>
                          <VariableType>Float</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>3C</Offset>
                            <Offset>1B0</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>93</ID>
                          <Description>"current_progress"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>FF8080</Color>
                          <VariableType>Float</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>40</Offset>
                            <Offset>1B0</Offset>
                          </Offsets>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>97</ID>
                      <Description>"structure_build (1C0)"</Description>
                      <GroupHeader>1</GroupHeader>
                      <CheatEntries>
                        <CheatEntry>
                          <ID>98</ID>
                          <Description>"production_cost"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>FF8080</Color>
                          <VariableType>Float</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>28</Offset>
                            <Offset>1C0</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>99</ID>
                          <Description>"current_production_amount"</Description>
                          <DropDownList DescriptionOnly="1" DisplayValueAsItem="1">20000:20000
</DropDownList>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>FF8080</Color>
                          <VariableType>Float</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>2C</Offset>
                            <Offset>1C0</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>100</ID>
                          <Description>"current_progress"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <Color>FF8080</Color>
                          <VariableType>Float</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>30</Offset>
                            <Offset>1C0</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>101</ID>
                          <Description>"prefered_slot_index"</Description>
                          <ShowAsSigned>1</ShowAsSigned>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>34</Offset>
                            <Offset>1C0</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>102</ID>
                          <Description>"keep_progress"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>Byte</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>38</Offset>
                            <Offset>1C0</Offset>
                          </Offsets>
                        </CheatEntry>
                        <CheatEntry>
                          <ID>103</ID>
                          <Description>"state"</Description>
                          <ShowAsSigned>0</ShowAsSigned>
                          <VariableType>4 Bytes</VariableType>
                          <Address>i_base_castle_addr</Address>
                          <Offsets>
                            <Offset>38</Offset>
                            <Offset>1C0</Offset>
                          </Offsets>
                        </CheatEntry>
                      </CheatEntries>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>38</ID>
                      <Description>"razedPenaltyPerc"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>128</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>34</ID>
                      <Description>"siege_defense_garrison_manpower"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>12C</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>39</ID>
                      <Description>"siege_defense_temp_defender_manpower"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>130</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>35</ID>
                      <Description>"levy_manpower"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>134</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>36</ID>
                      <Description>"levy_squads"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>138</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>37</ID>
                      <Description>"excess_levy_manpower"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>13C</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>33</ID>
                      <Description>"town_guard_squads"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>140</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>40</ID>
                      <Description>"excess_town_guard_manpower"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>144</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>41</ID>
                      <Description>"worker_squads"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>148</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>42</ID>
                      <Description>"excess_worker_manpower"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>14C</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>32</ID>
                      <Description>"building_slots_tier"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>1F8</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>31</ID>
                      <Description>"max_citadel_levels"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>1FC</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>23</ID>
                      <Description>"max_level"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>200</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>24</ID>
                      <Description>"rebelion_risk"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>FF8080</Color>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>204</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>22</ID>
                      <Description>"food_storage"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <Color>FF8080</Color>
                      <VariableType>Float</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>208</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>25</ID>
                      <Description>"citadel_level"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>4 Bytes</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>20C</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>26</ID>
                      <Description>"init_structures"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>210</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>27</ID>
                      <Description>"sacked"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>211</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>28</ID>
                      <Description>"sack_damage"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>214</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>29</ID>
                      <Description>"initial_sack_damage"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Float</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>218</Offset>
                      </Offsets>
                    </CheatEntry>
                    <CheatEntry>
                      <ID>30</ID>
                      <Description>"quick_recovery"</Description>
                      <ShowAsSigned>0</ShowAsSigned>
                      <VariableType>Byte</VariableType>
                      <Address>i_base_castle_addr</Address>
                      <Offsets>
                        <Offset>21C</Offset>
                      </Offsets>
                    </CheatEntry>
                  </CheatEntries>
                </CheatEntry>
              </CheatEntries>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>54</ID>
      <Description>"(2024/01/12) Knights of Honor II: Sovereign 1.6.0  /  https://opencheattables.com  /  CE 7.5+"</Description>
      <Color>00AE57</Color>
      <GroupHeader>1</GroupHeader>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
  <LuaScript>--lua scripts that table checkbox will not be checked with "NO_ACTIVATE" in comment
function onMemRecPostExecute(memoryrecord, newState, succeeded )
    if memoryrecord.Type == vtAutoAssembler and memoryrecord.Script:find("NO_ACTIVATE") and newState and succeeded then
        memoryrecord.disableWithoutExecute()
    end
end

</LuaScript>
</CheatTable>
