From what I can tell there are 4 offsets with the player position that change when you rotate your character. I haven't figured out what each of them means, but the 3rd and 4th offset are the cos() and sin() of your facing angle. Using some trig you can use ArcSin() to get the actual angle.
The memory locations are
Player position Pointer = 0x01797EE8
Player X Offset = 0x2C
Player Z Offset = 0x34
Rotation1Offset:=0x98
Rotation2Offset:=0xA0
Rotation3Offset:=0xDC
Rotation4Offset:=0xE4
All of these locations contain data stored as Float
The language I used to get the facing angle is probably different from yours, but this code should give you a good idea how to calculate the facing angle.
I read the memory locations Rotation 3 and Rotation 4 and store them in C and S respectively
GetAngle(C, S)
{
AS:=ASin(S)*180/pi ;Get the ArcSin of S and convert it to degrees
if (C > 0 and S > 0) ;First Quadrant
return AS
else if (C < 0 and S > 0) ;Second Quadrant
return 90-AS+90
else if (C < 0 and S < 0) ;Third Quadrant
return 180-AS
else if (C > 0 and S < 0) ;Fourth Quadrant
return 360+AS
else
return ERROR
}
There is probably a better way to get the facing angle, but this method works for me most of the time. One problem you might have is some rounding errors when reading the Float values. If rotation4 (sin of the angle) is greater than 1 or less than -1 the trig function ASin() won't work so just set the variable you are using to 1 or -1.