I've done some work on this game...
From my experience, all stats for all players are updated by a single function.
The function looks like this:
The offset below is from v1.2.9393. You should be able to search for the code to find the offset for your version though.
00790C70 | D94424 04 | FLD DWORD PTR [ESP+4] | <--- inject here
00790C74 | D959 4C | FSTP DWORD PTR [ECX+4C] |
00790C77 | 8B49 44 | MOV ECX, DWORD PTR [ECX+44] |
00790C7A | 85C9 | TEST ECX, ECX |
00790C7C | 74 04 | JE 00790C82 |
00790C7E | C641 20 01 | MOV BYTE PTR [ECX+20], 1 |
00790C82 | C2 0400 | RETN 4 |
In the structure, the first 4 bytes seem to be some sort of structure ID or something... The next 40 bytes are unicode strings that identify what stats you are looking at (i.e. CurrentClass).
Here are some stat-identifiers you may want to play with:
CurrentClass <--- 0=mage, 1=, 2=, 17=dog
Experience
Strength
Dexterity
Willpower
Magic
Cunning
Constitution
Attribute_points
Skill_points
talent_spell_points
specialization_point
Displacement
Flanking_Angle
Spell_Resistance
BaseAttackRating
BaseDefenseRating
Damage_OffHand
Damage_MainHand
Cold_Damage_Bonus
Critical_Range
Electricity_Damage_Bonus
Fatique
Fire_Damage_Bonus
Healing_Effect_Factor
Melee_Crit_Modifier
Missile_Shield
Nature_Damage_Bonus
Ranged_Crit_Modifier
Regeneration_Health
Regeneration_Stamina
Resistance_Mind
Resistance_Physical
Spirit_Damage_Bonus
Threat_Decrease_Rate
In MHS (Thanks L.Spiro... love this prog.):
FullAccess( DAOrigins.exe+0x00390C70, 2048 )
Alloc( Cave, 1024 )
Label( Exit )
Label( Return )
Label( CheckWord )
Label( NextWord )
Label( Cheat )
Label( List )
; Gate
DAOrigins.exe+0x00390C70:
jmp Cave
nop
nop
Return:
Cave:
FLD DWORD PTR [ESP+4]
FSTP DWORD PTR [ECX+4C]
push esi
push edi
push ecx
push eax
mov esi, ecx
add esi,4
push List
pop edi
xor ecx,ecx
CheckWord:
cmp byte ptr [edi],ff
je Exit
cmp byte ptr [esi+ecx*2], 0
je Cheat
mov al,byte ptr [esi+ecx*2]
cmp byte ptr [edi+ecx], al
jne NextWord
inc ecx
cmp ecx,0c
je Cheat
jmp CheckWord
NextWord:
xor ecx,ecx
add edi, 10
jmp CheckWord
Cheat:
mov ecx, dword ptr [edi+0c]
mov dword ptr [esi+48], ecx
Exit:
pop eax
pop ecx
pop edi
pop esi
jmp Return
List:
db "Experience" 000h 000h
dd 04835A400h
db "Strength" 000h 000h 000h 000h
dd 04e6e6b28h
db "Dexterity" 000h 000h 000h
dd 04e6e6b28h
db "Willpower" 000h 000h 000h
dd 04e6e6b28h
db "Magic" 000h 000h 000h 000h 000h 000h 000h
dd 04e6e6b28h
db "Cunning" 000h 000h 000h 000h 000h
dd 04e6e6b28h
db "Constitution"
dd 04e6e6b28h
db "Spell_Resist"
dd 04e6e6b28h
db "specializati"
dd 0434b0000h
db "Flanking_Ang"
dd 0434b0000h
db "Attribute_po"
dd 0434b0000h
db "Skill_points"
dd 0434b0000h
db "talent_spell"
dd 0434b0000h
db "Displacement"
dd 04e6e6b28h
db "Regeneration"
dd 0434b0000h
db "Damage_MainH"
dd 0434b0000h
db "Damage_OffHa"
dd 0434b0000h
db "Healing_Effe"
dd 0434b0000h
db "Melee_Crit_M"
dd 0434b0000h
db "Resistance_M"
dd 0434b0000h
db "Resistance_P"
dd 0434b0000h
db "Ranged_Crit_"
dd 0434b0000h
db "BaseAttackRa"
dd 0434b0000h
db "BaseDefenseR"
dd 0434b0000h
db "Missile_Shie"
dd 0434b0000h
db "Critical_Ran"
dd 0434b0000h
dd 0ffffffffh 0ffffffffh 0ffffffffh 0ffffffffh