From 6961688ccddd2f95e27b9eb860f1e09283822f91 Mon Sep 17 00:00:00 2001 From: Charles Date: Mon, 30 Apr 2001 18:55:38 +0000 Subject: [PATCH] --- makefile.gaz | 3 +- source/enemy/npc.cpp | 57 ++++++- source/enemy/npc.h | 12 +- source/enemy/npcdata.cpp | 143 +++++------------- source/projectl/projectl.cpp | 10 ++ source/projectl/projectl.h | 2 +- .../spongebob project/spongebob project.dsp | 8 + 7 files changed, 121 insertions(+), 114 deletions(-) diff --git a/makefile.gaz b/makefile.gaz index f72481c51..287483ede 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -108,7 +108,8 @@ hazard_src := hazard \ hbarrel \ hboat -projectl_src := projectl +projectl_src := projectl \ + prnpc fileio_src := fileio \ $($(FILE_SYSTEM)_FILESYS_SRC) diff --git a/source/enemy/npc.cpp b/source/enemy/npc.cpp index 4f5a2aa16..960d6801c 100644 --- a/source/enemy/npc.cpp +++ b/source/enemy/npc.cpp @@ -51,6 +51,10 @@ #include "projectl\projectl.h" #endif +#ifndef __PROJECTL_PRNPC_H__ +#include "projectl\prnpc.h" +#endif + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __ENEMY_NSJFISH_H__ @@ -700,6 +704,8 @@ void CNpcEnemy::setToShutdown() //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +bool gitTrigger = false; + int CNpcEnemy::getFrameCount() { return( m_actorGfx->getFrameCount( m_animNo ) ); @@ -799,6 +805,11 @@ void CNpcEnemy::think(int _frames) { processTimer( moveFrames ); } + + if ( gitTrigger ) + { + fireAsProjectile( 0 ); + } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1441,7 +1452,7 @@ void CNpcEnemy::processEnemyCollision( CThing *thisThing ) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -void CNpcEnemy::processCoralBlowerMovement( int _frames, s32 xDist, s32 yDist ) +bool CNpcEnemy::processCoralBlowerMovement( int _frames, s32 xDist, s32 yDist ) { s32 moveX, moveY; s16 headingToTarget; @@ -1503,6 +1514,22 @@ void CNpcEnemy::processCoralBlowerMovement( int _frames, s32 xDist, s32 yDist ) Pos.vx += moveX; Pos.vy += moveY; + + if ( moveX || moveY ) + { + return( false ); + } + else + { + return( true ); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +bool CNpcEnemy::canBeSuckedUp() +{ + return( m_data[m_type].canBeSuckedUp ); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1512,6 +1539,8 @@ bool CNpcEnemy::suckUp( DVECTOR *suckPos, int _frames ) m_isCaught = true; m_isBlowerOn = true; + bool returnVal = false; + switch( m_state ) { case NPC_CORAL_BLOWER_SUCK: @@ -1521,7 +1550,7 @@ bool CNpcEnemy::suckUp( DVECTOR *suckPos, int _frames ) s32 targetXDist = suckPos->vx - Pos.vx; s32 targetYDist = suckPos->vy - Pos.vy; - processCoralBlowerMovement( _frames, targetXDist, targetYDist ); + returnVal = processCoralBlowerMovement( _frames, targetXDist, targetYDist ); break; } @@ -1543,7 +1572,7 @@ bool CNpcEnemy::suckUp( DVECTOR *suckPos, int _frames ) } } - return( false ); + return( returnVal ); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1594,3 +1623,25 @@ void CNpcEnemy::processCoralBlower( int _frames ) m_isBlowerOn = false; } + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CNpcEnemy::fireAsProjectile( s16 heading ) +{ + m_isActive = false; + setToShutdown(); + + DVECTOR newPos = Pos; + + newPos.vy -= 10; + + CEnemyAsProjectile *projectile; + projectile = new( "blower projectile" ) CEnemyAsProjectile; + projectile->init( newPos, + heading, + CPlayerProjectile::PLAYER_PROJECTILE_DUMBFIRE, + CPlayerProjectile::PLAYER_PROJECTILE_FINITE_LIFE, + 5*60); + projectile->setLayerCollision( m_layerCollision ); + projectile->setGraphic( m_actorGfx ); +} \ No newline at end of file diff --git a/source/enemy/npc.h b/source/enemy/npc.h index c84f190fa..d443290eb 100644 --- a/source/enemy/npc.h +++ b/source/enemy/npc.h @@ -116,7 +116,10 @@ public: void setToShutdown(); u8 isSetToShutdown() {return( m_isShuttingDown );} + + bool canBeSuckedUp(); bool suckUp( DVECTOR *suckPos, int _frames ); + void fireAsProjectile( s16 heading ); protected: class CLayerCollision *m_layerCollision; @@ -212,7 +215,7 @@ protected: NPC_MOVEMENT_FUNC movementFunc; NPC_CLOSE_FUNC closeFunc; NPC_TIMER_FUNC timerFunc; - bool canTalk; + u8 canTalk; u8 speed; u16 turnSpeed; DETECT_TYPE detectCollision; @@ -222,8 +225,9 @@ protected: NPC_SHOT_FUNC shotFunc; u16 dieAnim; u16 recoilAnim; - bool canBeNetted; - bool respawning; + u8 canBeNetted; + u8 respawning; + u8 canBeSuckedUp; } NPC_DATA; @@ -250,7 +254,7 @@ protected: void reinit(); void processCoralBlower( int _frames ); - void processCoralBlowerMovement( int _frames, s32 xDist, s32 yDist ); + bool processCoralBlowerMovement( int _frames, s32 xDist, s32 yDist ); // data diff --git a/source/enemy/npcdata.cpp b/source/enemy/npcdata.cpp index 055481c95..ac8988106 100644 --- a/source/enemy/npcdata.cpp +++ b/source/enemy/npcdata.cpp @@ -110,48 +110,6 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = { - /*{ // NPC_FALLING_ITEM - ACTORS_CLAM_SBK, - ANIM_CLAM_SIDESNAP, - NPC_SENSOR_USER_CLOSE, - NPC_MOVEMENT_STATIC, - NPC_CLOSE_NONE, - NPC_TIMER_NONE, - false, - 8, - 128, - DETECT_NO_COLLISION, - DAMAGE__SQUASH_ENEMY, - 0, - 0, - NPC_SHOT_GENERIC, - 0, - 0, - false, - false, - }, - - { // NPC_FISH_HOOK - ACTORS_CLAM_SBK, - ANIM_CLAM_SIDESNAP, - NPC_SENSOR_NONE, - NPC_MOVEMENT_STATIC, - NPC_CLOSE_NONE, - NPC_TIMER_NONE, - false, - 3, - 128, - DETECT_NO_COLLISION, - DAMAGE__NONE, - 0, - 0, - NPC_SHOT_GENERIC, - 0, - 0, - false, - false, - },*/ - { // NPC_DUST_DEVIL ACTORS_DUSTDEVIL_SBK, ANIM_DUSTDEVIL_TWIST, @@ -171,71 +129,9 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, - /*{ // NPC_PENDULUM - ACTORS_CLAM_SBK, - ANIM_CLAM_SIDESNAP, - NPC_SENSOR_NONE, - NPC_MOVEMENT_STATIC, - NPC_CLOSE_NONE, - NPC_TIMER_NONE, - false, - 3, - 2048, - DETECT_NO_COLLISION, - DAMAGE__HIT_ENEMY, - 0, - 0, - NPC_SHOT_GENERIC, - 0, - 0, - false, - false, - },*/ - - /*{ // NPC_FIREBALL - ACTORS_CLAM_SBK, - ANIM_CLAM_SIDESNAP, - NPC_SENSOR_NONE, - NPC_MOVEMENT_STATIC, - NPC_CLOSE_NONE, - NPC_TIMER_NONE, - false, - 40, - 2048, - DETECT_NO_COLLISION, - DAMAGE__BURN_ENEMY, - 0, - 0, - NPC_SHOT_GENERIC, - 0, - 0, - false, - false, - },*/ - - /*{ // NPC_SAW_BLADE - ACTORS_CLAM_SBK, - ANIM_CLAM_SIDESNAP, - NPC_SENSOR_NONE, - NPC_MOVEMENT_STATIC, - NPC_CLOSE_NONE, - NPC_TIMER_NONE, - false, - 3, - 2048, - DETECT_NO_COLLISION, - DAMAGE__HIT_ENEMY, - 0, - 0, - NPC_SHOT_GENERIC, - 0, - 0, - false, - false, - },*/ - { // NPC_SMALL_JELLYFISH_1 0,//ACTORS_JELLYFISH1_SBK, FRM_JELLYFISH1_SWIM1, @@ -255,6 +151,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = FRM_JELLYFISH1_SWIM1, true, true, + true, }, { // NPC_SMALL_JELLYFISH_2 @@ -276,6 +173,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, true, + true, }, { // NPC_ANEMONE_1 @@ -297,6 +195,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_ANEMONE_2 @@ -318,6 +217,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_ANEMONE_3 @@ -339,6 +239,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_SKELETAL_FISH @@ -360,6 +261,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ANIM_SKELETALFISH_GETHIT, false, false, + false, }, { // NPC_CLAM_JUMP @@ -381,6 +283,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_CLAM_STATIC @@ -402,6 +305,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_SQUID_DART @@ -423,6 +327,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + true, }, { // NPC_FISH_FOLK @@ -444,6 +349,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_PRICKLY_BUG @@ -465,6 +371,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ANIM_CATERPILLAR_GETHIT, false, false, + true, }, { // NPC_SEA_SNAKE @@ -486,6 +393,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_PUFFA_FISH @@ -507,6 +415,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_ANGLER_FISH @@ -528,6 +437,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_HERMIT_CRAB @@ -549,6 +459,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ANIM_HERMITCRAB_DIE, false, false, + true, }, { // NPC_MINE @@ -570,6 +481,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_BOOGER_MONSTER @@ -591,6 +503,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_SPIDER_CRAB @@ -612,6 +525,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ANIM_SPIDERCRAB_HIT, false, false, + true, }, { // NPC_SPIDER_CRAB_SPAWNER @@ -633,6 +547,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ANIM_SPIDERCRAB_HIT, false, false, + false, }, { // NPC_EYEBALL @@ -654,6 +569,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_BABY_OCTOPUS @@ -675,6 +591,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ANIM_BABYOCTOPUS_HIT, false, false, + true, }, { // NPC_ZOMBIE_FISH_FOLK @@ -696,6 +613,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_NINJA_STARFISH @@ -717,6 +635,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + true, }, { // NPC_GHOST @@ -738,6 +657,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_GHOST_PIRATE @@ -759,6 +679,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_FLAMING_SKULL @@ -780,6 +701,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_SHARK_MAN @@ -801,6 +723,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ANIM_SHARKMAN_BLOCK, false, false, + false, }, { // NPC_OIL_BLOB @@ -822,6 +745,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_SKULL_STOMPER @@ -843,6 +767,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_MOTHER_JELLYFISH @@ -864,6 +789,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_SUB_SHARK @@ -885,6 +811,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_PARASITIC_WORM @@ -906,6 +833,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_FLYING_DUTCHMAN @@ -927,6 +855,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ANIM_FLYINGDUTCHMAN_GETHIT, false, false, + false, }, { // NPC_IRON_DOGFISH @@ -948,6 +877,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = ANIM_IRONDOGFISH_GETHIT, false, false, + false, }, { // NPC_PARASITIC_WORM_SEGMENT @@ -969,6 +899,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_BALL_BLOB @@ -990,6 +921,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + false, }, { // NPC_SHELL @@ -1011,6 +943,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = 0, false, false, + true, }, }; diff --git a/source/projectl/projectl.cpp b/source/projectl/projectl.cpp index 1d29b4863..a9f3ed5f1 100644 --- a/source/projectl/projectl.cpp +++ b/source/projectl/projectl.cpp @@ -227,6 +227,11 @@ void CProjectile::setLifeTime( PROJECTILE_LIFETIME_TYPE lifeType ) void CProjectile::think(int _frames) { + if ( _frames > 2 ) + { + _frames = 2; + } + CEnemyProjectileThing::think( _frames ); switch( m_movementType ) @@ -469,6 +474,11 @@ void CPlayerProjectile::setLifeTime( PLAYER_PROJECTILE_LIFETIME_TYPE lifeType ) void CPlayerProjectile::think(int _frames) { + if ( _frames > 2 ) + { + _frames = 2; + } + CPlayerProjectileThing::think( _frames ); m_frame += _frames; diff --git a/source/projectl/projectl.h b/source/projectl/projectl.h index 485d159e2..a9181bf07 100644 --- a/source/projectl/projectl.h +++ b/source/projectl/projectl.h @@ -103,7 +103,7 @@ public: void shutdown(); void setToShutdown(); u8 isSetToShutdown() {return( m_isShuttingDown );} - void think(int _frames); + virtual void think(int _frames); virtual void render(); void processEvent( GAME_EVENT evt, CThing *sourceThing ); void setMovementType( PLAYER_PROJECTILE_MOVEMENT_TYPE moveType ); diff --git a/users/paul/spongebob project/spongebob project.dsp b/users/paul/spongebob project/spongebob project.dsp index c74eb2727..ace38cdf6 100644 --- a/users/paul/spongebob project/spongebob project.dsp +++ b/users/paul/spongebob project/spongebob project.dsp @@ -1077,6 +1077,14 @@ SOURCE=..\..\..\source\player\player.h # PROP Default_Filter "" # Begin Source File +SOURCE=..\..\..\source\projectl\prnpc.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\source\projectl\prnpc.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\projectl\projectl.cpp # End Source File # Begin Source File