1 #ifndef STRUCTURE_H 2 #define STRUCTURE_H 3 4 #include "AutoObj.h" 5 #include "JA2Types.h" 6 #include "Structure_Internals.h" 7 #include "Overhead_Types.h" 8 #include "Sound_Control.h" 9 10 #define NOTHING_BLOCKING 0 11 #define BLOCKING_REDUCE_RANGE 1 12 #define BLOCKING_NEXT_TILE 10 13 #define BLOCKING_TOPLEFT_WINDOW 30 14 #define BLOCKING_TOPRIGHT_WINDOW 40 15 #define BLOCKING_TOPLEFT_DOOR 50 16 #define BLOCKING_TOPRIGHT_DOOR 60 17 #define FULL_BLOCKING 70 18 #define BLOCKING_TOPLEFT_OPEN_WINDOW 90 19 #define BLOCKING_TOPRIGHT_OPEN_WINDOW 100 20 21 enum StructureDamageResult 22 { 23 STRUCTURE_NOT_DAMAGED, // structure not damaged 24 STRUCTURE_DESTROYED, // structure to be deleted 25 STRUCTURE_DAMAGED // structure to be replaced with damaged graphics 26 }; 27 28 // ATE: Increased to allow corpses to not collide with soldiers 29 // 100 == MAX_CORPSES 30 #define INVALID_STRUCTURE_ID ( TOTAL_SOLDIERS + 100 ) 31 #define IGNORE_PEOPLE_STRUCTURE_ID (TOTAL_SOLDIERS+101) 32 33 enum StructureDamageReason 34 { 35 STRUCTURE_DAMAGE_EXPLOSION = 1, 36 STRUCTURE_DAMAGE_GUNFIRE = 2 37 }; 38 39 40 // functions at the structure database level 41 STRUCTURE_FILE_REF* LoadStructureFile(const char* szFileName); 42 void FreeAllStructureFiles( void ); 43 void FreeStructureFile(STRUCTURE_FILE_REF*); 44 45 // 46 // functions at the structure instance level 47 // 48 BOOLEAN OkayToAddStructureToWorld(INT16 sBaseGridNo, INT8 bLevel, const DB_STRUCTURE_REF* pDBStructureRef, INT16 sExclusionID); 49 BOOLEAN InternalOkayToAddStructureToWorld(INT16 sBaseGridNo, INT8 bLevel, const DB_STRUCTURE_REF* pDBStructureRef, INT16 sExclusionID, BOOLEAN fIgnorePeople); 50 51 STRUCTURE* AddStructureToWorld(INT16 base_grid_no, INT8 level, DB_STRUCTURE_REF const*, LEVELNODE*); 52 BOOLEAN DeleteStructureFromWorld( STRUCTURE * pStructure ); 53 54 // 55 // functions to find a structure in a location 56 // 57 58 // Finds a structure that matches any of the given flags 59 STRUCTURE* FindStructure(INT16 sGridNo, StructureFlags); 60 61 STRUCTURE* FindNextStructure(const STRUCTURE* s, StructureFlags); 62 STRUCTURE* FindStructureByID(INT16 sGridNo, UINT16 structure_id); 63 64 #define FOR_EACH_STRUCTURE(iter, grid_no, flags) \ 65 for (STRUCTURE* iter = FindStructure((grid_no), (flags)); iter; iter = FindNextStructure(iter, (flags))) 66 67 // Finds the base structure for any structure 68 STRUCTURE* FindBaseStructure(STRUCTURE* s); 69 70 // 71 // functions related to interactive tiles 72 // 73 STRUCTURE* SwapStructureForPartner(STRUCTURE*); 74 STRUCTURE* SwapStructureForPartnerAndStoreChangeInMap(STRUCTURE*); 75 // 76 // functions useful for AI that return info about heights 77 // 78 INT8 StructureHeight( STRUCTURE * pStructure ); 79 INT8 StructureBottomLevel( STRUCTURE * pStructure ); 80 INT8 GetTallestStructureHeight( INT16 sGridNo, BOOLEAN fOnRoof ); 81 INT8 GetStructureTargetHeight( INT16 sGridNo, BOOLEAN fOnRoof ); 82 83 BOOLEAN StructureDensity( STRUCTURE * pStructure, UINT8 * pubLevel0, UINT8 * pubLevel1, UINT8 * pubLevel2, UINT8 * pubLevel3 ); 84 85 BOOLEAN FindAndSwapStructure( INT16 sGridNo ); 86 // 87 // functions to work with the editor undo code 88 // 89 90 void DebugStructurePage1( void ); 91 92 void AddZStripInfoToVObject(HVOBJECT, STRUCTURE_FILE_REF const*, BOOLEAN fFromAnimation, INT16 sSTIStartIndex); 93 94 // FUNCTIONS FOR DETERMINING STUFF THAT BLOCKS VIEW FOR TILE_bASED LOS 95 INT8 GetBlockingStructureInfo( INT16 sGridNo, INT8 bDir, INT8 bNextDir, INT8 bLevel, INT8 *pStructHeight, STRUCTURE ** ppTallestStructure, BOOLEAN fWallsBlock ); 96 97 StructureDamageResult DamageStructure(STRUCTURE*, UINT8 damage, StructureDamageReason, GridNo, INT16 x, INT16 y, SOLDIERTYPE* owner); 98 99 // Material armour type enumeration 100 enum 101 { 102 MATERIAL_NOTHING, 103 MATERIAL_WOOD_WALL, 104 MATERIAL_PLYWOOD_WALL, 105 MATERIAL_LIVE_WOOD, 106 MATERIAL_LIGHT_VEGETATION, 107 MATERIAL_FURNITURE, 108 MATERIAL_PORCELAIN, 109 MATERIAL_CACTUS, 110 MATERIAL_NOTUSED1, 111 MATERIAL_NOTUSED2, 112 113 MATERIAL_NOTUSED3, 114 MATERIAL_STONE, 115 MATERIAL_CONCRETE1, 116 MATERIAL_CONCRETE2, 117 MATERIAL_ROCK, 118 MATERIAL_RUBBER, 119 MATERIAL_SAND, 120 MATERIAL_CLOTH, 121 MATERIAL_SANDBAG, 122 MATERIAL_NOTUSED5, 123 124 MATERIAL_NOTUSED6, 125 MATERIAL_LIGHT_METAL, 126 MATERIAL_THICKER_METAL, 127 MATERIAL_HEAVY_METAL, 128 MATERIAL_INDESTRUCTABLE_STONE, 129 MATERIAL_INDESTRUCTABLE_METAL, 130 MATERIAL_THICKER_METAL_WITH_SCREEN_WINDOWS, 131 NUM_MATERIAL_TYPES 132 }; 133 134 STRUCTURE* FindStructureBySavedInfo(GridNo, UINT8 type, UINT8 wall_orientation, INT8 level); 135 UINT8 StructureFlagToType( UINT32 uiFlag ); 136 137 SoundID GetStructureOpenSound(STRUCTURE const*, bool closing); 138 139 extern const UINT8 gubMaterialArmour[]; 140 141 typedef SGP::AutoObj<STRUCTURE_FILE_REF, FreeStructureFile> AutoStructureFileRef; 142 143 #endif 144