diff --git a/source/enemy/npc.cpp b/source/enemy/npc.cpp index 9966218d5..760fc575a 100644 --- a/source/enemy/npc.cpp +++ b/source/enemy/npc.cpp @@ -54,7 +54,7 @@ class CLayerCollision *CNpc::m_layerCollision; void CNpc::init() { - m_type = NPC_GARY; + m_type = NPC_SMALL_JELLYFISH_1; m_heading = m_fireHeading = 0; m_movementTimer = 0; @@ -85,22 +85,26 @@ void CNpc::init() DVECTOR newPos; newPos.vx = 100; - newPos.vy = 10; + //newPos.vy = 10; + newPos.vy = 400; m_npcPath.addWaypoint( newPos ); newPos.vx = 500; - newPos.vy = 10; + //newPos.vy = 10; + newPos.vy = 400; m_npcPath.addWaypoint( newPos ); newPos.vx = 500; - newPos.vy = 100; + //newPos.vy = 100; + newPos.vy = 350; m_npcPath.addWaypoint( newPos ); newPos.vx = 100; - newPos.vy = 100; + //newPos.vy = 100; + newPos.vy = 350; m_npcPath.addWaypoint( newPos ); diff --git a/source/enemy/nsjfish.cpp b/source/enemy/nsjfish.cpp index ac0db5cb3..f1d9d59c5 100644 --- a/source/enemy/nsjfish.cpp +++ b/source/enemy/nsjfish.cpp @@ -214,6 +214,53 @@ void CNpc::processCloseSmallJellyfishEvade( int _frames ) moveY = ( _frames * 3 * rsin( m_heading ) ) >> 12; moveVel = ( _frames * 3 ) << 8; + // check for collision with ground + + if ( m_layerCollision->Get( ( Pos.vx + moveX ) >> 4, ( Pos.vy + moveY ) >> 4 ) ) + { + bool xBlocked = false; + bool yBlocked = false; + + // destination point is below ground, check in individual directions + + if ( m_layerCollision->Get( ( Pos.vx + moveX ) >> 4, Pos.vy >> 4 ) ) + { + // X direction is blocked + + xBlocked = true; + } + + if ( m_layerCollision->Get( Pos.vx >> 4, ( Pos.vy + moveY ) >> 4 ) ) + { + yBlocked = true; + } + + if ( xBlocked && !yBlocked ) + { + // invert X + + moveX = -moveX; + + m_heading = ratan2( moveY, moveX ); + } + else if ( !xBlocked && yBlocked ) + { + // invert Y + + moveY = -moveY; + + m_heading = ratan2( moveY, moveX ); + } + else + { + moveX = -moveX; + moveY = -moveY; + + m_heading += 2048; + m_heading &= 4096; + } + } + processMovementModifier(_frames, moveX, moveY, moveVel, moveDist); } }