diff --git a/source/player/player.cpp b/source/player/player.cpp index 260bc61b3..52db75974 100644 --- a/source/player/player.cpp +++ b/source/player/player.cpp @@ -855,7 +855,7 @@ if(PadGetDown(0)&PAD_TRIANGLE) } // Death? - else if(m_currentMode!=PLAYER_MODE_DEAD&& + /*else if(m_currentMode!=PLAYER_MODE_DEAD&& block==COLLISION_TYPE_FLAG_DEATH_LIQUID) { dieYouPorousFreak(DEATHTYPE__LIQUID); @@ -864,7 +864,7 @@ if(PadGetDown(0)&PAD_TRIANGLE) block==COLLISION_TYPE_FLAG_DEATH_INSTANT) { dieYouPorousFreak(DEATHTYPE__NORMAL); - } + }*/ } // Powerups @@ -1173,6 +1173,49 @@ if(PadGetDown(0)&PAD_TRIANGLE) } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CPlayer::detectHazardousSurface() +{ + int height; + + height=CGameScene::getCollision()->getHeightFromGround( Pos.vx, Pos.vy ); + if ( height <= 0 ) + { + CThing *platform; + platform=isOnPlatform(); + if(platform) + { + int platformHeight=((CNpcPlatform*)platform)->getHeightFromPlatformAtPosition( Pos.vx, Pos.vy ); + + if ( platformHeight < height ) + { + // on platform, which is higher than ground + return; + } + } + + int block; + block=CGameScene::getCollision()->getCollisionBlock(Pos.vx,Pos.vy)&COLLISION_TYPE_MASK; + + // Death? + if(m_currentMode!=PLAYER_MODE_DEAD&& + block==COLLISION_TYPE_FLAG_DEATH_LIQUID) + { + dieYouPorousFreak(DEATHTYPE__LIQUID); + } + else if(m_currentMode!=PLAYER_MODE_DEAD&& + block==COLLISION_TYPE_FLAG_DEATH_INSTANT) + { + dieYouPorousFreak(DEATHTYPE__NORMAL); + } + } +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/player/player.h b/source/player/player.h index 9d2941e3a..901941570 100644 --- a/source/player/player.h +++ b/source/player/player.h @@ -219,6 +219,7 @@ public: virtual void init(); virtual void shutdown(); virtual void think(int _frames); + void detectHazardousSurface(); virtual void render(); virtual int dontKillDuringLevelRespawn() {return true;} virtual void shove(DVECTOR move); diff --git a/source/thing/thing.cpp b/source/thing/thing.cpp index c9aa7e75c..10c8d6888 100644 --- a/source/thing/thing.cpp +++ b/source/thing/thing.cpp @@ -702,6 +702,8 @@ DVECTOR const &CamPos=CLevel::getCameraPos(); } thing1=thing1->m_nextCollisionThing; } + + player->detectHazardousSurface(); } // Shut emm down, sh sh shut em down, we shutem down for(i=0;i