2018-08-19 09:46:58 +02:00
|
|
|
#pragma once
|
2020-05-30 15:55:23 +02:00
|
|
|
#include "phd_global.h"
|
|
|
|
#include "items.h"
|
|
|
|
#include "room.h"
|
2018-08-19 09:46:58 +02:00
|
|
|
|
2020-05-30 15:55:23 +02:00
|
|
|
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)
|
2019-12-10 18:25:48 +01:00
|
|
|
|
2019-12-22 00:20:10 +01:00
|
|
|
extern int KeyTriggerActive;
|
2020-01-16 19:14:35 +01:00
|
|
|
extern byte IsAtmospherePlaying;
|
|
|
|
extern byte FlipStatus;
|
2020-05-30 15:55:23 +02:00
|
|
|
|
|
|
|
constexpr auto MAX_FLIPMAP = 255;
|
2020-05-27 19:07:34 +02:00
|
|
|
extern int FlipStats[MAX_FLIPMAP];
|
|
|
|
extern int FlipMap[MAX_FLIPMAP];
|
2020-05-30 15:55:23 +02:00
|
|
|
|
2020-01-19 08:12:51 +01:00
|
|
|
extern bool InItemControlLoop;
|
|
|
|
extern short ItemNewRoomNo;
|
|
|
|
extern short ItemNewRooms[512];
|
|
|
|
extern short NextFxActive;
|
|
|
|
extern short NextFxFree;
|
|
|
|
extern short NextItemActive;
|
|
|
|
extern short NextItemFree;
|
2020-04-01 13:09:14 +02:00
|
|
|
extern short* TriggerIndex;
|
2020-04-15 18:30:34 +02:00
|
|
|
extern int DisableLaraControl;
|
2020-04-22 14:12:10 +02:00
|
|
|
extern int WeatherType;
|
|
|
|
extern int LaraDrawType;
|
|
|
|
extern int NumberSoundSources;
|
|
|
|
extern OBJECT_VECTOR* SoundSources;
|
|
|
|
extern int NumAnimatedTextures;
|
|
|
|
extern short* AnimTextureRanges;
|
|
|
|
extern int nAnimUVRanges;
|
2020-04-23 19:22:01 +02:00
|
|
|
extern int Wibble;
|
|
|
|
extern int SetDebounce;
|
|
|
|
extern int CurrentAtmosphere;
|
2020-04-24 19:15:05 +02:00
|
|
|
extern short ShatterSounds[18][10];
|
|
|
|
extern int CurrentAtmosphere;
|
|
|
|
extern short CurrentRoom;
|
|
|
|
extern int GameTimer;
|
|
|
|
extern short GlobalCounter;
|
|
|
|
extern byte LevelComplete;
|
|
|
|
extern short DelCutSeqPlayer;
|
|
|
|
extern int LastInventoryItem;
|
|
|
|
extern int TrackCameraInit;
|
|
|
|
extern short TorchRoom;
|
|
|
|
extern int InitialiseGame;
|
|
|
|
extern int RequiredStartPos;
|
|
|
|
extern int WeaponDelay;
|
|
|
|
extern int WeaponEnemyTimer;
|
2020-05-30 15:55:23 +02:00
|
|
|
extern HEIGHT_TYPES HeightType;
|
2020-04-24 19:15:05 +02:00
|
|
|
extern int HeavyTriggered;
|
|
|
|
extern short SkyPos1;
|
|
|
|
extern short SkyPos2;
|
|
|
|
extern signed char SkyVelocity1;
|
|
|
|
extern signed char SkyVelocity2;
|
|
|
|
extern CVECTOR SkyColor1;
|
|
|
|
extern CVECTOR SkyColor2;
|
|
|
|
extern int CutSeqNum;
|
|
|
|
extern int CutSeqTriggered;
|
|
|
|
extern int GlobalPlayingCutscene;
|
|
|
|
extern int CurrentLevel;
|
2020-05-27 19:07:34 +02:00
|
|
|
extern bool SoundActive;
|
|
|
|
extern bool DoTheGame;
|
|
|
|
extern bool ThreadEnded;
|
2020-04-24 19:15:05 +02:00
|
|
|
extern int OnFloor;
|
|
|
|
extern int SmokeWindX;
|
|
|
|
extern int SmokeWindZ;
|
|
|
|
extern int OnObject;
|
|
|
|
extern int KillEverythingFlag;
|
|
|
|
extern int FlipTimer;
|
|
|
|
extern int FlipEffect;
|
|
|
|
extern int TriggerTimer;
|
|
|
|
extern int JustLoaded;
|
|
|
|
extern int PoisonFlags;
|
|
|
|
extern int OldLaraBusy;
|
|
|
|
extern int Infrared;
|
|
|
|
extern short FlashFadeR;
|
|
|
|
extern short FlashFadeG;
|
|
|
|
extern short FlashFadeB;
|
|
|
|
extern short FlashFader;
|
|
|
|
extern short IsRoomOutsideNo;
|
2020-04-30 06:44:29 +02:00
|
|
|
extern int TiltXOffset;
|
|
|
|
extern int TiltYOffset;
|
2019-12-22 00:20:10 +01:00
|
|
|
|
2019-12-02 14:49:19 +01:00
|
|
|
GAME_STATUS DoTitle(int index);
|
|
|
|
GAME_STATUS DoLevel(int index, int ambient, bool loadFromSavegame);
|
|
|
|
GAME_STATUS ControlPhase(int numFrames, int demoMode);
|
|
|
|
void UpdateSky();
|
|
|
|
void AnimateWaterfalls();
|
|
|
|
void ActivateKey();
|
|
|
|
short GetDoor(FLOOR_INFO* floor);
|
2019-12-04 18:51:23 +01:00
|
|
|
void TranslateItem(ITEM_INFO* item, int x, int y, int z);
|
2019-12-02 14:49:19 +01:00
|
|
|
void TestTriggers(short* data, int heavy, int HeavyFlags);
|
2019-12-05 17:35:57 +01:00
|
|
|
int GetWaterSurface(int x, int y, int z, short roomNumber);
|
2019-12-08 19:01:57 +01:00
|
|
|
void KillMoveItems();
|
|
|
|
void KillMoveEffects();
|
|
|
|
int GetChange(ITEM_INFO* item, ANIM_STRUCT* anim);
|
|
|
|
void AlterFloorHeight(ITEM_INFO* item, int height);
|
|
|
|
int CheckNoColCeilingTriangle(FLOOR_INFO* floor, int x, int z);
|
|
|
|
int CheckNoColFloorTriangle(FLOOR_INFO* floor, int x, int z);
|
2019-12-14 08:43:34 +01:00
|
|
|
int GetFloorHeight(FLOOR_INFO* floor, int x, int y, int z);
|
2019-12-14 18:24:06 +01:00
|
|
|
FLOOR_INFO* GetFloor(int x, int y, int z, short* roomNumber);
|
2020-04-01 07:24:15 +02:00
|
|
|
//void UpdateDebris();
|
2019-12-27 23:54:40 -03:00
|
|
|
int LOS(GAME_VECTOR* start, GAME_VECTOR* end);
|
|
|
|
int xLOS(GAME_VECTOR* start, GAME_VECTOR* end);
|
|
|
|
int zLOS(GAME_VECTOR* start, GAME_VECTOR* end);
|
|
|
|
int ClipTarget(GAME_VECTOR* start, GAME_VECTOR* target);
|
2020-01-07 17:33:13 -03:00
|
|
|
int GetTargetOnLOS(GAME_VECTOR* src, GAME_VECTOR* dest, int DrawTarget, int firing);
|
|
|
|
int ObjectOnLOS2(GAME_VECTOR* start, GAME_VECTOR* end, PHD_VECTOR* vec, MESH_INFO** mesh);
|
|
|
|
int GetRandomControl();
|
|
|
|
void SeedRandomControl(int seed);
|
|
|
|
int GetRandomDraw();
|
|
|
|
void SeedRandomDraw(int seed);
|
|
|
|
int GetCeiling(FLOOR_INFO* floor, int x, int y, int z);
|
2020-01-07 11:06:26 +01:00
|
|
|
int DoRayBox(GAME_VECTOR* start, GAME_VECTOR* end, short* box, PHD_3DPOS* itemOrStaticPos, PHD_VECTOR* hitPos, short closesItemNumber);
|
2020-01-08 13:25:42 +01:00
|
|
|
void AnimateItem(ITEM_INFO* item);
|
2020-01-08 17:13:44 +01:00
|
|
|
void DoFlipMap(short group);
|
|
|
|
void AddRoomFlipItems(ROOM_INFO* r);
|
|
|
|
void RemoveRoomFlipItems(ROOM_INFO* r);
|
|
|
|
void PlaySoundTrack(short track, short flags);
|
|
|
|
void RumbleScreen();
|
2020-01-08 17:28:10 +01:00
|
|
|
void RefreshCamera(short type, short* data);
|
2020-01-10 17:06:49 -03:00
|
|
|
int ExplodeItemNode(ITEM_INFO* item, int Node, int NoXZVel, int bits);
|
|
|
|
int TriggerActive(ITEM_INFO* item);
|
2020-01-14 13:14:52 +01:00
|
|
|
int GetWaterHeight(int x, int y, int z, short roomNumber);
|
2020-02-10 10:38:00 +01:00
|
|
|
int is_object_in_room(short roomNumber, short objectNumber);
|
|
|
|
void InterpolateAngle(short angle, short* rotation, short* outAngle, int shift);
|
2020-04-15 18:30:34 +02:00
|
|
|
int IsRoomOutside(int x, int y, int z);
|
2019-12-07 08:36:13 +01:00
|
|
|
|
2020-05-27 09:21:20 +02:00
|
|
|
unsigned CALLBACK GameMain(void*);
|