Files
source/TileEngine/tiledef.h
T
Flugente 8e06bdaf4c Update (by anv):
- fix: data read from Data/AdditionalProperties,
- new tag: <bTrapBonus> + updated data for tiles, trap level influenced by terrain,
- new feature/option: COVER_SYSTEM_STATIC_SHADOWS_DECREASE_BRIGHTNESS.

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7016 3b4a5df2-a311-0410-b5c6-a8a6f20db521
2014-03-03 20:38:26 +00:00

250 lines
7.2 KiB
C

#ifndef __TILEDEF_H
#define __TILEDEF_H
#include "vobject.h"
#include "timer.h"
#include "TileDat.h"
#include "structure.h"
// CATEGORY TYPES
#define NO_TILE 64000
#define ERASE_TILE 65000
#define REQUIRES_SMOOTHING_TILE 19
#define NUM_WALL_ORIENTATIONS 40
#define WALL_TILE 0x00000001
#define ANIMATED_TILE 0x00000002
#define DYNAMIC_TILE 0x00000004
#define IGNORE_WORLD_HEIGHT 0x00000008
#define ROAD_TILE 0x00000010
#define FULL3D_TILE 0x00000020
#define MULTI_Z_TILE 0x00000080
#define OBJECTLAYER_USEZHEIGHT 0x00000100
#define ROOFSHADOW_TILE 0x00000200
#define ROOF_TILE 0x00000400
#define TRANSLUCENT_TILE 0x00000800
#define HAS_SHADOW_BUDDY 0x00001000
#define AFRAME_TILE 0x00002000
#define HIDDEN_TILE 0x00004000
#define CLIFFHANG_TILE 0x00008000
#define UNDERFLOW_FILLER 0x00010000
#define Z_AWARE_DYNAMIC_TILE 0x00020000
#define MAX_ANIMATED_TILES 200
#define WALL_HEIGHT 50
// anv: additional tile properties flags
#define ADDITIONAL_TILE_FLAG_BLOCKED_WINDOW 0x0000000000000001
//Kris: Added the last two bottom corner orientation values. This won't effect
//current code, but there is new code that makes use of this. A function called
//UINT8 CalculateWallOrientationsAtGridNo( INT32 iMapIndex ) that will look at all
//of the walls and return the last two wall orientations for tiles with two proper
//wall pieces.
enum WallOrientationDefines
{
NO_ORIENTATION, INSIDE_TOP_LEFT, INSIDE_TOP_RIGHT, OUTSIDE_TOP_LEFT,
OUTSIDE_TOP_RIGHT, INSIDE_BOTTOM_CORNER, OUTSIDE_BOTTOM_CORNER
};
// TERRAIN ID VALUES.
enum TerrainTypeDefines
{
NO_TERRAIN,
FLAT_GROUND,
FLAT_FLOOR,
PAVED_ROAD,
DIRT_ROAD,
LOW_GRASS,
HIGH_GRASS,
TRAIN_TRACKS,
LOW_WATER,
MED_WATER,
DEEP_WATER,
NUM_TERRAIN_TYPES
} ;
// These structures are placed in a list and used for all tile imagery
typedef struct
{
HVOBJECT vo;
UINT32 fType;
AuxObjectData * pAuxData;
RelTileLoc * pTileLocData;
STRUCTURE_FILE_REF * pStructureFileRef;
UINT8 ubTerrainID;
BYTE bRaisedObjectType;
// Reserved for added room and 32-byte boundaries
BYTE bReserved[ 2 ];
INT8 bWoodCamoAffinity;
INT8 bDesertCamoAffinity;
INT8 bUrbanCamoAffinity;
INT8 bSnowCamoAffinity;
INT8 bCamoStanceModifer;
INT8 bSoundModifier;
INT8 bStealthDifficultyModifer;
INT8 bTrapBonus;
UINT32 uiAdditionalFlags;
} TILE_IMAGERY, *PTILE_IMAGERY;
typedef struct
{
UINT16 *pusFrames;
INT8 bCurrentFrame;
UINT8 ubNumFrames;
} TILE_ANIMATION_DATA;
// Tile data element
typedef struct
{
UINT16 fType;
HVOBJECT hTileSurface;
DB_STRUCTURE_REF * pDBStructureRef;
UINT32 uiFlags;
RelTileLoc * pTileLocData;
UINT16 usRegionIndex;
INT16 sBuddyNum;
UINT8 ubTerrainID;
UINT8 ubNumberOfTiles;
UINT8 bZOffsetX;
UINT8 bZOffsetY;
// This union contains different data based on tile type
// union
// {
// Land and overlay type
// struct
// {
INT16 sOffsetHeight;
UINT16 usWallOrientation;
UINT8 ubFullTile;
// For animated tiles
TILE_ANIMATION_DATA *pAnimData;
// };
// };
// Reserved for added room and 32-byte boundaries
BYTE bReserved[ 3 ];
INT8 bWoodCamoAffinity;
INT8 bDesertCamoAffinity;
INT8 bUrbanCamoAffinity;
INT8 bSnowCamoAffinity;
INT8 bCamoStanceModifer;
INT8 bSoundModifier;
INT8 bStealthDifficultyModifer;
INT8 bTrapBonus;
UINT32 uiAdditionalFlags;
} TILE_ELEMENT, *PTILE_ELEMENT;
typedef struct
{
INT32 iMapIndex;
UINT8 ubNumLayers;
UINT16 *pIndexValues;
} land_undo_struct;
#define TERRAIN_IS_WATER(x) ((x) == LOW_WATER || (x) == MED_WATER || (x) == DEEP_WATER)
#define TERRAIN_IS_SHALLOW_WATER(x) ((x) == LOW_WATER || (x) == MED_WATER)
#define TERRAIN_IS_HIGH_WATER(x) ((x) == MED_WATER || (x) == DEEP_WATER)
#define TERRAIN_IS_DEEP_WATER(x) ((x) == DEEP_WATER)
// Globals used
extern TILE_ELEMENT gTileDatabase[ NUMBEROFTILES ];
extern UINT16 gTileDatabaseSize;
UINT8 gFullBaseTileValues[];
extern UINT16 gNumTilesPerType[ NUMBEROFTILETYPES ];
extern UINT16 gTileTypeStartIndex[ NUMBEROFTILETYPES ];
extern STR gTileSurfaceName[NUMBEROFTILETYPES];
extern UINT8 gTileTypeLogicalHeight[ NUMBEROFTILETYPES ];
extern UINT16 gusNumAnimatedTiles;
extern UINT16 gusAnimatedTiles[ MAX_ANIMATED_TILES ];
extern UINT8 gTileTypeMovementCost[ NUM_TERRAIN_TYPES ];
typedef struct
{
UINT8 ubTerrainID;
INT8 bWoodCamoAffinity;
INT8 bDesertCamoAffinity;
INT8 bUrbanCamoAffinity;
INT8 bSnowCamoAffinity;
INT8 bCamoStanceModifer;
INT8 bSoundModifier;
INT8 bStealthDifficultyModifer;
INT8 bTrapBonus;
UINT32 uiAdditionalFlags;
} ADDITIONAL_TILE_PROPERTIES_VALUES;
extern ADDITIONAL_TILE_PROPERTIES_VALUES zAdditionalTileProperties;
void CreateTileDatabase( INT32 iTilesetID );
// Land level manipulation functions
BOOLEAN GetLandHeadType( INT32 iMapIndex, UINT32 *puiType );
BOOLEAN SetLandIndex( INT32 iMapIndex, UINT16 usIndex, UINT32 uiNewType, BOOLEAN fDelete );
BOOLEAN GetTypeLandLevel( UINT32 iMapIndex, UINT32 uiNewType, UINT8 *pubLevel );
UINT8 GetLandLevelDepth( UINT32 iMapIndex );
BOOLEAN SetLandIndexWithRadius( INT32 iMapIndex, UINT16 usIndex, UINT32 uiNewType, UINT8 ubRadius, BOOLEAN fReplace );
BOOLEAN LandTypeHeigher( UINT32 uiDestType, UINT32 uiSrcType );
BOOLEAN MoveLandIndexToTop( UINT32 iMapIndex, UINT16 usIndex );
// Database access functions
BOOLEAN GetSubIndexFromTileIndex( UINT16 usIndex, UINT16 *pusSubIndex );
BOOLEAN GetTypeSubIndexFromTileIndex( UINT32 uiCheckType, UINT16 usIndex, UINT16 *pusSubIndex );
BOOLEAN GetTypeSubIndexFromTileIndexChar( UINT32 uiCheckType, UINT16 usIndex, UINT8 *pusSubIndex );
BOOLEAN GetTileIndexFromTypeSubIndex( UINT32 uiCheckType, UINT16 usSubIndex, UINT16 *pusTileIndex );
BOOLEAN GetTileType( UINT16 usIndex, UINT32 *puiType );
BOOLEAN GetTileFlags( UINT16 usIndex, UINT32 *puiFlags );
BOOLEAN GetTileTypeLogicalHeight( UINT32 fType, UINT8 *pubLogHeight );
BOOLEAN AnyHeigherLand( UINT32 iMapIndex, UINT32 uiSrcType, UINT8 *pubLastLevel );
BOOLEAN AnyLowerLand( UINT32 iMapIndex, UINT32 uiSrcType, UINT8 *pubLastLevel );
BOOLEAN GetWallOrientation( UINT16 usIndex, UINT16 *pusWallOrientation );
BOOLEAN ContainsWallOrientation( INT32 iMapIndex, UINT32 uiType, UINT16 usWallOrientation, UINT8 *pubLevel );
UINT8 CalculateWallOrientationsAtGridNo( INT32 iMapIndex );
void SetSpecificDatabaseValues( UINT16 usType, UINT16 uiDatabaseElem, TILE_ELEMENT *TileElement, BOOLEAN fUseRaisedObjectType, INT32 iTilesetID );
BOOLEAN AllocateAnimTileData( TILE_ELEMENT *pTileElem, UINT8 ubNumFrames );
void FreeAnimTileData( TILE_ELEMENT *pTileElem );
void DeallocateTileDatabase( );
#endif