diff --git a/source/enemy/nanemone.cpp b/source/enemy/nanemone.cpp index 9f5cdd6be..009a6635a 100644 --- a/source/enemy/nanemone.cpp +++ b/source/enemy/nanemone.cpp @@ -15,6 +15,10 @@ #include "enemy\npc.h" #endif +#ifndef __ENEMY_NANEMONE_H__ +#include "enemy\nanemone.h" +#endif + #ifndef __PROJECTL_PROJECTL_H__ #include "projectl\projectl.h" #endif @@ -40,6 +44,29 @@ #endif +bool CNpcAnemoneEnemy::processSensor() +{ + switch( m_sensorFunc ) + { + case NPC_SENSOR_NONE: + return( false ); + + default: + { + if ( playerXDistSqr + playerYDistSqr < 40000 ) + { + m_controlFunc = NPC_CONTROL_CLOSE; + + return( true ); + } + else + { + return( false ); + } + } + } +} + void CNpcEnemy::processCloseAnemone1Attack( int _frames ) { s32 moveX, moveY; diff --git a/source/enemy/ngen.cpp b/source/enemy/ngen.cpp index e242ac59b..4ff013dd1 100644 --- a/source/enemy/ngen.cpp +++ b/source/enemy/ngen.cpp @@ -11,10 +11,66 @@ ===========================================================================*/ +#ifndef __ENEMY_NPC_H__ +#include "enemy\npc.h" +#endif + #ifndef __ENEMY_NGEN_H__ #include "enemy\ngen.h" #endif +#ifndef __ENEMY_NSCRAB_H__ +#include "enemy\nscrab.h" +#endif + +#ifndef __GAME_GAME_H__ +#include "game\game.h" +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcEnemyGenerator::think(int _frames) +{ + if ( getNumChildren() < 3 ) + { + m_movementTimer -= _frames; + + if ( m_movementTimer < 0 ) + { + m_movementTimer = 3 * GameState::getOneSecondInFrames(); + + CNpcEnemy *enemy; + enemy = new( "spider crab" ) CNpcSpiderCrabEnemy; + ASSERT(enemy); + enemy->setType( CNpcEnemy::NPC_SPIDER_CRAB ); + enemy->init(); + enemy->setLayerCollision( m_layerCollision ); + enemy->setStartPos( Pos.vx >> 4, Pos.vy >> 4 ); + + CNpcWaypoint *sourceWaypoint = m_npcPath.getWaypointList(); + + if ( sourceWaypoint ) + { + // skip first waypoint + + sourceWaypoint = sourceWaypoint->nextWaypoint; + + while( sourceWaypoint ) + { + enemy->addWaypoint( sourceWaypoint->pos.vx >> 4, sourceWaypoint->pos.vy >> 4 ); + sourceWaypoint = sourceWaypoint->nextWaypoint; + } + } + + enemy->setPathType( m_npcPath.getPathType() ); + + enemy->postInit(); + + addChild( enemy ); + } + } +} + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void CNpcEnemyGenerator::render() diff --git a/source/enemy/ngen.h b/source/enemy/ngen.h index c3e7650d3..c323c16ac 100644 --- a/source/enemy/ngen.h +++ b/source/enemy/ngen.h @@ -14,8 +14,7 @@ #ifndef __ENEMY_NGEN_H__ #define __ENEMY_NGEN_H__ - -#ifndef __ENEMY_NPC_H__ +#ifndef __ENEMY_NPC_H__ #include "enemy\npc.h" #endif @@ -23,6 +22,7 @@ class CNpcEnemyGenerator : public CNpcEnemy { public: void render(); + void think(int _frames); }; #endif \ No newline at end of file diff --git a/source/enemy/nhcrab.cpp b/source/enemy/nhcrab.cpp index 9464e1b99..199c7f6e4 100644 --- a/source/enemy/nhcrab.cpp +++ b/source/enemy/nhcrab.cpp @@ -15,6 +15,10 @@ #include "enemy\npc.h" #endif +#ifndef __ENEMY_NHCRAB_H__ +#include "enemy\nhcrab.h" +#endif + #ifndef __GAME_GAME_H__ #include "game\game.h" #endif @@ -27,7 +31,30 @@ #include #endif -void CNpcEnemy::processCloseHermitCrabAttack( int _frames ) +bool CNpcHermitCrabEnemy::processSensor() +{ + switch( m_sensorFunc ) + { + case NPC_SENSOR_NONE: + return( false ); + + default: + { + if ( playerXDistSqr + playerYDistSqr < 400 ) + { + m_controlFunc = NPC_CONTROL_CLOSE; + + return( true ); + } + else + { + return( false ); + } + } + } +} + +void CNpcHermitCrabEnemy::processClose( int _frames ) { if ( m_state == HERMIT_CRAB_NO_ATTACK ) { diff --git a/source/enemy/nhcrab.h b/source/enemy/nhcrab.h index e84cc7d43..e56e07db5 100644 --- a/source/enemy/nhcrab.h +++ b/source/enemy/nhcrab.h @@ -1,6 +1,6 @@ /*========================================================================= - nhcrab.cpp + nhcrab.h Author: CRB Created: @@ -12,6 +12,7 @@ ===========================================================================*/ #ifndef __ENEMY_NHCRAB_H__ +#define __ENEMY_NHCRAB_H__ #ifndef __ENEMY_NPC_H__ #include "enemy\npc.h" diff --git a/source/enemy/npc.cpp b/source/enemy/npc.cpp index 2d4f9d735..823ac0409 100644 --- a/source/enemy/npc.cpp +++ b/source/enemy/npc.cpp @@ -188,6 +188,13 @@ s32 CNpcEnemy::playerYDistSqr; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +CNpcEnemy::NPC_UNIT_TYPE CNpcEnemy::getTypeFromMapEdit( u16 newType ) +{ + return( mapEditConvertTable[newType - NPC_ENEMY_MAPEDIT_OFFSET] ); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + void CNpcEnemy::setTypeFromMapEdit( u16 newType ) { m_type = mapEditConvertTable[newType - NPC_ENEMY_MAPEDIT_OFFSET]; @@ -814,21 +821,6 @@ bool CNpcEnemy::processSensor() { switch( m_sensorFunc ) { - case NPC_SENSOR_JELLYFISH_USER_CLOSE: - { - if ( playerXDistSqr + playerYDistSqr < 5625 ) - { - m_controlFunc = NPC_CONTROL_CLOSE; - m_evadeClockwise = getRnd() % 2; - - return( true ); - } - else - { - return( false ); - } - } - case NPC_SENSOR_CLAM_USER_CLOSE: { if ( playerXDistSqr + playerYDistSqr < 10000 ) @@ -847,47 +839,6 @@ bool CNpcEnemy::processSensor() } } - case NPC_SENSOR_SPIDER_CRAB_USER_CLOSE: - { - if ( playerXDistSqr + playerYDistSqr < 10000 ) - { - // only attack if within path extents - - s32 minX, maxX; - m_npcPath.getPathXExtents( &minX, &maxX ); - - if ( playerXDist < 0 ) - { - m_extendDir = EXTEND_LEFT; - - if ( ( Pos.vx + playerXDist - 128 ) < minX ) - { - return( false ); - } - } - else - { - m_extendDir = EXTEND_RIGHT; - - if ( ( Pos.vx + playerXDist + 128 ) > maxX ) - { - return( false ); - } - } - - m_controlFunc = NPC_CONTROL_CLOSE; - m_extension = 0; - m_velocity = 5; - m_base = Pos; - - return( true ); - } - else - { - return( false ); - } - } - case NPC_SENSOR_OIL_BLOB_USER_CLOSE: case NPC_SENSOR_NINJA_STARFISH_USER_CLOSE: { @@ -1024,7 +975,6 @@ bool CNpcEnemy::processSensor() } } - case NPC_SENSOR_ANEMONE_USER_CLOSE: case NPC_SENSOR_EYEBALL_USER_CLOSE: case NPC_SENSOR_FLAMING_SKULL_USER_CLOSE: case NPC_SENSOR_PARASITIC_WORM_USER_CLOSE: @@ -1102,7 +1052,6 @@ bool CNpcEnemy::processSensor() case NPC_SENSOR_FISH_HOOK_USER_CLOSE: case NPC_SENSOR_OCTOPUS_USER_CLOSE: - case NPC_SENSOR_HERMIT_CRAB_USER_CLOSE: { if ( playerXDistSqr + playerYDistSqr < 400 ) { @@ -1277,20 +1226,6 @@ void CNpcEnemy::processMovement(int _frames) break; } - case NPC_MOVEMENT_SPIDER_CRAB_SPAWNER: - { - processSpiderCrabSpawnerMovement( _frames ); - - break; - } - - case NPC_MOVEMENT_SPIDER_CRAB_INITJUMP: - { - processSpiderCrabInitJumpMovement( _frames ); - - break; - } - default: break; @@ -1318,13 +1253,6 @@ void CNpcEnemy::processMovementModifier(int _frames, s32 distX, s32 distY, s32 d break; } - case NPC_MOVEMENT_MODIFIER_JELLYFISH: - { - processSmallJellyfishMovementModifier( _frames, distX, distY, dist, headingChange ); - - break; - } - case NPC_MOVEMENT_MODIFIER_FISH_FOLK: { processFishFolkMovementModifier( _frames, distX, distY ); @@ -1439,11 +1367,6 @@ void CNpcEnemy::processClose(int _frames) { switch( m_data[this->m_type].closeFunc ) { - case NPC_CLOSE_JELLYFISH_EVADE: - processCloseSmallJellyfishEvade( _frames ); - - break; - case NPC_CLOSE_CLAM_JUMP_ATTACK: processCloseClamJumpAttack( _frames ); @@ -1454,11 +1377,6 @@ void CNpcEnemy::processClose(int _frames) break; - case NPC_CLOSE_SPIDER_CRAB_ATTACK: - processCloseSpiderCrabAttack( _frames ); - - break; - case NPC_CLOSE_GENERIC_USER_SEEK: { processGenericGotoTarget( _frames, playerXDist, playerYDist, m_data[m_type].speed ); @@ -1546,11 +1464,6 @@ void CNpcEnemy::processClose(int _frames) break; - case NPC_CLOSE_HERMIT_CRAB_ATTACK: - processCloseHermitCrabAttack( _frames ); - - break; - case NPC_CLOSE_OCTOPUS_ATTACK: processCloseOctopusAttack( _frames ); @@ -1575,26 +1488,11 @@ void CNpcEnemy::processClose(int _frames) void CNpcEnemy::processCollision() { - switch( m_data[m_type].collisionFunc ) - { - case NPC_COLLISION_GENERIC: - { - CPlayer *player = GameScene.getPlayer(); + CPlayer *player = GameScene.getPlayer(); - player->takeDamage( m_data[m_type].damageToUserType ); + player->takeDamage( m_data[m_type].damageToUserType ); - m_controlFunc = m_oldControlFunc; - - break; - } - - case NPC_COLLISION_SPIDER_CRAB_BITE: - { - processSpiderCrabCollision(); - - break; - } - } + m_controlFunc = m_oldControlFunc; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1644,6 +1542,8 @@ void CNpcEnemy::processTimer(int _frames) void CNpcEnemy::render() { + SprFrame = NULL; + if ( m_isActive ) { CEnemyThing::render(); @@ -1659,7 +1559,7 @@ void CNpcEnemy::render() { if ( renderPos.vy >= 0 && renderPos.vy <= VidGetScrH() ) { - m_actorGfx->Render(renderPos,m_animNo,( m_frame >> 8 ),m_reversed); + SprFrame = m_actorGfx->Render(renderPos,m_animNo,( m_frame >> 8 ),m_reversed); } } } diff --git a/source/enemy/npc.h b/source/enemy/npc.h index ec3f18974..960764e74 100644 --- a/source/enemy/npc.h +++ b/source/enemy/npc.h @@ -162,12 +162,13 @@ public: void init(); void postInit(); void shutdown(); - void think(int _frames); - void render(); + virtual void think(int _frames); + virtual void render(); void processEvent( GAME_EVENT evt, CThing *sourceThing ); void setLayerCollision( class CLayerCollision *_layer ) {m_layerCollision=_layer;} void setType( NPC_UNIT_TYPE newType ) {m_type = newType;} void setTypeFromMapEdit( u16 newType ); + static NPC_UNIT_TYPE getTypeFromMapEdit( u16 newType ); void setHeading( s32 newHeading ) {m_heading = newHeading;} void setHeading( s32 xPos, s32 yPos ); void addWaypoint( s32 xPos, s32 yPos ); @@ -177,7 +178,7 @@ public: bool canBeCaughtByNet(); void caughtWithNet(); -private: +protected: class CLayerCollision *m_layerCollision; protected: @@ -223,14 +224,12 @@ protected: enum NPC_SENSOR_FUNC { NPC_SENSOR_NONE = 0, - NPC_SENSOR_JELLYFISH_USER_CLOSE = 1, + NPC_SENSOR_USER_CLOSE = 1, NPC_SENSOR_CLAM_USER_CLOSE, - NPC_SENSOR_SPIDER_CRAB_USER_CLOSE, NPC_SENSOR_NINJA_STARFISH_USER_CLOSE, NPC_SENSOR_GHOST_PIRATE_USER_CLOSE, NPC_SENSOR_GENERIC_USER_VISIBLE, NPC_SENSOR_OIL_BLOB_USER_CLOSE, - NPC_SENSOR_ANEMONE_USER_CLOSE, NPC_SENSOR_EYEBALL_USER_CLOSE, NPC_SENSOR_SKULL_STOMPER_USER_CLOSE, NPC_SENSOR_BOOGER_MONSTER_USER_CLOSE, @@ -238,7 +237,6 @@ protected: NPC_SENSOR_FALLING_ITEM_USER_CLOSE, NPC_SENSOR_FISH_HOOK_USER_CLOSE, NPC_SENSOR_FLAMING_SKULL_USER_CLOSE, - NPC_SENSOR_HERMIT_CRAB_USER_CLOSE, NPC_SENSOR_OCTOPUS_USER_CLOSE, NPC_SENSOR_PUFFA_FISH_USER_CLOSE, NPC_SENSOR_PARASITIC_WORM_USER_CLOSE, @@ -247,10 +245,8 @@ protected: enum NPC_CLOSE_FUNC { NPC_CLOSE_NONE = 0, - NPC_CLOSE_JELLYFISH_EVADE = 1, - NPC_CLOSE_CLAM_JUMP_ATTACK, + NPC_CLOSE_CLAM_JUMP_ATTACK = 1, NPC_CLOSE_CLAM_SNAP_ATTACK, - NPC_CLOSE_SPIDER_CRAB_ATTACK, NPC_CLOSE_GHOST_PIRATE_ATTACK, NPC_CLOSE_SHARK_MAN_ATTACK, NPC_CLOSE_GENERIC_USER_SEEK, @@ -292,7 +288,6 @@ protected: NPC_MOVEMENT_SHARK_MAN, NPC_MOVEMENT_BALL_BLOB, NPC_MOVEMENT_RETURNING_HAZARD_GROUND, - NPC_MOVEMENT_SPIDER_CRAB_SPAWNER, NPC_MOVEMENT_SPIDER_CRAB_INITJUMP, }; @@ -300,7 +295,6 @@ protected: { NPC_MOVEMENT_MODIFIER_NONE = 0, NPC_MOVEMENT_MODIFIER_BOB = 1, - NPC_MOVEMENT_MODIFIER_JELLYFISH, NPC_MOVEMENT_MODIFIER_FISH_FOLK, NPC_MOVEMENT_MODIFIER_OCTOPUS, }; @@ -319,12 +313,6 @@ protected: NPC_SHOT_GENERIC = 1, }; - enum NPC_COLLISION_FUNC - { - NPC_COLLISION_GENERIC = 0, - NPC_COLLISION_SPIDER_CRAB_BITE = 1, - }; - enum NPC_MOTHER_JELLYFISH_STATE { MOTHER_JELLYFISH_RETURN_TO_START_1 = 0, @@ -436,7 +424,6 @@ protected: NPC_SHOT_FUNC shotFunc; u16 dieAnim; u16 recoilAnim; - NPC_COLLISION_FUNC collisionFunc; bool canBeNetted; bool respawning; } @@ -446,12 +433,12 @@ protected: // functions - bool processSensor(); - void processMovement( int _frames ); - void processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange ); + virtual bool processSensor(); + virtual void processMovement( int _frames ); + virtual void processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange ); void processShot(); - void processClose( int _frames ); - void processCollision(); + virtual void processClose( int _frames ); + virtual void processCollision(); void processTimer( int _frames ); bool isCollisionWithGround(); @@ -466,7 +453,6 @@ protected: // small jellyfish functions void processSmallJellyfishSensor(); - void processSmallJellyfishMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange ); void processCloseSmallJellyfishEvade( int _frames ); // baby octopus functions @@ -487,17 +473,6 @@ protected: void processCloseClamJumpAttack( int _frames ); void processCloseClamSnapAttack( int _frames ); - // spider crab functions - - void processCloseSpiderCrabAttack( int _frames ); - void processSpiderCrabCollision(); - void processSpiderCrabSpawnerMovement( int _frames ); - void processSpiderCrabInitJumpMovement( int _frames ); - - // hermit crab functions - - void processCloseHermitCrabAttack( int _frames ); - // ghost pirate functions void processCloseGhostPirateAttack( int _frames ); @@ -614,6 +589,7 @@ protected: int m_animNo; CActorGfx *m_actorGfx; DVECTOR m_drawOffset; + POLY_FT4 *SprFrame; virtual void collidedWith(CThing *_thisThing); diff --git a/source/enemy/npcdata.cpp b/source/enemy/npcdata.cpp index b395a12f6..aed94c86e 100644 --- a/source/enemy/npcdata.cpp +++ b/source/enemy/npcdata.cpp @@ -334,7 +334,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -358,7 +357,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -382,7 +380,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -406,7 +403,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -430,7 +426,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -454,7 +449,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -463,10 +457,10 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ACTORS_JELLYFISH1_SBK, ANIM_JELLYFISH1_IDLE, NPC_INIT_DEFAULT, - NPC_SENSOR_JELLYFISH_USER_CLOSE, + NPC_SENSOR_USER_CLOSE, NPC_MOVEMENT_FIXED_PATH, - NPC_MOVEMENT_MODIFIER_JELLYFISH, - NPC_CLOSE_JELLYFISH_EVADE, + NPC_MOVEMENT_MODIFIER_NONE, + NPC_CLOSE_NONE, NPC_TIMER_NONE, false, 2, @@ -478,7 +472,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, ANIM_JELLYFISH1_SWIM, - NPC_COLLISION_GENERIC, true, true, }, @@ -487,10 +480,10 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ACTORS_CLAM_SBK, ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, - NPC_SENSOR_JELLYFISH_USER_CLOSE, + NPC_SENSOR_USER_CLOSE, NPC_MOVEMENT_FIXED_PATH, - NPC_MOVEMENT_MODIFIER_JELLYFISH, - NPC_CLOSE_JELLYFISH_EVADE, + NPC_MOVEMENT_MODIFIER_NONE, + NPC_CLOSE_NONE, NPC_TIMER_NONE, false, 3, @@ -502,7 +495,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, true, }, @@ -511,7 +503,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ACTORS_ANENOMELVL1_SBK, ANIM_ANENOMELVL1_BEND, NPC_INIT_DEFAULT, - NPC_SENSOR_ANEMONE_USER_CLOSE, + NPC_SENSOR_USER_CLOSE, NPC_MOVEMENT_STATIC_CYCLE_ANIM, NPC_MOVEMENT_MODIFIER_NONE, NPC_CLOSE_ANEMONE_1_ATTACK, @@ -526,7 +518,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -535,7 +526,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ACTORS_SPIKEYANENOME_SBK, ANIM_SPIKEYANENOME_BODY, NPC_INIT_ANEMONE_2, - NPC_SENSOR_ANEMONE_USER_CLOSE, + NPC_SENSOR_USER_CLOSE, NPC_MOVEMENT_STATIC_CYCLE_ANIM, NPC_MOVEMENT_MODIFIER_NONE, NPC_CLOSE_ANEMONE_2_ATTACK, @@ -550,7 +541,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -559,7 +549,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ACTORS_ANENOMELVL3_SBK, ANIM_ANENOMELVL3_BEND, NPC_INIT_DEFAULT, - NPC_SENSOR_ANEMONE_USER_CLOSE, + NPC_SENSOR_USER_CLOSE, NPC_MOVEMENT_STATIC_CYCLE_ANIM, NPC_MOVEMENT_MODIFIER_NONE, NPC_CLOSE_ANEMONE_3_ATTACK, @@ -574,7 +564,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -598,7 +587,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, ANIM_SKELETALFISH_DIE, ANIM_SKELETALFISH_GETHIT, - NPC_COLLISION_GENERIC, false, false, }, @@ -622,7 +610,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -646,7 +633,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -670,7 +656,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -694,7 +679,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -718,7 +702,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, ANIM_CATERPILLAR_DIE, ANIM_CATERPILLAR_GETHIT, - NPC_COLLISION_GENERIC, false, false, }, @@ -742,7 +725,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -766,7 +748,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -790,7 +771,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -799,7 +779,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ACTORS_HERMITCRAB_SBK, ANIM_HERMITCRAB_IDLE, NPC_INIT_HERMIT_CRAB, - NPC_SENSOR_HERMIT_CRAB_USER_CLOSE, + NPC_SENSOR_USER_CLOSE, NPC_MOVEMENT_FIXED_PATH_WALK, NPC_MOVEMENT_MODIFIER_NONE, NPC_CLOSE_HERMIT_CRAB_ATTACK, @@ -814,7 +794,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, ANIM_HERMITCRAB_DIE, ANIM_HERMITCRAB_GETHIT, - NPC_COLLISION_GENERIC, false, false, }, @@ -838,7 +817,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -862,7 +840,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -871,10 +848,10 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ACTORS_SPIDERCRAB_SBK, ANIM_SPIDERCRAB_IDLE, NPC_INIT_SPIDER_CRAB, - NPC_SENSOR_SPIDER_CRAB_USER_CLOSE, + NPC_SENSOR_USER_CLOSE, NPC_MOVEMENT_FIXED_PATH_WALK, NPC_MOVEMENT_MODIFIER_NONE, - NPC_CLOSE_SPIDER_CRAB_ATTACK, + NPC_CLOSE_NONE, NPC_TIMER_NONE, false, 3, @@ -886,7 +863,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, ANIM_SPIDERCRAB_DIE, ANIM_SPIDERCRAB_HIT, - NPC_COLLISION_SPIDER_CRAB_BITE, false, false, }, @@ -896,7 +872,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ANIM_SPIDERCRAB_IDLE, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, - NPC_MOVEMENT_SPIDER_CRAB_SPAWNER, + NPC_MOVEMENT_STATIC, NPC_MOVEMENT_MODIFIER_NONE, NPC_CLOSE_NONE, NPC_TIMER_NONE, @@ -910,7 +886,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_NONE, ANIM_SPIDERCRAB_DIE, ANIM_SPIDERCRAB_HIT, - NPC_COLLISION_GENERIC, false, false, }, @@ -934,7 +909,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -958,7 +932,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, ANIM_BABYOCTOPUS_DIE, ANIM_BABYOCTOPUS_HIT, - NPC_COLLISION_GENERIC, false, false, }, @@ -982,7 +955,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1006,7 +978,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1030,7 +1001,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1054,7 +1024,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1078,7 +1047,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1102,7 +1070,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, ANIM_SHARKMAN_DIE, ANIM_SHARKMAN_BLOCK, - NPC_COLLISION_GENERIC, false, false, }, @@ -1126,7 +1093,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1150,7 +1116,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1174,7 +1139,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1198,7 +1162,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1222,7 +1185,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1246,7 +1208,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, ANIM_FLYINGDUTCHMAN_GETHIT, - NPC_COLLISION_GENERIC, false, false, }, @@ -1270,7 +1231,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, ANIM_IRONDOGFISH_GETHIT, - NPC_COLLISION_GENERIC, false, false, }, @@ -1294,7 +1254,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, @@ -1318,7 +1277,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = NPC_SHOT_GENERIC, 0, 0, - NPC_COLLISION_GENERIC, false, false, }, diff --git a/source/enemy/nscrab.cpp b/source/enemy/nscrab.cpp index 07673989d..62eaaf1b8 100644 --- a/source/enemy/nscrab.cpp +++ b/source/enemy/nscrab.cpp @@ -15,6 +15,10 @@ #include "enemy\npc.h" #endif +#ifndef __ENEMY_NSCRAB_H__ +#include "enemy\nscrab.h" +#endif + #ifndef __GAME_GAME_H__ #include "game\game.h" #endif @@ -28,7 +32,61 @@ #endif -void CNpcEnemy::processCloseSpiderCrabAttack( int _frames ) +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +bool CNpcSpiderCrabEnemy::processSensor() +{ + switch( m_sensorFunc ) + { + case NPC_SENSOR_NONE: + return( false ); + + default: + { + if ( playerXDistSqr + playerYDistSqr < 10000 ) + { + // only attack if within path extents + + s32 minX, maxX; + m_npcPath.getPathXExtents( &minX, &maxX ); + + if ( playerXDist < 0 ) + { + m_extendDir = EXTEND_LEFT; + + if ( ( Pos.vx + playerXDist - 128 ) < minX ) + { + return( false ); + } + } + else + { + m_extendDir = EXTEND_RIGHT; + + if ( ( Pos.vx + playerXDist + 128 ) > maxX ) + { + return( false ); + } + } + + m_controlFunc = NPC_CONTROL_CLOSE; + m_extension = 0; + m_velocity = 5; + m_base = Pos; + + return( true ); + } + else + { + return( false ); + } + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcSpiderCrabEnemy::processClose( int _frames ) { s32 velocity; DVECTOR newPos = Pos; @@ -112,7 +170,9 @@ void CNpcEnemy::processCloseSpiderCrabAttack( int _frames ) } } -void CNpcEnemy::processSpiderCrabCollision() +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcSpiderCrabEnemy::processCollision() { if ( m_oldControlFunc == NPC_CONTROL_CLOSE ) { @@ -148,7 +208,9 @@ void CNpcEnemy::processSpiderCrabCollision() } } -void CNpcEnemy::processSpiderCrabInitJumpMovement( int _frames ) +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcSpiderCrabEnemy::processSpiderCrabInitJumpMovement( int _frames ) { s32 velocity; bool completed = false; @@ -189,44 +251,34 @@ void CNpcEnemy::processSpiderCrabInitJumpMovement( int _frames ) } } -void CNpcEnemy::processSpiderCrabSpawnerMovement( int _frames ) +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcSpiderCrabEnemy::processMovement(int _frames) { - if ( getNumChildren() < 3 ) + if ( _frames > 2 ) { - m_movementTimer -= _frames; + _frames = 2; + } - if ( m_movementTimer < 0 ) + s32 moveX = 0, moveY = 0; + s32 moveVel = 0; + s32 moveDist = 0; + + if ( m_movementFunc == NPC_MOVEMENT_SPIDER_CRAB_INITJUMP ) + { + processSpiderCrabInitJumpMovement( _frames ); + } + else + { + processGenericFixedPathWalk( _frames, &moveX, &moveY ); + + if ( !m_animPlaying ) { - m_movementTimer = 3 * GameState::getOneSecondInFrames(); - - CNpcEnemy *enemy; - enemy = new( "spider crab" ) CNpcEnemy; - ASSERT(enemy); - enemy->setType( CNpcEnemy::NPC_SPIDER_CRAB ); - enemy->init(); - enemy->setLayerCollision( m_layerCollision ); - enemy->setStartPos( Pos.vx >> 4, Pos.vy >> 4 ); - - CNpcWaypoint *sourceWaypoint = m_npcPath.getWaypointList(); - - if ( sourceWaypoint ) - { - // skip first waypoint - - sourceWaypoint = sourceWaypoint->nextWaypoint; - - while( sourceWaypoint ) - { - enemy->addWaypoint( sourceWaypoint->pos.vx >> 4, sourceWaypoint->pos.vy >> 4 ); - sourceWaypoint = sourceWaypoint->nextWaypoint; - } - } - - enemy->setPathType( m_npcPath.getPathType() ); - - enemy->postInit(); - - addChild( enemy ); + m_animPlaying = true; + m_animNo = m_data[m_type].moveAnim; + m_frame = 0; } } -} \ No newline at end of file + + processMovementModifier( _frames, moveX, moveY, moveVel, moveDist ); +} diff --git a/source/enemy/nsjfish.cpp b/source/enemy/nsjfish.cpp index 70a328bde..f0dc6db04 100644 --- a/source/enemy/nsjfish.cpp +++ b/source/enemy/nsjfish.cpp @@ -15,6 +15,14 @@ #include "enemy\npc.h" #endif +#ifndef __ENEMY_NSJFISH_H__ +#include "enemy\nsjfish.h" +#endif + +#ifndef __UTILS_HEADER__ +#include "utils\utils.h" +#endif + #ifndef __GAME_GAME_H__ #include "game\game.h" #endif @@ -23,94 +31,17 @@ #include "player\player.h" #endif - -void CNpcEnemy::processSmallJellyfishMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange ) +void CNpcSmallJellyfishEnemy::render() { - s32 newX, newY; - s32 preShiftX, preShiftY; - s16 headingVal; + CNpcEnemy::render(); - //u16 jellyfishData[5] = { 96, 192, 256, 192, 128, }; - u16 jellyfishData[6] = { 256, 192, 96, 48, 96, 128, }; - - u32 dataPoint; - - m_movementTimer += _frames; - - if ( m_movementTimer > GameState::getOneSecondInFrames() ) + if ( SprFrame ) { - m_movementTimer = 0; + setRGB0( SprFrame, 255, 128, 255 ); } - - dataPoint = 5 * m_movementTimer; - - if ( dataPoint != 0 ) - { - dataPoint /= GameState::getOneSecondInFrames(); - } - - m_frame = ( ( m_movementTimer * ( m_actorGfx->getFrameCount(m_animNo) - 1 ) << 8 ) ) / GameState::getOneSecondInFrames(); - - s32 resistance; - s32 absVelocity = abs( m_velocity ); - s32 reqVelocity = dist; - - resistance = _frames * NPC_JELLYFISH_RESISTANCE; - - if ( absVelocity < resistance ) - { - resistance = absVelocity; - } - - if ( absVelocity != 0 ) - { - resistance = -( resistance * m_velocity ) / absVelocity; - } - else - { - resistance = 0; - } - - m_velocity += resistance; - - headingVal = abs( headingChange ); - if ( headingVal > 128 ) - { - headingVal = 128; - } - - reqVelocity = dist * jellyfishData[dataPoint]; - reqVelocity >>= 8; - reqVelocity *= 128 + ( 128 - headingVal ); - reqVelocity >>= 8; - - s32 absReqVelocity = abs( reqVelocity ); - - if ( absReqVelocity > absVelocity ) - { - m_velocity += reqVelocity >> 1; - } - - preShiftX = ( m_velocity >> 8 ) * rcos( m_heading ); - preShiftY = ( m_velocity >> 8 ) * rsin( m_heading ); - - newX = preShiftX >> 12; - if ( !newX && preShiftX ) - { - newX = preShiftX / abs( preShiftX ); - } - - newY = preShiftY >> 12; - if ( !newY && preShiftY ) - { - newY = preShiftY / abs( preShiftY ); - } - - Pos.vx += newX; - Pos.vy += newY; } -void CNpcEnemy::processCloseSmallJellyfishEvade( int _frames ) +void CNpcSmallJellyfishEnemy::processClose( int _frames ) { s32 moveX = 0, moveY = 0; @@ -241,3 +172,113 @@ void CNpcEnemy::processCloseSmallJellyfishEvade( int _frames ) } } } + +bool CNpcSmallJellyfishEnemy::processSensor() +{ + switch( m_sensorFunc ) + { + case NPC_SENSOR_NONE: + return( false ); + + default: + { + if ( playerXDistSqr + playerYDistSqr < 5625 ) + { + m_controlFunc = NPC_CONTROL_CLOSE; + m_evadeClockwise = getRnd() % 2; + + return( true ); + } + else + { + return( false ); + } + } + } +} + +void CNpcSmallJellyfishEnemy::processMovementModifier( int _frames, s32 distX, s32 distY, s32 dist, s16 headingChange ) +{ + s32 newX, newY; + s32 preShiftX, preShiftY; + s16 headingVal; + + //u16 jellyfishData[5] = { 96, 192, 256, 192, 128, }; + u16 jellyfishData[6] = { 256, 192, 96, 48, 96, 128, }; + + u32 dataPoint; + + m_movementTimer += _frames; + + if ( m_movementTimer > GameState::getOneSecondInFrames() ) + { + m_movementTimer = 0; + } + + dataPoint = 5 * m_movementTimer; + + if ( dataPoint != 0 ) + { + dataPoint /= GameState::getOneSecondInFrames(); + } + + m_frame = ( ( m_movementTimer * ( m_actorGfx->getFrameCount(m_animNo) - 1 ) << 8 ) ) / GameState::getOneSecondInFrames(); + + s32 resistance; + s32 absVelocity = abs( m_velocity ); + s32 reqVelocity = dist; + + resistance = _frames * NPC_JELLYFISH_RESISTANCE; + + if ( absVelocity < resistance ) + { + resistance = absVelocity; + } + + if ( absVelocity != 0 ) + { + resistance = -( resistance * m_velocity ) / absVelocity; + } + else + { + resistance = 0; + } + + m_velocity += resistance; + + headingVal = abs( headingChange ); + if ( headingVal > 128 ) + { + headingVal = 128; + } + + reqVelocity = dist * jellyfishData[dataPoint]; + reqVelocity >>= 8; + reqVelocity *= 128 + ( 128 - headingVal ); + reqVelocity >>= 8; + + s32 absReqVelocity = abs( reqVelocity ); + + if ( absReqVelocity > absVelocity ) + { + m_velocity += reqVelocity >> 1; + } + + preShiftX = ( m_velocity >> 8 ) * rcos( m_heading ); + preShiftY = ( m_velocity >> 8 ) * rsin( m_heading ); + + newX = preShiftX >> 12; + if ( !newX && preShiftX ) + { + newX = preShiftX / abs( preShiftX ); + } + + newY = preShiftY >> 12; + if ( !newY && preShiftY ) + { + newY = preShiftY / abs( preShiftY ); + } + + Pos.vx += newX; + Pos.vy += newY; +} diff --git a/source/enemy/nsjfish.h b/source/enemy/nsjfish.h index 8de1cc266..b7597428c 100644 --- a/source/enemy/nsjfish.h +++ b/source/enemy/nsjfish.h @@ -1,6 +1,6 @@ /*========================================================================= - nsjfish.cpp + nsjfish.h Author: CRB Created: @@ -12,6 +12,7 @@ ===========================================================================*/ #ifndef __ENEMY_NSJFISH_H__ +#define __ENEMY_NSJFISH_H__ #ifndef __ENEMY_NPC_H__ #include "enemy\npc.h" @@ -20,6 +21,7 @@ class CNpcSmallJellyfishEnemy : public CNpcEnemy { public: + void render(); protected: virtual bool processSensor(); virtual void processClose( int _frames ); diff --git a/source/game/game.cpp b/source/game/game.cpp index 95ad57015..cc728a8ba 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -27,10 +27,26 @@ #include "enemy\npc.h" #endif +#ifndef __ENEMY_NSJFISH_H__ +#include "enemy\nsjfish.h" +#endif + +#ifndef __ENEMY_NHCRAB_H__ +#include "enemy\nhcrab.h" +#endif + +#ifndef __ENEMY_NSCRAB_H__ +#include "enemy\nscrab.h" +#endif + #ifndef __ENEMY_NGEN_H__ #include "enemy\ngen.h" #endif +#ifndef __ENEMY_NANEMONE_H__ +#include "enemy\nanemone.h" +#endif + #ifndef __ENEMY_NPLATFRM_H__ #include "enemy\nplatfrm.h" #endif @@ -309,51 +325,60 @@ void CGameScene::initLevel() case CActorPool::ACTOR_ENEMY_NPC: { CNpcEnemy *enemy; - enemy = new ("npc enemy") CNpcEnemy; - ASSERT(enemy); - enemy->setTypeFromMapEdit( actorList[actorNum]->Type ); - enemy->init(); - enemy->setLayerCollision( Level.getCollisionLayer() ); - u16 *PntList=(u16*)MakePtr(actorList[actorNum],sizeof(sThingActor)); + CNpcEnemy::NPC_UNIT_TYPE enemyType = CNpcEnemy::getTypeFromMapEdit( actorList[actorNum]->Type ); - u16 newXPos, newYPos; - - newXPos = (u16) *PntList; - PntList++; - newYPos = (u16) *PntList; - PntList++; - - enemy->setStartPos( newXPos, newYPos ); - enemy->addWaypoint( newXPos, newYPos ); - - if ( actorList[actorNum]->PointCount > 1 ) + switch( enemyType ) { - for ( pointNum = 1 ; pointNum < actorList[actorNum]->PointCount ; pointNum++ ) + case CNpcEnemy::NPC_SMALL_JELLYFISH_1: { - newXPos = (u16) *PntList; - PntList++; - newYPos = (u16) *PntList; - PntList++; + enemy = new ("small jellyfish") CNpcSmallJellyfishEnemy; + break; + } - enemy->addWaypoint( newXPos, newYPos ); + case CNpcEnemy::NPC_HERMIT_CRAB: + { + enemy = new ("hermit crab") CNpcHermitCrabEnemy; + break; + } - if ( pointNum == 1 ) - { - enemy->setHeading( newXPos, newYPos ); - } + case CNpcEnemy::NPC_SPIDER_CRAB: + { + enemy = new ("spider crab") CNpcSpiderCrabEnemy; + break; + } + + case CNpcEnemy::NPC_SPIDER_CRAB_SPAWNER: + { + enemy = new ("spider crab spawner") CNpcEnemyGenerator; + break; + } + + case CNpcEnemy::NPC_ANEMONE_1: + { + enemy = new ("anemone 1") CNpcAnemone1Enemy; + break; + } + + case CNpcEnemy::NPC_ANEMONE_2: + { + enemy = new ("anemone 2") CNpcAnemone2Enemy; + break; + } + + case CNpcEnemy::NPC_ANEMONE_3: + { + enemy = new ("anemone 3") CNpcAnemone3Enemy; + break; + } + + default: + { + enemy = new ("npc enemy") CNpcEnemy; + break; } } - enemy->postInit(); - - break; - } - - case CActorPool::ACTOR_ENEMY_GENERATOR_NPC: - { - CNpcEnemyGenerator *enemy; - enemy = new ("npc enemy generator") CNpcEnemyGenerator; ASSERT(enemy); enemy->setTypeFromMapEdit( actorList[actorNum]->Type ); enemy->init(); diff --git a/source/gfx/actor.cpp b/source/gfx/actor.cpp index 4ba38a324..845e82d20 100644 --- a/source/gfx/actor.cpp +++ b/source/gfx/actor.cpp @@ -58,7 +58,7 @@ CActorPool::ACTOR_TYPE CActorPool::actorType[39] = ACTOR_ENEMY_NPC, //Squiddart=35 ACTOR_ENEMY_NPC, //Stomper=36 ACTOR_ENEMY_NPC, //DustDevil=37 - ACTOR_ENEMY_GENERATOR_NPC, //SiderCrabSpawner=38 + ACTOR_ENEMY_NPC, //SiderCrabSpawner=38 }; /*****************************************************************************/ diff --git a/source/gfx/actor.h b/source/gfx/actor.h index 81a40b82a..1c43f5238 100644 --- a/source/gfx/actor.h +++ b/source/gfx/actor.h @@ -69,7 +69,6 @@ public: ACTOR_PLAYER = 0, ACTOR_FRIEND_NPC = 1, ACTOR_ENEMY_NPC, - ACTOR_ENEMY_GENERATOR_NPC, ACTOR_UNKNOWN, }; diff --git a/users/paul/spongebob project/spongebob project.dsp b/users/paul/spongebob project/spongebob project.dsp index 0ef76e60b..49f99b4c2 100644 --- a/users/paul/spongebob project/spongebob project.dsp +++ b/users/paul/spongebob project/spongebob project.dsp @@ -113,6 +113,10 @@ SOURCE=..\..\..\source\enemy\nanemone.cpp # End Source File # Begin Source File +SOURCE=..\..\..\source\enemy\nanemone.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\enemy\nbblob.cpp # End Source File # Begin Source File @@ -173,6 +177,10 @@ SOURCE=..\..\..\source\enemy\nhcrab.cpp # End Source File # Begin Source File +SOURCE=..\..\..\source\enemy\nhcrab.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\enemy\nmjfish.cpp # End Source File # Begin Source File @@ -217,6 +225,10 @@ SOURCE=..\..\..\source\enemy\nscrab.cpp # End Source File # Begin Source File +SOURCE=..\..\..\source\enemy\nscrab.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\enemy\nshrkman.cpp # End Source File # Begin Source File @@ -225,6 +237,10 @@ SOURCE=..\..\..\source\enemy\nsjfish.cpp # End Source File # Begin Source File +SOURCE=..\..\..\source\enemy\nsjfish.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\enemy\nsklfish.cpp # End Source File # Begin Source File