2020-05-30 15:55:23 +02:00
|
|
|
#pragma once
|
2020-06-26 07:06:18 +02:00
|
|
|
#include <framework.h>
|
2020-07-03 07:05:33 +02:00
|
|
|
#include <newtypes.h>
|
2020-05-30 15:55:23 +02:00
|
|
|
|
2020-07-25 18:02:35 +02:00
|
|
|
struct ANIM_FRAME;
|
|
|
|
|
2020-06-28 15:51:33 +02:00
|
|
|
struct ROOM_VERTEX
|
2020-05-30 15:55:23 +02:00
|
|
|
{
|
2020-06-28 15:51:33 +02:00
|
|
|
Vector3 position;
|
|
|
|
Vector3 normal;
|
|
|
|
Vector2 textureCoordinates;
|
|
|
|
Vector3 color;
|
|
|
|
int effects;
|
2020-07-03 07:05:33 +02:00
|
|
|
int index;
|
2020-05-30 15:55:23 +02:00
|
|
|
};
|
|
|
|
|
2020-06-26 07:06:18 +02:00
|
|
|
struct ROOM_DOOR
|
|
|
|
{
|
|
|
|
short room;
|
|
|
|
Vector3 normal;
|
|
|
|
Vector3 vertices[4];
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct ROOM_LIGHT
|
2020-05-30 15:55:23 +02:00
|
|
|
{
|
2020-07-26 16:17:54 +02:00
|
|
|
int x, y, z; // Position of light, in world coordinates
|
2020-05-30 15:55:23 +02:00
|
|
|
float r, g, b; // Colour of the light
|
2020-07-26 16:17:54 +02:00
|
|
|
float intensity;
|
2020-06-26 07:06:18 +02:00
|
|
|
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
|
2020-07-26 16:17:54 +02:00
|
|
|
float length; // Range of light
|
|
|
|
float cutoff; // Range of light
|
2020-05-30 15:55:23 +02:00
|
|
|
float dx, dy, dz; // Direction - used only by sun and spot lights
|
2020-06-26 07:06:18 +02:00
|
|
|
byte type;
|
2020-07-26 16:17:54 +02:00
|
|
|
bool castShadows;
|
2020-05-30 15:55:23 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct MESH_INFO
|
|
|
|
{
|
|
|
|
int x;
|
|
|
|
int y;
|
|
|
|
int z;
|
|
|
|
short yRot;
|
|
|
|
short shade;
|
2020-06-26 07:06:18 +02:00
|
|
|
short flags;
|
2020-05-30 15:55:23 +02:00
|
|
|
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
|
|
|
|
};
|
|
|
|
|
2020-06-26 07:06:18 +02:00
|
|
|
enum SECTOR_SPLIT_TYPE
|
|
|
|
{
|
|
|
|
ST_NONE = 0,
|
|
|
|
ST_SPLIT1 = 1,
|
|
|
|
ST_SPLIT2 = 2
|
|
|
|
};
|
|
|
|
|
|
|
|
enum SECTOR_NOCOLLISION_TYPE
|
|
|
|
{
|
|
|
|
NC_NONE = 0,
|
|
|
|
NC_TRIANGLE1 = 1,
|
|
|
|
NC_TRIANGLE2 = 2
|
|
|
|
};
|
|
|
|
|
|
|
|
struct SECTOR_PLANE
|
|
|
|
{
|
|
|
|
float a;
|
|
|
|
float b;
|
|
|
|
float c;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct SECTOR_COLLISION_INFO
|
|
|
|
{
|
|
|
|
int split;
|
|
|
|
int noCollision;
|
|
|
|
SECTOR_PLANE planes[2];
|
|
|
|
};
|
|
|
|
|
2020-07-03 07:05:33 +02:00
|
|
|
struct FLOOR_INFO
|
2020-05-30 15:55:23 +02:00
|
|
|
{
|
2020-06-26 07:06:18 +02:00
|
|
|
int index;
|
|
|
|
int box;
|
|
|
|
int fx;
|
|
|
|
int stopper;
|
|
|
|
int pitRoom;
|
|
|
|
int floor;
|
|
|
|
int skyRoom;
|
|
|
|
int ceiling;
|
|
|
|
SECTOR_COLLISION_INFO floorCollision;
|
|
|
|
SECTOR_COLLISION_INFO ceilingCollision;
|
2020-05-30 15:55:23 +02:00
|
|
|
};
|
|
|
|
|
2020-07-03 07:05:33 +02:00
|
|
|
enum RoomEnumFlag
|
2020-05-30 15:55:23 +02:00
|
|
|
{
|
|
|
|
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
|
|
|
|
};
|
|
|
|
|
2020-07-03 07:05:33 +02:00
|
|
|
struct ROOM_INFO
|
2020-05-30 15:55:23 +02:00
|
|
|
{
|
|
|
|
int x;
|
|
|
|
int y;
|
|
|
|
int z;
|
|
|
|
int minfloor;
|
|
|
|
int maxceiling;
|
2020-07-05 06:20:36 +02:00
|
|
|
std::vector<Vector3> positions;
|
|
|
|
std::vector<Vector3> normals;
|
|
|
|
std::vector<Vector3> colors;
|
2020-06-28 15:51:33 +02:00
|
|
|
std::vector<BUCKET> buckets;
|
2020-06-26 07:06:18 +02:00
|
|
|
std::vector<ROOM_DOOR> doors;
|
2020-06-28 15:51:33 +02:00
|
|
|
int xSize;
|
|
|
|
int ySize;
|
2020-06-26 07:06:18 +02:00
|
|
|
std::vector<FLOOR_INFO> floor;
|
2020-06-26 20:51:59 +02:00
|
|
|
Vector3 ambient;
|
2020-06-26 07:06:18 +02:00
|
|
|
std::vector<ROOM_LIGHT> lights;
|
|
|
|
std::vector<MESH_INFO> mesh;
|
2020-06-28 15:51:33 +02:00
|
|
|
int flippedRoom;
|
|
|
|
int flags;
|
|
|
|
int meshEffect;
|
|
|
|
int reverbType;
|
|
|
|
int flipNumber;
|
2020-05-30 15:55:23 +02:00
|
|
|
short itemNumber;
|
|
|
|
short fxNumber;
|
2020-06-26 07:06:18 +02:00
|
|
|
bool boundActive;
|
2020-05-30 15:55:23 +02:00
|
|
|
};
|
|
|
|
|
2020-07-03 07:05:33 +02:00
|
|
|
struct ANIM_STRUCT
|
2020-05-30 15:55:23 +02:00
|
|
|
{
|
2020-07-25 18:02:35 +02:00
|
|
|
int framePtr;
|
2020-05-30 15:55:23 +02:00
|
|
|
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;
|
2020-07-11 21:16:04 +02:00
|
|
|
constexpr auto NO_ROOM = -1;
|
2020-05-30 15:55:23 +02:00
|
|
|
constexpr auto NO_HEIGHT = (-0x7F00);
|