3
"[X] <== Warhammer 2 Total War v1.4.1-7450 Steam Script v5.5"
FF0000
Auto Assembler Script
{
===========================================
Game Title : Total War - Warhammer 2
Game Version : 1.4.1 (7450)
Game Sponsor : Patrons
Process Name : Warhammer2.exe
Relevant Info : 64bits/TBS/RTS
Script Version: 5.5
CE Version : 6.7
Release date : 30-Jun-2018
Author : Recifense
History:
29-Sep-2017: First Release
30-Sep-2017: Trying to Fix Construction + Minimum Food (s2.0)
01-Oct-2017: Added "Rites Cooldown in 1 turn" and fix "CanActAgain" (s3.0)
03-Oct-2017: Included Arks in Pop Surplus (s3.1)
10-Oct-2017: God Mode for Auto-Resolve battles and Troop Quick Level Up (s3.2)
26-Oct-2017: Release for version 1.1.0-4871
28-Oct-2017: Porting of AMBER features from Warhammer TW (s3.3)
04-Nov-2017: Release for version 1.1.0-5003 beta
09-Nov-2017: Release for version 1.1.1-5078
14-Dec-2017: Release for version 1.2.0-5568
23-Jan-2018: Release for version 1.3.0-6014 (Rise of the Tomb kings)
24-Jan-2018: Added two more features releated to spell durng combat (s5.0)
25-Jan-2018: Include spells related to the army (s5.1)
30-Jan-2018: Minimum Slave per Settlement (Dark Elves) (s5.2)
14-Feb-2018: Release for version 1.3.1-6213 + Min Pop Surplus = 30 (s5.3)
31-May-2018: Release for version 1.4.0-7243
20-Jun-2018: Release for version 1.4.0-7312 Beta (CE68)(s5.4)
21-Jun-2018: Release for version 1.4.1-7450
30-Jun-2018: Include "Ever fresh units (Full Vigour)" (CE67)(s5.5)
Features:
- God Mode (RTS)
- Full Ammo (RTS)
- Minimum Leadership (GM) (RTS)
- Fast Recover of Winds of Magic (RTS)
- Unlimited use of limited spells (RTS) (s5.0) new
- Spell Quick Cooldown (RTS) (s5.0) new
- Ever fresh units (RTS) (s5.5) new
- Minimum Treasure
- Minimum Influence
- Minimum Food (Skaven)
- Unlimited Action Points
- Recover Troop Size/Hero HP
- Research in 1 turn
- Recruitment in 1 turn
- Construction in 1 turn
- Rites Cooldown in 1 turn
- Minimum Public Order
- Minimum Pop Surplus (including Arks) (s3.1)
- Level almost complete (sel hero XP)
- Hero can Act Again
- God Mode for Auto-resolve battles (s3.2)
- Troops Quick Level Up (s3.2)
- Minimum Amber Per Settlement (s3.3)
- Minimum Event Total Amber (s3.3)
- Minimum Slaves Per Settlement (s5.2) (for Dark Elves)
- Some Pointers
===========================================
}
//=========================================
// Checking CE version
{$lua}
if(getCEVersion() < 6.7) then
ShowMessage('Warning. CE version should be 6.7 or above')
end
{$asm}
//=========================================
// Checking Selected Process
{$lua}
if(process == nil) then
ShowMessage('No process was selected')
elseif (process ~= "Warhammer2.exe") then
ShowMessage('Error. Expected Process = Warhammer2.exe')
end
{$asm}
//=========================================
// Definitions
define(LUDO,"Warhammer2.exe")
define(GDMD,Warhammer2.exe+0047ef50) //=========
define(MOTA,Warhammer2.exe+007ef046) //=========
define(GDM2,Warhammer2.exe+00628890) //=========
define(MOTU,Warhammer2.exe+0034c570) //========= 3 2
define(MOWM,Warhammer2.exe+0054d41f) //=========
define(MOSU,Warhammer2.exe+004de72b) //----N==== (s5.0)
define(MSCD,Warhammer2.exe+004e15e1) //----N==== (s5.0) 2 2
define(MSU2,Warhammer2.exe+004de2b5) //----N==== (s5.1)
define(MSC2,Warhammer2.exe+004e128b) //----N==== (s5.1) 2 1
define(MOUS,Warhammer2.exe+0065520e) //--------N (s5.5)
//--
define(MOHP,Warhammer2.exe+01fd25ca) //====#====
define(MOAP,Warhammer2.exe+009592b0) //=========
define(MAP2,Warhammer2.exe+0091be22) //=========
define(MAP3,Warhammer2.exe+00b0bd20) //=========
define(MAP4,Warhammer2.exe+009591b4) //=========
define(MORP,Warhammer2.exe+00add64f) //=========
define(MOTR,Warhammer2.exe+00c60bab) //=========
define(MOCP,Warhammer2.exe+00f90620) //=========
define(MOPO,Warhammer2.exe+00c69cb9) //=========
define(MOPS,Warhammer2.exe+0212af9e) //=========
define(MPS2,Warhammer2.exe+054b0bdc) //========= (s3.1)
define(MOSH,Warhammer2.exe+01e31a52) //=========
define(MOPF,Warhammer2.exe+020f6aff) //=========
define(MORC,Warhammer2.exe+00e320d7) //====#====
define(MRC2,Warhammer2.exe+00e32179) //====#====
define(GMTB,Warhammer2.exe+008ee494) //========= (s3.2)
define(MOPA,Warhammer2.exe+0135ab62) //N======== (s3.3)
define(MSPS,Warhammer2.exe+00c08e27) //----N==== (s5.2)
define(RPAS,Warhammer2.exe+00a1888e) //N======== (s3.3)
define(RPAE,Warhammer2.exe+00a09cf7) //N======== (s3.3)
//=========================================
// Constants used in the script (that can be changed)
define(ctCE67,(float)6.7)
define(ctMMON,#67000) // Minimum Money
define(ctMINF,#67) // Minimum Influence
define(ctMFOO,#80) // Minimum Food
define(ctMAPS,(float)5.0)
define(ctMAPE,(float)15.0)
//=========================================
[ENABLE]
//=========================================
//LuaCall(CheckVersion())
//=========================================
// Check if script is compatible to this game version
// If false the script will not be loaded
assert(GDMD,8b 41 04 3b d0 ?? ?? c7 41 04 00 00 00 00 ?? ?? 2b c2 89 41 04 8b)
assert(MOTA,85 c0 74 04 ff c8 89 02 83 3a 00 0f 85 ?? ?? ?? ?? c6 81 fe 3a 00)
assert(GDM2,40 55 41 54 41 56 41 57 48 8d 6c 24 d8 48 81 ec 28 01 00 00 4c 8b)
assert(MOTU,48 8b 88 e8 02 00 00 48 85 c9 ?? ?? e8 ?? ?? ?? ?? 84 c0 ?? ?? 49)
assert(MOWM,f3 0f 58 47 08 0f 2f c1 f3 0f 11 47 08 ?? ?? f3 0f 11 4f 08 48 8b)
assert(MOSU,48 8b 45 10 83 78 28 00 ?? ?? ff 4d 30 48 8b d7 48 8b cd e8 ?? ??)
assert(MSCD,29 45 24 44 39 7d 24 ?? ?? 44 88 bd 58 50 00 00 44 88 7d 34 ?? ??)
assert(MSU2,48 8b 4e 10 83 79 28 00 ?? ?? ff 4e 30 0f 57 ff 48 85 ed ?? ?? 80)
assert(MSC2,29 45 24 44 39 7d 24 ?? ?? 44 88 bd 58 50 00 00 44 88 7d 34 ?? ??)
assert(MOUS,01 87 ec 06 00 00 48 8b cf e8 ?? ?? ?? ?? 4c 8b 7c 24 40 4c 8b 64)
//--
assert(MOHP,48 8b 8a 80 01 00 00 48 81 c1 90 02 00 00 e8 ?? ?? ?? ?? 45 33 e4)
assert(MOAP,8b 81 98 00 00 00 c7 81 e0 01 00 00 ff ff ff ff 3b c2 ?? ?? 2b c2)
assert(MAP2,41 8b 87 98 00 00 00 41 89 86 ec 00 00 00 49 8b 47 60 48 85 c0 ??)
assert(MAP3,44 8b 41 1c 41 3b d0 ?? ?? 41 8b c0 c7 81 c8 00 00 00 ff ff ff ff)
assert(MAP4,2b f0 89 43 1c 0f 48 f5 48 8b 6c 24 30 01 73 20 48 8b 74 24 38 48)
assert(MORP,44 03 c1 44 3b 40 5c 0f 83 ?? ?? ?? ?? 44 89 42 0c 48 8b 06 48 8b)
assert(MOTR,03 43 50 48 83 c4 20 5b c3 83 c8 ff 48 83 c4 20 5b c3 cc ?? ?? ??)
assert(MOCP,ff 41 0c 8b 41 0c 3b 41 10 0f 93 c0 c3 cc cc ?? ?? ?? ?? ?? ?? ??)
assert(MOPO,8b 51 3c 89 53 0c 83 79 4c 01 ?? ?? 48 8b 09 48 81 c1 98 00 00 00)
assert(MOPS,44 8b ba 3c 03 00 00 48 8d b2 30 03 00 00 48 8b da 4c 8b e1 b2 01)
assert(MPS2,48 8b 88 b8 05 00 00 48 8b 41 18 8b 40 08 c3 ?? ?? ?? ?? ?? ?? ??)
assert(MOSH,45 8b bd 5c 02 00 00 44 8b f0 44 2b f3 44 2b fb 48 8b 0d ?? ?? ??)
assert(MOPF,48 8b 47 08 48 8b 5c 24 40 8b 40 20 48 83 c4 30 5f c3 cc cc ?? ??)
assert(MORC,ff ca 89 50 2c 48 8b 40 08 48 3b c1 ?? ?? 48 8b 9d f8 00 00 00 48)
assert(MRC2,ff ca 89 50 18 48 8b 40 08 48 3b c1 ?? ?? 48 83 c4 28 c3 cc cc cc)
assert(GMTB,80 b8 80 01 00 00 00 4c 8b ea ?? ?? 8b 42 58 ?? ?? 8b 42 6c 89 41 78)
assert(MOPA,f3 41 0f 10 4b 10 0f 57 c0 0f 2f c8 ?? ?? f3 0f 58 0d ?? ?? ?? ??)
assert(MSPS,8b 50 08 48 8b c8 e8 ?? ?? ?? ?? 48 8b 5c 24 30 48 8b 74 24 40 48)
//=========================================
alloc(MyCode,8192,$process)
//=========================================
// Declaration section
label(_GodMode)
label(_BackGMD)
label(_MonTroopAmmo)
label(_BackMTA)
label(_GodMode2)
label(_BackGM2)
label(_MonTroopUnits)
label(_BackMTU)
label(_MonWindsOfMagic)
label(_BackMWM)
label(_MonSpellUse)
label(_BackMSU)
label(_MonSpellCooldown)
label(_BackMSC)
label(_MonSpellUse2)
label(_BackSU2)
label(_MonSpellCooldown2)
label(_BackSC2)
label(_MonUnitStress)
label(_BackMUS)
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(_MonPublicOrder)
label(_BackMPO)
label(_MonPopSurplus)
label(_BackMPS)
label(_MonPopSurplus2)
label(_BackPS2)
label(_MonSelHero)
label(_BackMSH)
label(_MonPlayerFood)
label(_BackMPF)
label(_MonRitesCD)
label(_BackMRC)
label(_MonRitesCD2)
label(_BackRC2)
label(_GodModeTBS)
label(_BackGMT)
label(_MonPlayerAmber)
label(_BackMPA)
label(_ExitMPA)
label(_MonSlavesPerSettlement)
label(_BackMSS)
label(_ExitMSS)
label(iEnableGMD)
label(iEnableMTA)
label(iEnableMTL)
label(iEnableMWM)
label(iEnableMMT)
label(iEnableMAP)
label(iEnableMTS)
label(iEnableMRP)
label(iEnableMTR)
label(iEnableMCP)
label(iEnableMPO)
label(iEnableMPS)
label(iEnableMXP)
label(iEnableHAA)
label(iEnableMPI)
label(iEnableMPF)
label(iEnableMRC)
label(iEnableGMT)
label(iEnableMTX)
label(iEnablePAE)
label(iEnablePAS)
label(iEnableMSU)
label(iEnableMSC)
label(iEnableMSS)
label(iEnableMUS)
label(pPlayer)
label(pLord)
label(pHero)
label(pUnit)
label(pDebug)
label(pCommon)
label(pFood)
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(iEnableMPO)
registersymbol(iEnableMPS)
registersymbol(iEnableMXP)
registersymbol(iEnableHAA)
registersymbol(iEnableMPI)
registersymbol(iEnableMPF)
registersymbol(iEnableMRC)
registersymbol(iEnableGMT)
registersymbol(iEnableMTX)
registersymbol(iEnablePAE)
registersymbol(iEnablePAS)
registersymbol(iEnableMSU)
registersymbol(iEnableMSC)
registersymbol(iEnableMSS)
registersymbol(iEnableMUS)
registersymbol(pPlayer)
registersymbol(pLord)
registersymbol(pHero)
registersymbol(pUnit)
registersymbol(pDebug)
registersymbol(pCommon)
registersymbol(pFood)
registersymbol(aLast)
//=========================================
MyCode:
//========================================= 2 ok
// RTS - During Combat (HP)(Troop/Hero)
_GodMode:
mov dword ptr [aLast],'_GMD'
mov [pDebug],rbx
cmp dword ptr [iEnableGMD],0
je _ExitGMD // Jump if feature is disabled
lea rax,[rcx-00000ae8]
cmp rax,rbx
jne _ExitGMD
mov rax,[rbx+000002e8]
test rax,rax
jz _ExitGMD
cmp byte ptr [rax+00003af8],00
jne _ExitGMD
mov eax,[rcx]
mov [rcx+04],eax
xor edx,edx
_ExitGMD:
mov eax,[rcx+04] // Original code (get cHP)
cmp edx,eax // Original code
jmp _BackGMD // Back to main code
//========================================= 2 ok
// RTS - After decreasing Ammo
_MonTroopAmmo:
mov dword ptr [aLast],'_MTA'
test eax,eax // Original code
jz _MonTA00
cmp dword ptr [iEnableMTA],0
je _ExitMTA // Jump if feature is disabled
cmp byte ptr [rsi+00003af8],00
jne _ExitMTA
mov eax,[rsi+00003b74]
mov [rsi+00003b70],eax
inc eax
_ExitMTA:
dec eax // Original code
mov [rdx],eax // Original code
_MonTA00:
jmp _BackMTA // Back to main code
//========================================= 2 ok
// RTS - During Combat (HP)(Troop)
_GodMode2:
mov dword ptr [aLast],'_GM2'
push rax
cmp dword ptr [iEnableGMD],0
je _ExitGM2 // Jump if feature is disabled
test rcx,rcx
jz _ExitGM2
mov rax,[rcx+000002e8]
test rax,rax
jz _ExitGM2
cmp byte ptr [rax+00003af8],00
jne _ExitGM2
mov eax,[rcx+00000ae8]
mov [rcx+00000aec],eax
pop rax
ret
//==
_ExitGM2:
pop rax
push rbp // Original code
push r12 // Original code
push r14 // Original code
jmp _BackGM2 // Back to main code
//========================================= 2 ok
// RTS - All the time during battle
_MonTroopUnits:
mov dword ptr [aLast],'_MTU'
push rax
push rbx
push rdx
mov rdx,rax
mov rcx,[rdx+000002E8]
test rcx,rcx
jz _ExitMTU
cmp dword ptr [rcx+70],55555555
cmp byte ptr [rcx+00003370],01
cmp byte ptr [rcx+00003af8],00
jne _ExitMTU
mov rax,[rcx+70]
mov [pCommon],rax
cmp dword ptr [iEnableGMD],0
je _MonTU00 // Jump if feature is disabled
mov eax,#100
mov ebx,[rcx+00003794]
cmp ebx,eax
cmovs ebx,eax
mov [rcx+00003794],ebx
mov [rcx+00003990],eax
mov [rcx+00003994],eax
_MonTU00:
cmp dword ptr [iEnableGMD],0
je _ExitMTU // Jump if feature is disabled
cmp dword ptr [rdx+00000aec],0
je _ExitMTU
mov eax,#671000
mov [rdx+00000ae8],eax
mov [rdx+00000aec],eax
_ExitMTU:
pop rdx
pop rbx
pop rax
mov rcx,[rax+000002E8] // Original code (get pTroop)
jmp _BackMTU // Back to main code
//========================================= 2 ok
// RTS - When increasing value
_MonWindsOfMagic:
mov dword ptr [aLast],'_MWM'
mov [lRBX],rbx
addss xmm0,[rdi+08] // Original code (inc cWoM)
cmp dword ptr [iEnableMWM],0
je _ExitMWM // Jump if feature is disabled
mov rbx,[rdi]
cmp rbx,[pCommon]
jne _ExitMWM
movss xmm0,xmm1
_ExitMWM:
mov rbx,[lRBX]
jmp _BackMWM // Back to main code
//========================================= new (s5.0)
// RTS - when activating a spell (troop)
_MonSpellUse:
mov dword ptr [aLast],'_MSU'
mov rax,[rbp+10]
cmp dword ptr [rax+28],00
jle _ExitMSU
cmp dword ptr [iEnableMSU],0
je _ExitMSU // Jump if feature is disabled
cmp byte ptr [rdi+00003af8],00
jne _ExitMSU
cmp dword ptr [rbp+30],01
js _ExitMSU
inc dword ptr [rbp+30]
_ExitMSU:
mov rax,[rbp+10] // Original code
cmp dword ptr [rax+28],00 // Original code
jmp _BackMSU // Back to main code
//========================================= new (s5.0)
// RTS - when a spell cooling down (troop)
_MonSpellCooldown:
mov dword ptr [aLast],'_MSC'
sub [rbp+24],eax // Original code
cmp dword ptr [iEnableMSC],0
je _ExitMSC // Jump if feature is disabled
cmp byte ptr [r14+00003af8],00
jne _ExitMSC
cmp dword ptr [rbp+24],#50
js _ExitMSC
mov dword ptr [rbp+24],#50
_ExitMSC:
cmp [rbp+24],r15d // Original code
jmp _BackMSC // Back to main code
//========================================= new (s5.1)
// RTS - when activating a spell (army)
_MonSpellUse2:
mov dword ptr [aLast],'_SU2'
mov rcx,[rsi+10]
cmp dword ptr [rcx+28],00
jle _ExitSU2
cmp dword ptr [iEnableMSU],0
je _ExitSU2 // Jump if feature is disabled
cmp rbp,[pCommon]
jne _ExitSU2
cmp dword ptr [rsi+30],01
js _ExitSU2
inc dword ptr [rsi+30]
_ExitSU2:
mov rcx,[rsi+10] // Original code
cmp dword ptr [rcx+28],00 // Original code
jmp _BackSU2 // Back to main code
//========================================= new (s5.1)
// RTS - when a spell cooling down (army)
_MonSpellCooldown2:
mov dword ptr [aLast],'_SC2'
sub [rbp+24],eax // Original code
cmp dword ptr [iEnableMSC],0
je _ExitSC2 // Jump if feature is disabled
cmp r14,[pCommon]
jne _ExitSC2
cmp dword ptr [rbp+24],#50
js _ExitSC2
mov dword ptr [rbp+24],#50
_ExitSC2:
cmp [rbp+24],r15d // Original code
jmp _BackSC2 // Back to main code
//========================================= new (s5.5)
// RTS - All the time during battle
_MonUnitStress:
mov dword ptr [aLast],'_MUS'
mov rcx,[rdi+000002E8]
test rcx,rcx
jz _ExitMUS
cmp byte ptr [rcx+00003af8],00
jne _ExitMUS
cmp dword ptr [iEnableMUS],0
je _ExitMUS // Jump if feature is disabled
mov [rdi+000006EC],00
test eax,eax
js _ExitMUS
mov eax,#-100
_ExitMUS:
add [rdi+000006EC],eax // Original code (upd Stress)
// mov rcx,rdi
jmp _BackMUS // Back to main code
//========================================= ok
//------------------------------TBS --------------------------------------
//========================================= 1.3.0 (s4.0)
// TBS - All the time at main game screen
_MonHumanPlayer:
mov dword ptr [aLast],'_MHP'
mov rcx,[rdx+00000180] // Original code (get pPlayer)
mov [pPlayer],rcx
mov rax,[rcx+00000b90]
mov [pWay],rax
cmp dword ptr [iEnableMMT],0
je _MonHP00 // Jump if feature is disabled
mov eax,ctMMON
cmp [rcx+00000b60],eax
jns _MonHP00
mov [rcx+00000b60],eax
_MonHP00:
cmp dword ptr [iEnableMPI],0
je _ExitMHP // Jump if feature is disabled
cmp [rcx+00000e00],0
je _ExitMHP
mov eax,ctMINF
cmp [rcx+00000e00],eax
jns _ExitMHP
mov [rcx+00000e00],eax
_ExitMHP:
jmp _BackMHP // Back to main code
//========================================= 2 ok
// TBS - WHen troop is moving (MP, TS, HHP)
_MonActionPoints:
mov dword ptr [aLast],'_MAP'
mov rax,[rcx+68]
cmp rax,[pPlayer]
jne _ExitMAP
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+7c]
mov [rcx+78],eax
_ExitMAP:
mov eax,[rcx+00000098] // Original code (get AP)
jmp _BackMAP // Back to main code
//========================================= 2 ok
// TBS - When Army is selected (MP, TS, HHP)
_MonActionPoints2:
mov dword ptr [aLast],'_MA2'
mov rax,[r15+68]
cmp rax,[pPlayer]
jne _ExitAP2
cmp dword ptr [r15+000001a0],0
je _MonAP2Z
mov [pLord],r15
_MonAP2Z:
cmp dword ptr [iEnableMAP],0
je _MonAP20 // Jump if feature is disabled
mov eax,#3661
cmp eax,[r15+00000098]
js _MonAP20
mov [r15+00000098],eax
_MonAP20:
cmp dword ptr [iEnableMTS],0
je _ExitAP2 // Jump if feature is disabled
mov eax,[r15+7c]
mov [r15+78],eax
_ExitAP2:
mov eax,[r15+00000098] // Original code (get AP)
jmp _BackAP2 // Back to main code
//========================================= 2 ok
// TBS - When Hero is moving
_MonActionPoints3:
mov dword ptr [aLast],'_MA3'
cmp dword ptr [iEnableMAP],0
je _ExitAP3 // Jump if feature is disabled
mov r8,[rcx+000002b0]
test r8,r8
jz _ExitAP3
mov r8,[r8]
cmp r8,[pPlayer]
jne _ExitAP3
mov r8d,[rcx+18]
mov [rcx+1c],r8d
xor edx,edx
mov [rcx+20],edx
_ExitAP3:
mov r8d,[rcx+1c] // Original code (get AP)
cmp edx,r8d // Original code
jmp _BackAP3 // Back to main code
//========================================= 2 ok
// TBS - When Lord is moving (in the army)
_MonActionPoints4:
mov dword ptr [aLast],'_MA4'
push rcx
mov rcx,[rbx+000002b0]
test rcx,rcx
jz _ExitAP4
mov rcx,[rcx]
cmp rcx,[pPlayer]
jne _ExitAP4
mov [pHero],rbx // It is, in fact, a Lord
cmp dword ptr [iEnableMAP],0
je _ExitAP4 // Jump if feature is disabled
mov eax,[rbx+18]
xor rsi,rsi
mov [rbx+20],esi
_ExitAP4:
pop rcx
sub esi,eax // Original code
mov [rbx+1C],eax // Original code (upd AP)
jmp _BackAP4 // Back to main code
//========================================= 2 ok
// TBS - During Turn Changing
_MonResearchProg:
mov dword ptr [aLast],'_MRP'
add r8d,ecx // Original code
cmp dword ptr [iEnableMRP],0
je _ExitMRP // Jump if feature is disabled
mov rcx,[rsi+20]
cmp rcx,[pPlayer]
jne _ExitMRP
mov r8d,[rax+5C]
_ExitMRP:
cmp r8d,[rax+5C] // Original code (chk if finished)
jmp _BackMRP // Back to main code
//========================================= 2 ok
// TBS - When looking at the Army (When recruiting)
_MonTroopRecruit:
mov dword ptr [aLast],'_MTR'
push rcx
cmp dword ptr [iEnableMTR],0
je _ExitMTR // Jump if feature is disabled
mov rcx,[rbx+38]
test rcx,rcx
jz _ExitMTR
mov rcx,[rcx+50]
cmp rcx,[pPlayer]
jne _ExitMTR
mov dword ptr [rbx+50],0
_ExitMTR:
pop rcx
add eax,[rbx+50] // Original code (get #turns)
add rsp,20 // Original code
jmp _BackMTR // Back to main code
//========================================= 2 ok (s1.1)
// TBS - During Turn Changing
_MonConstProg:
mov dword ptr [aLast],'_MCP'
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
mov rax,[rcx+38]
test rax,rax
jz _ExitMCP
mov rax,[rax+08]
test rax,rax
jz _ExitMCP
mov rax,[rsp+30]
cmp rax,[pWay]
jne _MonCP00
mov rax,[rsp+40]
cmp rax,[pWay]
jne _ExitMCP
_MonCP00:
mov eax,[rcx+10]
mov [rcx+0C],eax
_ExitMCP:
mov eax,[rcx+0C] // Original code
jmp _BackMCP // Back to main code
//========================================= 2 ok
// TBS - During Turn Changing
_MonPublicOrder:
mov dword ptr [aLast],'_MPO'
mov [lRBX],rbx
cmp dword ptr [iEnableMPO],0
je _ExitMPO // Jump if feature is disabled
cmp r15,[pPlayer]
jne _ExitMPO
xor edx,edx
mov ebx,[rcx+30]
test ebx,ebx
cmovs ebx,edx
mov [rcx+30],ebx
mov ebx,[rcx+34]
test ebx,ebx
cmovs ebx,edx
mov [rcx+34],ebx
mov ebx,[rcx+38]
test ebx,ebx
cmovs ebx,edx
mov [rcx+38],ebx
mov ebx,[rcx+3c]
test ebx,ebx
cmovs ebx,edx
mov [rcx+3c],ebx
mov edx,#68
cmp edx,[rcx+3c]
js _ExitMPO
mov [rcx+3c],edx
_ExitMPO:
mov rbx,[lRBX]
mov edx,[rcx+3C] // Original code
mov [rbx+0C],edx // Original code (upd PO)
jmp _BackMPO // Back to main code
//========================================= (s5.3)
// TBS - When looking at the Province
_MonPopSurplus:
mov dword ptr [aLast],'_MPS'
cmp dword ptr [iEnableMPS],0
je _ExitMPS // Jump if feature is disabled
mov rsi,[rdx+000000c0]
test rsi,rsi
jz _ExitMPS
mov rsi,[rsi]
cmp rsi,[pPlayer]
jne _ExitMPS
mov esi,#30
cmp esi,[rdx+00000338]
js _ExitMPS
mov [rdx+00000338],esi
_ExitMPS:
mov r15d,[rdx+0000033C] // Original code (Get Growth)
jmp _BackMPS // Back to main code
//========================================= 2 ok (s3.1)
// TBS - On ARK selection
_MonPopSurplus2:
mov dword ptr [aLast],'_PS2'
cmp dword ptr [iEnableMPS],0
je _ExitPS2 // Jump if feature is disabled
mov rcx,[rax+00000130]
test rcx,rcx
jz _ExitPS2
mov rcx,[rcx]
cmp rcx,[pPlayer]
jne _ExitPS2
mov rcx,[rax+000005B8]
mov rcx,[rcx+18]
cmp dword ptr [rcx+08],#20
jns _ExitPS2
mov dword ptr [rcx+08],#20
_ExitPS2:
mov rcx,[rax+000005B8] // Original code (Get ppPopSp)
jmp _BackPS2 // Back to main code
//========================================= 2 ok
// TBS - When a hero/Lord is selected
_MonSelHero:
mov dword ptr [aLast],'_MSH'
mov r14,[r13]
test r14,r14
jz _ExitMSH
mov [pHero],r14
mov rcx,[r14+000002b0]
test rcx,rcx
jz _ExitMSH
mov rcx,[rcx]
cmp rcx,[pPlayer]
jne _ExitMSH
cmp dword ptr [iEnableMAP],0
je _MonSH00 // Jump if feature is disabled
mov r15d,[r14+18]
mov [r14+1c],r15d
_MonSH00:
cmp dword ptr [iEnableHAA],0
je _MonSH01 // Jump if feature is disabled
mov byte ptr [r14+00000890],00 // (s3.0)
mov byte ptr [r14+00000898],00
_MonSH01:
cmp dword ptr [iEnableMXP],0
je _ExitMSH // Jump if feature is disabled
lea rcx,[rax-64]
cmp ecx,[r13+0000025c]
js _ExitMSH
mov [r13+0000025c],ecx
_ExitMSH:
mov r15d,[r13+0000025C] // Original code (Get XP)
jmp _BackMSH // Back to main code
//========================================= 2 New (s2.0)
// TBS - All the time at main game screen (Skaven)
_MonPlayerFood:
mov dword ptr [aLast],'_MPF'
mov rax,[rdi+08] // Original code
mov rbx,[rax+08]
test rbx,rbx
jz _ExitMPF
mov rbx,[rbx+18]
cmp rbx,[pPlayer]
jne _ExitMPF
mov [pFood],rax
cmp dword ptr [iEnableMPF],0
je _ExitMPF // Jump if feature is disabled
mov ebx,ctMFOO
cmp [rax+20],ebx
jns _ExitMPF
mov [rax+20],ebx
_ExitMPF:
mov rbx,[rsp+40] // Original code
jmp _BackMPF // Back to main code
//========================================= 1.3.0 * (s4.0)
// TBS - During turn changing
_MonRitesCD:
mov dword ptr [aLast],'_MRC'
cmp rsi,[pPlayer]
jne _ExitMRC
cmp dword ptr [iEnableMRC],0
je _ExitMRC // Jump if feature is disabled
mov edx,1
_ExitMRC:
dec edx // Original code
mov [rax+2c],edx // Original code (upd CD)
jmp _BackMRC // Back to main code
//========================================= 1.3.0 * (s4.0)
// TBS - During turn changing
_MonRitesCD2:
mov dword ptr [aLast],'_RC2'
cmp rsi,[pPlayer]
jne _ExitRC2
cmp dword ptr [iEnableMRC],0
je _ExitRC2 // Jump if feature is disabled
mov edx,1
_ExitRC2:
dec edx // Original code
mov [rax+18],edx // Original code (upd CD)
jmp _BackRC2 // Back to main code
//========================================= 2 New (s3.2)
// TBS - God Mode for Autobattle and Troop XP
_GodModeTBS:
cmp dword ptr [iEnableGMT],0
je _GodMT01 // Jump if feature is disabled
mov r13,[rcx+68]
cmp r13,[pPlayer]
je _GodMT00
mov dword ptr [rdx+58],00
mov dword ptr [rdx+6c],00
mov dword ptr [rdx+0000009c],00
jmp _ExitGMT
//--
_GodMT00:
mov r13d,[rdx+50]
mov [rdx+58],r13d
mov r13d,[rdx+64]
mov [rdx+6c],r13d
mov byte ptr [rdx+78],01
mov byte ptr [rdx+7a],00
_GodMT01:
cmp dword ptr [iEnableMTX],0
je _ExitGMT // Jump if feature is disabled
mov r13,[rcx+68]
cmp r13,[pPlayer]
jne _ExitGMT
cmp dword ptr [rdx+00000090],00
je _ExitGMT
cmp byte ptr [rcx+000000b8],09
jns _ExitGMT
mov r13d,#30000
cmp [rdx+00000090],r13d
jns _ExitGMT
mov [rdx+00000090],r13d
_ExitGMT:
cmp byte ptr [rax+00000180],00 // Original code
jmp _BackGMT // Back to main code
//========================================= new(s3.3)
// TBS - Keep human player's AMBER at minimum (per Settlement / per Event)
_MonPlayerAmber:
mov dword ptr [aLast],'_MPA'
cmp r9w,00eb
je _MonPA00
cmp r9w,00ec
jne _ExitMPA
mov rax,RPAE
cmp rax,[esp]
jne _ExitMPA
cmp dword ptr [iEnablePAE],0
je _ExitMPA // Jump if feature is disabled
cmp r15,[pPlayer]
jne _ExitMPA
mov eax,ctMAPE
jmp _MonPA01
//==
_MonPA00:
mov rax,RPAS
cmp rax,[esp]
jne _ExitMPA
cmp dword ptr [iEnablePAS],0
je _ExitMPA // Jump if feature is disabled
test r13,r13
jz _ExitMPA
mov rax,[r13+000000a8]
test rax,rax
jz _ExitMPA
mov rax,[rax+00000180]
cmp rax,[pPlayer]
jne _ExitMPA
mov eax,ctMAPS
_MonPA01:
cmp [r11+10],eax
jns _ExitMPA
mov [r11+10],eax
mov [r11+14],eax
_ExitMPA:
movss xmm1,[r11+10] // Original code (get value)
jmp _BackMPA // Back to main code
//========================================= new(s5.2)
// TBS - Keep human player's Slaves per Settlement at minimum (for Dark Elves)
_MonSlavesPerSettlement:
mov dword ptr [aLast],'_MSS'
movsd [qXMM0],xmm0
movsd [qXMM1],xmm1
cmp r15,[pPlayer]
jne _ExitMSS
cmp dword ptr [iEnableMSS],0
je _ExitMSS // Jump if feature is disabled
movsd xmm0,[qMinimum]
cvtsi2sd xmm1,[eax+0c]
mulsd xmm0,xmm1
cvtsi2sd xmm1,[eax+08]
maxsd xmm0,xmm1
cvtsd2si ecx,xmm0
mov [eax+08],ecx
_ExitMSS:
movsd xmm0,[qXMM0]
movsd xmm1,[qXMM1]
mov edx,[rax+08] // Original code (get value)
mov rcx,rax // Original code (get value)
jmp _BackMSS // Back to main code
qMinimum:
dq (double)0.20
//=========================================
align 10,'='
//=========================================
db '===============================>'
db 'CE6.7 Script by Recifense 180630'
//=========================================
// Variables
iEnableGMD:
dd 0
iEnableMTA:
dd 0
iEnableMTL:
dd 0
iEnableMWM:
dd 0
iEnableMMT:
dd 0
iEnableMAP:
dd 0
iEnableMTS:
dd 0
iEnableMRP:
dd 0
iEnableMTR:
dd 0
iEnableMCP:
dd 0
iEnableMPO:
dd 0
iEnableMPS:
dd 0
iEnableMXP:
dd 0
iEnableHAA:
dd 0
iEnableMPI:
dd 0
iEnableMPF:
dd 0
iEnableMRC:
dd 0
iEnableGMT:
dd 0
iEnableMTX:
dd 0
iEnablePAE:
dd 0
iEnablePAS:
dd 0
iEnableMSU:
dd 0
iEnableMSC:
dd 0
iEnableMSS:
dd 0
iEnableMUS:
dd 0
dd 0
dd 0
pPlayer:
dq MyCode
pWay:
dq MyCode
pFood:
dq 0
pLord:
dq 0
pHero:
dq 0
pUnit:
dq 0
pDebug:
dq 0
pCommon:
dq MyCode
lRBX:
dq 0
qXMM0:
dq 0
qXMM1:
dq 0
aLast:
db 'CE67'
iSize:
dd iSize-MyCode
//=========================================
// Hacking Points
GDMD:
jmp _GodMode
_BackGMD:
MOTA:
jmp _MonTroopAmmo
nop
nop
nop
_BackMTA:
GDM2:
jmp _GodMode2
nop
_BackGM2:
MOTU:
jmp _MonTroopUnits
nop
nop
_BackMTU:
MOWM:
jmp _MonWindsOfMagic
_BackMWM:
MOSU:
jmp _MonSpellUse
nop
nop
nop
_BackMSU:
MSCD:
jmp _MonSpellCooldown
nop
nop
_BackMSC:
MSU2:
jmp _MonSpellUse2
nop
nop
nop
_BackSU2:
MSC2:
jmp _MonSpellCooldown2
nop
nop
_BackSC2:
MOUS:
jmp _MonUnitStress
nop
_BackMUS:
// ---------------------- TBS
MOHP:
jmp _MonHumanPlayer
nop
nop
_BackMHP:
MOAP:
jmp _MonActionPoints
nop
_BackMAP:
MAP2:
jmp _MonActionPoints2
nop
nop
_BackAP2:
MAP3:
jmp _MonActionPoints3
nop
nop
_BackAP3:
MAP4:
jmp _MonActionPoints4
_BackAP4:
MORP:
jmp _MonResearchProg
nop
nop
_BackMRP:
MOTR:
jmp _MonTroopRecruit
nop
nop
_BackMTR:
MOCP:
jmp _MonConstProg
nop
_BackMCP:
MOPO:
jmp _MonPublicOrder
nop
_BackMPO:
MOPS:
jmp _MonPopSurplus
nop
nop
_BackMPS:
MPS2:
jmp _MonPopSurplus2
nop
nop
_BackPS2:
MOSH:
jmp _MonSelHero
nop
nop
_BackMSH:
MOPF:
jmp _MonPlayerFood
nop
nop
nop
nop
_BackMPF:
MORC:
jmp _MonRitesCD
_BackMRC:
MRC2:
jmp _MonRitesCD2
_BackRC2:
GMTB:
jmp _GodModeTBS
nop
nop
_BackGMT:
MOPA:
jmp _MonPlayerAmber
nop
_BackMPA:
MSPS:
jmp _MonSlavesPerSettlement
nop
_BackMSS:
//=========================================
// Script for Restoring Original Codes
[DISABLE]
GDMD:
// mov eax,[rcx+04]
// cmp edx,eax
db 8b 41 04 3b d0
MOTA:
// test eax,eax
// je $+4
// dec eax
// mov [rdx],eax
db 85 c0 74 04 ff c8 89 02
GDM2:
// push rbp
// push r12
// push r14
db 40 55 41 54 41 56
MOTU:
// mov rcx,[rax+000002E8]
db 48 8b 88 e8 02 00 00
MOWM:
// addss xmm0,[rdi+08]
db f3 0f 58 47 08
MOSU:
// mov rax,[rbp+10]
// cmp dword ptr [rax+28],00
db 48 8b 45 10 83 78 28 00
MSCD:
// sub [rbp+24],eax
// cmp [rbp+24],r15d
db 29 45 24 44 39 7d 24
MSU2:
// mov rax,[rbp+10]
// cmp dword ptr [rcx+28],00
db 48 8b 4e 10 83 79 28 00
MSC2:
// sub [rbp+24],eax
// cmp [rbp+24],r15d
db 29 45 24 44 39 7d 24
MOUS:
// add [rdi+000006EC],eax
db 01 87 ec 06 00 00
// ---------------------- TBS
MOHP:
// mov rcx,[rdx+00000180]
db 48 8b 8a 80 01 00 00
MOAP:
// mov eax,[rcx+00000098]
db 8b 81 98 00 00 00
MAP2:
// mov eax,[r15+00000098]
db 41 8b 87 98 00 00 00
MAP3:
// mov r8d,[rcx+1C]
// cmp edx,r8d
db 44 8b 41 1c 41 3b d0
MAP4:
// sub esi,eax
// mov [rbx+1C],eax
db 2b f0 89 43 1c
MORP:
// add r8d,ecx
// cmp r8d,[rax+5C]
db 44 03 c1 44 3b 40 5c
MOTR:
// add eax,[rbx+50]
// add rsp,20
db 03 43 50 48 83 c4 20
MOCP:
// inc [rcx+0C]
// mov eax,[rcx+0C]
db ff 41 0c 8b 41 0c
MOPO:
// mov edx,[rcx+3C]
// mov [rbx+0C],edx
db 8b 51 3c 89 53 0c
MOPS:
// mov r15d,[rdx+0000033C]
db 44 8b ba 3c 03 00 00
MPS2:
// mov rcx,[rax+000005B8]
db 48 8b 88 b8 05 00 00
MOSH:
// mov r15d,[r13+0000025C]
db 45 8b bd 5c 02 00 00
MOPF:
// mov rax,[rdi+08]
// mov rbx,[rsp+40]
db 48 8b 47 08 48 8b 5c 24 40
MORC:
// dec edx
// mov [rax+2C],edx
db ff ca 89 50 2c
MRC2:
// dec edx
// mov [rax+18],edx
db ff ca 89 50 18
GMTB:
// cmp byte ptr [rax+00000180],00
db 80 b8 80 01 00 00 00
MOPA:
// movss xmm1,[r11+10]
db f3 41 0f 10 4b 10
MSPS:
// mov edx,[rax+08]
// mov rcx,rax
db 8b 50 08 48 8b c8
//=========================================
// 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(iEnableMPO)
unregistersymbol(iEnableMPS)
unregistersymbol(iEnableMXP)
unregistersymbol(iEnableHAA)
unregistersymbol(iEnableMPI)
unregistersymbol(iEnableMPF)
unregistersymbol(iEnableMRC)
unregistersymbol(iEnableGMT)
unregistersymbol(iEnableMTX)
unregistersymbol(iEnablePAE)
unregistersymbol(iEnablePAS)
unregistersymbol(iEnableMSU)
unregistersymbol(iEnableMSC)
unregistersymbol(iEnableMSS)
unregistersymbol(iEnableMUS)
unregistersymbol(pPlayer)
unregistersymbol(pLord)
unregistersymbol(pHero)
unregistersymbol(pUnit)
unregistersymbol(pDebug)
unregistersymbol(pCommon)
unregistersymbol(pFood)
unregistersymbol(aLast)
//=========================================
dealloc(MyCode)
//============= Scripts End ===============
// ****************************************
// NOTES
// ****************************************
{
}
138
"[X] <== God Mode --------------------------------> (HK: CTRL+numeric 1 / CTRL+numeric 0)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableGMD",1)
getAddressList().getMemoryRecordByID(138).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableGMD",0)
getAddressList().getMemoryRecordByID(138).Color=0x00c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
153
"[X] <== Unlimited Ammo ------------------------> (HK: CTRL+numeric 1 / CTRL+numeric 0)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMTA",1)
getAddressList().getMemoryRecordByID(153).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMTA",0)
getAddressList().getMemoryRecordByID(153).Color=0x00c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
241
"[X] <== Full Wind Of Magic ----------------------> (HK: CTRL+numeric 1 / CTRL+numeric 0)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMWM",1)
getAddressList().getMemoryRecordByID(241).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMWM",0)
getAddressList().getMemoryRecordByID(241).Color=0x00c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
319
"[X] <== Spell Unlimited Usage -------------------> (HK: CTRL+numeric 1 / CTRL+numeric 0)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMSU",1)
getAddressList().getMemoryRecordByID(319).Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMSU",0)
getAddressList().getMemoryRecordByID(319).Color=0x00c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
320
"[X] <== Spell Quick Cooldown -------------------> (HK: CTRL+numeric 1 / CTRL+numeric 0)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMSC",1)
getAddressList().getMemoryRecordByID(320).Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMSC",0)
getAddressList().getMemoryRecordByID(320).Color=0x00c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
339
"[X] <== Ever fresh units (Full Vigour) ------------> (HK: CTRL+numeric 1 / CTRL+numeric 0)"
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
96
"[X] <== Minimum Treasure ----------------------> (HK: CTRL+Home / CTRL+End)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMMT",1)
getAddressList().getMemoryRecordByID(96).Color=0x0008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMMT",0)
getAddressList().getMemoryRecordByID(96).Color=0x0c08000
{$ASM}
Activate
17
36
0
Deactivate
17
35
1
247
"[X] <== Minimum Influence --------------------> (HK: CTRL+Home / CTRL+End)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPI",1)
getAddressList().getMemoryRecordByID(247).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPI",0)
getAddressList().getMemoryRecordByID(247).Color=0x00c08000
{$ASM}
Activate
17
36
0
Deactivate
17
35
1
248
"[X] <== Minimum Food (Skaven) ----------------> (HK: CTRL+Home / CTRL+End)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPF",1)
getAddressList().getMemoryRecordByID(248).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPF",0)
getAddressList().getMemoryRecordByID(248).Color=0x00c08000
{$ASM}
Activate
17
36
0
Deactivate
17
35
1
143
"[X] <== Research in 1 Turn ----------------------> (HK: CTRL+Home / CTRL+End)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMRP",1)
getAddressList().getMemoryRecordByID(143).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMRP",0)
getAddressList().getMemoryRecordByID(143).Color=0x00c08000
{$ASM}
Activate
17
36
0
Deactivate
17
35
1
161
"[X] <== Construction in 1 Turn ------------------> (HK: CTRL+Home / CTRL+End)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMCP",1)
getAddressList().getMemoryRecordByID(161).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMCP",0)
getAddressList().getMemoryRecordByID(161).Color=0x00c08000
{$ASM}
Activate
17
36
0
Deactivate
17
35
1
278
"[X] <== Rites Cooldown in 1 Turn ---------------> (HK: CTRL+Home / CTRL+End)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMRC",1)
getAddressList().getMemoryRecordByID(278).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMRC",0)
getAddressList().getMemoryRecordByID(278).Color=0x00c08000
{$ASM}
Activate
17
36
0
Deactivate
17
35
1
144
"[X] <== Minimum Public Order ------------------> (HK: CTRL+Home / CTRL+End)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPO",1)
getAddressList().getMemoryRecordByID(144).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPO",0)
getAddressList().getMemoryRecordByID(144).Color=0x00c08000
{$ASM}
Activate
17
36
0
Deactivate
17
35
1
146
"[X] <== Minimum Pop Surplus ------------------> (HK: CTRL+Home / CTRL+End)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPS",1)
getAddressList().getMemoryRecordByID(146).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPS",0)
getAddressList().getMemoryRecordByID(146).Color=0x00c08000
{$ASM}
Activate
17
36
0
Deactivate
17
35
1
139
"[X] <== Recover Troop Size ---------------------> (HK: CTRL+Page Up / CTRL+Page Down)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMTS",1)
getAddressList().getMemoryRecordByID(139).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMTS",0)
getAddressList().getMemoryRecordByID(139).Color=0x00c08000
{$ASM}
Activate
17
33
0
Deactivate
17
34
1
140
"[X] <== Recruitment in 1 Turn ------------------> (HK: CTRL+Page Up / CTRL+Page Down)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMTR",1)
getAddressList().getMemoryRecordByID(140).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMTR",0)
getAddressList().getMemoryRecordByID(140).Color=0x00c08000
{$ASM}
Activate
17
33
0
Deactivate
17
34
1
147
"[X] <== Unlimited Action Points ---------------> (HK: CTRL+Insert / CTRL+Delete)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMAP",1)
getAddressList().getMemoryRecordByID(147).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMAP",0)
getAddressList().getMemoryRecordByID(147).Color=0x00c08000
{$ASM}
Activate
17
45
0
Deactivate
17
46
1
149
"[X] <== Agents can Act Again -------------------> (HK: CTRL+Insert / CTRL+Delete)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableHAA",1)
getAddressList().getMemoryRecordByID(149).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableHAA",0)
getAddressList().getMemoryRecordByID(149).Color=0x00c08000
{$ASM}
Activate
17
45
0
Deactivate
17
46
1
155
"[X] <== Hero XP almost complete -------------> (HK: CTRL+Insert / CTRL+Delete)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMXP",1)
getAddressList().getMemoryRecordByID(155).Color=0x00008000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMXP",0)
getAddressList().getMemoryRecordByID(155).Color=0x00c08000
{$ASM}
Activate
17
45
0
Deactivate
17
46
1
280
"[X] <== Auto-Resolve God Mode --------------> (HK: CTRL+numeric 7 / CTRL+numeric 4)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableGMT",1)
getAddressList().getMemoryRecordByID(280).Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableGMT",0)
getAddressList().getMemoryRecordByID(280).Color=0x00c08000
{$ASM}
Activate
17
103
0
Deactivate
17
100
1
281
"[X] <== Troops Quick Level Up -----------------> (HK: CTRL+numeric 9 / CTRL+numeric 6)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMTX",1)
getAddressList().getMemoryRecordByID(281).Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMTX",0)
getAddressList().getMemoryRecordByID(281).Color=0x00c08000
{$ASM}
Activate
17
105
0
Deactivate
17
102
1
308
"[X] <== Minimum Amber per Settlement -----> (HK: CTRL+numeric 8 / CTRL+numeric 5)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnablePAS",1)
getAddressList().getMemoryRecordByID(308).Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnablePAS",0)
getAddressList().getMemoryRecordByID(308).Color=0x00c08000
{$ASM}
Activate
17
104
0
Deactivate
17
101
1
309
"[X] <== Minimum Event Amber (total) ---------> (HK: CTRL+numeric 8 / CTRL+numeric 5)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnablePAE",1)
getAddressList().getMemoryRecordByID(309).Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnablePAE",0)
getAddressList().getMemoryRecordByID(309).Color=0x00c08000
{$ASM}
Activate
17
104
0
Deactivate
17
101
1
330
"[X] <== Minimum Slaves per Settlement (DE) -> (HK: CTRL+numeric 8 / CTRL+numeric 5)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMSS",1)
getAddressList().getMemoryRecordByID(330).Color=0x00004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMSS",0)
getAddressList().getMemoryRecordByID(330).Color=0x00c08000
{$ASM}
Activate
17
104
0
Deactivate
17
101
1
243
"[X] <==================== Lord/Hero Info"
404080
1
244
"Lord/Hero Name ==>"
FF00FF
String
32
1
0
1
pHero
0
8
370
245
"Current Available Points ==>"
0000FF
4 Bytes
pHero
568
246
"Current XP ==>"
0000FF
4 Bytes
pHero
574
266
"[X] <==================== Player Info"
404080
1
267
"Faction Name ==>"
FF00FF
String
32
1
0
1
pPlayer
0
8
ba8
268
"Current Treasure (ALL) ==>"
0000FF
4 Bytes
pPlayer
b60
269
"Current Influence (High Elves Only) ==>"
0000FF
4 Bytes
pPlayer
e00
326
"Resource Name ==>"
FF8080
String
32
0
0
1
pPlayer
0
8
0
0
10
1c68
328
"Current Value ==>"
0000FF
4 Bytes
pPlayer
20
10
1c68
327
"Resource Name ==>"
FF8080
String
32
0
0
1
pPlayer
0
8
0
38
10
1c68
329
"Current Value ==>"
0000FF
4 Bytes
pPlayer
58
10
1c68
228
"[X] <== Table/Script Information"
0000FF
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
getMainForm().CommentButton.doClick()
{$ASM}
[disable]
Recifense
20180630
===========================================
Game Title : Total War - Warhammer 2
Game Version : 1.4.1 (7450)
Game Sponsor : Patrons
Process Name : Warhammer2.exe
Relevant Info : 64bits/TBS/RTS
Script Version: 5.5
CE Version : 6.7
Release date : 30-Jun-2018
Author : Recifense
History:
29-Sep-2017: First Release
30-Sep-2017: Trying to Fix Construction + Minimum Food (s2.0)
01-Oct-2017: Added "Rites Cooldown in 1 turn" and fix "CanActAgain" (s3.0)
03-Oct-2017: Included Arks in Pop Surplus (s3.1)
10-Oct-2017: God Mode for Auto-Resolve battles and Troop Quick Level Up (s3.2)
26-Oct-2017: Release for version 1.1.0-4871
28-Oct-2017: Porting of AMBER features from Warhammer TW (s3.3)
04-Nov-2017: Release for version 1.1.0-5003 beta
09-Nov-2017: Release for version 1.1.1-5078
14-Dec-2017: Release for version 1.2.0-5568
23-Jan-2018: Release for version 1.3.0-6014 (Rise of the Tomb kings)
24-Jan-2018: Added two more features releated to spell durng combat (s5.0)
25-Jan-2018: Include spells related to the army (s5.1)
30-Jan-2018: Minimum Slave per Settlement (Dark Elves) (s5.2)
14-Feb-2018: Release for version 1.3.1-6213 + Min Pop Surplus = 30 (s5.3)
31-May-2018: Release for version 1.4.0-7243
20-Jun-2018: Release for version 1.4.0-7312 Beta (CE68)(s5.4)
21-Jun-2018: Release for version 1.4.1-7450
30-Jun-2018: Include "Ever fresh units (Full Vigour)" (CE67)(s5.5)
Features:
- God Mode (RTS) [1]
- Full Ammo (RTS) [2]
- Minimum Leadership (RTS) [3] (GM)
- Fast Recover of Winds of Magic (RTS) [L]
- Unlimited use of limited spells (RTS) [M] (s5.0) new
- Spell Quick Cooldown (RTS) [N] (s5.0) new
- Ever fresh units (RTS) [P] (s5.5) new
- Minimum Treasure [4]
- Minimum Influence [E]
- Minimum Food (Skaven) [F]
- Unlimited Action Points [5]
- Recover Troop Size/Hero HP [6]
- Research in 1 turn [7]
- Recruitment in 1 turn [8]
- Construction in 1 turn [9]
- Rites Cooldown in 1 turn [G]
- Minimum Public Order [A]
- Minimum Pop Surplus [B] (including Arks) (s3.1)
- Level almost complete (sel hero XP) [C]
- Hero can Act Again [D]
- God Mode for Auto-resolve battles [H] (s3.2)
- Troops Quick Level Up [I] (s3.2)
- Minimum Amber Per Settlement[J] (s3.3)
- Minimum Total Event Amber [K] (s3.3)
- Minimum Slaves Per Settlement [O] (s5.2) (for Dark Elves)
- Some Pointers [R]
===========================================
[1] For your troops/heroes/lords duirng RTS battles;
[2] For your troops that use it;
[3] For avoiding your troops/heroes/lords to panic (Included in GM);
[4] Minimum value is 68000;
[5] Your armies and heroes can move freely;
[6] Your troops will recover size and lords will recover health;
[7] Your research will complete in 1 turn;
[8] Your armies will be reinforced in 1 turn;
[9] The construction in your provinces will complete in 1 turn;
[A] Minimum Public Order for your provinces will be 68;
[B] Every time you access your province the POP Surplus will be 10 at least;
[C] Your Heroes/Lords/etc will level up quickly;
[D] You heroes/Lords/etc can act more then once during a turn;
[E] Minimum value is 68;
[F] Minimum value is 80;
[G] A Rite per turn;
[H] You don't need to manually fight all battles;
[I] Troops will get to max level after the first battle;
[J] When playing Elves, minimu is set to 5;
[K] When playing Elves, minimu is set to 15;
[L] Minimum Wind of Magic = 30;
[M] Spell Usage Number will not decrease (Troop);
[N] Maximum Spell Cooldown = 5 seconds (Troop);
[O] Minimum Slaves per Settlement = 20%;
[P] Units always fresh during battle (for human Player only);
[R] Used at the table;
===========================================
[USAGE]
1) Run CE67;
2) Run Game;
3) Load the game process "Warhammer2.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]
- See description on the table entries;
===========================================
[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
===========================================
Cheers!