3
"[X] <== Warhammer 3 Total War v2.1.1 (16218) Steam Script v4.5"
FF0000
Auto Assembler Script
{
===========================================
Game Title : Total War - Warhammer 3
Game Version : 2.1.1 (16218)
Game Sponsor : TPW (Travis) + PF (DLC)
Process Name : Warhammer3.exe
Relevant Info : 64bits/TBS/RTS
Script Version: 4.5
CE Version : 7.4
Release date : 08-Sep-2022
Author : Recifense
History:
20-Feb-2022: Preliminary Release (alfa) (s1.0)
23-Feb-2022: First Release (s2.0)
25-Feb-2022: Release for version 1.0.1 (s2.1)
12-Mar-2022: Fixes, improvement and new features (s2.2)
15-Mar-2022: Release for version 1.0.2 (s2.3)
19-Mar-2022: Fixes and improvement (s2.4)
20-Mar-2022: Fixes and improvement and a pointer (s2.5)
22-Mar-2022: New approaches (s3.0)
05-Apr-2022: Release for version 1.1.0 (s3.1)
17-Apr-2022: Fix for Unlimited Ammo (s3.2)
17-May-2022: Release for version 1.2.0 (s3.3)
25-May-2022: Release for version 1.2.0 (14425)(s3.4)
01-Jul-2022: Release for version 1.3.0 (14983)(s3.5)
10-Jul-2022: Release for version 1.3.1 (15212)(s3.6)
21-Jul-2022: Release for version 1.3.2 (15399)(s3.7)
26-Aug-2022: Release for version 2.0.0 (15717)(s4.0)(Major Changings)
29-Aug-2022: A fix and a new option (s4.1)
30-Aug-2022: A fix for "[X] <== Agents can Act Again" and Countable Spells (s4.2)
02-Sep-2022: New approach for action points (s4.3)
06-Sep-2022: Release for version 2.1.0 (16106)(s4.4)
08-Sep-2022: Release for version 2.1.1 (16218)(s4.5)
Features:
- Minimum Treasure
- Unlimited Action Points
- Recover Troop Size/Hero HP
- Research in 1 turn
- Recruitment in 1 turn
- Construction in 1 turn
- Minimum Public Control
- Minimum Pop Surplus
- Level almost complete (sel hero XP)
- Hero can Act Again
- God Mode for Auto-resolve battles
- Troops Quick Level Up
- Rites Cooldown in 1 turn
RTS
- God Mode (RTS)
- Full Ammo (RTS)
- Minimum Leadership (GM) (RTS)
- Fast Recover of Winds of Magic (RTS)
- Ever fresh units (RTS)
- Unlimited use of limited spells (RTS)
- Spell Quick Cooldown (RTS)
- Some Pointers
===========================================}
//=========================================
// Checking CE version
{$lua}
if(getCEVersion() < 7.0) then
ShowMessage('Warning. 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("Warhammer3.exe")) then
ShowMessage('Warning. Expected Process = Warhammer3.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,"Warhammer3.exe")
define(MOHP,Warhammer3.exe+030C9887) //========#==
define(MOAP,Warhammer3.exe+0175ED40) //========X== 4 4
define(MAP2,Warhammer3.exe+016A2C49) //===========
define(MAP3,Warhammer3.exe+017EDC20) //=========== 2 2
define(MAP4,Warhammer3.exe+01931005) //===========
define(MORP,Warhammer3.exe+01576338) //===========
define(MOTR,Warhammer3.exe+01AE97E5) //===========
define(COTR,Warhammer3.exe+01AE9410)
define(JOTR,Warhammer3.exe+01AE97FC)
define(MOCP,Warhammer3.exe+01932720) //===========
//-- 09
define(MOPC,Warhammer3.exe+01842394) //===========
define(MOPS,Warhammer3.exe+0359F22C) //========#==
define(MPS2,Warhammer3.exe+035C3606) //=========== 2 2
define(MOSH,Warhammer3.exe+0188A214) //===========
define(MOPF,Warhammer3.exe+03518104) //=========== 2 1
define(JOPF,Warhammer3.exe+03518113)
define(GMTB,Warhammer3.exe+0163B5B8) //========#==
define(MOSL,Warhammer3.exe+0188A1E0) //N==========
define(JOSL,Warhammer3.exe+0188A234)
//-- 16
define(GDMD,Warhammer3.exe+024E4010) //===========
define(MOTA,Warhammer3.exe+023ADAB3) //========#==
define(GDM2,Warhammer3.exe+023ACCC0) //===========
define(MOTU,Warhammer3.exe+02591BD0) //=X======#==
define(MOWM,Warhammer3.exe+02618D33) //========#==
//-- 21
define(MOSU,Warhammer3.exe+02319952) //#=======#== 2 2
define(MSCD,Warhammer3.exe+0228075A) //#=======#==
define(MSU2,Warhammer3.exe+01F89A1C) //PPPPPPPPPPP
define(MSC2,Warhammer3.exe+0228044C) //X=======#==
define(MOUS,Warhammer3.exe+025B83CA) //========#==
// Empires
define(MORC,Warhammer3.exe+01CC0BC5) //--------N==
define(MRC2,Warhammer3.exe+01CC0CD8) //--------N==
define(MPF2,Warhammer3.exe+03540B96) //--------N==
define(CPF2,Warhammer3.exe+012626C0)
define(MSH2,Warhammer3.exe+02FDA5BB) //--------N==
//=========================================
// Constants used in the script (that can be changed)
define(ctCE74,(float)7.4)
define(ctMMON,#70000) // Minimum Money
define(ctMINF,#70) // Minimum Influence
define(ctMFOO,#80) // Minimum Food
define(ctMSSR,#12) // Minimum Skaven Special Resources
define(ctMLSR,#500) // Minimum Lizard Special Resource
define(ctMAPS,(float)5.0) // OK
define(ctMAPE,(float)20.0) // OK
//=========================================
[ENABLE]
//=========================================
//LuaCall(CheckVersion())
//=========================================
// Check if script is compatible to this game version
// If false the script will not be loaded
assert(MOHP,4C 8B BA C0 01 00 00 49 8D 8F 20 02 00 00 E8 ?? ?? ?? ?? 8B F0 4C 8D) //w3 #
assert(MOAP,40 53 56 57 48 83 EC 20 48 8B F9 48 83 C1 14 E8 ?? ?? ?? ?? 48 8D 4F 14) //w3 X
assert(MAP2,0F 10 89 38 02 00 00 0F 11 4D D7 F2 0F 10 81 48 02 00 00 F2 0F 11 45) //W3 ok
assert(MAP3,89 54 24 10 53 48 83 EC 20 48 8B D9 0F 57 C9 48 8D 4C 24 40 E8 ?? ??) //W3 ok
assert(MAP4,F2 0F 2C C0 C1 E3 0A 0B D8 8B C3 F7 D8 41 0F 2F F9 0F 42 D8 29 1F E8) //W3 ok
assert(MORP,44 8B 4A 0C 45 03 C8 44 3B 49 5C 48 8B CB 0F 83 ?? ?? ?? ?? 44 89 4A) //W3 ok
assert(MOTR,E8 ?? ?? ?? ?? 85 C0 78 ?? 03 43 50 48 83 C4 20 5B C3 B8 FF FF FF FF) //W3 ok
assert(MOCP,FF 41 0C 8B 41 0C 3B 41 10 0F 93 C0 C3 CC CC CC ?? ?? ?? ?? ?? ?? ??) //W3 ok
assert(MOPC,41 8B 57 34 41 89 56 0C 41 83 7F 44 01 75 ?? 49 8B 0F 48 81 C1 90 00) //W3 ok
assert(MOPS,49 8B 00 49 8B C8 8B 92 B0 03 00 00 48 FF 60 70 C3 CC CC ?? ?? ?? ??) //W3 #
//-- 10
assert(MPS2,48 8B D9 0F 29 74 24 30 48 8B 49 20 0F 29 7C 24 20 0F 57 FF 48 85 C9) //W3
assert(MOSH,8B 41 4C 0F 57 C0 2B C2 0F 57 C9 44 2B CA F3 48 0F 2A C0 41 8B C1 F3) //W3
assert(MOPF,48 8B 56 20 3B 6A 20 75 06 48 83 C2 28 EB 1C 48 8B 4E 20 48 8D 54 24) //W3
assert(GMTB,48 8B 41 70 49 8B F0 48 8B DA 48 8B E9 80 B8 7E 04 00 00 00 75 ?? 8B) //W3
assert(MOSL,48 8B 41 10 48 85 C0 74 4B 8B 51 44 44 8B 41 48 41 3B D0 73 ?? 4C 8B) //W3
// RTS
assert(GDMD,44 8B 41 04 45 33 C9 44 2B C2 3B 51 04 45 0F 47 C1 44 89 41 04 8B 01) //W3 ok
assert(MOTA,B8 E8 3C 00 00 0F 44 C1 8B 0C 38 85 C9 0F 84 ?? ?? ?? ?? 83 7C 38 04) //W3 *
assert(GDM2,40 55 53 56 57 41 56 48 8D 6C 24 C9 48 81 EC B0 00 00 00 48 8B F9 33) //W3 #
assert(MOTU,48 8B 81 D8 02 00 00 48 85 C0 74 08 0F B6 80 94 3C 00 00 C3 C3 CC CC) //W3 #
assert(MOWM,F3 42 0F 58 74 B3 14 0F 57 C0 0F 2F F0 72 ?? F3 42 0F 10 04 B0 F3 0F) //W3 #
assert(MOSU,8B 81 80 00 00 00 C1 E8 1F 34 01 74 06 FF 89 84 00 00 00 C3 ?? ?? ??) //W3 #
assert(MSCD,29 B3 00 01 00 00 89 B3 F4 00 00 00 39 AB 00 01 00 00 7F ?? 80 A3 1C) //W3 #
//assert(MSU2,48 8B 41 08 83 78 2C 00 7C 03 FF 49 2C C3 CC ?? ?? ?? ?? ?? ?? ??) //P
assert(MSC2,29 BB 00 01 00 00 89 BB F4 00 00 00 44 39 AB 00 01 00 00 7F ?? 80 A3) //W3 ok
assert(MOUS,03 C3 48 8B 5C 24 78 01 87 F4 06 00 00 48 8B CF 48 83 C4 60 5F E9 ??) //W3 #
// Empires
assert(MORC,FF C9 41 8B C7 41 03 C8 0F 49 C1 89 43 10 39 6B 18 77 ?? 44 88 7B 1C) //W3E
assert(MRC2,FF C9 41 8B C7 03 CA 0F 49 C1 89 43 08 48 83 C3 10 48 3B DF 75 ?? ??) //W3E
assert(MPF2,48 8B D9 48 8B CA E8 ?? ?? ?? ?? 33 D2 48 39 53 20 74 ?? 89 54 24 30) //W3E
assert(MSH2,48 8B 57 20 4C 8B C0 48 8B CB 48 8B 92 50 04 00 00 E8 ?? ?? ?? ?? E9) //W3N
//=========================================
alloc(MyCode,8000,$process)
//=========================================
alloc(SMOPF,13,$process)
registersymbol(SMOPF)
SMOPF:
readmem(MOPF,13)
//=========================================
alloc(SMPF2,13,$process)
registersymbol(SMPF2)
SMPF2:
readmem(MPF2,13)
//=========================================
alloc(SMOTR,12,$process)
registersymbol(SMOTR)
SMOTR:
readmem(MOTR,12)
//=========================================
//alloc(SMSPS,16,$process)
//registersymbol(SMSPS)
//SMSPS:
//readmem(MSPS,16)
//=========================================
// Declaration section
label(_MonHumanPlayer)
label(_BackMHP)
label(_MonActionPoints)
label(_BackMAP)
label(_MonActionPoints2)
label(_BackAP2)
label(_MonActionPoints3)
label(_BackAP3)
label(_MonActionPoints4)
label(_BackAP4)
label(_MonResearchProg)
label(_BackMRP)
label(_MonTroopRecruit)
label(_BackMTR)
label(_MonConstProg)
label(_BackMCP)
label(_MonPublicControl)
label(_BackMPC)
label(_MonPopSurplus)
label(_BackMPS)
label(_MonPopSurplus2)
label(_BackPS2)
label(_MonSelHero)
label(_BackMSH)
label(_MonPlayerFood)
label(_BackMPF)
label(_GodModeTBS)
label(_BackGMT)
//label(_MonSlavesPerSettlement)
//label(_BackMSS)
label(iEnableGMD)
label(iEnableMTA)
label(iEnableMTL)
label(iEnableMWM)
label(iEnableMMT)
label(iEnableMAP)
label(iEnableMTS)
label(iEnableMRP)
label(iEnableMTR)
label(iEnableMCP)
label(iEnableMPC)
label(iEnableMPS)
label(iEnableMXP)
label(iEnableHAA)
label(iEnableMPI)
label(iEnableMPF)
label(iEnableMRC)
label(iEnableGMT)
label(iEnableMTX)
label(iEnableMSU)
label(iEnableMSC)
label(iEnableMSS)
label(iEnableMUS)
label(iEnableSSR)
label(iEnableLSR)
label(iEnableMOO)
label(iEnableSCR)
label(iEnableDRE)
label(iEnableSRD)
label(iEnableSRS)
label(iEnableSRE)
label(iEnableSRF)
label(iEnableSRL)
label(pPlayer)
label(pLord)
label(pHero)
label(pHero1)
label(pHero2)
label(pUnit)
label(pDebug)
label(pCommon)
label(pFood)
label(pItem)
label(lRBX)
label(aLast)
//=========================================
// Registering Symbols
registersymbol(MyCode)
registersymbol(iEnableGMD)
registersymbol(iEnableMTA)
registersymbol(iEnableMTL)
registersymbol(iEnableMWM)
registersymbol(iEnableMMT)
registersymbol(iEnableMAP)
registersymbol(iEnableMTS)
registersymbol(iEnableMRP)
registersymbol(iEnableMTR)
registersymbol(iEnableMCP)
registersymbol(iEnableMPC)
registersymbol(iEnableMPS)
registersymbol(iEnableMXP)
registersymbol(iEnableHAA)
registersymbol(iEnableMPI)
registersymbol(iEnableMPF)
registersymbol(iEnableMRC)
registersymbol(iEnableGMT)
registersymbol(iEnableMTX)
registersymbol(iEnableMSU)
registersymbol(iEnableMSC)
registersymbol(iEnableMSS)
registersymbol(iEnableMUS)
registersymbol(iEnableSSR)
registersymbol(iEnableLSR)
registersymbol(iEnableMOO)
registersymbol(iEnableSCR)
registersymbol(iEnableDRE)
registersymbol(iEnableSRD)
registersymbol(iEnableSRS)
registersymbol(iEnableSRE)
registersymbol(iEnableSRF)
registersymbol(iEnableSRL)
registersymbol(pPlayer)
registersymbol(pLord)
registersymbol(pHero)
registersymbol(pHero1)
registersymbol(pHero2)
registersymbol(pUnit)
registersymbol(pDebug)
registersymbol(pCommon)
registersymbol(pFood)
registersymbol(pItem)
registersymbol(aLast)
//=========================================
MyCode:
//------------------------------TBS --------------------------------------
//========================================= 2.0.0 #
// TBS - All the time at main game screen
_MonHumanPlayer:
mov dword ptr [aLast],'_MHP'
mov r15,_BackMHP
mov [pBack+50],r15
mov r15,[rdx+000001C0] // Original code (get pPlayer)
mov [pPlayer],r15
mov rcx,[r15+000019B8]
mov [pWay],rcx
mov rcx,[r15+00001990]
mov [pRites],rcx
cmp dword ptr [iEnableMMT],0
je _MonHP00 // Jump if feature is disabled ok
mov ecx,#74000
cmp [r15+00000BB8],ecx
jns _MonHP00
mov [r15+00000BB8],ecx
_MonHP00:
cmp dword ptr [iEnableMPI],0
je _ExitMHP // Jump if feature is disabled
// cmp [r15+00000ED0],0
// je _ExitMHP
// mov ecx,ctMINF
// cmp [r15+00000ED0],ecx
// jns _ExitMHP
// mov [r15+00000ED0],ecx
_ExitMHP:
lea rcx,[r15+00000220] // Original code (Base Gold)
jmp [pBack+50] // Back to main code
//========================================= 2.0.0 X
// TBS - WHen troop is moving (MP, TS, HHP)
// RAX is safe
_MonActionPoints:
mov dword ptr [aLast],'_MAP'
mov rax,_BackMAP
mov [pBack+58],rax
mov [pRBX0],rbx
mov [pRDI0],rdi
mov [pRSI0],rsi
mov rdi,[rcx-08]
test rdi,rdi
mov rax,[rdi+00000098]
cmp rax,[pPlayer]
je _MonAP0Z
mov rsi,[rdi+000001A8]
test rsi,rsi
jz _ExitMAP
mov rbx,[rsi+08]
test rbx,rbx
jz _ExitMAP
mov rax,[rbx]
test rax,rax
jz _ExitMAP
mov rax,[rax+70]
cmp rax,[pPlayer]
jne _ExitMAP
_MonAP0Z:
cmp dword ptr [iEnableMAP],0
je _MonAP00 // Jump if feature is disabled
xor edx,edx
_MonAP00:
cmp dword ptr [iEnableMTS],0
je _ExitMAP // Jump if feature is disabled
mov eax,[rcx+34]
mov [rcx+30],eax
_ExitMAP:
mov rbx,[pRBX0]
mov rdi,[pRDI0]
mov rsi,[pRSI0]
push rbx // Original code
push rsi // Original code
push rdi // Original code
sub rsp,20 // Original code
mov rdi,rcx // Original code
add rcx,14 // Original code
jmp [pBack+58] // Back to main code
//========================================= 2.0.0 ok
// TBS - When Army is selected (MP, TS, HHP)
_MonActionPoints2:
mov dword ptr [aLast],'_MA2'
mov rax,_BackAP2
mov [pBack+60],rax
mov [pRBX1],rbx
mov [pRDI1],rdi
mov [pRSI1],rsi
mov rax,[rcx+00000098]
cmp rax,[pPlayer]
je _MonAP2I
mov rdi,rcx
mov rsi,[rdi+000001A8]
test rsi,rsi
jz _ExitAP2
mov rbx,[rsi+08]
test rbx,rbx
jz _ExitAP2
mov rax,[rbx]
test rax,rax
jz _ExitAP2
mov rax,[rax+70]
cmp rax,[pPlayer]
jne _ExitAP2
_MonAP2I:
mov rax,[rcx+000001D8]
test rax,rax
jz _MonAP2Z
mov [pLord],rax
_MonAP2Z:
cmp dword ptr [iEnableMAP],0
je _MonAP20 // Jump if feature is disabled
// mov eax,[rcx+00000248]
// cmp eax,[rcx+00000244]
// jns _MonAP2W
mov eax,[rcx+00000248]
_MonAP2W:
mov [rcx+0000023C],eax
mov [rcx+00000240],eax
// mov [rcx+00000244],eax
mov [rcx+00000248],eax
mov byte ptr [rcx+00000250],0
mov dword ptr [rcx+00000238],00
// mov dword ptr [rcx+00000230],00
// mov dword ptr [rcx+0000024C],00
_MonAP20:
cmp dword ptr [iEnableMTS],0
je _ExitAP2 // Jump if feature is disabled
mov eax,[rcx+0000025C]
mov [rcx+00000258],eax
_ExitAP2:
mov rbx,[pRBX1]
mov rdi,[pRDI1]
mov rsi,[pRSI1]
movups xmm1,[rcx+00000238] // Original code (get AP-4)
movups [rbp-29],xmm1 // Original code
jmp [pBack+60] // Back to main code
//========================================= 2.0.0 ok
// TBS - When Hero is moving
// RAX is safe
_MonActionPoints3:
mov dword ptr [aLast],'_MA3'
mov rax,_BackAP3
mov [pBack+68],rax
cmp dword ptr [iEnableMAP],0
je _ExitAP3 // Jump if feature is disabled
mov rax,[rcx+00000400]
test rax,rax
jz _ExitAP3
mov rax,[rax+10]
cmp rax,[pPlayer]
jne _ExitAP3
// mov eax,[rcx+3C]
// cmp eax,[rcx+38]
// jns _MonAP30
// mov eax,[rcx+38]
mov eax,[rcx+3C]
_MonAP30:
mov [rcx+30],eax
mov [rcx+34],eax
// mov [rcx+38],eax
mov [rcx+3C],eax
mov edx,eax
xor eax,eax
mov [rcx+40],eax
mov [rcx+48],eax
mov [rcx+2C],eax
mov byte ptr [rcx+44],00
_ExitAP3:
mov [rsp+10],edx // Original code (New MP)
push rbx // Original code
sub rsp,20 // Original code
mov rbx,rcx // Original code
jmp [pBack+68] // Back to main code
//========================================= 2.0.0 ok
// TBS - When Hero is moving (in the army)
// RAX is safe
_MonActionPoints4:
mov dword ptr [aLast],'_MA4'
mov rax,_BackAP4
mov [pBack+70],rax
mov [pRDX],rdx
mov [pRSI],rsi
cvttsd2si eax,xmm0 // Original code
shl ebx,0A // Original code
or ebx,eax // Original code
mov eax,ebx // Original code
neg eax // Original code
comiss xmm7,xmm9 // Original code
cmovb ebx,eax // Original code
lea rsi,[rdi-30]
mov rdx,[rsi+00000400]
test rdx,rdx
jz _ExitAP4
mov rdx,[rdx+10]
cmp rdx,[pPlayer]
jne _ExitAP4
mov [pHero],rsi // It is, in fact, a Lord
cmp dword ptr [iEnableMAP],0
je _ExitAP4 // Jump if feature is disabled
// mov edx,[rsi+3C]
// cmp edx,[rsi+38]
// jns _MonAP40
// mov edx,[rsi+38]
mov edx,[rsi+3C]
_MonAP40:
mov [rsi+30],edx
mov [rsi+34],edx
// mov [rsi+38],edx
mov [rsi+3C],edx
xor rbx,rbx
mov [rsi+40],ebx
mov [rsi+48],ebx
mov [rsi+2C],ebx
mov byte ptr [rsi+44],00
_ExitAP4:
mov rdx,[pRDX]
mov rsi,[pRSI]
sub [rdi],ebx // Original code
jmp [pBack+70] // Back to main code
//========================================= 2.0.0 ok
// TBS - During Turn Changing
// RAX is safe
_MonResearchProg:
mov dword ptr [aLast],'_MRP'
mov rax,_BackMRP
mov [pBack+78],rax
mov r9d,[rdx+0C] // Original code
add r9d,r8d // Original code
cmp dword ptr [iEnableMRP],0
je _ExitMRP // Jump if feature is disabled
mov rax,[rbx+20]
cmp rax,[pPlayer]
jne _ExitMRP
mov r9d,[rcx+5C]
_ExitMRP:
cmp r9d,[rcx+5C] // Original code (chk if finished)
mov rcx,rbx // Original code
jmp [pBack+78] // Back to main code
//========================================= W3
// TBS - When looking at the Army (When recruiting)
// RAX is safe
_MonTroopRecruit:
mov dword ptr [aLast],'_MTR'
mov rax,_BackMTR
mov [pBack+80],rax
mov rax,COTR
call rax // Original code
test eax,eax // Original code
js _EMTR00
push rcx
cmp dword ptr [iEnableMTR],0
je _ExitMTR // Jump if feature is disabled
cmp rdi,[pPlayer]
je _MonTR00
mov rcx,[rbx+38]
test rcx,rcx
jz _ExitMTR
mov rcx,[rcx+00000090]
cmp rcx,[pPlayer]
jne _ExitMTR
_MonTR00:
mov dword ptr [rbx+50],0
_ExitMTR:
pop rcx
add eax,[rbx+50] // Original code (get #turns)
jmp [pBack+80] // Back to main code
_EMTR00:
pop rcx
mov rbx,JOTR
jmp rbx
//========================================= W3
// TBS - During Turn Changing
_MonConstProg:
mov dword ptr [aLast],'_MCP'
mov rax,_BackMCP
mov [pBack+88],rax
inc [rcx+0C] // Original code (upd prog)
cmp dword ptr [rcx+10],1
je _ExitMCP
cmp dword ptr [iEnableMCP],0
je _ExitMCP // Jump if feature is disabled
cmp r14,[pPlayer]
jne _ExitMCP
mov eax,[rcx+10]
mov [rcx+0C],eax
_ExitMCP:
mov eax,[rcx+0C] // Original code
cmp eax,[rcx+10] // Original code
setae al // Original code
jmp [pBack+88] // Back to main code
//========================================= W3
// TBS - During Turn Changing
_MonPublicControl:
mov dword ptr [aLast],'_MPC'
mov rdx,_BackMPC
mov [pBack+90],rdx
cmp dword ptr [iEnableMPC],0
je _ExitMPC // Jump if feature is disabled
cmp r8,[r15]
jne _ExitMPC
mov rdx,[r8+000000B8]
test rdx,rdx
jz _ExitMPC
mov rdx,[rdx+10]
cmp rdx,[pPlayer]
jne _ExitMPC
mov edx,[r15+34]
add edx,ecx
cmp edx,#70
jns _ExitMPC
mov edx,[r15+34]
mov ecx,#70
sub ecx,edx // Val to be added
mov [r15+2C],ecx
_ExitMPC:
mov edx,[r15+34] // Original code
mov [r14+0C],edx // Original code
cmp dword ptr [r15+44],01 // Original code
jmp [pBack+90] // Back to main code
//========================================= 2.0.0 #
// TBS - When looking at the Province Detail
_MonPopSurplus:
mov dword ptr [aLast],'_MPS'
mov rax,_BackMPS
mov [pBack+98],rax
cmp dword ptr [iEnableMPS],0
je _ExitMPS // Jump if feature is disabled
mov rax,[rdx+000000B8]
test rax,rax
jz _ExitMPS
mov rax,[rax+10]
cmp rax,[pPlayer]
jne _ExitMPS
mov eax,#30
cmp eax,[rdx+000003B0]
js _ExitMPS
mov [rdx+000003B0],eax
_ExitMPS:
mov rax,[r8] // Original code
mov rcx,r8 // Original code
mov edx,[rdx+000003B0] // Original code
jmp [pBack+98] // Back to main code
//========================================= W3
// TBS - On Camp Selection
_MonPopSurplus2:
mov dword ptr [aLast],'_PS2'
mov rbx,_BackPS2
mov [pBack+00A0],rbx
cmp dword ptr [iEnableMPS],0
je _ExitPS2 // Jump if feature is disabled
mov rbx,[rcx+20]
test rbx,rbx
jz _ExitPS2
mov rbx,[rbx]
test rbx,rbx
jz _ExitPS2
mov rbx,[rbx+00000128]
test rbx,rbx
jz _ExitPS2
mov rbx,[rbx+10]
cmp rbx,[pPlayer]
jne _ExitPS2
mov rbx,[rcx+20]
mov rbx,[rbx+18]
test rbx,rbx
jz _ExitPS2
cmp dword ptr [rbx+08],#30
jns _ExitPS2
mov dword ptr [rbx+08],#30
_ExitPS2:
mov rbx,rcx // Original code
movaps [rsp+30],xmm6 // Original code
mov rcx,[rcx+20] // Original code (get pPop
jmp [pBack+00A0] // Back to main code
//========================================= W3
// TBS - When a hero/Lord is selected
_MonSelHero:
mov dword ptr [aLast],'_MSH'
mov rax,_BackMSH
mov [pBack+00A8],rax
mov [pRBX],rbx
mov [pR15],r15
mov rbx,[rcx+38]
test rbx,rbx
jz _ExitMSH
cmp r15,[rbx]
jne _ExitMSH
mov [pHero1],r15
mov rax,[r15+00000400]
test rax,rax
jz _ExitMSH
mov rax,[rax+10]
cmp rax,[pPlayer]
jne _ExitMSH
cmp dword ptr [iEnableMAP],0
je _MonSH00 // Jump if feature is disabled
// mov eax,[r15+3C]
// cmp eax,[r15+38]
// jns _MonSHZZ
// mov eax,[r15+38]
mov eax,[r15+3C]
_MonSHZZ:
mov [r15+30],eax
mov [r15+34],eax
// mov [r15+38],eax
mov [r15+3C],eax
xor rax,rax
mov [r15+40],eax
mov [r15+48],eax
mov [r15+2C],eax
mov byte ptr [r15+44],00
_MonSH00:
cmp dword ptr [iEnableHAA],0
je _MonSH01 // Jump if feature is disabled
mov al,[r15+00000C18]
and al,32
mov [r15+00000C18],al // AA
_MonSH01:
cmp dword ptr [iEnableMXP],0
je _ExitMSH // Jump if feature is disabled
mov rbx,[r15+00000450]
test rbx,rbx
jz _ExitMSH
lea rax,[r9-32]
cmp eax,[rbx+0000026C]
js _ExitMSH
mov [rbx+0000026C],eax
_ExitMSH:
mov rbx,[pRBX]
mov r15,[pR15]
mov eax,[rcx+4C] // Original code (get XP)
xorps xmm0,xmm0 // Original code
sub eax,edx // Original code
xorps xmm1,xmm1 // Original code
sub r9d,edx // Original code
jmp [pBack+00A8] // Back to main code
//========================================= W3
// TBS - Special Resource Item under cursor
// RAX is safe
_MonPlayerFood:
mov dword ptr [aLast],'_MPF'
mov rdx,_BackMPF
mov [pBack+00B0],rdx
cmp rbx,[pPlayer]
jne _ExitMPF
mov rdx,[rsi+20]
mov [pItem],rdx
mov rax,[rdx]
test rax,rax
jz _ExitMPF
cmp byte ptr [rax+21],00
je _MonPFZY
mov eax,[rax+25]
jmp _MonPFZI
//--
_MonPFZY:
mov rax,[rax+28]
test rax,rax
jz _ExitMPF
mov eax,[rax+08]
_MonPFZI:
cmp eax,'otio'
je _MonPF00
cmp eax,'kull'
je _MonPF01
cmp eax,'otee'
je _MonPF02
cmp eax,'meat'
je _MonPF03
cmp eax,'soul'
je _MonPF04
jmp _ExitMPF
//--
_MonPF00:
cmp dword ptr [iEnableSRD],0
je _ExitMPF // Jump if feature is disabled
mov eax,#1000
jmp _MonPF0X
//--
_MonPF01:
cmp dword ptr [iEnableSRS],0
je _ExitMPF // Jump if feature is disabled
mov eax,#7000
jmp _MonPF0X
//--
_MonPF02:
cmp dword ptr [iEnableSRE],0
je _ExitMPF // Jump if feature is disabled
mov eax,#7000
jmp _MonPF0X
//--
_MonPF03:
mov [pFood],rdx
cmp dword ptr [iEnableSRF],0
je _ExitMPF // Jump if feature is disabled
mov eax,#1000
jmp _MonPF0X
//--
_MonPF04:
cmp dword ptr [iEnableSRL],0
je _ExitMPF // Jump if feature is disabled
mov eax,#5000
jmp _MonPF0X
//--
_MonPF0X:
cmp [rdx+20],eax
jns _ExitMPF
mov [rdx+20],eax
mov ebp,eax
_ExitMPF:
mov rdx,[rsi+20] // Original code (get Item)
cmp ebp,[rdx+20] // Original code (get amount)
jne _ExitPF0
add rdx,28 // Original code
_ExitPF0:
jmp [pBack+00B0] // Back to main code
//========================================= 2.0.0 *
// TBS - God Mode for Autobattle and Troop XP
_GodModeTBS:
mov rsi,_BackGMT
mov [pBack+00C8],rsi
mov [pRBX2],rbx
mov [pRDI2],rdi
mov [pRSI2],r14
cmp dword ptr [iEnableGMT],0
je _GodMT01 // Jump if feature is disabled
mov rax,[rcx+00000098]
cmp rax,[pPlayer]
je _GodMT00
mov rdi,rcx
mov rsi,[rdi+000001A8]
test rsi,rsi
jz _ExitGMT
mov rbx,[rsi+08]
test rbx,rbx
jz _ExitGMT
mov rax,[rbx]
test rax,rax
jz _ExitGMT
mov rax,[rax+70]
cmp rax,[pPlayer]
je _GodMT00
jmp _ExitGMT
//--
_GodMT00:
mov r14d,[rdx+0000009C]
mov [rdx+000000A0],r14d
mov r14d,[rdx+000000B0]
mov [rdx+000000B4],r14d
mov byte ptr [rdx+000000D8],01
mov byte ptr [rdx+000000DA],00
mov byte ptr [rdx+000000DB],00
_GodMT01:
cmp dword ptr [iEnableMTX],0
je _ExitGMT // Jump if feature is disabled
mov r14,[rcx+00000098]
cmp r14,[pPlayer]
jne _ExitGMT
cmp dword ptr [rdx+000000F8],00
je _ExitGMT
cmp byte ptr [rcx+00000178],09
jns _ExitGMT
mov r14d,#30000
cmp [rdx+000000F8],r14d
jns _ExitGMT
mov [rdx+000000F8],r14d
_ExitGMT:
mov rbx,[pRBX2]
mov rdi,[pRDI2]
mov r14,[pRSI2]
mov rax,[rcx+70] // Original code
mov rsi,r8 // Original code
mov rbx,rdx // Original code
mov rbp,rcx // Original code
jmp [pBack+00C8] // Back to main code
//========================================= W3
// TBS - When a hero/Lord is selected
// R8 is safe
_MonSelLord:
mov dword ptr [aLast],'_MSL'
mov rax,_BackMSL
mov [pBack+00D0],rax
cmp r10,[pPlayer]
jne _ExitMSL
mov rax,[rcx+38]
test rax,rax
jz _ExitMSL
cmp r15,[rax]
jne _ExitMSL
mov [pHero1],r15
cmp dword ptr [iEnableMAP],0
je _MonSL00 // Jump if feature is disabled
// mov eax,[r15+3C]
// cmp eax,[r15+38]
// jns _MonSLZZ
// mov eax,[r15+38]
mov eax,[r15+3C]
_MonSLZZ:
mov [r15+30],eax
mov [r15+34],eax
// mov [r15+38],eax
mov [r15+3C],eax
xor rax,rax
mov [r15+40],eax
mov [r15+48],eax
mov [r15+2C],eax
mov byte ptr [r15+44],00
_MonSL00:
cmp dword ptr [iEnableHAA],0
je _ExitMSL // Jump if feature is disabled
mov al,[r15+00000C18]
and al,32
mov [r15+00000C18],al // AA
_ExitMSL:
mov rax,[rcx+10] // Original code (get XPList)
test rax,rax // Original code
jnz _ExitSL0
mov r8,JOSL
jmp r8
//--
_ExitSL0:
mov edx,[rcx+44] // Original code
jmp [pBack+00D0] // Back to main code
//=========================================
// Empires
//========================================= 2.0.0 (new)
// TBS - During turn changing
_MonRitesCD:
mov dword ptr [aLast],'_MRC'
mov rax,_BackMRC
mov [pBack+00D8],rax
dec ecx // Original code
mov eax,r15d // Original code
add ecx,r8d // Original code
cmovns eax,ecx // Original code
cmp r14,[pRites]
jne _ExitMRC
cmp dword ptr [iEnableMRC],0
je _ExitMRC // Jump if feature is disabled
test eax,eax
js _ExitMRC
xor eax,eax
_ExitMRC:
mov [rbx+10],eax // Original code
jmp [pBack+00D8] // Back to main code
//========================================= 2.0.0 (new)
// TBS - During turn changing
_MonRitesCD2:
mov dword ptr [aLast],'_RC2'
mov rax,_BackRC2
mov [pBack+00E0],rax
dec ecx // Original code
mov eax,r15d // Original code
add ecx,edx // Original code
cmovns eax,ecx // Original code
cmp r14,[pRites]
jne _ExitRC2
cmp dword ptr [iEnableMRC],0
je _ExitRC2 // Jump if feature is disabled
test eax,eax
js _ExitRC2
xor eax,eax
_ExitRC2:
mov [rbx+08],eax // Original code
jmp [pBack+00E0] // Back to main code
//========================================= 2.0.0 (new)
// TBS - All the time at main game screen (Skaven/Lizards)
_MonPlayerFood2:
mov dword ptr [aLast],'_PF2'
mov rax,_BackPF2
mov [pBack+00E8],rax
mov [pRDI],rdi
mov rbx,rcx // Original code
mov rcx,rdx // Original code
mov rax,CPF2
call rax // Original code
mov rdi,[rbx+20] // RDI = ITEM_STR
test rdi,rdi
jz _ExitPF2
mov rdx,[rdi+20] // Value
test rdx,rdx
jz _ExitPF2
mov rdx,[rdi+08] // ppPlayer
test rdx,rdx
jz _ExitPF2
mov rdx,[rdx+30]
cmp rdx,[pPlayer]
jne _ExitPF2
mov rdx,[rdi] // pStrName
test rdx,rdx
jz _ExitPF2
mov rdx,[rdx+08] // aName
test rdx,rdx
jz _ExitPF2
cmp word ptr [rdx+02],0
jne _MonPF2Z
mov rdx,[rdx+08] // aName
test rdx,rdx
jz _ExitPF2
_MonPF2Z:
mov edx,[rdx+04]
cmp edx,'en_f'
jne _MonPF20
mov [pFood],rdi
cmp dword ptr [iEnableMPF],0
je _ExitPF2 // Jump if feature is disabled
mov edx,ctMFOO
jmp _MonPF2X
//--
_MonPF20:
cmp edx,'reac'
je _MonPF21
cmp edx,'nuke'
jne _MonPF22
_MonPF21:
cmp dword ptr [iEnableSSR],0 // s6.5
je _ExitPF2 // Jump if feature is disabled
mov edx,ctMSSR
jmp _MonPF2X
//--
_MonPF22:
cmp edx,'sacr'
jne _MonPF23
cmp dword ptr [iEnableLSR],0 // s6.5
je _ExitPF2 // Jump if feature is disabled
mov edx,ctMLSR
jmp _MonPF2X
//--
_MonPF23:
cmp edx,'old_'
jne _MonPF24
cmp dword ptr [iEnableMOO],0 // s7.1
je _ExitPF2 // Jump if feature is disabled
mov edx,#700
jmp _MonPF2X
//--
_MonPF24:
cmp edx,'salv'
jne _MonPF25
cmp dword ptr [iEnableSCR],0 // s7.9 (Scrap)
je _ExitPF2 // Jump if feature is disabled
mov edx,#700
jmp _MonPF2X
//--
_MonPF25:
cmp edx,'drea'
jne _MonPF26
cmp dword ptr [iEnableDRE],0 // s7.19 (Dread)
je _ExitPF2 // Jump if feature is disabled
mov edx,#3700
jmp _MonPF2X
//--
_MonPF26:
jmp _ExitPF2
//--
_MonPF2X:
cmp [rdi+20],edx
jns _ExitPF2
mov [rdi+20],edx
_ExitPF2:
mov rdi,[pRDI]
xor edx,edx // Original code
jmp [pBack+00E8] // Back to main code
//========================================= W3 2.0.0 (new)
// TBS - When a hero or army is selected
_MonSelHero2:
mov dword ptr [aLast],'_SH2'
mov rdx,_BackSH2
mov [pBack+00F0],rdx
mov rdx,[rdi+20] // Get Hero
test rdx,rdx
jz _ExitSH2
mov rcx,[rdx+00000400]
test rcx,rcx
jz _ExitSH2
mov rcx,[rcx+10]
cmp rcx,[pPlayer]
jne _ExitSH2
mov [pHero2],rdx
cmp dword ptr [iEnableMAP],0
je _MonSH20 // Jump if feature is disabled
mov ecx,[rdx+3C]
mov [rdx+30],ecx
mov [rdx+34],ecx
mov [rdx+3C],ecx
xor rcx,rcx
mov [rdx+40],ecx
mov [rdx+48],ecx
mov [rdx+2C],ecx
mov byte ptr [rdx+44],00
_MonSH20:
cmp dword ptr [iEnableHAA],0
je _ExitSH2 // Jump if feature is disabled
mov cl,[rdx+00000C18]
and cl,32
mov [rdx+00000C18],cl // AA
_ExitSH2:
mov rdx,[rdi+20] // Original code (get Hero)
mov r8,rax // Original code
mov rcx,rbx // Original code
mov rdx,[rdx+00000450] // Original code (get pXPInfo)
jmp [pBack+00F0] // Back to main code
//=========================================
//------------------------------RTS --------------------------------------
//========================================= 2.0.0 ok
// RTS - During Combat (HP)(Troop/Hero)
// RAX is safe
_GodMode:
mov dword ptr [aLast],'_GMD'
mov rax,_BackGMD
mov [pBack+00],rax
mov [pDebug],rbx
cmp dword ptr [iEnableGMD],0
je _ExitGMD // Jump if feature is disabled
lea rax,[rcx-00000B08]
cmp rax,rbx
jne _ExitGMD
mov rax,[rbx+00000718]
cmp rax,[pCommon2]
jne _ExitGMD
mov eax,[rcx]
mov [rcx+04],eax
xor edx,edx
_ExitGMD:
mov r8d,[rcx+04] // Original code
xor r9d,r9d // Original code
sub r8d,edx // Original code
cmp edx,[rcx+04] // Original code
jmp [pBack+00] // Back to main code
//========================================= 2.0.0 *
// RTS - When decreasing Ammo
_MonTroopAmmo:
mov dword ptr [aLast],'_MTA'
mov rax,_BackMTA
mov [pBack+08],rax
push rbx
test dl,dl
mov eax,00003CE8 // Original code
cmove eax,ecx // Original code
mov ecx,[rax+rdi] // Original code
test ecx,ecx // Original code
je _ExitMTA
cmp dword ptr [iEnableMTA],0
je _ExitMTA // Jump if feature is disabled
mov rbx,[rdi+00003A70]
cmp rbx,[pCommon2]
jne _ExitMTA
inc ecx
_ExitMTA:
pop rbx
test ecx,ecx // Original code
jmp [pBack+08] // Back to main code
//========================================= 2.0.0 #
// RTS - During Combat (HP)(Troop)
// RAX is safe
_GodMode2:
mov dword ptr [aLast],'_GM2'
mov rax,_BackGM2
mov [pBack+10],rax
cmp dword ptr [iEnableGMD],0
je _ExitGM2 // Jump if feature is disabled
mov rax,[rcx+00003A70]
cmp rax,[pCommon2]
jne _ExitGM2
mov eax,[rdx+00000B08]
mov [rdx+00000B0C],eax
ret
//==
_ExitGM2:
push rbp // Original code
push rbx // Original code
push rsi // Original code
push rdi // Original code
push r14 // Original code
lea rbp,[rsp-37] // Original code
jmp [pBack+10] // Back to main code
//========================================= 2.0.0 #
// RTS - All the time during battle
_MonTroopUnits:
mov dword ptr [aLast],'_MTU'
mov rax,_BackMTU
mov [pBack+18],rax
push rbx
push rcx
push rdx
movss [qXMM0],xmm0
mov rdx,rcx // get unit
mov rcx,[rdx+000002D8] // get Troop
test rcx,rcx
jz _ExitMTU
mov rbx,[rcx+70]
test rbx,rbx
jz _ExitMTU
mov rax,[rbx+00000148]
test rax,rax
jz _ExitMTU
cmp byte ptr [rax+000000C4],01
jne _ExitMTU
mov [pCommon],rbx
mov [pCommon2],rax
mov rax,[rax+38]
test rax,rax
jz _ExitMTU
mov rax,[rax]
cmp rax,rbx
jne _MonTUZZ
mov eax,[rbx+08]
mov [iMainArmyID],eax
_MonTUZZ:
cmp dword ptr [iEnableGMD],0
je _MonTU00 // Jump if feature is disabled
mov eax,#110
cvtsi2ss xmm0,eax
maxss xmm0,[rcx+000037EC]
movss [rcx+000037EC],xmm0
cvtss2si eax,xmm0
cmp [rcx+00003AD8],eax
jns _MonTU00
mov [rcx+00003AD8],eax
mov [rcx+00003ADC],eax
_MonTU00:
cmp dword ptr [iEnableGMD],0
je _ExitMTU // Jump if feature is disabled
cmp dword ptr [rdx+00000B0C],0
je _ExitMTU
mov eax,[rcx+164]
imul eax,eax,#15000
mov [rcx+00003538],eax
mov [rcx+0000353C],eax
mov [rcx+00003540],eax
mov [rcx+00003544],eax
mov [rcx+00000080],eax
mov [rcx+00000084],eax
// mov [rcx+000035B4],eax
// mov [rcx+000035F4],eax
mov eax,#15000
mov [rdx+00000B08],eax
mov [rdx+00000B0C],eax
_ExitMTU:
movss xmm0,[qXMM0]
pop rdx
pop rcx
pop rbx
mov rax,[rcx+000002D8] // Original code (get pTroop)
test rax,rax // Original code
jz _ExitMT1
movzx eax,byte ptr [rax+00003C94]
ret
_ExitMT1:
ret
jmp [pBack+18] // Back to main code
//========================================= 2.0.0 ok
// RTS - When increasing value (affects all armies)
// RBP is safe RCX = Army ID
_MonWindsOfMagic:
mov dword ptr [aLast],'_MWM'
mov rbp,_BackMWM
mov [pBack+20],rbp
addss xmm6,[rbx+r14*4+14] // Original code
cmp ecx,[iMainArmyID] // new
jne _ExitMWM
lea rbp,[rbx+r14*4+14]
mov [pBatRes],rbp
cmp dword ptr [iEnableMWM],0
je _ExitMWM // Jump if feature is disabled
maxss xmm6,[fMinWind]
_ExitMWM:
xorps xmm0,xmm0 // Original code
comiss xmm6,xmm0 // Original code
jmp [pBack+20] // Back to main code
//========================================= 2.0.0 #
// RTS - when activating a countable spell (troop)
_MonSpellUse:
mov dword ptr [aLast],'_MSU'
mov rax,_BackMSU
mov [pBack+28],rax
mov eax,[rcx+00000080] // Original code
shr eax,1F // Original code
xor al,01 // Original code
jz _EMSU00 // Original code
push rbx
test rdx,rdx
jz _ExitMSU
cmp dword ptr [iEnableMSU],0
je _ExitMSU // Jump if feature is disabled
mov rbx,[rdx+00000148]
cmp rbx,[pCommon2] // MSU2
je _MonSU0Z
// cmp rdx,rsi
cmp rdx,rdi
jne _ExitMSU
mov rbx,[rdx+00003A70]
cmp rbx,[pCommon2]
jne _ExitMSU
_MonSU0Z:
cmp dword ptr [rcx+00000084],01
js _ExitMSU
inc [rcx+00000084]
_ExitMSU:
pop rbx
dec [rcx+00000084] // Original code
_EMSU00:
jmp [pBack+28] // Back to main code
//========================================= W3 X
// RTS - when a spell cooling down (troop)
// R8 is safe
_MonSpellCooldown:
mov dword ptr [aLast],'_MSC'
mov r8,_BackMSC
mov [pBack+30],r8
mov [pRBX],rax
cmp dword ptr [iEnableMSC],0
je _ExitMSC // Jump if feature is disabled
mov r8,[rdi+00003A70]
cmp r8,[pCommon2]
jne _ExitMSC
mov r8d,[rbx+00000100]
sub r8d,esi
cmp r8d,#50
js _MonSC00
mov r8d,#50
_MonSC00:
add r8d,esi
mov [rbx+00000100],r8d
_ExitMSC:
mov rax,[pRBX]
sub [rbx+00000100],esi // Original code
mov [rbx+000000F4],esi // Original code
cmp [rbx+00000100],ebp // Original code
jmp [pBack+30] // Back to main code
//========================================= W3 (Not used)
// RTS - when activating a spell (army)
_MonSpellUse2:
mov dword ptr [aLast],'_SU2'
mov rax,_BackSU2
mov [pBack+38],rax
cmp rbp,[pCommon]
jne _ExitSU2
mov rax,[rcx+08]
cmp dword ptr [rax+2C],00
jle _ExitSU2
cmp dword ptr [iEnableMSU],0
je _ExitSU2 // Jump if feature is disabled
cmp dword ptr [rax+2C],01
js _ExitSU2
inc dword ptr [rax+2C]
_ExitSU2:
mov rax,[rcx+08] // Original code
cmp dword ptr [rax+2C],00 // Original code
jl _ESU200 // Original code
dec dword ptr [rax+2C] // Original code
_ESU200:
jmp [pBack+38] // Back to main code
//========================================= 2.0.0 ok
// RTS - when a spell cooling down (army)
_MonSpellCooldown2:
mov dword ptr [aLast],'_SC2'
mov rdx,_BackSC2
mov [pBack+40],rdx
test rsi,rsi
jz _ExitSC2
mov rdx,[rsi+00000148]
cmp rdx,[pCommon2]
jne _ExitSC2
cmp dword ptr [iEnableMSC],0
je _ExitSC2 // Jump if feature is disabled
mov edx,[rbx+00000100]
sub edx,edi
cmp edx,#50
js _MonSC20
mov edx,#50
_MonSC20:
add edx,edi
mov [rbx+00000100],edx
_ExitSC2:
sub [rbx+00000100],edi // Original code
mov [rbx+000000F4],edi // Original code
jmp [pBack+40] // Back to main code
//========================================= 2.0.0 #
// RTS - All the time during battle
// RCX is safe
_MonUnitStress:
mov dword ptr [aLast],'_MUS'
mov rcx,_BackMUS
mov [pBack+48],rcx
add eax,ebx // Original code
mov rcx,[rdi+000002D8]
test rcx,rcx
jz _ExitMUS
mov rbx,[rdi+00000718]
cmp rbx,[pCommon2]
jne _ExitMUS
cmp dword ptr [iEnableGMD],0
je _MonUS00 // Jump if feature is disabled
cmp dword ptr [rdi+00000B0C],0
je _MonUS00
mov ebx,[rcx+164]
imul ebx,ebx,#15000
mov [rcx+00003538],ebx
mov [rcx+0000353C],ebx
mov [rcx+00003540],ebx
mov [rcx+00003544],ebx
mov [rcx+00000080],ebx
mov [rcx+00000084],ebx
// mov [rcx+000035B4],ebx
// mov [rcx+000035F4],ebx
mov ebx,#15000
mov [rdi+00000B08],ebx
mov [rdi+00000B0C],ebx
_MonUS00:
cmp dword ptr [iEnableMUS],0
je _ExitMUS // Jump if feature is disabled
mov [rdi+000006F4],00
test eax,eax
js _ExitMUS
mov eax,#-100
_ExitMUS:
mov rbx,[rsp+78] // Original code
add [rdi+000006F4],eax // Original code (upd Stress)
jmp [pBack+48] // Back to main code
//=========================================
align 10,'='
//=========================================
db '===============================>'
db 'CE7.4 Script by Recifense 220908'
//=========================================
// Variables
iEnableGMD:
dq 0
iEnableMTA:
dq 0
iEnableMTL:
dq 0
iEnableMWM:
dq 0
iEnableMMT:
dq 0
iEnableMAP:
dq 0
iEnableMTS:
dq 0
iEnableMRP:
dq 0
iEnableMTR:
dq 0
iEnableMCP:
dq 0
iEnableMPC:
dq 0
iEnableMPS:
dq 0
iEnableMXP:
dq 0
iEnableHAA:
dq 0
iEnableMPI:
dq 0
iEnableMPF:
dq 0
iEnableMRC:
dq 0
iEnableGMT:
dq 0
iEnableMTX:
dq 0
iEnablePAE:
dq 0
iEnablePAS:
dq 0
iEnableMSU:
dq 0
iEnableMSC:
dq 0
iEnableMSS:
dq 0
iEnableMUS:
dq 0
iEnableSSR:
dq 0
iEnableLSR:
dq 0
iEnableMOO:
dq 0
iEnableSCR:
dq 0
iEnableDRE:
dq 0
iEnableSRD:
dq 0
iEnableSRS:
dq 0
iEnableSRE:
dq 0
iEnableSRF:
dq 0
iEnableSRL:
dq 0
iMainArmyID:
dq #999
fMinWind:
dq (float)100.0
pPlayer:
dq MyCode
pWay:
dq MyCode
pRites:
dq MyCode
pFood:
dq 0
pLord:
dq 0
pHero:
dq 0
pHero1:
dq 0
pHero2:
dq 0
pUnit:
dq 0
pDebug:
dq 0
pItem:
dq 0
pCommon:
dq MyCode
pCommon2:
dq MyCode
pBatRes:
dq 0
lRBX:
dq 0
qXMM0:
dq 0
qXMM1:
dq 0
pRBX:
dq 0
pRDX:
dq 0
pRSI:
dq 0
pRDI:
dq 0
pR15:
dq 0
pRBX0:
dq 0
pRDI0:
dq 0
pRSI0:
dq 0
pRBX1:
dq 0
pRDI1:
dq 0
pRSI1:
dq 0
pRBX2:
dq 0
pRDI2:
dq 0
pRSI2:
dq 0
pBack:
dq 0,0,0,0,0,0,0,0
dq 0,0,0,0,0,0,0,0
dq 0,0,0,0,0,0,0,0
dq 0,0,0,0,0,0,0,0
dq 0,0,0,0,0,0,0,0
aLast:
db 'CE74'
iSize:
dd iSize-MyCode
//=========================================
// Hacking Points
MOHP:
mov r15,_MonHumanPlayer
jmp r15
nop
_BackMHP:
MOAP:
mov rax,_MonActionPoints
jmp rax
nop
nop
nop
_BackMAP:
MAP2:
mov rax,_MonActionPoints2
jmp rax
nop
nop
nop
nop
nop
nop
nop
_BackAP2:
MAP3:
mov rax,_MonActionPoints3
jmp rax
_BackAP3:
MAP4:
mov rax,_MonActionPoints4
jmp rax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
_BackAP4:
MORP:
mov rax,_MonResearchProg
jmp rax
nop
nop
_BackMRP:
MOTR:
mov rax,_MonTroopRecruit
jmp rax
_BackMTR:
MOCP:
mov rax,_MonConstProg
jmp rax
_BackMCP:
MOPC:
mov rax,_MonPublicControl
jmp rax
nop
_BackMPC:
MOPS:
mov rax,_MonPopSurplus
jmp rax
_BackMPS:
MPS2:
mov rbx,_MonPopSurplus2
jmp rbx
_BackPS2:
MOSH:
mov rax,_MonSelHero
jmp rax
nop
nop
_BackMSH:
MOPF:
mov rdx,_MonPlayerFood
jmp rdx
nop
_BackMPF:
GMTB:
mov rsi,_GodModeTBS
jmp rsi
nop
_BackGMT:
MOSL:
mov rax,_MonSelLord
jmp rax
_BackMSL:
// Empires
MORC:
mov rax,_MonRitesCD
jmp rax
nop
nop
_BackMRC:
MRC2:
mov rax,_MonRitesCD2
jmp rax
nop
_BackRC2:
MPF2:
mov rax,_MonPlayerFood2
jmp rax
nop
_BackPF2:
MSH2:
mov rdx,_MonSelHero2
jmp rdx
nop
nop
nop
nop
nop
_BackSH2:
// RTS
GDMD:
mov rax,_GodMode
jmp rax
nop
_BackGMD:
MOTA:
mov rax,_MonTroopAmmo
jmp rax
nop
_BackMTA:
GDM2:
mov rax,_GodMode2
jmp rax
_BackGM2:
MOTU:
mov rax,_MonTroopUnits
jmp rax
nop
nop
nop
nop
nop
nop
nop
nop
nop
_BackMTU:
MOWM:
mov rbp,_MonWindsOfMagic
jmp rbp
nop
_BackMWM:
MOSU:
mov rax,_MonSpellUse
jmp rax
nop
nop
nop
nop
nop
nop
nop
_BackMSU:
MSCD:
mov r8,_MonSpellCooldown
jmp r8
nop
nop
nop
nop
nop
_BackMSC:
MSU2:
// mov rax,_MonSpellUse2
// jmp rax
// nop
_BackSU2:
MSC2:
mov rdx,_MonSpellCooldown2
jmp rdx
_BackSC2:
MOUS:
mov rcx,_MonUnitStress
jmp rcx
nop
_BackMUS:
//=========================================
// Script for Restoring Original Codes
[DISABLE]
MOHP: //W3
db 4C 8B BA C0 01 00 00 49 8D 8F 20 02 00 00
MOAP: //W3
db 40 53 56 57 48 83 EC 20 48 8B F9 48 83 C1 14
MAP2: //W3
db 0F 10 89 38 02 00 00 0F 11 4D D7 F2 0F 10 81 48 02 00 00
MAP3: //W3
db 89 54 24 10 53 48 83 EC 20 48 8B D9
MAP4: //W3
db F2 0F 2C C0 C1 E3 0A 0B D8 8B C3 F7 D8 41 0F 2F F9 0F 42 D8 29 1F
MORP: //W3
db 44 8B 4A 0C 45 03 C8 44 3B 49 5C 48 8B CB
MOTR: //W3
readmem(SMOTR,12)
MOCP: //W3
db FF 41 0C 8B 41 0C 3B 41 10 0F 93 C0
MOPC: //W3
db 41 8B 57 34 41 89 56 0C 41 83 7F 44 01
MOPS: //W3
db 49 8B 00 49 8B C8 8B 92 B0 03 00 00
MPS2: //W3
db 48 8B D9 0F 29 74 24 30 48 8B 49 20
MOSH: //W3
db 8B 41 4C 0F 57 C0 2B C2 0F 57 C9 44 2B CA
MOPF: //W3
readmem(SMOPF,13)
GMTB: //W3
db 48 8B 41 70 49 8B F0 48 8B DA 48 8B E9
MOSL: //W3
db 48 8B 41 10 48 85 C0 74 4B 8B 51 44
// Empires
MORC:
db FF C9 41 8B C7 41 03 C8 0F 49 C1 89 43 10
MRC2:
db FF C9 41 8B C7 03 CA 0F 49 C1 89 43 08
MPF2:
readmem(SMPF2,13)
MSH2:
db 48 8B 57 20 4C 8B C0 48 8B CB 48 8B 92 50 04 00 00
// RTS
GDMD: //W3
db 44 8B 41 04 45 33 C9 44 2B C2 3B 51 04
MOTA: //W3
db B8 E8 3C 00 00 0F 44 C1 8B 0C 38 85 C9
GDM2: //W3
db 40 55 53 56 57 41 56 48 8D 6C 24 C9
MOTU: //W3
db 48 8B 81 D8 02 00 00 48 85 C0 74 08 0F B6 80 94 3C 00 00 C3 C3
MOWM: //W3
db F3 42 0F 58 74 B3 14 0F 57 C0 0F 2F F0
MOSU: //W3
db 8B 81 80 00 00 00 C1 E8 1F 34 01 74 06 FF 89 84 00 00 00
MSCD: //W3
db 29 B3 00 01 00 00 89 B3 F4 00 00 00 39 AB 00 01 00 00
//MSU2:
// db 48 8B 41 08 83 78 2C 00 7C 03 FF 49 2C
MSC2: //W3
db 29 BB 00 01 00 00 89 BB F4 00 00 00
MOUS: //W3
db 03 C3 48 8B 5C 24 78 01 87 F4 06 00 00
//=========================================
// Unregistering Symbols
unregistersymbol(MyCode)
unregistersymbol(iEnableGMD)
unregistersymbol(iEnableMTA)
unregistersymbol(iEnableMTL)
unregistersymbol(iEnableMWM)
unregistersymbol(iEnableMMT)
unregistersymbol(iEnableMAP)
unregistersymbol(iEnableMTS)
unregistersymbol(iEnableMRP)
unregistersymbol(iEnableMTR)
unregistersymbol(iEnableMCP)
unregistersymbol(iEnableMPC)
unregistersymbol(iEnableMPS)
unregistersymbol(iEnableMXP)
unregistersymbol(iEnableHAA)
unregistersymbol(iEnableMPI)
unregistersymbol(iEnableMPF)
unregistersymbol(iEnableMRC)
unregistersymbol(iEnableGMT)
unregistersymbol(iEnableMTX)
unregistersymbol(iEnableMSU)
unregistersymbol(iEnableMSC)
unregistersymbol(iEnableMSS)
unregistersymbol(iEnableMUS)
unregistersymbol(iEnableSSR)
unregistersymbol(iEnableLSR)
unregistersymbol(iEnableMOO)
unregistersymbol(iEnableSCR)
unregistersymbol(iEnableDRE)
unregistersymbol(iEnableSRD)
unregistersymbol(iEnableSRS)
unregistersymbol(iEnableSRE)
unregistersymbol(iEnableSRF)
unregistersymbol(iEnableSRL)
unregistersymbol(pPlayer)
unregistersymbol(pLord)
unregistersymbol(pHero)
unregistersymbol(pHero1)
unregistersymbol(pHero2)
unregistersymbol(pUnit)
unregistersymbol(pDebug)
unregistersymbol(pCommon)
unregistersymbol(pFood)
unregistersymbol(pItem)
unregistersymbol(aLast)
unregistersymbol(SMOPF)
unregistersymbol(SMPF2)
unregistersymbol(SMOTR)
unregistersymbol(SMSPS)
//=========================================
dealloc(MyCode)
dealloc(SMOPF)
dealloc(SMPF2)
dealloc(SMOTR)
dealloc(SMSPS)
//============= Scripts End ===============
// ****************************************
// NOTES
// ****************************************
{
}
346
"========== (Common to All)"
0000FF
1
96
"[X] <== Minimum Treasure"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMMT",1)
memrec.Color=0x0008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMMT",0)
memrec.Color=0x0c08000
{$ASM}
143
"[X] <== Research in 1 Turn"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMRP",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMRP",0)
memrec.Color=0x00c08000
{$ASM}
161
"[X] <== Construction in 1 Turn"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMCP",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMCP",0)
memrec.Color=0x00c08000
{$ASM}
144
"[X] <== Minimum Public Control"
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}
146
"[X] <== Minimum Pop Surplus"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPS",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPS",0)
memrec.Color=0x00c08000
{$ASM}
347
"========== (Related to Armies)(TBS)"
0000FF
1
139
"[X] <== Recover Troop Size"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMTS",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMTS",0)
memrec.Color=0x00c08000
{$ASM}
140
"[X] <== Recruitment in 1 Turn"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMTR",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMTR",0)
memrec.Color=0x00c08000
{$ASM}
348
"========== (Related to Characters)"
0000FF
1
147
"[X] <== Unlimited Action Points"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMAP",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMAP",0)
memrec.Color=0x00c08000
{$ASM}
149
"[X] <== Agents can Act Again"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableHAA",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableHAA",0)
memrec.Color=0x00c08000
{$ASM}
155
"[X] <== Hero XP almost complete"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMXP",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMXP",0)
memrec.Color=0x00c08000
{$ASM}
349
"========== (Related to Battles)(TBS)"
0000FF
1
280
"[X] <== Auto-Resolve God Mode "
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableGMT",1)
memrec.Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableGMT",0)
memrec.Color=0x00c08000
{$ASM}
281
"[X] <== Troops Quick Level Up "
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMTX",1)
memrec.Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMTX",0)
memrec.Color=0x00c08000
{$ASM}
420
"========== (Related to Generals/Faction) (Special Resources)(Pass the cursor over the vaue)"
0000FF
1
421
"[X] <== Minimum SR Devotion (The Ice Court)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableSRD",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableSRD",0)
memrec.Color=0x00c08000
{$ASM}
422
"[X] <== Minimum SR Skulls (Exiles of Thorne)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableSRS",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableSRS",0)
memrec.Color=0x00c08000
{$ASM}
423
"[X] <== Minimum SR Devotees (Seducers of Slaanesh)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableSRE",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableSRE",0)
memrec.Color=0x00c08000
{$ASM}
427
"[X] <== Minimum SR Food/Meat (Golden Tooth)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableSRF",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableSRF",0)
memrec.Color=0x00c08000
{$ASM}
508
"[X] <== Minimum SR Souls (Warriors of Chaos)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableSRL",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableSRL",0)
memrec.Color=0x00c08000
{$ASM}
433
"========== (Related to Battles)(RTS)"
0000FF
1
138
"[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}
Activate
17
97
0
Deactivate
17
96
1
153
"[X] <== Unlimited Ammo"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMTA",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMTA",0)
memrec.Color=0x00c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
339
"[X] <== Ever fresh units (Full Vigour)"
C08000
Auto Assembler Script
[enable]
{$LUA}
writeInteger("iEnableMUS",1)
memrec.Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMUS",0)
memrec.Color=0x0c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
241
"[X] <== Full Wind Of Magic"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMWM",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMWM",0)
memrec.Color=0x00c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
441
"[X] <== Quick Spell Cooldown"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMSC",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMSC",0)
memrec.Color=0x00c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
442
"[X] <== Unlimited Countable Spell"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMSU",1)
memrec.Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMSU",0)
memrec.Color=0x00c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
447
"[X] <== Supply/Wind during Battle"
FF8080
1
448
"Current Amount ==>"
0
FF80FF
Float
pCommon+10
-8
507
"Current Amount ==>"
0
FF80FF
Float
pCommon+10
0
350
"========== (Related to Empires)(TBS)"
0000FF
1
341
"[X] <== Minimum Warpstorm and Warp-Fuel (Skaven - Clan Skryre)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableSSR",1)
memrec.Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableSSR",0)
memrec.Color=0x00c08000
{$ASM}
342
"[X] <== Minimum Sacrificial Offerings (Lizards - Cult of Sotek)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableLSR",1)
memrec.Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableLSR",0)
memrec.Color=0x00c08000
{$ASM}
356
"[X] <== Minimum Old Ones (Lizards - Nakai the Wanderer)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMOO",1)
memrec.Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMOO",0)
memrec.Color=0x00c08000
{$ASM}
384
"[X] <== Minimum Scraps (Greenskins - Grom the Paunch) (not working)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableSCR",1)
memrec.Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableSCR",0)
memrec.Color=0x00c08000
{$ASM}
395
"[X] <== Minimum Dread (Beastmen - Taurox the Brass Bull)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableDRE",1)
memrec.Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableDRE",0)
memrec.Color=0x00c08000
{$ASM}
513
"[X] <== Rites Cooldown in 1 turn"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMRC",1)
memrec.Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMRC",0)
memrec.Color=0x00c08000
{$ASM}
446
"========== (Related to Pointers)"
0000FF
1
243
"[X] <==================== Lord Info"
404080
1
244
"Lord/Hero Name ==>"
0
FF00FF
String
32
1
0
1
pHero1
0
8
40
450
245
"Current Available Points ==>"
0
0000FF
4 Bytes
pHero1
260
450
246
"Current XP ==>"
0
0000FF
4 Bytes
pHero1
26C
450
509
"[X] <==================== Selected Hero Info"
404080
1
510
"Lord/Hero Name ==>"
0
FF00FF
String
32
1
0
1
pHero2
0
8
40
450
511
"Current Available Points ==>"
0
0000FF
4 Bytes
pHero2
260
450
512
"Current XP ==>"
0
0000FF
4 Bytes
pHero2
26C
450
357
"[X] <==================== Player Info"
404080
1
358
"Faction Name ==>"
0
FF00FF
String
32
1
0
1
pPlayer
0
8
BF8
359
"Current Treasure (ALL) ==>"
0
0000FF
4 Bytes
pPlayer
bb8
362
"Current Food (Gold Tooth) ==>"
0
4080FF
4 Bytes
pFood
20
377
"[X] <== Some Values with Name (valid for some factions/Lords)"
FF80FF
1
378
"Number of Available Resource Pointers"
0
FF00FF
4 Bytes
pPlayer
14
19B8
379
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
0
18
19B8
474
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
0
18
19B8
475
"Current Value ==>"
0
0000FF
4 Bytes
pPlayer
20
18
19B8
396
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
48
18
19B8
476
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
48
18
19B8
477
"Current Value ==>"
0
0000FF
4 Bytes
pPlayer
20+48
18
19B8
398
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
2*48
18
19B8
478
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
2*48
18
19B8
479
"Current Value ==>"
0
0000FF
4 Bytes
pPlayer
20+2*48
18
19B8
400
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
3*48
18
19B8
480
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
3*48
18
19B8
481
"Current Value ==>"
0
0000FF
4 Bytes
pPlayer
20+3*48
18
19B8
402
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
4*48
18
19B8
482
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
4*48
18
19B8
483
"Current Value ==>"
0
0000FF
4 Bytes
pPlayer
20+4*48
18
19B8
404
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
5*48
18
19B8
484
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
5*48
18
19B8
485
"Current Value ==>"
0
0000FF
4 Bytes
pPlayer
20+5*48
18
19B8
406
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
6*48
18
19B8
486
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
6*48
18
19B8
487
"Current Value ==>"
0
0000FF
4 Bytes
pPlayer
20+6*48
18
19B8
408
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
7*48
18
19B8
488
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
7*48
18
19B8
489
"Current Value ==>"
1
0000FF
4 Bytes
pPlayer
20+7*48
18
19B8
410
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8*48
18
19B8
490
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
8*48
18
19B8
491
"Current Value ==>"
0
0000FF
4 Bytes
pPlayer
20+8*48
18
19B8
412
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
9*48
18
19B8
492
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
9*48
18
19B8
493
"Current Value ==>"
1
0000FF
4 Bytes
pPlayer
20+9*48
18
19B8
414
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
a*48
18
19B8
494
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pPlayer
0
8
8
a*48
18
19B8
495
"Current Value ==>"
0
0000FF
4 Bytes
pPlayer
20+a*48
18
19B8
430
"[X] <== Last Special Resource Under Cursor"
FF8080
1
431
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pItem
0
8
0
496
"Resource Name ==>"
0
FF8080
String
32
0
0
1
pItem
0
8
8
0
497
"Current Value ==>"
1
0000FF
4 Bytes
pItem
20
228
"[X] <== Table/Script Information"
0000FF
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
getMainForm().CommentButton.doClick()
{$ASM}
[disable]
Recifense
20220908
===========================================
Game Title : Total War - Warhammer 3
Game Version : 2.1.1 (16218)
Game Sponsor : TPW (Travis) + PF (DLC)
Process Name : Warhammer3.exe
Relevant Info : 64bits/TBS/RTS
Script Version: 4.5
CE Version : 7.4
Release date : 08-Sep-2022
Author : Recifense
History:
20-Feb-2022: Preliminary Release (alfa) (s1.0)
23-Feb-2022: First Release (s2.0)
25-Feb-2022: Release for version 1.0.1 (s2.1)
12-Mar-2022: Fixes, improvement and new features (s2.2)
15-Mar-2022: Release for version 1.0.2 (s2.3)
19-Mar-2022: Fixes and improvement (s2.4)
20-Mar-2022: Fixes and improvement and a pointer (s2.5)
22-Mar-2022: New approaches (s3.0)
05-Apr-2022: Release for version 1.1.0 (s3.1)
17-Apr-2022: Fix for Unlimited Ammo (s3.2)
17-May-2022: Release for version 1.2.0 (s3.3)
25-May-2022: Release for version 1.2.0 (14425)(s3.4)
01-Jul-2022: Release for version 1.3.0 (14983)(s3.5)
10-Jul-2022: Release for version 1.3.1 (15212)(s3.6)
21-Jul-2022: Release for version 1.3.2 (15399)(s3.7)
26-Aug-2022: Release for version 2.0.0 (15717)(s4.0)(Major Changings)
29-Aug-2022: A fix and a new option (s4.1)
30-Aug-2022: A fix for "[X] <== Agents can Act Again" and Countable Spells (s4.2)
02-Sep-2022: New approach for action points (s4.3)
06-Sep-2022: Release for version 2.1.0 (16106)(s4.4)
08-Sep-2022: Release for version 2.1.1 (16218)(s4.5)
Features:
- Minimum Treasure [1]
- Unlimited Action Points [2]
- Recover Troop Size/Hero HP [3]
- Research in 1 turn [4]
- Recruitment in 1 turn [5]
- Construction in 1 turn [6]
- Minimum Public Control [7]
- Minimum Pop Surplus [8]
- Level almost complete [9] (sel char XP)
- Hero can Act Again [A]
- God Mode for Auto-resolve battles [B]
- Troops Quick Level Up [C]
- Minimum Special Resources [D]
RTS
- God Mode (RTS) [E]
- Full Ammo (RTS) [F]
- Minimum Leadership (GM) (RTS) [G]
- Fast Recover of Winds of Magic (RTS) [H]
- Ever fresh units (RTS) [I]
- Unlimited use of limited spells (RTS) [J]
- Spell Quick Cooldown (RTS) [K]
- Some Pointers [L]
===========================================
[1] Minimum value is 74000;
[2] Your armies and heroes can move freely;
[3] Your troops will recover size and lords will recover health;
[4] Your research will complete in 1 turn;
[5] Your armies will be reinforced in 1 turn;
[6] The construction in your provinces will complete in 1 turn;
[7] Minimum Public Control for your provinces will be 70;
[8] Every time you access your province/Camp the POP Surplus will be 30 at least;
[9] Your Heroes/Lords/etc will level up quickly;
[A] You heroes/Lords/etc can act more then once during a turn;
[B] You don't need to manually fight all battles;
[C] Troops will get to max level after the first battle;
[D] Some Special Resources can be checked to a minimum value: (*)
- Devotion (1000)
- Skulls (7000)
- Devotees (7000)
- Meat/Food (1000)
[E] For your players' units
[F] For your players' troops
[G] For your players' troops (110)
[H] Recover quickly
[I] For your players' units
[J] The amount will not decrease;
[K] Could down will take 5 secs;
[L] Used at the table; (**)
----------
(* ) You have to pass the cursor over the displayed value
(**) Check the list of pointers. It may help you with some values.
-------------------------------------------
[IMPORTANT]
Please check the pointers it may help you with some values.
Another good pointer is "[X] <== Last Special Resource Under Cursor". It will show the address of a special resource after you passed the cursor over the value: Food/Meet, Devotion, Devotees, etc. . Then you can change it yourself.
//--
When you have embedded heroes in your army, your army may lost MP and stop. Just click on each hero, then selelect army again and you be able to move it.
===========================================
[USAGE]
1) Run CE74 or greater;
2) Run Game;
3) Load the game process "Warhammer3.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]
- Not 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 11 64bits
===========================================
[INFO]
Many thanks go to Travis for providing the game!
===========================================
Cheers!