Wow I actually feel so stupid for not realizing what I was doing wrong earlier. I wasn't able to read from the structs for (x,y) coords and so on because I was putting the pointer as an address and trying to read it

So in case anyone is watching this thread and actually wants to understand this I'll explain it.
Ok so you start with the base address of D2Client.dll, and find the offset for the struct you want to read (in this case Act)
- Code: Select all
D2Client.dll = 0x6FAB0000
VARPTR(D2CLIENT, pAct, Act*, 0x11C3B8) //Updated 1.13c
Ok so you add the D2Client base with the Act offset to get the pointer value to the Act struct.
Add them together on Calc in the Hex format and you get 0x6FBCC3B8.
I'm using CE for all of this so I'll just explain what I did in it.
Then go to Add Address Manually and select the Pointer CheckBox (where I went wrong

).
Enter 6FBCC3B8 as the pointer and then look to the Act struct.
- Code: Select all
//1.13c - Act - McGod
struct Act {
DWORD _1[3]; //0x00
DWORD dwMapSeed; //0x0C
Room1* pRoom1; //0x10
DWORD dwAct; //0x14
DWORD _2[12]; //0x18
ActMisc* pMisc; //0x48
};
If you want to find the act your in the put 14 as the offset and voila, it will give you the address (P->0456DEA) and show you the value.
(FYI for the Act you need to add 1 to the value it gives i.e. 0 = act 1, 1 = act 2 etc...)
Now say you want to read your coords? Then you put 10 as the offset instead of 14 and if points you to the Room1 struct.
In CE when you enter that you'll see something like P->01D3BAEF. That Hex number that is shown will change everytime you try this so you need to go through all of these steps everytime.
Now take that adress shown (in this case 01D3BAEF) and open the Add Address Manually window again. Select the pointer Checkbox and then refer to the Room1 struct.
- Code: Select all
//1.13c - Room1 - McGod
struct Room1 {
Room1** pRoomsNear; //0x00
DWORD _1[3]; //0x04
Room2* pRoom2; //0x10
DWORD _2[3]; //0x14
CollMap* Coll; //0x20
DWORD dwRoomsNear; //0x24
DWORD _3[9]; //0x28
DWORD dwPosX; //0x4C
DWORD dwPosY; //0x50
DWORD dwSizeX; //0x54
DWORD dwSizeY; //0x58
DWORD _4[6]; //0x5C
UnitAny* pUnitFirst; //0x74
DWORD _5; //0x78
Room1* pRoomNext; //0x7C
};
The dwPosX is the X coord that your looking for. So in the offset box enter 4C and it will give u the address and value for it. I hope that this is understandable to people and not just a rant lol. I'll keep this updated as I delve deeper in and start to do more hacking-type things.