diff --git a/source/player/player.cpp b/source/player/player.cpp index f6d6d9cc4..42831595b 100644 --- a/source/player/player.cpp +++ b/source/player/player.cpp @@ -1659,6 +1659,7 @@ void CPlayer::takeDamage(DAMAGE_TYPE _damage,REACT_DIRECTION _reactDirection,CTh case DAMAGE__SQUASH_ENEMY: case DAMAGE__BURN_ENEMY: case DAMAGE__BITE_ENEMY: + case DAMAGE__COLLISION_DAMAGE: break; case DAMAGE__KILL_OUTRIGHT: @@ -2063,12 +2064,11 @@ int CPlayer::moveVertical(int _moveDistance) } } } - else + else if(_moveDistance<0) { // Must be below ground // Are we jumping into an impassable block? - if(_moveDistance<0&& - (m_layerCollision->getCollisionBlock(pos.vx,pos.vy+_moveDistance)&COLLISION_TYPE_MASK)!=COLLISION_TYPE_FLAG_NORMAL&& + if((m_layerCollision->getCollisionBlock(pos.vx,pos.vy+_moveDistance)&COLLISION_TYPE_MASK)!=COLLISION_TYPE_FLAG_NORMAL&& getHeightFromGround(pos.vx,pos.vy+_moveDistance)<=0) { pos.vy=(pos.vy&0xfff0); @@ -2076,6 +2076,17 @@ int CPlayer::moveVertical(int _moveDistance) hitGround=true; } } + else + { + // Stood on any important types of collision? + int colType; + + colType=m_layerCollision->getCollisionBlock(pos.vx,pos.vy+_moveDistance)&COLLISION_TYPE_MASK; + if(colType==COLLISION_TYPE_FLAG_DAMAGE) + { + takeDamage(DAMAGE__COLLISION_DAMAGE); + } + } pos.vy+=_moveDistance; setPlayerPos(&pos); diff --git a/source/player/player.h b/source/player/player.h index c57260335..873099950 100644 --- a/source/player/player.h +++ b/source/player/player.h @@ -121,6 +121,7 @@ typedef enum DAMAGE__SQUASH_ENEMY, DAMAGE__BURN_ENEMY, DAMAGE__BITE_ENEMY, + DAMAGE__COLLISION_DAMAGE, DAMAGE__KILL_OUTRIGHT, }DAMAGE_TYPE;