Here's my script for getting easier building upgrades. With it enabled you don't need to provide all the materials to upgrade buildings, just one unit of something will suffice (like 50 iron/30 chemicals/etc...)
Code: Select all
[ENABLE]
aobscanmodule(startAddingMats,ds.exe,8B 02 4C 8B E2 01) // should be unique
alloc(newmem,$1000,"ds.exe"+295451A)
label(code)
label(return)
newmem:
code:
push rax
push rbx
push rcx
push rdx
pushfq
sub rdx,54
xor rcx,rcx
@@:
lea rbx,[rdx+rcx]
mov eax,dword ptr [rbx+24]
sub eax,dword ptr [rbx+3c]
mov dword ptr [rbx+54],eax
add rcx,04
cmp rcx,14
jle @b
popfq
pop rdx
pop rcx
pop rbx
pop rax
mov eax,[rdx]
mov r12,rdx
jmp return
startAddingMats:
jmp code
return:
registersymbol(startAddingMats)
[DISABLE]
startAddingMats:
db 8B 02 4C 8B E2
unregistersymbol(startAddingMats)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "ds.exe"+295451A
"ds.exe"+29544F7: 57 - push rdi
"ds.exe"+29544F8: 41 54 - push r12
"ds.exe"+29544FA: 41 55 - push r13
"ds.exe"+29544FC: 41 56 - push r14
"ds.exe"+29544FE: 41 57 - push r15
"ds.exe"+2954500: 48 8D 6C 24 E0 - lea rbp,[rsp-20]
"ds.exe"+2954505: 48 81 EC 20 01 00 00 - sub rsp,00000120
"ds.exe"+295450C: 48 8B 05 05 16 EF 01 - mov rax,[ds.exe+4845B18]
"ds.exe"+2954513: 48 33 C4 - xor rax,rsp
"ds.exe"+2954516: 48 89 45 00 - mov [rbp+00],rax
// ---------- INJECTING HERE ----------
"ds.exe"+295451A: 8B 02 - mov eax,[rdx]
"ds.exe"+295451C: 4C 8B E2 - mov r12,rdx
// ---------- DONE INJECTING ----------
"ds.exe"+295451F: 01 81 10 02 00 00 - add [rcx+00000210],eax
"ds.exe"+2954525: 4C 8B F1 - mov r14,rcx
"ds.exe"+2954528: 8B 1A - mov ebx,[rdx]
"ds.exe"+295452A: 8B 42 04 - mov eax,[rdx+04]
"ds.exe"+295452D: 01 81 14 02 00 00 - add [rcx+00000214],eax
"ds.exe"+2954533: 03 5A 04 - add ebx,[rdx+04]
"ds.exe"+2954536: 8B 42 08 - mov eax,[rdx+08]
"ds.exe"+2954539: 01 81 18 02 00 00 - add [rcx+00000218],eax
"ds.exe"+295453F: 03 5A 08 - add ebx,[rdx+08]
"ds.exe"+2954542: 8B 42 0C - mov eax,[rdx+0C]
}