Nice one. You should also start deleting all the created dissect data structures before releasing tables (Memory View - CTRL+D - File - Delete Structures) since they are being saved inside your .ct file, the difference in file size is immerse
As for your table, some of the compares appear to be unstable with Parallel Universe patch. And yeah, that's a clever way to compare, I actually tried to make the game return the right address all the time instead of having to compare but to no avail. Any way, here's the problem with some of the pointers:
UPD:
I just tried looking at RSP's E4 offset and it doesn't seem to ever return these values? How did you even find these values
UPD 2:
I guess you've done RSP comparison while your code was already placed in allocated newmem? That's really clever. Any way, I adjusted some comparisons inside your "get stats" code and it seems to work just fine w/ Parallel Universe patch and Update Pack (beta) for community patch installed. Thanks for your hard work!
Code: Select all
{ Game : Gothic3.exe
Version:
Date : 2022-08-27
Author : SilverRabbit
This script does blah blah blah
}
[ENABLE]
aobscan(SetAllStatsToA,8B 41 14 03 41 10) // should be unique
alloc(newmem,$1000)
//alloc(allStats,4)
//allStats:
//dd (int)100
label(code)
label(return)
label(seeStrenght seeHuntingSkill seeKnowledge seeSmithing seeThieving seeAlchemy seeLifeEnergy seeEndurance seeMana seePtrBlades seePtrImpact seePtrMissiles seePtrFire seePtrIce seePtrEnergy)
registersymbol(seeStrenght seeHuntingSkill seeKnowledge seeSmithing seeThieving seeAlchemy seeLifeEnergy seeEndurance seeMana seePtrBlades seePtrImpact seePtrMissiles seePtrFire seePtrIce seePtrEnergy)
newmem:
{
RSP
Strenght
off 4 my 4177526240
off 8 my 4169479848
off 3C my 4045421676
off 54 my 4045421676
off 5C my 4177526240
off 64 my 4169479848
off 68 my 4169479848
off 70 my 4177526240
off 7C my 4169479848
off 84 my 4169479848
off 98 my 4045421676
off E4 my 212
off EC my 232
off F4 my 212
off FC my 232
}
cmp [rsp+E4],(int)212
jne Hunting
mov [seeStrenght],ecx
Hunting:
cmp [rsp+E4],(int)235
jne Knowledge
mov [seeHuntingSkill],ecx
Knowledge:
cmp [rsp+E4],(int)258
jne Smithing
mov [seeKnowledge],ecx
Smithing:
cmp [rsp+E4],(int)281
jne Thieving
mov [seeSmithing],ecx
Thieving:
cmp [rsp+E4],(int)304
jne Alchemy
mov [seeThieving],ecx
Alchemy:
cmp [rsp+E4],(int)327
jne LifeEnergy
mov [seeAlchemy],ecx
LifeEnergy:
cmp [rsp+E4],(int)350
jne Endurance
mov [seeLifeEnergy],ecx
Endurance:
cmp [rsp+E4],(int)373
jne Mana
mov [seeEndurance],ecx
Mana:
cmp [rsp+E4],(int)396
jne PtrBlades
mov [seeMana],ecx
PtrBlades:
cmp [rsp+E4],(int)481
jne PtrImpact
mov [seePtrBlades],ecx
PtrImpact:
cmp [rsp+E4],(int)504
jne PtrMissiles
mov [seePtrImpact],ecx
PtrMissiles:
cmp [rsp+E4],(int)527
jne PtrFire
mov [seePtrMissiles],ecx
PtrFire:
cmp [rsp+E4],(int)550
jne PtrIce
mov [seePtrFire],ecx
PtrIce:
cmp [rsp+E4],(int)573
jne PtrEnergy
mov [seePtrIce],ecx
PtrEnergy:
cmp [rsp+E4],(int)596
jne code
mov [seePtrEnergy],ecx
//mov eax,[allStats]
code:
//mov [ecx+14],(int)999
//mov [ecx+14],eax
//mov [ecx+10],eax
mov eax,[ecx+14]
add eax,[ecx+10]
jmp return
seeStrenght:
dd (int)0
seeHuntingSkill:
dd (int)0
seeKnowledge:
dd (int)0
seeSmithing:
dd (int)0
seeThieving:
dd (int)0
seeAlchemy:
dd (int)0
seeLifeEnergy:
dd (int)0
seeEndurance:
dd (int)0
seeMana:
dd (int)0
seePtrBlades:
dd (int)0
seePtrImpact:
dd (int)0
seePtrMissiles:
dd (int)0
seePtrFire:
dd (int)0
seePtrIce:
dd (int)0
seePtrEnergy:
dd (int)0
SetAllStatsToA:
jmp newmem
nop
return:
registersymbol(SetAllStatsToA)
[DISABLE]
SetAllStatsToA:
db 8B 41 14 03 41 10
unregistersymbol(*)
dealloc(*)
{
// ORIGINAL CODE - INJECTION POINT: 03720031
0371FFFF: - ??
03720000: 81 7E 48 01 00 00 80 - cmp [esi+48],80000001
03720007: 75 28 - jne 03720031
03720009: 0F 1F 40 00 - nop dword ptr [eax+00]
0372000D: 89 0D 3C 00 72 03 - mov [seeHp],ecx
03720013: 89 0D 40 00 72 03 - mov [seeMaxHp],ecx
03720019: 89 0D 44 00 72 03 - mov [seeEndurance],ecx
0372001F: 89 0D 48 00 72 03 - mov [seeMaxEndurance],ecx
03720025: 89 0D 4C 00 72 03 - mov [seeMana],ecx
0372002B: 89 0D 50 00 72 03 - mov [seeMaxMana],ecx
// ---------- INJECTING HERE ----------
03720031: 8B 41 14 - mov eax,[ecx+14]
// ---------- DONE INJECTING ----------
03720034: 03 41 10 - add eax,[ecx+10]
03720037: E9 4A 38 D2 FD - jmp Game.gCAttribute::GetValue+6
seeHp: 50 - push eax
0372003D: F8 - clc
0372003E: CB - ret
0372003F: D7 - xlatb
seeMaxHp: 50 - push eax
03720041: F8 - clc
03720042: CB - ret
03720043: D7 - xlatb
}
Also, protection values show your initial value so it doesn't count your armor's nor spells protection. Editing it will add up to your current protection value