6
"[X] <== Warhammer 40,000 Mechanicus v1.2.5 Steam Script v2.1"
FF0000
Auto Assembler Script
{
===========================================
Game Title : Warhammer 40,000 Mechanicus
Game Version : 1.2.5
Game Sponsor : Myself (with PATREON funds)
Process Name : Mechanicus.exe
Relevant Info : Unity Engine/64bits/TBS
Script Version: 2.1
CE Version : 6.8
Release date : 17-May-2019
Author : Recifense
History:
18-Nov-2018: First Release (for version 1.0.5)
21-Nov-2018: Added "Max Necron AP", "Max Awake per FM" and "Quick Kill" (s2.0)
17-May-2019: Release for version 1.2.5 (s2.1)
Features:
- God Mode
- Quick Kill (new)(s2.0)
- Minimum Resource
- No decreasing Tactical Points
- Maximum Necron Awake Prog (new)(s2.0)
- Max Awake per finished Missions (new)(s2.0)
- Some Pointers
===========================================
}
//=========================================
// Checking CE version
{$lua}
if(getCEVersion() < 6.8) then
ShowMessage('Sorry. CE version should be 6.8 or above')
end
{$asm}
//=========================================
// Checking Selected Process
{$lua}
if(process == nil) then
ShowMessage('No process was selected')
elseif (string.upper(process) ~= string.upper("Mechanicus.exe")) then
ShowMessage('Warning. Expected Process = Mechanicus.exe')
end
{$asm}
//=========================================
// Checking if CE mono features are ON
{$lua}
monoAA_USEMONO(process,false)
{$asm}
//=========================================
// Definitions
define(LUDO,"Mechanicus.exe")
//=========================================
// Constants used in the script (that can be changed)
define(ctCE68,(float)6.8)
define(ctMMON,#68000) // Minimum Money
define(ctMATT,#10) // Minimum Attributes
//=========================================
[ENABLE]
//=========================================
// Check if script is compatible to this game version
// If false the script will not be loaded
define(GDMD,Mechanicus.Data.Entities:EntityLife:Add+0000)
define(MOMR,Mechanicus.ArkMechanicus.Config:ArkMechanicusConfig:get_ResourceDataOwned+000e)
define(MOTP,Mechanicus.Dungeon.Blackbox.GameEffects:GameEffectNodePlayerTacticalPointSpend:Apply+0014)
define(MONC,Mechanicus.Saves:SaveDataArkMechanicusStory:set_OverallNecronCountdown+0001)
define(MCAL,Mechanicus.Dungeon.Data.Level:DungeonAwakeGauge:GetCurrentAlarmLevel+0001)
assert(GDMD,55 48 8b ec 56 57 41 57 48 83 ec 08)
assert(MOMR,48 8b 00 48 8b 80 a0 00 00 00 48 8b 40 20 48 63 40 10)
assert(MOTP,48 63 48 60 48 63 56 18 2B CA 89 48 60)
assert(MONC,48 8b ec 57 48 83 ec 08 48 8b f9 48 89 55 f0)
assert(MCAL,48 8b ec 56 48 83 ec 08 48 8b f1 48 63 56 10)
//=========================================
alloc(MyCode,4096,$process)
//=========================================
// Declaration section
label(_GodMode)
label(_BackGMD)
label(_MonMinRes)
label(_BackMMR)
label(_MonTacPoints)
label(_BackMTP)
label(_MonNecronCount)
label(_BackMNC)
label(_MonCurAlarmLevel)
label(_BackMAL)
label(iEnableGMD)
label(iEnableMMR)
label(iEnableMTP)
label(iEnableMQK)
label(iEnableMNC)
label(iEnableMAL)
label(pUnit)
label(pSS)
label(pTP)
label(pTeam)
label(pGDMD)
label(pMOMR)
label(pMOTP)
label(pMONC)
label(pMCAL)
//=========================================
// Registering Symbols
registersymbol(MyCode)
registersymbol(iEnableGMD)
registersymbol(iEnableMMR)
registersymbol(iEnableMTP)
registersymbol(iEnableMQK)
registersymbol(iEnableMNC)
registersymbol(iEnableMAL)
registersymbol(pUnit)
registersymbol(pSS)
registersymbol(pTP)
registersymbol(pTeam)
registersymbol(pGDMD)
registersymbol(pMOMR)
registersymbol(pMOTP)
registersymbol(pMONC)
registersymbol(pMCAL)
//=========================================
MyCode:
//=========================================
// During Combat (HP and Armor)
_GodMode:
mov rax,_BackGMD
mov [pRET+00],rax
mov [pRBX],rbx
mov [pUnit],rcx
cmp dword ptr [iEnableGMD],0
je _ExitGMD // Jump if feature is disabled
test r8d,r8d
jns _ExitGMD
mov rax,[rcx+10] // pNT
test rax,rax
jz _ExitGMD
mov rbx,[rax+70] // pP
and ebx,ffff0000 // Trying to avoid possible crash
test rbx,rbx
jz _GodMD00
mov rbx,[rax+70] // pP
cmp byte ptr [rbx+70],01
jne _GodMD00
mov eax,[rcx+18]
mov [rcx+1c],eax
xor r8,r8
inc r8
jmp _ExitGMD
_GodMD00:
cmp dword ptr [iEnableMQK],0
je _ExitGMD // Jump if feature is disabled
xor r8,r8
mov r8d,#-50
_ExitGMD:
mov rbx,[pRBX]
push rbp // Original code
mov rbp,rsp // Original code
push rsi // Original code
push rdi // Original code
push r15 // Original code
sub rsp,08 // Original code
jmp [pRET+00] // Back to main code
//========================================= (s1.0)+(s2.0) v124 *
// When changing tabs at base (resource+awakening)
_MonMinRes:
mov r11,_BackMMR
mov [pRET+08],r11
mov rax,[rax] // Original code
mov [pSS],rax
mov rax,[rax+000000a0] // Original code (get pSDAM)
mov r11,[rax+30] // get pSDAMS (Story)
mov [pTeam],r11
mov rax,[rax+20] // Original code
cmp dword ptr [iEnableMMR],0
je _MonMR00 // Jump if feature is disabled
cmp dword ptr [rax+10],#36800
jns _MonMR00
mov dword ptr [rax+10],#36800
_MonMR00:
_ExitMMR:
movsxd rax,dword ptr [rax+10] // Original code
jmp [pRET+08] // Back to main code
//========================================= v124 *
// When spending tactical points
_MonTacPoints:
mov r11,_BackMTP
mov [pRET+10],r11
mov [pTP],rsi
cmp dword ptr [iEnableMTP],0
je _ExitMTP // Jump if feature is disabled
mov r11,[rax+10]
test r11,r11
jz _ExitMTP
cmp byte ptr [r11+70],01
jne _ExitMTP
xor rdx,rdx
dec rdx
mov [rsi+18],edx
_ExitMTP:
movsxd rcx,dword ptr [rax+60] // Original code
movsxd rdx,dword ptr [rsi+18] // Original code
sub ecx,edx // Original code
mov [rax+60],ecx // Original code
jmp [pRET+10] // Back to main code
//=========================================
// When updating overall necron countdown
_MonNecronCount:
mov r11,_BackMNC
mov [pRET+18],r11
cmp dword ptr [iEnableMNC],0
je _ExitMNC // Jump if feature is disabled
cmp edx,#98
jle _ExitMNC
mov edx,#98
_ExitMNC:
mov rbp,rsp // Original code
push rdi // Original code
sub rsp,08 // Original code
mov rdi,rcx // Original code
mov [rbp-10],rdx // Original code
jmp [pRET+18] // Back to main code
//=========================================
// When updating mission result
_MonCurAlarmLevel:
mov r11,_BackMAL
mov [pRET+20],r11
cmp dword ptr [iEnableMAL],0
je _ExitMAL // Jump if feature is disabled
cmp dword ptr [rcx+10],#16
jle _ExitMAL
mov dword ptr [rcx+10],#16
_ExitMAL:
mov rbp,rsp // Original code
push rsi // Original code
sub rsp,08 // Original code
mov rsi,rcx // Original code
movsxd rdx,dword ptr [rsi+10] // Original code
jmp [pRET+20] // Back to main code
//=========================================
align 10,'='
//=========================================
db '===============================>'
db 'CE6.8 Script by Recifense 190517'
//=========================================
// Variables
iEnableGMD:
dd 0
iEnableMMR:
dd 0
iEnableMTP:
dd 0
iEnableMQK:
dd 0
iEnableMNC:
dd 0
iEnableMAL:
dd 0
dd 0
dd 0
pUnit:
dq 0
pSS:
dq 0
pTP:
dq 0
pTeam:
dq 0
pRBX:
dq 0
pRET:
dq 0,0,0,0,0,0
//=========================================
// Hacking Points
GDMD:
pGDMD:
mov rax,_GodMode
jmp rax
_BackGMD:
MOMR:
pMOMR:
mov r11,_MonMinRes
jmp r11
nop
nop
nop
nop
nop
_BackMMR:
MOTP:
pMOTP:
mov r11,_MonTacPoints
jmp r11
_BackMTP:
MONC:
pMONC:
mov r11,_MonNecronCount
jmp r11
nop
nop
_BackMNC:
MCAL:
pMCAL:
mov r11,_MonCurAlarmLevel
jmp r11
nop
nop
_BackMAL:
//=========================================
// Script for Restoring Original Codes
[DISABLE]
pGDMD:
db 55 48 8b ec 56 57 41 57 48 83 ec 08
pMOMR:
db 48 8b 00 48 8b 80 a0 00 00 00 48 8b 40 20 48 63 40 10
pMOTP:
db 48 63 48 60 48 63 56 18 2B CA 89 48 60
pMONC:
db 48 8b ec 57 48 83 ec 08 48 8b f9 48 89 55 f0
pMCAL:
db 48 8b ec 56 48 83 ec 08 48 8b f1 48 63 56 10
//=========================================
// Unregistering Symbols
unregistersymbol(MyCode)
unregistersymbol(iEnableGMD)
unregistersymbol(iEnableMMR)
unregistersymbol(iEnableMTP)
unregistersymbol(iEnableMQK)
unregistersymbol(iEnableMNC)
unregistersymbol(iEnableMAL)
unregistersymbol(pUnit)
unregistersymbol(pSS)
unregistersymbol(pTP)
unregistersymbol(pTeam)
unregistersymbol(pGDMD)
unregistersymbol(pMOMR)
unregistersymbol(pMOTP)
unregistersymbol(pMONC)
unregistersymbol(pMCAL)
//=========================================
dealloc(MyCode)
//============= Scripts End ===============
// ****************************************
// NOTES
// ****************************************
{
}
229
"[X] <== God Mode"
C08000
Auto Assembler Script
[enable]
{$LUA}
writeInteger("iEnableGMD",1)
memrec.Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableGMD",0)
memrec.Color=0x0c08000
{$ASM}
230
"[X] <== Quick Kill"
C08000
Auto Assembler Script
[enable]
{$LUA}
writeInteger("iEnableMQK",1)
memrec.Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMQK",0)
memrec.Color=0x0c08000
{$ASM}
8
"[X] <== Minimum Resource"
C08000
Auto Assembler Script
[enable]
{$LUA}
writeInteger("iEnableMMR",1)
memrec.Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMMR",0)
memrec.Color=0x0c08000
{$ASM}
35
"[X] <== No Decreasing Tactical Points"
C08000
Auto Assembler Script
[enable]
{$LUA}
writeInteger("iEnableMTP",1)
memrec.Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMTP",0)
memrec.Color=0x0c08000
{$ASM}
37
"[X] <==Maximum Necron Awake Progress"
C08000
Auto Assembler Script
[enable]
{$LUA}
writeInteger("iEnableMNC",1)
memrec.Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMNC",0)
memrec.Color=0x0c08000
{$ASM}
43
"[X] <== Maximum Awake Level per Finished Missions (*)"
C08000
Auto Assembler Script
[enable]
{$LUA}
writeInteger("iEnableMAL",1)
memrec.Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMAL",0)
memrec.Color=0x0c08000
{$ASM}
228
"[X] <== Table/Script Information"
0000FF
Auto Assembler Script
[enable]
{$LUA}
getMainForm().CommentButton.doClick()
{$ASM}
[disable]
Recifense
20190517
===========================================
Game Title : Warhammer 40,000 Mechanicus
Game Version : 1.2.5
Game Sponsor : Myself (with PATREON funds)
Process Name : Mechanicus.exe
Relevant Info : Unity Engine/64bits/TBS
Script Version: 2.1
CE Version : 6.8
Release date : 17-May-2019
Author : Recifense
History:
18-Nov-2018: First Release (for version 1.0.5)
21-Nov-2018: Added "Max Necron AP", "Max Awake per FM" and "Quick Kill" (s2.0)
17-May-2019: Release for version 1.2.5 (s2.1)
Features:
- God Mode [1]
- Quick Kill [2] (new)(s2.0)
- Minimum Resource [3]
- Maximum Necron Awake Prog [4] (new)(s2.0)
- Max Awake per finished Missions [5] (new)(s2.0)
- Unlimited Tactical Points [6]
- Some Pointers
===========================================
[1] For human player's units;
[2] Enemy is killed (not destroyed) with one attack (if the attack gets through);
[3] Minimum Value = 36800;
[4] The progress will not go over 98% (you can play more than 30 missions);
[5] All finished missions will have 3 as maximun awake level;(**) and (***)
[6] Tactital points will not decrease (*);
(*) The UI icons will be turned off (but the value will not decrease);
(**) Only enable it, when at the missions menu. Then have a look at the mission progress;
(***) The change is permanent for next savegame;
===========================================
[USAGE]
- Run CE 6.8 or greater;
- Run the GAME;
- Load game process "Mechanicus.exe" via CE;
- Start or load a game;
- Load this Table;
- Activate the main script by clicking on its box [X];
- Now Activate the script of each cheat you want to use;
- Go back to the game and have fun.
[NOTE]
- Before closing the game, deactivate the MAIN SCRIPT or close CE.
===========================================
HOTKEYS:
- See each table entry
===========================================
[WARNING]
- This table is meant to be used in single player games.
===========================================
[INFO]
Tested on Win10 64bits
===========================================
[NOTE]
Big thanks to my PATRONS for providing the funds.
===========================================
Cheers!