312
"[X] <== Crusader Kings III v1.7.2 Steam Script v2.15"
FF0000
Auto Assembler Script
{
===========================================
Game Title : Crusader Kings III
Game Version : 1.7.2 (Steam)
Game Sponsor : PF
Process Name : ck3.exe
Relevant Info : New Engine/64bits/RTS with pause
Script Version: 2.15
CE Version : 7.4
Release date : 02-Oct-2022
Author : Recifense
History:
03-Sep-2020: Preliminary Release (s0.5)
07-Sep-2020: Preliminary Release (s0.7)(fixes and new features)
10-Sep-2020: Preliminary Release (s0.8)(Province Control and some changes)
12-Sep-2020: First Release (s1.0)(v1.0.3)
15-Sep-2020: GM for troops sieging (attacker)/Attrition (s1.1)
18-Sep-2020: New approach for GM during Army/Army battle +Selected Dynasty (s1.2)
30-Sep-2020: Release for version 1.1.1 (s1.3)
01-Oct-2020: Release for version 1.1.2 (s1.4)
15-Oct-2020: Release for version 1.1.3 (s1.5)
26-Nov-2020: Release for version 1.2.1 (s1.6)
07-Dec-2020: Release for version 1.2.2 (s1.7)
17-Mar-2021: Release for version 1.3.0 (s2.0)
23-Mar-2021: Release for version 1.3.1 (s2.1)
08-Jun-2021: Release for version 1.4.0 (s2.2)
22-Jun-2021: Release for version 1.4.2 (s2.3)
29-Jun-2021: Release for version 1.4.4 (s2.4)
15-Feb-2022: Release for version 1.5.0.1 (s2.5) preliminary
16-Feb-2022: Release for version 1.5.0.1 (s2.5) preliminary2
17-Feb-2022: Release for version 1.5.0.2 (s2.6) preliminary
07-Mar-2022: Some improvement and fixes (s2.7)
13-Mar-2022: Release for version 1.5.1 (s2.8) + fixes/Improvement
22-Mar-2022: Release for version 1.5.1.1 (s2.9)
02-Jun-2022: Release for version 1.6.0 (s2.10)
09-Jun-2022: Release for version 1.6.0.1 (s2.11)
22-Jun-2022: Release for version 1.6.1.1 (s2.12)
29-Jun-2022: Release for version 1.6.1.2 (s2.13)
15-Sep-2022: Release for version 1.7.1 (s2.14)
02-Oct-2022: Release for version 1.7.2 (s2.15)
Features:
- Minimum Money (7000)
- Minimum Renown (7000)
- Minimum Piety (5000)
- Minimum Prestige (7000)
- Construction in 1 Days
- Include Vassals' Provinces
- Quick Movement (to adjacent area)
- God Mode (Army Combat)
- Weak Foe (Army Combat)
- Fill up Troop Size (on sel) (s0.7)
- Quick Siege Prog (Attacker) (s0.7)
- Province Full Control (s0.8) (on Sel)
- Include Vassals' Provinces
- Delay Siege Progress (players' provinces)
- Include Vassals' Provinces
- Minimum Cultural Innovation Progress (99%)
+ Quick Cultural Innovation Progress
- God Mode (Army Attrition) (s1.1)
- Full Army Supply (on Sel) (new)(S2.5)
- Some Pointers
===========================================
}
//=========================================
// Checking CE version
{$lua}
if(getCEVersion() < 7.0) then
ShowMessage('Sorry. CE version should be 7.0 or above')
end
{$asm}
//=========================================
// Checking Selected Process
{$lua}
if(process == nil) then
ShowMessage('No process was selected')
elseif (string.upper(process) ~= string.upper("ck3.exe")) then
ShowMessage('Warning. Expected Process = ck3.exe')
end
{$asm}
//=========================================
{$lua}
-- monoAA_USEMONO(process,false)
if waitForPDB then --this way older CE versions are unaffected (By Dark Byte)
waitForPDB()
end
{$asm}
//=========================================
// Definitions
define(LUDO,ck3.exe)
// v1.7.2 Steam
define(MOHP,ck3.exe+00C4FF94) //#=========#=======#=
define(MOPD,ck3.exe+00D06200) //==========#=========
define(MOSC,ck3.exe+00614DF0) //===#======#=======#= (Char)
define(MOSP,ck3.exe+008ADD70) //#==#=#=#==X====#==#=
define(MOAM,ck3.exe+00E6BB3B) //===#======X=======#=
define(MOPI,ck3.exe+005D0AA7) //#==#======#========= 14 1
define(MOSA,ck3.exe+008CFFC3) //===#======#=======#=
define(MSIP,ck3.exe+00F4C76C) //#==#=#====#==#======
define(MS2P,ck3.exe+00F4C88B) //------------N#======
define(MOTS,ck3.exe+008D010E) //===#======#====#====
define(MOCI,ck3.exe+00F80E57) //==========#=X=======
define(GDM3,ck3.exe+00E6206C) //===X===#==X========= (s1.1)
define(GDM4,ck3.exe+01076970) //#==###====X========= (s1.2)
define(GDM5,ck3.exe+010787F0) //-------------N=#==#= (s2.8)
define(MOSD,ck3.exe+00D08045) //==========X=======#= (s1.2)
define(MOPC,ck3.exe+00D2935D) //------------N==#==#=
define(MCI2,ck3.exe+00AE7613) //===X======PPPPPPPPPP
//----
define(CLTL,ck3.exe+034C29F8) //pCLandedTitleListStr 1.7.2
define(CCUL,ck3.exe+034C2C30) //pCCultureListStr 1.7.2
define(CCHL,ck3.exe+034C29E8) //pCCharacterListStr 1.7.2
define(CFAL,ck3.exe+034C2A08) //pCFaithListStr 1.7.2
define(CTRL,ck3.exe+034C2B48) //pCTraitList (Common) 1.7.2
define(CREL,ck3.exe+034C2A28) //pCReligionListStr 1.7.2 (s1.3)
define(CARL,ck3.exe+034C2E38) //pCArmyListStr 1.7.2
define(CARE,ck3.exe+03724BA8) //pCArmyRegimentList 1.7.2 (s2.8)
//[ck3.exe+34C2E40] ==> TPdxRefDatabase<CCombat,8> 1.7.2
//[ck3.exe+34C2C28] ==> TPdxRefDatabase<CRegiment,8> 1.7.2
//[ck3.exe+34C2C20] ==> TPdxRefDatabase<CUnit,8> 1.7.2
//[ck3.exe+34C2A20] ==> TPdxRefDatabase<CDynasty,8> 1.7.2
//[ck3.exe+3724490] ==> TPdxRefDatabase<CSiege,8> 1.7.2
//=========================================
// Constants used in the script (that can be changed)
define(ctCE70,(float)7.4)
//=========================================
[ENABLE]
//=========================================
//LuaCall(CheckVersion())
//=========================================
// Check if script is compatible to this game version
// If false the script will not be loaded
assert(MOHP,48 8B 81 38 01 00 00 48 85 C0 74 22 48 63 80 80 02 00 00 48 69 C8 A0 86 01 00) //x
assert(MOPD,48 8B 81 70 01 00 00 48 89 02 48 8B C2 C3 CC CC) //=
assert(MOSC,48 8B B8 90 00 00 00 48 63 80 9C 00 00 00 48 8D 2C 87 48 3B FD ??) //x
assert(MOSP,4C 8B A0 88 04 00 00 4C 89 AC 24 80 00 00 00 4C 89 7C 24 40 44 8B FE) //x
assert(MOAM,48 8B 7C 24 50 48 39 BE 60 01 00 00 7F ?? E8 ?? ?? ?? ?? 80 78 09 00) //x
assert(MOPI,8B C8 81 E1 FF FF FF 00 41 3B 48 2C 73 ?? 8B D1 48 03 D2 49 8B 48 20 48 8B 6C D1 08) //=
assert(MOSA,48 8B 5F 20 48 63 4F 2C 48 8D 3C 8B 48 3B FB 0F 84 ?? ?? ?? ?? 0F 1F) //x
assert(MSIP,48 8B 4E 50 48 03 08 48 89 4E 30 48 81 C4 88 00 00 00 5E 5B C3 ?? ??) //=
assert(MS2P,FF C0 89 87 C0 00 00 00 40 38 B7 CD 00 00 00 0F 84 ?? ?? ?? ?? 40 38) //=
assert(MOTS,48 8B 44 C8 08 48 85 C0 74 ?? 39 50 10 74 ?? 48 8B 05 ?? ?? ?? ?? 83 B8 20 01 00 00 02) //=
assert(MOCI,48 81 79 18 80 96 98 00 74 ?? 33 D2 48 8B 5C 24 30 48 83 C4 20 5F ??) //=
//assert(MCI2,8B 41 1C 4C 8D 41 18 41 8B 10 81 FA A0 86 01 00 74 ?? 03 D0 41 89)
assert(GDM3,48 69 C0 A0 86 01 00 48 89 51 08 48 3B D0 7C ?? 83 79 18 FF 75 ??) //=
assert(GDM4,48 8B D1 33 C9 48 89 8A A0 00 00 00 4C 8B 42 28 48 63 42 34 4C 8D) //=
assert(GDM5,4C 89 44 24 18 48 89 4C 24 08 55 56 57 48 81 EC 80 00 00 00 48 8B 81 98 00 00 00) //x
assert(MOSD,48 8B 99 70 01 00 00 03 05 ?? ?? ?? ?? 48 98 4C 69 D8 A0 86 01 00 4D 85 DB) //x
assert(MOPC,48 89 8B 88 00 00 00 80 7F 28 00 74 ?? 48 8B 47 08 48 89 83 98 00 00 00) //x
//=========================================
alloc(MyCode,4096,$process)
//=========================================
// Declaration section
label(_MonHumanPlayer)
label(_BackMHP)
label(_MonPlayerDynasty)
label(_BackMPD)
label(_MonSelChar)
label(_BackMSC)
label(_MonSelProv)
label(_BackMSP)
label(_MonArmyMove)
label(_BackMAM)
label(_MonPlayerID)
label(_BackMPI)
label(_MonSelArmy)
label(_BackMSA)
label(_MonSiegeProg)
label(_BackSIP)
label(_MonTroopSize)
label(_BackMTS)
label(_MonCultInno)
label(_BackMCI)
label(_MonCultInno2)
label(_BackCI2)
label(_GodMode3)
label(_BackGM3)
label(_GodMode4)
label(_BackGM4)
label(_MonSelDynasty)
label(_BackMSD)
label(iEnableMPG)
label(iEnableMPR)
label(iEnableMPC)
label(iEnableMPP)
label(iEnableMPY)
label(iEnableMAM)
label(iEnableGMD)
label(iEnableMWF)
label(iEnableMTS)
label(iEnableMSP)
label(iEnablePFC)
label(iEnablePCV)
label(iEnableVFC)
label(iEnablePSP)
label(iEnablePSI)
label(iEnableMCI)
label(iEnableRSY)
label(iCommon)
label(iPlayerID)
label(pMainChar)
label(pMainProv)
label(pDynasty)
label(pSelChar)
label(pSelProv)
label(pCombat)
label(pUnit)
label(pSelArmy)
label(pSelDyna)
label(pCCulList)
label(pCFaiList)
label(pCTraList)
label(pCRelList)
label(iCount)
label(iCount1)
//=========================================
// Registering Symbols
registersymbol(MyCode)
registersymbol(iEnableMPG)
registersymbol(iEnableMPR)
registersymbol(iEnableMPC)
registersymbol(iEnableMPP)
registersymbol(iEnableMPY)
registersymbol(iEnableMAM)
registersymbol(iEnableGMD)
registersymbol(iEnableMWF)
registersymbol(iEnableMTS)
registersymbol(iEnableMSP)
registersymbol(iEnablePFC)
registersymbol(iEnablePCV)
registersymbol(iEnableVFC)
registersymbol(iEnablePSP)
registersymbol(iEnablePSI)
registersymbol(iEnableMCI)
registersymbol(iEnableRSY)
registersymbol(iCommon)
registersymbol(iPlayerID)
registersymbol(iCount)
registersymbol(iCount1)
registersymbol(pMainChar)
registersymbol(pMainProv)
registersymbol(pDynasty)
registersymbol(pSelChar)
registersymbol(pSelProv)
registersymbol(pCombat)
registersymbol(pUnit)
registersymbol(pSelArmy)
registersymbol(pSelDyna)
registersymbol(pCCulList)
registersymbol(pCFaiList)
registersymbol(pCTraList)
registersymbol(pCRelList)
//=========================================
MyCode:
//========================================= v1.7.1 *
// All the time
// RBX is safe
_MonHumanPlayer:
// xchg rcx,r14
mov [pRBX],rbx
mov eax,[rcx+18]
cmp eax,[iPlayerID]
jne _ExitMHP
mov rbx,[rcx+00000138]
test rbx,rbx
jz _ExitMHP
mov [pMainChar],rcx
mov rax,[rbx+00000208]
mov [pMainProv],rax
mov eax,[rcx+000000D8]
mov [iCommon],eax
cmp dword ptr [iEnableMPG],0
je _MonHP01 // Jump if feature is disabled
mov rax,#700000000
cmp [rbx+00000250],rax
jns _MonHP01
mov [rbx+00000250],rax
_MonHP01:
cmp dword ptr [iEnableMPY],0
je _MonHP02 // Jump if feature is disabled
mov eax,#50000000
cmp [rbx+000000E8],eax
jns _MonHP02
mov [rbx+000000E8],eax
_MonHP02:
cmp dword ptr [iEnableMPP],0
je _ExitMHP // Jump if feature is disabled
mov eax,#70000000
cmp [rbx+00000100],eax
jns _ExitMHP
mov [rbx+00000100],eax
_ExitMHP:
// xchg rcx,r14
mov rbx,[pRBX]
mov rax,[rcx+00000138] // Original code (ppCProvince)
jmp _BackMHP // Back to main code
//========================================= v1.7.1 ok
// All the time
_MonPlayerDynasty:
mov eax,[iPlayerID]
cmp eax,[rcx+000000C8]
jne _ExitMPD
mov [pDynasty],rcx
cmp dword ptr [iEnableMPR],0
je _ExitMPD // Jump if feature is disabled
mov rax,#700000000
cmp [rcx+00000170],rax
jns _ExitMPD
mov [rcx+00000170],rax
_ExitMPD:
mov rax,[rcx+00000170] // Original code
jmp _BackMPD // Back to main code
//========================================= v1.7.1 *
// When a character is selected (displaying details)
_MonSelChar:
mov [pSelChar],rax
_ExitMSC:
mov rdi,[rax+00000090] // Original code
jmp _BackMSC // Back to main code
//========================================= v1.7.1 *
// When a province is selected (on sel)
// RAX is safe
_MonSelProv:
mov [pSelProv],rax
xchg r12,rax
mov rax,[r12+00000488]
test rax,rax
jz _ExitMSP
mov eax,[rax+18]
call _GetLandOwner
test eax,eax
js _ExitMSP
cmp eax,[iPlayerID]
jne _ExitMSP
mov rax,[r12+00000488]
mov dword ptr [rax+00000268],#10000000
_ExitMSP:
xchg r12,rax
mov r12,[rax+00000488] // Original code (CCountyData)
jmp _BackMSP // Back to main code
//========================================= v1.7.1 *
// When updating movement progress (CUnit)
_MonArmyMove:
cmp dword ptr [iEnableMAM],0
je _ExitMAM // Jump if feature is disabled
mov edi,[rsi+0000016C]
cmp edi,[iPlayerID]
jne _ExitMAM
mov [pUnit],rsi
mov rdi,[rsp+50]
inc rdi
inc rdi
cmp [rsi+00000160],rdi
jns _ExitMAM
mov [rsi+00000160],rdi
_ExitMAM:
mov rdi,[rsp+50] // Original code
cmp [rsi+00000160],rdi // Original code
jmp _BackMAM // Back to main code
//========================================= v1.7.1 ok
// All the time (Find Main Char ID)
_MonPlayerID:
cmp [iPlayerID],eax
je _MonPI00
mov [iPlayerID],eax
inc dword ptr [iCount]
_MonPI00:
mov rcx,CCUL
mov rcx,[rcx]
mov [pCCulList],rcx
mov rcx,CFAL
mov rcx,[rcx]
mov [pCFaiList],rcx
mov rcx,CTRL
mov rcx,[rcx]
mov [pCTraList],rcx
mov rcx,CREL
mov rcx,[rcx]
mov [pCRelList],rcx
_ExitMPI:
mov ecx,eax // Original code
and ecx,00FFFFFF // Original code
jmp _BackMPI // Back to main code
//========================================= v1.7.1 *
// When an army is selected (add Supply)(CArmy)
_MonSelArmy:
mov [pSelArmy],rdi
mov ebx,55555555
mov [iSelArmyID],eax
mov ebx,[iPlayerID]
cmp ebx,[rdi+000000C0]
jne _ExitMSA
mov ebx,[rdi+10]
mov [iSelArmyID],ebx
cmp dword ptr [iEnableRSY],0
je _ExitMSA // Jump if feature is disabled
mov ebx,#10000000
mov [rdi+00000120],ebx
_ExitMSA:
mov rbx,[rdi+20] // Original code
movsxd rcx,dword ptr [rdi+2C] // Original code
jmp _BackMSA // Back to main code
//========================================= v1.7.1 ok
// When siege prog is updated (CSiege)
// RBX is safe
_MonSiegeProg:
xchg rax,rbx
cmp [rsi+38],FFFFFFFF
je _ExitSIP
mov eax,[rsi+38]
call _GetArmyOwner
lea rax,[rax]
cmp eax,[iPlayerID]
jne _MonSI00
// player
cmp dword ptr [iEnableMSP],0
je _ExitSIP // Jump if feature is disabled
mov rax,#6553600 // 200
cmp [rsi+50],rax
jns _MonSIZ0
mov [rsi+50],rax
_MonSIZ0:
mov rax,[rbx]
add rax,rax
add rax,rax
add rax,rax
add rax,rax
add rax,rax
mov [rbx],rax
// mov [rsi+000000BC],1
jmp _ExitSIP
//--
_MonSI00:
cmp dword ptr [iEnablePSP],0
je _ExitSIP // Jump if feature is disabled
mov rax,[rsi+40]
test rax,rax
jz _ExitSIP
mov rax,[rax+00000480]
test rax,rax
jz _ExitSIP
mov eax,[rax+18]
call _GetLandOwner
test eax,eax
js _ExitSIP
cmp eax,[iPlayerID]
jne _ExitSIP
xor rax,rax
mov [rsi+50],rax
mov [rsi+30],rax
mov [rbx],rax
mov [rsi+000000BC],#5
dec [rsi+000000C0]
_ExitSIP:
xchg rax,rbx
mov rcx,[rsi+50] // Original code
add rcx,[rax] // Original code
jmp _BackSIP // Back to main code
//========================================= v1.7.1 ok (v2.7)
// When siege prog is updated (defending) (CSiege)
// RBX is safe
_MonSiegeProg2:
push rbx
xchg rax,rbx
cmp [rdi+38],FFFFFFFF
je _ExitS2P
mov eax,[rdi+38]
call _GetArmyOwner
lea rax,[rax]
cmp eax,[iPlayerID]
je _ExitS2P
cmp dword ptr [iEnablePSP],0
je _ExitS2P // Jump if feature is disabled
mov rax,[rdi+40]
test rax,rax
jz _ExitS2P
mov rax,[rax+00000480]
test rax,rax
jz _ExitS2P
mov eax,[rax+18]
call _GetLandOwner
test eax,eax
js _ExitS2P
cmp eax,[iPlayerID]
jne _ExitS2P
cmp [rdi+000000BC],#5
js _MonS202
mov [rdi+000000BC],#5
_MonS202:
dec ebx
_ExitS2P:
xchg rax,rbx
pop rbx
inc eax // Original code
mov [rdi+000000C0],eax // Original code
jmp _BackS2P // Back to main code
//========================================= v1.7.1 ok
// When an army is selected (Fillup Troops)(CRegiment)
_MonTroopSize:
mov [pRAX],rbx
mov [pRDI],rdi
mov [pRSI],rsi
mov rsi,rax // pCRL
mov rax,[rax+rcx*8+08] // Original code
test rax,rax // Original code
jz _ExitMTS
cmp [rax+10],edx
jne _ExitMTS
cmp dword ptr [iEnableMTS],0
je _ExitMTS // Jump if feature is disabled
mov ebx,[rax+0000011C]
cmp ebx,[iPlayerID]
je _MonTS00
mov eax,[rax+30]
call _GetArmRegByID
test rax,rax
js _ExitMTS
mov rdi,rax
mov eax,[rdi+000000C0] // ArmyID
call _GetArmyOwner
test rax,rax
js _ExitMTS
cmp eax,[iPlayerID]
jne _ExitMTS
_MonTS00:
mov rax,[rsi+rcx*8+08]
mov rbx,[rax+18]
imul rbx,rbx,#100000
mov [rax+20],rbx // CReg
mov [rdi+38],rbx // CAReg
_ExitMTS:
mov rax,rsi // pCRL
mov rbx,[pRAX]
mov rdi,[pRDI]
mov rsi,[pRSI]
mov rax,[rax+rcx*8+08] // Original code
test rax,rax // Original code
jmp _BackMTS // Back to main code
//========================================= v1.7.1 ok
// When looking at Culture Innovations (99%)
// RDI is safe
_MonCultInno:
cmp dword ptr [iEnableMCI],0
je _ExitMCI // Jump if feature is disabled
mov edi,[rbx+000006C8]
cmp edi,[iPlayerID]
jne _ExitMCI
mov edi,#9900000
cmp [rcx+18],edi
jns _MonCI00
mov [rcx+18],edi
_MonCI00:
mov edi,#110000
cmp [rcx+20],edi
jns _ExitMCI
mov [rcx+40],edi
_ExitMCI:
cmp qword ptr [rcx+18],00989680 // Original code
jmp _BackMCI // Back to main code
//========================================= v1.2.1 X
// When updating progress (Depends on the code above)
_MonCultInno2:
mov eax,000186A0
cmp [rcx+18],eax
jns _ExitCI2
cmp dword ptr [iEnableMCI],0
je _ExitCI2 // Jump if feature is disabled
mov rax,[rcx+08]
test rax,rax
jz _ExitCI2
mov eax,[rax+00000120]
cmp eax,[iPlayerID]
jne _ExitCI2
mov eax,#99000
cmp [rcx+18],eax
js _ExitCI2
mov eax,#1100
cmp [rcx+1C],eax
jns _ExitCI2
mov [rcx+1C],eax
_ExitCI2:
mov eax,[rcx+1C] // Original code
lea r8,[rcx+18] // Original code
jmp _BackCI2 // Back to main code
//========================================= v1.7.1 ok (s2.8)
// When updating army size (sieging attack)
// RCX = CRegiment+18
_GodMode3:
mov [pRDX],rbx
mov [pRCX],rsi
imul rax,rax,000186A0 // Original code
mov rbx,rax
cmp dword ptr [iEnableGMD],0
je _ExitGM3 // Jump if feature is disabled
mov eax,[rcx+00000104]
cmp eax,[iPlayerID]
je _GodMD30
test eax,eax
jns _ExitGM3
mov eax,[rcx+18] // CAR ID
test eax,eax
js _ExitGM3
call _GetArmRegByID
test rax,rax
js _ExitGM3
mov rsi,rax
mov eax,[rsi+000000C0]
call _GetArmyOwner
cmp eax,[iPlayerID]
jne _ExitGM3
_GodMD30:
mov rdx,rbx
_ExitGM3:
mov rax,rbx
mov rbx,[pRDX]
mov rsi,[pRCX]
mov [rcx+08],rdx // Original code
jmp _BackGM3 // Back to main code
//========================================= v1.7.1 ok (s1.2)
// When updating troop size (army to army)(CCombat)
_GodMode4:
cmp dword ptr [iEnableGMD],0
je _ExitGM4 // Jump if feature is disabled
xor rax,rax
cmp [rcx+00000098],rax
je _ExitGM4
mov eax,[rcx+70]
cmp eax,[iPlayerID]
jne _ExitGM4
inc dword ptr [iCount4]
ret
//--
_ExitGM4:
mov rdx,rcx // Original code (CCombat+20 or +90)
xor ecx,ecx // Original code
jmp _BackGM4 // Back to main code
//========================================= v1.7.1 # (s2.8)
// When updating troop size (army to army)(CCombat)
_GodMode5:
cmp dword ptr [iEnableGMD],0
je _ExitGM5 // Jump if feature is disabled
xor rax,rax
cmp [rcx+00000098],rax
je _ExitGM5
mov eax,[rcx+70]
cmp eax,[iPlayerID]
jne _ExitGM5
ret
//--
_ExitGM5:
mov [rsp+18],r8 // Original code
jmp _BackGM5 // Back to main code
//========================================= v1.6.0 ok (s1.2)
// When a nynasty is selected
_MonSelDynasty:
mov [pSelDyna],rcx
_ExitMSD:
mov r8,[rcx+00000170] // Original code (get R)
jmp _BackMSD // Back to main code
//========================================= v1.7.0 x
// When a construction is set in player's province
// RAX is safe
_MonPlayerConst:
mov [pRBP],rbp
mov [rbx+00000088],rcx // Original code (RBX = Base Const)
mov rbp,[rbx+000000C8] // Get Prov
test rbp,rbp
jz _ExitMPC
mov rax,[rbp+00000488] // Get More Info
test rax,rax
jz _ExitMPC
mov eax,[rax+18]
call _GetLandOwner
test eax,eax
js _ExitMPC
cmp eax,[iPlayerID]
jne _ExitMPC
cmp dword ptr [iEnableMPC],0
je _ExitMPC // Jump if feature is disabled
mov rax,[rbx+70] // pType
test rax,rax
jz _MonSP00
mov eax,[rbx+00000088]
test eax,eax
jz _MonSP00
mov eax,#100000
cmp [rbx+00000088],eax
js _MonSP00
mov [rbx+00000088],eax
_MonSP00:
_ExitMPC:
mov rbp,[pRBP]
jmp _BackMPC // Back to main code
//=========================================
// Functions
//========================================= v1.5.0.1 #
// Get Land Owner
// EAX = LandTitleIndex / Out: Land Owner ID
_GetLandOwner:
mov [pRBXb],rbx
mov [pRCXb],rcx
mov [pRDXb],rdx
mov ecx,eax
and ecx,00FFFFFF
mov rbx,CLTL
mov rbx,[rbx]
test rbx,rbx
jz _ExitGLOE
cmp ecx,[rbx+3C]
jns _ExitGLOE
mov rdx,[rbx+20]
test rdx,rdx
jz _ExitGLOE
add rcx,rcx
mov rcx,[rdx+rcx*8+08]
test rcx,rcx
jz _ExitGLOE
cmp eax,[rcx+10]
jne _ExitGLOE
mov [pSelTitle],rcx
mov eax,[rcx+00000148]
jmp _ExitGLOO
//--
_ExitGLOE:
mov rax,-1
_ExitGLOO:
mov rbx,[pRBXb]
mov rcx,[pRCXb]
mov rdx,[pRDXb]
ret
//========================================= v1.5.0.1 #
// Get CArmy Owner
// EAX = Army ID / Out: Army Owner ID
_GetArmyOwner:
mov [pRBXa],rbx
mov [pRCXa],rcx
mov [pRDXa],rdx
mov ecx,eax
and ecx,00FFFFFF
mov rbx,CARL
mov rbx,[rbx]
test rbx,rbx
jz _ExitGAOE
cmp ecx,[rbx+3C]
jns _ExitGAOE
mov rdx,[rbx+20]
test rdx,rdx
jz _ExitGAOE
add rcx,rcx
mov rcx,[rdx+rcx*8+08]
test rcx,rcx
jz _ExitGAOE
cmp eax,[rcx+10]
jne _ExitGAOE
mov eax,[rcx+000000C0]
jmp _ExitGAOO
//--
_ExitGAOE:
mov rax,-1
_ExitGAOO:
mov rbx,[pRBXa]
mov rcx,[pRCXa]
mov rdx,[pRDXa]
ret
//========================================= v1.5.0.1 #
// Get CCharacter by ID
// EAX = Char ID / Out: RAX = CCharacter
_GetCharByID:
mov [pRBXc],rbx
mov [pRCXc],rcx
mov [pRDXc],rdx
mov ecx,eax
and ecx,00FFFFFF
mov rbx,CCHL
mov rbx,[rbx]
test rbx,rbx
jz _ExitGCIE
cmp ecx,[rbx+3C]
jns _ExitGCIE
mov rdx,[rbx+20]
test rdx,rdx
jz _ExitGCIE
add rcx,rcx
mov rcx,[rdx+rcx*8+08]
test rcx,rcx
jz _ExitGCIE
cmp eax,[rcx+18]
jne _ExitGCIE
mov rax,rcx
jmp _ExitGCIO
//--
_ExitGCIE:
mov rax,-1
_ExitGCIO:
mov rbx,[pRBXc]
mov rcx,[pRCXc]
mov rdx,[pRDXc]
ret
//========================================= v1.5.1 (s2.8 new)
// Get CArmyRegiment by ID
// EAX = Char ID / Out: RAX = CArmyRegiment
_GetArmRegByID:
mov [pRBXd],rbx
mov [pRCXd],rcx
mov [pRDXd],rdx
mov ecx,eax
and ecx,00FFFFFF
mov rbx,CARE
mov rbx,[rbx]
test rbx,rbx
jz _ExitGARE
cmp ecx,[rbx+3C]
jns _ExitGARE
mov rdx,[rbx+20]
test rdx,rdx
jz _ExitGARE
add rcx,rcx
mov rcx,[rdx+rcx*8+08]
test rcx,rcx
jz _ExitGARE
cmp eax,[rcx+10]
jne _ExitGARE
mov rax,rcx
jmp _ExitGARO
//--
_ExitGARE:
mov rax,-1
_ExitGARO:
mov rbx,[pRBXd]
mov rcx,[pRCXd]
mov rdx,[pRDXd]
ret
//========================================= v11.5.0.1 PENDING
// Check if Character has a Vassal Contract with Player
// RAX = CCharacter / Out: RAX = -1 (false)
_ChkPlayersVassal:
mov [pRCXv],rcx
jmp _ExitCPVE
mov rcx,rax
mov rcx,[rcx+00000140]
test rcx,rcx
jz _ExitCPVE
mov rcx,[rcx+000000D8]
test rcx,rcx
jz _ExitCPVE
mov rax,[rcx+20]
cmp rax,[pMainChar]
je _ExitCPVO
_ExitCPVE:
mov rax,-1
_ExitCPVO:
mov rcx,[pRCXv]
ret
//=========================================
align 10,'='
//=========================================
db '===============================>'
db 'CE7.4 Script by Recifense 221002'
//=========================================
// Variables
iEnableMPG:
dq 0
iEnableMPR:
dq 0
iEnableMPC:
dq 0
iEnableMPP:
dq 0
iEnableMPY:
dq 0
iEnableMAM:
dq 0
iEnableGMD:
dq 0
iEnableMWF:
dq 0
iEnableMTS:
dq 0
iEnableMSP:
dq 0
iEnablePFC:
dq 0
iEnablePCV:
dq 0
iEnableVFC:
dq 0
iEnablePSP:
dq 0
iEnablePSI:
dq 0
iEnableMCI:
dq 0
iEnableRSY:
dq 0
iCommon:
dq 55999999
iPlayerID:
dq 55999999
iCount:
dq 0
iCount1:
dq 0
iCount2:
dq 0
iCount3:
dq 0
iCount4:
dq 0
iFlagVassal:
dq 0
iSelArmyID:
dq 55555555
pMainChar:
dq MyCode
pMainProv:
dq 0
pDynasty:
dq 0
pSelChar:
dq 0
pSelProv:
dq 0
pSelTitle:
dq 0
pCombat:
dq 0
pCombat2:
dq 0
pUnit:
dq 0
pSelArmy:
dq 0
pSelDyna:
dq 0
pCCulList:
dq 0
pCFaiList:
dq 0
pCTraList:
dq 0
pCRelList:
dq 0
pRAX:
dq 0
pRBP:
dq 0
pRBX:
dq 0
pRCX:
dq 0
pRDX:
dq 0
pRSI:
dq 0
pRDI:
dq 0
pRBXa:
dq 0
pRCXa:
dq 0
pRDXa:
dq 0
pRBXb:
dq 0
pRCXb:
dq 0
pRDXb:
dq 0
pRBXc:
dq 0
pRCXc:
dq 0
pRDXc:
dq 0
pRBXd:
dq 0
pRCXd:
dq 0
pRDXd:
dq 0
pRCXv:
dq 0
pRBXg:
dq 0
pRDXg:
dq 0
pBack:
dq 0
//=========================================
// Hacking Points
MOHP:
jmp _MonHumanPlayer
nop
nop
_BackMHP:
MOPD:
jmp _MonPlayerDynasty
nop
nop
_BackMPD:
MOSC:
jmp _MonSelChar
nop
nop
_BackMSC:
MOSP:
jmp _MonSelProv
nop
nop
_BackMSP:
MOAM:
jmp _MonArmyMove
jmp _MonArmyMove
nop
nop
_BackMAM:
MOPI:
jmp _MonPlayerID
nop
nop
nop
_BackMPI:
MOSA:
jmp _MonSelArmy
nop
nop
nop
_BackMSA:
MSIP:
jmp _MonSiegeProg
nop
nop
_BackSIP:
MS2P:
jmp _MonSiegeProg2
nop
nop
nop
_BackS2P:
MOTS:
jmp _MonTroopSize
nop
nop
nop
_BackMTS:
MOCI:
jmp _MonCultInno
nop
nop
nop
_BackMCI:
MCI2:
// jmp _MonCultInno2
// nop
// nop
_BackCI2:
GDM3:
jmp _GodMode3
jmp _GodMode3
nop
_BackGM3:
GDM4:
jmp _GodMode4
_BackGM4:
GDM5:
jmp _GodMode5
_BackGM5:
MOSD:
jmp _MonSelDynasty
nop
nop
_BackMSD:
MOPC:
jmp _MonPlayerConst
nop
nop
_BackMPC:
//=========================================
// Script for Restoring Original Codes
[DISABLE]
MOHP:
db 48 8B 81 38 01 00 00
MOPD:
db 48 8B 81 70 01 00 00
MOSC:
db 48 8B B8 90 00 00 00
MOSP:
db 4C 8B A0 88 04 00 00
MOAM:
db 48 8B 7C 24 50 48 39 BE 60 01 00 00
MOPI:
db 8B C8 81 E1 FF FF FF 00
MOSA:
db 48 8B 5F 20 48 63 4F 2C
MSIP:
db 48 8B 4E 50 48 03 08
MS2P:
db FF C0 89 87 C0 00 00 00
MOTS:
db 48 8B 44 C8 08 48 85 C0
MOCI:
db 48 81 79 18 80 96 98 00
//MCI2:
// db 8B 41 1C 4C 8D 41 18
GDM3:
db 48 69 C0 A0 86 01 00 48 89 51 08
GDM4:
db 48 8B D1 33 C9
GDM5:
db 4C 89 44 24 18
MOSD:
db 48 8B 99 70 01 00 00
MOPC:
db 48 89 8B 88 00 00 00
//=========================================
// Unregistering Symbols
unregistersymbol(MyCode)
unregistersymbol(iEnableMPG)
unregistersymbol(iEnableMPR)
unregistersymbol(iEnableMPC)
unregistersymbol(iEnableMPP)
unregistersymbol(iEnableMPY)
unregistersymbol(iEnableMAM)
unregistersymbol(iEnableGMD)
unregistersymbol(iEnableMWF)
unregistersymbol(iEnableMTS)
unregistersymbol(iEnableMSP)
unregistersymbol(iEnablePFC)
unregistersymbol(iEnablePCV)
unregistersymbol(iEnableVFC)
unregistersymbol(iEnablePSP)
unregistersymbol(iEnablePSI)
unregistersymbol(iEnableMCI)
unregistersymbol(iEnableRSY)
unregistersymbol(iCommon)
unregistersymbol(iPlayerID)
unregistersymbol(iCount)
unregistersymbol(iCount1)
unregistersymbol(pMainChar)
unregistersymbol(pMainProv)
unregistersymbol(pDynasty)
unregistersymbol(pSelChar)
unregistersymbol(pSelProv)
unregistersymbol(pCombat)
unregistersymbol(pUnit)
unregistersymbol(pSelArmy)
unregistersymbol(pSelDyna)
unregistersymbol(pCCulList)
unregistersymbol(pCFaiList)
unregistersymbol(pCTraList)
unregistersymbol(pCRelList)
//=========================================
dealloc(MyCode)
//============= Scripts End ===============
// ****************************************
// NOTES
// ****************************************
{
}
229
"[X] <== Minimum Money"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPG",1)
memrec.Color = 0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPG",0)
memrec.Color = 0x00c08000
{$ASM}
325
"[X] <== Minimum Renown"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPR",1)
memrec.Color = 0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPR",0)
memrec.Color = 0x00c08000
{$ASM}
327
"[X] <== Minimum Prestige"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPP",1)
memrec.Color = 0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPP",0)
memrec.Color = 0x00c08000
{$ASM}
328
"[X] <== Minimum Piety"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPY",1)
memrec.Color = 0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPY",0)
memrec.Color = 0x00c08000
{$ASM}
452
"[X] <== Construction in 1 Day"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPC",1)
memrec.Color = 0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPC",0)
memrec.Color = 0x00c08000
{$ASM}
332
"[X] <== Quick Movement "
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMAM",1)
memrec.Color = 0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMAM",0)
memrec.Color = 0x00c08000
{$ASM}
341
"[X] <== God Mode"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableGMD",1)
memrec.Color = 0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableGMD",0)
memrec.Color = 0x00c08000
{$ASM}
359
"[X] <== Fill up Troops (on Sel) (it takes a while to update display) "
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMTS",1)
memrec.Color = 0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMTS",0)
memrec.Color = 0x00c08000
{$ASM}
361
"[X] <== Quick Siege (Attacker)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMSP",1)
memrec.Color = 0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMSP",0)
memrec.Color = 0x00c08000
{$ASM}
456
"[X] <== Delay Siege Progress (Defender) "
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnablePSP",1)
memrec.Color = 0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnablePSP",0)
memrec.Color = 0x00c08000
{$ASM}
454
"[X] <== Province Control at 100% (on selecting)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnablePFC",1)
memrec.Color = 0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnablePFC",0)
memrec.Color = 0x00c08000
{$ASM}
458
"[X] <== Minimum/Quick Cultural Innovation Progress (Open, at least once, the culture Tab)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMCI",1)
memrec.Color = 0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMCI",0)
memrec.Color = 0x00c08000
{$ASM}
681
"[X] <== Full Army Supply (on selecting)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableRSY",1)
memrec.Color = 0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableRSY",0)
memrec.Color = 0x00c08000
{$ASM}
583
"[X] <== Some Useful Pointers"
404080
1
584
"<== Main Character"
FF00FF
1
585
"Name (Just for Identifying)"
4080FF
String
16
0
0
1
pMainChar
20
586
"Culture ID ==> "
0000FF
4 Bytes
pMainChar
78
587
"Faith ID ==> "
0000FF
4 Bytes
pMainChar
7C
588
"Piety ==> (x10000)"
0
0000FF
8 Bytes
pMainChar
E8
138
589
"Devotion Progress ==> (x10000)"
0
0000FF
8 Bytes
pMainChar
F0
138
590
"Prestige ==> (x10000)"
0
0000FF
8 Bytes
pMainChar
100
138
591
"Fame Progress ==> (x10000)"
0
0000FF
8 Bytes
pMainChar
108
138
592
"Health 01 ==> (x1)"
0
0000FF
8 Bytes
pMainChar
270
138
593
"Health 02 ==> (x1)"
0
0000FF
8 Bytes
pMainChar
278
138
594
"Health 03 ==> (x1)"
0
0000FF
8 Bytes
pMainChar
310
138
595
"Fertility 01 ==> (x1)"
0
0000FF
8 Bytes
pMainChar
268
138
596
"Fertility 02 ==> (x1)"
0
0000FF
8 Bytes
pMainChar
308
138
597
"Fertility 03 ==> (x1)"
0
0000FF
8 Bytes
pMainChar
260
138
598
"Gold ==> (x100000)"
0
0000FF
8 Bytes
pMainChar
250
138
599
"[X] <== More Info"
FF00FF
1
600
"Base Diplomacy ==> "
0000FF
Byte
pMainChar
80
601
"Base Martial ==> "
0000FF
Byte
pMainChar
81
602
"Base Stewardship ==> "
0000FF
Byte
pMainChar
82
603
"Base Intrigue ==> "
0000FF
Byte
pMainChar
83
604
"Base Learning ==> "
0000FF
Byte
pMainChar
84
605
"Base Prowess ==> "
0000FF
Byte
pMainChar
85
606
"Born Year ==> "
0000FF
2 Bytes
pMainChar
66
607
"[X] <== Trait ID List"
FF00FF
1
608
"Number of Valid Traits (DONNOT CHANGE IT)"
0080FF
4 Bytes
pMainChar
9C
609
"Trait 01"
0
0000FF
4 Bytes
pMainChar
0
90
610
"Trait 02"
0
0000FF
4 Bytes
pMainChar
4
90
611
"Trait 03"
0
0000FF
4 Bytes
pMainChar
8
90
612
"Trait 04"
0
0000FF
4 Bytes
pMainChar
C
90
613
"Trait 05"
0
0000FF
4 Bytes
pMainChar
10
90
614
"Trait 06"
0
0000FF
4 Bytes
pMainChar
14
90
615
"Trait 07"
0
0000FF
4 Bytes
pMainChar
18
90
616
"Trait 08"
0
0000FF
4 Bytes
pMainChar
1C
90
617
"[X] <=== More Traits (to add more, just copy/paste previous entry and add 4)"
FF80FF
1
618
"Trait 09"
0
0000FF
4 Bytes
pMainChar
20
90
619
"Trait 10"
0
0000FF
4 Bytes
pMainChar
20+4
90
620
"Trait 11"
0
0000FF
4 Bytes
pMainChar
20+4+4
90
621
"Trait 12"
0
0000FF
4 Bytes
pMainChar
20+4+4+4
90
622
"Trait 13"
0
0000FF
4 Bytes
pMainChar
20+4+4+4+4
90
623
"Trait 14"
0
0000FF
2 Bytes
pMainChar
20+4+4+4+4+4
90
624
"[X] <== Life Style Info"
FF00FF
1
625
"Focus Starting Year ==>"
0
FF80FF
2 Bytes
pMainChar
16
218
138
626
"Focus Starting Month (-1) ==>"
0
FF80FF
Byte
pMainChar
15
218
138
627
"Focus Starting Day (-1) ==>"
0
FF80FF
Byte
pMainChar
14
218
138
628
"Number of Valid Life Styles (DONNOT CHANGE IT)"
0
FF8080
4 Bytes
pMainChar
19C
138
629
"Life Style Progress [1] ==> (x100000) (*)"
0
0000FF
8 Bytes
pMainChar
8
190
138
630
"Life Style Progress [2] ==> (x100000) (*)"
0
0000FF
8 Bytes
pMainChar
18
190
138
631
"Life Style Progress [3] ==> (x100000) (*)"
0
0000FF
8 Bytes
pMainChar
28
190
138
632
"Life Style Progress [4] ==> (x100000) (*)"
0
0000FF
8 Bytes
pMainChar
38
190
138
633
"Life Style Progress [5] ==> (x100000) (*)"
0
0000FF
8 Bytes
pMainChar
48
190
138
634
"(*) note: Every accumulated 100000000 is a point."
8080FF
1
635
"Ex.: 2999500000 => 2 Points available and current progress = 999.5"
8080FF
1
636
"<== Main Dynasty"
FF00FF
1
637
"Player's Renown ==> (x100000)"
0
0000FF
8 Bytes
pDynasty
170
638
"Player's Splendor Progress ==> (x100000)"
0
0000FF
8 Bytes
pDynasty
178
639
"<== Selected Province"
FF00FF
1
640
"Development ==> (x1)"
0
0000FF
4 Bytes
pSelProv
258
488
641
"Control ==> (x1000)"
0
0000FF
4 Bytes
pSelProv
268
488
416
"Development Progress ==> (x1000)"
0
0000FF
4 Bytes
pSelProv
25C
488
642
"Culture ID ==> "
0
0000FF
4 Bytes
pSelProv
254
488
383
"Faith ID ==> "
0
0000FF
4 Bytes
pSelProv
250
488
643
"Days to finish current Construction ==> (x1000)"
0
0000FF
4 Bytes
pSelProv
3E8
514
"<== Selected Dynasty"
FF00FF
1
522
"Renown ==> (x1000)"
0
0000FF
8 Bytes
pSelDyna
170
521
"Splendor Progress ==> (x1000)"
0
0000FF
8 Bytes
pSelDyna
178
644
"<== Selected Character"
FF00FF
1
645
"Name (Just for Identifying)"
4080FF
String
16
0
0
1
pSelChar
20
646
"Culture ID ==> "
0000FF
4 Bytes
pSelChar
78
647
"Faith ID ==> "
0000FF
4 Bytes
pSelChar
7C
648
"Piety ==> (x100000)"
0
0000FF
8 Bytes
pSelChar
E8
138
427
"Devotion Progress ==> (x1000)"
0
0000FF
8 Bytes
pSelChar
F0
138
649
"Prestige ==> (x100000)"
0
0000FF
8 Bytes
pSelChar
100
138
650
"Fame Progress ==> (x100000)"
0
0000FF
8 Bytes
pSelChar
108
138
503
"Health 01 ==> (x1)"
0
0000FF
8 Bytes
pSelChar
270
138
504
"Health 02 ==> (x1)"
0
0000FF
8 Bytes
pSelChar
278
138
505
"Health 03 ==> (x1)"
0
0000FF
8 Bytes
pSelChar
310
138
506
"Fertility 01 ==> (x1)"
0
0000FF
8 Bytes
pSelChar
268
138
508
"Fertility 02 ==> (x1)"
0
0000FF
8 Bytes
pSelChar
308
138
509
"Fertility 03 ==> (x1)"
0
0000FF
8 Bytes
pSelChar
260
138
507
"Gold ==> (x32768)"
0
0000FF
8 Bytes
pSelChar
250
138
387
"[X] <== More Info"
FF00FF
1
409
"Base Diplomacy ==> "
0000FF
Byte
pSelChar
80
411
"Base Martial ==> "
0000FF
Byte
pSelChar
81
410
"Base Stewardship ==> "
0000FF
Byte
pSelChar
82
412
"Base Intrigue ==> "
0000FF
Byte
pSelChar
83
413
"Base Learning ==> "
0000FF
Byte
pSelChar
84
414
"Base Prowess ==> "
0000FF
Byte
pSelChar
85
651
"Born Year ==> "
0000FF
2 Bytes
pSelChar
66
399
"[X] <== Trait ID List"
FF00FF
1
400
"Number of Valid Traits (DONNOT CHANGE IT)"
0080FF
4 Bytes
pSelChar
9C
401
"Trait 01"
0
0000FF
2 Bytes
pSelChar
0
90
402
"Trait 02"
0
0000FF
2 Bytes
pSelChar
4
90
403
"Trait 03"
0
0000FF
2 Bytes
pSelChar
8
90
404
"Trait 04"
0
0000FF
2 Bytes
pSelChar
0c
90
405
"Trait 05"
0
0000FF
2 Bytes
pSelChar
10
90
406
"Trait 06"
0
0000FF
2 Bytes
pSelChar
14
90
407
"Trait 07"
0
0000FF
2 Bytes
pSelChar
18
90
408
"Trait 08"
0
0000FF
2 Bytes
pSelChar
1C
90
479
"[X] <=== More Traits (to add more, just copy/paste previous entry and add 2)"
FF80FF
1
480
"Trait 09"
0000FF
2 Bytes
pSelChar
10
90
483
"Trait 10"
0000FF
2 Bytes
pSelChar
10+2
90
482
"Trait 11"
0000FF
2 Bytes
pSelChar
10+2+2
90
481
"Trait 12"
0000FF
2 Bytes
pSelChar
10+2+2+2
90
484
"Trait 13"
0000FF
2 Bytes
pSelChar
10+2+2+2+2
90
485
"Trait 14"
0000FF
2 Bytes
pSelChar
10+2+2+2+2+2
90
491
"[X] <== Life Style Info"
FF00FF
1
492
"Focus Starting Year ==>"
0
FF80FF
2 Bytes
pSelChar
16
208
138
496
"Focus Starting Month (-1) ==>"
0
FF80FF
Byte
pSelChar
15
218
138
497
"Focus Starting Day (-1) ==>"
0
FF80FF
Byte
pSelChar
14
218
138
502
"Number of Valid Life Styles (DONNOT CHANGE IT)"
0
FF8080
4 Bytes
pSelChar
19C
138
495
"Life Style Progress [1] ==> (x100000) (*)"
0
0000FF
4 Bytes
pSelChar
8
190
138
498
"Life Style Progress [2] ==> (x100000) (*)"
0
0000FF
4 Bytes
pSelChar
18
190
138
499
"Life Style Progress [3] ==> (x100000) (*)"
0
0000FF
4 Bytes
pSelChar
28
190
138
500
"Life Style Progress [4] ==> (x100000) (*)"
0
0000FF
4 Bytes
pSelChar
38
190
138
501
"Life Style Progress [5] ==> (x100000) (*)"
0
0000FF
4 Bytes
pSelChar
48
190
138
493
"(*) note: Every accumulated 1000000000 is a point."
8080FF
1
494
"Ex.: 2999500 => 2 Points available and current progress = 999.5"
8080FF
1
381
"[X] <== Tools"
FF00FF
1
304
"[X] <=== Generate a Current Game Culture List (only after starting/loading a game)"
FF00FF
Auto Assembler Script
[enable]
{$LUA}
pArea = readPointer("pCCulList")
pList = readPointer(pArea+32)
iNumb = readInteger(pArea+56)
print("Culture ID List: ",iNumb)
print("=======================================")
for i=0,iNumb do
p = readPointer(pList+i*16+8)
-- q = readPointer(p+48)
id= readInteger(p+16)
if (p ~= nil) then
if (readInteger(p+536) < 16) then ps = p+520 else ps = readPointer(p+520) end
s = readString(ps)
print(string.format("%04i",id)," ",s)
else
print(string.format("%04i",i)," No Name")
end
end
print("=======================================")
{$ASM}
[disable]
382
"[X] <=== Generate a Current Game Faith List (Idem)"
FF00FF
Auto Assembler Script
[enable]
{$LUA}
pArea = readPointer("pCFaiList")
pList = readPointer(pArea+32)
iNumb = readInteger(pArea+56)
print("Faith ID List: ",iNumb)
print("RG = Religion Group (See Religion List)")
print("=======================================")
for i=0,iNumb do
p = readPointer(pList+i*16+8)
id= readInteger(p+8)
rg= readInteger(p+28)
if (readInteger(p+352) < 16) then ps0 = p+336 else ps0 = readPointer(p+336) end
if (readInteger(p+208) < 16) then ps1 = p+192 else ps1 = readPointer(p+192) end
s0 = readString(ps0)
s1 = readString(ps1)
print(string.format("%04i",id)," ",s0,"\t\t => ",s1,"\t RG => ",rg)
end
print("=======================================")
{$ASM}
[disable]
386
"[X] <=== Generate a Current Game Common Trait List (Idem)"
FF00FF
Auto Assembler Script
[enable]
{$LUA}
pArea = readPointer("pCTraList")
pList = readPointer(pArea+104)
iNumb = readInteger(pArea+116)
print("Common Trait ID List: ",iNumb)
print("Format: Index + Name")
print("=======================================")
for i=0,iNumb-1 do
p = readPointer(pList+i*8)
id= readInteger(p+16)
if (readInteger(p+40) < 16) then ps0 = p+24 else ps0 = readPointer(p+24) end
s0 = readString(ps0)
if (id == 4294967295) then s0 = "Not Defined" end
print(string.format("%04i",i)," ",s0)
end
print("=======================================")
{$ASM}
[disable]
582
"[X] <=== Generate a Current Game Religion List (Idem)"
FF00FF
Auto Assembler Script
[enable]
{$LUA}
pArea = readPointer("pCRelList")
pList = readPointer(pArea+32)
iNumb = readInteger(pArea+56)
print("Religion ID List: ",iNumb+1)
print("=======================================")
for i=0,iNumb do
p = readPointer(pList+i*16+8)
id= readInteger(p+8)
if (readInteger(p+104) < 16) then ps0 = p+88 else ps0 = readPointer(p+88) end
if (readInteger(p+152) < 16) then ps1 = p+136 else ps1 = readPointer(p+136) end
s0 = readString(ps0)
s1 = readString(ps1)
print(string.format("%04i",id)," ",s0,"\t\t => ",s1)
end
print("=======================================")
{$ASM}
[disable]
228
"[X] <== Table/Script Information"
0000FF
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
getMainForm().CommentButton.doClick()
{$ASM}
[disable]
Recifense
20221002
===========================================
Game Title : Crusader Kings III
Game Version : 1.7.2 (Steam)
Game Sponsor : PF
Process Name : ck3.exe
Relevant Info : New Engine/64bits/RTS with pause
Script Version: 2.15
CE Version : 7.4
Release date : 02-Oct-2022
Author : Recifense
History:
03-Sep-2020: Preliminary Release (s0.5)
07-Sep-2020: Preliminary Release (s0.7)(fixes and new features)
10-Sep-2020: Preliminary Release (s0.8)(Province Control and some changes)
12-Sep-2020: First Release (s1.0)(v1.0.3)
15-Sep-2020: GM for troops sieging (attacker)/Attrition (s1.1)
18-Sep-2020: New approach for GM during Army/Army battle +Selected Dynasty (s1.2)
30-Sep-2020: Release for version 1.1.1 (s1.3)
01-Oct-2020: Release for version 1.1.2 (s1.4)
15-Oct-2020: Release for version 1.1.3 (s1.5)
26-Nov-2020: Release for version 1.2.1 (s1.6)
07-Dec-2020: Release for version 1.2.2 (s1.7)
17-Mar-2021: Release for version 1.3.0 (s2.0)
23-Mar-2021: Release for version 1.3.1 (s2.1)
08-Jun-2021: Release for version 1.4.0 (s2.2)
22-Jun-2021: Release for version 1.4.2 (s2.3)
29-Jun-2021: Release for version 1.4.4 (s2.4)
15-Feb-2022: Release for version 1.5.0.1 (s2.5) preliminary
16-Feb-2022: Release for version 1.5.0.1 (s2.5) preliminary2
17-Feb-2022: Release for version 1.5.0.2 (s2.6) preliminary
07-Mar-2022: Some improvement and fixes (s2.7)
13-Mar-2022: Release for version 1.5.1 (s2.8) + fixes/Improvement
22-Mar-2022: Release for version 1.5.1.1 (s2.9)
02-Jun-2022: Release for version 1.6.0 (s2.10)
09-Jun-2022: Release for version 1.6.0.1 (s2.11)
22-Jun-2022: Release for version 1.6.1.1 (s2.12)
29-Jun-2022: Release for version 1.6.1.2 (s2.13)
15-Sep-2022: Release for version 1.7.1 (s2.14)
02-Oct-2022: Release for version 1.7.2 (s2.15)
Features:
- Minimum Money (7000) [1]
- Minimum Renown (7000) [2]
- Minimum Piety (5000) [3]
- Minimum Prestige (7000) [4]
- Construction in 1 Days [5]
- Include Vassals' Provinces [5.1] (s1.0)
- Quick Movement (to adjacent area) [6]
- God Mode (Army Combat) [7]
- Fill up Troop Size (on sel) [8] (s0.7)
- Quick Siege Prog (Attacker) [9] (s0.7)
- Province Full Control (on Sel) [A] (s0.8)
- Include Vassals' Provinces [A.1] (s1.0)
- Delay Siege Progress (players' provinces) [B] (s1.0)
- Include Vassals' Provinces [B.1] (s1.0)(*)(**)
- Minimum Cultural Innovation Progress (99%) [C] (s1.0)
+ Quick Cultural Innovation Progress [C+] (s1.0)
- God Mode (Army Attrition) [7.1] (s1.1)
- Full Army Supply (on Sel) (D) (new)(S2.5)
- Some Pointers
===========================================
[1] Minimum Money for Human Player Only (HPO);
[2] Minimum Renown for HPO;
[3] Minimum Piety for HPO;
[4] Minimum Prestige for HPO;
[5] For HP's Holdings;
[5.1]HP's Vassals' ones can be included;
[6] For HP's Armies;
[7] For HP's Armies; (Commanders can get hurt or die)(Knights can die)
[7.1]For HP's Armies during Attrition;
[8] When a HP's Army is selected; (it may tabke a while to update display)
[9] For HP's Armies only;
[A] For HP's controlled provinces (those that belong to YOU); (when selected)
[A.1]HP's Vassals' ones can be included;
[B] For HP's provinces only; ((those that belong to YOU))
[B.1]HP's Vassals' ones can be included; (*)(**)
[C] You should have a look at the Culture TAB, at least, once;
[C+] It will be concluded on the first update; (it depends on [C];
(*) It will not work, if it belong to a vassal's vassal;
(**) Remembeer to disable it when you are not at war. Or a vassal of yours will not conquer another province of another vassal of yours. :)
===========================================
[USAGE]
1) Run CE74 or greater;
2) Run Game;
3) Load the game process "ck3.exe" in CE;
4) Load this table and activate the main script;
5) Now Activate the script of each cheat you want to use;
6) Game On;
===========================================
[HOTKEYS]
- None defined
===========================================
[ADVICE]
When you can,save the game before starting using table/cheat. So you can always come back in case you don't like the result.
===========================================
[INFO]
Tested on Win 10 64bits
===========================================
[INFO]
Thank you PATRONS for provide the means for buying the game.
===========================================
Cheers!