update struct.h

This commit is contained in:
rr- 2021-02-09 20:24:27 +01:00
parent e6960067cb
commit 7d4a2696ed
2 changed files with 374 additions and 243 deletions

View file

@ -75,10 +75,10 @@ int FindCdDrive() {
int LoadRooms(FILE *fp) {
TRACE("");
__int16 wCount;
__int32 dwCount;
uint16_t count2;
uint32_t count4;
_fread(&RoomCount, sizeof(__int16), 1, fp);
_fread(&RoomCount, sizeof(uint16_t), 1, fp);
if (RoomCount > 1024) {
strcpy(StringToShow, "LoadRoom(): Too many rooms");
return 0;
@ -99,96 +99,98 @@ int LoadRooms(FILE *fp) {
++i, ++current_room_info
) {
// Room position
_fread(&current_room_info->x, sizeof(__int32), 1, fp);
_fread(&current_room_info->x, sizeof(uint32_t), 1, fp);
current_room_info->y = 0;
_fread(&current_room_info->z, sizeof(__int32), 1, fp);
_fread(&current_room_info->z, sizeof(uint32_t), 1, fp);
// Room floor/ceiling
_fread(&current_room_info->minFloor, sizeof(__int32), 1, fp);
_fread(&current_room_info->maxCeiling, sizeof(__int32), 1, fp);
_fread(&current_room_info->min_floor, sizeof(uint32_t), 1, fp);
_fread(&current_room_info->max_ceiling, sizeof(uint32_t), 1, fp);
// Room mesh
_fread(&dwCount, sizeof(__int32), 1, fp);
current_room_info->data = (__int16 *)game_malloc(
sizeof(__int16) * dwCount, GBUF_RoomMesh
_fread(&count4, sizeof(uint32_t), 1, fp);
current_room_info->data = (uint16_t *)game_malloc(
sizeof(uint16_t) * count4, GBUF_RoomMesh
);
_fread(current_room_info->data, sizeof(__int16), dwCount, fp);
_fread(current_room_info->data, sizeof(uint16_t), count4, fp);
// Doors
_fread(&wCount, sizeof(__int16), 1, fp);
if (!wCount) {
_fread(&count2, sizeof(uint16_t), 1, fp);
if (!count2) {
current_room_info->doors = NULL;
} else {
current_room_info->doors = (DOOR_INFOS *)game_malloc(
sizeof(__int16) + sizeof(DOOR_INFO) * wCount, GBUF_RoomDoor
sizeof(uint16_t) + sizeof(DOOR_INFO) * count2, GBUF_RoomDoor
);
current_room_info->doors->count = count2;
_fread(
&current_room_info->doors->door, sizeof(DOOR_INFO), count2, fp
);
current_room_info->doors->count = wCount;
_fread(&current_room_info->doors->door, sizeof(DOOR_INFO), wCount, fp);
}
// Room floor
_fread(&current_room_info->xSize, sizeof(__int16), 1, fp);
_fread(&current_room_info->ySize, sizeof(__int16), 1, fp);
dwCount = current_room_info->ySize * current_room_info->xSize;
_fread(&current_room_info->x_size, sizeof(uint16_t), 1, fp);
_fread(&current_room_info->y_size, sizeof(uint16_t), 1, fp);
count4 = current_room_info->y_size * current_room_info->x_size;
current_room_info->floor = (FLOOR_INFO *)game_malloc(
sizeof(FLOOR_INFO) * dwCount, GBUF_RoomFloor
sizeof(FLOOR_INFO) * count4, GBUF_RoomFloor
);
_fread(current_room_info->floor, sizeof(FLOOR_INFO), dwCount, fp);
_fread(current_room_info->floor, sizeof(FLOOR_INFO), count4, fp);
// Room lights
_fread(&current_room_info->ambient, sizeof(__int16), 1, fp);
_fread(&current_room_info->numLights, sizeof(__int16), 1, fp);
if (!current_room_info->numLights) {
_fread(&current_room_info->ambient, sizeof(uint16_t), 1, fp);
_fread(&current_room_info->num_lights, sizeof(uint16_t), 1, fp);
if (!current_room_info->num_lights) {
current_room_info->light = NULL;
} else {
current_room_info->light = (LIGHT_INFO *)game_malloc(
sizeof(LIGHT_INFO) * current_room_info->numLights,
sizeof(LIGHT_INFO) * current_room_info->num_lights,
GBUF_RoomLights
);
_fread(
current_room_info->light,
sizeof(LIGHT_INFO),
current_room_info->numLights,
current_room_info->num_lights,
fp
);
}
// Static mesh infos
_fread(&current_room_info->numMeshes, sizeof(__int16), 1, fp);
if (!current_room_info->numMeshes) {
_fread(&current_room_info->num_meshes, sizeof(uint16_t), 1, fp);
if (!current_room_info->num_meshes) {
current_room_info->mesh = NULL;
} else {
current_room_info->mesh = (MESH_INFO *)game_malloc(
sizeof(MESH_INFO) * current_room_info->numMeshes,
sizeof(MESH_INFO) * current_room_info->num_meshes,
GBUF_RoomStaticMeshInfos
);
_fread(
current_room_info->mesh,
sizeof(MESH_INFO),
current_room_info->numMeshes,
current_room_info->num_meshes,
fp
);
}
// Flipped (alternative) room
_fread(&current_room_info->flippedRoom, sizeof(__int16), 1, fp);
_fread(&current_room_info->flipped_room, sizeof(uint16_t), 1, fp);
// Room flags
_fread(&current_room_info->flags, sizeof(__int16), 1, fp);
_fread(&current_room_info->flags, sizeof(uint16_t), 1, fp);
// Initialise some variables
current_room_info->boundActive = 0;
current_room_info->boundLeft = PhdWinMaxX;
current_room_info->boundTop = PhdWinMaxY;
current_room_info->boundBottom = 0;
current_room_info->boundRight = 0;
current_room_info->itemNumber = -1;
current_room_info->fxNumber = -1;
current_room_info->bound_active = 0;
current_room_info->bound_left = PhdWinMaxX;
current_room_info->bound_top = PhdWinMaxY;
current_room_info->bound_bottom = 0;
current_room_info->bound_right = 0;
current_room_info->item_number = -1;
current_room_info->fx_number = -1;
}
_fread(&dwCount, sizeof(__int32), 1, fp);
FloorData = game_malloc(sizeof(__int16) * dwCount, GBUF_FloorData);
_fread(FloorData, sizeof(__int16), dwCount, fp);
_fread(&count4, sizeof(uint32_t), 1, fp);
FloorData = game_malloc(sizeof(uint16_t) * count4, GBUF_FloorData);
_fread(FloorData, sizeof(uint16_t), count4, fp);
return 1;
}
@ -197,7 +199,7 @@ void __cdecl LevelStats(int levelID) {
TRACE("");
if (TR1MConfig.keep_health_between_levels) {
TR1MData.stored_lara_health = LaraItem ? LaraItem->hitPoints : 1000;
TR1MData.stored_lara_health = LaraItem ? LaraItem->hit_points : LARA_HITPOINTS;
}
static char buf[100];
@ -317,14 +319,13 @@ int __cdecl LoadLevelByID(int levelID) {
// currently loaded level.
int laraFound = 0;
for (int i = 0; i < LevelItemCount; i++) {
if (Items[i].objectID == ID_LARA) {
if (Items[i].object_id == ID_LARA) {
laraFound = 1;
}
}
if (!laraFound) {
TRACE("Resetting stored Lara health");
TR1MData.stored_lara_health = 1000;
TR1MData.stored_lara_health = LARA_HITPOINTS;
}
}
@ -392,34 +393,34 @@ int __cdecl LoadItems(FILE *handle)
for (int i = 0; i < itemCount; ++i) {
ITEM_INFO *currentItem = &Items[i];
_fread(&currentItem->objectID, 2u, 1u, handle);
_fread(&currentItem->roomNumber, 2u, 1u, handle);
_fread(&currentItem->object_id, 2u, 1u, handle);
_fread(&currentItem->room_number, 2u, 1u, handle);
_fread(&currentItem->pos.x, 4u, 1u, handle);
_fread(&currentItem->pos.y, 4u, 1u, handle);
_fread(&currentItem->pos.z, 4u, 1u, handle);
_fread(&currentItem->pos.rotY, 2u, 1u, handle);
_fread(&currentItem->pos.rot_y, 2u, 1u, handle);
_fread(&currentItem->shade1, 2u, 1u, handle);
_fread(&currentItem->flags, 2u, 1u, handle);
int objectID = currentItem->objectID;
if (objectID < 0 || objectID >= ID_NUMBER_OBJECTS) {
int object_id = currentItem->object_id;
if (object_id < 0 || object_id >= ID_NUMBER_OBJECTS) {
sprintf(
StringToShow,
"LoadItems(): Bad Object number (%d) on Item %d",
objectID,
object_id,
i
);
S_ExitSystem(StringToShow);
}
if (TR1MConfig.disable_medpacks && (
objectID == ID_LARGE_MEDIPACK_ITEM ||
objectID == ID_SMALL_MEDIPACK_ITEM
object_id == ID_LARGE_MEDIPACK_ITEM ||
object_id == ID_SMALL_MEDIPACK_ITEM
)) {
currentItem->pos.x = -1;
currentItem->pos.y = -1;
currentItem->pos.z = -1;
currentItem->roomNumber = 0;
currentItem->room_number = 0;
}
InitialiseItem(i);
@ -429,57 +430,58 @@ int __cdecl LoadItems(FILE *handle)
return 1;
}
void __cdecl InitialiseLara(void) {
void __cdecl InitialiseLara() {
TRACE("");
LaraItem->moreFlags &= 0xFFDFu;
LaraItem->more_flags &= 0xFFDFu;
LaraItem->data = &Lara;
if (TR1MConfig.keep_health_between_levels) {
TRACE("Restoring Lara health: %d", TR1MData.stored_lara_health);
LaraItem->hitPoints = TR1MData.stored_lara_health;
LaraItem->hit_points = TR1MConfig.keep_health_between_levels
? TR1MData.stored_lara_health
: LARA_HITPOINTS;
Lara.air = LARA_AIR;
Lara.torso_z_rot = 0;
Lara.torso_x_rot = 0;
Lara.torso_y_rot = 0;
Lara.head_z_rot = 0;
Lara.head_y_rot = 0;
Lara.head_x_rot = 0;
Lara.calc_fallspeed = 0;
Lara.mesh_effects = 0;
Lara.hit_frames = 0;
Lara.hit_direction = 0;
Lara.death_count = 0;
Lara.target = 0;
Lara.spaz_effect = 0;
Lara.spaz_effect_count = 0;
Lara.turn_rate = 0;
Lara.move_angle = 0;
Lara.right_arm.flash_gun = 0;
Lara.left_arm.flash_gun = 0;
Lara.right_arm.lock = 0;
Lara.left_arm.lock = 0;
if (RoomInfo[LaraItem->room_number].flags & 1) {
Lara.water_status = LARA_UNDERWATER;
LaraItem->fall_speed = 0;
LaraItem->goal_anim_state = AS_TREAD;
LaraItem->current_anim_state = AS_TREAD;
LaraItem->anim_number = TREAD_A;
LaraItem->frame_number = TREAD_F;
} else {
TRACE("Restoring Lara health: default");
LaraItem->hitPoints = 1000;
Lara.water_status = LARA_ABOVEWATER;
LaraItem->goal_anim_state = AS_STOP;
LaraItem->current_anim_state = AS_STOP;
LaraItem->anim_number = STOP_A;
LaraItem->frame_number = STOP_F;
}
Lara.air = 1800;
Lara.field_8 = 0;
Lara.field_20 = 0;
Lara.field_E = 0;
Lara.field_10 = 0;
Lara.field_16 = 0;
Lara.field_60 = 0;
Lara.field_1C = 0;
Lara.field_1A = 0;
Lara.field_96 = 0;
Lara.field_86 = 0;
Lara.field_8E = 0;
Lara.field_7E = 0;
Lara.field_6C = 0;
Lara.field_68 = 0;
Lara.field_74 = 0;
Lara.field_70 = 0;
Lara.current_active = 0;
TRACE("%x\n", &Lara.field_4 - &Lara.itemNumber);
InitialiseLOT(&Lara.LOT);
Lara.LOT.step = WALL_L * 20;
Lara.LOT.drop = -WALL_L * 20;
Lara.LOT.fly = STEP_L;
if (RoomInfo[LaraItem->roomNumber].flags & 1) {
Lara.waterStatus = 1;
LaraItem->fallSpeed = 0;
LaraItem->goalAnimState = 13;
LaraItem->currentAnimState = 13;
LaraItem->animNumber = 108;
LaraItem->frameNumber = 1736;
} else {
Lara.waterStatus = 0;
LaraItem->goalAnimState = 2;
LaraItem->currentAnimState = 2;
LaraItem->animNumber = 11;
LaraItem->frameNumber = 185;
}
Lara.field_18 = 0;
InitialiseLOT(&Lara.field_C8);
Lara.field_D4 = 20480;
Lara.field_D6 = -20480;
Lara.field_D8 = 256;
InitialiseLaraInventory(CurrentLevel);
}

View file

@ -2,6 +2,21 @@
#define TR1MAIN_STRUCT_H
#include <stdio.h>
#include <stdint.h>
typedef uint16_t PHD_ANGLE;
typedef void UNKNOWN_STRUCT;
#define LARA_HITPOINTS 1000
#define LARA_AIR 1800
#define TREAD_A 108
#define TREAD_F 1736
#define STOP_A 11
#define STOP_F 185
#define WALL_L 1024
#define STEP_L 256
typedef enum {
ID_LARA = 0,
@ -10,6 +25,71 @@ typedef enum {
ID_NUMBER_OBJECTS = 191,
} GAME_OBJECT_ID;
typedef enum {
LARA_ABOVEWATER = 0,
LARA_UNDERWATER = 1,
LARA_SURFACE = 2,
} LARA_WATER_STATES;
typedef enum {
AS_WALK = 0,
AS_RUN = 1,
AS_STOP = 2,
AS_FORWARDJUMP = 3,
AS_POSE = 4,
AS_FASTBACK = 5,
AS_TURN_R = 6,
AS_TURN_L = 7,
AS_DEATH = 8,
AS_FASTFALL = 9,
AS_HANG = 10,
AS_REACH = 11,
AS_SPLAT = 12,
AS_TREAD = 13,
AS_LAND = 14,
AS_COMPRESS = 15,
AS_BACK = 16,
AS_SWIM = 17,
AS_GLIDE = 18,
AS_NULL = 19,
AS_FASTTURN = 20,
AS_STEPRIGHT = 21,
AS_STEPLEFT = 22,
AS_HIT = 23,
AS_SLIDE = 24,
AS_BACKJUMP = 25,
AS_RIGHTJUMP = 26,
AS_LEFTJUMP = 27,
AS_UPJUMP = 28,
AS_FALLBACK = 29,
AS_HANGLEFT = 30,
AS_HANGRIGHT = 31,
AS_SLIDEBACK = 32,
AS_SURFTREAD = 33,
AS_SURFSWIM = 34,
AS_DIVE = 35,
AS_PUSHBLOCK = 36,
AS_PULLBLOCK = 37,
AS_PPREADY = 38,
AS_PICKUP = 39,
AS_SWITCHON = 40,
AS_SWITCHOFF = 41,
AS_USEKEY = 42,
AS_USEPUZZLE = 43,
AS_UWDEATH = 44,
AS_ROLL = 45,
AS_SPECIAL = 46,
AS_SURFBACK = 47,
AS_SURFLEFT = 48,
AS_SURFRIGHT = 49,
AS_USEMIDAS = 50,
AS_DIEMIDAS = 51,
AS_SWANDIVE = 52,
AS_FASTDIVE = 53,
AS_GYMNAST = 54,
AS_WATEROU = 55,
} LARA_STATES;
typedef enum {
GBUF_RoomInfos = 11,
GBUF_RoomMesh = 12,
@ -22,163 +102,212 @@ typedef enum {
#pragma pack(push, 1)
typedef struct Pos2D_t {
__int16 x;
__int16 y;
typedef struct {
/* 0000 */ uint16_t x;
/* 0002 */ uint16_t y;
/* 0004 end */
} POS_2D;
typedef struct Pos3D_t {
__int16 x;
__int16 y;
__int16 z;
typedef struct {
/* 0000 */ uint16_t x;
/* 0002 */ uint16_t y;
/* 0004 */ uint16_t z;
/* 0006 end */
} POS_3D;
typedef struct DoorInfo_t {
__int16 room;
__int16 x;
__int16 y;
__int16 z;
POS_3D vertex[4];
typedef struct {
/* 0000 */ int16_t x;
/* 0002 */ int16_t y;
/* 0004 */ int16_t z;
/* 0006 end */
} PHD_VECTOR;
typedef struct {
/* 0000 */ uint16_t room;
/* 0002 */ uint16_t x;
/* 0004 */ uint16_t y;
/* 0006 */ uint16_t z;
/* 0008 */ POS_3D vertex[4];
/* 0020 end */
} DOOR_INFO;
typedef struct DoorInfos_t {
__int16 count;
DOOR_INFO door[];
typedef struct {
/* 0000 */ uint16_t count;
/* 0002 */ DOOR_INFO door[];
/* 0006 end */
} DOOR_INFOS;
typedef struct FloorInfo_t {
__int16 index;
__int16 box;
__int8 pitRoom;
__int8 floor;
__int8 skyRoom;
__int8 ceiling;
typedef struct {
/* 0000 */ uint16_t index;
/* 0002 */ uint16_t box;
/* 0004 */ uint8_t pit_room;
/* 0005 */ uint8_t floor;
/* 0006 */ uint8_t sky_room;
/* 0007 */ uint8_t ceiling;
/* 0008 end */
} FLOOR_INFO;
typedef struct LightInfo_t {
__int32 x;
__int32 y;
__int32 z;
__int16 intensity;
__int32 falloff;
typedef struct {
/* 0000 */ uint32_t x;
/* 0004 */ uint32_t y;
/* 0008 */ uint32_t z;
/* 000C */ uint16_t intensity;
/* 000E */ uint32_t falloff;
/* 0012 end */
} LIGHT_INFO;
typedef struct MeshInfo_t {
__int32 x;
__int32 y;
__int32 z;
__int16 yRot;
__int16 shade;
__int16 staticNumber;
typedef struct {
/* 0000 */ uint32_t x;
/* 0004 */ uint32_t y;
/* 0008 */ uint32_t z;
/* 000C */ uint16_t y_rot;
/* 000E */ uint16_t shade;
/* 0010 */ uint16_t static_number;
/* 0012 end */
} MESH_INFO;
typedef struct RoomInfo_t {
__int16 *data;
DOOR_INFOS *doors;
FLOOR_INFO *floor;
LIGHT_INFO *light;
MESH_INFO *mesh;
__int32 x;
__int32 y;
__int32 z;
__int32 minFloor;
__int32 maxCeiling;
__int16 xSize;
__int16 ySize;
__int16 ambient;
__int16 numLights;
__int16 numMeshes;
__int16 boundLeft;
__int16 boundRight;
__int16 boundTop;
__int16 boundBottom;
__int16 boundActive;
__int16 itemNumber;
__int16 fxNumber;
__int16 flippedRoom;
__int16 flags;
typedef struct {
/* 0000 */ uint16_t *data;
/* 0004 */ DOOR_INFOS *doors;
/* 0008 */ FLOOR_INFO *floor;
/* 000C */ LIGHT_INFO *light;
/* 0010 */ MESH_INFO *mesh;
/* 0014 */ uint32_t x;
/* 0018 */ uint32_t y;
/* 001C */ uint32_t z;
/* 0020 */ uint32_t min_floor;
/* 0024 */ uint32_t max_ceiling;
/* 0028 */ uint16_t x_size;
/* 002A */ uint16_t y_size;
/* 002C */ uint16_t ambient;
/* 002E */ uint16_t num_lights;
/* 0030 */ uint16_t num_meshes;
/* 0032 */ uint16_t bound_left;
/* 0034 */ uint16_t bound_right;
/* 0036 */ uint16_t bound_top;
/* 0038 */ uint16_t bound_bottom;
/* 003A */ uint16_t bound_active;
/* 003C */ uint16_t item_number;
/* 003E */ uint16_t fx_number;
/* 0040 */ uint16_t flipped_room;
/* 0042 */ uint16_t flags;
/* 0044 end */
} ROOM_INFO;
typedef struct Phd3dPos_t {
int x;
int y;
int z;
__int16 rotX;
__int16 rotY;
__int16 rotZ;
typedef struct {
/* 0000 */ int32_t x;
/* 0004 */ int32_t y;
/* 0008 */ int32_t z;
/* 000C */ uint16_t rot_x;
/* 000E */ uint16_t rot_y;
/* 0010 */ uint16_t rot_z;
/* 0012 end */
} PHD_3DPOS;
typedef struct ItemInfo_t {
int floor;
__int32 touchBits;
__int32 meshBits;
__int16 objectID;
__int16 currentAnimState;
__int16 goalAnimState;
__int16 requiredAnimState;
__int16 animNumber;
__int16 frameNumber;
__int16 roomNumber;
__int16 nextItem;
__int16 nextActive;
__int16 speed;
__int16 fallSpeed;
__int16 hitPoints;
__int16 boxNumber;
__int16 timer;
unsigned __int16 flags; // see IFL_* defines
__int16 shade1;
void *data;
PHD_3DPOS pos;
unsigned __int16 moreFlags;
typedef struct {
/* 0000 */ uint32_t floor;
/* 0004 */ uint32_t touch_bits;
/* 0008 */ uint32_t mesh_bits;
/* 000C */ uint16_t object_id;
/* 000E */ uint16_t current_anim_state;
/* 0010 */ uint16_t goal_anim_state;
/* 0012 */ uint16_t required_anim_state;
/* 0014 */ uint16_t anim_number;
/* 0016 */ uint16_t frame_number;
/* 0018 */ uint16_t room_number;
/* 001A */ uint16_t next_item;
/* 001C */ uint16_t next_active;
/* 001E */ uint16_t speed;
/* 0020 */ uint16_t fall_speed;
/* 0022 */ uint16_t hit_points;
/* 0024 */ uint16_t box_number;
/* 0026 */ uint16_t timer;
/* 0028 */ uint16_t flags;
/* 002A */ uint16_t shade1;
/* 002C */ void *data;
/* 0030 */ PHD_3DPOS pos;
/* 0042 */ uint16_t more_flags;
/* 0044 end */
} ITEM_INFO;
typedef struct LaraInfo_t {
__int16 itemNumber;
__int16 gunStatus;
__int16 field_4;
__int16 field_6;
__int16 field_8;
__int16 waterStatus;
__int16 field_C;
__int16 field_E;
__int16 field_10;
__int16 air;
__int16 field_14;
__int16 field_16;
__int16 field_18;
__int16 field_1A;
__int32 field_1C;
__int32 field_20;
__int8 field_24[60];
__int32 field_60;
__int8 field_64[4];
__int32 field_68;
__int32 field_6C;
__int32 field_70;
__int32 field_74;
__int8 field_78[6];
__int16 field_7E;
__int8 field_80[6];
__int16 field_86;
__int8 field_88[6];
__int16 field_8E;
__int8 field_90[6];
__int16 field_96;
__int32 field_98;
__int8 field_9C[8];
__int32 field_A4;
__int8 field_A8[8];
__int32 field_B0;
__int8 field_B4[8];
__int32 field_BC;
__int8 field_C0[8];
__int8 field_C8[8];
__int16 field_D0;
__int16 field_D2;
__int16 field_D4;
__int16 field_D6;
__int16 field_D8;
typedef struct {
/* 0000 */ uint16_t *frame_base;
/* 0004 */ uint16_t frame_number;
/* 0006 */ uint16_t lock;
/* 0008 */ PHD_ANGLE y_rot;
/* 000A */ PHD_ANGLE x_rot;
/* 000C */ PHD_ANGLE z_rot;
/* 000E */ uint16_t flash_gun;
/* 0010 end */
} LARA_ARM;
typedef struct {
/* 0000 */ int32_t ammo;
/* 0004 */ int32_t hit;
/* 0008 */ int32_t miss;
/* 000C end */
} AMMO_INFO;
typedef struct {
/* 0000 */ int16_t exit_box;
/* 0002 */ uint16_t search_number;
/* 0004 */ int16_t next_expansion;
/* 0006 */ int16_t box_number;
/* 0008 end */
} BOX_NODE;
typedef struct {
/* 0000 */ BOX_NODE *node;
/* 0004 */ int16_t head;
/* 0006 */ int16_t tail;
/* 0008 */ uint16_t search_number;
/* 000A */ uint16_t block_mask;
/* 000C */ int16_t step;
/* 000E */ int16_t drop;
/* 0010 */ int16_t fly;
/* 0012 */ int16_t zone_count;
/* 0014 */ int16_t target_box;
/* 0016 */ int16_t required_box;
/* 0018 */ PHD_VECTOR target;
/* 001E end */
} LOT_INFO;
typedef struct {
/* 0000 */ int16_t item_number;
/* 0002 */ int16_t gun_status;
/* 0004 */ int16_t gun_type;
/* 0006 */ int16_t request_gun_type;
/* 0008 */ int16_t calc_fallspeed;
/* 000A */ int16_t water_status;
/* 000C */ int16_t pose_count;
/* 000E */ int16_t hit_frames;
/* 0010 */ int16_t hit_direction;
/* 0012 */ int16_t air;
/* 0014 */ int16_t dive_count;
/* 0016 */ int16_t death_count;
/* 0018 */ int16_t current_active;
/* 001A */ int16_t spaz_effect_count;
/* 001C */ UNKNOWN_STRUCT *spaz_effect;
/* 0020 */ int32_t mesh_effects;
/* 0024 */ int16_t *mesh_ptrs[15];
/* 0060 */ ITEM_INFO *target;
/* 0064 */ PHD_ANGLE target_angles[2];
/* 0068 */ int16_t turn_rate;
/* 006A */ int16_t move_angle;
/* 006C */ int16_t head_y_rot;
/* 006E */ int16_t head_x_rot;
/* 0070 */ int16_t head_z_rot;
/* 0072 */ int16_t torso_x_rot;
/* 0074 */ int16_t torso_y_rot;
/* 0076 */ int16_t torso_z_rot;
/* 0078 */ LARA_ARM left_arm;
/* 0088 */ LARA_ARM right_arm;
/* 0098 */ AMMO_INFO pistols;
/* 00A4 */ AMMO_INFO magnums;
/* 00B0 */ AMMO_INFO uzis;
/* 00BC */ AMMO_INFO shotgun;
/* 00C8 */ LOT_INFO LOT;
/* 00E6 end */
} LARA_INFO;
#pragma pop