Hi everyone. Just wanna share the stuff i found out when reversing the game.
Assuming you are using dll injectiong and you have the base pointer to all player stats, you can simply access all the data from a nice and userfriendly structure.
Here how to read from memory:
And here the structure you need to make this available:
If you have anything to add/comment/whatsoever, feel free to post your oppinion ;-) (Btw, everything is done from scratch, and wasn't tested yet. I'm pretty sure its still valid information)
Greetings,
xsh
Assuming you are using dll injectiong and you have the base pointer to all player stats, you can simply access all the data from a nice and userfriendly structure.
Here how to read from memory:
Code:
VARBASE *Stats = 0xBASEPOINTER;
printf("Player HP: %d/%d", Stats->p_Player->Current_HP, Stats->p_Player->Maximum_HP);
Code:
typedef unsinged char BYTE;
typedef struct _PLAYER // Player structure
{
BYTE Unknown01[0x45C]; // 0x0000 Unknown part
DWORD Level; // 0x045C Player level
DWORD Unknown03; // 0x0460 Unknown
DWORD Current_HP; // 0x0464
DWORD Current_MP; // 0x0468
DWORD Exp; // 0x046C Current experience points
DWORD Fury; // 0x0470 Number of spark/fury points
DWORD Attribute_Points; // 0x0474 Attribute points left for distribution
DWORD Vigor; // 0x0478
DWORD Unknown06; // 0x047C
DWORD Unknown07; // 0x0480
DWORD Con; // 0x0484
DWORD Int; // 0x0488
DWORD Str; // 0x048C
DWORD Agi; // 0x0490
DWORD Maximum_HP; // 0x0494
DWORD Maximum_MP; // 0x0498
DWORD Unknown10; // 0x049C
DWORD Unknown11; // 0x04A0
DWORD Unknown12; // 0x04A4
DWORD Speed; // 0x04A8
DWORD Unknown14; // 0x04AC
DWORD Unknown15; // 0x04B0
DWORD Unknown16; // 0x04B4
DWORD Unknown17; // 0x04B8
DWORD Unknown18; // 0x04BC
DWORD Unknown19; // 0x04C0
DWORD Unknown20; // 0x04C4
DWORD Unknown21; // 0x04C8
DWORD Unknown22; // 0x04CC
DWORD Unknown23; // 0x04D0
DWORD Unknown24; // 0x04D4
DWORD Unknown25; // 0x04D8
DWORD Unknown26; // 0x04DC
DWORD Unknown27; // 0x04E0
DWORD Unknown28; // 0x04E4
DWORD Unknown29; // 0x04E8
DWORD Unknown30; // 0x04EC
DWORD Unknown31; // 0x04F0
DWORD Unknown32; // 0x04F4
DWORD Def_Metal; // 0x04F8
DWORD Def_Wood; // 0x04FC
DWORD Def_Water; // 0x0500
DWORD Def_Fire; // 0x0504
DWORD Def_Earth; // 0x0508
DWORD Def_Physical; // 0x050C
BYTE Unknown33[0x110]; // 0x0510
DWORD Position_X; // 0x0620
DWORD Position_Y; // 0x0624
BYTE Unknown34[0x500]; // 0x0628
DWORD Money; // 0x0B28 Money in inventory
} PLAYER;
typedef struct _VARBASE // Statistics base
{
BYTE Unknown[0x20]; // 0x0000
PLAYER *p_Player; // 0x0020 Player structure
} VARBASE;
If you have anything to add/comment/whatsoever, feel free to post your oppinion ;-) (Btw, everything is done from scratch, and wasn't tested yet. I'm pretty sure its still valid information)
Greetings,
xsh