diff --git a/source/enemy/nfdutch.cpp b/source/enemy/nfdutch.cpp new file mode 100644 index 000000000..f395d1b1d --- /dev/null +++ b/source/enemy/nfdutch.cpp @@ -0,0 +1,147 @@ +/*========================================================================= + + nfdutch.cpp + + Author: CRB + Created: + Project: Spongebob + Purpose: + + Copyright (c) 2000 Climax Development Ltd + +===========================================================================*/ + +#ifndef __ENEMY_NPC_H__ +#include "enemy\npc.h" +#endif + +#ifndef __GAME_GAME_H__ +#include "game\game.h" +#endif + +#ifndef __PLAYER_PLAYER_H__ +#include "player\player.h" +#endif + +#ifndef __PROJECTL_PROJECTL_H__ +#include "projectl\projectl.h" +#endif + + +void CNpc::processFlyingDutchmanMovement( int _frames ) +{ + if ( m_movementTimer > 0 ) + { + m_movementTimer -= _frames; + + if ( m_extendDir == EXTEND_UP ) + { + s32 yDist = -10 - Pos.vy; + s32 yDistSqr = yDist * yDist; + + if ( yDistSqr > 100 ) + { + processGenericGotoTarget( _frames, 0, yDist, m_data[m_type].speed ); + } + else + { + m_extendDir = EXTEND_DOWN; + } + } + else + { + s32 yDist = 400 - Pos.vy; + s32 yDistSqr = yDist * yDist; + + if ( yDistSqr > 100 ) + { + processGenericGotoTarget( _frames, 0, yDist, m_data[m_type].speed ); + } + else + { + m_extendDir = EXTEND_UP; + } + } + } + else + { + m_controlFunc = NPC_CONTROL_CLOSE; + } +} + +void CNpc::processCloseFlyingDutchmanAttack( int _frames ) +{ + CPlayer *player = GameScene.getPlayer(); + DVECTOR playerPos = player->getPos(); + + s32 yDist = playerPos.vy - Pos.vy; + s32 yDistSqr = yDist * yDist; + + if ( yDist > 0 ) + { + m_extendDir = EXTEND_DOWN; + } + else + { + m_extendDir = EXTEND_UP; + } + + if ( yDistSqr > 100 ) + { + processGenericGotoTarget( _frames, 0, yDist, m_data[m_type].speed ); + } + else + { + switch( m_state ) + { + case FLYING_DUTCHMAN_ATTACK_PLAYER_1: + case FLYING_DUTCHMAN_ATTACK_PLAYER_2: + { + // fire at player + + s16 heading; + + if ( playerPos.vx - Pos.vx > 0 ) + { + heading = 0; + } + else + { + heading = 2048; + } + + CProjectile *projectile; + projectile = new( "test projectile" ) CProjectile; + projectile->init( Pos, heading ); + + m_controlFunc = NPC_CONTROL_MOVEMENT; + m_movementTimer = GameState::getOneSecondInFrames() * 3; + + m_state++; + + break; + } + + default: + { + // charge player + + s32 xDist = playerPos.vx - Pos.vx; + s32 xDistSqr = xDist * xDist; + + if ( xDistSqr + yDistSqr > 100 ) + { + processGenericGotoTarget( _frames, xDist, yDist, 6 ); + } + else + { + m_controlFunc = NPC_CONTROL_MOVEMENT; + m_movementTimer = GameState::getOneSecondInFrames() * 3; + m_state = FLYING_DUTCHMAN_ATTACK_PLAYER_1; + } + + break; + } + } + } +} \ No newline at end of file diff --git a/source/enemy/nmjfish.cpp b/source/enemy/nmjfish.cpp new file mode 100644 index 000000000..a817c5cfc --- /dev/null +++ b/source/enemy/nmjfish.cpp @@ -0,0 +1,138 @@ +/*========================================================================= + + nnjfish.cpp + + Author: CRB + Created: + Project: Spongebob + Purpose: + + Copyright (c) 2000 Climax Development Ltd + +===========================================================================*/ + +#ifndef __ENEMY_NPC_H__ +#include "enemy\npc.h" +#endif + +#ifndef __GAME_GAME_H__ +#include "game\game.h" +#endif + +#ifndef __PLAYER_PLAYER_H__ +#include "player\player.h" +#endif + + +void CNpc::processMotherJellyfishMovement( int _frames ) +{ + s32 xDist, yDist; + s32 xDistSqr, yDistSqr; + + switch( m_state ) + { + case MOTHER_JELLYFISH_RETURN_TO_START: + { + xDist = m_base.vx - this->Pos.vx; + xDistSqr = xDist * xDist; + yDist = m_base.vy - this->Pos.vy; + yDistSqr = yDist * yDist; + + if ( xDistSqr + yDistSqr > 100 ) + { + processGenericGotoTarget( _frames, xDist, yDist, m_data[m_type].speed ); + } + else + { + // have arrived at base position + + m_movementTimer = GameState::getOneSecondInFrames() * 5; + m_state = MOTHER_JELLYFISH_CYCLE; + m_extension = 0; + m_extendDir = EXTEND_RIGHT; + } + + break; + } + + case MOTHER_JELLYFISH_CYCLE: + { + if ( m_movementTimer > 0 ) + { + m_movementTimer -= _frames; + + if ( m_extendDir == EXTEND_RIGHT ) + { + if ( m_extension < 200 ) + { + m_extension += 3 * _frames; + + Pos.vx = m_base.vx + m_extension; + + m_heading = 0; + } + else + { + m_extendDir = EXTEND_LEFT; + } + } + else + { + if ( m_extension > -200 ) + { + m_extension -= 3 * _frames; + + Pos.vx = m_base.vx + m_extension; + + m_heading = 2048; + } + else + { + m_extendDir = EXTEND_RIGHT; + } + } + } + else + { + m_controlFunc = NPC_CONTROL_CLOSE; + m_state = MOTHER_JELLYFISH_ATTACK_PLAYER; + } + + break; + } + + default: + break; + } +} + +void CNpc::processCloseMotherJellyfishAttack( int _frames ) +{ + // seek position above user + + CPlayer *player = GameScene.getPlayer(); + DVECTOR playerPos = player->getPos(); + DVECTOR seekPos; + s32 xDist, yDist; + s32 xDistSqr, yDistSqr; + + seekPos = playerPos; + seekPos.vy -= 100; + + xDist = seekPos.vx - this->Pos.vx; + xDistSqr = xDist * xDist; + yDist = seekPos.vy - this->Pos.vy; + yDistSqr = yDist * yDist; + + if ( xDistSqr + yDistSqr > 400 ) + { + processGenericGotoTarget( _frames, xDist, yDist, m_data[m_type].speed ); + } + else + { + // fire at user + + m_controlFunc = NPC_CONTROL_MOVEMENT; + m_state = MOTHER_JELLYFISH_RETURN_TO_START; + } +} \ No newline at end of file