4
"[X] <== XCOM 2 v1.0.0.38128 Steam Script v4.0"
FF0000
Auto Assembler Script
{
===========================================
Game Title : XCOM 2
Game Version : 1.0.0.38128
Game Sponsor : TheSavior
Process Name : XCom2.exe
Relevant Info : Unreal Engine/64bits/TBA
Script Version: 4.0
CE Version : 6.7
Release date : 27-Sep-2017
Author : Recifense
History:
08-Jul-2017: First Release
27-Sep-2017: Include other controlled units (s2.0)
10-Oct-2017: Include Resistense units (s3.0)
15-Oct-2017: Weak Foe (s4.0)
Features:
- Strong Units
- Min Health = 670
- Min Aim = 500
- Min Mobility = 100
- Min Will = 900
- Min Hack = 500
- Min Dodge = 500
- Min Armor = 10
- Min Shield = 1000
- Include all controlled units
- Include all units with a name (s3.0)
- Weak Foe (s4.0)
- Some Pointers
===========================================
}
//=========================================
// Checking CE version
{$lua}
if(getCEVersion() < 6.7) then
ShowMessage('Sorry. 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 ~= "XCom2.exe") then
ShowMessage('Error. Expected Process = XCom2.exe')
end
{$asm}
//=========================================
// Definitions
define(LUDO,"XCom2.exe")
define(MOPU,XCom2.exe+00b5eea1)
define(MORU,XCom2.exe+00c0e551)
//=========================================
// Constants used in the script (that can be changed)
define(ctCE67,(float)6.7)
//=========================================
[ENABLE]
//=========================================
//LuaCall(CheckVersion())
//=========================================
// Check if script is compatible to this game version
// If false the script will not be loaded
assert(MOPU,48 8b 03 48 8b cb ff 90 e0 03 00 00)
assert(MORU,8b 93 88 07 00 00 41 83 c9 ff 48 8b c8)
//=========================================
alloc(MyCode,4096,$process)
//=========================================
// Declaration section
label(_MonPlayerUnits)
label(_BackMPU)
label(_ExitMPU)
label(_MonResistenseUnits)
label(_BackMRU)
label(_ExitMRU)
label(iEnableMPU)
label(iEnableICU)
label(iEnableIRU)
label(iEnableWKF)
label(iID)
label(pUnit)
//=========================================
// Registering Symbols
registersymbol(MyCode)
registersymbol(iEnableMPU)
registersymbol(iEnableICU)
registersymbol(iEnableIRU)
registersymbol(iEnableWKF)
registersymbol(iID)
registersymbol(pUnit)
//=========================================
MyCode:
//========================================= NHP (s2.0)
// Unit Under Cursor
_MonPlayerUnits:
mov rax,_BackMPU
mov [pBack+00],rax
movsd [qxmm],xmm0
cmp dword ptr [rbx+00000388],#10
jne _ExitMPU
cmp dword ptr [rbx+00000590],#20
jne _ExitMPU
mov [pUnit],rbx
mov eax,[rbx+000001dc]
mov rax,[rbx+0000098c]
test rax,rax
jnz _MonPU00
cmp dword ptr [iEnableICU],0
je _ExitMPU // Jump if feature is disabled
cmp dword ptr [iID],00
je _ExitMPU
mov eax,[rbx+00000788]
cmp eax,[iID]
je _MonPU01
jmp _ExitMPU
//---
_MonPU00:
cmp dword ptr [rbx+00000994],00
je _ExitMPU
cmp dword ptr [rbx+00000994],#50
jns _ExitMPU
_MonPU01:
mov eax,[rbx+00000994]
cmp eax,[rbx+00000998]
jne _ExitMPU
mov eax,[rbx+00000788]
mov [iID],eax
cmp dword ptr [iEnableMPU],0
je _ExitMPU // Jump if feature is disabled
mov dword ptr [rbx+000000dc],00
//H 2
mov eax,#670
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+000001e4]
movss [rbx+000001e4],xmm0
movss [rbx+000001e0],xmm0
movss [rbx+000001dc],xmm0
//A 3
mov eax,#500
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+00000218]
movss [rbx+00000218],xmm0
movss [rbx+00000214],xmm0
movss [rbx+00000210],xmm0
//M 5
mov eax,#200
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+00000280]
movss [rbx+00000280],xmm0
movss [rbx+0000027c],xmm0
movss [rbx+00000278],xmm0
//W 6
mov eax,#900
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+000002b4]
movss [rbx+000002b4],xmm0
movss [rbx+000002b0],xmm0
movss [rbx+000002ac],xmm0
//H 7
mov eax,#500
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+000002e8]
movss [rbx+000002e8],xmm0
movss [rbx+000002e4],xmm0
movss [rbx+000002e0],xmm0
//D 12
mov eax,#500
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+000003ec]
movss [rbx+000003ec],xmm0
movss [rbx+000003e8],xmm0
movss [rbx+000003e4],xmm0
//A 14
mov eax,#10
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+00000454]
movss [rbx+00000454],xmm0
movss [rbx+00000450],xmm0
movss [rbx+0000044c],xmm0
//S 26
mov eax,#1000
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+000006c4]
movss [rbx+000006c4],xmm0
movss [rbx+000006c0],xmm0
movss [rbx+000006bc],xmm0
//testing
mov eax,#100
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+0000031c] //8 27
movss [rbx+0000031c],xmm0
movss [rbx+00000318],xmm0
movss [rbx+00000314],xmm0
mov eax,#100
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+000003b8] //11 3
movss [rbx+000003b8],xmm0
movss [rbx+000003b4],xmm0
movss [rbx+000003b0],xmm0
mov eax,#100
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+00000524] //18 9
movss [rbx+00000524],xmm0
movss [rbx+00000520],xmm0
movss [rbx+0000051c],xmm0
mov eax,#100
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+00000690] //25 40
movss [rbx+00000690],xmm0
movss [rbx+0000068c],xmm0
movss [rbx+00000688],xmm0
_ExitMPU:
movsd xmm0,[qxmm]
mov rax,[rbx] // Original code (get p1stPointer)
mov rcx,rbx // Original code
call qword ptr [rax+000003e0] // Original code
jmp [pBack+00] // Back to main code
//=========================================
// During Battle (All units with a name)
_MonResistenseUnits:
mov rdx,_BackMRU
mov [pBack+08],rdx
mov rdx,rax
movsd [qxmm],xmm0
cmp dword ptr [rbx+00000388],#10
jne _ExitMRU
cmp dword ptr [rbx+00000590],#20
jne _ExitMRU
mov eax,[rbx+000001dc]
mov rax,[rbx+0000098c]
test rax,rax
jz _MonRU00
cmp dword ptr [rbx+00000994],00
je _MonRU00
cmp dword ptr [rbx+00000994],#50
jns _ExitMRU
mov eax,[rbx+00000994]
cmp eax,[rbx+00000998]
jne _ExitMRU
cmp dword ptr [iEnableMPU],0
je _ExitMRU // Jump if feature is disabled
//H 2
mov eax,#670
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+000001e4]
movss [rbx+000001e4],xmm0
movss [rbx+000001e0],xmm0
movss [rbx+000001dc],xmm0
//W 6
mov eax,#900
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+000002b4]
movss [rbx+000002b4],xmm0
movss [rbx+000002b0],xmm0
movss [rbx+000002ac],xmm0
//D 12
mov eax,#500
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+000003ec]
movss [rbx+000003ec],xmm0
movss [rbx+000003e8],xmm0
movss [rbx+000003e4],xmm0
//A 14
mov eax,#10
cvtsi2ss xmm0,eax
maxss xmm0,[rbx+00000454]
movss [rbx+00000454],xmm0
movss [rbx+00000450],xmm0
movss [rbx+0000044c],xmm0
jmp _ExitMRU
//-----
_MonRU00:
cmp dword ptr [iEnableWKF],0
je _ExitMRU // Jump if feature is disabled
mov eax,[rbx+00000788]
cmp eax,[iID]
je _ExitMRU
xor rax,rax
mov [rbx+0000044c],eax
//H 2
mov eax,(float)2.0
cmp [rbx+000001dc],eax
js _ExitMRU
mov [rbx+000001dc],eax
_ExitMRU:
mov rax,rdx
movsd xmm0,[qxmm]
mov edx,[rbx+00000788] // Original code (get 1stPointer)
or r9d,-01 // Original code
mov rcx,rax // Original code
jmp [pBack+08] // Back to main code
//=========================================
align 10,'='
db '===============================>'
db 'CE6.7 Script by Recifense 171012'
//=========================================
// Variables
iEnableMPU:
dd 0
iEnableICU:
dd 0
iEnableIRU:
dd 0
iEnableWKF:
dd 0
iID:
dd 55555555
dd 0
qxmm:
dq 0
pUnit:
dq 0
pBack:
dq 0,0
//=========================================
// Hacking Points
MOPU:
mov rax,_MonPlayerUnits
jmp rax
_BackMPU:
MORU:
mov rdx,_MonResistenseUnits
jmp rdx
nop
_BackMRU:
//=========================================
// Script for Restoring Original Codes
[DISABLE]
MOPU:
db 48 8b 03 48 8b cb ff 90 e0 03 00 00
MORU:
db 8b 93 88 07 00 00 41 83 c9 ff 48 8b c8
//=========================================
// Unregistering Symbols
unregistersymbol(MyCode)
unregistersymbol(iEnableMPU)
unregistersymbol(iEnableICU)
unregistersymbol(iEnableIRU)
unregistersymbol(iEnableWKF)
unregistersymbol(iID)
unregistersymbol(pUnit)
//=========================================
dealloc(MyCode)
//============= Scripts End ===============
// ****************************************
// NOTES
// ****************************************
{
}
98
"[X] <==== Super Units ----------------- (HK: CTRL+numeric 1/CTRL+numeric 0)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableMPU",1)
getAddressList().getMemoryRecordByID(98).Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableMPU",0)
getAddressList().getMemoryRecordByID(98).Color=0x0c08000
{$ASM}
Activate
17
97
0
Deactivate
17
96
1
117
"[X] <== Include All Controlled Units (HK: CTRL+numeric 3/CTRL+numeric 0)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableICU",1)
getAddressList().getMemoryRecordByID(117).Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableICU",0)
getAddressList().getMemoryRecordByID(117).Color=0x0c08000
{$ASM}
Activate
17
99
0
Deactivate
17
96
1
229
"[X] <== Include Resistense Units ---- (HK: CTRL+numeric 5/CTRL+numeric 0)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableIRU",1)
getAddressList().getMemoryRecordByID(229).Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableIRU",0)
getAddressList().getMemoryRecordByID(229).Color=0x0c08000
{$ASM}
Activate
17
101
0
Deactivate
17
96
1
230
"[X] <== Weak Foe ---------------------- (HK: CTRL+numeric 7/CTRL+numeric 7)"
C08000
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
writeInteger("iEnableWKF",1)
getAddressList().getMemoryRecordByID(230).Color=0x0004000
{$ASM}
[disable]
{$LUA}
writeInteger("iEnableWKF",0)
getAddressList().getMemoryRecordByID(230).Color=0x0c08000
{$ASM}
Activate
17
103
0
Deactivate
17
100
1
228
"[X] <== Table/Script Information [READ USAGE]"
0000FF
Auto Assembler Script
[enable]
define(test,LUDO)
{$LUA}
getMainForm().CommentButton.doClick()
{$ASM}
[disable]
Recifense
20170927
===========================================
Game Title : XCOM 2
Game Version : 1.0.0.38128
Game Sponsor : TheSavior
Process Name : XCom2.exe
Relevant Info : Unreal Engine/64bits/TBA
Script Version: 4.0
CE Version : 6.7
Release date : 27-Sep-2017
Author : Recifense
History:
08-Jul-2017: First Release
27-Sep-2017: Include other controlled units (s2.0)
10-Oct-2017: Include Resistense units (s3.0)
15-Oct-2017: Weak Foe (s4.0)
Features:
- Strong Units [1]
- Min Health = 670
- Min Aim = 500
- Min Mobility = 100
- Min Will = 900
- Min Hack = 500
- Min Dodge = 500
- Min Armor = 10
- Min Shield = 1000
- Include all controlled units [2]
- Include all units with a name (s3.0)[3]
- Weak Foe (s4.0) [4]
- Some Pointers [5]
===========================================
[1] Human Player's Units will be pretty strong; (*)
[2] During a mission you can make other controlled units stronger as well;
[3] When protection reistense units;
[4] Enemy only at any battle (max HP = 2 and no Armor).
[5] not used yet
[*] Disable the option: when a battle scenario is loading.
Enable the option: After a battle, when going back to base (it will heal the units) and let it enabled at the base.
===========================================
[USAGE]
- Run CE 6.7 or greater;
- Run the GAME;
- Load game process "XCom2.exe" via CE;
- Load this Table;
- Activate the maint script by clicking on its box [X];
- Go back to the game and have fun.
===========================================
[AT THE SVENGER or AT THE FIST MISSION]
-------------------------------------------
[ACTIVATE SUPER UNIT SCRIPT] => [CTRL+Num 1]
- When you are at the ship (the Avenger];
- When coming back from a mission at [Press any key to continue]
[DEACTIVATE SUPER UNIT SCRIPT] => [CTRL+Num 0]
- When about to start a new mission (after choosing the squad);
===========================================
[AT A MISSION to PROTECT A VIP or a friend Unit help]
-------------------------------------------
[MAKING A SUPER UNIT DURING A MISSION] (**)
- Cycle through all units using the arrow icon;
- Activate "Super Units" Script [CTRL+Num 1];
- Activate Include All Controlled Units" Script [CTRL+Num 3];
- Cycle through all units using the arrow icon again;
- Deactivate both scripts [CTRL+Num 0]
(**) Very useful at the first/last mission, when soldiers are added during mission and when dealing with civilians;
===========================================
[AT A MISSION to PROTECT RESISTENSE UNITS]
-------------------------------------------
[MAKING STRONG UNITS] (***)
- Activate "Super Units" Script [CTRL+Num 1];
- Activate Include All Resistense Units" Script [CTRL+Num 5];
- Wait a few seconds;
- Deactivate both scripts [CTRL+Num 0]
(***) Very useful at mission of protecting resistense units;
===========================================
[WEAK FOE]
- After saving the game and after going through above options;
- Activate "Weak Foe" Script [CTRL+Num 7];
- Go through mission;
- Deactivate "Weak foe" Script [CTRL+Num 4] before closing mission.
(****) Very useful when killing special units;
===========================================
HOTKEYS:
- Look at each table entry.
===========================================
[WARNING]
- This table is meant to be used in single player games.
- Save your game before using these cheats (you may not like the result).
===========================================
[INFO]
Tested on Win10 64bits
===========================================
Cheers to you, Patron! Thank you for supporting my work!
"XCom2.exe"+FD0B6
RAX = RCX
"XCom2.exe"+FD0BB
RDX = Resource.iResourceID/Hash?
"XCom2.exe"+821C6D
mov rax,[XCom2.exe+24625B8]
"XCom2.exe"+821C76
RAX = RCX
"XCom2.exe"+821C7B
RDX = Unit.Hash
"XCom2.exe"+E3B187
GetTemplate()