mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
Merged New Inventory Project into main branch
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1871 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+72
-214
@@ -1,3 +1,4 @@
|
||||
#include "Render Z.h"
|
||||
#include "worlddef.h"
|
||||
#include "renderworld.h"
|
||||
#include "Isometric Utils.h"
|
||||
@@ -5,239 +6,96 @@
|
||||
INT16 gsRScreenCenterX, gsRScreenCenterY;
|
||||
INT16 gsRDistToCenterY, gsRDistToCenterX;
|
||||
|
||||
#define GetMapXYWorldY( sWorldCellX, sWorldCellY, sWorldY )\
|
||||
{\
|
||||
\
|
||||
gsRDistToCenterX = ( sWorldCellX * CELL_X_SIZE ) - gCenterWorldX;\
|
||||
gsRDistToCenterY = ( sWorldCellY * CELL_Y_SIZE ) - gCenterWorldY;\
|
||||
\
|
||||
gsRScreenCenterY = gsRDistToCenterX + gsRDistToCenterY;\
|
||||
\
|
||||
sWorldY = gsRScreenCenterY + gsCY - gsTLY;\
|
||||
INT16 GetMapXYWorldY( INT16 sWorldCellX, INT16 sWorldCellY )
|
||||
{
|
||||
gsRDistToCenterX = ( sWorldCellX * CELL_X_SIZE ) - gCenterWorldX;
|
||||
gsRDistToCenterY = ( sWorldCellY * CELL_Y_SIZE ) - gCenterWorldY;
|
||||
|
||||
gsRScreenCenterY = gsRDistToCenterX + gsRDistToCenterY;
|
||||
|
||||
return (gsRScreenCenterY + gsCY - gsTLY);
|
||||
}
|
||||
|
||||
#define GetMapXYWorldYFromCellCoords( sWorldCellX, sWorldCellY, sWorldY )\
|
||||
{\
|
||||
\
|
||||
gsRDistToCenterX = sWorldCellX - gCenterWorldX;\
|
||||
gsRDistToCenterY = sWorldCellY - gCenterWorldY;\
|
||||
\
|
||||
gsRScreenCenterY = gsRDistToCenterX + gsRDistToCenterY;\
|
||||
\
|
||||
sWorldY = gsRScreenCenterY + gsCY - gsTLY;\
|
||||
INT16 GetMapXYWorldYFromCellCoords( INT16 sWorldCellX, INT16 sWorldCellY )
|
||||
{
|
||||
gsRDistToCenterX = sWorldCellX - gCenterWorldX;
|
||||
gsRDistToCenterY = sWorldCellY - gCenterWorldY;
|
||||
|
||||
gsRScreenCenterY = gsRDistToCenterX + gsRDistToCenterY;
|
||||
|
||||
return gsRScreenCenterY + gsCY - gsTLY;
|
||||
}
|
||||
|
||||
|
||||
#define LandZLevel( sMapX, sMapY )\
|
||||
{\
|
||||
sZLevel = LAND_Z_LEVEL;\
|
||||
INT16 LandZLevel( INT16 sMapX, INT16 sMapY )
|
||||
{
|
||||
return LAND_Z_LEVEL;
|
||||
}
|
||||
|
||||
|
||||
#define ObjectZLevel( TileElem, pNode, sMapX, sMapY )\
|
||||
{\
|
||||
GetMapXYWorldY( sMapX, sMapY, sWorldY );\
|
||||
\
|
||||
if ( uiTileElemFlags & CLIFFHANG_TILE )\
|
||||
{\
|
||||
sZLevel=LAND_Z_LEVEL;\
|
||||
}\
|
||||
else if ( uiTileElemFlags & OBJECTLAYER_USEZHEIGHT )\
|
||||
{\
|
||||
sZLevel=( ( sWorldY ) *Z_SUBLAYERS)+LAND_Z_LEVEL;\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
sZLevel=OBJECT_Z_LEVEL;\
|
||||
}\
|
||||
INT16 ObjectZLevel( TILE_ELEMENT* TileElem, LEVELNODE* pNode, UINT32 uiTileElemFlags, INT32 sMapX, INT32 sMapY, INT16& sWorldY )
|
||||
{
|
||||
sWorldY = GetMapXYWorldY( sMapX, sMapY );
|
||||
|
||||
if ( uiTileElemFlags & CLIFFHANG_TILE )
|
||||
{
|
||||
return LAND_Z_LEVEL;
|
||||
}
|
||||
else if ( uiTileElemFlags & OBJECTLAYER_USEZHEIGHT )
|
||||
{
|
||||
return ( ( sWorldY ) * Z_SUBLAYERS)+LAND_Z_LEVEL;
|
||||
}
|
||||
else
|
||||
{
|
||||
return OBJECT_Z_LEVEL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#define StructZLevel( sMapX, sMapY )\
|
||||
{\
|
||||
\
|
||||
GetMapXYWorldY( sMapX, sMapY, sWorldY );\
|
||||
\
|
||||
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;\
|
||||
}\
|
||||
\
|
||||
GetMapXYWorldY( (sMapX + sZOffsetX), (sMapY + sZOffsetY), sWorldY );\
|
||||
\
|
||||
GetMapXYWorldY( (sMapX + sZOffsetX), (sMapY + sZOffsetY), sWorldY );\
|
||||
\
|
||||
sZLevel=( ( sWorldY ) * Z_SUBLAYERS)+STRUCT_Z_LEVEL;\
|
||||
\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
sZOffsetX = -1;\
|
||||
sZOffsetY = -1;\
|
||||
GetMapXYWorldY( (sMapX + sZOffsetX), (sMapY + sZOffsetY), sWorldY );\
|
||||
\
|
||||
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;\
|
||||
}\
|
||||
\
|
||||
INT16 RoofZLevel( INT16 sMapX, INT16 sMapY, INT16& sWorldY )
|
||||
{
|
||||
sWorldY = GetMapXYWorldY( sMapX, sMapY );
|
||||
sWorldY += WALL_HEIGHT;
|
||||
|
||||
return (sWorldY*Z_SUBLAYERS)+ROOF_Z_LEVEL;
|
||||
|
||||
}
|
||||
|
||||
#define RoofZLevel( sMapX, sMapY )\
|
||||
{\
|
||||
\
|
||||
GetMapXYWorldY( sMapX, sMapY, sWorldY );\
|
||||
\
|
||||
sWorldY += WALL_HEIGHT;\
|
||||
\
|
||||
sZLevel=(sWorldY*Z_SUBLAYERS)+ROOF_Z_LEVEL;\
|
||||
\
|
||||
INT16 OnRoofZLevel( INT16 sMapX, INT16 sMapY, INT16& sWorldY, UINT32 uiLevelNodeFlags )
|
||||
{
|
||||
sWorldY = GetMapXYWorldY( sMapX, sMapY );
|
||||
|
||||
if ( uiLevelNodeFlags & LEVELNODE_ROTTINGCORPSE )
|
||||
{
|
||||
sWorldY += ( WALL_HEIGHT + 40 );
|
||||
}
|
||||
if ( uiLevelNodeFlags & LEVELNODE_ROTTINGCORPSE )
|
||||
{
|
||||
sWorldY += ( WALL_HEIGHT + 40 );
|
||||
}
|
||||
else
|
||||
{
|
||||
sWorldY += WALL_HEIGHT;
|
||||
}
|
||||
|
||||
return(sWorldY*Z_SUBLAYERS)+ONROOF_Z_LEVEL;
|
||||
|
||||
}
|
||||
|
||||
#define OnRoofZLevel( sMapX, sMapY )\
|
||||
{\
|
||||
\
|
||||
GetMapXYWorldY( sMapX, sMapY, sWorldY );\
|
||||
\
|
||||
if ( uiLevelNodeFlags & LEVELNODE_ROTTINGCORPSE )\
|
||||
{\
|
||||
sWorldY += ( WALL_HEIGHT + 40 );\
|
||||
}\
|
||||
if ( uiLevelNodeFlags & LEVELNODE_ROTTINGCORPSE )\
|
||||
{\
|
||||
sWorldY += ( WALL_HEIGHT + 40 );\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
sWorldY += WALL_HEIGHT;\
|
||||
}\
|
||||
\
|
||||
sZLevel=(sWorldY*Z_SUBLAYERS)+ONROOF_Z_LEVEL;\
|
||||
\
|
||||
INT16 TopmostZLevel( INT16 sMapX, INT16 sMapY, INT16& sWorldY )
|
||||
{
|
||||
sWorldY = GetMapXYWorldY( sMapX, sMapY );
|
||||
|
||||
return TOPMOST_Z_LEVEL;
|
||||
}
|
||||
|
||||
#define TopmostZLevel( sMapX, sMapY )\
|
||||
{\
|
||||
\
|
||||
GetMapXYWorldY( sMapX, sMapY, sWorldY );\
|
||||
\
|
||||
sZLevel=TOPMOST_Z_LEVEL;\
|
||||
\
|
||||
INT16 ShadowZLevel( INT16 sMapX, INT16 sMapY, INT16& sWorldY )
|
||||
{
|
||||
sWorldY = GetMapXYWorldY( sMapX, sMapY );
|
||||
|
||||
return __max( ( (sWorldY - 80 ) *Z_SUBLAYERS )+SHADOW_Z_LEVEL, 0 );
|
||||
}
|
||||
|
||||
#define ShadowZLevel( sMapX, sMapY )\
|
||||
{\
|
||||
\
|
||||
GetMapXYWorldY( sMapX, sMapY, sWorldY );\
|
||||
\
|
||||
sZLevel=__max( ( (sWorldY - 80 ) *Z_SUBLAYERS )+SHADOW_Z_LEVEL, 0 );\
|
||||
\
|
||||
}
|
||||
|
||||
#define SoldierZLevel( pSoldier, sMapX, sMapY )\
|
||||
{\
|
||||
\
|
||||
if ( ( pSoldier->uiStatusFlags & SOLDIER_MULTITILE ) )\
|
||||
{\
|
||||
\
|
||||
if ( pNode->pStructureData != NULL )\
|
||||
{\
|
||||
sZOffsetX = pNode->pStructureData->pDBStructureRef->pDBStructure->bZTileOffsetX;\
|
||||
sZOffsetY = pNode->pStructureData->pDBStructureRef->pDBStructure->bZTileOffsetY;\
|
||||
}\
|
||||
\
|
||||
GetMapXYWorldY( (sMapX + sZOffsetX), (sMapY + sZOffsetY), sWorldY );\
|
||||
\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
GetMapXYWorldY( sMapX, sMapY, sWorldY );\
|
||||
}\
|
||||
\
|
||||
if ( pSoldier->uiStatusFlags & SOLDIER_VEHICLE )\
|
||||
{\
|
||||
sZLevel=(sWorldY*Z_SUBLAYERS)+STRUCT_Z_LEVEL;\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
if ( pSoldier->dHeightAdjustment > 0 )\
|
||||
{\
|
||||
sWorldY += ( WALL_HEIGHT + 20 );\
|
||||
\
|
||||
sZLevel=(sWorldY*Z_SUBLAYERS)+ONROOF_Z_LEVEL;\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
if ( ( pSoldier->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;\
|
||||
}\
|
||||
}\
|
||||
\
|
||||
}
|
||||
|
||||
|
||||
//#if 0
|
||||
|
||||
Reference in New Issue
Block a user