From 1176db9ce2b368fdb4b50f53498485ec4e2fb0a4 Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 12 Jul 2001 15:45:39 +0000 Subject: [PATCH] --- source/level/layercollision.cpp | 20 ++++++++++++++++---- source/level/layercollision.h | 2 ++ source/projectl/projectl.cpp | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/source/level/layercollision.cpp b/source/level/layercollision.cpp index 0acd4791a..07fe19ff6 100644 --- a/source/level/layercollision.cpp +++ b/source/level/layercollision.cpp @@ -208,7 +208,7 @@ int CLayerCollision::getHeightFromCeiling(int _x,int _y,int _maxHeight) */ /*****************************************************************************/ -int CLayerCollision::getHeightFromGroundNonSB(int _x,int _y,int _maxHeight) +int CLayerCollision::getHeightFromGroundExcluding(int _x,int _y,int _exclusion,int _maxHeight=32) { int mapX,mapY,xFraction,yFraction; int distanceFromGround; @@ -222,7 +222,7 @@ int CLayerCollision::getHeightFromGroundNonSB(int _x,int _y,int _maxHeight) distanceFromGround=0; colHeight=s_collisionTable[((Map[mapX+mapY]&COLLISION_TILE_MASK)*16)+xFraction]; - if ( (Map[mapX+mapY] & COLLISION_TYPE_MASK) == COLLISION_TYPE_FLAG_SB_NOMOVE ) + if ( (Map[mapX+mapY] & COLLISION_TYPE_MASK) == _exclusion ) { colHeight = 0; } @@ -239,7 +239,7 @@ int CLayerCollision::getHeightFromGroundNonSB(int _x,int _y,int _maxHeight) return -_maxHeight; } colHeight=s_collisionTable[((Map[mapX+mapY]&COLLISION_TILE_MASK)*16)+xFraction]; - if ( (Map[mapX+mapY] & COLLISION_TYPE_MASK) == COLLISION_TYPE_FLAG_SB_NOMOVE ) + if ( (Map[mapX+mapY] & COLLISION_TYPE_MASK) == _exclusion ) { colHeight = 0; } @@ -261,7 +261,7 @@ int CLayerCollision::getHeightFromGroundNonSB(int _x,int _y,int _maxHeight) return _maxHeight; } colHeight=s_collisionTable[((Map[mapX+mapY]&COLLISION_TILE_MASK)*16)+xFraction]; - if ( (Map[mapX+mapY] & COLLISION_TYPE_MASK) == COLLISION_TYPE_FLAG_SB_NOMOVE ) + if ( (Map[mapX+mapY] & COLLISION_TYPE_MASK) == _exclusion ) { colHeight = 0; } @@ -273,6 +273,12 @@ int CLayerCollision::getHeightFromGroundNonSB(int _x,int _y,int _maxHeight) return distanceFromGround; } +/*****************************************************************************/ +int CLayerCollision::getHeightFromGroundNonSB(int _x,int _y,int _maxHeight) +{ + return( CLayerCollision::getHeightFromGroundExcluding( _x, _y, COLLISION_TYPE_FLAG_SB_NOMOVE, _maxHeight ) ); +} + /*****************************************************************************/ int CLayerCollision::getHeightFromGroundCart(int _x,int _y,int _maxHeight) { @@ -342,6 +348,12 @@ int CLayerCollision::getHeightFromGroundCart(int _x,int _y,int _maxHeight) return distanceFromGround; } +/*****************************************************************************/ +int CLayerCollision::getHeightFromGroundAmmo(int _x,int _y,int _maxHeight) +{ + return( CLayerCollision::getHeightFromGroundExcluding( _x, _y, COLLISION_TYPE_FLAG_NORMAL, _maxHeight ) ); +} + /*****************************************************************************/ #ifdef __SHOW_COLLISION__ #include "gfx\prim.h" diff --git a/source/level/layercollision.h b/source/level/layercollision.h index 51002cd0d..4b3684573 100644 --- a/source/level/layercollision.h +++ b/source/level/layercollision.h @@ -24,8 +24,10 @@ virtual void shutdown(); u8 Get(int X,int Y) {return(Map[X+(Y*MapWidth)]&COLLISION_TILE_MASK);} int getHeightFromGround(int _x,int _y,int _maxHeight=32); + int getHeightFromGroundExcluding(int _x,int _y,int _exclusion,int _maxHeight=32); int getHeightFromGroundNonSB(int _x,int _y,int _maxHeight=32); int getHeightFromGroundCart(int _x,int _y,int _maxHeight=32); + int getHeightFromGroundAmmo(int _x,int _y,int _maxHeight=32); int getCollisionBlock(int _x,int _y) {return Map[(_x>>4)+((_y>>4)*MapWidth)];} u8 *getMapPtr(int _x,int _y) {return(&Map[(_x>>4)+((_y>>4)*MapWidth)]);} diff --git a/source/projectl/projectl.cpp b/source/projectl/projectl.cpp index dfffb5a95..e7b3d0fd6 100644 --- a/source/projectl/projectl.cpp +++ b/source/projectl/projectl.cpp @@ -640,7 +640,7 @@ void CPlayerProjectile::think(int _frames) s16 moveY = ( m_vertVelocity >> 8 ) * _frames; - s32 groundHeight = CGameScene::getCollision()->getHeightFromGround( Pos.vx, Pos.vy, moveY ); + s32 groundHeight = CGameScene::getCollision()->getHeightFromGroundAmmo( Pos.vx, Pos.vy, moveY ); if ( groundHeight < moveY ) {