Thanks to DrStalker finding out the energy value is an integer that is 100 times the displayed value (i.e. if it says 3.8 stable energy you look for integer 380), here's a script that prevents it from going down when you research. I haven't gotten far in the game and only have stable energy, and the +18 and +36 addresses had different numbers so I'm guessing that trick doesn't work until you've found some in game at least once, or the offsets changed. The code seems to only be executed when saving the stable energy and prevents it from being updated, but I bet it is a generic save value routine so probably won't let it be increased either so only activate it when researching things.
Code: Select all
{ Game : PenDriverPro-Win64-Shipping.exe
Version:
Date : 2024-05-29
Author : jason
Used when researching to write the new value for stable energy, not sure
if it is also used to add to the energy...
}
[ENABLE]
aobscanmodule(INJECT_STABLE_ENERGY_USE,PenDriverPro-Win64-Shipping.exe,48 89 01 48 8B 44 24 50 48 83) // should be unique
alloc(newmem,$1000,INJECT_STABLE_ENERGY_USE)
label(code)
label(return)
newmem:
code:
// mov [rcx],rax
mov rax,[rsp+50]
jmp return
INJECT_STABLE_ENERGY_USE:
jmp newmem
nop 3
return:
registersymbol(INJECT_STABLE_ENERGY_USE)
[DISABLE]
INJECT_STABLE_ENERGY_USE:
db 48 89 01 48 8B 44 24 50
unregistersymbol(INJECT_STABLE_ENERGY_USE)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: PenDriverPro-Win64-Shipping.exe+ECDA19
PenDriverPro-Win64-Shipping.exe+ECD9EA: 48 8B C8 - mov rcx,rax
PenDriverPro-Win64-Shipping.exe+ECD9ED: E8 5E CB FE FF - call PenDriverPro-Win64-Shipping.exe+EBA550
PenDriverPro-Win64-Shipping.exe+ECD9F2: 48 89 44 24 28 - mov [rsp+28],rax
PenDriverPro-Win64-Shipping.exe+ECD9F7: F3 0F 10 44 24 60 - movss xmm0,[rsp+60]
PenDriverPro-Win64-Shipping.exe+ECD9FD: E8 2E 7E 00 00 - call PenDriverPro-Win64-Shipping.exe+ED5830
PenDriverPro-Win64-Shipping.exe+ECDA02: 48 89 44 24 38 - mov [rsp+38],rax
PenDriverPro-Win64-Shipping.exe+ECDA07: 48 8B 44 24 28 - mov rax,[rsp+28]
PenDriverPro-Win64-Shipping.exe+ECDA0C: 48 8B 00 - mov rax,[rax]
PenDriverPro-Win64-Shipping.exe+ECDA0F: 48 03 44 24 38 - add rax,[rsp+38]
PenDriverPro-Win64-Shipping.exe+ECDA14: 48 8B 4C 24 28 - mov rcx,[rsp+28]
// ---------- INJECTING HERE ----------
PenDriverPro-Win64-Shipping.exe+ECDA19: 48 89 01 - mov [rcx],rax
// ---------- DONE INJECTING ----------
PenDriverPro-Win64-Shipping.exe+ECDA1C: 48 8B 44 24 50 - mov rax,[rsp+50]
PenDriverPro-Win64-Shipping.exe+ECDA21: 48 83 C0 18 - add rax,18
PenDriverPro-Win64-Shipping.exe+ECDA25: F3 0F 10 54 24 60 - movss xmm2,[rsp+60]
PenDriverPro-Win64-Shipping.exe+ECDA2B: 48 8B 54 24 58 - mov rdx,[rsp+58]
PenDriverPro-Win64-Shipping.exe+ECDA30: 48 8B C8 - mov rcx,rax
PenDriverPro-Win64-Shipping.exe+ECDA33: E8 78 9E FF FF - call PenDriverPro-Win64-Shipping.exe+EC78B0
PenDriverPro-Win64-Shipping.exe+ECDA38: 48 83 C4 48 - add rsp,48
PenDriverPro-Win64-Shipping.exe+ECDA3C: C3 - ret
PenDriverPro-Win64-Shipping.exe+ECDA3D: CC - int 3
PenDriverPro-Win64-Shipping.exe+ECDA3E: CC - int 3
}
EDIT: Ok, so this does affect adding to your energy, and all energy types. Found that out the hard way after the first mission where I got unstable and corrupted energy and left that script on so it didn't add it when I got back to base. This *should* fix that by only setting the value if it is larger. It also gives a pointer to the value for the energy type used in the research or fabrication, so add a new table entry with the address 'pStableEnergy' and the pointer type to a 4 byte value to be able to edit it after doing some research.
Code: Select all
{ Game : PenDriverPro-Win64-Shipping.exe
Version:
Date : 2024-05-29
Author : jason
Used when researchign to write the new value for stable energy, not sure
if it is also used to add to the energy...
}
[ENABLE]
aobscanmodule(INJECT_STABLE_ENERGY_USE,PenDriverPro-Win64-Shipping.exe,48 89 01 48 8B 44 24 50 48 83) // should be unique
alloc(newmem,$1000,INJECT_STABLE_ENERGY_USE)
label(code)
label(return)
label(pStableEnergy)
newmem:
code:
mov [pStableEnergy],rcx
cmp rax,[rcx]
jng @f
mov [rcx],rax
@@:
mov rax,[rsp+50]
jmp return
align 10
pStableEnergy:
dq 0
INJECT_STABLE_ENERGY_USE:
jmp newmem
nop 3
return:
registersymbol(INJECT_STABLE_ENERGY_USE)
registersymbol(pStableEnergy)
[DISABLE]
INJECT_STABLE_ENERGY_USE:
db 48 89 01 48 8B 44 24 50
unregistersymbol(INJECT_STABLE_ENERGY_USE)
unregistersymbol(pStableEnergy)
dealloc(newmem)
mov [rcx],rax
mov rax,[rsp+50]
{
// ORIGINAL CODE - INJECTION POINT: PenDriverPro-Win64-Shipping.exe+ECDA19
PenDriverPro-Win64-Shipping.exe+ECD9EA: 48 8B C8 - mov rcx,rax
PenDriverPro-Win64-Shipping.exe+ECD9ED: E8 5E CB FE FF - call PenDriverPro-Win64-Shipping.exe+EBA550
PenDriverPro-Win64-Shipping.exe+ECD9F2: 48 89 44 24 28 - mov [rsp+28],rax
PenDriverPro-Win64-Shipping.exe+ECD9F7: F3 0F 10 44 24 60 - movss xmm0,[rsp+60]
PenDriverPro-Win64-Shipping.exe+ECD9FD: E8 2E 7E 00 00 - call PenDriverPro-Win64-Shipping.exe+ED5830
PenDriverPro-Win64-Shipping.exe+ECDA02: 48 89 44 24 38 - mov [rsp+38],rax
PenDriverPro-Win64-Shipping.exe+ECDA07: 48 8B 44 24 28 - mov rax,[rsp+28]
PenDriverPro-Win64-Shipping.exe+ECDA0C: 48 8B 00 - mov rax,[rax]
PenDriverPro-Win64-Shipping.exe+ECDA0F: 48 03 44 24 38 - add rax,[rsp+38]
PenDriverPro-Win64-Shipping.exe+ECDA14: 48 8B 4C 24 28 - mov rcx,[rsp+28]
// ---------- INJECTING HERE ----------
PenDriverPro-Win64-Shipping.exe+ECDA19: 48 89 01 - mov [rcx],rax
// ---------- DONE INJECTING ----------
PenDriverPro-Win64-Shipping.exe+ECDA1C: 48 8B 44 24 50 - mov rax,[rsp+50]
PenDriverPro-Win64-Shipping.exe+ECDA21: 48 83 C0 18 - add rax,18
PenDriverPro-Win64-Shipping.exe+ECDA25: F3 0F 10 54 24 60 - movss xmm2,[rsp+60]
PenDriverPro-Win64-Shipping.exe+ECDA2B: 48 8B 54 24 58 - mov rdx,[rsp+58]
PenDriverPro-Win64-Shipping.exe+ECDA30: 48 8B C8 - mov rcx,rax
PenDriverPro-Win64-Shipping.exe+ECDA33: E8 78 9E FF FF - call PenDriverPro-Win64-Shipping.exe+EC78B0
PenDriverPro-Win64-Shipping.exe+ECDA38: 48 83 C4 48 - add rsp,48
PenDriverPro-Win64-Shipping.exe+ECDA3C: C3 - ret
PenDriverPro-Win64-Shipping.exe+ECDA3D: CC - int 3
PenDriverPro-Win64-Shipping.exe+ECDA3E: CC - int 3
}