Files
source/TileEngine/Render Z.h
T
2021-03-11 20:41:44 +00:00

150 lines
3.6 KiB
C

#include "worlddef.h"
INT16 ObjectZLevel( TILE_ELEMENT* TileElem, LEVELNODE* pNode, UINT32 uiTileElemFlags, INT32 sMapX, INT32 sMapY, INT16& sWorldY );
INT16 GetMapXYWorldY( INT16 sWorldCellX, INT16 sWorldCellY );
INT16 GetMapXYWorldYFromCellCoords( INT16 sWorldCellX, INT16 sWorldCellY );
INT16 LandZLevel( INT16 sMapX, INT16 sMapY );
INT16 RoofZLevel( INT16 sMapX, INT16 sMapY, INT16& sWorldY );
INT16 OnRoofZLevel( INT16 sMapX, INT16 sMapY, INT16& sWorldY, UINT32 uiLevelNodeFlags );
INT16 TopmostZLevel( INT16 sMapX, INT16 sMapY, INT16& sWorldY );
INT16 ShadowZLevel( INT16 sMapX, INT16 sMapY, INT16& sWorldY );
#define StructZLevel( sMapX, sMapY )\
{\
\
sWorldY = GetMapXYWorldY( sMapX, sMapY );\
\
if ( ( uiLevelNodeFlags & LEVELNODE_ROTTINGCORPSE ) )\
{\
if ( pCorpse->def.usFlags & ROTTING_CORPSE_VEHICLE )\
{\
\
if ( pNode->pStructureData != NULL )\
{\
sZOffsetX = pNode->pStructureData->pDBStructureRef->pDBStructure->bZTileOffsetX;\
sZOffsetY = pNode->pStructureData->pDBStructureRef->pDBStructure->bZTileOffsetY;\
}\
\
sWorldY = GetMapXYWorldY( (sMapX + sZOffsetX), (sMapY + sZOffsetY) );\
\
sWorldY = GetMapXYWorldY( (sMapX + sZOffsetX), (sMapY + sZOffsetY) );\
\
sZLevel=( ( sWorldY ) * Z_SUBLAYERS)+STRUCT_Z_LEVEL;\
\
}\
else\
{\
sZOffsetX = -1;\
sZOffsetY = -1;\
sWorldY = GetMapXYWorldY( (sMapX + sZOffsetX), (sMapY + sZOffsetY) );\
\
sWorldY += 20;\
\
sZLevel=( ( sWorldY ) * Z_SUBLAYERS)+LAND_Z_LEVEL;\
}\
}\
else if ( uiLevelNodeFlags & LEVELNODE_PHYSICSOBJECT )\
{\
sWorldY += pNode->sRelativeZ;\
\
sZLevel=(sWorldY*Z_SUBLAYERS)+ONROOF_Z_LEVEL;\
\
}\
else if ( uiLevelNodeFlags & LEVELNODE_ITEM )\
{\
if ( pNode->pItemPool->bRenderZHeightAboveLevel > 0 )\
{\
sZLevel=(sWorldY*Z_SUBLAYERS)+STRUCT_Z_LEVEL;\
sZLevel+=( pNode->pItemPool->bRenderZHeightAboveLevel );\
}\
else\
{\
sZLevel=(sWorldY*Z_SUBLAYERS)+OBJECT_Z_LEVEL;\
}\
}\
else if ( uiAniTileFlags & ANITILE_SMOKE_EFFECT )\
{\
sZLevel=(sWorldY*Z_SUBLAYERS)+OBJECT_Z_LEVEL;\
}\
else if ( ( uiLevelNodeFlags & LEVELNODE_USEZ ) )\
{\
\
if ( ( uiLevelNodeFlags & LEVELNODE_NOZBLITTER ) )\
{\
sWorldY += 40;\
}\
else\
{\
sWorldY += pNode->sRelativeZ;\
}\
\
sZLevel=(sWorldY*Z_SUBLAYERS)+ONROOF_Z_LEVEL;\
}\
else\
{\
sZLevel=(sWorldY*Z_SUBLAYERS)+STRUCT_Z_LEVEL;\
}\
\
}
#define SoldierZLevel( pSoldier, sMapX, sMapY )\
{\
\
if ( ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTITILE ) )\
{\
\
if ( pNode->pStructureData != NULL )\
{\
sZOffsetX = pNode->pStructureData->pDBStructureRef->pDBStructure->bZTileOffsetX;\
sZOffsetY = pNode->pStructureData->pDBStructureRef->pDBStructure->bZTileOffsetY;\
}\
\
sWorldY = GetMapXYWorldY( (sMapX + sZOffsetX), (sMapY + sZOffsetY) );\
\
}\
else\
{\
sWorldY = GetMapXYWorldY( sMapX, sMapY );\
}\
\
if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE )\
{\
sZLevel=(sWorldY*Z_SUBLAYERS)+STRUCT_Z_LEVEL;\
}\
else\
{\
if ( pSoldier->aiData.dHeightAdjustment > 0 )\
{\
sWorldY += ( WALL_HEIGHT + 20 );\
\
sZLevel=(sWorldY*Z_SUBLAYERS)+ONROOF_Z_LEVEL;\
}\
else\
{\
if ( ( pSoldier->flags.uiStatusFlags & SOLDIER_DEAD ) )\
{\
sZLevel=(sWorldY*Z_SUBLAYERS)+MERC_Z_LEVEL;\
}\
else\
{\
sZLevel=(sWorldY*Z_SUBLAYERS)+MERC_Z_LEVEL;\
}\
}\
\
if ( pSoldier->sZLevelOverride != -1 )\
{\
sZLevel = pSoldier->sZLevelOverride;\
}\
\
if ( gsForceSoldierZLevel != 0 )\
{\
sZLevel = gsForceSoldierZLevel;\
}\
}\
\
}