/*
===========================================================================
ARX FATALIS GPL Source Code
Copyright (C) 1999-2010 Arkane Studios SA, a ZeniMax Media company.
This file is part of the Arx Fatalis GPL Source Code ('Arx Fatalis Source Code').
Arx Fatalis Source Code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Arx Fatalis Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Arx Fatalis Source Code. If not, see
.
In addition, the Arx Fatalis Source Code is also subject to certain additional terms. You should have received a copy of these
additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Arx
Fatalis Source Code. If not, please request a copy in writing from Arkane Studios at the address below.
If you have questions concerning this license or the applicable additional terms, you may contact in writing Arkane Studios, c/o
ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
===========================================================================
*/
//////////////////////////////////////////////////////////////////////////////////////
// @@ @@@ @@@ @@ @@@@@ //
// @@@ @@@@@@ @@@ @@ @@@@ @@@ @@@ //
// @@@ @@@@@@@ @@@ @@@@ @@@@ @@ @@@@ //
// @@@ @@ @@@@ @@@ @@@@@ @@@@@@ @@@ @@@ //
// @@@@@ @@ @@@@ @@@ @@@@@ @@@@@@@ @@@ @ @@@ //
// @@@@@ @@ @@@@ @@@@@@@@ @@@@ @@@ @@@@@ @@ @@@@@@@ //
// @@ @@@ @@ @@@@ @@@@@@@ @@@ @@@ @@@@@@ @@ @@@@ //
// @@@ @@@ @@@ @@@@ @@@@@ @@@@@@@@@ @@@@@@@ @@@ @@@@ //
// @@@ @@@@ @@@@@@@ @@@@@@ @@@ @@@@ @@@ @@@ @@@ @@@@ //
// @@@@@@@@ @@@@@ @@@@@@@@@@ @@@ @@@ @@@ @@@ @@@ @@@@@ //
// @@@ @@@@ @@@@ @@@ @@@@@@@ @@@ @@@ @@@@ @@@ @@@@ @@@@@ //
//@@@ @@@@ @@@@@ @@@ @@@@@@ @@ @@@ @@@@ @@@@@@@ @@@@@ @@@@@ //
//@@@ @@@@@ @@@@@ @@@@ @@@ @@ @@ @@@@ @@@@@@@ @@@@@@@@@ //
//@@@ @@@@ @@@@@@@ @@@@ @@ @@ @@@@ @@@@@ @@@@@ //
//@@@ @@@@ @@@@@@@ @@@@ @@ @@ @@@@ @@@@@ @@ //
//@@@ @@@ @@@ @@@@@ @@ @@@ //
// @@@ @@@ @@ @@ STUDIOS //
//////////////////////////////////////////////////////////////////////////////////////
#ifndef EERIETYPES_H
#define EERIETYPES_H
#define D3D_OVERLOADS
#include
#include
#pragma inline_depth (255)
#pragma inline_recursion (on)
#pragma auto_inline (on)
class TextureContainer;
typedef struct
{
float r;
float g;
float b;
} EERIE_RGB; // Aligned 1 2 4
typedef struct
{
float x;
float y;
float z;
float w;
} EERIE_QUAT; // Aligned 1 2 4 8
typedef struct
{
union
{
float x;
float a;
};
union
{
float y;
float b;
};
} EERIE_2D; // Aligned 1 2 4 8
typedef struct
{
union
{
float x;
float a;
float yaw;
};
union
{
float y;
float b;
float pitch;
};
union
{
float z;
float g;
float roll;
};
} EERIE_3D; // Aligned 1 2 4
typedef struct
{
EERIE_3D v[3];
} EERIE_TRI; // Aligned 1 2 4
typedef struct
{
EERIE_2D min;
EERIE_2D max;
} EERIE_2D_BBOX; // Aligned 1 2 4 8
typedef struct
{
EERIE_3D min;
EERIE_3D max;
} EERIE_3D_BBOX; // Aligned 1 2 4
typedef struct
{
char exist;
char type;
char treat;
char selected;
short extras;
short status; // on/off 1/0
EERIE_3D pos;
float fallstart;
float fallend;
float falldiff;
float falldiffmul;
float precalc;
EERIE_RGB rgb255;
float intensity;
EERIE_RGB rgb;
float i;
EERIE_3D mins;
EERIE_3D maxs;
float temp;
long ltemp;
EERIE_RGB ex_flicker;
float ex_radius;
float ex_frequency;
float ex_size;
float ex_speed;
float ex_flaresize;
long tl;
unsigned long time_creation;
long duration; // will start to fade before the end of duration...
long sample;
} EERIE_LIGHT; // Aligned 1 2 4
enum EERIE_TYPES_EXTRAS_MODE
{
EXTRAS_SEMIDYNAMIC = 0x00000001,
EXTRAS_EXTINGUISHABLE = 0x00000002,
EXTRAS_STARTEXTINGUISHED = 0x00000004,
EXTRAS_SPAWNFIRE = 0x00000008,
EXTRAS_SPAWNSMOKE = 0x00000010,
EXTRAS_OFF = 0x00000020,
EXTRAS_COLORLEGACY = 0x00000040,
EXTRAS_NOCASTED = 0x00000080,
EXTRAS_FIXFLARESIZE = 0x00000100,
EXTRAS_FIREPLACE = 0x00000200,
EXTRAS_NO_IGNIT = 0x00000400,
EXTRAS_FLARE = 0x00000800
};
#define TYP_SPECIAL1 1
//*************************************************************************************
// EERIE Types
//*************************************************************************************
typedef struct _EERIEMATRIX
{
D3DVALUE _11, _12, _13, _14;
D3DVALUE _21, _22, _23, _24;
D3DVALUE _31, _32, _33, _34;
D3DVALUE _41, _42, _43, _44;
} EERIEMATRIX ; // Aligned 1 2 4
typedef struct
{
EERIE_3D origin;
float radius;
float height;
} EERIE_CYLINDER; // Aligned 1 2 4
typedef struct
{
EERIE_3D origin;
float radius;
} EERIE_SPHERE; // Aligned 1 2 4
typedef struct
{
long type; // at least 16 bits
EERIE_3D min;
EERIE_3D max;
EERIE_3D norm;
EERIE_3D norm2;
D3DTLVERTEX v[4];
D3DTLVERTEX tv[4];
EERIE_3D nrml[4];
TextureContainer * tex;
EERIE_3D center;
float transval;
float area;
short room;
short misc;
float distbump;
unsigned short uslInd[4];
} EERIEPOLY; // Aligned 1 2 4
typedef struct
{
D3DTLVERTEX vert;
EERIE_3D v;
EERIE_3D norm;
EERIE_3D vworld;
} EERIE_VERTEX; // Aligned 1 2 4
typedef struct
{
D3DTLVERTEX vert;
EERIE_3D v;
EERIE_3D norm;
} EERIE_OLD_VERTEX; // Aligned 1 2 4
#define MATERIAL_NONE 0
#define MATERIAL_WEAPON 1
#define MATERIAL_FLESH 2
#define MATERIAL_METAL 3
#define MATERIAL_GLASS 4
#define MATERIAL_CLOTH 5
#define MATERIAL_WOOD 6
#define MATERIAL_EARTH 7
#define MATERIAL_WATER 8
#define MATERIAL_ICE 9
#define MATERIAL_GRAVEL 10
#define MATERIAL_STONE 11
#define MATERIAL_FOOT_LARGE 12
#define MATERIAL_FOOT_BARE 13
#define MATERIAL_FOOT_SHOE 14
#define MATERIAL_FOOT_METAL 15
#define MATERIAL_FOOT_STEALTH 16
#define POLY_NO_SHADOW 1
#define POLY_DOUBLESIDED (1<<1)
#define POLY_TRANS (1<<2)
#define POLY_WATER (1<<3)
#define POLY_GLOW (1<<4)
#define POLY_IGNORE (1<<5)
#define POLY_QUAD (1<<6)
#define POLY_TILED (1<<7)
#define POLY_METAL (1<<8)
#define POLY_HIDE (1<<9)
#define POLY_STONE (1<<10)
#define POLY_WOOD (1<<11)
#define POLY_GRAVEL (1<<12)
#define POLY_EARTH (1<<13)
#define POLY_NOCOL (1<<14)
#define POLY_LAVA (1<<15)
#define POLY_CLIMB (1<<16)
#define POLY_FALL (1<<17)
#define POLY_NOPATH (1<<18)
#define POLY_NODRAW (1<<19)
#define POLY_PRECISE_PATH (1<<20)
#define POLY_NO_CLIMB (1<<21)
#define POLY_ANGULAR (1<<22)
#define POLY_ANGULAR_IDX0 (1<<23)
#define POLY_ANGULAR_IDX1 (1<<24)
#define POLY_ANGULAR_IDX2 (1<<25)
#define POLY_ANGULAR_IDX3 (1<<26)
#define POLY_LATE_MIP (1<<27)
#define IOPOLYVERT 3
typedef struct
{
long facetype; // 0 = flat 1 = text
// 2 = Double-Side
short texid;
unsigned short vid[IOPOLYVERT];
float u[IOPOLYVERT];
float v[IOPOLYVERT];
float transval;
EERIE_3D norm;
EERIE_3D nrmls[IOPOLYVERT];
float temp;
short ou[IOPOLYVERT];
short ov[IOPOLYVERT];
D3DCOLOR color[IOPOLYVERT];
} EERIE_FACE; // Aligned 1 2 4
#define MAX_PFACE 16
typedef struct
{
short faceidx[MAX_PFACE];
long facetype;
short texid; //long
short nbvert;
float transval;
unsigned short vid[MAX_PFACE];
float u[MAX_PFACE];
float v[MAX_PFACE];
D3DCOLOR color[MAX_PFACE];
} EERIE_PFACE;
typedef struct
{
long facetype; // 0 = flat 1 = text
// 2 = Double-Side
D3DCOLOR rgb[IOPOLYVERT];
unsigned short vid[IOPOLYVERT];
short texid;
float u[IOPOLYVERT];
float v[IOPOLYVERT];
short ou[IOPOLYVERT];
short ov[IOPOLYVERT];
float transval;
EERIE_3D norm;
EERIE_3D nrmls[IOPOLYVERT];
float temp;
} EERIE_FACE_FTL; // Aligned 1 2 4
//***********************************************************************
//* BEGIN EERIE OBJECT STRUCTURES *
//***********************************************************************
typedef struct
{
short nb_Nvertex;
short nb_Nfaces;
short * Nvertex;
short * Nfaces;
} NEIGHBOURS_DATA; // Aligned 1 2 4
typedef struct
{
// ingame data
short actual_collapse; // -1 = no collapse
short need_computing;
float collapse_ratio;
// static data
float collapse_cost;
short collapse_candidate;
short padd;
} PROGRESSIVE_DATA; // Aligned 1 2 4
typedef struct
{
short startidx;
short endidx;
float restlength;
float constant; // spring constant
float damping; // spring damping
long type;
} EERIE_SPRINGS; // Aligned 1 2 4
#define CLOTHES_FLAG_NORMAL 0
#define CLOTHES_FLAG_FIX 1
#define CLOTHES_FLAG_NOCOL 2
typedef struct
{
short idx;
char flags;
char coll;
EERIE_3D pos;
EERIE_3D velocity;
EERIE_3D force;
float mass; // 1.f/mass
EERIE_3D t_pos;
EERIE_3D t_velocity;
EERIE_3D t_force;
EERIE_3D lastpos;
} CLOTHESVERTEX; // Aligned 1 2 4
typedef struct
{
CLOTHESVERTEX * cvert;
CLOTHESVERTEX * backup;
short nb_cvert;
short nb_springs;
EERIE_SPRINGS * springs;
} CLOTHES_DATA; // Aligned 1 2 4
typedef struct
{
short idx;
short flags;
float radius;
} COLLISION_SPHERE; // Aligned 1 2 4
typedef struct
{
long nb_spheres;
COLLISION_SPHERE * spheres;
} COLLISION_SPHERES_DATA; // Aligned 1 2 4
typedef struct
{
EERIE_3D initpos;
EERIE_3D temp;
EERIE_3D pos;
EERIE_3D velocity;
EERIE_3D force;
EERIE_3D inertia;
float mass;
} PHYSVERT; // Aligned 1 2 4
typedef struct
{
PHYSVERT * vert;
long nb_physvert;
short active;
short stopcount;
float radius; //radius around vert[0].pos for spherical collision
float storedtiming;
} PHYSICS_BOX_DATA; // Aligned 1 2 4
typedef struct
{
long sx;
long sy;
unsigned long bpp;
unsigned char * bmpdata;
} EERIE_MAP; // Aligned 1 2 4
typedef struct
{
char name[256];
long origin;
long nb_index;
long * indexes;
float siz;
} EERIE_GROUPLIST; // Aligned 1 2 4
typedef struct
{
char name[256];
long idx; //index vertex;
long act; //action
long sfx; //sfx
} EERIE_ACTIONLIST; // Aligned 1 2 4
typedef struct
{
float xmin;
float xmax;
float ymin;
float ymax;
float zmin;
float zmax;
} CUB3D; // Aligned 1 2 4
typedef struct
{
long link_origin;
EERIE_3D link_position;
EERIE_3D scale;
EERIE_3D rot;
unsigned long flags;
} EERIE_MOD_INFO; // Aligned 1 2 4
typedef struct
{
long lgroup; //linked to group n° if lgroup=-1 NOLINK
long lidx;
long lidx2;
void * obj;
EERIE_MOD_INFO modinfo;
void * io;
} EERIE_LINKED; // Aligned 1 2 4
typedef struct
{
char name[64];
long nb_selected;
long * selected;
} EERIE_SELECTIONS; // Aligned 1 2 4
#define DRAWFLAG_HIGHLIGHT 1
typedef struct
{
short view_attach;
short primary_attach;
short left_attach;
short weapon_attach;
short secondary_attach;
short mouth_group;
short jaw_group;
short head_group_origin;
short head_group;
short mouth_group_origin;
short V_right;
short U_right;
short fire;
short sel_head;
short sel_chest;
short sel_leggings;
short carry_attach;
short __padd;
} EERIE_FASTACCESS;
/////////////////////////////////////////////////////////////////////////////////
typedef struct
{
long nb_idxvertices;
long * idxvertices;
EERIE_GROUPLIST * original_group;
long father;
EERIE_QUAT quatanim;
EERIE_3D transanim;
EERIE_3D scaleanim;
EERIE_QUAT quatlast;
EERIE_3D translast;
EERIE_3D scalelast;
EERIE_QUAT quatinit;
EERIE_3D transinit;
EERIE_3D scaleinit;
EERIE_3D transinit_global;
} EERIE_BONE;
typedef struct
{
EERIE_BONE * bones;
long nb_bones;
} EERIE_C_DATA;
//////////////////////////////////////////////////////////////////////////////////
typedef struct
{
float x;
float y;
float z;
float w;
} EERIE_3DPAD ;
typedef struct
{
char name[256];
char file[256];
EERIE_3D pos;
EERIE_3D point0;
EERIE_3D angle;
long origin;
long ident;
long nbvertex;
long true_nbvertex;
long nbfaces;
long nbpfaces;
long nbmaps;
long nbgroups;
long nbaction;
long nbselections;
unsigned long drawflags;
EERIE_3DPAD * vertexlocal;
EERIE_VERTEX * vertexlist;
EERIE_VERTEX * vertexlist3;
EERIE_FACE * facelist;
EERIE_PFACE * pfacelist;
EERIE_MAP * maplist;
EERIE_GROUPLIST * grouplist;
EERIE_ACTIONLIST * actionlist;
EERIE_SELECTIONS * selections;
TextureContainer ** texturecontainer;
char * originaltextures;
CUB3D cub;
EERIE_QUAT quat;
EERIE_LINKED * linked;
long nblinked;
PHYSICS_BOX_DATA * pbox;
PROGRESSIVE_DATA * pdata;
NEIGHBOURS_DATA * ndata;
CLOTHES_DATA * cdata;
COLLISION_SPHERES_DATA * sdata;
EERIE_FASTACCESS fastaccess;
EERIE_C_DATA * c_data;
} EERIE_3DOBJ; // Aligned 1 2 4
typedef struct
{
long nbobj;
EERIE_3DOBJ ** objs;
EERIE_3D pos;
EERIE_3D point0;
long nbtex;
TextureContainer ** texturecontainer;
long nblight;
EERIE_LIGHT ** light;
float ambient_r;
float ambient_g;
float ambient_b;
CUB3D cub;
} EERIE_3DSCENE; // Aligned 1 2 4
#define MAX_SCENES 64
typedef struct
{
long nb_scenes;
EERIE_3DSCENE * scenes[MAX_SCENES];
CUB3D cub;
EERIE_3D pos;
EERIE_3D point0;
} EERIE_MULTI3DSCENE; // Aligned 1 2 4
typedef struct
{
long num_frame;
long flag;
int master_key_frame;
short f_translate; //int
short f_rotate; //int
float time;
EERIE_3D translate;
EERIE_QUAT quat;
long sample;
} EERIE_FRAME; // Aligned 1 2 4
typedef struct
{
int key;
EERIE_3D translate;
EERIE_QUAT quat;
EERIE_3D zoom;
} EERIE_GROUP; // Aligned 1 2 4
// Animation playing flags
#define EA_LOOP 1 // Must be looped at end (indefinitely...)
#define EA_REVERSE 2 // Is played reversed (from end to start)
#define EA_PAUSED 4 // Is paused
#define EA_ANIMEND 8 // Has just finished
#define EA_STATICANIM 16 // Is a static Anim (no movement offset returned).
#define EA_STOPEND 32 // Must Be Stopped at end.
#define EA_FORCEPLAY 64 // User controlled... MUST be played...
#define EA_EXCONTROL 128 // ctime externally set, no update.
typedef struct
{
float anim_time;
unsigned long flag;
long nb_groups;
long nb_key_frames;
EERIE_FRAME * frames;
EERIE_GROUP * groups;
unsigned char * voidgroups;
} EERIE_ANIM; // Aligned 1 2 4
//-------------------------------------------------------------------------
//Portal Data;
typedef struct
{
long type; // at least 16 bits
EERIE_3D min;
EERIE_3D max;
EERIE_3D norm;
EERIE_3D norm2;
D3DTLVERTEX v[4];
D3DTLVERTEX tv[4];
EERIE_3D nrml[4];
TextureContainer * tex;
EERIE_3D center;
float transval;
float area;
short room;
short misc;
} SAVE_EERIEPOLY; // Aligned 1 2 4
typedef struct
{
SAVE_EERIEPOLY poly;
long room_1; // facing normal
long room_2;
short useportal;
short paddy;
} EERIE_SAVE_PORTALS;
typedef struct
{
EERIEPOLY poly;
long room_1; // facing normal
long room_2;
short useportal;
short paddy;
} EERIE_PORTALS;
typedef struct
{
short px;
short py;
short idx;
short padd;
} EP_DATA;
typedef struct
{
long nb_portals;
long * portals;
long nb_polys;
EP_DATA * epdata;
EERIE_3D center;
float radius;
unsigned short * pussIndice;
LPDIRECT3DVERTEXBUFFER7 pVertexBuffer;
unsigned long usNbTextures;
TextureContainer ** ppTextureContainer;
} EERIE_ROOM_DATA;
typedef struct
{
long nb_portals;
long nb_polys;
long padd[6];
} EERIE_SAVE_ROOM_DATA;
typedef struct
{
long nb_rooms;
EERIE_ROOM_DATA * room;
long nb_total; // of portals
EERIE_PORTALS * portals;
} EERIE_PORTAL_DATA;
#define ARX_D3DVERTEX D3DTLVERTEX
typedef struct
{
float x, y, z;
int color;
float tu, tv;
} SMY_D3DVERTEX;
typedef struct
{
float x, y, z;
int color;
float tu, tv;
float tu2, tv2;
float tu3, tv3;
} SMY_D3DVERTEX3;
typedef struct
{
float x, y, z;
float rhw;
int color;
float tu, tv;
float tu2, tv2;
float tu3, tv3;
} SMY_D3DVERTEX3_T;
typedef struct
{
D3DTLVERTEX pD3DVertex[3];
float uv[6];
float color[3];
} SMY_ZMAPPINFO;
typedef struct
{
unsigned long uslStartVertex;
unsigned long uslNbVertex;
unsigned long uslStartCull;
unsigned long uslNbIndiceCull;
unsigned long uslStartNoCull;
unsigned long uslNbIndiceNoCull;
unsigned long uslStartCull_TNormalTrans;
unsigned long uslNbIndiceCull_TNormalTrans;
unsigned long uslStartNoCull_TNormalTrans;
unsigned long uslNbIndiceNoCull_TNormalTrans;
unsigned long uslStartCull_TMultiplicative;
unsigned long uslNbIndiceCull_TMultiplicative;
unsigned long uslStartNoCull_TMultiplicative;
unsigned long uslNbIndiceNoCull_TMultiplicative;
unsigned long uslStartCull_TAdditive;
unsigned long uslNbIndiceCull_TAdditive;
unsigned long uslStartNoCull_TAdditive;
unsigned long uslNbIndiceNoCull_TAdditive;
unsigned long uslStartCull_TSubstractive;
unsigned long uslNbIndiceCull_TSubstractive;
unsigned long uslStartNoCull_TSubstractive;
unsigned long uslNbIndiceNoCull_TSubstractive;
} SMY_ARXMAT;
class CMY_DYNAMIC_VERTEXBUFFER
{
public:
unsigned long uslFormat;
unsigned short ussMaxVertex;
unsigned short ussNbVertex;
unsigned short ussNbIndice;
LPDIRECT3DVERTEXBUFFER7 pVertexBuffer;
unsigned short * pussIndice;
public:
CMY_DYNAMIC_VERTEXBUFFER(unsigned short, unsigned long);
~CMY_DYNAMIC_VERTEXBUFFER();
void * Lock(unsigned int);
bool UnLock();
};
#define FVF_D3DVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1|D3DFVF_TEXTUREFORMAT2)
#define FVF_D3DVERTEX2 (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX2|D3DFVF_TEXTUREFORMAT2)
#define FVF_D3DVERTEX3 (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX3|D3DFVF_TEXTUREFORMAT2)
#define FVF_D3DVERTEX_T (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1|D3DFVF_TEXTUREFORMAT2)
#define FVF_D3DVERTEX2_T (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX2|D3DFVF_TEXTUREFORMAT2)
#define FVF_D3DVERTEX3_T (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX3|D3DFVF_TEXTUREFORMAT2)
extern long USE_PORTALS;
extern EERIE_PORTAL_DATA * portals;
#endif