#ifndef _included_decal_h_ /* Is this your first time? */ #define _included_decal_h_ 1 #include "vision.h" #include "prototyp.h" #define MAX_NO_OF_DECALS 2048 enum DECAL_ID { DECAL_FMV=0, DECAL_SCORCHED, DECAL_BULLETHOLE, DECAL_PREDATOR_BLOOD, DECAL_ALIEN_BLOOD, DECAL_HUMAN_BLOOD, DECAL_ANDROID_BLOOD, DECAL_PREDATOR_BLOOD_SPLASH, DECAL_ALIEN_BLOOD_SPLASH, DECAL_HUMAN_BLOOD_SPLASH, DECAL_ANDROID_BLOOD_SPLASH, DECAL_LASERTARGET, DECAL_SHAFTOFLIGHT, DECAL_SHAFTOFLIGHT_OUTER, MAX_NO_OF_DECAL_IDS }; typedef struct { enum DECAL_ID DecalID; VECTORCH Vertices[4]; VECTORCH Direction[4]; VECTORCH Centre; int ModuleIndex; int CurrentSize; int TargetSize; int UOffset; } DECAL; typedef struct { enum DECAL_ID DecalID; VECTORCH Vertices[4]; int ModuleIndex; int UOffset; } FIXED_DECAL; typedef struct { enum DECAL_ID DecalID; VECTORCH Vertices[4]; VECTORCH Centre; } OBJECT_DECAL; enum TRANSLUCENCY_TYPE { TRANSLUCENCY_OFF, TRANSLUCENCY_NORMAL, TRANSLUCENCY_INVCOLOUR, TRANSLUCENCY_COLOUR, TRANSLUCENCY_GLOWING, TRANSLUCENCY_DARKENINGCOLOUR, TRANSLUCENCY_JUSTSETZ, TRANSLUCENCY_NOT_SET }; typedef struct { int StartU; int StartV; int EndU; int EndV; int MinSize; int MaxSize; int GrowthRate; int MaxSubclassNumber; int UOffsetForSubclass; enum TRANSLUCENCY_TYPE TranslucencyType; uint8_t Alpha; uint8_t RedScale[NUMBER_OF_VISION_MODES]; uint8_t GreenScale[NUMBER_OF_VISION_MODES]; uint8_t BlueScale[NUMBER_OF_VISION_MODES]; unsigned int IsLit:1; unsigned int CanCombine:1; } DECAL_DESC; typedef struct { VECTORCH Position[3]; VECTORCH Normal[3]; VECTORCH LightSource; char DotIsOnPlayer; int TargetID; } THREE_LASER_DOT_DESC; void InitialiseDecalSystem(void); void MakeDecal(enum DECAL_ID decalID, VECTORCH *normalPtr, VECTORCH *positionPtr, int moduleIndex); void AddDecal(enum DECAL_ID decalID, VECTORCH *normalPtr, VECTORCH *positionPtr, int moduleIndex); void HandleDecalSystem(void); struct section_data; // hmodel.h void AddDecalToHModel(VECTORCH *normalPtr, VECTORCH *positionPtr, struct section_data *sectionPtr); void ScanHModelForDecals(DISPLAYBLOCK *objectPtr, struct section_data *sectionDataPtr); FIXED_DECAL* AllocateFixedDecal(void); void RemoveFixedDecal(void); void RemoveAllFixedDecals(void); extern DECAL_DESC DecalDescription[]; extern THREE_LASER_DOT_DESC PredatorLaserTarget; extern FIXED_DECAL FixedDecalStorage[]; extern int NumFixedDecals; extern int CurrentFixedDecalIndex; extern void DecalSystem_End(); extern void DecalSystem_Setup(); extern void RenderLaserTarget(THREE_LASER_DOT_DESC *laserTargetPtr); #define MAX_NO_OF_DECALS_PER_HIERARCHICAL_SECTION 32 #endif