mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-06 19:01:06 +03:00
(Broken) Deleted Global Folder
- No more enums.h, constants.h, macro.h, etc... - moved all structure in types.h to there respective file.
This commit is contained in:
parent
cd1d5f5482
commit
b615a98c46
208 changed files with 5335 additions and 5544 deletions
|
@ -1,7 +1,24 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
#include "phd_global.h"
|
||||
#include "items.h"
|
||||
#include "level.h"
|
||||
|
||||
enum ZoneTypeEnum
|
||||
typedef enum MOOD_TYPE
|
||||
{
|
||||
BORED_MOOD,
|
||||
ATTACK_MOOD,
|
||||
ESCAPE_MOOD,
|
||||
STALK_MOOD
|
||||
};
|
||||
|
||||
typedef enum TARGET_TYPE
|
||||
{
|
||||
NO_TARGET,
|
||||
PRIME_TARGET,
|
||||
SECONDARY_TARGET
|
||||
};
|
||||
|
||||
typedef enum ZONE_TYPE
|
||||
{
|
||||
ZONE_NULL = -1, // default zone
|
||||
ZONE_SKELLY = 0,
|
||||
|
@ -19,7 +36,7 @@ enum ZoneTypeEnum
|
|||
ZONE_APE, // only 2 click climb
|
||||
};
|
||||
|
||||
struct BOX_NODE
|
||||
typedef struct BOX_NODE
|
||||
{
|
||||
short exitBox;
|
||||
unsigned short searchNumber;
|
||||
|
@ -27,7 +44,7 @@ struct BOX_NODE
|
|||
short boxNumber;
|
||||
};
|
||||
|
||||
struct BOX_INFO
|
||||
typedef struct BOX_INFO
|
||||
{
|
||||
unsigned char left;
|
||||
unsigned char right;
|
||||
|
@ -37,7 +54,7 @@ struct BOX_INFO
|
|||
short overlapIndex;
|
||||
};
|
||||
|
||||
struct AI_INFO
|
||||
typedef struct AI_INFO
|
||||
{
|
||||
short zoneNumber;
|
||||
short enemyZone;
|
||||
|
@ -49,7 +66,7 @@ struct AI_INFO
|
|||
short enemyFacing;
|
||||
};
|
||||
|
||||
struct BITE_INFO
|
||||
typedef struct BITE_INFO
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
|
@ -57,7 +74,7 @@ struct BITE_INFO
|
|||
int meshNum;
|
||||
};
|
||||
|
||||
struct LOT_INFO
|
||||
typedef struct LOT_INFO
|
||||
{
|
||||
BOX_NODE* node;
|
||||
short head;
|
||||
|
@ -76,10 +93,10 @@ struct LOT_INFO
|
|||
bool isJumping;
|
||||
bool isMonkeying;
|
||||
PHD_VECTOR target;
|
||||
ZoneTypeEnum zone;
|
||||
ZONE_TYPE zone;
|
||||
};
|
||||
|
||||
struct CREATURE_INFO
|
||||
typedef struct CREATURE_INFO
|
||||
{
|
||||
short jointRotation[4];
|
||||
short maximumTurn;
|
||||
|
@ -101,14 +118,59 @@ struct CREATURE_INFO
|
|||
LOT_INFO LOT;
|
||||
};
|
||||
|
||||
#define CreatureEffectFunction short(int x, int y, int z, short speed, short yRot, short roomNumber)
|
||||
#define XZ_GET_SECTOR(room, x, z) (room->floor[((z) >> WALL_SHIFT) + ((x) >> WALL_SHIFT) * room->xSize])
|
||||
|
||||
constexpr auto UNIT_SHADOW = 256;
|
||||
constexpr auto NO_SHADOW = 0;
|
||||
constexpr auto DEFAULT_RADIUS = 10;
|
||||
constexpr auto ROT_X = 0x0004;
|
||||
constexpr auto ROT_Y = 0x0008;
|
||||
constexpr auto ROT_Z = 0x0010;
|
||||
constexpr auto BOX_BLOCKED = (1 << 14); // unpassable for other enemies, always set for movable blocks & closed doors
|
||||
constexpr auto BOX_LAST = (1 << 15); // unpassable by large enemies (T-Rex, Centaur, etc), always set behind doors
|
||||
constexpr auto TIMID = 0;
|
||||
constexpr auto VIOLENT = 1;
|
||||
constexpr auto ONESHOT = 0x100;
|
||||
constexpr auto DATA_TYPE = 0x1F;
|
||||
constexpr auto DATA_TILT = 0xF; // tile type (FLOOR_TYPE enum)
|
||||
constexpr auto DATA_STATIC = 0xFF; // probably add static collision
|
||||
constexpr auto END_BIT = 0x8000;
|
||||
constexpr auto VALUE_BITS = 0x3FF;
|
||||
constexpr auto CODE_BITS = 0x3E00;
|
||||
constexpr auto REVERSE = 0x4000;
|
||||
constexpr auto SWONESHOT = 0x40;
|
||||
constexpr auto ATONESHOT = 0x80;
|
||||
constexpr auto BLOCKABLE = 0x8000;
|
||||
constexpr auto BLOCKED = 0x4000;
|
||||
constexpr auto OVERLAP_INDEX = 0x3FFF;
|
||||
constexpr auto SEARCH_NUMBER = 0x7FFF;
|
||||
constexpr auto BLOCKED_SEARCH = 0x8000;
|
||||
constexpr auto NO_BOX = 0x7FF;
|
||||
constexpr auto BOX_JUMP = 0x800;
|
||||
constexpr auto BOX_MONKEY = 0x2000;
|
||||
constexpr auto BOX_NUMBER = 0x7FF;
|
||||
constexpr auto BOX_END_BIT = 0x8000;
|
||||
constexpr auto EXPAND_LEFT = 0x1;
|
||||
constexpr auto EXPAND_RIGHT = 0x2;
|
||||
constexpr auto EXPAND_TOP = 0x4;
|
||||
constexpr auto EXPAND_BOTTOM = 0x8;
|
||||
constexpr auto NO_FLYING = 0;
|
||||
constexpr auto FLY_ZONE = 0x2000;
|
||||
constexpr auto CLIP_LEFT = 0x1;
|
||||
constexpr auto CLIP_RIGHT = 0x2;
|
||||
constexpr auto CLIP_TOP = 0x4;
|
||||
constexpr auto CLIP_BOTTOM = 0x8;
|
||||
constexpr auto SECONDARY_CLIP = 0x10;
|
||||
constexpr auto ALL_CLIP = (CLIP_LEFT | CLIP_RIGHT | CLIP_TOP | CLIP_BOTTOM);
|
||||
constexpr auto SLOPE_DIF = 60;
|
||||
|
||||
extern int NumberBoxes;
|
||||
extern BOX_INFO* Boxes;
|
||||
extern int NumberOverlaps;
|
||||
extern short* Overlaps;
|
||||
extern short* Zones[ZONE_MAX][2];
|
||||
|
||||
#define CreatureEffectFunction short(int x, int y, int z, short speed, short yRot, short roomNumber)
|
||||
|
||||
void GetCreatureMood(ITEM_INFO* item, AI_INFO* info, int violent);
|
||||
void CreatureMood(ITEM_INFO* item, AI_INFO* info, int violent);
|
||||
void FindAITargetObject(CREATURE_INFO* creature, short objectNumber);
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
#include "framework.h"
|
||||
#include "box.h"
|
||||
#include "global.h"
|
||||
#include "items.h"
|
||||
#include "tomb4fx.h"
|
||||
#include "lot.h"
|
||||
#include "deltapak.h"
|
||||
#include "items.h"
|
||||
#include "Lara.h"
|
||||
#include "draw.h"
|
||||
#include "sphere.h"
|
||||
|
@ -13,7 +9,8 @@
|
|||
#include "camera.h"
|
||||
#include "control.h"
|
||||
#include "setup.h"
|
||||
#include "level.h"
|
||||
#include "trmath.h"
|
||||
#include "objectslist.h"
|
||||
|
||||
int NumberBoxes;
|
||||
BOX_INFO* Boxes;
|
||||
|
@ -21,6 +18,7 @@ int NumberOverlaps;
|
|||
short* Overlaps;
|
||||
short* Zones[ZONE_MAX][2];
|
||||
|
||||
#define CHECK_CLICK(x) CLICK(x) / 2
|
||||
#define ESCAPE_DIST SECTOR(5)
|
||||
#define STALK_DIST SECTOR(3)
|
||||
#define REACHED_GOAL_RADIUS 640
|
||||
|
@ -335,7 +333,7 @@ void CreatureFloat(short itemNumber)
|
|||
short roomNumber;
|
||||
|
||||
item = &Items[itemNumber];
|
||||
item->hitPoints = -16384;
|
||||
item->hitPoints = NOT_TARGETABLE;
|
||||
item->pos.xRot = 0;
|
||||
|
||||
waterLevel = GetWaterHeight(item->pos.xPos, item->pos.yPos, item->pos.zPos, item->roomNumber);
|
||||
|
@ -361,7 +359,7 @@ void CreatureFloat(short itemNumber)
|
|||
{
|
||||
item->pos.yPos = waterLevel;
|
||||
item->collidable = false;
|
||||
item->status = ITEM_DEACTIVATED;
|
||||
item->status = ITEM_DESACTIVATED;
|
||||
DisableBaddieAI(itemNumber);
|
||||
RemoveActiveItem(itemNumber);
|
||||
item->afterDeath = 1;
|
||||
|
@ -537,7 +535,7 @@ int CreatureAnimation(short itemNumber, short angle, short tilt)
|
|||
}
|
||||
|
||||
AnimateItem(item);
|
||||
if (item->status == ITEM_DEACTIVATED)
|
||||
if (item->status == ITEM_DESACTIVATED)
|
||||
{
|
||||
CreatureDie(itemNumber, FALSE);
|
||||
return FALSE;
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
#include "bubble.h"
|
||||
#include "level.h"
|
||||
#include "control.h"
|
||||
#include "trmath.h"
|
||||
#include "objectslist.h"
|
||||
|
||||
extern vector<BUBBLE_STRUCT> Bubbles = vector<BUBBLE_STRUCT>(MAX_BUBBLES);
|
||||
|
||||
|
@ -56,16 +58,19 @@ int GetFreeBubble() //8BEAC(<), 8DEF0(<) (F)
|
|||
{
|
||||
int oldestAgeIndex = 0;
|
||||
int oldestAge = 0;
|
||||
for (int i = 0; i < MAX_BUBBLES; i++) {
|
||||
for (int i = 0; i < MAX_BUBBLES; i++)
|
||||
{
|
||||
BUBBLE_STRUCT* bub = &Bubbles[i];
|
||||
if (!bub->active) {
|
||||
if (!bub->active)
|
||||
return i;
|
||||
}
|
||||
if (oldestAge < bub->age) {
|
||||
|
||||
if (oldestAge < bub->age)
|
||||
{
|
||||
oldestAge = bub->age;
|
||||
oldestAgeIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
//incase we dont find any non-active bubble, take the one with the oldest age
|
||||
return oldestAgeIndex;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
#pragma once
|
||||
#include <d3d11.h>
|
||||
#include <SimpleMath.h>
|
||||
#include <vector>
|
||||
#include "types.h"
|
||||
#include "constants.h"
|
||||
#include "effect2.h"
|
||||
|
||||
|
@ -13,14 +9,14 @@ constexpr int BUBBLE_FLAG_HIGH_AMPLITUDE = 0x4;
|
|||
|
||||
struct BUBBLE_STRUCT
|
||||
{
|
||||
DirectX::SimpleMath::Vector4 color;
|
||||
DirectX::SimpleMath::Vector4 sourceColor;
|
||||
DirectX::SimpleMath::Vector4 destinationColor;
|
||||
DirectX::SimpleMath::Vector3 worldPositionCenter; // goes straight up
|
||||
DirectX::SimpleMath::Vector3 worldPosition; // actual position with wave motion
|
||||
DirectX::SimpleMath::Vector3 amplitude;
|
||||
DirectX::SimpleMath::Vector3 wavePeriod;
|
||||
DirectX::SimpleMath::Vector3 waveSpeed;
|
||||
Vector4 color;
|
||||
Vector4 sourceColor;
|
||||
Vector4 destinationColor;
|
||||
Vector3 worldPositionCenter; // goes straight up
|
||||
Vector3 worldPosition; // actual position with wave motion
|
||||
Vector3 amplitude;
|
||||
Vector3 wavePeriod;
|
||||
Vector3 waveSpeed;
|
||||
float speed;
|
||||
float size;
|
||||
float destinationSize;
|
||||
|
|
|
@ -1,7 +1,53 @@
|
|||
#pragma once
|
||||
#include "phd_global.h"
|
||||
#include "items.h"
|
||||
|
||||
#include "global.h"
|
||||
#include <d3d9.h>
|
||||
typedef enum CAMERA_TYPE
|
||||
{
|
||||
CHASE_CAMERA,
|
||||
FIXED_CAMERA,
|
||||
LOOK_CAMERA,
|
||||
COMBAT_CAMERA,
|
||||
CINEMATIC_CAMERA,
|
||||
HEAVY_CAMERA
|
||||
};
|
||||
|
||||
typedef struct CAMERA_INFO
|
||||
{
|
||||
GAME_VECTOR pos; // size=16, offset=0
|
||||
GAME_VECTOR target; // size=16, offset=16
|
||||
CAMERA_TYPE type; // size=4, offset=32
|
||||
CAMERA_TYPE oldType; // size=4, offset=36
|
||||
int shift; // size=0, offset=40
|
||||
int flags; // size=0, offset=44
|
||||
int fixedCamera; // size=0, offset=48
|
||||
int numberFrames; // size=0, offset=52
|
||||
int bounce; // size=0, offset=56
|
||||
int underwater; // size=0, offset=60
|
||||
int targetDistance; // size=0, offset=64
|
||||
short targetAngle; // size=0, offset=68
|
||||
short targetElevation; // size=0, offset=70
|
||||
short actualElevation; // size=0, offset=72
|
||||
short actualAngle; // size=0, offset=74
|
||||
short laraNode; // size=0, offset=76
|
||||
short box; // size=0, offset=78
|
||||
short number; // size=0, offset=80
|
||||
short last; // size=0, offset=82
|
||||
short timer; // size=0, offset=84
|
||||
short speed; // size=0, offset=86
|
||||
short targetspeed; // size=0, offset=88
|
||||
ITEM_INFO* item; // size=144, offset=92
|
||||
ITEM_INFO* lastItem; // size=144, offset=96
|
||||
OBJECT_VECTOR* fixed; // size=16, offset=100
|
||||
int mikeAtLara; // size=0, offset=104
|
||||
PHD_VECTOR mikePos; // size=12, offset=108
|
||||
};
|
||||
|
||||
constexpr auto MAX_CAMERA = 18;
|
||||
constexpr auto FOLLOW_CENTRE = 1;
|
||||
constexpr auto NO_CHUNKY = 2;
|
||||
constexpr auto CHASE_OBJECT = 3;
|
||||
constexpr auto NO_MINY = 0xFFFFFF;
|
||||
|
||||
extern PHD_VECTOR CurrentCameraPosition;
|
||||
extern CAMERA_INFO Camera;
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
#include "sphere.h"
|
||||
#include "misc.h"
|
||||
#include "setup.h"
|
||||
#include "level.h"
|
||||
#include "sound.h"
|
||||
#include "trmath.h"
|
||||
|
||||
char LM[] =
|
||||
{
|
||||
|
@ -64,7 +64,7 @@ int CollideStaticObjects(COLL_INFO* coll, int x, int y, int z, short roomNumber,
|
|||
|
||||
for (int j = room->numMeshes; j > 0; j--, mesh++)
|
||||
{
|
||||
STATIC_INFO* sInfo = &StaticObjects[mesh->staticNumber];
|
||||
StaticInfo* sInfo = &StaticObjects[mesh->staticNumber];
|
||||
if ((sInfo->flags & 1)) // No collision
|
||||
continue;
|
||||
|
||||
|
@ -139,7 +139,7 @@ int GetCollidedObjects(ITEM_INFO* collidingItem, int radius, int onlyVisible, IT
|
|||
for (int j = 0; j < room->numMeshes; j++)
|
||||
{
|
||||
MESH_INFO* mesh = &room->mesh[j];
|
||||
STATIC_INFO* staticMesh = &StaticObjects[mesh->staticNumber];
|
||||
StaticInfo* staticMesh = &StaticObjects[mesh->staticNumber];
|
||||
|
||||
if (mesh->Flags & 1)
|
||||
{
|
||||
|
|
|
@ -1,11 +1,22 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
#include "phd_global.h"
|
||||
#include "level.h"
|
||||
|
||||
// used by coll->badPos
|
||||
#define NO_BAD_POS (-NO_HEIGHT)
|
||||
// used by coll->badNeg
|
||||
#define NO_BAD_NEG NO_HEIGHT
|
||||
|
||||
struct BOUNDING_BOX
|
||||
{
|
||||
short X1;
|
||||
short X2;
|
||||
short Y1;
|
||||
short Y2;
|
||||
short Z1;
|
||||
short Z2;
|
||||
};
|
||||
|
||||
struct COLL_FLOOR
|
||||
{
|
||||
int floor;
|
||||
|
@ -87,8 +98,9 @@ struct COLL_INFO
|
|||
};
|
||||
|
||||
extern BOUNDING_BOX GlobalCollisionBounds;
|
||||
extern ITEM_INFO* CollidedItems[1024];
|
||||
extern MESH_INFO* CollidedMeshes[1024];
|
||||
constexpr auto MAX_ITEMS = 1024;
|
||||
extern ITEM_INFO* CollidedItems[MAX_ITEMS];
|
||||
extern MESH_INFO* CollidedMeshes[MAX_ITEMS];
|
||||
|
||||
void GenericSphereBoxCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll);
|
||||
int CollideStaticObjects(COLL_INFO* coll, int x, int y, int z, short roomNumber, int hite);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "framework.h"
|
||||
#include "collide.h"
|
||||
#include "control.h"
|
||||
#include "global.h"
|
||||
|
||||
#include "pickup.h"
|
||||
#include "camera.h"
|
||||
#include "Lara.h"
|
||||
|
@ -111,7 +111,7 @@ int InitialiseGame;
|
|||
int RequiredStartPos;
|
||||
int WeaponDelay;
|
||||
int WeaponEnemyTimer;
|
||||
int HeightType;
|
||||
HEIGHT_TYPES HeightType;
|
||||
int HeavyTriggered;
|
||||
short SkyPos1;
|
||||
short SkyPos2;
|
||||
|
@ -1016,7 +1016,7 @@ void TestTriggers(short* data, int heavy, int HeavyFlags)
|
|||
|
||||
if (item->active && Objects[item->objectNumber].intelligent)
|
||||
{
|
||||
item->hitPoints = -16384;
|
||||
item->hitPoints = NOT_TARGETABLE;
|
||||
DisableBaddieAI(value);
|
||||
KillItem(value);
|
||||
}
|
||||
|
@ -1037,7 +1037,7 @@ void TestTriggers(short* data, int heavy, int HeavyFlags)
|
|||
{
|
||||
if (Objects[item->objectNumber].intelligent)
|
||||
{
|
||||
if (item->status != ITEM_INACTIVE)
|
||||
if (item->status != ITEM_NOT_ACTIVE)
|
||||
{
|
||||
if (item->status == ITEM_INVISIBLE)
|
||||
{
|
||||
|
@ -2134,7 +2134,6 @@ int GetTargetOnLOS(GAME_VECTOR* src, GAME_VECTOR* dest, int DrawTarget, int firi
|
|||
|
||||
flag = 0;
|
||||
itemNumber = ObjectOnLOS2(src, dest, &vector, &mesh);
|
||||
|
||||
if (itemNumber != 999)
|
||||
{
|
||||
target.x = vector.x - (vector.x - src->x >> 5);
|
||||
|
@ -2276,7 +2275,7 @@ int GetTargetOnLOS(GAME_VECTOR* src, GAME_VECTOR* dest, int DrawTarget, int firi
|
|||
}
|
||||
}
|
||||
}
|
||||
if (item->status != ITEM_DEACTIVATED)
|
||||
if (item->status != ITEM_DESACTIVATED)
|
||||
{
|
||||
AddActiveItem(itemNumber);
|
||||
item->status = ITEM_ACTIVE;
|
||||
|
@ -2384,7 +2383,7 @@ int ObjectOnLOS2(GAME_VECTOR* start, GAME_VECTOR* end, PHD_VECTOR* vec, MESH_INF
|
|||
{
|
||||
item = &Items[linknum];
|
||||
|
||||
if (item->status != ITEM_DEACTIVATED
|
||||
if (item->status != ITEM_DESACTIVATED
|
||||
&& item->status != ITEM_INVISIBLE
|
||||
&& (item->objectNumber != ID_LARA && Objects[item->objectNumber].collision != NULL
|
||||
|| item->objectNumber == ID_LARA && GetLaraOnLOS))
|
||||
|
@ -2777,7 +2776,7 @@ void AnimateItem(ITEM_INFO* item)
|
|||
case COMMAND_DEACTIVATE:
|
||||
if (Objects[item->objectNumber].intelligent && !item->afterDeath)
|
||||
item->afterDeath = 1;
|
||||
item->status = ITEM_DEACTIVATED;
|
||||
item->status = ITEM_DESACTIVATED;
|
||||
break;
|
||||
case COMMAND_SOUND_FX:
|
||||
case COMMAND_EFFECT:
|
||||
|
@ -2979,10 +2978,7 @@ void RemoveRoomFlipItems(ROOM_INFO* r)
|
|||
{
|
||||
ITEM_INFO* item = &Items[linkNum];
|
||||
|
||||
if (item->flags & 0x100
|
||||
&& Objects[item->objectNumber].intelligent
|
||||
&& item->hitPoints <= 0
|
||||
&& item->hitPoints != -16384)
|
||||
if (item->flags & 0x100 && Objects[item->objectNumber].intelligent && item->hitPoints <= 0 && item->hitPoints != NOT_TARGETABLE)
|
||||
{
|
||||
KillItem(linkNum);
|
||||
}
|
||||
|
|
|
@ -1,13 +1,69 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
#include "phd_global.h"
|
||||
#include "items.h"
|
||||
#include "room.h"
|
||||
|
||||
#define TRIG_BITS(T) ((T & 0x3fff) >> 10)
|
||||
enum GAME_STATUS
|
||||
{
|
||||
GAME_STATUS_NONE,
|
||||
GAME_STATUS_NEW_GAME,
|
||||
GAME_STATUS_LOAD_GAME,
|
||||
GAME_STATUS_SAVE_GAME,
|
||||
GAME_STATUS_EXIT_TO_TITLE,
|
||||
GAME_STATUS_EXIT_GAME,
|
||||
GAME_STATUS_LARA_DEAD,
|
||||
GAME_STATUS_LEVEL_COMPLETED
|
||||
};
|
||||
|
||||
enum COLL_TYPE
|
||||
{
|
||||
CT_NONE = 0, // 0x00
|
||||
CT_FRONT = (1 << 0), // 0x01
|
||||
CT_LEFT = (1 << 1), // 0x02
|
||||
CT_RIGHT = (1 << 2), // 0x04
|
||||
CT_TOP = (1 << 3), // 0x08
|
||||
CT_TOP_FRONT = (1 << 4), // 0x10
|
||||
CT_CLAMP = (1 << 5) // 0x20
|
||||
};
|
||||
|
||||
enum HEIGHT_TYPES
|
||||
{
|
||||
WALL,
|
||||
SMALL_SLOPE,
|
||||
BIG_SLOPE,
|
||||
DIAGONAL,
|
||||
SPLIT_TRI
|
||||
};
|
||||
|
||||
enum HEADINGS
|
||||
{
|
||||
NORTH,
|
||||
EAST,
|
||||
SOUTH,
|
||||
WEST
|
||||
};
|
||||
|
||||
enum COMMAND_TYPES
|
||||
{
|
||||
COMMAND_NULL = 0,
|
||||
COMMAND_MOVE_ORIGIN,
|
||||
COMMAND_JUMP_VELOCITY,
|
||||
COMMAND_ATTACK_READY,
|
||||
COMMAND_DEACTIVATE,
|
||||
COMMAND_SOUND_FX,
|
||||
COMMAND_EFFECT
|
||||
};
|
||||
|
||||
#define TRIG_BITS(T) ((T & 0x3FFF) >> 10)
|
||||
|
||||
extern int KeyTriggerActive;
|
||||
extern byte IsAtmospherePlaying;
|
||||
extern byte FlipStatus;
|
||||
|
||||
constexpr auto MAX_FLIPMAP = 255;
|
||||
extern int FlipStats[MAX_FLIPMAP];
|
||||
extern int FlipMap[MAX_FLIPMAP];
|
||||
|
||||
extern bool InItemControlLoop;
|
||||
extern short ItemNewRoomNo;
|
||||
extern short ItemNewRooms[512];
|
||||
|
@ -41,7 +97,7 @@ extern int InitialiseGame;
|
|||
extern int RequiredStartPos;
|
||||
extern int WeaponDelay;
|
||||
extern int WeaponEnemyTimer;
|
||||
extern int HeightType;
|
||||
extern HEIGHT_TYPES HeightType;
|
||||
extern int HeavyTriggered;
|
||||
extern short SkyPos1;
|
||||
extern short SkyPos2;
|
||||
|
|
|
@ -3,12 +3,14 @@
|
|||
#include "level.h"
|
||||
#include "setup.h"
|
||||
#include "control.h"
|
||||
#include "trmath.h"
|
||||
|
||||
ShatterImpactInfo ShatterImpactData;
|
||||
SHATTER_ITEM ShatterItem;
|
||||
short SmashedMeshCount;
|
||||
MESH_INFO* SmashedMesh[32];
|
||||
short SmashedMeshRoom[32];
|
||||
vector<DebrisFragment> DebrisFragments = vector<DebrisFragment>(MAX_DEBRIS);
|
||||
|
||||
DebrisFragment* GetFreeDebrisFragment()
|
||||
{
|
||||
|
@ -81,9 +83,8 @@ void ShatterObject(SHATTER_ITEM* item, MESH_INFO* mesh, int num,short roomNumber
|
|||
}
|
||||
|
||||
}
|
||||
vector<DebrisFragment> DebrisFragments = vector<DebrisFragment>(MAX_DEBRIS);
|
||||
|
||||
DirectX::SimpleMath::Vector3 CalculateFragmentImpactVelocity(Vector3 fragmentWorldPosition, Vector3 impactDirection, Vector3 impactLocation)
|
||||
Vector3 CalculateFragmentImpactVelocity(Vector3 fragmentWorldPosition, Vector3 impactDirection, Vector3 impactLocation)
|
||||
{
|
||||
Vector3 radiusVector = (fragmentWorldPosition - impactLocation);
|
||||
Vector3 radiusNormVec = radiusVector;
|
||||
|
@ -99,26 +100,36 @@ DirectX::SimpleMath::Vector3 CalculateFragmentImpactVelocity(Vector3 fragmentWor
|
|||
|
||||
void UpdateDebris()
|
||||
{
|
||||
for (auto deb = DebrisFragments.begin(); deb != DebrisFragments.end(); deb++) {
|
||||
if (deb->active) {
|
||||
for (auto deb = DebrisFragments.begin(); deb != DebrisFragments.end(); deb++)
|
||||
{
|
||||
if (deb->active)
|
||||
{
|
||||
FLOOR_INFO* floor;
|
||||
short roomNumber;
|
||||
|
||||
deb->velocity *= deb->linearDrag;
|
||||
deb->velocity += deb->gravity;
|
||||
deb->velocity = XMVector3ClampLength(deb->velocity, 0, deb->terminalVelocity);
|
||||
deb->rotation *= Quaternion::CreateFromYawPitchRoll(deb->angularVelocity.x,deb->angularVelocity.y,deb->angularVelocity.z);
|
||||
deb->worldPosition += deb->velocity;
|
||||
deb->angularVelocity *= deb->angularDrag;
|
||||
short room = deb->roomNumber;
|
||||
const FLOOR_INFO* const floor = GetFloor(deb->worldPosition.x, deb->worldPosition.y, deb->worldPosition.z,&room);
|
||||
if (deb->worldPosition.y < floor->ceiling) {
|
||||
if (floor->skyRoom != NO_ROOM) {
|
||||
|
||||
roomNumber = deb->roomNumber;
|
||||
floor = GetFloor(deb->worldPosition.x, deb->worldPosition.y, deb->worldPosition.z,&roomNumber);
|
||||
|
||||
if (deb->worldPosition.y < floor->ceiling)
|
||||
{
|
||||
if (floor->skyRoom != NO_ROOM)
|
||||
deb->roomNumber = floor->skyRoom;
|
||||
}
|
||||
}
|
||||
if (deb->worldPosition.y > floor->floor) {
|
||||
if (floor->pitRoom != NO_ROOM) {
|
||||
|
||||
if (deb->worldPosition.y > floor->floor)
|
||||
{
|
||||
if (floor->pitRoom != NO_ROOM)
|
||||
deb->roomNumber = floor->pitRoom;
|
||||
}
|
||||
if (deb->numBounces > 3) {
|
||||
|
||||
if (deb->numBounces > 3)
|
||||
{
|
||||
deb->active = false;
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -1,18 +1,50 @@
|
|||
#pragma once
|
||||
#include "sphere.h"
|
||||
#include "Renderer11.h"
|
||||
|
||||
#include "global.h"
|
||||
#define MAX_DEBRIS 256
|
||||
|
||||
struct ShatterImpactInfo {
|
||||
typedef struct ILIGHT
|
||||
{
|
||||
short x;
|
||||
short y;
|
||||
short z;
|
||||
short pad1;
|
||||
unsigned char r;
|
||||
unsigned char g;
|
||||
unsigned char b;
|
||||
unsigned char pad;
|
||||
};
|
||||
|
||||
typedef struct ITEM_LIGHT
|
||||
{
|
||||
ILIGHT light[4];
|
||||
};
|
||||
|
||||
typedef struct SHATTER_ITEM
|
||||
{
|
||||
SPHERE sphere;
|
||||
ITEM_LIGHT* il;
|
||||
short* meshp;
|
||||
int bit;
|
||||
short yRot;
|
||||
short flags;
|
||||
};
|
||||
|
||||
typedef struct ShatterImpactInfo
|
||||
{
|
||||
Vector3 impactDirection;
|
||||
Vector3 impactLocation;
|
||||
};
|
||||
|
||||
struct DebrisMesh {
|
||||
typedef struct DebrisMesh
|
||||
{
|
||||
RENDERER_BUCKETS bucket;
|
||||
array<RendererVertex, 3> vertices;
|
||||
};
|
||||
|
||||
struct DebrisFragment {
|
||||
typedef struct DebrisFragment
|
||||
{
|
||||
DebrisMesh mesh;
|
||||
Quaternion rotation;
|
||||
Vector3 angularVelocity;
|
||||
|
@ -29,6 +61,29 @@ struct DebrisFragment {
|
|||
bool active;
|
||||
};
|
||||
|
||||
typedef struct DEBRIS_STRUCT
|
||||
{
|
||||
void* textInfo;
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
short xyzOffsets1[3];
|
||||
short dir;
|
||||
short xyzOffsets2[3];
|
||||
short speed;
|
||||
short xyzOffsets3[3];
|
||||
short yVel;
|
||||
short gravity;
|
||||
short roomNumber;
|
||||
byte on;
|
||||
byte xRot;
|
||||
byte yRot;
|
||||
byte r;
|
||||
byte g;
|
||||
byte b;
|
||||
byte pad[22];
|
||||
};
|
||||
|
||||
extern SHATTER_ITEM ShatterItem;
|
||||
extern vector<DebrisFragment> DebrisFragments;
|
||||
extern ShatterImpactInfo ShatterImpactData;
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
#include "framework.h"
|
||||
#include "deltapak.h"
|
||||
#include "global.h"
|
||||
#include "level.h"
|
||||
|
||||
ITEM_INFO* FindItem(short objectNumber)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
printf("Called FindItem()\n");
|
||||
#endif
|
||||
|
||||
//DB_Log(0, "FindItem - DLL");
|
||||
|
||||
if (LevelItems > 0)
|
||||
{
|
||||
for (int i = 0; i < LevelItems; i++)
|
||||
{
|
||||
if (Items[i].objectNumber == objectNumber)
|
||||
return &Items[i];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global.h"
|
|
@ -13,13 +13,14 @@
|
|||
#include "level.h"
|
||||
#include "input.h"
|
||||
#include "sound.h"
|
||||
#include "trmath.h"
|
||||
|
||||
PHD_VECTOR DoubleDoorPos = { 0, 0, 220 };
|
||||
PHD_VECTOR PullDoorPos = { -201, 0, 322 };
|
||||
PHD_VECTOR PushDoorPos = { 201, 0, -702 };
|
||||
PHD_VECTOR KickDoorPos = { 0, 0, -917 };
|
||||
PHD_VECTOR UnderwaterDoorPos = { -251, -540, -46 };
|
||||
PHD_VECTOR CrowbarDoorPos = { -412, 0, 256 };
|
||||
PHD_VECTOR DoubleDoorPos(0, 0, 220);
|
||||
PHD_VECTOR PullDoorPos(-201, 0, 322);
|
||||
PHD_VECTOR PushDoorPos(201, 0, -702);
|
||||
PHD_VECTOR KickDoorPos(0, 0, -917);
|
||||
PHD_VECTOR UnderwaterDoorPos(-251, -540, -46);
|
||||
PHD_VECTOR CrowbarDoorPos(-412, 0, 256);
|
||||
|
||||
static short PushPullKickDoorBounds[12] =
|
||||
{
|
||||
|
@ -109,7 +110,7 @@ void UnderwaterDoorCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
|||
&& !Lara.gunStatus
|
||||
|| Lara.isMoving && Lara.generalPtr == (void*)itemNum)
|
||||
{
|
||||
l->pos.yRot ^= ANGLE(180);
|
||||
l->pos.yRot ^= ANGLE(180.0f);
|
||||
|
||||
if (TestLaraPosition(UnderwaterDoorBounds, item, l))
|
||||
{
|
||||
|
@ -330,7 +331,7 @@ void DoorCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
|||
ITEM_INFO* item = &Items[itemNum];
|
||||
|
||||
if (item->triggerFlags == 2
|
||||
&& item->status == ITEM_INACTIVE && !item->gravityStatus // CHECK
|
||||
&& item->status == ITEM_NOT_ACTIVE && !item->gravityStatus // CHECK
|
||||
&& ((TrInput & IN_ACTION || g_Inventory->GetSelectedObject() == ID_CROWBAR_ITEM)
|
||||
&& l->currentAnimState == STATE_LARA_STOP
|
||||
&& l->animNumber == ANIMATION_LARA_STAY_IDLE
|
||||
|
|
|
@ -1,6 +1,32 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
#include "items.h"
|
||||
#include "collide.h"
|
||||
#include "room.h"
|
||||
|
||||
typedef struct DOORPOS_DATA
|
||||
{
|
||||
FLOOR_INFO* floor;
|
||||
FLOOR_INFO data;
|
||||
short block;
|
||||
};
|
||||
|
||||
typedef struct DOOR_DATA
|
||||
{
|
||||
DOORPOS_DATA d1;
|
||||
DOORPOS_DATA d1flip;
|
||||
DOORPOS_DATA d2;
|
||||
DOORPOS_DATA d2flip;
|
||||
short opened;
|
||||
short* dptr1;
|
||||
short* dptr2;
|
||||
short* dptr3;
|
||||
short* dptr4;
|
||||
byte dn1;
|
||||
byte dn2;
|
||||
byte dn3;
|
||||
byte dn4;
|
||||
ITEM_INFO* item;
|
||||
};
|
||||
|
||||
void SequenceDoorControl(short itemNumber);
|
||||
void UnderwaterDoorCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll);
|
||||
|
|
|
@ -18,8 +18,6 @@ BITE_INFO EnemyBites[9] =
|
|||
{ 0xA, 0xFFFFFFC4, 0xC8, 0xD }
|
||||
};
|
||||
|
||||
Renderer11* g_Renderer;
|
||||
|
||||
int LightningCount;
|
||||
int LightningRand;
|
||||
int StormTimer;
|
||||
|
|
|
@ -1,9 +1,20 @@
|
|||
#pragma once
|
||||
|
||||
#include "global.h"
|
||||
#include "box.h"
|
||||
|
||||
extern Renderer11* g_Renderer;
|
||||
struct ANIM_FRAME
|
||||
{
|
||||
short MinX;
|
||||
short MaxX;
|
||||
short MinY;
|
||||
short MaxY;
|
||||
short MinZ;
|
||||
short MaxZ;
|
||||
short OffsetX;
|
||||
short OffsetY;
|
||||
short OffsetZ;
|
||||
unsigned short AngleSets[]; // Variable size
|
||||
};
|
||||
|
||||
extern BITE_INFO EnemyBites[9];
|
||||
extern int LightningCount;
|
||||
extern int LightningRand;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "framework.h"
|
||||
#include "effect.h"
|
||||
#include "global.h"
|
||||
|
||||
#include "Lara.h"
|
||||
#include "items.h"
|
||||
#include "lot.h"
|
||||
|
@ -402,7 +402,7 @@ void PoseidonSFX(ITEM_INFO* item)//395E0(<), 39AE0(<) (F)
|
|||
|
||||
void RubbleFX(ITEM_INFO* item)//39534(<), 39A34(<) (F)
|
||||
{
|
||||
int itemNumber = FindItem(ID_EARTHQUAKE);
|
||||
int itemNumber = FindItemNumber(ID_EARTHQUAKE);
|
||||
|
||||
if (itemNumber != NO_ITEM)
|
||||
{
|
||||
|
|
|
@ -1,7 +1,21 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
#include "control.h"
|
||||
|
||||
struct FX_INFO
|
||||
{
|
||||
PHD_3DPOS pos;
|
||||
short roomNumber;
|
||||
short objectNumber;
|
||||
short nextFx;
|
||||
short nextActive;
|
||||
short speed;
|
||||
short fallspeed;
|
||||
short frameNumber;
|
||||
short counter;
|
||||
short shade;
|
||||
short flag1;
|
||||
short flag2;
|
||||
};
|
||||
extern FX_INFO* Effects;
|
||||
|
||||
int ItemNearLara(PHD_3DPOS* pos, int radius);
|
||||
|
|
|
@ -1,39 +1,35 @@
|
|||
#include "framework.h"
|
||||
#include "effect2.h"
|
||||
#include "draw.h"
|
||||
#include "effect.h"
|
||||
#include "lara.h"
|
||||
#include "tomb4fx.h"
|
||||
#include "traps.h"
|
||||
#include "trmath.h"
|
||||
#include "lara.h"
|
||||
#include "effect.h"
|
||||
#include "sound.h"
|
||||
#include "GameFlowScript.h"
|
||||
#include "setup.h"
|
||||
#include "level.h"
|
||||
|
||||
//long wibble;
|
||||
//long SplashCount;
|
||||
//long KillEverythingFlag;
|
||||
int NextSpark;
|
||||
#include "objectslist.h"
|
||||
#include "GameFlowScript.h"
|
||||
|
||||
unsigned char TES_extra_tab[] =
|
||||
{
|
||||
0x00, 0x04, 0x07, 0x0A, 0x00, 0x00
|
||||
};
|
||||
extern SMOKE_SPARKS SmokeSparks[MAX_SPARKS_SMOKE];
|
||||
|
||||
int NextSpark;
|
||||
int DeadlyBounds[6];
|
||||
SPLASH_STRUCT Splashes[MAX_SPLASH];
|
||||
SPLASH_SETUP SplashSetup;
|
||||
SPLASH_STRUCT Splashes[MAX_SPLASHES];
|
||||
RIPPLE_STRUCT Ripples[MAX_RIPPLES];
|
||||
DYNAMIC Dynamics[MAX_DYNAMICS];
|
||||
SPLASH_SETUP SplashSetup;
|
||||
SP_DYNAMIC SparkDynamics[8];
|
||||
int SmokeWeapon;
|
||||
int SmokeCountL;
|
||||
int SmokeCountR;
|
||||
//int SmokeWindX;
|
||||
//int SmokeWindZ;
|
||||
int SplashCount = 0;
|
||||
SPARKS Sparks[MAX_SPARKS];
|
||||
SP_DYNAMIC SparkDynamics[MAX_SPARKS_DYNAMICS];
|
||||
int SmokeWeapon;
|
||||
byte SmokeCountL;
|
||||
byte SmokeCountR;
|
||||
int SplashCount = 0;
|
||||
|
||||
PHD_VECTOR NodeVectors[MAX_NODE];
|
||||
NODEOFFSET_INFO NodeOffsets[MAX_NODE] = {
|
||||
{ -16, 40, 160, -14, false }, // TR5 offset 0
|
||||
|
@ -63,19 +59,21 @@ NODEOFFSET_INFO NodeOffsets[MAX_NODE] = {
|
|||
|
||||
extern GameFlow* g_GameFlow;
|
||||
|
||||
void DetatchSpark(int num, int type)// (F) (D)
|
||||
void DetatchSpark(int num, SpriteEnumFlag type)// (F) (D)
|
||||
{
|
||||
FX_INFO* fx;
|
||||
ITEM_INFO* item;
|
||||
SPARKS* sptr;
|
||||
int lp;
|
||||
|
||||
sptr = &Sparks[0];
|
||||
for (int lp = 0; lp < MAX_SPARKS; lp++, sptr++)
|
||||
for (lp = 0; lp < MAX_SPARKS; lp++, sptr++)
|
||||
{
|
||||
if (sptr->on && (sptr->flags & type) && sptr->fxObj == num)
|
||||
{
|
||||
if (type == SP_FX)
|
||||
switch (type)
|
||||
{
|
||||
case SP_FX:
|
||||
if (sptr->flags & SP_USEFXOBJPOS)
|
||||
{
|
||||
sptr->on = FALSE;
|
||||
|
@ -88,9 +86,8 @@ void DetatchSpark(int num, int type)// (F) (D)
|
|||
sptr->z += fx->pos.zPos;
|
||||
sptr->flags &= ~SP_FX;
|
||||
}
|
||||
}
|
||||
else if (type == SP_ITEM)
|
||||
{
|
||||
break;
|
||||
case SP_ITEM:
|
||||
if (sptr->flags & SP_USEFXOBJPOS)
|
||||
{
|
||||
sptr->on = FALSE;
|
||||
|
@ -103,6 +100,7 @@ void DetatchSpark(int num, int type)// (F) (D)
|
|||
sptr->z += item->pos.zPos;
|
||||
sptr->flags &= ~SP_ITEM;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -405,7 +403,7 @@ void TriggerRicochetSpark(GAME_VECTOR* pos, short angle, int num, int unk)
|
|||
spark->fadeToBlack = 4;
|
||||
spark->life = 9;
|
||||
spark->sLife = 9;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->x = pos->x;
|
||||
spark->y = pos->y;
|
||||
spark->z = pos->z;
|
||||
|
@ -415,7 +413,7 @@ void TriggerRicochetSpark(GAME_VECTOR* pos, short angle, int num, int unk)
|
|||
spark->zVel = rcossin_tbl[2 * ang + 1] >> 2;
|
||||
spark->gravity = (random >> 7) & 0x1F;
|
||||
spark->friction = 34;
|
||||
spark->flags = 0;
|
||||
spark->flags = SP_NONE;
|
||||
spark->maxYvel = 0;
|
||||
}
|
||||
|
||||
|
@ -433,7 +431,7 @@ void TriggerRicochetSpark(GAME_VECTOR* pos, short angle, int num, int unk)
|
|||
spark->fadeToBlack = 0;
|
||||
spark->life = 4;
|
||||
spark->sLife = 4;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->x = pos->x;
|
||||
spark->y = pos->y;
|
||||
spark->z = pos->z;
|
||||
|
@ -491,7 +489,7 @@ void TriggerRicochetSpark(GAME_VECTOR* pos, short angle, int num, int unk)
|
|||
spark->xVel = 0;
|
||||
spark->zVel = 0;
|
||||
}
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->friction = 0;
|
||||
spark->flags = 26;
|
||||
spark->rotAng = random >> 3;
|
||||
|
@ -529,13 +527,13 @@ void TriggerCyborgSpark(int x, int y, int z, short xv, short yv, short zv)
|
|||
spark->dB = -64 - ((random & 0x7F) + 64);
|
||||
spark->life = 10;
|
||||
spark->sLife = 10;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->friction = 34;
|
||||
spark->scalar = 1;
|
||||
spark->x = (random & 7) + x - 3;
|
||||
spark->y = ((random >> 3) & 7) + y - 3;
|
||||
spark->z = ((random >> 6) & 7) + z - 3;
|
||||
spark->flags = 2;
|
||||
spark->flags = SP_SCALE;
|
||||
spark->xVel = (random >> 2) + xv - 128;
|
||||
spark->yVel = (random >> 4) + yv - 128;
|
||||
spark->zVel = (random >> 6) + zv - 128;
|
||||
|
@ -572,7 +570,7 @@ void TriggerExplosionSparks(int x, int y, int z, int extraTrig, int dynamic, int
|
|||
spark->colFadeSpeed = 7;
|
||||
spark->dG = (GetRandomControl() & 0x1F) + 64;
|
||||
spark->fadeToBlack = 8;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 7) + 16;
|
||||
spark->roomNumber = roomNumber;
|
||||
}
|
||||
|
@ -585,7 +583,7 @@ void TriggerExplosionSparks(int x, int y, int z, int extraTrig, int dynamic, int
|
|||
spark->colFadeSpeed = 8;
|
||||
spark->dG = (GetRandomControl() & 0x3F) + -128;
|
||||
spark->fadeToBlack = 16;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 7) + 24;
|
||||
}
|
||||
spark->extras = extraTrig | 8 * (TES_extra_tab[extraTrig] + (GetRandomControl() & 7) + 28);
|
||||
|
@ -999,7 +997,7 @@ void TriggerSuperJetFlame(ITEM_INFO* item, int yvel, int deadly)//32EAC, 333AC (
|
|||
sptr->dB = 32;
|
||||
sptr->colFadeSpeed = 8;
|
||||
sptr->fadeToBlack = 8;
|
||||
sptr->transType = 2;
|
||||
sptr->transType = COLADD;
|
||||
sptr->life = sptr->sLife = (size >> 9) + (GetRandomControl() & 7) + 16;
|
||||
sptr->x = (GetRandomControl() & 0x1F) + item->pos.xPos - 16;
|
||||
sptr->y = (GetRandomControl() & 0x1F) + item->pos.yPos - 16;
|
||||
|
@ -1053,7 +1051,7 @@ void SetupSplash(const SPLASH_SETUP* const setup)
|
|||
constexpr size_t NUM_SPLASHES = 4;
|
||||
int numSplashesSetup = 0;
|
||||
float splashVelocity;
|
||||
for (int i = 0; i < MAX_SPLASH; i++)
|
||||
for (int i = 0; i < MAX_SPLASHES; i++)
|
||||
{
|
||||
SPLASH_STRUCT& splash = Splashes[i];
|
||||
if (!splash.isActive)
|
||||
|
@ -1129,7 +1127,7 @@ void SetupSplash(const SPLASH_SETUP* const setup)
|
|||
|
||||
void UpdateSplashes()
|
||||
{
|
||||
for (int i = 0; i < MAX_SPLASH; i++)
|
||||
for (int i = 0; i < MAX_SPLASHES; i++)
|
||||
{
|
||||
SPLASH_STRUCT& splash = Splashes[i];
|
||||
if (splash.isActive) {
|
||||
|
@ -1269,7 +1267,7 @@ void TriggerWaterfallMist(int x, int y, int z, int angle)
|
|||
spark->dG = 64;
|
||||
spark->dB = 64;
|
||||
spark->colFadeSpeed = 1;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 3) + 6;
|
||||
spark->fadeToBlack = spark->life - 4;
|
||||
dl = ((dh + (GlobalCounter << 6)) % 1536) + (GetRandomControl() & 0x3F) - 32;
|
||||
|
@ -1303,7 +1301,7 @@ void TriggerWaterfallMist(int x, int y, int z, int angle)
|
|||
spark->dG = 96;
|
||||
spark->dB = 96;
|
||||
spark->colFadeSpeed = 1;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 3) + 6;
|
||||
spark->fadeToBlack = spark->life - 1;
|
||||
dl = GetRandomControl() % 1408 + 64;
|
||||
|
@ -1341,7 +1339,7 @@ void TriggerDartSmoke(int x, int y, int z, int xv, int zv, int hit)
|
|||
spark->dB = 32;
|
||||
spark->colFadeSpeed = 8;
|
||||
spark->fadeToBlack = 4;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 3) + 32;
|
||||
spark->x = (GetRandomControl() & 0x1F) + x - 16;
|
||||
spark->y = (GetRandomControl() & 0x1F) + y - 16;
|
||||
|
@ -1503,7 +1501,7 @@ void TriggerRocketFlame(int x, int y, int z, int xv, int yv, int zv, int itemNum
|
|||
sptr->colFadeSpeed = 12 + (GetRandomControl() & 3);
|
||||
sptr->fadeToBlack = 12;
|
||||
sptr->sLife = sptr->life = (GetRandomControl() & 3) + 28;
|
||||
sptr->transType = 2;
|
||||
sptr->transType = COLADD;
|
||||
sptr->extras = 0;
|
||||
sptr->dynamic = -1;
|
||||
|
||||
|
@ -1559,7 +1557,7 @@ void TriggerRocketSmoke(int x, int y, int z, int bodyPart)
|
|||
sptr->colFadeSpeed = 4 + (GetRandomControl() & 3);
|
||||
sptr->fadeToBlack = 12;
|
||||
sptr->sLife = sptr->life = (GetRandomControl() & 3) + 20;
|
||||
sptr->transType = 2;
|
||||
sptr->transType = COLADD;
|
||||
sptr->extras = 0;
|
||||
sptr->dynamic = -1;
|
||||
|
||||
|
@ -1612,7 +1610,7 @@ void GrenadeExplosionEffects(int x, int y, int z, short roomNumber)
|
|||
spark->dShade = -128;
|
||||
spark->colFadeSpeed = 4;
|
||||
spark->fadeToBlack = 16;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 0xF) + 64;
|
||||
spark->x = (GetRandomControl() & 0x1F) + x - 16;
|
||||
spark->y = (GetRandomControl() & 0x1F) + y - 16;
|
||||
|
@ -1718,7 +1716,7 @@ void GrenadeLauncherSpecialEffect1(int x, int y, int z, int flag1, int flag2)
|
|||
spark->life = spark->sLife = (GetRandomControl() & 3) + 28;
|
||||
}
|
||||
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
|
||||
if (flag1 != -1)
|
||||
{
|
||||
|
@ -1909,7 +1907,7 @@ void TriggerMetalSparks(int x, int y, int z, int xv, int yv, int zv, int additio
|
|||
spark->colFadeSpeed = 3;
|
||||
spark->fadeToBlack = 5;
|
||||
spark->y = ((r >> 3) & 7) + y - 3;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->friction = 34;
|
||||
spark->scalar = 1;
|
||||
spark->z = ((r >> 6) & 7) + z - 3;
|
||||
|
@ -1931,7 +1929,7 @@ void TriggerMetalSparks(int x, int y, int z, int xv, int yv, int zv, int additio
|
|||
spark->sR = spark->dR >> 1;
|
||||
spark->sG = spark->dG >> 1;
|
||||
spark->fadeToBlack = 4;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->colFadeSpeed = (r & 3) + 8;
|
||||
spark->sB = spark->dB >> 1;
|
||||
spark->dR = 32;
|
||||
|
|
|
@ -1,14 +1,63 @@
|
|||
#pragma once
|
||||
#include <d3d11.h>
|
||||
#include "global.h"
|
||||
#include "phd_global.h"
|
||||
#include "items.h"
|
||||
|
||||
#define MAX_NODE 23
|
||||
#define RIPPLE_FLAG_BLOOD 0x80
|
||||
#define RIPPLE_FLAG_RAND_POS 0x40
|
||||
#define RIPPLE_FLAG_RAND_ROT 0x20
|
||||
#define RIPPLE_FLAG_SHORT_LIFE 0x01
|
||||
enum RIPPLE_TYPE
|
||||
{
|
||||
RIPPLE_FLAG_NONE = 0x0,
|
||||
RIPPLE_FLAG_SHORT_LIFE = 0x1,
|
||||
RIPPLE_FLAG_RAND_ROT = 0x20,
|
||||
RIPPLE_FLAG_RAND_POS = 0x40,
|
||||
RIPPLE_FLAG_BLOOD = 0x80
|
||||
};
|
||||
|
||||
struct RIPPLE_STRUCT
|
||||
enum SpriteEnumFlag
|
||||
{
|
||||
SP_NONE = 0x0000,
|
||||
SP_FLAT = 0x0001,
|
||||
SP_SCALE = 0x0002,
|
||||
SP_BLOOD = 0x0004,
|
||||
SP_DEF = 0x0008,
|
||||
SP_ROTATE = 0x0010,
|
||||
SP_EXPLOSION = 0x0020,
|
||||
SP_FX = 0x0040,
|
||||
SP_ITEM = 0x0080,
|
||||
SP_WIND = 0x0100,
|
||||
SP_EXPDEF = 0x0200,
|
||||
SP_USEFXOBJPOS = 0x0400,
|
||||
SP_UNDERWEXP = 0x0800,
|
||||
SP_NODEATTACH = 0x1000,
|
||||
SP_PLASMAEXP = 0x2000
|
||||
};
|
||||
|
||||
enum TransTypeEnum
|
||||
{
|
||||
NOTRANS,
|
||||
SEMITRANS,
|
||||
COLADD,
|
||||
COLSUB,
|
||||
WEIRD
|
||||
};
|
||||
|
||||
struct NODEOFFSET_INFO
|
||||
{
|
||||
short x;
|
||||
short y;
|
||||
short z;
|
||||
char meshNum;
|
||||
unsigned char gotIt;
|
||||
};
|
||||
|
||||
typedef struct SPLASH_SETUP
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
float splashPower;
|
||||
float innerRadius;
|
||||
};
|
||||
|
||||
typedef struct RIPPLE_STRUCT
|
||||
{
|
||||
Vector4 currentColor;
|
||||
Vector4 initialColor;
|
||||
|
@ -24,27 +73,120 @@ struct RIPPLE_STRUCT
|
|||
bool isBillboard; //used for Blood
|
||||
};
|
||||
|
||||
struct SPLASH_SETUP
|
||||
typedef struct SPARKS
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
short xVel;
|
||||
short yVel;
|
||||
short zVel;
|
||||
short gravity;
|
||||
short rotAng;
|
||||
unsigned short flags; // SP_enum
|
||||
unsigned char sSize;
|
||||
unsigned char dSize;
|
||||
unsigned char size;
|
||||
unsigned char friction;
|
||||
unsigned char scalar;
|
||||
unsigned char def;
|
||||
signed char rotAdd;
|
||||
signed char maxYvel;
|
||||
bool on;
|
||||
byte sR;
|
||||
byte sG;
|
||||
byte sB;
|
||||
byte dR;
|
||||
byte dG;
|
||||
byte dB;
|
||||
byte r;
|
||||
byte g;
|
||||
byte b;
|
||||
unsigned char colFadeSpeed;
|
||||
unsigned char fadeToBlack;
|
||||
unsigned char sLife;
|
||||
unsigned char life;
|
||||
TransTypeEnum transType;
|
||||
unsigned char extras;
|
||||
signed char dynamic;
|
||||
unsigned char fxObj;
|
||||
unsigned char roomNumber;
|
||||
unsigned char nodeNumber;
|
||||
};
|
||||
|
||||
typedef struct SPLASH_STRUCT
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
float splashPower;
|
||||
float innerRadius;
|
||||
float innerRad;
|
||||
float innerRadVel;
|
||||
float heightVel;
|
||||
float heightSpeed;
|
||||
float height;
|
||||
float outerRad;
|
||||
float outerRadVel;
|
||||
float animationSpeed;
|
||||
float animationPhase;
|
||||
short spriteSequenceStart;
|
||||
short spriteSequenceEnd;
|
||||
unsigned short life;
|
||||
bool isRipple;
|
||||
bool isActive;
|
||||
};
|
||||
extern SPLASH_STRUCT Splashes[MAX_SPLASH];
|
||||
extern RIPPLE_STRUCT Ripples[32];
|
||||
|
||||
typedef struct DYNAMIC
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
byte on;
|
||||
byte r;
|
||||
byte g;
|
||||
byte b;
|
||||
short falloff;
|
||||
byte used;
|
||||
byte pad1[1];
|
||||
int FalloffScale;
|
||||
};
|
||||
|
||||
typedef struct SP_DYNAMIC
|
||||
{
|
||||
byte On;
|
||||
byte Falloff;
|
||||
byte R;
|
||||
byte G;
|
||||
byte B;
|
||||
byte Flags;
|
||||
byte Pad[2];
|
||||
};
|
||||
|
||||
constexpr auto SD_EXPLOSION = 1;
|
||||
constexpr auto SD_UWEXPLOSION = 2;
|
||||
|
||||
#define MAX_NODE 23
|
||||
#define MAX_DYNAMICS 64
|
||||
#define MAX_SPARKS 1024
|
||||
#define MAX_RIPPLES 32
|
||||
#define MAX_SPLASHES 8
|
||||
#define MAX_SPARKS_DYNAMICS 8
|
||||
|
||||
extern int NextSpark;
|
||||
extern int DeadlyBounds[6];
|
||||
extern SPARKS Sparks[1024];
|
||||
extern SP_DYNAMIC SparkDynamics[8];
|
||||
extern SPLASH_SETUP SplashSetup;
|
||||
extern SPLASH_STRUCT Splashes[MAX_SPLASHES];
|
||||
extern RIPPLE_STRUCT Ripples[MAX_RIPPLES];
|
||||
extern DYNAMIC Dynamics[MAX_DYNAMICS];
|
||||
extern SPARKS Sparks[MAX_SPARKS];
|
||||
extern SP_DYNAMIC SparkDynamics[MAX_SPARKS_DYNAMICS];
|
||||
extern int SmokeWeapon;
|
||||
extern int SmokeCountL;
|
||||
extern int SmokeCountR;
|
||||
extern byte SmokeCountL;
|
||||
extern byte SmokeCountR;
|
||||
extern int SplashCount;
|
||||
extern PHD_VECTOR NodeVectors[MAX_NODE];
|
||||
extern NODEOFFSET_INFO NodeOffsets[MAX_NODE];
|
||||
|
||||
void DetatchSpark(int num, int type);
|
||||
void DetatchSpark(int num, SpriteEnumFlag type);
|
||||
int GetFreeSpark();
|
||||
void UpdateSparks();
|
||||
void TriggerRicochetSpark(GAME_VECTOR* pos, short angle, int num, int unk);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "framework.h"
|
||||
#include "flmtorch.h"
|
||||
#include "global.h"
|
||||
|
||||
#include "effect2.h"
|
||||
#include "laraflar.h"
|
||||
#include "lara.h"
|
||||
|
@ -32,7 +32,7 @@ void TriggerTorchFlame(char fxObj, char node)
|
|||
spark->dG = (GetRandomControl() & 0x3F) + -128;
|
||||
spark->fadeToBlack = 8;
|
||||
spark->colFadeSpeed = (GetRandomControl() & 3) + 12;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 7) + 24;
|
||||
spark->y = 0;
|
||||
spark->x = (GetRandomControl() & 0xF) - 8;
|
||||
|
@ -80,7 +80,7 @@ void DoFlameTorch() // (F) (D)
|
|||
&& LaraItem->currentAnimState != STATE_LARA_JUMP_RIGHT
|
||||
|| Lara.waterStatus == LW_UNDERWATER)
|
||||
{
|
||||
Lara.leftArm.lock = 1;
|
||||
Lara.leftArm.lock = true;
|
||||
Lara.leftArm.frameNumber = 1;
|
||||
Lara.leftArm.animNumber = Objects[ID_LARA_TORCH_ANIM].animIndex + 1;
|
||||
if (Lara.waterStatus == LW_UNDERWATER)
|
||||
|
@ -92,7 +92,7 @@ void DoFlameTorch() // (F) (D)
|
|||
case 1:
|
||||
if (Lara.leftArm.frameNumber < 12 && LaraItem->gravityStatus)
|
||||
{
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.leftArm.lock = false;
|
||||
Lara.leftArm.frameNumber = 0;
|
||||
Lara.leftArm.animNumber = Objects[ID_LARA_TORCH_ANIM].animIndex;
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ void DoFlameTorch() // (F) (D)
|
|||
{
|
||||
Lara.litTorch = false;
|
||||
Lara.flareControlLeft = false;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.leftArm.lock = false;
|
||||
Lara.gunType = Lara.lastGunType;
|
||||
Lara.requestGunType = WEAPON_NONE;
|
||||
Lara.gunStatus = LG_NO_ARMS;
|
||||
|
@ -123,7 +123,7 @@ void DoFlameTorch() // (F) (D)
|
|||
{
|
||||
Lara.litTorch = false;
|
||||
Lara.flareControlLeft = false;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.leftArm.lock = false;
|
||||
Lara.lastGunType = WEAPON_NONE;
|
||||
Lara.gunType = WEAPON_NONE;
|
||||
Lara.gunStatus = LG_NO_ARMS;
|
||||
|
@ -137,7 +137,7 @@ void DoFlameTorch() // (F) (D)
|
|||
case 3:
|
||||
if (LaraItem->currentAnimState != STATE_LARA_MISC_CONTROL)
|
||||
{
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.leftArm.lock = false;
|
||||
Lara.leftArm.frameNumber = 0;
|
||||
Lara.flareControlLeft = true;
|
||||
Lara.litTorch = LaraItem->itemFlags[3] & 1;
|
||||
|
@ -184,7 +184,7 @@ void GetFlameTorch() // (F) (D)
|
|||
Lara.flareControlLeft = true;
|
||||
Lara.leftArm.animNumber = Objects[ID_LARA_TORCH_ANIM].animIndex;
|
||||
Lara.gunStatus = LG_READY;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.leftArm.lock = false;
|
||||
Lara.leftArm.frameNumber = 0;
|
||||
Lara.leftArm.frameBase = Anims[Lara.leftArm.animNumber].framePtr;
|
||||
LARA_MESHES(ID_LARA_TORCH_ANIM, LM_LHAND);
|
||||
|
@ -237,7 +237,7 @@ void TorchControl(short itemNumber) // (F) (D)
|
|||
}
|
||||
else
|
||||
{
|
||||
STATIC_INFO* sobj = &StaticObjects[CollidedMeshes[0]->staticNumber];
|
||||
StaticInfo* sobj = &StaticObjects[CollidedMeshes[0]->staticNumber];
|
||||
PHD_3DPOS pos;
|
||||
pos.xPos = CollidedMeshes[0]->x;
|
||||
pos.yPos = CollidedMeshes[0]->y;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "collide.h"
|
||||
|
||||
void TriggerTorchFlame(char fxObj, char node);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "types.h"
|
||||
#include "items.h"
|
||||
#include "trmath.h"
|
||||
|
||||
constexpr size_t MAX_FOOTPRINTS = 20;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include "draw.h"
|
||||
#include "savegame.h"
|
||||
#include "input.h"
|
||||
#include "global.h"
|
||||
|
||||
#include "level.h"
|
||||
|
||||
SavegameInfo g_SavegameInfos[MAX_SAVEGAMES];
|
||||
|
|
|
@ -15,6 +15,24 @@ typedef struct SavegameInfo
|
|||
|
||||
#define MAX_SAVEGAMES 16
|
||||
|
||||
struct GAMEFLOW
|
||||
{
|
||||
unsigned int CheatEnabled : 1;
|
||||
unsigned int LoadSaveEnabled : 1;
|
||||
unsigned int TitleEnabled : 1;
|
||||
unsigned int PlayAnyLevel : 1;
|
||||
unsigned int Language : 3;
|
||||
unsigned int DemoDisc : 1;
|
||||
unsigned int Unused : 24;
|
||||
unsigned int InputTimeout;
|
||||
unsigned char SecurityTag;
|
||||
unsigned char nLevels;
|
||||
unsigned char nFileNames;
|
||||
unsigned char Pad;
|
||||
unsigned short FileNameLen;
|
||||
unsigned short ScriptLen;
|
||||
};
|
||||
|
||||
extern SavegameInfo g_SavegameInfos[MAX_SAVEGAMES];
|
||||
extern vector<string> g_NewStrings;
|
||||
extern SaveGameHeader g_NewSavegameInfos[MAX_SAVEGAMES];
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "framework.h"
|
||||
#include "hair.h"
|
||||
#include "global.h"
|
||||
|
||||
#include "draw.h"
|
||||
#include "laramisc.h"
|
||||
#include "lara.h"
|
||||
|
@ -10,8 +10,8 @@
|
|||
#include "sphere.h"
|
||||
#include "level.h"
|
||||
|
||||
int FirstHair[2];
|
||||
HAIR_STRUCT Hairs[2][7];
|
||||
int FirstHair[HAIR_MAX];
|
||||
HAIR_STRUCT Hairs[HAIR_MAX][HAIR_SEGMENTS];
|
||||
int WindAngle;
|
||||
int DWindAngle;
|
||||
int Wind;
|
||||
|
@ -20,11 +20,11 @@ extern GameFlow* g_GameFlow;
|
|||
|
||||
void InitialiseHair()
|
||||
{
|
||||
for (int h = 0; h < 2; h++)
|
||||
for (int h = 0; h < HAIR_MAX; h++)
|
||||
{
|
||||
FirstHair[h] = 1;
|
||||
|
||||
int* bone = Bones + Objects[ID_LARA_HAIR].boneIndex;
|
||||
int* bone = &Bones[Objects[ID_LARA_HAIR].boneIndex];
|
||||
|
||||
Hairs[h][0].pos.yRot = 0;
|
||||
Hairs[h][0].pos.xRot = -0x4000;
|
||||
|
@ -45,7 +45,7 @@ void InitialiseHair()
|
|||
|
||||
void HairControl(int cutscene, int ponytail, short* framePtr)
|
||||
{
|
||||
SPHERE sphere[5];
|
||||
SPHERE sphere[HAIR_SPHERE];
|
||||
ObjectInfo* object = &Objects[ID_LARA];
|
||||
short* frame;
|
||||
int spaz;
|
||||
|
@ -106,7 +106,7 @@ void HairControl(int cutscene, int ponytail, short* framePtr)
|
|||
sphere[0].x = pos.x;
|
||||
sphere[0].y = pos.y;
|
||||
sphere[0].z = pos.z;
|
||||
sphere[0].r = (int) *(objptr + 3);
|
||||
sphere[0].r = (int) * (objptr + 3);
|
||||
|
||||
objptr = Lara.meshPtrs[LM_TORSO];
|
||||
pos = { objptr[0], objptr[1], objptr[2] };
|
||||
|
@ -169,7 +169,7 @@ void HairControl(int cutscene, int ponytail, short* framePtr)
|
|||
pos.y = world.Translation().y;
|
||||
pos.z = world.Translation().z;
|
||||
|
||||
int* bone = Bones + Objects[ID_LARA_HAIR].boneIndex;
|
||||
int* bone = &Bones[Objects[ID_LARA_HAIR].boneIndex];
|
||||
|
||||
if (FirstHair[ponytail])
|
||||
{
|
||||
|
@ -203,7 +203,9 @@ void HairControl(int cutscene, int ponytail, short* framePtr)
|
|||
int wh;
|
||||
|
||||
if (cutscene)
|
||||
{
|
||||
wh = NO_HEIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
int x = LaraItem->pos.xPos + (frame[0] + frame[1]) / 2;
|
||||
|
@ -247,7 +249,9 @@ void HairControl(int cutscene, int ponytail, short* framePtr)
|
|||
height = GetFloorHeight(floor, Hairs[ponytail][i].pos.xPos, Hairs[ponytail][i].pos.yPos, Hairs[ponytail][i].pos.zPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
height = 32767;
|
||||
}
|
||||
|
||||
Hairs[ponytail][i].pos.xPos += Hairs[ponytail][i].hvel.x * 3 / 4;
|
||||
Hairs[ponytail][i].pos.yPos += Hairs[ponytail][i].hvel.y * 3 / 4;
|
||||
|
@ -264,7 +268,9 @@ void HairControl(int cutscene, int ponytail, short* framePtr)
|
|||
case LW_ABOVE_WATER:
|
||||
Hairs[ponytail][i].pos.yPos += 10;
|
||||
if (wh != NO_HEIGHT && Hairs[ponytail][i].pos.yPos > wh)
|
||||
{
|
||||
Hairs[ponytail][i].pos.yPos = wh;
|
||||
}
|
||||
else if (Hairs[ponytail][i].pos.yPos > height)
|
||||
{
|
||||
Hairs[ponytail][i].pos.xPos = Hairs[ponytail][0].hvel.x;
|
||||
|
@ -282,7 +288,7 @@ void HairControl(int cutscene, int ponytail, short* framePtr)
|
|||
break;
|
||||
}
|
||||
|
||||
for (int j = 0; j < 5; j++)
|
||||
for (int j = 0; j < HAIR_SPHERE; j++)
|
||||
{
|
||||
int x = Hairs[ponytail][i].pos.xPos - sphere[j].x;
|
||||
int y = Hairs[ponytail][i].pos.yPos - sphere[j].y;
|
||||
|
|
|
@ -1,7 +1,18 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
extern HAIR_STRUCT Hairs[2][7];
|
||||
#include "phd_global.h"
|
||||
|
||||
constexpr auto HAIR_MAX = 2; // HAIR_NORMAL = 0, HAIR_YOUNG = 1
|
||||
constexpr auto HAIR_SEGMENTS = 7; // classic = 7, young = 14
|
||||
constexpr auto HAIR_SPHERE = 5; // current hair max collision
|
||||
|
||||
struct HAIR_STRUCT
|
||||
{
|
||||
PHD_3DPOS pos;
|
||||
PHD_VECTOR hvel;
|
||||
PHD_VECTOR unknown;
|
||||
};
|
||||
extern HAIR_STRUCT Hairs[HAIR_MAX][HAIR_SEGMENTS];
|
||||
|
||||
void InitialiseHair();
|
||||
void HairControl(int cutscene, int ponytail, short* framePtr);
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#define MAX_COLLECTED_PICKUPS 32
|
||||
|
||||
typedef struct DISPLAY_PICKUP
|
||||
{
|
||||
short life;
|
||||
short objectNumber;
|
||||
};
|
||||
|
||||
void DrawHealthBarOverlay(int value);
|
||||
void DrawHealthBar(float value);
|
||||
void UpdateHealtBar(int flash);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
#include "Lara.h"
|
||||
#include "camera.h"
|
||||
#include "spotcam.h"
|
||||
#include "global.h"
|
||||
|
||||
#include "input.h"
|
||||
#include "configuration.h"
|
||||
#include "lara1gun.h"
|
||||
|
|
|
@ -161,6 +161,19 @@ enum INVENTORY_OBJECTS {
|
|||
INVENTORY_TABLE_SIZE
|
||||
};
|
||||
|
||||
typedef struct INVOBJ
|
||||
{
|
||||
short objectNumber;
|
||||
short yOff;
|
||||
short scale1;
|
||||
short yRot;
|
||||
short xRot;
|
||||
short zRot;
|
||||
short flags;
|
||||
short objectName;
|
||||
int meshBits;
|
||||
};
|
||||
|
||||
// Focus state
|
||||
#define INV_FOCUS_STATE_NONE 0
|
||||
#define INV_FOCUS_STATE_POPUP 1
|
||||
|
@ -243,13 +256,15 @@ enum INVENTORY_OBJECTS {
|
|||
|
||||
#define INV_NUM_COMBINATIONS 22
|
||||
|
||||
struct InventoryObject {
|
||||
struct InventoryObject
|
||||
{
|
||||
int inventoryObject;
|
||||
int rotation;
|
||||
float scale;
|
||||
};
|
||||
|
||||
struct InventoryRing {
|
||||
struct InventoryRing
|
||||
{
|
||||
InventoryObject objects[NUM_INVENTORY_OBJECTS_PER_RING];
|
||||
int numObjects;
|
||||
int currentObject;
|
||||
|
@ -273,7 +288,8 @@ struct InventoryRing {
|
|||
int numActions = 3;
|
||||
};
|
||||
|
||||
struct InventoryObjectDefinition {
|
||||
struct InventoryObjectDefinition
|
||||
{
|
||||
short objectNumber;
|
||||
short objectName;
|
||||
int meshBits;
|
||||
|
@ -293,7 +309,8 @@ struct InventoryObjectDefinition {
|
|||
}
|
||||
};
|
||||
|
||||
struct InventoryObjectCombination {
|
||||
struct InventoryObjectCombination
|
||||
{
|
||||
short piece1;
|
||||
short piece2;
|
||||
short combinedObject;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "framework.h"
|
||||
#include "global.h"
|
||||
#include "items.h"
|
||||
#include "constants.h"
|
||||
#include "effect2.h"
|
||||
#include "setup.h"
|
||||
#include "level.h"
|
||||
|
@ -30,7 +30,7 @@ void KillItem(short itemNum)
|
|||
{
|
||||
ITEM_INFO* item = &Items[itemNum];
|
||||
|
||||
DetatchSpark(itemNum, 128);
|
||||
DetatchSpark(itemNum, SP_ITEM);
|
||||
|
||||
item->active = false;
|
||||
item->reallyActive = false;
|
||||
|
@ -52,7 +52,7 @@ void KillItem(short itemNum)
|
|||
}
|
||||
}
|
||||
|
||||
if (item->roomNumber != 255)
|
||||
if (item->roomNumber != NO_ROOM)
|
||||
{
|
||||
if (Rooms[item->roomNumber].itemNumber == itemNum)
|
||||
{
|
||||
|
@ -99,7 +99,7 @@ void RemoveAllItemsInRoom(short roomNumber, short objectNumber)
|
|||
if (item->objectNumber == objectNumber)
|
||||
{
|
||||
RemoveActiveItem(currentItemNum);
|
||||
item->status = ITEM_INACTIVE;
|
||||
item->status = ITEM_NOT_ACTIVE;
|
||||
item->flags &= 0xC1;
|
||||
}
|
||||
|
||||
|
@ -115,7 +115,7 @@ void AddActiveItem(short itemNumber)
|
|||
|
||||
if (Objects[item->objectNumber].control == NULL)
|
||||
{
|
||||
item->status = ITEM_INACTIVE;
|
||||
item->status = ITEM_NOT_ACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -355,7 +355,7 @@ void InitialiseItem(short itemNum)
|
|||
item->itemFlags[0] = 0;
|
||||
|
||||
item->active = false;
|
||||
item->status = ITEM_INACTIVE;
|
||||
item->status = ITEM_NOT_ACTIVE;
|
||||
item->gravityStatus = false;
|
||||
item->hitStatus = false;
|
||||
item->collidable = true;
|
||||
|
@ -467,7 +467,7 @@ short SpawnItem(ITEM_INFO* item, short objectNumber)
|
|||
|
||||
InitialiseItem(itemNumber);
|
||||
|
||||
spawn->status = ITEM_INACTIVE;
|
||||
spawn->status = ITEM_NOT_ACTIVE;
|
||||
spawn->shade = 0x4210;
|
||||
}
|
||||
|
||||
|
@ -495,11 +495,11 @@ int GlobalItemReplace(short search, short replace)
|
|||
|
||||
ITEM_INFO* find_a_fucking_item(short objectNum)
|
||||
{
|
||||
int itemNumber = FindItem(objectNum);
|
||||
int itemNumber = FindItemNumber(objectNum);
|
||||
return (itemNumber != NO_ITEM ? &Items[itemNumber] : NULL);
|
||||
}
|
||||
|
||||
int FindItem(short objectNum)
|
||||
int FindItemNumber(short objectNum)
|
||||
{
|
||||
for (int i = 0; i < LevelItems; i++)
|
||||
{
|
||||
|
@ -510,3 +510,21 @@ int FindItem(short objectNum)
|
|||
|
||||
return NO_ITEM;
|
||||
}
|
||||
|
||||
ITEM_INFO* FindItem(short objectNumber)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
printf("Called FindItem()\n");
|
||||
#endif
|
||||
|
||||
if (LevelItems > 0)
|
||||
{
|
||||
for (int i = 0; i < LevelItems; i++)
|
||||
{
|
||||
if (Items[i].objectNumber == objectNumber)
|
||||
return &Items[i];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
|
@ -1,7 +1,89 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
#include "control.h"
|
||||
#include "phd_global.h"
|
||||
|
||||
typedef enum AIObjectType
|
||||
{
|
||||
NO_AI = 0x0000,
|
||||
GUARD = 0x0001,
|
||||
AMBUSH = 0x0002,
|
||||
PATROL1 = 0x0004,
|
||||
MODIFY = 0x0008,
|
||||
FOLLOW = 0x0010,
|
||||
PATROL2 = 0x0020,
|
||||
ALL_AIOBJ = (GUARD | AMBUSH | PATROL1 | MODIFY | FOLLOW | PATROL2)
|
||||
};
|
||||
|
||||
typedef enum ItemStatus
|
||||
{
|
||||
ITEM_ACTIVE,
|
||||
ITEM_NOT_ACTIVE,
|
||||
ITEM_DESACTIVATED,
|
||||
ITEM_INVISIBLE
|
||||
};
|
||||
|
||||
typedef enum ItemFlags
|
||||
{
|
||||
IFLAG_CLEAR_BODY = (1 << 7), // 0x0080
|
||||
IFLAG_INVISIBLE = (1 << 8), // 0x0100
|
||||
IFLAG_REVERSE = (1 << 14), // 0x4000
|
||||
IFLAG_KILLED = (1 << 15), // 0x8000
|
||||
IFLAG_ACTIVATION_MASK = 0x3E00 // bits 9-13
|
||||
};
|
||||
|
||||
typedef struct ITEM_INFO
|
||||
{
|
||||
int floor;
|
||||
DWORD touchBits;
|
||||
DWORD meshBits;
|
||||
short objectNumber;
|
||||
short currentAnimState;
|
||||
short goalAnimState;
|
||||
short requiredAnimState;
|
||||
short animNumber;
|
||||
short frameNumber;
|
||||
short roomNumber;
|
||||
short nextItem;
|
||||
short nextActive;
|
||||
short speed;
|
||||
short fallspeed;
|
||||
short hitPoints;
|
||||
unsigned short boxNumber;
|
||||
short timer;
|
||||
unsigned short flags; // ItemFlags enum
|
||||
short shade;
|
||||
short triggerFlags;
|
||||
short carriedItem;
|
||||
short afterDeath;
|
||||
short firedWeapon;
|
||||
short itemFlags[4];
|
||||
void* data;
|
||||
PHD_3DPOS pos;
|
||||
byte legacyLightData[5528];
|
||||
bool active;
|
||||
short status; // ItemStatus enum
|
||||
bool gravityStatus;
|
||||
bool hitStatus;
|
||||
bool collidable;
|
||||
bool lookedAt;
|
||||
bool dynamicLight;
|
||||
bool poisoned;
|
||||
byte aiBits; // AIObjectType enum
|
||||
bool reallyActive;
|
||||
bool inDrawRoom;
|
||||
int swapMeshFlags;
|
||||
short drawRoom;
|
||||
short TOSSPAD;
|
||||
};
|
||||
|
||||
// used by fx->shade !
|
||||
#define RGB555(r, g, b) ((r << 7) & 0x7C00 | (g << 2) & 0x3E0 | (b >> 3) & 0x1F)
|
||||
#define WHITE555 RGB555(255, 255, 255)
|
||||
#define GRAY555 RGB555(128, 128, 128)
|
||||
#define BLACK555 RGB555( 0, 0, 0)
|
||||
|
||||
constexpr auto NO_ITEM = -1;
|
||||
constexpr auto ALL_MESHBITS = -1;
|
||||
constexpr auto NOT_TARGETABLE = -16384;
|
||||
#define NUM_ITEMS 1024
|
||||
#define NUM_EFFECTS 1024
|
||||
|
||||
|
@ -20,4 +102,5 @@ void InitialiseItem(short itemNum);
|
|||
void InitialiseItemArray(int numitems);
|
||||
void KillItem(short itemNum);
|
||||
ITEM_INFO* find_a_fucking_item(short objectNum);
|
||||
int FindItem(short objectNum);
|
||||
int FindItemNumber(short objectNumber);
|
||||
ITEM_INFO* FindItem(short objectNumber);
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include "laraclmb.h"
|
||||
#include "rope.h"
|
||||
#include "health.h"
|
||||
#include "newobjects.h"
|
||||
#include "level.h"
|
||||
#include "input.h"
|
||||
#include "sound.h"
|
||||
|
@ -1797,13 +1796,13 @@ void lara_as_pulley(ITEM_INFO* item, COLL_INFO* coll)//1B288, 1B3BC (F)
|
|||
if (p->itemFlags[2])
|
||||
{
|
||||
p->itemFlags[2] = 0;
|
||||
p->status = ITEM_DEACTIVATED;
|
||||
p->status = ITEM_DESACTIVATED;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!p->itemFlags[1])
|
||||
p->status = ITEM_DEACTIVATED;
|
||||
p->status = ITEM_DESACTIVATED;
|
||||
|
||||
p->itemFlags[2] = 1;
|
||||
|
||||
|
|
|
@ -1,13 +1,758 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
#pragma once
|
||||
#include "trmath.h"
|
||||
#include "box.h"
|
||||
#include "collide.h"
|
||||
#include "objectslist.h"
|
||||
#include "Renderer11.h"
|
||||
|
||||
#define NUM_PUZZLES (ID_PUZZLE_ITEM16 - ID_PUZZLE_ITEM1 + 1)
|
||||
#define NUM_KEYS (ID_KEY_ITEM16 - ID_KEY_ITEM1 + 1)
|
||||
#define NUM_PICKUPS (ID_PICKUP_ITEM16 - ID_PICKUP_ITEM1 + 1)
|
||||
#define NUM_EXAMINES (ID_EXAMINE8 - ID_EXAMINE1 + 1)
|
||||
|
||||
#pragma region state_and_animation
|
||||
enum LARA_STATE
|
||||
{
|
||||
STATE_LARA_WALK_FORWARD = 0,
|
||||
STATE_LARA_RUN_FORWARD = 1,
|
||||
STATE_LARA_STOP = 2,
|
||||
STATE_LARA_JUMP_FORWARD = 3,
|
||||
STATE_LARA_POSE = 4,
|
||||
STATE_LARA_RUN_BACK = 5,
|
||||
STATE_LARA_TURN_RIGHT_SLOW = 6,
|
||||
STATE_LARA_TURN_LEFT_SLOW = 7,
|
||||
STATE_LARA_DEATH = 8,
|
||||
STATE_LARA_FREEFALL = 9,
|
||||
STATE_LARA_HANG = 10,
|
||||
STATE_LARA_REACH = 11,
|
||||
STATE_LARA_SPLAT = 12,
|
||||
STATE_LARA_UNDERWATER_STOP = 13,
|
||||
STATE_LARA_GRAB_TO_FALL = 14,
|
||||
STATE_LARA_JUMP_PREPARE = 15,
|
||||
STATE_LARA_WALK_BACK = 16,
|
||||
STATE_LARA_UNDERWATER_FORWARD = 17,
|
||||
STATE_LARA_UNDERWATER_INERTIA = 18,
|
||||
STATE_LARA_GRABBING = 19,
|
||||
STATE_LARA_TURN_FAST = 20,
|
||||
STATE_LARA_WALK_RIGHT = 21,
|
||||
STATE_LARA_WALK_LEFT = 22,
|
||||
STATE_LARA_ROLL_BACKWARD = 23,
|
||||
STATE_LARA_SLIDE_FORWARD = 24,
|
||||
STATE_LARA_JUMP_BACK = 25,
|
||||
STATE_LARA_JUMP_LEFT = 26,
|
||||
STATE_LARA_JUMP_RIGHT = 27,
|
||||
STATE_LARA_JUMP_UP = 28,
|
||||
STATE_LARA_FALL_BACKWARD = 29,
|
||||
STATE_LARA_SHIMMY_LEFT = 30,
|
||||
STATE_LARA_SHIMMY_RIGHT = 31,
|
||||
STATE_LARA_SLIDE_BACK = 32,
|
||||
STATE_LARA_ONWATER_STOP = 33,
|
||||
STATE_LARA_ONWATER_FORWARD = 34,
|
||||
STATE_LARA_UNDERWATER_DIVING = 35,
|
||||
STATE_LARA_PUSHABLE_PUSH = 36,
|
||||
STATE_LARA_PUSHABLE_PULL = 37,
|
||||
STATE_LARA_PUSHABLE_GRAB = 38,
|
||||
STATE_LARA_PICKUP = 39,
|
||||
STATE_LARA_SWITCH_DOWN = 40,
|
||||
STATE_LARA_SWITCH_UP = 41,
|
||||
STATE_LARA_INSERT_KEY = 42,
|
||||
STATE_LARA_INSERT_PUZZLE = 43,
|
||||
STATE_LARA_WATER_DEATH = 44,
|
||||
STATE_LARA_ROLL_FORWARD = 45,
|
||||
STATE_LARA_BOULDER_DEATH = 46,
|
||||
STATE_LARA_ONWATER_BACK = 47,
|
||||
STATE_LARA_ONWATER_LEFT = 48,
|
||||
STATE_LARA_ONWATER_RIGHT = 49,
|
||||
STATE_LARA_USE_MIDAS = 50,
|
||||
STATE_LARA_DIE_MIDAS = 51,
|
||||
STATE_LARA_SWANDIVE_BEGIN = 52,
|
||||
STATE_LARA_SWANDIVE_END = 53,
|
||||
STATE_LARA_HANDSTAND = 54,
|
||||
STATE_LARA_ONWATER_EXIT = 55,
|
||||
STATE_LARA_LADDER_IDLE = 56,
|
||||
STATE_LARA_LADDER_UP = 57,
|
||||
STATE_LARA_LADDER_LEFT = 58,
|
||||
STATE_LARA_LADDER_END = 59,
|
||||
STATE_LARA_LADDER_RIGHT = 60,
|
||||
STATE_LARA_LADDER_DOWN = 61,
|
||||
STATE_LARA_NULL_62 = 62,
|
||||
STATE_LARA_NULL_63 = 63,
|
||||
STATE_LARA_NULL_64 = 64,
|
||||
STATE_LARA_WADE_FORWARD = 65,
|
||||
STATE_LARA_UNDERWATER_TURNAROUND = 66,
|
||||
STATE_LARA_FLARE_PICKUP = 67,
|
||||
STATE_LARA_JUMP_ROLL = 68,
|
||||
STATE_LARA_NULL_69 = 69,
|
||||
STATE_LARA_ZIPLINE_RIDE = 70,
|
||||
STATE_LARA_CROUCH_IDLE = 71,
|
||||
STATE_LARA_CROUCH_ROLL = 72,
|
||||
STATE_LARA_SPRINT = 73,
|
||||
STATE_LARA_SPRINT_ROLL = 74,
|
||||
STATE_LARA_MONKEYSWING_IDLE = 75,
|
||||
STATE_LARA_MONKEYSWING_FORWARD = 76,
|
||||
STATE_LARA_MONKEYSWING_LEFT = 77,
|
||||
STATE_LARA_MONKEYSWING_RIGHT = 78,
|
||||
STATE_LARA_MONKEYSWING_TURNAROUND = 79,
|
||||
STATE_LARA_CRAWL_IDLE = 80,
|
||||
STATE_LARA_CRAWL_FORWARD = 81,
|
||||
STATE_LARA_MONKEYSWING_TURN_LEFT = 82,
|
||||
STATE_LARA_MONKEYSWING_TURN_RIGHT = 83,
|
||||
STATE_LARA_CRAWL_TURN_LEFT = 84,
|
||||
STATE_LARA_CRAWL_TURN_RIGHT = 85,
|
||||
STATE_LARA_CRAWL_BACK = 86,
|
||||
STATE_LARA_CLIMB_TO_CRAWL = 87,
|
||||
STATE_LARA_CRAWL_TO_CLIMB = 88,
|
||||
STATE_LARA_MISC_CONTROL = 89,
|
||||
STATE_LARA_ROPE_TURN_LEFT = 90,
|
||||
STATE_LARA_ROPE_TURN_RIGHT = 91,
|
||||
STATE_LARA_GIANT_BUTTON_PUSH = 92,
|
||||
STATE_LARA_TRAPDOOR_FLOOR_OPEN = 93,
|
||||
STATE_LARA_FREEFALL_BIS = 94,
|
||||
STATE_LARA_ROUND_HANDLE = 95,
|
||||
STATE_LARA_COGWHEEL = 96,
|
||||
STATE_LARA_LEVERSWITCH_PUSH = 97,
|
||||
STATE_LARA_HOLE = 98,
|
||||
STATE_LARA_POLE_IDLE = 99,
|
||||
STATE_LARA_POLE_UP = 100,
|
||||
STATE_LARA_POLE_DOWN = 101,
|
||||
STATE_LARA_POLE_TURN_LEFT = 102,
|
||||
STATE_LARA_POLE_TURN_RIGHT = 103,
|
||||
STATE_LARA_PULLEY = 104,
|
||||
STATE_LARA_CROUCH_TURN_LEFT = 105,
|
||||
STATE_LARA_CROUCH_TURN_RIGHT = 106,
|
||||
STATE_LARA_CLIMB_CORNER_LEFT_OUTER = 107,
|
||||
STATE_LARA_CLIMB_CORNER_RIGHT_OUTER = 108,
|
||||
STATE_LARA_CLIMB_CORNER_LEFT_INNER = 109,
|
||||
STATE_LARA_CLIMB_CORNER_RIGHT_INNER = 110,
|
||||
STATE_LARA_ROPE_IDLE = 111,
|
||||
STATE_LARA_ROPE_CLIMB_UP = 112,
|
||||
STATE_LARA_ROPE_CLIMB_DOWN = 113,
|
||||
STATE_LARA_ROPE_SWING = 114,
|
||||
STATE_LARA_LADDER_TO_HANDS = 115,
|
||||
STATE_LARA_POSITION_CORRECTOR = 116,
|
||||
STATE_LARA_DOUBLEDOORS_PUSH = 117,
|
||||
STATE_LARA_DOZY = 118,
|
||||
STATE_LARA_TIGHTROPE_IDLE = 119,
|
||||
STATE_LARA_TIGHTROPE_TURNAROUND = 120,
|
||||
STATE_LARA_TIGHTROPE_FORWARD = 121,
|
||||
STATE_LARA_TIGHTROPE_BALANCING_LEFT = 122,
|
||||
STATE_LARA_TIGHTROPE_BALANCING_RIGHT = 123,
|
||||
STATE_LARA_TIGHTROPE_ENTER = 124,
|
||||
STATE_LARA_TIGHTROPE_EXIT = 125,
|
||||
STATE_LARA_DOVESWITCH = 126,
|
||||
STATE_LARA_TIGHTROPE_RESTORE_BALANCE = 127,
|
||||
STATE_LARA_BARS_SWING = 128,
|
||||
STATE_LARA_BARS_JUMP = 129,
|
||||
STATE_LARA_UNKNOWN_130 = 130,
|
||||
STATE_LARA_RADIO_LISTENING = 131,
|
||||
STATE_LARA_RADIO_OFF = 132,
|
||||
STATE_LARA_UNKNOWN_133 = 133,
|
||||
STATE_LARA_UNKNOWN_134 = 134,
|
||||
STATE_LARA_UNKNOWN_135 = 135,
|
||||
STATE_LARA_UNUSED16 = 136,
|
||||
STATE_LARA_PICKUP_FROM_CHEST = 137,
|
||||
STATE_LARA_UNKNOWN_138 = 138,
|
||||
STATE_LARA_HANG_FEET = 139,
|
||||
STATE_LARA_HANG_FEET_SHIMMYR = 140,
|
||||
STATE_LARA_HANG_FEET_SHIMMYL = 141,
|
||||
STATE_LARA_HANG_FEET_INCORNERR = 142,
|
||||
STATE_LARA_HANG_FEET_INCORNERL = 143,
|
||||
STATE_LARA_HANG_FEET_OUTCORNERR = 144,
|
||||
STATE_LARA_HANG_FEET_OUTCORNERL = 145,
|
||||
|
||||
NUM_LARA_STATES
|
||||
};
|
||||
|
||||
enum LARA_ANIM
|
||||
{
|
||||
ANIMATION_LARA_RUN = 0, // Run
|
||||
ANIMATION_LARA_WALK_FORWARD = 1, // Walk
|
||||
ANIMATION_LARA_END_WALK_RIGHT = 2, // Walk > stand (right foot moved first)
|
||||
ANIMATION_LARA_END_WALK_LEFT = 3, // Walk > stand (left foot moved first)
|
||||
ANIMATION_LARA_WALK_TO_RUN_RIGHT = 4, // Walk > Run (right foot moved first)
|
||||
ANIMATION_LARA_WALK_TO_RUN_LEFT = 5, // Walk > Run (left foot moved first)
|
||||
ANIMATION_LARA_STAY_TO_RUN = 6, // Stand > run
|
||||
ANIMATION_LARA_RUN_TO_WALK_RIGHT = 7, // Run > walk (left foot first)
|
||||
ANIMATION_LARA_RUN_TO_STAY_LEFT = 8, // Run > stand (left food first)
|
||||
ANIMATION_LARA_RUN_TO_WALK_LEFT = 9, // Run > walk (right foot first)
|
||||
ANIMATION_LARA_RUN_TO_STAY_RIGHT = 10, // Run > stand (right foot first)
|
||||
ANIMATION_LARA_STAY_SOLID = 11, // Stand still (used as a link between many standing animations)
|
||||
ANIMATION_LARA_TURN_RIGHT_SLOW = 12, // Turn right on the spot, small turn
|
||||
ANIMATION_LARA_TURN_LEFT_SLOW = 13, // Turn left on the spot, small turn
|
||||
ANIMATION_LARA_LANDING_FORWARD_BOTH = 14, // Forward jump/fall (less than 7 clicks high) > land (to a standstill), first part > ANIMATION_LARA_LANDING_FORWARD_BOTH_CONTINUE
|
||||
ANIMATION_LARA_LANDING_FORWARD_BOTH_CONTINUE = 15, // Land (after jump/fall less that 7 clicks high), second part > stand still (from ANIMATION_LARA_LANDING_FORWARD_BOTH)
|
||||
ANIMATION_LARA_JUMPING_FORWARD_RIGHT = 16, // Run > take off for forward jump (right foot first) > ANIMATION_LARA_START_FLY_FORWARD_RIGHT
|
||||
ANIMATION_LARA_START_FLY_FORWARD_RIGHT = 17, // Running take off for forward jump (left foot first) > forward jump
|
||||
ANIMATION_LARA_JUMPING_FORWARD_LEFT = 18, // Run > take off for forward jump (left foot first) > ANIMATION_LARA_START_FLY_FORWARD_LEFT
|
||||
ANIMATION_LARA_START_FLY_FORWARD_LEFT = 19, // Running take off for forward jump (right foot first) > forward jump
|
||||
ANIMATION_LARA_WALK_FORWARD_BEGIN = 20, // Stand > walk forwards, first part > ANIMATION_LARA_WALK_FORWARD_BEGIN_CONTINUE
|
||||
ANIMATION_LARA_WALK_FORWARD_BEGIN_CONTINUE = 21, // Walk forwards, second part > walk (from ANIMATION_LARA_WALK_FORWARD_BEGIN)
|
||||
ANIMATION_LARA_START_FREE_FALL = 22, // Jump > fall
|
||||
ANIMATION_LARA_FREE_FALL_LONG = 23, // Fall
|
||||
ANIMATION_LARA_LANDING_HARD = 24, // Jump/fall (more than 7 clicks) > crouching landing > stand
|
||||
ANIMATION_LARA_LANDING_DEATH = 25, // Fall > die (break neck)
|
||||
ANIMATION_LARA_STAY_TO_GRAB = 26, // Stand > take off for upward jump to grab
|
||||
ANIMATION_LARA_STAY_TO_GRAB_CONTINUE = 27, // Jump upwards to grab
|
||||
ANIMATION_LARA_TRY_HANG_VERTICAL = 28, // Jump upwards
|
||||
ANIMATION_LARA_BEGIN_HANGING_VERTICAL = 29, // Grab (after upward jump to grab) > hang by the hands
|
||||
ANIMATION_LARA_STOP_HANG_VERTICAL = 30, // Hang by the hands > fall
|
||||
ANIMATION_LARA_LANDING_LIGHT = 31, // Land after upward jump > stand
|
||||
ANIMATION_LARA_SMASH_JUMP = 32, // Jump > hit something while in the air, first part > ANIMATION_LARA_SMASH_JUMP_CONTINUE
|
||||
ANIMATION_LARA_SMASH_JUMP_CONTINUE = 33, // Hit something while in the air, second part > fall (from ANIMATION_LARA_SMASH_JUMP)
|
||||
ANIMATION_LARA_FREE_FALL_FORWARD = 34, // Downward curve during long jump, first part (not used?) > ANIMATION_LARA_FREE_FALL_MIDDLE
|
||||
ANIMATION_LARA_FREE_FALL_MIDDLE = 35, // Downward curve during long jump, second part (not used?) (from ANIMATION_LARA_FREE_FALL_FORWARD)
|
||||
ANIMATION_LARA_FREE_FALL_LONG_NO_HURT = 36, // Downward curve during long jump > fall
|
||||
ANIMATION_LARA_HANG_TO_RELEASE = 37, // Hang by the hands > fall (great fall) (not used?)
|
||||
ANIMATION_LARA_STOP_WALK_BACK_RIGHT = 38, // Walk backwards > stand (right foot moved first)
|
||||
ANIMATION_LARA_STOP_WALK_BACK_LEFT = 39, // Walk backwards > stand (left foot moved first)
|
||||
ANIMATION_LARA_WALK_BACK = 40, // Walk backwards
|
||||
ANIMATION_LARA_START_WALK_BACK = 41, // Stand > walk backwards
|
||||
ANIMATION_LARA_CLIMB_3CLICK = 42, // Climb block (3 clicks high)
|
||||
ANIMATION_LARA_CLIMB_3CLICK_END_RUNNING = 43, // Stand (after jumping to a higher point) > run (not used?)
|
||||
ANIMATION_LARA_ROTATE_RIGHT = 44, // Turn right on the spot, large turn
|
||||
ANIMATION_LARA_JUMPING_FORWARD_TO_FREEFALL = 45, // Jump forwards > fall (?)
|
||||
ANIMATION_LARA_FLY_FORWARD_TRY_TO_HANG = 46, // Forward jump trying to grab > land (not used?)
|
||||
ANIMATION_LARA_ROLL_ALTERNATE = 47, // Roll (not used?)
|
||||
ANIMATION_LARA_ROLL_END_ALTERNATE = 48, // Roll > stand (not used?)
|
||||
ANIMATION_LARA_FREE_FALL_NO_HURT = 49, // Jump forwards > fall (at earlier stage of jump) (not used?)
|
||||
ANIMATION_LARA_CLIMB_2CLICK = 50, // Climb block (2 clicks high)
|
||||
ANIMATION_LARA_CLIMB_2CLICK_END = 51, // Climb block (2 clicks high) > stand
|
||||
ANIMATION_LARA_CLIMB_2CLICK_END_RUNNING = 52, // Stand (after climbing block 2 clicks high) > run
|
||||
ANIMATION_LARA_WALL_SMASH_LEFT = 53, // Run > hit wall (left foot first) > stand
|
||||
ANIMATION_LARA_WALL_SMASH_RIGHT = 54, // Run > hit wall (right foot first) > stand
|
||||
ANIMATION_LARA_RUN_UP_STEP_RIGHT = 55, // Ascend block (1 click high) running (left foot first)
|
||||
ANIMATION_LARA_RUN_UP_STEP_LEFT = 56, // Ascend block (1 click high) running (right foot first)
|
||||
ANIMATION_LARA_WALK_UP_STEP_RIGHT = 57, // Ascend block (1 click high) walking (left foot first)
|
||||
ANIMATION_LARA_WALK_UP_STEP_LEFT = 58, // Ascend block (1 click high) walking (right foot first)
|
||||
ANIMATION_LARA_WALK_DOWN_LEFT = 59, // Descend block (1 click high) walking (right foot moved first)
|
||||
ANIMATION_LARA_WALK_DOWN_RIGHT = 60, // Descend block (1 click high) walking (left foot moved first)
|
||||
ANIMATION_LARA_WALK_DOWN_BACK_LEFT = 61, // Descend block (1 click high) walking backwards (left foot moved first)
|
||||
ANIMATION_LARA_WALK_DOWN_BACK_RIGHT = 62, // Descend block (1 click high) walking backwards (right foot moved first)
|
||||
ANIMATION_LARA_PULL_SWITCH_DOWN = 63, // Activate (lower) horizontal switch
|
||||
ANIMATION_LARA_PULL_SWITCH_UP = 64, // Deactivate (raise) horizontal switch
|
||||
ANIMATION_LARA_WALK_LEFT = 65, // Sidestep left
|
||||
ANIMATION_LARA_WALK_LEFT_END = 66, // Sidestep left > stand
|
||||
ANIMATION_LARA_WALK_RIGHT = 67, // Sidestep right
|
||||
ANIMATION_LARA_WALK_RIGHT_END = 68, // Sidestep right > stand
|
||||
ANIMATION_LARA_ROTATE_LEFT = 69, // Turn left on the spot, large turn
|
||||
ANIMATION_LARA_SLIDE_FORWARD = 70, // Slide forwards down steep slope (3 clicks high)
|
||||
ANIMATION_LARA_SLIDE_FORWARD_END = 71, // Slide forwards down steep slope (3 clicks high) > stumbling landing, first part > ANIMATION_LARA_SLIDE_FORWARD_STOP
|
||||
ANIMATION_LARA_SLIDE_FORWARD_STOP = 72, // Stumbling landing (after sliding forwards down slope), second part > stand (from ANIMATION_LARA_SLIDE_FORWARD_END)
|
||||
ANIMATION_LARA_STAY_JUMP_SIDES = 73, // Stand > take off for jump in all directions
|
||||
ANIMATION_LARA_JUMP_BACK_BEGIN = 74, // Take off for backward jump
|
||||
ANIMATION_LARA_JUMP_BACK = 75, // Jump backwards
|
||||
ANIMATION_LARA_JUMP_FORWARD_BEGIN = 76, // Standing take off for forward jump
|
||||
ANIMATION_LARA_CONTINUE_FLY_FORWARD = 77, // Jump forwards
|
||||
ANIMATION_LARA_JUMP_LEFT_BEGIN = 78, // Take off for sideways jump left
|
||||
ANIMATION_LARA_JUMP_LEFT = 79, // Jump sideways left
|
||||
ANIMATION_LARA_JUMP_RIGHT_BEGIN = 80, // Take off for sideways jump right
|
||||
ANIMATION_LARA_JUMP_RIGHT = 81, // Jump sideways right
|
||||
ANIMATION_LARA_LANDING_MIDDLE = 82, // Crouching landing after jump in all directions > stand
|
||||
ANIMATION_LARA_FORWARD_TO_FREE_FALL = 83, // Jump backwards > fall
|
||||
ANIMATION_LARA_LEFT_TO_FREE_FALL = 84, // Jump sideways left > fall
|
||||
ANIMATION_LARA_RIGHT_TO_FREE_FALL = 85, // Jump sideways right > fall
|
||||
ANIMATION_LARA_UNDERWATER_SWIM_FORWARD = 86, // Float-swim in deepsea suit (Deepsea Dive)
|
||||
ANIMATION_LARA_UNDERWATER_SWIM_SOLID = 87, // Motionless underwater (driven only by momentum) in deepsea suit (used as a link between swimming animations) (Deepsea Dive)
|
||||
ANIMATION_LARA_RUN_BACK_BEGIN = 88, // Stand > take off for backward hop
|
||||
ANIMATION_LARA_RUN_BACK = 89, // Hop backwards
|
||||
ANIMATION_LARA_RUN_BACK_END = 90, // Hop backwards > stand
|
||||
ANIMATION_LARA_TRY_HANG_VERTICAL_BEGIN = 91, // Take off for upward jump
|
||||
ANIMATION_LARA_LANDING_FROM_RUN = 92, // Jump forwards > running landing > run
|
||||
ANIMATION_LARA_FREE_FALL_BACK = 93, // Downward curve during long jump, second part (with less momentum than ANIMATION_LARA_FREE_FALL_MIDDLE?) - not used?
|
||||
ANIMATION_LARA_FLY_FORWARD_TRY_HANG = 94, // Jump forwards (at late stage during jump) > grab
|
||||
ANIMATION_LARA_TRY_HANG_SOLID = 95, // Grab during forward jump
|
||||
ANIMATION_LARA_HANG_IDLE = 96, // Grab in mid-air > hang by the hands at wall
|
||||
ANIMATION_LARA_CLIMB_ON = 97, // Hang by the hands > pull up > stand
|
||||
ANIMATION_LARA_FREE_FALL_TO_LONG = 98, // Failed attempt to grab during forward jump > fall
|
||||
ANIMATION_LARA_FALL_CROUCHING_LANDING = 99, // Fall > crouching landing
|
||||
ANIMATION_LARA_FREE_FALL_TO_SIDE_LANDING = 100, // Downward curve during long jump > grab~
|
||||
ANIMATION_LARA_FREE_FALL_TO_SIDE_LANDING_ALTERNATE = 101, // Downward curve during long jump (with less momentum than ANIMATION_LARA_FREE_FALL_TO_SIDE_LANDING) > grab (not used?)
|
||||
ANIMATION_LARA_CLIMB_ON_END = 102, // Pull up (after hanging by the hands) > stand
|
||||
ANIMATION_LARA_STAY_IDLE = 103, // Stand still (breathing)
|
||||
ANIMATION_LARA_START_SLIDE_BACKWARD = 104, // Land on steep slope (3 clicks high) > slide backwards down
|
||||
ANIMATION_LARA_SLIDE_BACKWARD = 105, // Slide backwards down steep slope (3 clicks high)
|
||||
ANIMATION_LARA_SLIDE_BACKWARD_END = 106, // Slide backwards down steep slope (3 clicks high) > stumbling landing > stand
|
||||
ANIMATION_LARA_UNDERWATER_SWIM_TO_IDLE = 107, // Stop swimming underwater in deepsea suit (at start or end of float-swimming animation) > drift underwater (Deepsea Dive)
|
||||
ANIMATION_LARA_UNDERWATER_IDLE = 108, // Drift underwater in deepsea suit (Deepsea Dive)
|
||||
ANIMATION_LARA_UNDERWARER_IDLE_TO_SWIM = 109, // Drift underwater in deepsea suit > swim underwater (Deepsea Dive)
|
||||
ANIMATION_LARA_ONWATER_IDLE = 110, // Tread water on water surface
|
||||
ANIMATION_LARA_CLIMB_OUT_OF_WATER = 111, // Pull out of water (onto ledge 1 click above the water surface) > stand
|
||||
ANIMATION_LARA_FREE_FALL_TO_UNDERWATER = 112, // Fall/jump into water > swim underwater
|
||||
ANIMATION_LARA_ONWATER_DIVE_ALTERNATE = 113, // Tread water on water surface > dive > swim underwater (not used?)
|
||||
ANIMATION_LARA_UNDERWATER_TO_ONWATER = 114, // Swim underwater > break water surface > tread water on water surface (?)
|
||||
ANIMATION_LARA_ONWATER_DIVE = 115, // Swim forwards on water surface > dive > swim underwater
|
||||
ANIMATION_LARA_ONWATER_SWIM_FORWARD = 116, // Swim forwards on water surface
|
||||
ANIMATION_LARA_ONWATER_SWIM_FORWARD_TO_IDLE = 117, // Swim forwards on water surface > tread water on water surface
|
||||
ANIMATION_LARA_ONWATER_IDLE_TO_SWIM = 118, // Tread water on water surface > swim forwards on water surface
|
||||
ANIMATION_LARA_FREE_FALL_TO_UNDERWATER_ALTERNATE = 119, // Fall/jump into water > swim underwater (not used?)
|
||||
ANIMATION_LARA_START_OBJECT_MOVING = 120, // Stand > ready to push/pull pushable
|
||||
ANIMATION_LARA_STOP_OBJECT_MOVING = 121, // Ready to push/pull pushable > stand
|
||||
ANIMATION_LARA_OBJECT_PULL = 122, // Pull pushable
|
||||
ANIMATION_LARA_OBJECT_PUSH = 123, // Push pushable
|
||||
ANIMATION_LARA_UNDERWATER_DEATH = 124, // Drown/die underwater with convulsions (Deepsea Dive)
|
||||
ANIMATION_LARA_AH_FORWARD = 125, // Jerk backwards hurt (standing)
|
||||
ANIMATION_LARA_AH_BACKWARD = 126, // Jerk forwards hurt (standing)
|
||||
ANIMATION_LARA_AH_LEFT = 127, // Jerk right hurt (standing)
|
||||
ANIMATION_LARA_AH_RIGHT = 128, // Jerk left hurt (standing)
|
||||
ANIMATION_LARA_UNDERWATER_SWITCH = 129, // Pull underwater switch at wall
|
||||
ANIMATION_LARA_UNDERWATER_PICKUP = 130, // Swimming pickup in deepsea suit (right hand) (Deepsea Dive)
|
||||
ANIMATION_LARA_USE_KEY = 131, // Use key
|
||||
ANIMATION_LARA_ONWATER_DEATH = 132, // Die on the water surface (less dramatic than ANIMATION_LARA_UNDERWATER_DEATH)
|
||||
ANIMATION_LARA_RUN_TO_DIE = 133, // Run > die
|
||||
ANIMATION_LARA_USE_PUZZLE = 134, // Insert puzzle item
|
||||
ANIMATION_LARA_PICKUP = 135, // Standing pickup from floor (right hand)
|
||||
ANIMATION_LARA_CLIMB_LEFT = 136, // Shimmy left
|
||||
ANIMATION_LARA_CLIMB_RIGHT = 137, // Shimmy right
|
||||
ANIMATION_LARA_STAY_TO_DEATH = 138, // Stand > die
|
||||
ANIMATION_LARA_SQUASH_BOULDER = 139, // Crushed by boulder
|
||||
ANIMATION_LARA_ONWATER_IDLE_TO_SWIM_BACK = 140, // Tread water on water surface > swim backwards on water surface
|
||||
ANIMATION_LARA_ONWATER_SWIM_BACK = 141, // Swim backwards on water surface
|
||||
ANIMATION_LARA_ONWATER_SWIM_BACK_TO_IDLE = 142, // Swim backwards on water surface > tread water on water surface
|
||||
ANIMATION_LARA_ONWATER_SWIM_LEFT = 143, // Swim sideways left on water surface
|
||||
ANIMATION_LARA_ONWATER_SWIM_RIGHT = 144, // Swim sideways right on water surface
|
||||
ANIMATION_LARA_JUMP_TO_DEATH = 145, // Land after jump/fall > die (?)
|
||||
ANIMATION_LARA_ROLL_BEGIN = 146, // Stand > roll, first part > ANIMATION_LARA_ROLL_CONTINUE
|
||||
ANIMATION_LARA_ROLL_CONTINUE = 147, // Roll, second part (from ANIMATION_LARA_ROLL_BEGIN) > ANIMATION_LARA_ROLL_END
|
||||
ANIMATION_LARA_ROLL_END = 148, // Roll, third part > stand (from ANIMATION_LARA_ROLL_CONTINUE)
|
||||
ANIMATION_LARA_SPIKED = 149, // Impaled on spikes
|
||||
ANIMATION_LARA_OSCILLATE_HANG_ON = 150, // Grab in mid-air > hang by the hands in free air (swinging forth and back)
|
||||
ANIMATION_LARA_LANDING_ROLL = 151, // Swan dive > rolling landing
|
||||
ANIMATION_LARA_FISH_TO_UNDERWATER1 = 152, // Swan dive > shoot through water at sloped angle (at early stage in swan dive)
|
||||
ANIMATION_LARA_FREE_FALL_FISH = 153, // Swan dive > dive headfirst
|
||||
ANIMATION_LARA_FISH_TO_UNDERWATER2 = 154, // Swan dive > shoot through water vertically (at later stage in swan dive)
|
||||
ANIMATION_LARA_FREE_FALL_FISH_TO_DEATH = 155, // Swan dive > die (break neck)
|
||||
ANIMATION_LARA_START_FLY_LIKE_FISH_LEFT = 156, // Run > swan dive (right foot first)
|
||||
ANIMATION_LARA_START_FLY_LIKE_FISH_RIGHT = 157, // Run > swan dive (left foot first)
|
||||
ANIMATION_LARA_FREE_FALL_FISH_START = 158, // Swan dive
|
||||
ANIMATION_LARA_CLIMB_ON2 = 159, // Hang by the hands > hand stand > stand
|
||||
ANIMATION_LARA_STAND_TO_LADDER = 160, // Stand in water or under low ceiling > ascend ladder (without the jump and grab)
|
||||
ANIMATION_LARA_LADDER_UP = 161, // Ascend ladder
|
||||
ANIMATION_LARA_LADDER_UP_STOP_RIGHT = 162, // Ascend ladder > hang still on ladder (right foot higher)
|
||||
ANIMATION_LARA_LADDER_UP_STOP_LEFT = 163, // Ascend ladder > hang still on ladder (left foot higher)
|
||||
ANIMATION_LARA_LADDER_IDLE = 164, // Hang still on ladder
|
||||
ANIMATION_LARA_LADDER_UP_START = 165, // Hang still on ladder > ascend ladder
|
||||
ANIMATION_LARA_LADDER_DOWN_STOP_LEFT = 166, // Descend ladder > hang still on ladder (left foot higher)
|
||||
ANIMATION_LARA_LADDER_DOWN_STOP_RIGHT = 167, // Descend ladder > hang still on ladder (right foot higher)
|
||||
ANIMATION_LARA_LADDER_DOWN = 168, // Descend ladder
|
||||
ANIMATION_LARA_LADDER_DOWN_START = 169, // Hang still on ladder > descend ladder
|
||||
ANIMATION_LARA_LADDER_RIGHT = 170, // Climb sideways right on ladder
|
||||
ANIMATION_LARA_LADDER_LEFT = 171, // Climb sideways left on ladder
|
||||
ANIMATION_LARA_LADDER_HANG = 172, // Hang by the hands on ladder
|
||||
ANIMATION_LARA_LADDER_HANG_TO_IDLE = 173, // Hang by the hands on ladder > gain footing on ladder
|
||||
ANIMATION_LARA_LADDER_TO_STAND = 174, // Hang still on ladder > pull up > stand
|
||||
ANIMATION_LARA_UNKNOWN_175 = 175, // ??? > stand still
|
||||
ANIMATION_LARA_ONWATER_TO_WADE_SHALLOW = 176, // Swim forwards on water surface > wade (the depth change is very small) (?)
|
||||
ANIMATION_LARA_WADE = 177, // Wade
|
||||
ANIMATION_LARA_RUN_TO_WADE_LEFT = 178, // Run > wade (left foot first)
|
||||
ANIMATION_LARA_RUN_TO_WADE_RIGHT = 179, // Run > wade (right foot first)
|
||||
ANIMATION_LARA_WADE_TO_RUN_LEFT = 180, // Wade > run (left foot first)
|
||||
ANIMATION_LARA_WADE_TO_RUN_RIGHT = 181, // Wade > run (right foot first)
|
||||
ANIMATION_LARA_LADDER_BACKFLIP_START = 182, // Hang still on ladder > jump backwards off ladder, first part > ANIMATION_LARA_LADDER_BACKFLIP_END
|
||||
ANIMATION_LARA_LADDER_BACKFLIP_END = 183, // Jump backwards off ladder, second part > jump backwards (from ANIMATION_LARA_LADDER_BACKFLIP_START)
|
||||
ANIMATION_LARA_WADE_TO_STAY_RIGHT = 184, // Wade > stand (right foot first)
|
||||
ANIMATION_LARA_WADE_TO_STAY_LEFT = 185, // Wade > stand (left foot first)
|
||||
ANIMATION_LARA_STAY_TO_WADE = 186, // Stand > wade
|
||||
ANIMATION_LARA_LADDER_UP_HANDS = 187, // Hang by the hands on ladder > ascend ladder with the the hands only
|
||||
ANIMATION_LARA_LADDER_DOWN_HANDS = 188, // Hang by the hands on ladder > descend ladder with the hands only
|
||||
ANIMATION_LARA_FLARE_THROW = 189, // Throw flare away (standing)
|
||||
ANIMATION_LARA_ONWATER_TO_WADE_DEEP = 190, // Swim forwards on water surface > wade (the depth transition is greater) (?)
|
||||
ANIMATION_LARA_ONWATER_TO_LAND_LOW = 191, // Pull out of water (onto ledge even with the water surface) > stand
|
||||
ANIMATION_LARA_UNDERWATER_TO_WADE = 192, // Swim underwater > stand in shallow water
|
||||
ANIMATION_LARA_ONWATER_TO_WADE = 193, // Tread water on water surface > stand in shallow water
|
||||
ANIMATION_LARA_LADDER_TO_HANDS_DOWN = 194, // Hang still on ladder > descend ladder > hang by the hands
|
||||
ANIMATION_LARA_SWITCH_SMALL_DOWN = 195, // Activate horizontal lever switch (electrical switch)
|
||||
ANIMATION_LARA_SWITCH_SMALL_UP = 196, // Deactivate horizontal lever switch (electrical switch)
|
||||
ANIMATION_LARA_BUTTON_PUSH = 197, // Push small button
|
||||
ANIMATION_LARA_UNDERWATER_SWIM_TO_STILL_HUDDLE = 198, // Stop swimming underwater in deepsea suit (in middle stage of float-swimming animation) > drift underwater (Deepsea Dive)
|
||||
ANIMATION_LARA_UNDERWATER_SWIM_TO_STILL_SPRAWL = 199, // Stop swimming underwater in deepsea suit (in late stage of float-swimming animation) > drift underwater (Deepsea Dive)
|
||||
ANIMATION_LARA_UNDERWATER_SWIM_TO_STILL_MEDIUM = 200, // Stop swimming underwater in deepsea suit (in early stage of float-swimming animation) > drift underwater (Deepsea Dive)
|
||||
ANIMATION_LARA_LADDER_TO_HANDS_RIGHT = 201, // Climb sideways right on ladder > hang by the hands
|
||||
ANIMATION_LARA_LADDER_TO_HANDS_LEFT = 202, // Climb sideways left on ladder > hang by the hands
|
||||
ANIMATION_LARA_UNDERWATER_ROLL_BEGIN = 203, // Roll underwater, first part > ANIMATION_LARA_UNDERWATER_ROLL_END
|
||||
ANIMATION_LARA_FLARE_PICKUP = 204, // Pick up flare from floor while standing (left hand)
|
||||
ANIMATION_LARA_UNDERWATER_ROLL_END = 205, // Roll underwater, second part > drift underwater (from ANIMATION_LARA_UNDERWATER_ROLL_BEGIN)
|
||||
ANIMATION_LARA_UNDERWATER_FLARE_PICKUP = 206, // Pick up flare while swimming in deepsea suit (left hand) (Russia-levels)
|
||||
ANIMATION_LARA_RUNNING_JUMP_ROLL_BEGIN = 207, // Jump forwards with backtwist (after running takeoff), first part > ANIMATION_LARA_RUNNING_JUMP_ROLL_END
|
||||
ANIMATION_LARA_SOMERSAULT = 208, // Somersault during swan dive
|
||||
ANIMATION_LARA_RUNNING_JUMP_ROLL_END = 209, // Jump forwards with backtwist (after running takeoff), second part (from ANIMATION_LARA_RUNNING_JUMP_ROLL_BEGIN)
|
||||
ANIMATION_LARA_STANDING_JUMP_ROLL_BEGIN = 210, // Jump forwards with backtwist (after standing takeoff), first part > ANIMATION_LARA_STANDING_JUMP_ROLL_END
|
||||
ANIMATION_LARA_STANDING_JUMP_ROLL_END = 211, // Jump forwards with backtwist (after standing takeoff), second part (from ANIMATION_LARA_STANDING_JUMP_ROLL_BEGIN)
|
||||
ANIMATION_LARA_BACKWARDS_JUMP_ROLL_BEGIN = 212, // Jump backwards with forward twist, first part > ANIMATION_LARA_BACKWARDS_JUMP_ROLL_END
|
||||
ANIMATION_LARA_BACKWARDS_JUMP_ROLL_END = 213, // Jump backwards with forward twist, second part (from ANIMATION_LARA_BACKWARDS_JUMP_ROLL_BEGIN)
|
||||
ANIMATION_LARA_TR345_ZIPLINE_GRAB = 214, // Stand > grab zipline
|
||||
ANIMATION_LARA_TR345_ZIPLINE_RIDE = 215, // Ride zipline
|
||||
ANIMATION_LARA_TR345_ZIPLINE_FALL = 216, // Fall off zipline
|
||||
ANIMATION_LARA_TR345_STAND_TO_CROUCH = 217, // Stand > crouch
|
||||
ANIMATION_LARA_CROUCH_ROLL_FORWARD_BEGIN = 218, // Crouch with right elbow on knee > take off for crouched roll (not used)
|
||||
ANIMATION_LARA_CROUCH_ROLL_FORWARD_CONTINUE = 219, // Crouched roll (not used)
|
||||
ANIMATION_LARA_CROUCH_ROLL_FORWARD_END = 220, // Crouched roll > crouch
|
||||
ANIMATION_LARA_CROUCH_TO_STAND = 221, // Crouch > stand
|
||||
ANIMATION_LARA_CROUCH_IDLE = 222, // Crouch
|
||||
ANIMATION_LARA_SPRINT = 223, // Sprint
|
||||
ANIMATION_LARA_RUN_TO_SPRINT_LEFT = 224, // Run > sprint (left foot first)
|
||||
ANIMATION_LARA_RUN_TO_SPRINT_RIGHT = 225, // Run > sprint (right foot first)
|
||||
ANIMATION_LARA_SPRINT_SLIDE_STAND_RIGHT = 226, // Sprint > skidding halt > stand (right foot first)
|
||||
ANIMATION_LARA_SPRINT_SLIDE_STAND_RIGHT_BETA = 227, // ??? > stand (right foot first) (not used)
|
||||
ANIMATION_LARA_SPRINT_SLIDE_STAND_LEFT = 228, // Sprint > skidding halt > stand (left foot first)
|
||||
ANIMATION_LARA_SPRINT_SLIDE_STAND_LEFT_BETA = 229, // ??? > stand (left foot first) (not used)
|
||||
ANIMATION_LARA_SPRINT_TO_ROLL_LEFT = 230, // Sprint > take off for sprinting roll (left foot first) > ANIMATION_LARA_SPRINT_ROLL_LEFT_TO_RUN
|
||||
ANIMATION_LARA_SPRINT_TO_ROLL_LEFT_BETA = 231, // Stumbling takeoff for sprinting roll (not used) (?)
|
||||
ANIMATION_LARA_SPRINT_ROLL_LEFT_TO_RUN = 232, // Sprinting roll > run (from ANIMATION_LARA_SPRINT_TO_ROLL_LEFT)
|
||||
ANIMATION_LARA_MONKEY_GRAB = 233, // Grab monkey-bars during jump
|
||||
ANIMATION_LARA_MONKEY_IDLE = 234, // Hang still by the hands in free air (from monkey-bars or wafer thin ledge)
|
||||
ANIMATION_LARA_MONKEY_FALL = 235, // Hang still by the hands in free air (from monkey-bars or wafer thin ledge) > fall
|
||||
ANIMATION_LARA_MONKEY_FORWARD = 236, // Monkey-swing forwards
|
||||
ANIMATION_LARA_MONKEY_STOP_LEFT = 237, // Monkey-swing forwards > hang still from monkey-bars (left hand first)
|
||||
ANIMATION_LARA_MONKEY_STOP_RIGHT = 238, // Monkey-swing forwards > hang still from monkey-bars (right hand first)
|
||||
ANIMATION_LARA_MONKEY_IDLE_TO_FORWARD_LEFT = 239, // Hang still from monkey-bars > monkey-swing forwards (left hand moved first)
|
||||
ANIMATION_LARA_SPRINT_TO_ROLL_ALTERNATE_BEGIN = 240, // Sprint > take off for sprinting roll, first part (not used) (?) > ANIMATION_LARA_SPRINT_TO_ROLL_ALTERNATE_CONTINUE
|
||||
ANIMATION_LARA_SPRINT_TO_ROLL_ALTERNATE_CONTINUE = 241, // Take off for sprinting roll, second part (not used) (?) (from ANIMATION_LARA_SPRINT_TO_ROLL_ALTERNATE_BEGIN) > ANIMATION_LARA_SPRINT_TO_ROLL_ALTERNATE_END
|
||||
ANIMATION_LARA_SPRINT_TO_ROLL_ALTERNATE_END = 242, // Sprinting roll > run (not used) (?)
|
||||
ANIMATION_LARA_SPRINT_TO_RUN_LEFT = 243, // Sprint > run (left foot first)
|
||||
ANIMATION_LARA_SPRINT_TO_RUN_RIGHT = 244, // Sprint > run (right foot first)
|
||||
ANIMATION_LARA_CROUCH_PREPARE = 245, // 'Springy' crouch (used as a link to and from crouching animations)
|
||||
ANIMATION_LARA_SLIDE_FORWARD_TO_RUN = 246, // Slide forwards down steep slope (3 clicks high) > stumbling landing > run
|
||||
ANIMATION_LARA_CROUCH_ROLL_FORWARD_BEGIN_ALTERNATE = 247, // Crouch > take off for crouching roll (not used)
|
||||
ANIMATION_LARA_JUMP_FORWARD_BEGIN_TO_GRAB = 248, // Jump forwards > grab (at early stage during jump)
|
||||
ANIMATION_LARA_JUMP_FORWARD_END_TO_GRAB = 249, // Jump forwards > grab (at middle stage during jump)
|
||||
ANIMATION_LARA_RUN_TO_GRAB_RIGHT = 250, // Grab during running takeoff (right foot first) (?)
|
||||
ANIMATION_LARA_RUN_TO_GRAB_LEFT = 251, // Grab during running takeoff (left foot first) (?)
|
||||
ANIMATION_LARA_MONKEY_IDLE_TO_FORWARD_RIGHT = 252, // Hang still from monkey-bars > monkey-swing forwards (right hand moved first)
|
||||
ANIMATION_LARA_MONKEY_STRAFE_LEFT = 253, // Shimmy left
|
||||
ANIMATION_LARA_MONKEY_STRAFE_LEFT_END = 254, // Shimmy (left) > hang still by the hands (?)
|
||||
ANIMATION_LARA_MONKEY_STRAFE_RIGHT = 255, // Shimmy right
|
||||
ANIMATION_LARA_MONKEY_STRAFE_RIGHT_END = 256, // Shimmy (right) > hang still by the hands (not used) (?)
|
||||
ANIMATION_LARA_MONKEY_TURN_AROUND = 257, // Turn around at the spot while hanging from monkey-bars (not used) (?)
|
||||
ANIMATION_LARA_CROUCH_TO_CRAWL_BEGIN = 258, // Crouch > crawl position, first part > ANIMATION_LARA_CROUCH_TO_CRAWL_CONTINUE
|
||||
ANIMATION_LARA_CRAWL_TO_CROUCH_BEGIN = 259, // Crawl position > crouch, first part > ANIMATION_LARA_CRAWL_TO_CROUCH_END
|
||||
ANIMATION_LARA_CRAWL_FORWARD = 260, // Crawl forwards
|
||||
ANIMATION_LARA_CRAWL_IDLE_TO_FORWARD = 261, // Crawl position > crawl forwards
|
||||
ANIMATION_LARA_CRAWL_FORWARD_TO_IDLE_BEGIN_RIGHT = 262, // Crawl forwards > crawl position, first part (right foot first) > ANIMATION_LARA_CRAWL_FORWARD_TO_IDLE_END_RIGHT
|
||||
ANIMATION_LARA_CRAWL_IDLE = 263, // Crawl position
|
||||
ANIMATION_LARA_CROUCH_TO_CRAWL_END = 264, // Crouch > crawl position, third part (from ANIMATION_LARA_CROUCH_TO_CRAWL_CONTINUE)
|
||||
ANIMATION_LARA_CROUCH_IDLE_SMASH = 265, // 'Slightly springy' crouch (not used?)
|
||||
ANIMATION_LARA_CRAWL_FORWARD_TO_IDLE_END_RIGHT = 266, // Crawl forwards > crawl position, second part (from ANIMATION_LARA_CRAWL_FORWARD_TO_IDLE_BEGIN_RIGHT)
|
||||
ANIMATION_LARA_CRAWL_FORWARD_TO_IDLE_BEGIN_LEFT = 267, // Crawl forwards > crawl position, first part (left foot first) > ANIMATION_LARA_CRAWL_FORWARD_TO_IDLE_END_LEFT
|
||||
ANIMATION_LARA_CRAWL_FORWARD_TO_IDLE_END_LEFT = 268, // Crawl forwards > crawl positon, second part (from ANIMATION_LARA_CRAWL_FORWARD_TO_IDLE_BEGIN_LEFT)
|
||||
ANIMATION_LARA_CRAWL_TURN_LEFT = 269, // Crawl position > turn left crawling
|
||||
ANIMATION_LARA_CRAWL_TURN_RIGHT = 270, // Crawl position > turn right crawling
|
||||
ANIMATION_LARA_MONKEY_TURN_LEFT = 271, // Hang still from monkey-bars > turn left hanging from monkey-bars
|
||||
ANIMATION_LARA_MONKEY_TURN_RIGHT = 272, // Hang still from monkey-bars > turn right hanging from monkey-bars
|
||||
ANIMATION_LARA_CROUCH_TO_CRAWL_CONTINUE = 273, // Crouch > crawl position, second part (from ANIMATION_LARA_CROUCH_TO_CRAWL_BEGIN) > ANIMATION_LARA_CROUCH_TO_CRAWL_END
|
||||
ANIMATION_LARA_CRAWL_TO_CROUCH_END = 274, // Crawl position > crouch, second part (from ANIMATION_LARA_CRAWL_TO_CROUCH_BEGIN)
|
||||
ANIMATION_LARA_CRAWL_IDLE_TO_BACKWARD = 275, // Crawl > crawl backwards
|
||||
ANIMATION_LARA_CRAWL_BACKWARD = 276, // Crawl backwards
|
||||
ANIMATION_LARA_CRAWL_BACKWARD_TO_IDLE_BEGIN_RIGHT = 277, // Crawl backwards > crawl position, first part (right foot moved first) > ANIMATION_LARA_CRAWL_BACKWARD_TO_IDLE_END_RIGHT
|
||||
ANIMATION_LARA_CRAWL_BACKWARD_TO_IDLE_END_RIGHT = 278, // Crawl backwards > crawl position, second part (from ANIMATION_LARA_CRAWL_BACKWARD_TO_IDLE_BEGIN_RIGHT)
|
||||
ANIMATION_LARA_CRAWL_BACKWARD_TO_IDLE_BEGIN_LEFT = 279, // Crawl backwards > crawl position, first part (left foot moved first) > ANIMATION_LARA_CRAWL_BACKWARD_TO_IDLE_END_LEFT
|
||||
ANIMATION_LARA_CRAWL_BACKWARD_TO_IDLE_END_LEFT = 280, // Crawl backwards > crawl position, second part (from ANIMATION_LARA_CRAWL_BACKWARD_TO_IDLE_BEGIN_LEFT)
|
||||
ANIMATION_LARA_CRAWL_TURN_LEFT_END = 281, // Turn left crawling > crawl position
|
||||
ANIMATION_LARA_CRAWL_TURN_RIGHT_END = 282, // Turn right crawling > crawl position
|
||||
ANIMATION_LARA_MONKEY_TURN_LEFT_EARLY_END = 283, // Turn left hanging from monkey-bars > hang still from monkey-bars (at early stage during turn)
|
||||
ANIMATION_LARA_MONKEY_TURN_LEFT_LATE_END = 284, // Turn left hanging from monkey-bars > hang still from monkey-bars (at late stage during turn)
|
||||
ANIMATION_LARA_MONKEY_TURN_RIGHT_EARLY_END = 285, // Turn right hanging from monkey-bars > hang still from monkey-bars (early stage during turn)
|
||||
ANIMATION_LARA_MONKEY_TURN_RIGHT_LATE_END = 286, // Turn right hanging from monkey-bars > hang still from monkey-bars (at late stage during turn)
|
||||
ANIMATION_LARA_HANG_TO_CROUCH_BEGIN = 287, // Hang by the hands > pull up > crouch, first part > ANIMATION_LARA_HANG_TO_CROUCH_END
|
||||
ANIMATION_LARA_HANG_TO_CROUCH_END = 288, // Crouch, second part (after pulling up from hanging by the hands) (from ANIMATION_LARA_HANG_TO_CROUCH_BEGIN)
|
||||
ANIMATION_LARA_CRAWL_TO_HANG_BEGIN = 289, // Crawl position > climb down > hang by the hands, first part >ANIMATION_LARA_CRAWL_TO_HANG_CONTINUE
|
||||
ANIMATION_LARA_CRAWL_TO_HANG_CONTINUE = 290, // Hang by the hands, second part (after climbing down from crawl position) (from ANIMATION_LARA_CRAWL_TO_HANG_BEGIN) > ANIMATION_LARA_CRAWL_TO_HANG_END
|
||||
ANIMATION_LARA_CROUCH_PICKUP = 291, // Crouching pickup (right hand)
|
||||
ANIMATION_LARA_CRAWL_PICKUP = 292, // Crawling pickup (not used)
|
||||
ANIMATION_LARA_CROUCH_SMASH_FORWARD = 293, // Jerk forwards hurt (chrouching)
|
||||
ANIMATION_LARA_CROUCH_SMASH_BACKWARD = 294, // Jerk backwards hurt (chrouching)
|
||||
ANIMATION_LARA_CROUCH_SMASH_RIGHT = 295, // Jerk right hurt (chrouching)
|
||||
ANIMATION_LARA_CROUCH_SMASH_LEFT = 296, // Jerk left hurt (chrouching)
|
||||
ANIMATION_LARA_CRAWL_SMASH_FORWARD = 297, // Jerk forwards hurt (crawling)
|
||||
ANIMATION_LARA_CRAWL_SMASH_BACKWARD = 298, // Jerk backwards hurt (crawling)
|
||||
ANIMATION_LARA_CRAWL_SMASH_RIGHT = 299, // Jerk right hurt (crawling)
|
||||
ANIMATION_LARA_CRAWL_SMASH_LEFT = 300, // Jerk left hurt (crawling)
|
||||
ANIMATION_LARA_CRAWL_DEATH = 301, // Crawl > die
|
||||
ANIMATION_LARA_CRAWL_TO_HANG_END = 302, // Hang by the hands (after climbing down from crawl position), third part (from ANIMATION_LARA_CRAWL_TO_HANG_CONTINUE)
|
||||
ANIMATION_LARA_CROUCH_ABORT = 303, // About to crouch > stand (cancelling a stand > crouch command)
|
||||
ANIMATION_LARA_RUN_TO_CROUCH_LEFT_BEGIN = 304, // Run > crouch, first part (left foot first) > ANIMATION_LARA_RUN_TO_CROUCH_LEFT_END
|
||||
ANIMATION_LARA_RUN_TO_CROUCH_RIGHT_BEGIN = 305, // Run > crouch, first part (right foot first) > ANIMATION_LARA_RUN_TO_CROUCH_RIGHT_END
|
||||
ANIMATION_LARA_RUN_TO_CROUCH_LEFT_END = 306, // Crouch, second part (after running) > crouch (from ANIMATION_LARA_RUN_TO_CROUCH_LEFT_BEGIN)
|
||||
ANIMATION_LARA_RUN_TO_CROUCH_RIGHT_END = 307, // Crouch, second part (after running) > crouch (from ANIMATION_LARA_RUN_TO_CROUCH_RIGHT_BEGIN)
|
||||
ANIMATION_LARA_SPRINT_TO_ROLL_RIGHT = 308, // Sprint > take off for sprinting roll (right foot first) > ANIMATION_LARA_SPRINT_ROLL_RIGHT_TO_RUN
|
||||
ANIMATION_LARA_SPRINT_ROLL_RIGHT_TO_RUN = 309, // Sprinting roll > run (from ANIMATION_LARA_SPRINT_TO_ROLL_RIGHT)
|
||||
ANIMATION_LARA_SPRINT_TO_CROUCH_LEFT = 310, // Sprint > small roll > crouch (left foot first)
|
||||
ANIMATION_LARA_SPRINT_TO_CROUCH_RIGHT = 311, // Sprint > small roll > crouch (right foot first)
|
||||
ANIMATION_LARA_CROUCH_PICKUP_FLARE = 312, // Pick up flare while crouching (left hand)
|
||||
ANIMATION_LARA_DOOR_OPEN_FORWARD = 313, // Use doorknob to open door and push it open
|
||||
ANIMATION_LARA_DOOR_OPEN_BACK = 314, // Use doorknob to open door and pull it open
|
||||
ANIMATION_LARA_DOOR_KICK = 315, // Kick door open
|
||||
ANIMATION_LARA_GIANT_BUTTON_PUSH = 316, // Push Sequence button
|
||||
ANIMATION_LARA_FLOOR_TRAPDOOR_OPEN = 317, // Open trapdoor in floor
|
||||
ANIMATION_LARA_CEILING_TRAPDOOR_OPEN = 318, // Grab (after upward jump) and open trapdoor in ceiling*
|
||||
ANIMATION_LARA_ROUND_HANDLE_GRAB_CLOCKWISE = 319, // Stand > grab turn handle (clockwise)
|
||||
ANIMATION_LARA_ROUND_HANDLE_GRAB_COUNTERCLOCKWISE = 320, // Stand > grab turn handle (counter-clockwise)
|
||||
ANIMATION_LARA_COGWHEEL_PULL = 321, // Pull cog wheel
|
||||
ANIMATION_LARA_COGWHEEL_GRAB = 322, // Stand > grab cog wheel
|
||||
ANIMATION_LARA_COGWHEEL_UNGRAB = 323, // Let go of cog wheel > stand
|
||||
ANIMATION_LARA_LEVERSWITCH_PUSH = 324, // Use lever switch
|
||||
ANIMATION_LARA_HOLE_GRAB = 325, // Use hole-in-wall switch/pickup
|
||||
ANIMATION_LARA_STAY_TO_POLE_GRAB = 326, // Stand > climb onto vertical pole
|
||||
ANIMATION_LARA_POLE_JUMP = 327, // Jump off vertical pole
|
||||
ANIMATION_LARA_POLE_IDLE = 328, // Hang still on vertical pole
|
||||
ANIMATION_LARA_POLE_CLIMB_UP = 329, // Climb vertical pole
|
||||
ANIMATION_LARA_POLE_FALL = 330, // Hang still on vertical pole > fall
|
||||
ANIMATION_LARA_JUMP_FORWARD_TO_POLE_GRAB = 331, // Jump forwards > grab and climb onto vertical pole
|
||||
ANIMATION_LARA_POLE_TURN_LEFT_BEGIN = 332, // Hang still on vertical pole > turn clockwise on vertical pole
|
||||
ANIMATION_LARA_POLE_TURN_RIGHT_BEGIN = 333, // Hang still on vertical pole > turn counter-clockwise on vertical pole
|
||||
ANIMATION_LARA_POLE_IDLE_TO_CLIMB_DOWN = 334, // Hang still on vertical pole > slide down vertical pole
|
||||
ANIMATION_LARA_POLE_CLIMB_DOWN = 335, // Slide down vertical pole
|
||||
ANIMATION_LARA_POLE_CLIMB_DOWN_TO_IDLE = 336, // Slide down vertical pole > hang still on vertical pole
|
||||
ANIMATION_LARA_JUMP_UP_TO_POLE_GRAB = 337, // Jump upwards > grab and climb onto vertical pole
|
||||
ANIMATION_LARA_POLE_CLIMB_UP_INBETWEEN = 338, // Climb vertical pole > hang still on vertical pole
|
||||
ANIMATION_LARA_PULLEY_GRAB = 339, // Stand > grab pulley
|
||||
ANIMATION_LARA_PULLEY_PULL = 340, // Pull pulley
|
||||
ANIMATION_LARA_PULLEY_UNGRAB = 341, // Let go of pulley
|
||||
ANIMATION_LARA_POLE_GRAB_TO_STAY = 342, // Hang still on vertical pole > put feet on floor > stand
|
||||
ANIMATION_LARA_POLE_TURN_LEFT = 343, // Turn clockwise on vertical pole (not used?)
|
||||
ANIMATION_LARA_POLE_TURN_LEFT_END = 344, // Turn clockwise on vertical pole > hang still on vertical pole
|
||||
ANIMATION_LARA_POLE_TURN_RIGHT = 345, // Turn counter-clockwise on vertical pole (not used?)
|
||||
ANIMATION_LARA_POLE_TURN_RIGHT_END = 346, // Turn counter-clockwise on vertical pole > hang still on vertical pole
|
||||
ANIMATION_LARA_ROUND_HANDLE_PUSH_RIGHT_BEGIN = 347, // Push turn handle (clockwise), first part > ANIMATION_LARA_ROUND_HANDLE_PUSH_RIGHT_CONTINUE
|
||||
ANIMATION_LARA_ROUND_HANDLE_PUSH_RIGHT_CONTINUE = 348, // Push turn handle (clockwise), second part (from ANIMATION_LARA_ROUND_HANDLE_PUSH_RIGHT_BEGIN)
|
||||
ANIMATION_LARA_ROUND_HANDLE_PUSH_RIGHT_END = 349, // Push turn handle (clockwise) > stand
|
||||
ANIMATION_LARA_ROUND_HANDLE_PUSH_LEFT_BEGIN = 350, // Push turn handle (counter-clockwise), first part > ANIMATION_LARA_ROUND_HANDLE_PUSH_LEFT_BEGIN
|
||||
ANIMATION_LARA_ROUND_HANDLE_PUSH_LEFT_CONTINUE = 351, // Push turn handle (counter-clockwise), second part (from ANIMATION_LARA_ROUND_HANDLE_PUSH_RIGHT_END)
|
||||
ANIMATION_LARA_ROUND_HANDLE_PUSH_LEFT_END = 352, // Push turn handle (counter-clockwise) > stand
|
||||
ANIMATION_LARA_CROUCH_TURN_LEFT = 353, // Crouch > turn left crouching
|
||||
ANIMATION_LARA_CROUCH_TURN_RIGHT = 354, // Crouch > turn right crouching
|
||||
ANIMATION_LARA_HANG_AROUND_LEFT_OUTER_BEGIN = 355, // Shimmy around left outer corner, first part > ANIMATION_LARA_HANG_AROUND_LEFT_OUTER_END
|
||||
ANIMATION_LARA_HANG_AROUND_LEFT_OUTER_END = 356, // Shimmy around left outer corner, second part (from ANIMATION_LARA_HANG_AROUND_LEFT_OUTER_BEGIN)
|
||||
ANIMATION_LARA_HANG_AROUND_RIGHT_OUTER_BEGIN = 357, // Shimmy around right outer corner, first part > ANIMATION_LARA_HANG_AROUND_RIGHT_OUTER_END
|
||||
ANIMATION_LARA_HANG_AROUND_RIGHT_OUTER_END = 358, // Shimmy around right outer corner, second part (from ANIMATION_LARA_HANG_AROUND_RIGHT_OUTER_BEGIN)
|
||||
ANIMATION_LARA_HANG_AROUND_LEFT_INNER_BEGIN = 359, // Shimmy around left inner corner, first part > ANIMATION_LARA_HANG_AROUND_LEFT_INNER_END
|
||||
ANIMATION_LARA_HANG_AROUND_LEFT_INNER_END = 360, // Shimmy around left inner corner, second part (from ANIMATION_LARA_HANG_AROUND_LEFT_INNER_BEGIN)
|
||||
ANIMATION_LARA_HANG_AROUND_RIGHT_INNER_BEGIN = 361, // Shimmy around right inner corner, first part > ANIMATION_LARA_HANG_AROUND_RIGHT_INNER_END
|
||||
ANIMATION_LARA_HANG_AROUND_RIGHT_INNER_END = 362, // Shimmy around right inner corner, second part (from ANIMATION_LARA_HANG_AROUND_RIGHT_INNER_BEGIN)
|
||||
ANIMATION_LARA_LADDER_AROUND_LEFT_OUTER_BEGIN = 363, // Climb sideways on ladder around left outer corner, first part > ANIMATION_LARA_LADDER_AROUND_LEFT_OUTER_END
|
||||
ANIMATION_LARA_LADDER_AROUND_LEFT_OUTER_END = 364, // Climb sideways on ladder around left outer corner, second part (from ANIMATION_LARA_LADDER_AROUND_LEFT_OUTER_BEGIN)
|
||||
ANIMATION_LARA_LADDER_AROUND_RIGHT_OUTER_BEGIN = 365, // Climb sideways on ladder around right outer corner, first part > ANIMATION_LARA_LADDER_AROUND_RIGHT_OUTER_END
|
||||
ANIMATION_LARA_LADDER_AROUND_RIGHT_OUTER_END = 366, // Climb sideways on ladder around right outer corner, second part (from ANIMATION_LARA_LADDER_AROUND_RIGHT_OUTER_BEGIN)
|
||||
ANIMATION_LARA_LADDER_AROUND_LEFT_INNER_BEGIN = 367, // Climb sideways on ladder around left inner corner, first part > ANIMATION_LARA_LADDER_AROUND_LEFT_INNER_END
|
||||
ANIMATION_LARA_LADDER_AROUND_LEFT_INNER_END = 368, // Climb sideways on ladder around left inner corner, second part (from ANIMATION_LARA_LADDER_AROUND_LEFT_INNER_BEGIN)
|
||||
ANIMATION_LARA_LADDER_AROUND_RIGHT_INNER_BEGIN = 369, // Climb sideways on ladder around right inner corner, first part > ANIMATION_LARA_LADDER_AROUND_RIGHT_INNER_END
|
||||
ANIMATION_LARA_LADDER_AROUND_RIGHT_INNER_END = 370, // Climb sideways on ladder around right inner corner, second part (from ANIMATION_LARA_LADDER_AROUND_RIGHT_INNER_BEGIN)
|
||||
ANIMATION_LARA_MONKEY_TO_ROPE_BEGIN = 371, // Hang from monkey-bars/jump upwards > grab rope (?)
|
||||
ANIMATION_LARA_TRAIN_DEATH = 372, // Fall off train > die
|
||||
ANIMATION_LARA_MONKEY_TO_ROPE_END = 373, // Loose momentum on rope > wrap legs around rope > hang still on rope
|
||||
ANIMATION_LARA_ROPE_IDLE = 374, // Hang still on rope
|
||||
ANIMATION_LARA_ROPE_DOWN_BEGIN = 375, // Hang still on rope > slide down rope
|
||||
ANIMATION_LARA_ROPE_UP = 376, // Climb rope
|
||||
ANIMATION_LARA_ROPE_IDLE_TO_SWING_SOFT = 377, // Hang still on rope > begin to swing with still some momentum left (no kick necessary)(?)
|
||||
ANIMATION_LARA_ROPE_GRAB_TO_FALL = 378, // Have just grabbed rope > fall (?)
|
||||
ANIMATION_LARA_ROPE_JUMP_TO_GRAB = 379, // Jump forwards > grab rope
|
||||
ANIMATION_LARA_ROPE_IDLE_TO_BACKFLIP = 380, // Somersault from rope to ledge? (not used)
|
||||
ANIMATION_LARA_ROPE_SWING_TO_FALL_SEMIFRONT = 381, // Swing on rope > fall (when Lara is in the fore end of the swing - haft past four o'clock)(?)
|
||||
ANIMATION_LARA_ROPE_SWING_TO_FALL_MIDDLE = 382, // Swing on rope> fall (when Lara is in the middle of the swing) (?)
|
||||
ANIMATION_LARA_ROPE_SWING_TO_FALL_BACK = 383, // Swing on rope > fall (when Lara is in the back end of the swing) (?)
|
||||
ANIMATION_LARA_ROPE_DOWN = 384, // Slide down rope
|
||||
ANIMATION_LARA_ROPE_DOWN_TO_IDLE = 385, // Slide down rope > hang still on rope
|
||||
ANIMATION_LARA_ROPE_SWING_TO_TRY_HANG_BACK = 386, // Swing on rope > jump off to grab ledge (when Lara is in the back end of the swing)
|
||||
ANIMATION_LARA_ROPE_IDLE_TO_SWING = 387, // Hang still on rope > give a kick to gain momentum to swing (begin to swing)
|
||||
ANIMATION_LARA_ROPE_IDLE_TO_SWING_SEMIMIDDLE = 388, // Swing on rope> fall (when Lara is just before the middle of the swing - 7 o'clock) (?)
|
||||
ANIMATION_LARA_ROPE_IDLE_TO_SWING_HALFMIDDLE = 389, // Swing on rope> fall (when Lara is just before the middle of the swing - half past six o'clock) (?)
|
||||
ANIMATION_LARA_ROPE_SWING_TO_FALL_FRONT = 390, // Swing on rope > fall (when Lara is in the fore end of the swing - 5 o'clock) (?)
|
||||
ANIMATION_LARA_ROPE_GRAB_TO_FALL_ALTERNATE = 391, // Have just grabbed rope > fall (same animation as ANIMATION_LARA_ROPE_GRAB_TO_FALL?) (?)
|
||||
ANIMATION_LARA_ROPE_TURN_CLOCKWISE = 392, // Turn clockwise on rope
|
||||
ANIMATION_LARA_ROPE_TURN_COUNTER_CLOCKWISE = 393, // Turn counter-clockwise on rope
|
||||
ANIMATION_LARA_ROPE_SWING_FORWARD_SEMIHARD = 394, // Swing forwards on rope with much momentum
|
||||
ANIMATION_LARA_ROPE_LADDER_TO_HANDS_DOWN_ALTERNATE = 395, // Hang still on ladder > abandon footing > hang by the hands alone (not used) (?)
|
||||
ANIMATION_LARA_ROPE_SWING_BACK_CONTINUE = 396, // Swing backwards on rope, second part (from ANIMATION_LARA_ROPE_SWING_BACK_BEGIN) > ANIMATION_LARA_ROPE_SWING_BACK_END
|
||||
ANIMATION_LARA_ROPE_SWING_BACK_END = 397, // Swing backwards on rope, third part (from ANIMATION_LARA_ROPE_SWING_BACK_CONTINUE)
|
||||
ANIMATION_LARA_ROPE_SWING_BACK_BEGIN = 398, // Swing backwards on rope, first part > ANIMATION_LARA_ROPE_SWING_BACK_CONTINUE
|
||||
ANIMATION_LARA_ROPE_SWING_FORWARD_SOFT = 399, // Swing forwards on rope with little momentum (?)
|
||||
ANIMATION_LARA_WATERSKIN_EMPTY = 400, // Empty waterskin
|
||||
ANIMATION_LARA_WATERSKIN_FILL = 401, // Fill waterskin
|
||||
ANIMATION_LARA_WATERSKIN_POUR_ON_SCALE = 402, // Pour waterskin on scale
|
||||
ANIMATION_LARA_DOOR_OPEN_CROWBAR = 403, // Open door with crowbar
|
||||
ANIMATION_LARA_ROPE_SWING_FORWARD_HARD = 404, // Reach fore end of swing on rope with very much momentum
|
||||
ANIMATION_LARA_ROPE_CHANGE_ROPE = 405, // Swing on rope and grab a new rope? (not used?)
|
||||
ANIMATION_LARA_ROPE_SWING_TO_TRY_HANG_FRONT2 = 406, // Swing on rope > jump off to grab ledge (when Lara is in the fore end of the swing - 4 o'clock)
|
||||
ANIMATION_LARA_ROPE_SWING_TO_TRY_HANG_MIDDLE = 407, // Swing on rope > jump off to grab ledge (when Lara is right in the middle of the swing)
|
||||
ANIMATION_LARA_ROPE_SWING_BLOCK = 408, // Swing forth and back with almost no momentum (Lara is too high on the rope?)
|
||||
ANIMATION_LARA_ROPE_SWING_TO_TRY_HANG_SEMIMIDDLE = 409, // Swing on rope > jump off to grab ledge (when Lara is just before the middle of the swing)
|
||||
ANIMATION_LARA_ROPE_SWING_TO_TRY_HANG_FRONT3 = 410, // Swing on rope > jump off to grab ledge (when Lara is in the fore end of the swing - 5 o'clock)
|
||||
ANIMATION_LARA_ROPE_SWING_TO_TRY_HANG_FRONT1 = 411, // Swing on rope > jump off to grab ledge (when Lara is in the fore end of the swing - 3 o'clock)
|
||||
ANIMATION_LARA_DOUBLEDOORS_PUSH = 412, // Push double doors
|
||||
ANIMATION_LARA_BIG_BUTTON_PUSH = 413, // Push big button
|
||||
ANIMATION_LARA_JUMPSWITCH = 414, // Pull jumpswitch
|
||||
ANIMATION_LARA_UNDERWATER_PULLEY = 415, // Pull underwater switch in the ceiling
|
||||
ANIMATION_LARA_UNDERWATER_DOOR_OPEN = 416, // Open underwater_door
|
||||
ANIMATION_LARA_PUSHABLE_PUSH_TO_STAND = 417, // Push pushable > stand
|
||||
ANIMATION_LARA_PUSHABLE_PULL_TO_STAND = 418, // Pull pushable > stand
|
||||
ANIMATION_LARA_CROWBAR_USE_ON_WALL = 419, // Use crowbar to get puzzle item from wall
|
||||
ANIMATION_LARA_CROWBAR_USE_ON_FLOOR = 420, // Use crowbar to activate broken leverswitch (Desert Railroad)
|
||||
ANIMATION_LARA_CRAWL_JUMP_DOWN = 421, // Roll forwards out of crawlspace (not used)
|
||||
ANIMATION_LARA_HARP_PLAY = 422, // Play harp (The Lost Library)
|
||||
ANIMATION_LARA_PUT_TRIDENT = 423, // Place trident on Poseidon statue (Temple of Poseidon)
|
||||
ANIMATION_LARA_PICKUP_PEDESTAL_HIGH = 424, // Standing pickup from high pedestal (Lara's height)
|
||||
ANIMATION_LARA_PICKUP_PEDESTAL_LOW = 425, // Standing pickup from low pedestal (waist-height)
|
||||
ANIMATION_LARA_ROTATE_SENET = 426, // Play game of senet (Tomb of Semerkhet)
|
||||
ANIMATION_LARA_TORCH_LIGHT_1 = 427, // Light torch with flame 0-1 clicks high
|
||||
ANIMATION_LARA_TORCH_LIGHT_2 = 428, // Light torch with flame 2-3 clicks high
|
||||
ANIMATION_LARA_TORCH_LIGHT_3 = 429, // Light torch with flame 4-5 clicks high
|
||||
ANIMATION_LARA_TORCH_LIGHT_4 = 430, // Light torch with flame 6-7 clicks high
|
||||
ANIMATION_LARA_TORCH_LIGHT_5 = 431, // Light torch with flame higher than 7 clicks
|
||||
ANIMATION_LARA_DETONATOR_USE = 432, // use mine detector
|
||||
ANIMATION_LARA_CORRECT_POSITION_FRONT = 433, // Small steps forward to correct Lara's position (hardcoded, used to put line up Lara in front of switches and puzzles)
|
||||
ANIMATION_LARA_CORRECT_POSITION_LEFT = 434, // Small steps to the left to corrcts Lara's position
|
||||
ANIMATION_LARA_CORRECT_POSITION_RIGHT = 435, // Small steps to the right to correct Lara's position
|
||||
ANIMATION_LARA_CROWBAR_USE_ON_FLOOR_FAIL = 436, // Use crowbar to break train link? (not used)
|
||||
ANIMATION_LARA_USE_KEYCARD = 437, // Use swipe card
|
||||
ANIMATION_LARA_DEATH_BLOWUP = 438, // Blown up by mine
|
||||
ANIMATION_LARA_PICKUP_SARCOPHAGUS = 439, // Pickup from sarcophagus
|
||||
ANIMATION_LARA_DRAG = 440, // Dragging dead body (City of the Dead)
|
||||
ANIMATION_LARA_BINOCULARS = 441, // Look through binoculars (not used)
|
||||
ANIMATION_LARA_DEATH_BIG_SCORPION = 442, // Picked up and tossed away by big scorpion
|
||||
ANIMATION_LARA_ELEVATOR_RECOVER = 443, // Lara painfully gets to her feet after fall in elevator (VCI-levels)
|
||||
ANIMATION_LARA_BEETLE_PUT = 444, // Wind up beetle > put beetle on floor
|
||||
ANIMATION_LARA_DOZY = 445, // DOZY Animation
|
||||
ANIMATION_LARA_TIGHTROPE_WALK = 446, // Walk on tightrope
|
||||
ANIMATION_LARA_TIGHTROPE_WALK_TO_STAND = 447, // Walk on tightrope > stand on tightrope
|
||||
ANIMATION_LARA_TIGHTROPE_STAND = 448, // Stand on tightrope
|
||||
ANIMATION_LARA_TIGHTROPE_WALK_TO_STAND_CAREFUL = 449, // Walk on tightrope > tread carefully > stand on tightrope
|
||||
ANIMATION_LARA_TIGHTROPE_STAND_TO_WALK = 450, // Stand on tightrope > walk on tightrope
|
||||
ANIMATION_LARA_TIGHTROPE_TURN = 451, // Turn around on tightrope
|
||||
ANIMATION_LARA_TIGHTROPE_LOOSE_LEFT = 452, // Stand on tightrope > loose balance and lean left
|
||||
ANIMATION_LARA_TIGHTROPE_RECOVER_LEFT = 453, // Lean left on tightrope > regain balance and stand on tightrope
|
||||
ANIMATION_LARA_TIGHTROPE_FALL_LEFT = 454, // Fall off tightrope (to the left)
|
||||
ANIMATION_LARA_TIGHTROPE_LOOSE_RIGHT = 455, // Stand on tightrope > loose balance and lean right
|
||||
ANIMATION_LARA_TIGHTROPE_RECOVER_RIGHT = 456, // Lean right on tightrope > regain balance and stand on tightrope
|
||||
ANIMATION_LARA_TIGHTROPE_FALL_RIGHT = 457, // Fall off tightrope (to the right)
|
||||
ANIMATION_LARA_TIGHTROPE_START = 458, // Stand > walk out on tightrope
|
||||
ANIMATION_LARA_TIGHTROPE_FINISH = 459, // Walk off tightrope > stand
|
||||
ANIMATION_LARA_DOVESWITCH_TURN = 460, // Examine and turn doveswitch (Rome-levels)
|
||||
ANIMATION_LARA_BARS_GRAB = 461, // Jump forwards > grab horizontal pole
|
||||
ANIMATION_LARA_BARS_SWING = 462, // Swing around horizontal pole
|
||||
ANIMATION_LARA_BARS_JUMP = 463, // Jump off horizontal pole
|
||||
ANIMATION_LARA_LOOT_CABINET = 464, // Open cabinet and search it
|
||||
ANIMATION_LARA_LOOT_DRAWER = 465, // Open drawer and search it
|
||||
ANIMATION_LARA_LOOT_SHELF = 466, // Search shelves
|
||||
ANIMATION_LARA_RADIO_BEGIN = 467, // Stand > put hand to headgear to listen (VCI-levels)
|
||||
ANIMATION_LARA_RADIO_IDLE = 468, // Hold hand on headgear and listen (VCI-levels)
|
||||
ANIMATION_LARA_RADIO_END = 469, // Remove hand from headgear > stand (VCI-levels)
|
||||
ANIMATION_LARA_VALVE_TURN = 470, // Turn valve wheel
|
||||
ANIMATION_LARA_CROWBAR_USE_ON_WALL2 = 471, // Pull object off wall (to use as crowbar)
|
||||
ANIMATION_LARA_LOOT_CHEST = 472, // Kneel to open box and pick up item (VCI-levels)
|
||||
ANIMATION_LARA_LADDER_TO_CROUCH = 473, // Climb wall > pull up in crawlspace
|
||||
ANIMATION_LARA_1CLICK_CRAWL_VAULT = 474, // 1 click crawlspace vault
|
||||
ANIMATION_LARA_2CLICK_CRAWL_VAULT = 475, // 2 click crawlspace vault
|
||||
ANIMATION_LARA_3CLICK_CRAWL_VAULT = 476, // 3 click crawlspace vault
|
||||
ANIMATION_LARA_1CLICK_CRAWL_EXIT = 477, // 1 click crawlspace exit
|
||||
ANIMATION_LARA_2CLICK_CRAWL_EXIT = 478, // 2 click crawlspace exit
|
||||
ANIMATION_LARA_1CLICK_CRAWL_TO_CRAWL_UP = 479, // maneuver up 1 click in crawlspace
|
||||
ANIMATION_LARA_1CLICK_CRAWL_TO_CRAWL_DOWN = 480, // maneuver down 1 click in crawlspace
|
||||
ANIMATION_LARA_CLIMB_OUT_OF_WATER_TO_2CLICK = 481, // climb out of water to 2click crawlspace
|
||||
ANIMATION_LARA_ONWATER_TO_LAND_LOW_TO_2CLICK = 482, // climb out of onwater to 2click crawlspace
|
||||
ANIMATION_LARA_WATER_TO_SUBMERGED_CRAWL = 483, // wade out of water to submerged crawlspace
|
||||
ANIMATION_LARA_HANG_FEET = 484, // hang with feet supporting her
|
||||
ANIMATION_LARA_HANG_FEET_SHIMMYR = 485, // shimmy right with feet on wall
|
||||
ANIMATION_LARA_HANG_FEET_SHIMMYL = 486, // shimmy left with feet on wall
|
||||
ANIMATION_LARA_HANG_FEET_CLIMB = 487, // feet hang -> climb
|
||||
ANIMATION_LARA_HANG_FEET_IDLE = 488, // hang feet idle anim for shimmies/climbups
|
||||
ANIMATION_LARA_HANG_FEET_CLIMB_TO_CROUCH = 489, // hang feet crouch climb
|
||||
ANIMATION_LARA_HANG_FEET_IN_RCORNER = 490, // hang feet shimmy around inner right corner
|
||||
ANIMATION_LARA_HANG_FEET_IN_LCORNER = 491, // hang feet shimmy around inner left corner
|
||||
ANIMATION_LARA_HANG_FEET_OUT_RCORNER = 492, // hang feet shimmy around outer right corner
|
||||
ANIMATION_LARA_HANG_FEET_OUT_LCORNER = 493, // hang feet shimmy around outer left corner
|
||||
|
||||
NUM_LARA_ANIMS
|
||||
};
|
||||
#pragma endregion
|
||||
|
||||
typedef enum LARA_WATER_STATUS
|
||||
{
|
||||
LW_ABOVE_WATER,
|
||||
LW_UNDERWATER,
|
||||
LW_SURFACE,
|
||||
LW_FLYCHEAT,
|
||||
LW_WADE
|
||||
};
|
||||
|
||||
typedef enum LARA_GUN_STATUS
|
||||
{
|
||||
LG_NO_ARMS,
|
||||
LG_HANDS_BUSY,
|
||||
LG_DRAW_GUNS,
|
||||
LG_UNDRAW_GUNS,
|
||||
LG_READY,
|
||||
LG_SPECIAL
|
||||
};
|
||||
|
||||
typedef enum WeaponAmmoType
|
||||
{
|
||||
WEAPON_AMMO1,
|
||||
WEAPON_AMMO2,
|
||||
WEAPON_AMMO3,
|
||||
MAX_AMMOTYPE
|
||||
};
|
||||
|
||||
typedef enum LARA_MESHES
|
||||
{
|
||||
LM_HIPS,
|
||||
LM_LTHIGH,
|
||||
LM_LSHIN,
|
||||
LM_LFOOT,
|
||||
LM_RTHIGH,
|
||||
LM_RSHIN,
|
||||
LM_RFOOT,
|
||||
LM_TORSO,
|
||||
LM_RINARM,
|
||||
LM_ROUTARM,
|
||||
LM_RHAND,
|
||||
LM_LINARM,
|
||||
LM_LOUTARM,
|
||||
LM_LHAND,
|
||||
LM_HEAD,
|
||||
NUM_LARA_MESHES
|
||||
};
|
||||
|
||||
typedef enum LARA_WEAPON_TYPE
|
||||
{
|
||||
WEAPON_NONE,
|
||||
WEAPON_PISTOLS,
|
||||
WEAPON_REVOLVER,
|
||||
WEAPON_UZI,
|
||||
WEAPON_SHOTGUN,
|
||||
WEAPON_HK,
|
||||
WEAPON_CROSSBOW,
|
||||
WEAPON_FLARE,
|
||||
WEAPON_TORCH,
|
||||
WEAPON_GRENADE_LAUNCHER,
|
||||
WEAPON_HARPOON_GUN,
|
||||
WEAPON_ROCKET_LAUNCHER,
|
||||
WEAPON_SNOWMOBILE,
|
||||
NUM_WEAPONS
|
||||
};
|
||||
|
||||
typedef enum LARA_WEAPON_TYPE_CARRIED
|
||||
{
|
||||
WTYPE_MISSING = 0x0,
|
||||
WTYPE_PRESENT = 0x1,
|
||||
WTYPE_SILENCER = 0x2,
|
||||
WTYPE_LASERSIGHT = 0x4,
|
||||
WTYPE_AMMO_1 = 0x8,
|
||||
WTYPE_AMMO_2 = 0x10,
|
||||
WTYPE_AMMO_3 = 0x20,
|
||||
WTYPE_MASK_AMMO = WTYPE_AMMO_1 | WTYPE_AMMO_2 | WTYPE_AMMO_3,
|
||||
};
|
||||
|
||||
typedef enum LARA_CLOTH_TYPES
|
||||
{
|
||||
CLOTH_MISSING,
|
||||
CLOTH_DRY,
|
||||
CLOTH_WET
|
||||
};
|
||||
|
||||
typedef struct CarriedWeaponInfo
|
||||
{
|
||||
bool Present;
|
||||
short Ammo[3];
|
||||
byte SelectedAmmo;
|
||||
short Ammo[MAX_AMMOTYPE];
|
||||
int SelectedAmmo; // WeaponAmmoType_enum
|
||||
bool HasLasersight;
|
||||
bool HasSilencer;
|
||||
};
|
||||
|
@ -17,21 +762,33 @@ typedef struct DiaryInfo
|
|||
bool Present;
|
||||
};
|
||||
|
||||
struct WaterskinInfo
|
||||
typedef struct WaterskinInfo
|
||||
{
|
||||
bool Present;
|
||||
int Quantity;
|
||||
};
|
||||
|
||||
struct LaraInfo
|
||||
typedef struct LARA_ARM
|
||||
{
|
||||
short* frameBase;
|
||||
short frameNumber;
|
||||
short animNumber;
|
||||
bool lock;
|
||||
short yRot;
|
||||
short xRot;
|
||||
short zRot;
|
||||
short flash_gun;
|
||||
};
|
||||
|
||||
typedef struct LaraInfo
|
||||
{
|
||||
short itemNumber;
|
||||
short gunStatus;
|
||||
short gunType;
|
||||
short requestGunType;
|
||||
short lastGunType;
|
||||
short gunStatus; // LG_enum
|
||||
short gunType; // WEAPON_enum
|
||||
short requestGunType; // WEAPON_enum
|
||||
short lastGunType; // WEAPON_enum
|
||||
short calcFallSpeed;
|
||||
short waterStatus;
|
||||
short waterStatus; // LW_enum
|
||||
short climbStatus;
|
||||
short poseCount;
|
||||
short hitFrame;
|
||||
|
@ -150,10 +907,28 @@ struct LaraInfo
|
|||
int NumFlares;
|
||||
};
|
||||
|
||||
#define FRONT_ARC ANGLE(90.0f)
|
||||
#define LARA_LEAN_RATE ANGLE(1.5f)
|
||||
#define LARA_LEAN_MAX ANGLE(11.0f)
|
||||
#define LARA_TURN_RATE ANGLE(2.25f)
|
||||
#define LARA_JUMP_TURN ANGLE(3.0f)
|
||||
#define LARA_SLOW_TURN ANGLE(4.0f)
|
||||
#define LARA_MED_TURN ANGLE(6.0f)
|
||||
#define LARA_FAST_TURN ANGLE(8.0f)
|
||||
|
||||
constexpr auto LARA_HITE = 762; // the size of lara (from the floor to the top of the head)
|
||||
constexpr auto LARA_FREEFALL_SPEED = 131;
|
||||
constexpr auto LARA_RAD = 100;
|
||||
constexpr auto LARA_VELOCITY = 12;
|
||||
|
||||
extern LaraInfo Lara;
|
||||
extern ITEM_INFO* LaraItem;
|
||||
extern byte LaraNodeUnderwater[NUM_LARA_MESHES];
|
||||
|
||||
#define LARA_MESHES(slot, mesh) Lara.meshPtrs[mesh] = MESHES(slot, mesh)
|
||||
#define CHECK_LARA_MESHES(slot, mesh) Lara.meshPtrs[mesh] == MESHES(slot, mesh)
|
||||
#define INIT_LARA_MESHES(mesh, to, from) Lara.meshPtrs[mesh] = LARA_MESHES(to, mesh) = LARA_MESHES(from, mesh)
|
||||
|
||||
#define LaraRoutineFunction void(ITEM_INFO* item, COLL_INFO* coll)
|
||||
extern function<LaraRoutineFunction> lara_control_routines[NUM_LARA_STATES + 1];
|
||||
extern function<LaraRoutineFunction> lara_collision_routines[NUM_LARA_STATES + 1];
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "framework.h"
|
||||
#include "lara1gun.h"
|
||||
#include "global.h"
|
||||
|
||||
#include "items.h"
|
||||
#include "Lara.h"
|
||||
#include "larafire.h"
|
||||
|
@ -57,7 +57,7 @@ void FireHarpoon()
|
|||
pos.z = dxPos.z = 77;
|
||||
|
||||
g_Renderer->GetLaraBonePosition(&dxPos, LM_RHAND);
|
||||
GetLaraJointPosition((PHD_VECTOR*)&pos, LM_RHAND);
|
||||
GetLaraJointPosition(&PHD_VECTOR(pos.x, pos.y, pos.z), LM_RHAND);
|
||||
|
||||
/*item->pos.xPos = pos.x = dxPos.x;
|
||||
item->pos.yPos = pos.y = dxPos.y;
|
||||
|
@ -339,6 +339,15 @@ void FireGrenade()
|
|||
}
|
||||
}
|
||||
|
||||
enum GRENADE_TYPE
|
||||
{
|
||||
GRENADE_NORMAL,
|
||||
GRENADE_SUPER,
|
||||
GRENADE_FLASH,
|
||||
GRENADE_ULTRA,
|
||||
GRENADE_FLAGS
|
||||
};
|
||||
|
||||
void ControlGrenade(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
|
@ -523,7 +532,7 @@ void ControlGrenade(short itemNumber)
|
|||
int ceiling;
|
||||
short roomNumber;
|
||||
|
||||
if (item->itemFlags[0] == WEAPON_AMMO4)
|
||||
if (item->itemFlags[0] == GRENADE_ULTRA)
|
||||
{
|
||||
roomNumber = item->roomNumber;
|
||||
|
||||
|
@ -574,7 +583,7 @@ void ControlGrenade(short itemNumber)
|
|||
item->hitPoints = 1;*/
|
||||
}
|
||||
|
||||
if (item->itemFlags[0] == WEAPON_AMMO4)
|
||||
if (item->itemFlags[0] == GRENADE_ULTRA)
|
||||
GrenadeLauncherSpecialEffect1(item->pos.xPos, item->pos.yPos, item->pos.zPos, -1, 1);
|
||||
|
||||
// Time to explode?
|
||||
|
@ -599,7 +608,7 @@ void ControlGrenade(short itemNumber)
|
|||
}
|
||||
}
|
||||
|
||||
if (!(item->itemFlags[0] == WEAPON_AMMO3 && explode))
|
||||
if (!(item->itemFlags[0] == GRENADE_FLASH && explode))
|
||||
{
|
||||
int n = 0;
|
||||
bool foundCollidedObjects = false;
|
||||
|
@ -615,7 +624,7 @@ void ControlGrenade(short itemNumber)
|
|||
|
||||
foundCollidedObjects = true;
|
||||
|
||||
if (item->itemFlags[0] != WEAPON_AMMO3 || explode)
|
||||
if (item->itemFlags[0] != GRENADE_FLASH || explode)
|
||||
{
|
||||
if (CollidedItems[0])
|
||||
{
|
||||
|
@ -723,9 +732,9 @@ void ControlGrenade(short itemNumber)
|
|||
} while (n < 2);
|
||||
}
|
||||
|
||||
if (explode || (item->itemFlags[0] == WEAPON_AMMO3 && explode))
|
||||
if (explode || (item->itemFlags[0] == GRENADE_FLASH && explode))
|
||||
{
|
||||
if (item->itemFlags[0] == WEAPON_AMMO3)
|
||||
if (item->itemFlags[0] == GRENADE_FLASH)
|
||||
{
|
||||
FlashFader = 32;
|
||||
FlashFadeR = 255;
|
||||
|
@ -761,10 +770,10 @@ void ControlGrenade(short itemNumber)
|
|||
SoundEffect(105, &item->pos, PITCH_SHIFT | 0x1800000);
|
||||
SoundEffect(106, &item->pos, 0);
|
||||
|
||||
if (item->itemFlags[0] != WEAPON_AMMO1 && item->itemFlags[0] != 4)
|
||||
if (item->itemFlags[0] != GRENADE_NORMAL && item->itemFlags[0] != 4)
|
||||
{
|
||||
item->meshBits = 0;
|
||||
item->itemFlags[1] = (item->itemFlags[0] != WEAPON_AMMO2 ? 16 : 4);
|
||||
item->itemFlags[1] = (item->itemFlags[0] != GRENADE_SUPER ? 16 : 4);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1062,6 +1071,13 @@ void AnimateShotgun(int weaponType)
|
|||
Lara.leftArm.animNumber = Lara.rightArm.animNumber = item->animNumber;
|
||||
}
|
||||
|
||||
enum CROSSBOW_TYPE
|
||||
{
|
||||
CROSSBOW_NORMAL,
|
||||
CROSSBOW_POISON,
|
||||
CROSSBOW_EXPLODE
|
||||
};
|
||||
|
||||
void ControlCrossbowBolt(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNumber];
|
||||
|
@ -1079,7 +1095,7 @@ void ControlCrossbowBolt(short itemNumber)
|
|||
if (item->speed > 64)
|
||||
item->speed -= (item->speed >> 4);
|
||||
if (GlobalCounter & 1)
|
||||
CreateBubble((PHD_VECTOR*)&item->pos, roomNumber, 4, 7, 0, 0, 0, 0);
|
||||
CreateBubble(&PHD_VECTOR(item->pos.xPos, item->pos.yPos, item->pos.zPos), roomNumber, 4, 7, 0, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1102,16 +1118,18 @@ void ControlCrossbowBolt(short itemNumber)
|
|||
item->pos.zPos = oldZ;
|
||||
|
||||
// If ammos are normal, then just shatter the bolt and quit
|
||||
if (item->itemFlags[0] != WEAPON_AMMO3)
|
||||
if (item->itemFlags[0] != CROSSBOW_EXPLODE)
|
||||
{
|
||||
ExplodeItemNode(item, 0, 0, 256);
|
||||
ExplodeItemNode(item, 0, 0, EXPLODE_NORMAL);
|
||||
KillItem(itemNumber);
|
||||
return;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
// Otherwise, bolt must explode
|
||||
explode = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Has bolt changed room?
|
||||
if (item->roomNumber != roomNumber)
|
||||
|
@ -1139,7 +1157,7 @@ void ControlCrossbowBolt(short itemNumber)
|
|||
|
||||
foundCollidedObjects = true;
|
||||
|
||||
if (item->itemFlags[0] != WEAPON_AMMO3 || explode)
|
||||
if (item->itemFlags[0] != CROSSBOW_EXPLODE || explode)
|
||||
{
|
||||
if (CollidedItems[0])
|
||||
{
|
||||
|
@ -1154,16 +1172,14 @@ void ControlCrossbowBolt(short itemNumber)
|
|||
if (item->objectNumber < ID_SMASH_OBJECT1 || item->objectNumber > ID_SMASH_OBJECT8)
|
||||
{
|
||||
if (currentItem->objectNumber == ID_SHOOT_SWITCH1 || currentItem->objectNumber == ID_SHOOT_SWITCH2)
|
||||
CrossbowHitSwitchType78(item, currentItem, 0);
|
||||
DoCrossbowDamage(item, currentItem, 0);
|
||||
else if (Objects[item->objectNumber].hitEffect)
|
||||
DoGrenadeDamageOnBaddie(currentItem, item);
|
||||
}
|
||||
else
|
||||
{
|
||||
TriggerExplosionSparks(currentItem->pos.xPos, currentItem->pos.yPos, currentItem->pos.zPos, 3, -2, 0, currentItem->roomNumber);
|
||||
currentItem->pos.yPos -= 128;
|
||||
TriggerShockwave(¤tItem->pos, 48, 304, 96, 0, 96, 128, 24, 0, 0);
|
||||
currentItem->pos.yPos += 128;
|
||||
TriggerShockwave(&PHD_3DPOS(currentItem->pos.xPos, currentItem->pos.yPos - 128, currentItem->pos.zPos), 48, 304, 96, 0, 96, 128, 24, 0, 0);
|
||||
ExplodeItemNode(currentItem, 0, 0, 128);
|
||||
short currentItemNumber = (currentItem - CollidedItems[0]);
|
||||
SmashObject(currentItemNumber);
|
||||
|
@ -1173,14 +1189,14 @@ void ControlCrossbowBolt(short itemNumber)
|
|||
else if (currentItem->objectNumber == ID_SHOOT_SWITCH1 || currentItem->objectNumber == ID_SHOOT_SWITCH2)
|
||||
{
|
||||
// Special case for ID_SWITCH_TYPE7 and ID_SWITCH_TYPE8
|
||||
CrossbowHitSwitchType78(item, currentItem, 1);
|
||||
DoCrossbowDamage(item, currentItem, 1);
|
||||
}
|
||||
else if (Objects[currentItem->objectNumber].hitEffect)
|
||||
{
|
||||
HitTarget(currentItem, (GAME_VECTOR*)&item->pos, Weapons[WEAPON_CROSSBOW].damage, 0);
|
||||
HitTarget(currentItem, &GAME_VECTOR(item->pos.xPos, item->pos.yPos, item->pos.zPos), Weapons[WEAPON_CROSSBOW].damage, 0);
|
||||
|
||||
// Poisoned ammos
|
||||
if (item->itemFlags[0] == WEAPON_AMMO2 && !Objects[currentItem->objectNumber].explodableMeshbits)
|
||||
if (item->itemFlags[0] == CROSSBOW_POISON && !Objects[currentItem->objectNumber].explodableMeshbits)
|
||||
item->poisoned = true;
|
||||
}
|
||||
|
||||
|
@ -1197,16 +1213,14 @@ void ControlCrossbowBolt(short itemNumber)
|
|||
|
||||
do
|
||||
{
|
||||
if (currentMesh->staticNumber >= 50 && currentMesh->staticNumber < 58)
|
||||
if (currentMesh->staticNumber >= 50 && currentMesh->staticNumber < 58) // SHATTER
|
||||
{
|
||||
if (explode)
|
||||
{
|
||||
TriggerExplosionSparks(currentMesh->x, currentMesh->y, currentMesh->z, 3, -2, 0, item->roomNumber);
|
||||
currentMesh->y -= 128;
|
||||
TriggerShockwave((PHD_3DPOS*)¤tMesh, 40, 176, 64, 0, 96, 128, 16, 0, 0);
|
||||
currentMesh->y += 128;
|
||||
TriggerShockwave(&PHD_3DPOS(currentMesh->x, currentMesh->y - 128, currentMesh->z, 0, currentMesh->yRot, 0), 40, 176, 64, 0, 96, 128, 16, 0, 0);
|
||||
}
|
||||
ShatterObject((SHATTER_ITEM*)item, NULL, -128, item->roomNumber, 0);
|
||||
ShatterObject((SHATTER_ITEM*)item, NULL, -128, item->roomNumber, 0); // TODO: this wont work !!
|
||||
SmashedMeshRoom[SmashedMeshCount] = item->roomNumber;
|
||||
SmashedMesh[SmashedMeshCount] = currentMesh;
|
||||
SmashedMeshCount++;
|
||||
|
@ -1231,16 +1245,17 @@ void ControlCrossbowBolt(short itemNumber)
|
|||
{
|
||||
if (foundCollidedObjects)
|
||||
{
|
||||
ExplodeItemNode(item, 0, 0, 256);
|
||||
ExplodeItemNode(item, 0, 0, EXPLODE_NORMAL);
|
||||
KillItem(itemNumber);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// At this point, for sure bolt must explode
|
||||
|
||||
if (Rooms[item->roomNumber].flags & ENV_FLAG_WATER)
|
||||
{
|
||||
TriggerUnderwaterExplosion(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
TriggerShockwave(&item->pos, 48, 304, 96, 0, 96, 128, 24, 0, 0);
|
||||
|
@ -1252,12 +1267,12 @@ void ControlCrossbowBolt(short itemNumber)
|
|||
|
||||
AlertNearbyGuards(item);
|
||||
|
||||
SoundEffect(105, &item->pos, PITCH_SHIFT | 0x1800000);
|
||||
SoundEffect(106, &item->pos, 0);
|
||||
SoundEffect(SFX_EXPLOSION1, &item->pos, PITCH_SHIFT | 0x1800000);
|
||||
SoundEffect(SFX_EXPLOSION2, &item->pos, 0);
|
||||
|
||||
if (foundCollidedObjects || explode)
|
||||
{
|
||||
ExplodeItemNode(item, 0, 0, 256);
|
||||
ExplodeItemNode(item, 0, 0, EXPLODE_NORMAL);
|
||||
KillItem(itemNumber);
|
||||
}
|
||||
|
||||
|
@ -1476,12 +1491,12 @@ void undraw_shotgun(int weapon)
|
|||
|
||||
AnimateItem(item);
|
||||
|
||||
if (item->status == ITEM_DEACTIVATED)
|
||||
if (item->status == ITEM_DESACTIVATED)
|
||||
{
|
||||
Lara.gunStatus = LG_NO_ARMS;
|
||||
Lara.target = NULL;
|
||||
Lara.rightArm.lock = 0;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.rightArm.lock = false;
|
||||
Lara.leftArm.lock = false;
|
||||
|
||||
KillItem(Lara.weaponItem);
|
||||
|
||||
|
@ -1514,7 +1529,7 @@ void draw_shotgun_meshes(int weaponType)
|
|||
LARA_MESHES(WeaponObjectMesh(weaponType), LM_RHAND);
|
||||
}
|
||||
|
||||
void CrossbowHitSwitchType78(ITEM_INFO* item1, ITEM_INFO* item2, signed int search)
|
||||
void DoCrossbowDamage(ITEM_INFO* item1, ITEM_INFO* item2, signed int search)
|
||||
{
|
||||
/*v4 = item2;
|
||||
if (!(item2->flags & 0x40))
|
||||
|
@ -1674,10 +1689,10 @@ void FireShotgun()
|
|||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
loopAngles[0] = angles[0] + value * (GetRandomControl() - ANGLE(90)) / 0x10000;
|
||||
loopAngles[1] = angles[1] + value * (GetRandomControl() - ANGLE(90)) / 0x10000;
|
||||
loopAngles[0] = angles[0] + value * (GetRandomControl() - 0x4000) / 0x10000;
|
||||
loopAngles[1] = angles[1] + value * (GetRandomControl() - 0x4000) / 0x10000;
|
||||
|
||||
if (FireWeapon(WEAPON_SHOTGUN, Lara.target, LaraItem, loopAngles))
|
||||
if (FireWeapon(WEAPON_SHOTGUN, Lara.target, LaraItem, loopAngles) == FW_MAYBEHIT)
|
||||
fired = true;
|
||||
}
|
||||
|
||||
|
@ -1706,12 +1721,10 @@ void FireShotgun()
|
|||
SmokeCountL = 32;
|
||||
SmokeWeapon = WEAPON_SHOTGUN;
|
||||
|
||||
if (LaraItem->meshBits)
|
||||
if (LaraItem->meshBits != 0)
|
||||
{
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
TriggerGunSmoke(pos2.x, pos2.y, pos2.z, pos.x - pos2.x, pos.y - pos2.y, pos.z - pos2.z, 1, SmokeWeapon, 32);
|
||||
}
|
||||
TriggerGunSmoke(pos2.x, pos2.y, pos2.z, pos.x - pos2.x, pos.y - pos2.y, pos.z - pos2.z, 1, SmokeWeapon, SmokeCountL);
|
||||
}
|
||||
|
||||
Lara.rightArm.flash_gun = Weapons[WEAPON_SHOTGUN].flashTime;
|
||||
|
|
|
@ -1,26 +1,24 @@
|
|||
#pragma once
|
||||
#include "items.h"
|
||||
#include "trmath.h"
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#define HARPOON_DRAW_ANIM 1
|
||||
#define ROCKET_DRAW_ANIM 0
|
||||
|
||||
#define PELLET_SCATTER ANGLE(20)
|
||||
#define HARPOON_SPEED 256
|
||||
#define HARPOON_TIME 256
|
||||
#define ROCKET_SPEED 512
|
||||
#define GRENADE_SPEED 128
|
||||
#define MAX_GRENADE_FALLSPEED 128
|
||||
#define GRENADE_YOFF 180
|
||||
#define GRENADE_ZOFF 80
|
||||
#define GRENADE_BLAST_RADIUS (WALL_SIZE * 2)
|
||||
#define CROSSBOW_DAMAGE 5
|
||||
#define CROSSBOW_AMMO1 1
|
||||
#define CROSSBOW_AMMO2 2
|
||||
#define CROSSBOW_AMMO3 2
|
||||
#define CROSSBOW_HIT_RADIUS 128
|
||||
#define CROSSBOW_EXPLODE_RADIUS 2048
|
||||
#define GRENADE_EXPLODE_RADIUS 2048
|
||||
#define PELLET_SCATTER ANGLE(20.0f)
|
||||
constexpr auto HARPOON_DRAW_ANIM = 1;
|
||||
constexpr auto ROCKET_DRAW_ANIM = 0;
|
||||
constexpr auto HARPOON_SPEED = 256;
|
||||
constexpr auto HARPOON_TIME = 256;
|
||||
constexpr auto ROCKET_SPEED = 512;
|
||||
constexpr auto GRENADE_SPEED = 128;
|
||||
constexpr auto MAX_GRENADE_FALLSPEED = 128;
|
||||
constexpr auto GRENADE_YOFF = 180;
|
||||
constexpr auto GRENADE_ZOFF = 80;
|
||||
constexpr auto CROSSBOW_DAMAGE = 5;
|
||||
constexpr auto CROSSBOW_AMMO1 = 1;
|
||||
constexpr auto CROSSBOW_AMMO2 = 2;
|
||||
constexpr auto CROSSBOW_AMMO3 = 2;
|
||||
constexpr auto CROSSBOW_HIT_RADIUS = 128;
|
||||
constexpr auto CROSSBOW_EXPLODE_RADIUS = SECTOR(2);
|
||||
constexpr auto GRENADE_EXPLODE_RADIUS = SECTOR(2);
|
||||
|
||||
void FireGrenade();
|
||||
void ControlGrenade(short itemNumber);
|
||||
|
@ -39,5 +37,5 @@ void undraw_shotgun(int weapon);
|
|||
void draw_shotgun_meshes(int weaponType);
|
||||
void FireHK(int mode);
|
||||
void FireShotgun();
|
||||
void CrossbowHitSwitchType78(ITEM_INFO* item1, ITEM_INFO* item2, signed int search);
|
||||
void DoCrossbowDamage(ITEM_INFO* item1, ITEM_INFO* item2, signed int search);
|
||||
void ready_shotgun(int weaponType);
|
||||
|
|
|
@ -12,6 +12,14 @@
|
|||
#include "sound.h"
|
||||
#include "savegame.h"
|
||||
|
||||
struct PISTOL_DEF
|
||||
{
|
||||
short objectNum;
|
||||
char draw1Anim2;
|
||||
char draw1Anim;
|
||||
char draw2Anim;
|
||||
char recoilAnim;
|
||||
};
|
||||
PISTOL_DEF PistolsTable[4] =
|
||||
{
|
||||
{ ID_LARA, 0, 0, 0, 0 },
|
||||
|
@ -56,7 +64,7 @@ void AnimatePistols(int weaponType)
|
|||
}
|
||||
|
||||
GetLaraJointPosition(&pos, LM_LHAND);
|
||||
TriggerGunSmoke(pos.x, pos.y, pos.z, 0, 0, 0, (byte)0, SmokeWeapon, SmokeCountL);
|
||||
TriggerGunSmoke(pos.x, pos.y, pos.z, 0, 0, 0, 0, SmokeWeapon, SmokeCountL);
|
||||
}
|
||||
|
||||
if (SmokeCountR)
|
||||
|
@ -83,7 +91,7 @@ void AnimatePistols(int weaponType)
|
|||
}
|
||||
|
||||
GetLaraJointPosition(&pos, LM_RHAND);
|
||||
TriggerGunSmoke(pos.x, pos.y, pos.z, 0, 0, 0, (byte)0, SmokeWeapon, SmokeCountR);
|
||||
TriggerGunSmoke(pos.x, pos.y, pos.z, 0, 0, 0, 0, SmokeWeapon, SmokeCountR);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -103,7 +111,7 @@ void AnimatePistols(int weaponType)
|
|||
angleRight[0] = Lara.rightArm.yRot + LaraItem->pos.yRot;
|
||||
angleRight[1] = Lara.rightArm.xRot;
|
||||
|
||||
if (FireWeapon(weaponType, Lara.target, LaraItem, angleRight))
|
||||
if (FireWeapon(weaponType, Lara.target, LaraItem, angleRight) != FW_NOAMMO)
|
||||
{
|
||||
SmokeCountR = 28;
|
||||
SmokeWeapon = weaponType;
|
||||
|
@ -173,7 +181,7 @@ void AnimatePistols(int weaponType)
|
|||
angleLeft[0] = Lara.leftArm.yRot + LaraItem->pos.yRot;
|
||||
angleLeft[1] = Lara.leftArm.xRot;
|
||||
|
||||
if (FireWeapon(weaponType, Lara.target, LaraItem, angleLeft))
|
||||
if (FireWeapon(weaponType, Lara.target, LaraItem, angleLeft) != FW_NOAMMO)
|
||||
{
|
||||
if (weaponType == WEAPON_REVOLVER)
|
||||
{
|
||||
|
@ -367,8 +375,8 @@ void ready_pistols(int weaponType)
|
|||
Lara.rightArm.frameNumber = 0;
|
||||
Lara.leftArm.frameNumber = 0;
|
||||
Lara.target = NULL;
|
||||
Lara.rightArm.lock = 0;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.rightArm.lock = false;
|
||||
Lara.leftArm.lock = false;
|
||||
Lara.rightArm.frameBase = Objects[WeaponObject(weaponType)].frameBase;
|
||||
Lara.leftArm.frameBase = Objects[WeaponObject(weaponType)].frameBase;
|
||||
}
|
||||
|
@ -443,8 +451,8 @@ void undraw_pistols(int weaponType)
|
|||
Lara.leftArm.frameNumber = 0;
|
||||
Lara.rightArm.frameNumber = 0;
|
||||
Lara.target = NULL;
|
||||
Lara.rightArm.lock = 0;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.rightArm.lock = false;
|
||||
Lara.leftArm.lock = false;
|
||||
}
|
||||
|
||||
if (!(TrInput & IN_LOOK))
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
|
||||
void AnimatePistols(int weaponType);
|
||||
void PistolHandler(int weaponType);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "collide.h"
|
||||
|
||||
short GetClimbTrigger(int x, int y, int z, short roomNumber);
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
#include "framework.h"
|
||||
#include "larafire.h"
|
||||
#include "items.h"
|
||||
#include "Lara.h"
|
||||
#include "laraflar.h"
|
||||
#include "lara1gun.h"
|
||||
#include "lara2gun.h"
|
||||
#include "camera.h"
|
||||
#include "GameFlowScript.h"
|
||||
#include "objects.h"
|
||||
#include "effect.h"
|
||||
#include "sphere.h"
|
||||
|
@ -19,6 +17,7 @@
|
|||
#include "input.h"
|
||||
#include "sound.h"
|
||||
#include "savegame.h"
|
||||
#include "GameFlowScript.h"
|
||||
|
||||
WEAPON_INFO Weapons[NUM_WEAPONS] =
|
||||
{
|
||||
|
@ -317,9 +316,7 @@ void SmashItem(short itemNum) // (F) (D)
|
|||
{
|
||||
ITEM_INFO* item = &Items[itemNum];
|
||||
if (item->objectNumber >= ID_SMASH_OBJECT1 && item->objectNumber <= ID_SMASH_OBJECT8)
|
||||
{
|
||||
SmashObject(itemNum);
|
||||
}
|
||||
}
|
||||
|
||||
void LaraGun() // (F) (D)
|
||||
|
@ -696,7 +693,7 @@ void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int flag)
|
|||
if (creature && item != LaraItem)
|
||||
creature->hurtByLara = true;
|
||||
|
||||
if (hitPos)
|
||||
if (hitPos != nullptr)
|
||||
{
|
||||
if (obj->hitEffect)
|
||||
{
|
||||
|
@ -715,7 +712,8 @@ void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int flag)
|
|||
}
|
||||
}
|
||||
}
|
||||
if (!obj->undead || flag || item->hitPoints == -16384)
|
||||
|
||||
if (!obj->undead || flag || item->hitPoints == NOT_TARGETABLE)
|
||||
{
|
||||
if (item->hitPoints > 0 && item->hitPoints <= damage)
|
||||
++Savegame.Level.Kills;
|
||||
|
@ -723,50 +721,42 @@ void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int flag)
|
|||
}
|
||||
}
|
||||
|
||||
int DetectCrouchWhenFiring(ITEM_INFO* src, WEAPON_INFO* weapon)
|
||||
{
|
||||
if (src->currentAnimState == STATE_LARA_CROUCH_IDLE || src->currentAnimState == STATE_LARA_CROUCH_TURN_LEFT || src->currentAnimState == STATE_LARA_CROUCH_TURN_RIGHT)
|
||||
return STEP_SIZE;
|
||||
else
|
||||
return int(weapon->gunHeight);
|
||||
}
|
||||
|
||||
int FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles) // (F) (D)
|
||||
FIREWEAPON_TYPE FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles) // (F) (D)
|
||||
{
|
||||
short* ammo = GetAmmo(weaponType);
|
||||
if (!*ammo)
|
||||
return 0;
|
||||
return FW_NOAMMO;
|
||||
if (*ammo != -1)
|
||||
(*ammo)--;
|
||||
|
||||
WEAPON_INFO* weapon = &Weapons[weaponType];
|
||||
int r;
|
||||
|
||||
PHD_3DPOS pos;
|
||||
pos.xPos = 0;
|
||||
pos.yPos = 0;
|
||||
pos.zPos = 0;
|
||||
GetLaraJointPosition((PHD_VECTOR*)&pos, LM_RHAND);
|
||||
PHD_VECTOR pos;
|
||||
pos.x = 0;
|
||||
pos.y = 0;
|
||||
pos.z = 0;
|
||||
GetLaraJointPosition(&pos, LM_RHAND);
|
||||
|
||||
pos.xPos = src->pos.xPos;
|
||||
pos.zPos = src->pos.zPos;
|
||||
|
||||
pos.xRot = angles[1] + (GetRandomControl() - 16384) * weapon->shotAccuracy / 65536;
|
||||
pos.yRot = angles[0] + (GetRandomControl() - 16384) * weapon->shotAccuracy / 65536;
|
||||
pos.zRot = 0;
|
||||
pos.x = src->pos.xPos;
|
||||
pos.z = src->pos.zPos;
|
||||
PHD_3DPOS rotation;
|
||||
rotation.xRot = angles[1] + (GetRandomControl() - 0x4000) * weapon->shotAccuracy / 0x10000;
|
||||
rotation.yRot = angles[0] + (GetRandomControl() - 0x4000) * weapon->shotAccuracy / 0x10000;
|
||||
rotation.zRot = 0;
|
||||
|
||||
// Calculate ray from rotation angles
|
||||
float x = sin(TO_RAD(pos.yRot)) * cos(TO_RAD(pos.xRot));
|
||||
float y = -sin(TO_RAD(pos.xRot));
|
||||
float z = cos(TO_RAD(pos.yRot)) * cos(TO_RAD(pos.xRot));
|
||||
float x = sin(TO_RAD(rotation.yRot)) * cos(TO_RAD(rotation.xRot));
|
||||
float y = -sin(TO_RAD(rotation.xRot));
|
||||
float z = cos(TO_RAD(rotation.yRot)) * cos(TO_RAD(rotation.xRot));
|
||||
Vector3 direction = Vector3(x, y, z);
|
||||
direction.Normalize();
|
||||
Vector3 source = Vector3(pos.xPos, pos.yPos, pos.zPos);
|
||||
Vector3 destination = source + direction * 1024.0f;
|
||||
Vector3 source = Vector3(pos.x, pos.y, pos.z);
|
||||
Vector3 destination = source + direction * float(weapon->targetDist);
|
||||
Ray ray = Ray(source, direction);
|
||||
|
||||
int num = GetSpheres(target, CreatureSpheres, SPHERES_SPACE_WORLD, Matrix::Identity);
|
||||
int best = -1;
|
||||
int best = NO_ITEM;
|
||||
float bestDistance = FLT_MAX;
|
||||
|
||||
for (int i = 0; i < num; i++)
|
||||
|
@ -787,34 +777,29 @@ int FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles)
|
|||
Lara.fired = true;
|
||||
|
||||
GAME_VECTOR vSrc;
|
||||
vSrc.x = pos.xPos;
|
||||
vSrc.y = pos.yPos;
|
||||
vSrc.z = pos.zPos;
|
||||
vSrc.x = pos.x;
|
||||
vSrc.y = pos.y;
|
||||
vSrc.z = pos.z;
|
||||
|
||||
short roomNumber = src->roomNumber;
|
||||
GetFloor(pos.xPos, pos.yPos, pos.zPos, &roomNumber);
|
||||
GetFloor(pos.x, pos.y, pos.z, &roomNumber);
|
||||
vSrc.roomNumber = roomNumber;
|
||||
|
||||
if (best < 0)
|
||||
{
|
||||
GAME_VECTOR vDest;
|
||||
|
||||
vDest.x = destination.x;
|
||||
vDest.y = destination.y;
|
||||
vDest.z = destination.z;
|
||||
|
||||
GetTargetOnLOS(&vSrc, &vDest, 0, 1);
|
||||
|
||||
return -1;
|
||||
GetTargetOnLOS(&vSrc, &vDest, FALSE, TRUE);
|
||||
return FW_MISS;
|
||||
}
|
||||
else
|
||||
{
|
||||
Savegame.Game.AmmoHits++;
|
||||
|
||||
GAME_VECTOR vDest;
|
||||
|
||||
destination = source + direction * bestDistance;
|
||||
|
||||
GAME_VECTOR vDest;
|
||||
vDest.x = destination.x;
|
||||
vDest.y = destination.y;
|
||||
vDest.z = destination.z;
|
||||
|
@ -857,11 +842,11 @@ int FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles)
|
|||
}
|
||||
else
|
||||
{*/
|
||||
if (!GetTargetOnLOS(&vSrc, &vDest, 0, 1))
|
||||
HitTarget(target, &vDest, weapon->damage, 0);
|
||||
if (!GetTargetOnLOS(&vSrc, &vDest, FALSE, TRUE))
|
||||
HitTarget(target, &vDest, weapon->damage, NULL);
|
||||
//}
|
||||
|
||||
return 1;
|
||||
return FW_MAYBEHIT;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -887,42 +872,43 @@ void LaraTargetInfo(WEAPON_INFO* weapon) // (F) (D)
|
|||
{
|
||||
if (!Lara.target)
|
||||
{
|
||||
Lara.rightArm.lock = 0;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.rightArm.lock = false;
|
||||
Lara.leftArm.lock = false;
|
||||
Lara.targetAngles[1] = 0;
|
||||
Lara.targetAngles[0] = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
GAME_VECTOR pos;
|
||||
|
||||
PHD_VECTOR pos;
|
||||
pos.x = 0;
|
||||
pos.y = 0;
|
||||
pos.z = 0;
|
||||
GetLaraJointPosition((PHD_VECTOR*)&pos, LM_RHAND);
|
||||
GetLaraJointPosition(&pos, LM_RHAND);
|
||||
|
||||
pos.x = LaraItem->pos.xPos;
|
||||
pos.z = LaraItem->pos.zPos;
|
||||
pos.roomNumber = LaraItem->roomNumber;
|
||||
GAME_VECTOR src;
|
||||
src.x = LaraItem->pos.xPos;
|
||||
src.y = pos.y;
|
||||
src.z = LaraItem->pos.zPos;
|
||||
src.roomNumber = LaraItem->roomNumber;
|
||||
|
||||
GAME_VECTOR targetPoint;
|
||||
find_target_point(Lara.target, &targetPoint);
|
||||
|
||||
short angles[2];
|
||||
phd_GetVectorAngles(targetPoint.x - pos.x, targetPoint.y - pos.y, targetPoint.z - pos.z, angles);
|
||||
phd_GetVectorAngles(targetPoint.x - src.x, targetPoint.y - src.y, targetPoint.z - src.z, angles);
|
||||
|
||||
angles[0] -= LaraItem->pos.yRot;
|
||||
angles[1] -= LaraItem->pos.xRot;
|
||||
|
||||
if (LOS(&pos, &targetPoint))
|
||||
if (LOS(&src, &targetPoint))
|
||||
{
|
||||
if (angles[0] >= weapon->lockAngles[0]
|
||||
&& angles[0] <= weapon->lockAngles[1]
|
||||
&& angles[1] >= weapon->lockAngles[2]
|
||||
&& angles[1] <= weapon->lockAngles[3])
|
||||
{
|
||||
Lara.rightArm.lock = 1;
|
||||
Lara.leftArm.lock = 1;
|
||||
Lara.rightArm.lock = true;
|
||||
Lara.leftArm.lock = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -932,7 +918,7 @@ void LaraTargetInfo(WEAPON_INFO* weapon) // (F) (D)
|
|||
angles[0] > weapon->leftAngles[1] ||
|
||||
angles[1] < weapon->leftAngles[2] ||
|
||||
angles[1] > weapon->leftAngles[3]))
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.leftArm.lock = false;
|
||||
}
|
||||
|
||||
if (Lara.rightArm.lock)
|
||||
|
@ -941,37 +927,36 @@ void LaraTargetInfo(WEAPON_INFO* weapon) // (F) (D)
|
|||
angles[0] > weapon->rightAngles[1] ||
|
||||
angles[1] < weapon->rightAngles[2] ||
|
||||
angles[1] > weapon->rightAngles[3]))
|
||||
Lara.rightArm.lock = 0;
|
||||
Lara.rightArm.lock = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Lara.rightArm.lock = 0;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.rightArm.lock = false;
|
||||
Lara.leftArm.lock = false;
|
||||
}
|
||||
|
||||
Lara.targetAngles[0] = angles[0];
|
||||
Lara.targetAngles[1] = angles[1];
|
||||
}
|
||||
|
||||
int CheckForHoldingState(int state) // (F) (D)
|
||||
bool CheckForHoldingState(int state) // (F) (D)
|
||||
{
|
||||
short* holdState = HoldStates;
|
||||
|
||||
#if 0
|
||||
if (Lara.ExtraAnim)
|
||||
return 0;
|
||||
if (Lara.ExtraAnim != NO_ITEM)
|
||||
return false;
|
||||
#endif
|
||||
|
||||
short* holdState = HoldStates;
|
||||
while (*holdState >= 0)
|
||||
{
|
||||
if (state == *holdState)
|
||||
return 1;
|
||||
return true;
|
||||
holdState++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
void LaraGetNewTarget(WEAPON_INFO* winfo) // (F) (D)
|
||||
|
@ -988,10 +973,15 @@ void LaraGetNewTarget(WEAPON_INFO* winfo) // (F) (D)
|
|||
return;
|
||||
}
|
||||
bestItem = NULL;
|
||||
bestYrot = 0x7FFF;
|
||||
bestDistance = 0x7FFFFFFF;
|
||||
bestYrot = MAXSHORT;
|
||||
bestDistance = MAXINT;
|
||||
PHD_VECTOR handpos;
|
||||
handpos.x = 0;
|
||||
handpos.y = 0;
|
||||
handpos.z = 0;
|
||||
GetLaraJointPosition(&handpos, LM_RHAND);
|
||||
source.x = LaraItem->pos.xPos;
|
||||
source.y = LaraItem->pos.yPos - 650;
|
||||
source.y = LaraItem->pos.yPos - handpos.y;
|
||||
source.z = LaraItem->pos.zPos;
|
||||
source.roomNumber = LaraItem->roomNumber;
|
||||
maxDistance = winfo->targetDist;
|
||||
|
@ -1034,6 +1024,7 @@ void LaraGetNewTarget(WEAPON_INFO* winfo) // (F) (D)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
TargetList[targets] = NULL;
|
||||
if (!TargetList[0])
|
||||
{
|
||||
|
@ -1086,12 +1077,14 @@ void LaraGetNewTarget(WEAPON_INFO* winfo) // (F) (D)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Lara.target != LastTargets[0])
|
||||
{
|
||||
for (slot = 7; slot > 0; --slot)
|
||||
LastTargets[slot] = LastTargets[slot - 1];
|
||||
LastTargets[0] = Lara.target;
|
||||
}
|
||||
|
||||
LaraTargetInfo(winfo);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,28 @@
|
|||
#pragma once
|
||||
#include "lara.h"
|
||||
|
||||
#include "global.h"
|
||||
typedef enum FIREWEAPON_TYPE
|
||||
{
|
||||
FW_MISS = -1,
|
||||
FW_NOAMMO = 0,
|
||||
FW_MAYBEHIT = 1
|
||||
};
|
||||
|
||||
typedef struct WEAPON_INFO
|
||||
{
|
||||
short lockAngles[4];
|
||||
short leftAngles[4];
|
||||
short rightAngles[4];
|
||||
short aimSpeed;
|
||||
short shotAccuracy;
|
||||
short gunHeight;
|
||||
short targetDist;
|
||||
byte damage;
|
||||
byte recoilFrame;
|
||||
byte flashTime;
|
||||
byte drawFrame;
|
||||
short sampleNum;
|
||||
};
|
||||
extern WEAPON_INFO Weapons[NUM_WEAPONS];
|
||||
|
||||
void SmashItem(short itemNum);
|
||||
|
@ -12,9 +33,9 @@ void InitialiseNewWeapon();
|
|||
int WeaponObjectMesh(int weaponType);
|
||||
void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm);
|
||||
void HitTarget(ITEM_INFO* item, GAME_VECTOR* hitPos, int damage, int flag);
|
||||
int FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles);
|
||||
FIREWEAPON_TYPE FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles);
|
||||
void find_target_point(ITEM_INFO* item, GAME_VECTOR* target);
|
||||
void LaraTargetInfo(WEAPON_INFO* weapon);
|
||||
int CheckForHoldingState(int state);
|
||||
bool CheckForHoldingState(int state);
|
||||
void LaraGetNewTarget(WEAPON_INFO* winfo);
|
||||
void DoProperDetection(short itemNumber, int x, int y, int z, int xv, int yv, int zv);
|
|
@ -88,8 +88,8 @@ void ready_flare() // (F) (D)
|
|||
Lara.rightArm.zRot = 0;
|
||||
Lara.rightArm.yRot = 0;
|
||||
Lara.rightArm.xRot = 0;
|
||||
Lara.rightArm.lock = 0;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.rightArm.lock = false;
|
||||
Lara.leftArm.lock = false;
|
||||
Lara.target = NULL;
|
||||
}
|
||||
|
||||
|
@ -138,8 +138,8 @@ void undraw_flare() // (F) (D)
|
|||
InitialiseNewWeapon();
|
||||
|
||||
Lara.target = NULL;
|
||||
Lara.rightArm.lock = 0;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.rightArm.lock = false;
|
||||
Lara.leftArm.lock = false;
|
||||
LaraItem->animNumber = ANIMATION_LARA_STAY_SOLID;
|
||||
Lara.flareFrame = Anims[LaraItem->animNumber].frameBase;
|
||||
LaraItem->frameNumber = Anims[LaraItem->animNumber].frameBase;
|
||||
|
@ -196,8 +196,8 @@ void undraw_flare() // (F) (D)
|
|||
|
||||
Lara.flareControlLeft = false;
|
||||
Lara.target = NULL;
|
||||
Lara.rightArm.lock = 0;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.rightArm.lock = false;
|
||||
Lara.leftArm.lock = false;
|
||||
Lara.flareFrame = 0;
|
||||
}
|
||||
else if (frame2 < 21)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
|
||||
void FlareControl(short item_number);
|
||||
void ready_flare();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "framework.h"
|
||||
#include "laramisc.h"
|
||||
#include "global.h"
|
||||
|
||||
#include "level.h"
|
||||
#include "setup.h"
|
||||
#include "GameFlowScript.h"
|
||||
|
@ -707,8 +707,8 @@ void LaraInitialiseMeshes() // (AF) (D)
|
|||
Lara.leftArm.frameNumber = 0;
|
||||
Lara.rightArm.frameNumber = 0;
|
||||
Lara.target = NULL;
|
||||
Lara.rightArm.lock = 0;
|
||||
Lara.leftArm.lock = 0;
|
||||
Lara.rightArm.lock = false;
|
||||
Lara.leftArm.lock = false;
|
||||
}
|
||||
|
||||
void InitialiseLara(int restore)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "collide.h"
|
||||
|
||||
extern COLL_INFO coll;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#include "Lara.h"
|
||||
|
||||
void _cdecl lara_col_surftread(ITEM_INFO* item, COLL_INFO* coll);
|
||||
|
|
|
@ -16,6 +16,14 @@
|
|||
#include "input.h"
|
||||
#include "sound.h"
|
||||
|
||||
typedef struct SUBSUIT_INFO
|
||||
{
|
||||
short XRot;
|
||||
short dXRot;
|
||||
short XRotVel;
|
||||
short Vel[2];
|
||||
short YVel;
|
||||
};
|
||||
SUBSUIT_INFO Subsuit;
|
||||
byte SubHitCount = 0;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "collide.h"
|
||||
|
||||
void LaraWaterCurrent(COLL_INFO* coll);
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "global.h"
|
||||
#include "box.h"
|
||||
|
||||
constexpr auto NUM_SLOTS = 32;
|
||||
extern int SlotsUsed;
|
||||
extern CREATURE_INFO* BaddieSlots;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "framework.h"
|
||||
#include "malloc.h"
|
||||
#include "global.h"
|
||||
|
||||
|
||||
char* malloc_buffer;
|
||||
int malloc_size;
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "box.h"
|
||||
|
||||
#define CHK_ANY(var, flag) (var & flag) != 0
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "global.h"
|
||||
|
||||
|
||||
void ShootAtLara(FX_INFO* fx);
|
||||
void ControlMissile(short fxNumber);
|
||||
|
|
|
@ -634,7 +634,7 @@ void AnimatingControl(short itemNumber)
|
|||
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||
RemoveActiveItem(itemNumber);
|
||||
item->aiBits = 0;
|
||||
item->status = ITEM_INACTIVE;
|
||||
item->status = ITEM_NOT_ACTIVE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "collide.h"
|
||||
|
||||
extern OBJECT_TEXTURE* WaterfallTextures[6];
|
||||
|
|
|
@ -962,7 +962,107 @@ typedef enum GAME_OBJECT_ID
|
|||
ID_NUMBER_OBJECTS, // NEED TO BE AT THE END !!!!
|
||||
};
|
||||
|
||||
#define NUM_PUZZLES (ID_PUZZLE_ITEM16 - ID_PUZZLE_ITEM1 + 1)
|
||||
#define NUM_KEYS (ID_KEY_ITEM16 - ID_KEY_ITEM1 + 1)
|
||||
#define NUM_PICKUPS (ID_PICKUP_ITEM16 - ID_PICKUP_ITEM1 + 1)
|
||||
#define NUM_EXAMINES (ID_EXAMINE8 - ID_EXAMINE1 + 1)
|
||||
typedef enum SPRITE_TYPES
|
||||
{
|
||||
SPR_FIRE0,
|
||||
SPR_FIRE1,
|
||||
SPR_FIRE2,
|
||||
SPR_FIRE3,
|
||||
SPR_SPLASH1,
|
||||
SPR_SPLASH2,
|
||||
SPR_SPLASH3,
|
||||
SPR_SPLASH4,
|
||||
SPR_SPLASH,
|
||||
SPR_RIPPLES,
|
||||
SPR_LENSFLARE,
|
||||
SPR_LENSFLARE_LIGHT,
|
||||
SPR_BULLETIMPACT,
|
||||
SPR_BUBBLES,
|
||||
SPR_UNDERWATERDUST,
|
||||
SPR_BLOOD,
|
||||
SPR_EMPTY1,
|
||||
SPR_UNKNOWN1,
|
||||
SPR_EMPTY2,
|
||||
SPR_BACKGROUND,
|
||||
SPR_GUI_UPLEFT,
|
||||
SPR_GUI_UPRIGHT,
|
||||
SPR_GUI_DOWNLEFT,
|
||||
SPR_GUI_DOWNRIGHT,
|
||||
SPR_GUI_DOWN,
|
||||
SPR_GUI_UP,
|
||||
SPR_GUI_LEFT,
|
||||
SPR_GUI_RIGHT,
|
||||
SPR_LIGHTHING
|
||||
};
|
||||
|
||||
typedef enum FLOOR_TYPES
|
||||
{
|
||||
FLOOR_TYPE,
|
||||
DOOR_TYPE,
|
||||
TILT_TYPE,
|
||||
ROOF_TYPE,
|
||||
TRIGGER_TYPE,
|
||||
LAVA_TYPE,
|
||||
CLIMB_TYPE,
|
||||
SPLIT1,
|
||||
SPLIT2,
|
||||
SPLIT3,
|
||||
SPLIT4,
|
||||
NOCOLF1T,
|
||||
NOCOLF1B,
|
||||
NOCOLF2T,
|
||||
NOCOLF2B,
|
||||
NOCOLC1T,
|
||||
NOCOLC1B,
|
||||
NOCOLC2T,
|
||||
NOCOLC2B,
|
||||
MONKEY_TYPE,
|
||||
TRIGTRIGGER_TYPE,
|
||||
MINER_TYPE
|
||||
};
|
||||
|
||||
typedef enum TRIGGER_TYPES
|
||||
{
|
||||
TRIGGER,
|
||||
PAD,
|
||||
SWITCH,
|
||||
KEY,
|
||||
PICKUP,
|
||||
HEAVY,
|
||||
ANTIPAD,
|
||||
COMBAT,
|
||||
DUMMY,
|
||||
ANTITRIGGER,
|
||||
HEAVYSWITCH,
|
||||
HEAVYANTITRIGGER,
|
||||
MONKEY,
|
||||
SKELETON_T,
|
||||
TIGHTROPE_T,
|
||||
CRAWLDUCK_T,
|
||||
CLIMB_T,
|
||||
};
|
||||
|
||||
typedef enum TRIGOBJECTS_TYPES
|
||||
{
|
||||
TO_OBJECT,
|
||||
TO_CAMERA,
|
||||
TO_SINK,
|
||||
TO_FLIPMAP,
|
||||
TO_FLIPON,
|
||||
TO_FLIPOFF,
|
||||
TO_TARGET,
|
||||
TO_FINISH,
|
||||
TO_CD,
|
||||
TO_FLIPEFFECT,
|
||||
TO_SECRET,
|
||||
TO_LUA_SCRIPT,
|
||||
TO_FLYBY,
|
||||
TO_CUTSCENE
|
||||
};
|
||||
|
||||
typedef enum FLOORDATA_MASKS
|
||||
{
|
||||
FD_MASK_FUNCTION = 0x1F,
|
||||
FD_MASK_SUBFUNCTION = 0x7F00,
|
||||
FD_MASK_END_DATA = 0x8000
|
||||
};
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "box.h"
|
||||
|
||||
int ShotLara(ITEM_INFO* item, AI_INFO* info, BITE_INFO* gun, short extra_rotation, int damage);
|
||||
|
|
227
TR5Main/Game/phd_global.h
Normal file
227
TR5Main/Game/phd_global.h
Normal file
|
@ -0,0 +1,227 @@
|
|||
#pragma once
|
||||
|
||||
typedef struct PHD_VECTOR
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
|
||||
PHD_VECTOR()
|
||||
{
|
||||
this->x = 0;
|
||||
this->y = 0;
|
||||
this->z = 0;
|
||||
}
|
||||
|
||||
PHD_VECTOR(int xpos, int ypos, int zpos)
|
||||
{
|
||||
this->x = xpos;
|
||||
this->y = ypos;
|
||||
this->z = zpos;
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct PHD_3DPOS
|
||||
{
|
||||
int xPos;
|
||||
int yPos;
|
||||
int zPos;
|
||||
short xRot;
|
||||
short yRot;
|
||||
short zRot;
|
||||
|
||||
PHD_3DPOS()
|
||||
{
|
||||
this->xPos = 0;
|
||||
this->yPos = 0;
|
||||
this->zPos = 0;
|
||||
this->xRot = 0;
|
||||
this->yRot = 0;
|
||||
this->zRot = 0;
|
||||
}
|
||||
|
||||
PHD_3DPOS(int x, int y, int z)
|
||||
{
|
||||
this->xPos = x;
|
||||
this->yPos = y;
|
||||
this->zPos = z;
|
||||
this->xRot = 0;
|
||||
this->yRot = 0;
|
||||
this->zRot = 0;
|
||||
}
|
||||
|
||||
PHD_3DPOS(short xrot, short yrot, short zrot)
|
||||
{
|
||||
this->xPos = 0;
|
||||
this->yPos = 0;
|
||||
this->zPos = 0;
|
||||
this->xRot = xrot;
|
||||
this->yRot = yrot;
|
||||
this->zRot = zrot;
|
||||
}
|
||||
|
||||
PHD_3DPOS(int x, int y, int z, short xrot, short yrot, short zrot)
|
||||
{
|
||||
this->xPos = x;
|
||||
this->yPos = y;
|
||||
this->zPos = z;
|
||||
this->xRot = xrot;
|
||||
this->yRot = yrot;
|
||||
this->zRot = zrot;
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct GAME_VECTOR
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
short roomNumber;
|
||||
short boxNumber;
|
||||
|
||||
GAME_VECTOR()
|
||||
{
|
||||
this->x = 0;
|
||||
this->y = 0;
|
||||
this->z = 0;
|
||||
this->roomNumber = 0;
|
||||
this->boxNumber = 0;
|
||||
}
|
||||
|
||||
GAME_VECTOR(int xpos, int ypos, int zpos)
|
||||
{
|
||||
this->x = xpos;
|
||||
this->y = ypos;
|
||||
this->z = zpos;
|
||||
this->roomNumber = 0;
|
||||
this->boxNumber = 0;
|
||||
}
|
||||
|
||||
GAME_VECTOR(int xpos, int ypos, int zpos, short roomNumber)
|
||||
{
|
||||
this->x = xpos;
|
||||
this->y = ypos;
|
||||
this->z = zpos;
|
||||
this->roomNumber = roomNumber;
|
||||
this->boxNumber = 0;
|
||||
}
|
||||
|
||||
GAME_VECTOR(int xpos, int ypos, int zpos, short roomNumber, short boxNumber)
|
||||
{
|
||||
this->x = xpos;
|
||||
this->y = ypos;
|
||||
this->z = zpos;
|
||||
this->roomNumber = roomNumber;
|
||||
this->boxNumber = boxNumber;
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct OBJECT_VECTOR
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
short data;
|
||||
short flags;
|
||||
|
||||
OBJECT_VECTOR()
|
||||
{
|
||||
this->x = 0;
|
||||
this->y = 0;
|
||||
this->z = 0;
|
||||
this->data = NULL;
|
||||
this->flags = NULL;
|
||||
}
|
||||
|
||||
OBJECT_VECTOR(int xpos, int ypos, int zpos)
|
||||
{
|
||||
this->x = xpos;
|
||||
this->y = ypos;
|
||||
this->z = zpos;
|
||||
this->data = NULL;
|
||||
this->flags = NULL;
|
||||
}
|
||||
|
||||
OBJECT_VECTOR(int xpos, int ypos, int zpos, short newdata)
|
||||
{
|
||||
this->x = xpos;
|
||||
this->y = ypos;
|
||||
this->z = zpos;
|
||||
this->data = newdata;
|
||||
this->flags = NULL;
|
||||
}
|
||||
|
||||
OBJECT_VECTOR(int xpos, int ypos, int zpos, short flags, bool isFlags) // use isFlags to use flag instead of newdata !
|
||||
{
|
||||
UNREFERENCED_PARAMETER(isFlags);
|
||||
this->x = xpos;
|
||||
this->y = ypos;
|
||||
this->z = zpos;
|
||||
this->data = NULL;
|
||||
this->flags = flags;
|
||||
}
|
||||
|
||||
OBJECT_VECTOR(int xpos, int ypos, int zpos, short newdata, short newflags)
|
||||
{
|
||||
this->x = xpos;
|
||||
this->y = ypos;
|
||||
this->z = zpos;
|
||||
this->data = newdata;
|
||||
this->flags = newflags;
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct VECTOR
|
||||
{
|
||||
int vx;
|
||||
int vy;
|
||||
int vz;
|
||||
int pad;
|
||||
};
|
||||
|
||||
typedef struct SVECTOR
|
||||
{
|
||||
short vx;
|
||||
short vy;
|
||||
short vz;
|
||||
short pad;
|
||||
};
|
||||
|
||||
typedef struct CVECTOR
|
||||
{
|
||||
byte r;
|
||||
byte g;
|
||||
byte b;
|
||||
byte cd;
|
||||
};
|
||||
|
||||
typedef struct TR_VERTEX
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
};
|
||||
|
||||
typedef enum MATRIX_ARRAY_VALUE
|
||||
{
|
||||
M00, M01, M02, M03,
|
||||
M10, M11, M12, M13,
|
||||
M20, M21, M22, M23
|
||||
};
|
||||
|
||||
typedef struct MATRIX3D
|
||||
{
|
||||
short m00;
|
||||
short m01;
|
||||
short m02;
|
||||
short m10;
|
||||
short m11;
|
||||
short m12;
|
||||
short m20;
|
||||
short m21;
|
||||
short m22;
|
||||
short pad;
|
||||
int tx;
|
||||
int ty;
|
||||
int tz;
|
||||
};
|
|
@ -1,5 +1,6 @@
|
|||
#include "framework.h"
|
||||
#include "pickup.h"
|
||||
#include "phd_global.h"
|
||||
#include "lara.h"
|
||||
#include "draw.h"
|
||||
#include "inventory.h"
|
||||
|
@ -29,43 +30,43 @@ static short PickUpBounds[12] = // offset 0xA1338
|
|||
0xFF00, 0x0100, 0xFF38, 0x00C8, 0xFF00, 0x0100, 0xF8E4, 0x071C, 0x0000, 0x0000,
|
||||
0x0000, 0x0000
|
||||
};
|
||||
static PHD_VECTOR PickUpPosition = { 0, 0, 0xFFFFFF9C }; // offset 0xA1350
|
||||
static PHD_VECTOR PickUpPosition(0, 0, -100); // offset 0xA1350
|
||||
static short HiddenPickUpBounds[12] = // offset 0xA135C
|
||||
{
|
||||
0xFF00, 0x0100, 0xFF9C, 0x0064, 0xFCE0, 0xFF00, 0xF8E4, 0x071C, 0xEAAC, 0x1554,
|
||||
0x0000, 0x0000
|
||||
};
|
||||
static PHD_VECTOR HiddenPickUpPosition = { 0, 0, 0xFFFFFD4E }; // offset 0xA1374
|
||||
static PHD_VECTOR HiddenPickUpPosition(0, 0, -690); // offset 0xA1374
|
||||
static short CrowbarPickUpBounds[12] = // offset 0xA1380
|
||||
{
|
||||
0xFF00, 0x0100, 0xFF9C, 0x0064, 0x00C8, 0x0200, 0xF8E4, 0x071C, 0xEAAC, 0x1554,
|
||||
0x0000, 0x0000
|
||||
};
|
||||
static PHD_VECTOR CrowbarPickUpPosition = { 0, 0, 0xD7 }; // offset 0xA1398
|
||||
static PHD_VECTOR CrowbarPickUpPosition(0, 0, 215); // offset 0xA1398
|
||||
static short JobyCrowPickUpBounds[12] = // offset 0xA13A4
|
||||
{
|
||||
0xFE00, 0x0000, 0xFF9C, 0x0064, 0x0000, 0x0200, 0xF8E4, 0x071C, 0xEAAC, 0x1554,
|
||||
0x0000, 0x0000
|
||||
};
|
||||
static PHD_VECTOR JobyCrowPickUpPosition = { 0xFFFFFF20, 0, 0xF0 }; // offset 0xA13BC
|
||||
static PHD_VECTOR JobyCrowPickUpPosition(-224, 0, 240); // offset 0xA13BC
|
||||
static short PlinthPickUpBounds[12] = // offset 0xA13C8
|
||||
{
|
||||
0xFF00, 0x0100, 0xFD80, 0x0280, 0xFE01, 0x0000, 0xF8E4, 0x071C, 0xEAAC, 0x1554,
|
||||
0x0000, 0x0000
|
||||
};
|
||||
static PHD_VECTOR PlinthPickUpPosition = { 0, 0, 0xFFFFFE34 }; // offset 0xA13E0
|
||||
static PHD_VECTOR PlinthPickUpPosition(0, 0, -460); // offset 0xA13E0
|
||||
static short PickUpBoundsUW[12] = // offset 0xA13EC
|
||||
{
|
||||
0xFE00, 0x0200, 0xFE00, 0x0200, 0xFE00, 0x0200, 0xE002, 0x1FFE, 0xE002, 0x1FFE,
|
||||
0xE002, 0x1FFE
|
||||
};
|
||||
static PHD_VECTOR PickUpPositionUW = { 0, 0xFFFFFF38, 0xFFFFFEA2 }; // offset 0xA1404
|
||||
static PHD_VECTOR PickUpPositionUW(0, -200, -350); // offset 0xA1404
|
||||
static short KeyHoleBounds[12] = // offset 0xA1410
|
||||
{
|
||||
0xFF00, 0x0100, 0x0000, 0x0000, 0x0000, 0x019C, 0xF8E4, 0x071C, 0xEAAC, 0x1554,
|
||||
0xF8E4, 0x071C
|
||||
};
|
||||
static PHD_VECTOR KeyHolePosition = { 0, 0, 0x138 }; // offset 0xA1428
|
||||
static PHD_VECTOR KeyHolePosition(0, 0, 312); // offset 0xA1428
|
||||
static short PuzzleBounds[12] = // offset 0xA1434
|
||||
{
|
||||
0x0000, 0x0000, 0xFF00, 0x0100, 0x0000, 0x0000, 0xF8E4, 0x071C, 0xEAAC, 0x1554,
|
||||
|
@ -76,7 +77,7 @@ static short SOBounds[12] = // offset 0xA144C
|
|||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF8E4, 0x071C, 0xEAAC, 0x1554,
|
||||
0xF8E4, 0x071C
|
||||
};
|
||||
static PHD_VECTOR SOPos = { 0, 0, 0 }; // offset 0xA1464
|
||||
static PHD_VECTOR SOPos(0, 0, 0); // offset 0xA1464
|
||||
short SearchCollectFrames[4] =
|
||||
{
|
||||
0x00B4, 0x0064, 0x0099, 0x0053
|
||||
|
@ -108,7 +109,7 @@ void PickedUpObject(short objectNumber)
|
|||
switch (objectNumber)
|
||||
{
|
||||
case ID_UZI_ITEM:
|
||||
if (!(Lara.Weapons[WEAPON_UZI].Present))
|
||||
if (!Lara.Weapons[WEAPON_UZI].Present)
|
||||
{
|
||||
Lara.Weapons[WEAPON_UZI].Present = true;
|
||||
Lara.Weapons[WEAPON_UZI].SelectedAmmo = 0;
|
||||
|
@ -120,7 +121,7 @@ void PickedUpObject(short objectNumber)
|
|||
break;
|
||||
|
||||
case ID_PISTOLS_ITEM:
|
||||
if (!(Lara.Weapons[WEAPON_PISTOLS].Present))
|
||||
if (!Lara.Weapons[WEAPON_PISTOLS].Present)
|
||||
{
|
||||
Lara.Weapons[WEAPON_PISTOLS].Present = true;
|
||||
Lara.Weapons[WEAPON_PISTOLS].SelectedAmmo = 0;
|
||||
|
@ -131,7 +132,7 @@ void PickedUpObject(short objectNumber)
|
|||
break;
|
||||
|
||||
case ID_SHOTGUN_ITEM:
|
||||
if (!(Lara.Weapons[WEAPON_SHOTGUN].Present))
|
||||
if (!Lara.Weapons[WEAPON_SHOTGUN].Present)
|
||||
{
|
||||
Lara.Weapons[WEAPON_SHOTGUN].Present = true;
|
||||
Lara.Weapons[WEAPON_SHOTGUN].SelectedAmmo = 0;
|
||||
|
@ -143,7 +144,7 @@ void PickedUpObject(short objectNumber)
|
|||
break;
|
||||
|
||||
case ID_REVOLVER_ITEM:
|
||||
if (!(Lara.Weapons[WEAPON_REVOLVER].Present))
|
||||
if (!Lara.Weapons[WEAPON_REVOLVER].Present)
|
||||
{
|
||||
Lara.Weapons[WEAPON_REVOLVER].Present = true;
|
||||
Lara.Weapons[WEAPON_REVOLVER].SelectedAmmo = 0;
|
||||
|
@ -155,7 +156,7 @@ void PickedUpObject(short objectNumber)
|
|||
break;
|
||||
|
||||
case ID_CROSSBOW_ITEM:
|
||||
if (!(Lara.Weapons[WEAPON_CROSSBOW].Present))
|
||||
if (!Lara.Weapons[WEAPON_CROSSBOW].Present)
|
||||
{
|
||||
Lara.Weapons[WEAPON_CROSSBOW].Present = true;
|
||||
Lara.Weapons[WEAPON_CROSSBOW].SelectedAmmo = 0;
|
||||
|
@ -167,7 +168,7 @@ void PickedUpObject(short objectNumber)
|
|||
break;
|
||||
|
||||
case ID_HK_ITEM:
|
||||
if (!(Lara.Weapons[WEAPON_CROSSBOW].Present))
|
||||
if (!Lara.Weapons[WEAPON_CROSSBOW].Present)
|
||||
{
|
||||
Lara.Weapons[WEAPON_HK].Present = true;
|
||||
Lara.Weapons[WEAPON_HK].SelectedAmmo = 0;
|
||||
|
@ -179,7 +180,7 @@ void PickedUpObject(short objectNumber)
|
|||
break;
|
||||
|
||||
case ID_HARPOON_ITEM:
|
||||
if (!(Lara.Weapons[WEAPON_HARPOON_GUN].Present))
|
||||
if (!Lara.Weapons[WEAPON_HARPOON_GUN].Present)
|
||||
{
|
||||
Lara.Weapons[WEAPON_HARPOON_GUN].Present = true;
|
||||
Lara.Weapons[WEAPON_HARPOON_GUN].SelectedAmmo = 0;
|
||||
|
@ -191,7 +192,7 @@ void PickedUpObject(short objectNumber)
|
|||
break;
|
||||
|
||||
case ID_GRENADE_GUN_ITEM:
|
||||
if (!(Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Present))
|
||||
if (!Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Present)
|
||||
{
|
||||
Lara.Weapons[WEAPON_GRENADE_LAUNCHER].Present = true;
|
||||
Lara.Weapons[WEAPON_GRENADE_LAUNCHER].SelectedAmmo = 0;
|
||||
|
@ -203,7 +204,7 @@ void PickedUpObject(short objectNumber)
|
|||
break;
|
||||
|
||||
case ID_ROCKET_LAUNCHER_ITEM:
|
||||
if (!(Lara.Weapons[WEAPON_ROCKET_LAUNCHER].Present))
|
||||
if (!Lara.Weapons[WEAPON_ROCKET_LAUNCHER].Present)
|
||||
{
|
||||
Lara.Weapons[WEAPON_ROCKET_LAUNCHER].Present = true;
|
||||
Lara.Weapons[WEAPON_ROCKET_LAUNCHER].SelectedAmmo = 0;
|
||||
|
@ -337,7 +338,7 @@ void PickedUpObject(short objectNumber)
|
|||
|
||||
case ID_GOLDROSE_ITEM:
|
||||
IsAtmospherePlaying = 0;
|
||||
S_CDPlay(6, 0);
|
||||
S_CDPlay(6, FALSE);
|
||||
Lara.Secrets++;
|
||||
Savegame.Level.Secrets++;
|
||||
Savegame.Game.Secrets++;
|
||||
|
@ -462,7 +463,7 @@ int KeyTrigger(short itemNum)
|
|||
oldkey = KeyTriggerActive;
|
||||
|
||||
if (!oldkey)
|
||||
item->status = ITEM_DEACTIVATED;
|
||||
item->status = ITEM_DESACTIVATED;
|
||||
|
||||
KeyTriggerActive = false;
|
||||
|
||||
|
@ -702,7 +703,7 @@ void KeyHoleCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
|||
{
|
||||
if (!Lara.isMoving)
|
||||
{
|
||||
if (item->status != ITEM_INACTIVE)
|
||||
if (item->status != ITEM_NOT_ACTIVE)
|
||||
return;
|
||||
if (g_Inventory->GetSelectedObject() == NO_ITEM)
|
||||
{
|
||||
|
@ -1275,7 +1276,7 @@ void RegeneratePickups()
|
|||
|
||||
if (ammo == 0)
|
||||
{
|
||||
item->status = ITEM_INACTIVE;
|
||||
item->status = ITEM_NOT_ACTIVE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1337,7 +1338,7 @@ short* FindPlinth(ITEM_INFO* item)
|
|||
if (item->pos.xPos == mesh->x && item->pos.zPos == mesh->z)
|
||||
{
|
||||
short* frame = GetBestFrame(item);
|
||||
STATIC_INFO* s = &StaticObjects[mesh->staticNumber];
|
||||
StaticInfo* s = &StaticObjects[mesh->staticNumber];
|
||||
if (frame[0] <= s->xMaxc && frame[1] >= s->xMinc && frame[4] <= s->zMaxc && frame[5] >= s->zMinc && (s->xMinc || s->xMaxc))
|
||||
{
|
||||
found = mesh->staticNumber;
|
||||
|
@ -1400,7 +1401,7 @@ void PuzzleDone(ITEM_INFO* item, short itemNum)
|
|||
{
|
||||
FlipMap(Items[i].triggerFlags - 7);
|
||||
flipmap[Items[i].triggerFlags - 7] ^= IFLAG_ACTIVATION_MASK;
|
||||
Items[i].status = ITEM_INACTIVE;
|
||||
Items[i].status = ITEM_NOT_ACTIVE;
|
||||
Items[i].flags |= 0x20;
|
||||
}
|
||||
}
|
||||
|
@ -1493,7 +1494,7 @@ void SearchObjectCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* lar
|
|||
item = &Items[itemNumber];
|
||||
objNumber = (item->objectNumber - ID_SEARCH_OBJECT1) / 2;
|
||||
|
||||
if (TrInput & IN_ACTION && laraitem->currentAnimState == STATE_LARA_STOP && laraitem->animNumber == ANIMATION_LARA_STAY_IDLE && Lara.gunStatus == LG_NO_ARMS && (item->status == ITEM_INACTIVE && item->objectNumber != ID_SEARCH_OBJECT4 || !item->itemFlags[0])
|
||||
if (TrInput & IN_ACTION && laraitem->currentAnimState == STATE_LARA_STOP && laraitem->animNumber == ANIMATION_LARA_STAY_IDLE && Lara.gunStatus == LG_NO_ARMS && (item->status == ITEM_NOT_ACTIVE && item->objectNumber != ID_SEARCH_OBJECT4 || !item->itemFlags[0])
|
||||
|| Lara.isMoving && Lara.generalPtr == (void *) itemNumber)
|
||||
{
|
||||
bounds = GetBoundsAccurate(item);
|
||||
|
@ -1602,7 +1603,7 @@ void SearchObjectControl(short itemNumber)
|
|||
if (Objects[item2->objectNumber].isPickup)
|
||||
{
|
||||
if (FlipStats[0])
|
||||
item2->status = ITEM_INACTIVE;
|
||||
item2->status = ITEM_NOT_ACTIVE;
|
||||
else
|
||||
item2->status = ITEM_INVISIBLE;
|
||||
}
|
||||
|
@ -1638,7 +1639,7 @@ void SearchObjectControl(short itemNumber)
|
|||
}
|
||||
|
||||
|
||||
if (item->status == ITEM_DEACTIVATED)
|
||||
if (item->status == ITEM_DESACTIVATED)
|
||||
{
|
||||
if (item->objectNumber == ID_SEARCH_OBJECT4)
|
||||
{
|
||||
|
@ -1648,7 +1649,7 @@ void SearchObjectControl(short itemNumber)
|
|||
else
|
||||
{
|
||||
RemoveActiveItem(itemNumber);
|
||||
item->status = ITEM_INACTIVE;
|
||||
item->status = ITEM_NOT_ACTIVE;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "collide.h"
|
||||
|
||||
void InitialisePickup(short itemNumber);
|
||||
|
|
227
TR5Main/Game/room.h
Normal file
227
TR5Main/Game/room.h
Normal file
|
@ -0,0 +1,227 @@
|
|||
#pragma once
|
||||
|
||||
typedef struct tr5_room_layer
|
||||
{
|
||||
unsigned int NumLayerVertices; // Number of vertices in this layer (4 bytes)
|
||||
unsigned short UnknownL1;
|
||||
unsigned short NumLayerRectangles; // Number of rectangles in this layer (2 bytes)
|
||||
unsigned short NumLayerTriangles; // Number of triangles in this layer (2 bytes)
|
||||
unsigned short UnknownL2;
|
||||
unsigned short Filler; // Always 0
|
||||
unsigned short Filler2; // Always 0
|
||||
/// The following 6 floats define the bounding box for the layer
|
||||
float LayerBoundingBoxX1;
|
||||
float LayerBoundingBoxY1;
|
||||
float LayerBoundingBoxZ1;
|
||||
float LayerBoundingBoxX2;
|
||||
float LayerBoundingBoxY2;
|
||||
float LayerBoundingBoxZ2;
|
||||
unsigned int Filler3; // Always 0 (4 bytes)
|
||||
void* VerticesOffset;
|
||||
void* PolyOffset;
|
||||
void* PolyOffset2;
|
||||
};
|
||||
|
||||
typedef struct tr5_vertex
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
};
|
||||
|
||||
typedef struct tr5_room_vertex
|
||||
{
|
||||
tr5_vertex Vertex; // Vertex is now floating-point
|
||||
tr5_vertex Normal;
|
||||
DWORD Colour; // 32-bit colour
|
||||
};
|
||||
|
||||
typedef struct tr4_mesh_face3 // 10 bytes
|
||||
{
|
||||
short Vertices[3];
|
||||
short Texture;
|
||||
short Effects; // TR4-5 ONLY: alpha blending and environment mapping strength
|
||||
};
|
||||
|
||||
typedef struct tr4_mesh_face4 // 12 bytes
|
||||
{
|
||||
short Vertices[4];
|
||||
short Texture;
|
||||
short Effects;
|
||||
};
|
||||
|
||||
typedef struct tr_room_portal // 32 bytes
|
||||
{
|
||||
short AdjoiningRoom; // Which room this portal leads to
|
||||
TR_VERTEX Normal;
|
||||
TR_VERTEX Vertices[4];
|
||||
};
|
||||
|
||||
typedef struct tr_room_sector // 8 bytes
|
||||
{
|
||||
unsigned short FDindex; // Index into FloorData[]
|
||||
unsigned short BoxIndex; // Index into Boxes[] (-1 if none)
|
||||
unsigned char RoomBelow; // 255 is none
|
||||
signed char Floor; // Absolute height of floor
|
||||
unsigned char RoomAbove; // 255 if none
|
||||
signed char Ceiling; // Absolute height of ceiling
|
||||
};
|
||||
|
||||
typedef struct tr5_room_light
|
||||
{
|
||||
float x, y, z; // Position of light, in world coordinates
|
||||
float r, g, b; // Colour of the light
|
||||
int Separator; // Dummy value = 0xCDCDCDCD
|
||||
float In; // Cosine of the IN value for light / size of IN value
|
||||
float Out; // Cosine of the OUT value for light / size of OUT value
|
||||
float RadIn; // (IN radians) * 2
|
||||
float RadOut; // (OUT radians) * 2
|
||||
float Range; // Range of light
|
||||
float dx, dy, dz; // Direction - used only by sun and spot lights
|
||||
int x2, y2, z2; // Same as position, only in integer.
|
||||
int dx2, dy2, dz2; // Same as direction, only in integer.
|
||||
byte LightType;
|
||||
byte Filler[3]; // Dummy values = 3 x 0xCD
|
||||
};
|
||||
|
||||
typedef struct MESH_INFO
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
short yRot;
|
||||
short shade;
|
||||
short Flags;
|
||||
short staticNumber;
|
||||
};
|
||||
|
||||
typedef struct LIGHTINFO
|
||||
{
|
||||
int x; // size=0, offset=0
|
||||
int y; // size=0, offset=4
|
||||
int z; // size=0, offset=8
|
||||
unsigned char Type; // size=0, offset=12
|
||||
unsigned char r; // size=0, offset=13
|
||||
unsigned char g; // size=0, offset=14
|
||||
unsigned char b; // size=0, offset=15
|
||||
short nx; // size=0, offset=16
|
||||
short ny; // size=0, offset=18
|
||||
short nz; // size=0, offset=20
|
||||
short Intensity; // size=0, offset=22
|
||||
unsigned char Inner; // size=0, offset=24
|
||||
unsigned char Outer; // size=0, offset=25
|
||||
short FalloffScale; // size=0, offset=26
|
||||
short Length; // size=0, offset=28
|
||||
short Cutoff; // size=0, offset=30
|
||||
};
|
||||
|
||||
typedef struct FLOOR_INFO
|
||||
{
|
||||
unsigned short index;
|
||||
unsigned short fx : 4;
|
||||
unsigned short box : 11;
|
||||
unsigned short stopper : 1;
|
||||
unsigned char pitRoom;
|
||||
signed char floor;
|
||||
unsigned char skyRoom;
|
||||
signed char ceiling;
|
||||
};
|
||||
|
||||
typedef enum RoomEnumFlag
|
||||
{
|
||||
ENV_FLAG_WATER = 0x0001,
|
||||
ENV_FLAG_SWAMP = 0x0004,
|
||||
ENV_FLAG_OUTSIDE = 0x0008,
|
||||
ENV_FLAG_DYNAMIC_LIT = 0x0010,
|
||||
ENV_FLAG_WIND = 0x0020,
|
||||
ENV_FLAG_NOT_NEAR_OUTSIDE = 0x0040,
|
||||
ENV_FLAG_NO_LENSFLARE = 0x0080, // Was quicksand in TR3.
|
||||
ENV_FLAG_MIST = 0x0100,
|
||||
ENV_FLAG_CAUSTICS = 0x0200,
|
||||
ENV_FLAG_UNKNOWN3 = 0x0400
|
||||
};
|
||||
|
||||
typedef struct ROOM_INFO
|
||||
{
|
||||
short* data;
|
||||
short* door;
|
||||
FLOOR_INFO* floor;
|
||||
void* something;
|
||||
MESH_INFO* mesh;
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
int minfloor;
|
||||
int maxceiling;
|
||||
short xSize;
|
||||
short ySize;
|
||||
CVECTOR ambient;
|
||||
short numLights;
|
||||
short numMeshes;
|
||||
unsigned char reverbType;
|
||||
unsigned char flipNumber;
|
||||
byte meshEffect;
|
||||
byte boundActive;
|
||||
short left;
|
||||
short right;
|
||||
short top;
|
||||
short bottom;
|
||||
short testLeft;
|
||||
short testRight;
|
||||
short testTop;
|
||||
short testBottom;
|
||||
short itemNumber;
|
||||
short fxNumber;
|
||||
short flippedRoom;
|
||||
unsigned short flags; // ENV_FLAG_enum
|
||||
unsigned int Unknown1;
|
||||
unsigned int Unknown2; // Always 0
|
||||
unsigned int Unknown3; // Always 0
|
||||
unsigned int Separator; // 0xCDCDCDCD
|
||||
unsigned short Unknown4;
|
||||
unsigned short Unknown5;
|
||||
float RoomX;
|
||||
float RoomY;
|
||||
float RoomZ;
|
||||
unsigned int Separator1[4]; // Always 0xCDCDCDCD
|
||||
unsigned int Separator2; // 0 for normal rooms and 0xCDCDCDCD for null rooms
|
||||
unsigned int Separator3; // Always 0xCDCDCDCD
|
||||
unsigned int NumRoomTriangles;
|
||||
unsigned int NumRoomRectangles;
|
||||
tr5_room_light* light; // Always 0
|
||||
unsigned int LightDataSize;
|
||||
unsigned int NumLights2; // Always same as NumLights
|
||||
unsigned int Unknown6;
|
||||
int RoomYTop;
|
||||
int RoomYBottom;
|
||||
unsigned int NumLayers;
|
||||
tr5_room_layer* LayerOffset;
|
||||
tr5_room_vertex* VerticesOffset;
|
||||
void* PolyOffset;
|
||||
void* PolyOffset2; // Same as PolyOffset
|
||||
int NumVertices;
|
||||
int Separator5[4]; // Always 0xCDCDCDCD
|
||||
};
|
||||
|
||||
typedef struct ANIM_STRUCT
|
||||
{
|
||||
short* framePtr;
|
||||
short interpolation;
|
||||
short currentAnimState;
|
||||
int velocity;
|
||||
int acceleration;
|
||||
int Xvelocity;
|
||||
int Xacceleration;
|
||||
short frameBase;
|
||||
short frameEnd;
|
||||
short jumpAnimNum;
|
||||
short jumpFrameNum;
|
||||
short numberChanges;
|
||||
short changeIndex;
|
||||
short numberCommands;
|
||||
short commandIndex;
|
||||
};
|
||||
|
||||
constexpr auto NUM_ROOMS = 1024;
|
||||
constexpr auto NO_ROOM = 0xFF;
|
||||
constexpr auto NO_HEIGHT = (-0x7F00);
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "collide.h"
|
||||
|
||||
struct ROPE_STRUCT
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#include "spotcam.h"
|
||||
#include "traps.h"
|
||||
#include "laramisc.h"
|
||||
#include "newobjects.h"
|
||||
#include "oldobjects.h"
|
||||
#include "sound.h"
|
||||
#include "level.h"
|
||||
|
@ -25,7 +24,6 @@ ChunkReader* SaveGame::m_reader;
|
|||
ChunkWriter* SaveGame::m_writer;
|
||||
vector<LuaVariable> SaveGame::m_luaVariables;
|
||||
int SaveGame::LastSaveGame;
|
||||
SAVEGAME_INFO Savegame;
|
||||
|
||||
ChunkId* SaveGame::m_chunkGameStatus;
|
||||
ChunkId* SaveGame::m_chunkItems;
|
||||
|
@ -579,7 +577,7 @@ bool SaveGame::readItem()
|
|||
m_reader->ReadChunks(&readItemChunks, itemNumber);
|
||||
DisableBaddieAI(itemNumber);
|
||||
KillItem(itemNumber);
|
||||
item->status = ITEM_DEACTIVATED;
|
||||
item->status = ITEM_DESACTIVATED;
|
||||
item->flags |= ONESHOT;
|
||||
item->afterDeath = 128;
|
||||
}
|
||||
|
@ -593,7 +591,7 @@ bool SaveGame::readItem()
|
|||
}
|
||||
|
||||
// Some post-processing things
|
||||
if (obj->isPuzzleHole && (item->status == ITEM_DEACTIVATED || item->status == ITEM_ACTIVE))
|
||||
if (obj->isPuzzleHole && (item->status == ITEM_DESACTIVATED || item->status == ITEM_ACTIVE))
|
||||
item->objectNumber += NUM_PUZZLES;
|
||||
|
||||
if (item->objectNumber >= ID_SMASH_OBJECT1 && item->objectNumber <= ID_SMASH_OBJECT8 && (item->flags & ONESHOT))
|
||||
|
@ -771,7 +769,6 @@ bool SaveGame::readLaraChunks(ChunkId* chunkId, int maxSize, int arg)
|
|||
else if (chunkId->EqualsTo(m_chunkWeaponInfo))
|
||||
{
|
||||
int id = LEB128::ReadInt32(m_stream);
|
||||
|
||||
CarriedWeaponInfo* weapon = &Lara.Weapons[id];
|
||||
|
||||
weapon->Present = LEB128::ReadByte(m_stream);
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
#pragma once
|
||||
|
||||
#include "global.h"
|
||||
#include "ChunkId.h"
|
||||
#include "ChunkReader.h"
|
||||
#include "ChunkWriter.h"
|
||||
|
@ -13,7 +11,6 @@
|
|||
|
||||
extern GameFlow* g_GameFlow;
|
||||
extern GameScript* g_GameScript;
|
||||
extern SAVEGAME_INFO Savegame;
|
||||
|
||||
typedef struct SaveGameHeader
|
||||
{
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
#include "control.h"
|
||||
|
||||
enum SFX_TYPES
|
||||
{
|
||||
SFX_LANDANDWATER = 0,
|
||||
SFX_LANDONLY = (1 << 14),
|
||||
SFX_WATERONLY = (2 << 14)
|
||||
};
|
||||
|
||||
typedef enum audio_tracks
|
||||
{
|
||||
CDA_XA1_TL_10B, // TO CLIMB OUT, SWIM TO THE EDGE AND PRESS 'ACTION'.
|
||||
|
@ -1961,7 +1967,7 @@ typedef enum sound_effects
|
|||
#define SOUND_XFADETIME_HIJACKSOUND 50
|
||||
#define SOUND_BGM_DAMP_COEFFICIENT 0.6f
|
||||
|
||||
struct SoundEffectSlot
|
||||
typedef struct SoundEffectSlot
|
||||
{
|
||||
short state;
|
||||
short effectID;
|
||||
|
@ -1970,13 +1976,13 @@ struct SoundEffectSlot
|
|||
Vector3 origin;
|
||||
};
|
||||
|
||||
struct SoundTrackSlot
|
||||
typedef struct SoundTrackSlot
|
||||
{
|
||||
HSTREAM channel;
|
||||
short trackID;
|
||||
};
|
||||
|
||||
enum sound_track_types
|
||||
typedef enum sound_track_types
|
||||
{
|
||||
SOUND_TRACK_ONESHOT,
|
||||
SOUND_TRACK_BGM,
|
||||
|
@ -1984,7 +1990,7 @@ enum sound_track_types
|
|||
NUM_SOUND_TRACK_TYPES
|
||||
};
|
||||
|
||||
enum sound_filters
|
||||
typedef enum sound_filters
|
||||
{
|
||||
SOUND_FILTER_REVERB,
|
||||
SOUND_FILTER_COMPRESSOR,
|
||||
|
@ -1993,14 +1999,14 @@ enum sound_filters
|
|||
NUM_SOUND_FILTERS
|
||||
};
|
||||
|
||||
enum sound_states
|
||||
typedef enum sound_states
|
||||
{
|
||||
SOUND_STATE_IDLE,
|
||||
SOUND_STATE_ENDING,
|
||||
SOUND_STATE_ENDED
|
||||
};
|
||||
|
||||
enum sound_flags
|
||||
typedef enum sound_flags
|
||||
{
|
||||
SOUND_NORMAL,
|
||||
SOUND_WAIT,
|
||||
|
@ -2008,7 +2014,7 @@ enum sound_flags
|
|||
SOUND_LOOPED
|
||||
};
|
||||
|
||||
enum reverb_type
|
||||
typedef enum reverb_type
|
||||
{
|
||||
RVB_OUTSIDE, // 0x00 no reverberation
|
||||
RVB_SMALL_ROOM, // 0x01 little reverberation
|
||||
|
@ -2019,7 +2025,17 @@ enum reverb_type
|
|||
NUM_REVERB_TYPES
|
||||
};
|
||||
|
||||
struct AudioTrack
|
||||
typedef struct SAMPLE_INFO
|
||||
{
|
||||
short number;
|
||||
byte volume;
|
||||
byte radius;
|
||||
byte randomness;
|
||||
signed char pitch;
|
||||
short flags;
|
||||
};
|
||||
|
||||
typedef struct AudioTrack
|
||||
{
|
||||
char* Name;
|
||||
byte Mask;
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include "lara.h"
|
||||
#include "level.h"
|
||||
#include "setup.h"
|
||||
#include "Renderer11.h"
|
||||
#include "trmath.h"
|
||||
|
||||
int NumLaraSpheres;
|
||||
bool GotLaraSpheres;
|
||||
|
@ -98,7 +100,6 @@ int TestCollision(ITEM_INFO* item, ITEM_INFO* l)
|
|||
int dz = z1 - z2;
|
||||
int r = r1 + r2;
|
||||
|
||||
|
||||
if (SQUARE(dx) + SQUARE(dy) + SQUARE(dz) < SQUARE(r))
|
||||
{
|
||||
l->touchBits |= (1 << j);
|
||||
|
|
|
@ -1,12 +1,19 @@
|
|||
#pragma once
|
||||
|
||||
#include "global.h"
|
||||
#include "items.h"
|
||||
|
||||
#define SPHERES_SPACE_LOCAL 0
|
||||
#define SPHERES_SPACE_WORLD 1
|
||||
#define SPHERES_SPACE_BONE_ORIGIN 2
|
||||
#define MAX_SPHERES 34
|
||||
|
||||
typedef struct SPHERE
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
int r;
|
||||
};
|
||||
|
||||
extern int NumLaraSpheres;
|
||||
extern bool GotLaraSpheres;
|
||||
extern SPHERE LaraSpheres[MAX_SPHERES];
|
||||
|
|
|
@ -49,8 +49,6 @@ int SlowMotion;
|
|||
int SpotcamDontDrawLara;
|
||||
int SpotcamOverlay;
|
||||
|
||||
extern Renderer11* g_Renderer;
|
||||
|
||||
void InitSpotCamSequences()
|
||||
{
|
||||
int s, cc, n, ce;
|
||||
|
|
|
@ -1,6 +1,30 @@
|
|||
#pragma once
|
||||
#include "phd_global.h"
|
||||
|
||||
#include "global.h"
|
||||
struct QUAKE_CAMERA
|
||||
{
|
||||
GAME_VECTOR spos;
|
||||
GAME_VECTOR epos;
|
||||
};
|
||||
|
||||
typedef struct SPOTCAM
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
int tx;
|
||||
int ty;
|
||||
int tz;
|
||||
unsigned char sequence;
|
||||
unsigned char camera;
|
||||
short fov;
|
||||
short roll;
|
||||
short timer;
|
||||
short speed;
|
||||
short flags;
|
||||
short roomNumber;
|
||||
short pad;
|
||||
};
|
||||
|
||||
enum spotcam_flags
|
||||
{
|
||||
|
|
|
@ -42,12 +42,6 @@ short TurnSwitchBoundsC[12] = // offset 0xA14FC
|
|||
0xF8E4, 0x071C
|
||||
};
|
||||
PHD_VECTOR TurnSwitchPosA = { 650, 0, -138 }; // offset 0xA1514
|
||||
PHD_VECTOR CogSwitchPos = { 0, 0, -856 }; // offset 0xA1520
|
||||
short CogSwitchBounds[12] = // offset 0xA152C
|
||||
{
|
||||
0xFE00, 0x0200, 0x0000, 0x0000, 0xFA00, 0xFE00, 0xF8E4, 0x071C, 0xEAAC, 0x1554,
|
||||
0xF8E4, 0x071C
|
||||
};
|
||||
PHD_VECTOR RailSwitchPos = { 0, 0, -550 }; // offset 0xA1544
|
||||
short RailSwitchBounds[12] = // offset 0xA1550
|
||||
{
|
||||
|
@ -205,125 +199,6 @@ void CrowDoveSwitchControl(short itemNumber)
|
|||
}
|
||||
}
|
||||
|
||||
void CogSwitchCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNum];
|
||||
|
||||
FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &item->roomNumber);
|
||||
GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||
|
||||
if (!TriggerIndex)
|
||||
{
|
||||
ObjectCollision(itemNum, l, coll);
|
||||
return;
|
||||
}
|
||||
|
||||
short* trigger = TriggerIndex;
|
||||
for (int i = *TriggerIndex; (i & 0x1F) != 4; trigger++)
|
||||
{
|
||||
if (i < 0)
|
||||
break;
|
||||
i = trigger[1];
|
||||
}
|
||||
|
||||
ITEM_INFO* target = &Items[trigger[3] & 0x3FF];
|
||||
DOOR_DATA* door = (DOOR_DATA*)target->data;
|
||||
|
||||
if (item->status == ITEM_INACTIVE)
|
||||
{
|
||||
if (!(item->flags & 0x100)
|
||||
&& (TrInput & IN_ACTION
|
||||
&& !Lara.gunStatus
|
||||
&& !(item->status && item->gravityStatus)
|
||||
&& l->currentAnimState == STATE_LARA_STOP
|
||||
&& l->animNumber == ANIMATION_LARA_STAY_IDLE
|
||||
|| Lara.isMoving && Lara.generalPtr == (void*)itemNum))
|
||||
{
|
||||
if (TestLaraPosition(CogSwitchBounds, item, l))
|
||||
{
|
||||
if (MoveLaraPosition(&CogSwitchPos, item, l))
|
||||
{
|
||||
Lara.isMoving = false;
|
||||
Lara.headYrot = 0;
|
||||
Lara.headXrot = 0;
|
||||
Lara.torsoYrot = 0;
|
||||
Lara.torsoXrot = 0;
|
||||
Lara.gunStatus = LG_HANDS_BUSY;
|
||||
Lara.generalPtr = target;
|
||||
l->animNumber = ANIMATION_LARA_COGWHEEL_GRAB;
|
||||
l->goalAnimState = STATE_LARA_COGWHEEL;
|
||||
l->currentAnimState = STATE_LARA_COGWHEEL;
|
||||
l->frameNumber = Anims[l->animNumber].frameBase;
|
||||
|
||||
AddActiveItem(itemNum);
|
||||
|
||||
item->goalAnimState = 1;
|
||||
item->status = ITEM_ACTIVE;
|
||||
if (!door->opened)
|
||||
{
|
||||
AddActiveItem((target - Items));
|
||||
target->itemFlags[2] = target->pos.yPos;
|
||||
target->status = ITEM_ACTIVE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Lara.generalPtr = (void*)itemNum;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (Lara.isMoving && Lara.generalPtr == (void*)itemNum)
|
||||
{
|
||||
Lara.isMoving = false;
|
||||
Lara.gunStatus = LG_NO_ARMS;
|
||||
}
|
||||
}
|
||||
|
||||
ObjectCollision(itemNum, l, coll);
|
||||
}
|
||||
}
|
||||
|
||||
void CogSwitchControl(short itemNum)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNum];
|
||||
|
||||
AnimateItem(item);
|
||||
|
||||
if (item->currentAnimState == 1)
|
||||
{
|
||||
if (item->goalAnimState == 1 && !(TrInput & IN_ACTION))
|
||||
{
|
||||
LaraItem->goalAnimState = STATE_LARA_STOP;
|
||||
item->goalAnimState = 0;
|
||||
}
|
||||
|
||||
if (LaraItem->animNumber == ANIMATION_LARA_COGWHEEL_PULL)
|
||||
{
|
||||
if (LaraItem->frameNumber == (Anims[ANIMATION_LARA_COGWHEEL_PULL].frameBase + 10))
|
||||
{
|
||||
ITEM_INFO* it = (ITEM_INFO*)Lara.generalPtr;
|
||||
it->itemFlags[0] = 40;
|
||||
Lara.generalPtr = it;
|
||||
SoundEffect(SFX_STONE_SCRAPE_FAST, &it->pos, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (item->frameNumber == Anims[item->animNumber].frameEnd)
|
||||
{
|
||||
item->currentAnimState = 0;
|
||||
item->status = ITEM_INACTIVE;
|
||||
RemoveActiveItem(itemNum);
|
||||
LaraItem->animNumber = ANIMATION_LARA_STAY_SOLID;
|
||||
LaraItem->frameNumber = Anims[LaraItem->animNumber].frameBase;
|
||||
LaraItem->goalAnimState = STATE_LARA_STOP;
|
||||
LaraItem->currentAnimState = STATE_LARA_STOP;
|
||||
Lara.gunStatus = LG_NO_ARMS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FullBlockSwitchCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNum];
|
||||
|
@ -389,7 +264,7 @@ void FullBlockSwitchControl(short itemNumber)
|
|||
{
|
||||
item->itemFlags[0] = 0;
|
||||
item->goalAnimState = 1;
|
||||
item->status = ITEM_INACTIVE;
|
||||
item->status = ITEM_NOT_ACTIVE;
|
||||
if (++CurrentSequence >= 7u)
|
||||
CurrentSequence = 0;
|
||||
}
|
||||
|
@ -876,7 +751,7 @@ void TurnSwitchControl(short itemNum)
|
|||
l->frameNumber = Anims[l->animNumber].frameBase;
|
||||
item->animNumber = Objects[item->objectNumber].animIndex;
|
||||
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||
item->status = ITEM_INACTIVE;
|
||||
item->status = ITEM_NOT_ACTIVE;
|
||||
|
||||
RemoveActiveItem(itemNum);
|
||||
|
||||
|
@ -1019,7 +894,7 @@ void SwitchCollision2(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
|||
|
||||
if (TrInput & IN_ACTION)
|
||||
{
|
||||
if (item->status == ITEM_INACTIVE && Lara.waterStatus == LW_UNDERWATER && !Lara.gunStatus && l->currentAnimState == STATE_LARA_UNDERWATER_STOP)
|
||||
if (item->status == ITEM_NOT_ACTIVE && Lara.waterStatus == LW_UNDERWATER && !Lara.gunStatus && l->currentAnimState == STATE_LARA_UNDERWATER_STOP)
|
||||
{
|
||||
if (TestLaraPosition(Switch2Bounds, item, l))
|
||||
{
|
||||
|
@ -1054,7 +929,7 @@ void SwitchCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
|||
&& l->currentAnimState == STATE_LARA_STOP
|
||||
&& l->animNumber == ANIMATION_LARA_STAY_IDLE
|
||||
&& !Lara.gunStatus
|
||||
&& item->status == ITEM_INACTIVE
|
||||
&& item->status == ITEM_NOT_ACTIVE
|
||||
&& !(item->flags & 0x100)
|
||||
&& item->triggerFlags >= 0
|
||||
|| Lara.isMoving && Lara.generalPtr == (void*)itemNum)
|
||||
|
@ -1347,7 +1222,7 @@ int GetSwitchTrigger(ITEM_INFO* item, short* itemNos, int AttatchedToSwitch)
|
|||
int SwitchTrigger(short itemNum, short timer)
|
||||
{
|
||||
ITEM_INFO* item = &Items[itemNum];
|
||||
if (item->status == ITEM_DEACTIVATED)
|
||||
if (item->status == ITEM_DESACTIVATED)
|
||||
{
|
||||
if ((!item->currentAnimState && item->objectNumber != ID_JUMP_SWITCH || item->currentAnimState == 1 && item->objectNumber == ID_JUMP_SWITCH) && timer > 0)
|
||||
{
|
||||
|
@ -1361,7 +1236,7 @@ int SwitchTrigger(short itemNum, short timer)
|
|||
{
|
||||
RemoveActiveItem(itemNum);
|
||||
|
||||
item->status = ITEM_INACTIVE;
|
||||
item->status = ITEM_NOT_ACTIVE;
|
||||
if (!item->itemFlags[0] == 0)
|
||||
item->flags |= 0x100;
|
||||
if (item->currentAnimState != 1)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "collide.h"
|
||||
|
||||
extern int PulleyItemNumber;
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
#include "framework.h"
|
||||
#include "tomb4fx.h"
|
||||
#include "global.h"
|
||||
#include "lara.h"
|
||||
#include "effect2.h"
|
||||
#include "draw.h"
|
||||
#include "items.h"
|
||||
#include "setup.h"
|
||||
#include "level.h"
|
||||
#include "sound.h"
|
||||
#include "bubble.h"
|
||||
#include "trmath.h"
|
||||
#include "GameFlowScript.h"
|
||||
|
||||
char FlareTable[121] =
|
||||
{
|
||||
|
@ -46,11 +46,7 @@ BLOOD_STRUCT Blood[MAX_SPARKS_BLOOD];
|
|||
DRIP_STRUCT Drips[MAX_DRIPS];
|
||||
SHOCKWAVE_STRUCT ShockWaves[MAX_SHOCKWAVE];
|
||||
FIRE_LIST Fires[MAX_FIRE_LIST];
|
||||
ENERGY_ARC EnergyArcs[MAX_ENERGY_ARCS];
|
||||
|
||||
extern int NextSpark;
|
||||
extern SPARKS Sparks[MAX_SPARKS];
|
||||
extern Renderer11* g_Renderer;
|
||||
ENERGY_ARC EnergyArcs[MAX_ENERGYARCS];
|
||||
|
||||
int GetFreeFireSpark()
|
||||
{
|
||||
|
@ -117,7 +113,7 @@ void TriggerGlobalStaticFlame()
|
|||
spark->xVel = 0;
|
||||
spark->yVel = 0;
|
||||
spark->zVel = 0;
|
||||
spark->flags = 0;
|
||||
spark->flags = SP_NONE;
|
||||
spark->dSize = spark->sSize = spark->size = (GetRandomControl() & 0x1F) + -128;
|
||||
}
|
||||
|
||||
|
@ -154,7 +150,7 @@ void TriggerGlobalFireSmoke()
|
|||
}
|
||||
else
|
||||
{
|
||||
spark->flags = 0;
|
||||
spark->flags = SP_NONE;
|
||||
}
|
||||
|
||||
spark->gravity = -16 - (GetRandomControl() & 0xF);
|
||||
|
@ -197,7 +193,7 @@ void TriggerGlobalFireFlame()
|
|||
}
|
||||
else
|
||||
{
|
||||
spark->flags = 0;
|
||||
spark->flags = SP_NONE;
|
||||
}
|
||||
|
||||
spark->sSize = spark->size = (GetRandomControl() & 0x1F) + 128;
|
||||
|
@ -332,7 +328,7 @@ void UpdateFireSparks()
|
|||
|
||||
void UpdateEnergyArcs()
|
||||
{
|
||||
for (int i = 0; i < MAX_ENERGY_ARCS; i++)
|
||||
for (int i = 0; i < MAX_ENERGYARCS; i++)
|
||||
{
|
||||
ENERGY_ARC* arc = &EnergyArcs[i];
|
||||
|
||||
|
@ -488,7 +484,7 @@ byte TriggerGunSmoke_SubFunction(int weaponType)
|
|||
case WEAPON_HK:
|
||||
case WEAPON_ROCKET_LAUNCHER:
|
||||
case WEAPON_GRENADE_LAUNCHER:
|
||||
return 0x18; //(12) Rocket and Grenade value for TriggerGunSmoke in TR3 have the value 12 ! (the HK is not included there)
|
||||
return 24; //(12) Rocket and Grenade value for TriggerGunSmoke in TR3 have the value 12 ! (the HK is not included there)
|
||||
|
||||
// other weapon
|
||||
default:
|
||||
|
@ -515,7 +511,7 @@ void TriggerGunSmoke(int x, int y, int z, short xv, short yv, short zv, byte ini
|
|||
spark->dShade = 64;
|
||||
}
|
||||
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->x = x + (GetRandomControl() & 31) - 16;
|
||||
spark->y = y + (GetRandomControl() & 31) - 16;
|
||||
spark->z = z + (GetRandomControl() & 31) - 16;
|
||||
|
@ -556,7 +552,7 @@ void TriggerGunSmoke(int x, int y, int z, short xv, short yv, short zv, byte ini
|
|||
}
|
||||
else
|
||||
{
|
||||
spark->flags = 0;
|
||||
spark->flags = SP_NONE;
|
||||
}
|
||||
float gravity = frand() * 1.25f;
|
||||
spark->gravity = gravity;
|
||||
|
@ -596,7 +592,7 @@ void TriggerShatterSmoke(int x, int y, int z)
|
|||
spark->colFadeSpeed = 4;
|
||||
spark->dShade = (GetRandomControl() & 0x1F) + 64;
|
||||
spark->fadeToBlack = 24 - (GetRandomControl() & 7);
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 7) + 48;
|
||||
spark->x = (GetRandomControl() & 0x1F) + x - 16;
|
||||
spark->y = (GetRandomControl() & 0x1F) + y - 16;
|
||||
|
@ -621,7 +617,7 @@ void TriggerShatterSmoke(int x, int y, int z)
|
|||
}
|
||||
else
|
||||
{
|
||||
spark->flags = 0;
|
||||
spark->flags = SP_NONE;
|
||||
}
|
||||
|
||||
spark->gravity = -4 - (GetRandomControl() & 3);
|
||||
|
@ -1027,13 +1023,13 @@ void AddWaterSparks(int x, int y, int z, int num)
|
|||
spark->fadeToBlack = 8;
|
||||
spark->life = 24;
|
||||
spark->sLife = 24;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
int random = GetRandomControl();
|
||||
spark->xVel = -rcossin_tbl[2 * random] >> 5;
|
||||
spark->yVel = -640 - GetRandomControl();
|
||||
spark->zVel = rcossin_tbl[2 * random & 0xFFF + 1] >> 5;
|
||||
spark->friction = 5;
|
||||
spark->flags = 0;
|
||||
spark->flags = SP_NONE;
|
||||
spark->x = x + (spark->xVel >> 3);
|
||||
spark->y = y - (spark->yVel >> 5);
|
||||
spark->z = z + (spark->zVel >> 3);
|
||||
|
@ -1042,10 +1038,6 @@ void AddWaterSparks(int x, int y, int z, int num)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void LaraBubbles(ITEM_INFO* item)// (F)
|
||||
{
|
||||
PHD_VECTOR pos;
|
||||
|
@ -1524,7 +1516,7 @@ void TriggerExplosionBubble(int x, int y, int z, short roomNum)// (F)
|
|||
spark->sB = 0;
|
||||
spark->colFadeSpeed = 8;
|
||||
spark->fadeToBlack = 12;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->x = x;
|
||||
spark->y = y;
|
||||
spark->z = z;
|
||||
|
@ -1581,7 +1573,7 @@ void TriggerExplosionBubble(int x, int y, int z, short roomNum)// (F)
|
|||
spark->fadeToBlack = 64;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 0x1F) + 96;
|
||||
if (unk)
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
else
|
||||
spark->transType = 3;
|
||||
spark->x = (GetRandomControl() & 0x1F) + x - 16;
|
||||
|
@ -1646,7 +1638,7 @@ void TriggerLightningGlow(int x, int y, int z, byte size, byte r, byte g, byte b
|
|||
spark->dR = r;
|
||||
spark->sR = r;
|
||||
spark->colFadeSpeed = 2;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->on = 1;
|
||||
spark->dB = b;
|
||||
spark->sB = b;
|
||||
|
@ -1681,7 +1673,7 @@ void TriggerFenceSparks(int x, int y, int z, int kill, int crane)//(F)
|
|||
|
||||
spark->life = (GetRandomControl() & 7) + 24;
|
||||
spark->sLife = (GetRandomControl() & 7) + 24;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->dynamic = -1;
|
||||
|
||||
spark->x = x;
|
||||
|
@ -1701,7 +1693,7 @@ void TriggerFenceSparks(int x, int y, int z, int kill, int crane)//(F)
|
|||
spark->friction = 4;
|
||||
}
|
||||
|
||||
spark->flags = 0;
|
||||
spark->flags = SP_NONE;
|
||||
spark->gravity = (GetRandomControl() & 0xF) + ((crane << 4) + 16);
|
||||
spark->maxYvel = 0;
|
||||
}
|
||||
|
@ -1731,7 +1723,7 @@ void TriggerSmallSplash(int x, int y, int z, int num)
|
|||
sptr->life = 24;
|
||||
sptr->sLife = 24;
|
||||
|
||||
sptr->transType = 2;
|
||||
sptr->transType = COLADD;
|
||||
|
||||
angle = GetRandomControl() << 3;
|
||||
|
||||
|
@ -1755,7 +1747,7 @@ ENERGY_ARC* TriggerEnergyArc(PHD_VECTOR* start, PHD_VECTOR* end, byte r, byte g,
|
|||
{
|
||||
ENERGY_ARC* arc = NULL;
|
||||
|
||||
for (int i = 0; i < 16; i++)
|
||||
for (int i = 0; i < MAX_ENERGYARCS; i++)
|
||||
{
|
||||
arc = &EnergyArcs[i];
|
||||
if (arc->life == 0)
|
||||
|
|
|
@ -1,31 +1,185 @@
|
|||
#pragma once
|
||||
#include "types.h"
|
||||
#include "constants.h"
|
||||
#include "phd_global.h"
|
||||
#include "items.h"
|
||||
|
||||
struct ENERGY_ARC
|
||||
typedef struct ENERGY_ARC
|
||||
{
|
||||
PHD_VECTOR pos1; // 0
|
||||
PHD_VECTOR pos1;
|
||||
PHD_VECTOR pos2;
|
||||
PHD_VECTOR pos3; // 24
|
||||
PHD_VECTOR pos4; // 36
|
||||
byte r; // 48
|
||||
byte g; // 49
|
||||
byte b; // 50
|
||||
short sLife; // 52
|
||||
short life; // 51
|
||||
PHD_VECTOR pos3;
|
||||
PHD_VECTOR pos4;
|
||||
byte r;
|
||||
byte g;
|
||||
byte b;
|
||||
short sLife;
|
||||
short life;
|
||||
short amplitude;
|
||||
short segmentSize; // 64
|
||||
short sAmplitude; // 53
|
||||
byte type; // 61
|
||||
byte flags; // 62
|
||||
signed char direction; // 63
|
||||
short segmentSize;
|
||||
short sAmplitude;
|
||||
byte type;
|
||||
byte flags;
|
||||
signed char direction;
|
||||
short rotation;
|
||||
short filler;
|
||||
};
|
||||
|
||||
typedef struct SMOKE_SPARKS
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
short xVel;
|
||||
short yVel;
|
||||
short zVel;
|
||||
short gravity;
|
||||
short rotAng;
|
||||
short flags;
|
||||
byte sSize;
|
||||
byte dSize;
|
||||
byte size;
|
||||
byte friction;
|
||||
byte scalar;
|
||||
byte def;
|
||||
signed char rotAdd;
|
||||
signed char maxYvel;
|
||||
byte on;
|
||||
byte sShade;
|
||||
byte dShade;
|
||||
byte shade;
|
||||
byte colFadeSpeed;
|
||||
byte fadeToBlack;
|
||||
signed char sLife;
|
||||
signed char life;
|
||||
byte transType;
|
||||
byte fxObj;
|
||||
byte nodeNumber;
|
||||
byte mirror;
|
||||
};
|
||||
|
||||
typedef struct GUNFLASH_STRUCT
|
||||
{
|
||||
MATRIX3D matrix;
|
||||
short on;
|
||||
};
|
||||
|
||||
typedef struct SHOCKWAVE_STRUCT
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
short innerRad;
|
||||
short outerRad;
|
||||
short xRot;
|
||||
short flags;
|
||||
unsigned char r;
|
||||
unsigned char g;
|
||||
unsigned char b;
|
||||
unsigned char life;
|
||||
short speed;
|
||||
short temp;
|
||||
};
|
||||
|
||||
typedef struct GUNSHELL_STRUCT
|
||||
{
|
||||
PHD_3DPOS pos;
|
||||
short fallspeed;
|
||||
short roomNumber;
|
||||
short speed;
|
||||
short counter;
|
||||
short dirXrot;
|
||||
short objectNumber;
|
||||
};
|
||||
|
||||
typedef struct DRIP_STRUCT
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
byte on;
|
||||
byte r;
|
||||
byte g;
|
||||
byte b;
|
||||
short yVel;
|
||||
byte gravity;
|
||||
byte life;
|
||||
short roomNumber;
|
||||
byte outside;
|
||||
byte pad;
|
||||
};
|
||||
|
||||
typedef struct FIRE_LIST
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
byte on;
|
||||
byte size;
|
||||
short roomNumber;
|
||||
};
|
||||
|
||||
typedef struct FIRE_SPARKS
|
||||
{
|
||||
short x;
|
||||
short y;
|
||||
short z;
|
||||
short xVel;
|
||||
short yVel;
|
||||
short zVel;
|
||||
short gravity;
|
||||
short rotAng;
|
||||
short flags;
|
||||
unsigned char sSize;
|
||||
unsigned char dSize;
|
||||
unsigned char size;
|
||||
unsigned char friction;
|
||||
unsigned char scalar;
|
||||
unsigned char def;
|
||||
signed char rotAdd;
|
||||
signed char maxYvel;
|
||||
unsigned char on;
|
||||
unsigned char sR;
|
||||
unsigned char sG;
|
||||
unsigned char sB;
|
||||
unsigned char dR;
|
||||
unsigned char dG;
|
||||
unsigned char dB;
|
||||
unsigned char r;
|
||||
unsigned char g;
|
||||
unsigned char b;
|
||||
unsigned char colFadeSpeed;
|
||||
unsigned char fadeToBlack;
|
||||
unsigned char sLife;
|
||||
unsigned char life;
|
||||
};
|
||||
|
||||
typedef struct BLOOD_STRUCT
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
short xVel;
|
||||
short yVel;
|
||||
short zVel;
|
||||
short gravity;
|
||||
short rotAng;
|
||||
unsigned char sSize;
|
||||
unsigned char dSize;
|
||||
unsigned char size;
|
||||
unsigned char friction;
|
||||
byte rotAdd;
|
||||
unsigned char on;
|
||||
unsigned char sShade;
|
||||
unsigned char dShade;
|
||||
unsigned char shade;
|
||||
unsigned char colFadeSpeed;
|
||||
unsigned char fadeToBlack;
|
||||
byte sLife;
|
||||
byte life;
|
||||
byte pad;
|
||||
};
|
||||
|
||||
#define ENERGY_ARC_STRAIGHT_LINE 0
|
||||
#define ENERGY_ARC_CIRCLE 1
|
||||
|
||||
#define ENERGY_ARC_NO_RANDOMIZE 1
|
||||
|
||||
extern int LaserSightX;
|
||||
|
@ -42,8 +196,26 @@ extern int NextBlood;
|
|||
extern int NextSpider;
|
||||
extern int NextGunShell;
|
||||
|
||||
#define MAX_SPARKS_FIRE 20
|
||||
#define MAX_FIRE_LIST 32
|
||||
#define MAX_SPARKS_SMOKE 32
|
||||
#define MAX_SPARKS_BLOOD 32
|
||||
#define MAX_GUNFLASH 4
|
||||
#define MAX_GUNSHELL 24
|
||||
#define MAX_DRIPS 32
|
||||
#define MAX_SHOCKWAVE 16
|
||||
#define MAX_ENERGYARCS 32
|
||||
|
||||
extern GUNFLASH_STRUCT Gunflashes[MAX_GUNFLASH];
|
||||
extern FIRE_SPARKS FireSparks[MAX_SPARKS_FIRE];
|
||||
extern SMOKE_SPARKS SmokeSparks[MAX_SPARKS_SMOKE];
|
||||
extern GUNSHELL_STRUCT Gunshells[MAX_GUNSHELL];
|
||||
extern BLOOD_STRUCT Blood[MAX_SPARKS_BLOOD];
|
||||
extern DRIP_STRUCT Drips[MAX_DRIPS];
|
||||
extern SHOCKWAVE_STRUCT ShockWaves[MAX_SHOCKWAVE];
|
||||
extern FIRE_LIST Fires[MAX_FIRE_LIST];
|
||||
extern ENERGY_ARC EnergyArcs[MAX_ENERGYARCS];
|
||||
extern SMOKE_SPARKS SmokeSparks[MAX_SPARKS_SMOKE];
|
||||
extern ENERGY_ARC EnergyArcs[MAX_ENERGY_ARCS];
|
||||
|
||||
void TriggerBlood(int x, int y, int z, int unk, int num);
|
||||
void TriggerExplosionBubble(int x, int y, int z, short roomNum);
|
||||
|
@ -73,7 +245,11 @@ void UpdateBubbles();
|
|||
int GetFreeDrip();
|
||||
void UpdateDrips();
|
||||
void TriggerLaraDrips();
|
||||
int ExplodingDeath(short itemNumber, int meshBits, short flags);
|
||||
|
||||
constexpr auto EXPLODE_HIT_EFFECT = 258;
|
||||
constexpr auto EXPLODE_NORMAL = 256;
|
||||
int ExplodingDeath(short itemNumber, int meshBits, short flags); // EXPLODE_ flags
|
||||
|
||||
int GetFreeShockwave();
|
||||
void TriggerShockwave(PHD_3DPOS* pos, short innerRad, short outerRad, int speed, char r, char g, char b, char life, short angle, short flags);
|
||||
void TriggerShockwaveHitEffect(int x, int y, int z, int color, short rot, int vel);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "framework.h"
|
||||
#include "traps.h"
|
||||
#include "global.h"
|
||||
|
||||
#include "items.h"
|
||||
#include "effect2.h"
|
||||
#include "tomb4fx.h"
|
||||
|
@ -323,7 +323,7 @@ void CeilingTrapDoorCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll) /
|
|||
l->pos.yRot += ANGLE(180);
|
||||
result2 = TestLaraPosition(CeilingTrapDoorBounds, item, l);
|
||||
l->pos.yRot += ANGLE(180);
|
||||
if (TrInput & IN_ACTION && item->status != ITEM_DEACTIVATED && l->currentAnimState == STATE_LARA_JUMP_UP && l->gravityStatus && Lara.gunStatus == LG_NO_ARMS && (result || result2))
|
||||
if (TrInput & IN_ACTION && item->status != ITEM_DESACTIVATED && l->currentAnimState == STATE_LARA_JUMP_UP && l->gravityStatus && Lara.gunStatus == LG_NO_ARMS && (result || result2))
|
||||
{
|
||||
AlignLaraPosition(&CeilingTrapDoorPos, item, l);
|
||||
if (result2)
|
||||
|
@ -363,7 +363,7 @@ void FloorTrapDoorCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll) //
|
|||
ITEM_INFO* item;
|
||||
|
||||
item = &Items[itemNumber];
|
||||
if (TrInput & IN_ACTION && item->status != ITEM_DEACTIVATED && l->currentAnimState == STATE_LARA_STOP && l->animNumber == ANIMATION_LARA_STAY_IDLE && Lara.gunStatus == LG_NO_ARMS
|
||||
if (TrInput & IN_ACTION && item->status != ITEM_DESACTIVATED && l->currentAnimState == STATE_LARA_STOP && l->animNumber == ANIMATION_LARA_STAY_IDLE && Lara.gunStatus == LG_NO_ARMS
|
||||
|| Lara.isMoving && Lara.generalPtr == (void *) itemNumber)
|
||||
{
|
||||
if (TestLaraPosition(FloorTrapDoorBounds, item, l))
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "global.h"
|
||||
|
||||
#include "collide.h"
|
||||
|
||||
extern ITEM_INFO* WBItem;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "framework.h"
|
||||
#include "trmath.h"
|
||||
#include "types.h"
|
||||
#include <cmath>
|
||||
|
||||
// LUT for cos and sin
|
|
@ -1,17 +1,26 @@
|
|||
#pragma once
|
||||
#include "phd_global.h"
|
||||
|
||||
#include "vodoo.h"
|
||||
#include "types.h"
|
||||
constexpr auto PI = 3.14159265358979323846f;
|
||||
constexpr auto RADIAN = 0.01745329252f;
|
||||
constexpr auto ONE_DEGREE = 182;
|
||||
constexpr auto PREDICTIVE_SCALE_FACTOR = 14;
|
||||
constexpr auto W2V_SHIFT = 14; // Shift scale of View.Frame to World.Frame
|
||||
constexpr auto NODE_SHIFT = 15;
|
||||
constexpr auto W2V_SCALE = (1 << W2V_SHIFT); // Scale of View Frame to World Frame
|
||||
constexpr auto WALL_SHIFT = 10;
|
||||
constexpr auto STEP_SIZE = 256;
|
||||
constexpr auto WALL_SIZE = 1024;
|
||||
constexpr auto STEPUP_HEIGHT = ((STEP_SIZE * 3) / 2);
|
||||
constexpr auto BAD_JUMP_CEILING = ((STEP_SIZE * 3) / 4);
|
||||
|
||||
#define PI 3.14159265358979323846f
|
||||
#define RADIAN 0.01745329252f
|
||||
#define SQUARE(x) ((x)*(x))
|
||||
#define CLAMP(x, a, b) ((x)<(a)?(a):((x)>(b)?(b):(x)))
|
||||
#define SIGN(x) ((0 < (x)) - ((x) < 0))
|
||||
#define CLAMPADD(x, a, b) ((x)<(a)?((x)+(a)):((x)>(b)?((x)-(b)):0))
|
||||
#define ONE_DEGREE 182
|
||||
#define CLICK(x) ((x) * STEP_SIZE)
|
||||
#define SECTOR(x) ((x) * WALL_SIZE)
|
||||
#define HIDWORD(l) ((DWORD)(((DWORDLONG)(l)>>32)&0xFFFFFFFF))
|
||||
|
||||
short ANGLE(float angle);
|
||||
float TO_DEGREES(short angle);
|
||||
|
@ -21,7 +30,6 @@ extern short rcossin_tbl[8192];
|
|||
|
||||
int phd_sin(short a);
|
||||
int phd_cos(short a);
|
||||
float ANGLEF(short angle);
|
||||
|
||||
// returns a float between 0-1
|
||||
const float frand();
|
|
@ -1,196 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#define HAIR_SEGMENTS 7 // only classic lara (young lara have more segments !)
|
||||
#define DOUBLE_HAIR_SEGMENTS 14
|
||||
|
||||
#define TEXTURE_PAGE (256 * 256)
|
||||
|
||||
#define PREDICTIVE_SCALE_FACTOR 14
|
||||
#define W2V_SHIFT 14 // Shift scale of View.Frame to World.Frame
|
||||
#define NODE_SHIFT 15
|
||||
#define W2V_SCALE (1 << W2V_SHIFT) // Scale of View Frame to World Frame
|
||||
#define WALL_SHIFT 10
|
||||
#define STEP_SIZE 256
|
||||
#define WALL_SIZE 1024
|
||||
|
||||
/// obj->hitEffect flag
|
||||
#define HIT_NONE 0
|
||||
#define HIT_BLOOD 1
|
||||
#define HIT_SMOKE 2
|
||||
#define HIT_FRAGMENT 3
|
||||
|
||||
#define GUARD 1
|
||||
#define AMBUSH 2
|
||||
#define PATROL1 4
|
||||
#define MODIFY 8
|
||||
#define FOLLOW 16
|
||||
#define PATROL2 32
|
||||
#define ALL_AIOBJ (GUARD|AMBUSH|PATROL1|MODIFY|FOLLOW|PATROL2)
|
||||
|
||||
#define BOX_BLOCKED (1 << 14) // unpassable for other enemies, always set for movable blocks & closed doors
|
||||
#define BOX_LAST (1 << 15) // unpassable by large enemies (T-Rex, Centaur, etc), always set behind doors
|
||||
#define GRAVITY 6
|
||||
#define SWAMP_GRAVITY 2
|
||||
|
||||
#define NUM_SPRITES 256
|
||||
#define UNIT_SHADOW 256
|
||||
#define NO_SHADOW 0
|
||||
#define DEFAULT_RADIUS 10
|
||||
#define ROT_X 4
|
||||
#define ROT_Y 8
|
||||
#define ROT_Z 16
|
||||
|
||||
// ExplodingDeath() last argument flags
|
||||
#define EXPLODE_HIT_EFFECT 258
|
||||
#define EXPLODE_NORMAL 256
|
||||
|
||||
#define FRONT_ARC ANGLE(90)
|
||||
#define NO_ITEM -1
|
||||
#define ALL_MESHBITS -1
|
||||
|
||||
#define GAME_BUFFER_SIZE 128 * 1000000
|
||||
#define MAX_FLIPMAP 255
|
||||
#define NUM_SLOTS 32
|
||||
#define NUM_ITEMS 1023
|
||||
#define NUM_ROOMS 1024
|
||||
#define NUM_ANIMATED_SETS 1024
|
||||
#define DRAW_DISTANCE 200 * 1024.0f
|
||||
#define NUM_STATICS 1000
|
||||
#define MAX_LIGHTS 100
|
||||
#define MAX_LIGHTS_DRAW 16384
|
||||
#define MAX_DYNAMIC_LIGHTS 16384
|
||||
#define MAX_STATICS 1000
|
||||
#define MAX_DRAW_STATICS 16384
|
||||
#define MAX_BONES 32
|
||||
#define MAX_SPRITES 16384
|
||||
#define MAX_SPARKS 1024
|
||||
#define MAX_SPARKS_FIRE 20
|
||||
#define MAX_FIRE_LIST 32
|
||||
#define MAX_SPARKS_SMOKE 32
|
||||
#define MAX_SPARKS_BLOOD 32
|
||||
#define MAX_ENERGY_ARCS 256
|
||||
#define MAX_GUNSHELL 24
|
||||
#define MAX_GUNFLASH 4
|
||||
#define MAX_DRIPS 32
|
||||
#define MAX_DYNAMICS 64
|
||||
constexpr auto MAX_SPLASH = 8;
|
||||
#define MAX_RIPPLES 32
|
||||
#define MAX_CAMERA 18
|
||||
#define MAX_SHOCKWAVE 16
|
||||
#define MAX_EFFECTS 100
|
||||
#define MAX_DEBRIS 256
|
||||
#define NO_ROOM 0xFF
|
||||
#define NO_HEIGHT (-0x7F00)
|
||||
#define NUM_PICKUPS 64
|
||||
|
||||
#define TIMID 0
|
||||
#define VIOLENT 1
|
||||
|
||||
#define LARA_HITE 762
|
||||
|
||||
// Room flags
|
||||
|
||||
#define ENV_FLAG_WATER 0x0001
|
||||
#define ENV_FLAG_SWAMP 0x0004
|
||||
#define ENV_FLAG_OUTSIDE 0x0008
|
||||
#define ENV_FLAG_DYNAMIC_LIT 0x0010
|
||||
#define ENV_FLAG_WIND 0x0020
|
||||
#define ENV_FLAG_NOT_NEAR_OUTSIDE 0x0040
|
||||
#define ENV_FLAG_NO_LENSFLARE 0x0080 // Was quicksand in TR3.
|
||||
#define ENV_FLAG_MIST 0x0100
|
||||
#define ENV_FLAG_CAUSTICS 0x0200
|
||||
#define ENV_FLAG_UNKNOWN3 0x0400
|
||||
|
||||
// From TR3, we need to check
|
||||
#define SP_FLAT 1
|
||||
#define SP_SCALE 2
|
||||
#define SP_BLOOD 4
|
||||
#define SP_DEF 8
|
||||
#define SP_ROTATE 16
|
||||
#define SP_EXPLOSION 32
|
||||
#define SP_FX 64
|
||||
#define SP_ITEM 128
|
||||
#define SP_WIND 256
|
||||
#define SP_EXPDEF 512
|
||||
#define SP_USEFXOBJPOS 1024
|
||||
#define SP_UNDERWEXP 2048
|
||||
#define SP_NODEATTACH 4096
|
||||
#define SP_PLASMAEXP 8192
|
||||
|
||||
#define SD_EXPLOSION 1
|
||||
#define SD_UWEXPLOSION 2
|
||||
|
||||
#define SEMITRANS 1
|
||||
#define COLADD 2
|
||||
#define COLSUB 3
|
||||
#define WEIRD 4
|
||||
|
||||
#define ONESHOT 0x100
|
||||
|
||||
#define DATA_TYPE 0x1F
|
||||
#define DATA_TILT 0xF // tile type (FLOOR_TYPE enum)
|
||||
#define DATA_STATIC 0xFF // probably add static collision
|
||||
#define END_BIT 0x8000
|
||||
#define VALUE_BITS 0x3FF
|
||||
#define CODE_BITS 0x3e00
|
||||
#define REVERSE 0x4000
|
||||
#define SWONESHOT 0x40
|
||||
#define ATONESHOT 0x80
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define NUM_DEBRIS 256
|
||||
|
||||
#define WEAPON_AMMO1 0
|
||||
#define WEAPON_AMMO2 1
|
||||
#define WEAPON_AMMO3 2
|
||||
#define WEAPON_AMMO4 3
|
||||
|
||||
#define BLOCKABLE 0x8000
|
||||
#define BLOCKED 0x4000
|
||||
#define OVERLAP_INDEX 0x3FFF
|
||||
#define SEARCH_NUMBER 0x7FFF
|
||||
#define BLOCKED_SEARCH 0x8000
|
||||
|
||||
#define FOLLOW_CENTRE 1
|
||||
#define NO_CHUNKY 2
|
||||
#define CHASE_OBJECT 3
|
||||
#define NO_MINY 0xFFFFFF
|
||||
|
||||
#define NO_BOX 0x7FF
|
||||
#define BOX_JUMP 0x800
|
||||
#define BOX_MONKEY 0x2000
|
||||
|
||||
#define BOX_NUMBER 0x7FF
|
||||
#define BOX_END_BIT 0x8000
|
||||
|
||||
#define EXPAND_LEFT 0x1
|
||||
#define EXPAND_RIGHT 0x2
|
||||
#define EXPAND_TOP 0x4
|
||||
#define EXPAND_BOTTOM 0x8
|
||||
|
||||
#define NO_FLYING 0
|
||||
#define FLY_ZONE 0x2000
|
||||
|
||||
#define CLIP_LEFT 1
|
||||
#define CLIP_RIGHT 2
|
||||
#define CLIP_TOP 4
|
||||
#define CLIP_BOTTOM 8
|
||||
#define ALL_CLIP (CLIP_LEFT|CLIP_RIGHT|CLIP_TOP|CLIP_BOTTOM)
|
||||
#define SECONDARY_CLIP 16
|
||||
|
||||
#define SLOPE_DIF 60
|
||||
#define LARA_FREEFALL_SPEED 131
|
||||
#define LARA_LEAN_RATE ANGLE(1.5)
|
||||
#define LARA_LEAN_MAX ANGLE(11)
|
||||
#define LARA_TURN_RATE ANGLE(2.25)
|
||||
#define LARA_JUMP_TURN ANGLE(3)
|
||||
#define LARA_SLOW_TURN ANGLE(4)
|
||||
#define LARA_MED_TURN ANGLE(6)
|
||||
#define LARA_FAST_TURN ANGLE(8)
|
||||
#define STEPUP_HEIGHT ((STEP_SIZE*3)/2)
|
||||
#define BAD_JUMP_CEILING ((STEP_SIZE*3)/4)
|
||||
#define LARA_RAD 100
|
||||
#define LARA_VELOCITY 12
|
File diff suppressed because it is too large
Load diff
|
@ -1,13 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "vodoo.h"
|
||||
#include "constants.h"
|
||||
#include "enums.h"
|
||||
#include "objectslist.h"
|
||||
#include "types.h"
|
||||
#include "trmath.h"
|
||||
#include "macros.h"
|
||||
#include "malloc.h"
|
||||
#include "GameLogicScript.h"
|
||||
#include "GameFlowScript.h"
|
||||
#include "Renderer11.h"
|
|
@ -1,29 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#define RGB555(r, g, b) ((r << 7) & 0x7C00 | (g << 2) & 0x3E0 | (b >> 3) & 0x1F)
|
||||
#define RED5(rgb) (((rgb >> 10) & 0x1F) << 3)
|
||||
#define GREEN5(rgb) (((rgb >> 5) & 0x1F) << 3)
|
||||
#define BLUE5(rgb) ((rgb & 0x1F) << 3)
|
||||
#define WHITE555 RGB555(255, 255, 255)
|
||||
#define GRAY555 RGB555(128, 128, 128)
|
||||
#define BLACK555 RGB555( 0, 0, 0)
|
||||
#define XZ_GET_SECTOR(room, x, z) (room->floor[((z) >> WALL_SHIFT) + ((x) >> WALL_SHIFT) * room->xSize])
|
||||
|
||||
#define ADD_PTR(p, t, n) p = (t*)((char*)(p) + (ptrdiff_t)(n));
|
||||
|
||||
///#define ZONE(A) (((A) >> (WALL_SIZE - 2)) - 1)
|
||||
#define ZONE(A) FlipStatus + 2 * A
|
||||
#define CHECK_CLICK(x) CLICK(x) / 2
|
||||
|
||||
#define RED(rgb) (((rgb) >> 16) & 0xFF)
|
||||
#define GREEN(rgb) (((rgb) >> 8) & 0xFF)
|
||||
#define BLUE(rgb) ((rgb) & 0xFF)
|
||||
#define ALPHA(rgb) (((rgb) >> 24) & 0xFF)
|
||||
|
||||
#define MESHES(slot, mesh) Meshes[Objects[slot].meshIndex + mesh]
|
||||
#define MESH_BITS(x) (1 << x)
|
||||
#define LARA_MESHES(slot, mesh) Lara.meshPtrs[mesh] = MESHES(slot, mesh)
|
||||
#define CHECK_LARA_MESHES(slot, mesh) Lara.meshPtrs[mesh] == MESHES(slot, mesh)
|
||||
#define INIT_LARA_MESHES(mesh, to, from) Lara.meshPtrs[mesh] = LARA_MESHES(to, mesh) = LARA_MESHES(from, mesh)
|
||||
|
||||
#define HIDWORD(l) ((DWORD)(((DWORDLONG)(l)>>32)&0xFFFFFFFF))
|
File diff suppressed because it is too large
Load diff
|
@ -1,19 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include <Windows.h>
|
||||
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
BYTE opCode; // must be 0xE9;
|
||||
DWORD offset; // jump offset
|
||||
} JMP;
|
||||
#pragma pack(pop)
|
||||
|
||||
#define INJECT(from,to) { \
|
||||
((JMP*)(from))->opCode = 0xE9; \
|
||||
((JMP*)(from))->offset = (DWORD)(to) - ((DWORD)(from) + sizeof(JMP)); \
|
||||
}
|
||||
|
||||
#define VAR_U_(address, type) (*(type*)(address)) // uninitialized variable
|
||||
#define VAR_I_(address, type, value) (*(type*)(address)) // initialized variable (value is just for info)
|
||||
#define ARRAY_(address, type, length) (*(type(*)length)(address)) // array (can be multidimensional)
|
|
@ -1,5 +1,5 @@
|
|||
#include "framework.h"
|
||||
#include "newobjects.h"
|
||||
#include "tr4_bubbles.h"
|
||||
#include "effect2.h"
|
||||
#include "debris.h"
|
||||
#include "items.h"
|
||||
|
@ -30,7 +30,7 @@ void BubblesEffect1(short fxNum, short xVel, short yVel, short zVel)
|
|||
spark->dG = spark->dB + 64;
|
||||
spark->fadeToBlack = 8;
|
||||
spark->colFadeSpeed = (GetRandomControl() & 3) + 4;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 3) + 16;
|
||||
spark->y = 0;
|
||||
spark->x = (GetRandomControl() & 0xF) - 8;
|
||||
|
@ -84,7 +84,7 @@ void BubblesEffect2(short fxNum, short xVel, short yVel, short zVel)
|
|||
spark->dG = spark->dR = (GetRandomControl() & 0x7F) + 32;
|
||||
spark->fadeToBlack = 8;
|
||||
spark->colFadeSpeed = (GetRandomControl() & 3) + 4;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 3) + 16;
|
||||
spark->y = 0;
|
||||
spark->x = (GetRandomControl() & 0xF) - 8;
|
||||
|
@ -132,7 +132,7 @@ void BubblesEffect3(short fxNum, short xVel, short yVel, short zVel)
|
|||
spark->dG = spark->dG >> 1;
|
||||
spark->fadeToBlack = 8;
|
||||
spark->colFadeSpeed = (GetRandomControl() & 3) + 8;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->dynamic = -1;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 7) + 32;
|
||||
spark->y = 0;
|
||||
|
@ -196,7 +196,7 @@ void BubblesEffect4(short fxNum, short xVel, short yVel, short zVel)
|
|||
}
|
||||
spark->fadeToBlack = 8;
|
||||
spark->colFadeSpeed = (GetRandomControl() & 3) + 4;
|
||||
spark->transType = 2;
|
||||
spark->transType = COLADD;
|
||||
spark->life = spark->sLife = (GetRandomControl() & 3) + 16;
|
||||
spark->y = 0;
|
||||
spark->x = (GetRandomControl() & 0xF) - 8;
|
||||
|
@ -224,7 +224,7 @@ void BubblesEffect4(short fxNum, short xVel, short yVel, short zVel)
|
|||
}
|
||||
}
|
||||
|
||||
int BubblesShatterFunction(FX_INFO* fx, int param1, int param2)
|
||||
void BubblesShatterFunction(FX_INFO* fx, int param1, int param2)
|
||||
{
|
||||
ShatterItem.yRot = fx->pos.yRot;
|
||||
ShatterItem.meshp = Meshes[fx->frameNumber];
|
||||
|
@ -234,8 +234,6 @@ int BubblesShatterFunction(FX_INFO* fx, int param1, int param2)
|
|||
ShatterItem.bit = 0;
|
||||
ShatterItem.flags = fx->flag2 & 0x400;
|
||||
ShatterObject(&ShatterItem, 0, param2, fx->roomNumber, param1);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void BubblesControl(short fxNum)
|
||||
|
@ -245,17 +243,17 @@ void BubblesControl(short fxNum)
|
|||
short angles[2];
|
||||
phd_GetVectorAngles(
|
||||
LaraItem->pos.xPos - fx->pos.xPos,
|
||||
LaraItem->pos.yPos - fx->pos.yPos - 256,
|
||||
LaraItem->pos.yPos - fx->pos.yPos - STEP_SIZE,
|
||||
LaraItem->pos.zPos - fx->pos.zPos,
|
||||
angles);
|
||||
|
||||
int unk1 = 0; // v44
|
||||
int unk2 = 0; // v3
|
||||
int maxRotation = 0;
|
||||
int maxSpeed = 0;
|
||||
|
||||
if (fx->flag1 == 1)
|
||||
{
|
||||
unk1 = 512;
|
||||
unk2 = 256;
|
||||
maxRotation = 512;
|
||||
maxSpeed = 256;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -265,16 +263,16 @@ void BubblesControl(short fxNum)
|
|||
{
|
||||
fx->counter--;
|
||||
}
|
||||
unk1 = 256;
|
||||
maxRotation = 256;
|
||||
}
|
||||
else
|
||||
{
|
||||
unk1 = 768;
|
||||
maxRotation = 768;
|
||||
}
|
||||
unk2 = 192;
|
||||
maxSpeed = 192;
|
||||
}
|
||||
|
||||
if (fx->speed < unk2)
|
||||
if (fx->speed < maxSpeed)
|
||||
{
|
||||
if (fx->flag1 == 6)
|
||||
{
|
||||
|
@ -286,29 +284,27 @@ void BubblesControl(short fxNum)
|
|||
}
|
||||
|
||||
int dy = angles[0] - fx->pos.yRot;
|
||||
if (abs(dy) > ANGLE(180))
|
||||
if (abs(dy) > ANGLE(180.0f))
|
||||
{
|
||||
dy = -dy;
|
||||
}
|
||||
|
||||
int dx = angles[1] - fx->pos.xRot;
|
||||
if (abs(dx) > ANGLE(180))
|
||||
{
|
||||
if (abs(dx) > ANGLE(180.0f))
|
||||
dx = -dx;
|
||||
}
|
||||
|
||||
dy >>= 3;
|
||||
dx >>= 3;
|
||||
|
||||
if (dy < -unk1)
|
||||
dy = -unk1;
|
||||
else if (dy > unk1)
|
||||
dy = unk1;
|
||||
if (dy < -maxRotation)
|
||||
dy = -maxRotation;
|
||||
else if (dy > maxRotation)
|
||||
dy = maxRotation;
|
||||
|
||||
if (dx < -unk1)
|
||||
dx = -unk1;
|
||||
else if (dx > unk1)
|
||||
dx = unk1;
|
||||
if (dx < -maxRotation)
|
||||
dx = -maxRotation;
|
||||
else if (dx > maxRotation)
|
||||
dx = maxRotation;
|
||||
|
||||
if (fx->flag1 != 4 && (fx->flag1 != 6 || !fx->counter))
|
||||
{
|
||||
|
@ -319,9 +315,7 @@ void BubblesControl(short fxNum)
|
|||
|
||||
fx->pos.zRot += 16 * fx->speed;
|
||||
if (fx->flag1 == 6)
|
||||
{
|
||||
fx->pos.zRot += 16 * fx->speed;
|
||||
}
|
||||
|
||||
int oldX = fx->pos.xPos;
|
||||
int oldY = fx->pos.yPos;
|
||||
|
@ -344,21 +338,11 @@ void BubblesControl(short fxNum)
|
|||
fx->pos.zPos = oldZ;
|
||||
|
||||
if (fx->flag1 != 6)
|
||||
{
|
||||
BubblesShatterFunction(fx, 0, -32);
|
||||
}
|
||||
|
||||
if (fx->flag1 == 1)
|
||||
{
|
||||
TriggerShockwave(
|
||||
(PHD_3DPOS*)&fx->pos,
|
||||
32,
|
||||
160,
|
||||
64,
|
||||
64, 128, 00,
|
||||
24,
|
||||
(((~Rooms[fx->roomNumber].flags) >> 4) & 2) << 16, 0);
|
||||
|
||||
TriggerShockwave(&fx->pos, 32, 160, 64, 64, 128, 00, 24, (((~Rooms[fx->roomNumber].flags) >> 4) & 2) << 16, 0);
|
||||
TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 2, fx->roomNumber);
|
||||
}
|
||||
else
|
||||
|
@ -436,10 +420,9 @@ void BubblesControl(short fxNum)
|
|||
|
||||
if (fx->flag1 == 1)
|
||||
{
|
||||
TriggerShockwave((PHD_3DPOS*)fx, 48, 240, 64, 64, 128, 0, 24, 0, 0);
|
||||
TriggerShockwave(&fx->pos, 48, 240, 64, 64, 128, 0, 24, 0, 0);
|
||||
TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 2, fx->roomNumber);
|
||||
LaraBurn();
|
||||
//Lara.gassed = true; BYTE1(Lara_Flags) |= 2u;
|
||||
}
|
||||
else if (fx->flag1)
|
||||
{
|
||||
|
@ -447,42 +430,34 @@ void BubblesControl(short fxNum)
|
|||
{
|
||||
case 3:
|
||||
case 4:
|
||||
TriggerShockwave((PHD_3DPOS*)fx, 32, 160, 64, 128, 64, 0, 16, 0, 1);
|
||||
TriggerShockwave(&fx->pos, 32, 160, 64, 128, 64, 0, 16, 0, 1);
|
||||
break;
|
||||
case 5:
|
||||
TriggerShockwave((PHD_3DPOS*)fx, 32, 160, 64, 0, 96, 128, 16, 0, 2);
|
||||
TriggerShockwave(&fx->pos, 32, 160, 64, 0, 96, 128, 16, 0, 2);
|
||||
break;
|
||||
case 2:
|
||||
TriggerShockwave((PHD_3DPOS*)fx, 32, 160, 64, 0, 128, 128, 16, 0, 2);
|
||||
TriggerShockwave(&fx->pos, 32, 160, 64, 0, 128, 128, 16, 0, 2);
|
||||
break;
|
||||
case 6:
|
||||
TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 0, fx->roomNumber);
|
||||
TriggerShockwave((PHD_3DPOS*)fx, 48, 240, 64, 0, 96, 128, 24, 0, 0);
|
||||
TriggerShockwave(&fx->pos, 48, 240, 64, 0, 96, 128, 24, 0, 0);
|
||||
fx->pos.yPos -= 128;
|
||||
TriggerShockwave((PHD_3DPOS*)fx, 48, 240, 48, 0, 112, 128, 16, 0, 0);
|
||||
TriggerShockwave(&fx->pos, 48, 240, 48, 0, 112, 128, 16, 0, 0);
|
||||
fx->pos.yPos += 256;
|
||||
TriggerShockwave((PHD_3DPOS*)fx, 48, 240, 48, 0, 112, 128, 16, 0, 0);
|
||||
TriggerShockwave(&fx->pos, 48, 240, 48, 0, 112, 128, 16, 0, 0);
|
||||
LaraBurn();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TriggerShockwave(
|
||||
(PHD_3DPOS*)fx,
|
||||
24,
|
||||
88,
|
||||
48,
|
||||
64, 128, 0, 16,
|
||||
(((~Rooms[fx->roomNumber].flags) >> 4) & 2) << 16, 0);
|
||||
TriggerShockwave( &fx->pos, 24, 88, 48, 64, 128, 0, 16, (((~Rooms[fx->roomNumber].flags) >> 4) & 2) << 16, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (roomNumber != fx->roomNumber)
|
||||
{
|
||||
EffectNewRoom(fxNum, roomNumber);
|
||||
}
|
||||
|
||||
int dx = oldX - fx->pos.xPos;
|
||||
int dy = oldY - fx->pos.yPos;
|
||||
|
@ -499,14 +474,10 @@ void BubblesControl(short fxNum)
|
|||
else if (fx->flag1 < 3 || fx->flag1 > 5)
|
||||
{
|
||||
if (fx->flag1 == 2)
|
||||
{
|
||||
BubblesEffect2(fxNum, 16 * dx, 16 * dy, 16 * dz);
|
||||
}
|
||||
else if (fx->flag1 == 6)
|
||||
{
|
||||
BubblesEffect3(fxNum, 16 * dx, 16 * dy, 16 * dz);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
BubblesEffect4(fxNum, 16 * dx, 16 * dy, 16 * dz);
|
||||
|
|
3
TR5Main/Objects/Effects/tr4_bubbles.h
Normal file
3
TR5Main/Objects/Effects/tr4_bubbles.h
Normal file
|
@ -0,0 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
void BubblesControl(short fxNum);
|
|
@ -1,5 +1,5 @@
|
|||
#include "framework.h"
|
||||
#include "newobjects.h"
|
||||
#include "tr1_doppelganger.h"
|
||||
#include "box.h"
|
||||
#include "items.h"
|
||||
#include "larafire.h"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#include "framework.h"
|
||||
#include "newobjects.h"
|
||||
#include "tr1_natla.h"
|
||||
#include "box.h"
|
||||
#include "people.h"
|
||||
#include "items.h"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#include "framework.h"
|
||||
#include "newobjects.h"
|
||||
#include "tr1_natla_mutant.h"
|
||||
#include "box.h"
|
||||
#include "effect2.h"
|
||||
#include "items.h"
|
||||
|
@ -214,7 +214,7 @@ void NatlaEvilControl(short itemNum)
|
|||
CreatureAnimation(itemNum, 0, 0);
|
||||
|
||||
/* Explode on death and set off heavy trigger into the bargain */
|
||||
if (item->status == ITEM_DEACTIVATED)
|
||||
if (item->status == ITEM_DESACTIVATED)
|
||||
{
|
||||
SoundEffect(171, &item->pos, NULL);
|
||||
ExplodingDeath(itemNum, 0xffffffff, ABORT_PART_DAMAGE);
|
||||
|
@ -224,6 +224,6 @@ void NatlaEvilControl(short itemNum)
|
|||
TestTriggers(TriggerIndex, TRUE, 0);
|
||||
|
||||
KillItem(itemNum);
|
||||
item->status = ITEM_DEACTIVATED;
|
||||
item->status = ITEM_DESACTIVATED;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
#include "framework.h"
|
||||
#include "newobjects.h"
|
||||
#include "tr1_wolf.h"
|
||||
#include "items.h"
|
||||
#include "box.h"
|
||||
#include "effect.h"
|
||||
|
|
|
@ -322,9 +322,9 @@ void DragonControl(short backNum)
|
|||
// all over
|
||||
DisableBaddieAI(itemNum);
|
||||
KillItem(backNum);
|
||||
back->status = ITEM_DEACTIVATED;
|
||||
back->status = ITEM_DESACTIVATED;
|
||||
KillItem(itemNum);
|
||||
item->status = ITEM_DEACTIVATED;
|
||||
item->status = ITEM_DESACTIVATED;
|
||||
return;
|
||||
}
|
||||
else if (dragon->flags < -100)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "types.h"
|
||||
#include "items.h"
|
||||
#include "collide.h"
|
||||
|
||||
void DragonCollision(short itemNum, ITEM_INFO* laraitem, COLL_INFO* coll);
|
||||
|
|
|
@ -232,7 +232,7 @@ void SkidManControl(short riderNum)
|
|||
rider->animNumber = item->animNumber + (Objects[ID_SNOWMOBILE_DRIVER].animIndex - Objects[ID_SNOWMOBILE_GUN].animIndex);
|
||||
rider->frameNumber = item->frameNumber + (Anims[rider->animNumber].frameBase - Anims[item->animNumber].frameBase);
|
||||
}
|
||||
else if (rider->status == ITEM_DEACTIVATED && item->speed == 0 && item->fallspeed == 0)
|
||||
else if (rider->status == ITEM_DESACTIVATED && item->speed == 0 && item->fallspeed == 0)
|
||||
{
|
||||
/* If rider has reached end of his death animation, turn his skidoo into one that Lara can ride */
|
||||
RemoveActiveItem(riderNum);
|
||||
|
@ -242,7 +242,7 @@ void SkidManControl(short riderNum)
|
|||
|
||||
DisableBaddieAI(item_number);
|
||||
item->objectNumber = ID_SNOWMOBILE;
|
||||
item->status = ITEM_DEACTIVATED;
|
||||
item->status = ITEM_DESACTIVATED;
|
||||
InitialiseSkidoo(item_number);
|
||||
|
||||
((SKIDOO_INFO*)item->data)->armed = true;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "types.h"
|
||||
#include "items.h"
|
||||
#include "collide.h"
|
||||
|
||||
void InitialiseSkidman(short itemNum);
|
||||
|
|
|
@ -47,7 +47,7 @@ void InitialiseSpearGuardian(short itemNum)
|
|||
item->frameNumber = anim->frameBase;
|
||||
item->currentAnimState = anim->currentAnimState;
|
||||
|
||||
//item->status = ITEM_INACTIVE;
|
||||
//item->status = ITEM_NOT_ACTIVE;
|
||||
//item->meshBits = 0;
|
||||
}
|
||||
|
||||
|
@ -82,7 +82,7 @@ void SpearGuardianControl(short itemNum)
|
|||
item->objectNumber = ID_SPEAR_GUARDIAN;
|
||||
DisableBaddieAI(itemNum);
|
||||
KillItem(itemNum);
|
||||
item->status = ITEM_DEACTIVATED;
|
||||
item->status = ITEM_DESACTIVATED;
|
||||
item->flags |= ONESHOT;
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ void InitialiseSwordGuardian(short itemNum)
|
|||
|
||||
ClearItem(itemNum);
|
||||
|
||||
//item->status = ITEM_INACTIVE;
|
||||
//item->status = ITEM_NOT_ACTIVE;
|
||||
//item->meshBits = 0;
|
||||
}
|
||||
|
||||
|
@ -66,7 +66,7 @@ void SwordGuardianControl(short itemNum)
|
|||
//item->objectNumber = ID_SWAT;
|
||||
DisableBaddieAI(itemNum);
|
||||
KillItem(itemNum);
|
||||
//item->status = ITEM_DEACTIVATED;
|
||||
//item->status = ITEM_DESACTIVATED;
|
||||
//item->flags |= ONESHOT;
|
||||
item->currentAnimState = 12;
|
||||
|
||||
|
@ -80,7 +80,7 @@ void SwordGuardianControl(short itemNum)
|
|||
item->objectNumber = ID_SWAT;
|
||||
DisableBaddieAI(itemNum);
|
||||
KillItem(itemNum);
|
||||
item->status = ITEM_DEACTIVATED;
|
||||
item->status = ITEM_DESACTIVATED;
|
||||
item->flags |= ONESHOT;
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "types.h"
|
||||
#include "items.h"
|
||||
#include "collide.h"
|
||||
|
||||
void InitialiseBoat(short itemNum);
|
||||
|
|
|
@ -196,7 +196,7 @@ static void SkidooExplode(ITEM_INFO* skidoo)
|
|||
|
||||
ExplodingDeath(Lara.Vehicle, -1, 256);
|
||||
KillItem(Lara.Vehicle);
|
||||
skidoo->status = ITEM_DEACTIVATED;
|
||||
skidoo->status = ITEM_DESACTIVATED;
|
||||
SoundEffect(SFX_EXPLOSION1, 0, 0);
|
||||
SoundEffect(SFX_EXPLOSION2, 0, 0);
|
||||
Lara.Vehicle = NO_ITEM;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "types.h"
|
||||
#include "items.h"
|
||||
#include "collide.h"
|
||||
|
||||
typedef struct SKIDOO_INFO
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#pragma once
|
||||
#include "types.h"
|
||||
#include "items.h"
|
||||
|
||||
void SetupShoal(int shoalNumber);
|
||||
void ControlFish(short itemNumber);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue