diff --git a/makefile.gaz b/makefile.gaz index 3aa6da115..23e3b7457 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -81,7 +81,8 @@ enemy_src := npc \ ndustdev \ npbug \ nprojjf \ - nmjback + nmjback \ + nsjback friend_src := friend \ fdata \ @@ -181,6 +182,8 @@ gui_src := gbubbles \ gtextbox \ gui +jellfish_src := jellfish + level_src := level \ layertile \ layerback \ diff --git a/source/enemy/npc.cpp b/source/enemy/npc.cpp index 80d99fc89..1dcd1e3aa 100644 --- a/source/enemy/npc.cpp +++ b/source/enemy/npc.cpp @@ -913,7 +913,7 @@ void CNpcEnemy::collidedWith( CThing *_thisThing ) { CNpcEnemy *enemy = (CNpcEnemy *) _thisThing; - if ( enemy->canCollideWithEnemy() ) + if ( canCollideWithEnemy() && enemy->canCollideWithEnemy() ) { processEnemyCollision( _thisThing ); } diff --git a/source/enemy/npc.h b/source/enemy/npc.h index ea301a9db..a25355080 100644 --- a/source/enemy/npc.h +++ b/source/enemy/npc.h @@ -82,6 +82,7 @@ public: NPC_SHELL, NPC_PROJECTILE_JELLYFISH, NPC_MOTHER_JELLYFISH_BACKGROUND, + NPC_SMALL_JELLYFISH_BACKGROUND, NPC_UNIT_TYPE_MAX, }; @@ -225,6 +226,7 @@ protected: u8 canBeNetted; u8 respawning; u8 canBeSuckedUp; + u8 canCollideWithEnemy; } NPC_DATA; diff --git a/source/enemy/npcdata.cpp b/source/enemy/npcdata.cpp index 7676e9021..a644438b6 100644 --- a/source/enemy/npcdata.cpp +++ b/source/enemy/npcdata.cpp @@ -134,6 +134,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_SMALL_JELLYFISH_1 @@ -156,6 +157,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, true, false, + false, }, { // NPC_SMALL_JELLYFISH_2 @@ -178,6 +180,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, true, false, + false, }, { // NPC_ANEMONE_1 @@ -200,6 +203,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_ANEMONE_2 @@ -222,6 +226,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_ANEMONE_3 @@ -244,6 +249,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_SKELETAL_FISH @@ -266,6 +272,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_CLAM_JUMP @@ -288,6 +295,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_CLAM_STATIC @@ -310,6 +318,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_SQUID_DART @@ -332,6 +341,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_FISH_FOLK @@ -354,6 +364,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_PRICKLY_BUG @@ -376,6 +387,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_SEA_SNAKE @@ -398,6 +410,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_PUFFA_FISH @@ -420,6 +433,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_ANGLER_FISH @@ -442,6 +456,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_HERMIT_CRAB @@ -464,6 +479,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_MINE @@ -486,6 +502,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_BOOGER_MONSTER @@ -508,6 +525,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_SPIDER_CRAB @@ -530,6 +548,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_SPIDER_CRAB_SPAWNER @@ -552,6 +571,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_EYEBALL @@ -574,6 +594,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_BABY_OCTOPUS @@ -596,6 +617,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_ZOMBIE_FISH_FOLK @@ -618,6 +640,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_NINJA_STARFISH @@ -640,6 +663,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_GHOST @@ -662,6 +686,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_GHOST_PIRATE @@ -684,6 +709,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_FLAMING_SKULL @@ -706,6 +732,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_SHARK_MAN @@ -728,6 +755,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_OIL_BLOB @@ -750,6 +778,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_SKULL_STOMPER @@ -772,6 +801,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_MOTHER_JELLYFISH @@ -794,6 +824,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_SUB_SHARK @@ -816,6 +847,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_PARASITIC_WORM @@ -838,6 +870,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_FLYING_DUTCHMAN @@ -860,6 +893,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_IRON_DOGFISH @@ -882,6 +916,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_PARASITIC_WORM_SEGMENT @@ -904,6 +939,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, }, { // NPC_BALL_BLOB @@ -926,6 +962,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + true, }, { // NPC_SHELL @@ -948,6 +985,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, true, true, + false, }, { // NPC_PROJECTILE_JELLYFISH @@ -970,9 +1008,10 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = true, true, false, + false, }, - { // NPC_SMALL_JELLYFISH_1 + { // NPC_MOTHER_JELLYFISH_BACKGROUND ACTORS_MOTHERJELLYFISH_SBK, ANIM_CLAM_SIDESNAP, NPC_SENSOR_NONE, @@ -992,6 +1031,30 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = false, false, false, + false, + }, + + { // NPC_SMALL_JELLYFISH_BACKGROUND + 0,//ACTORS_JELLYFISH1_SBK, + FRM_JELLYFISH1_SWIM1, + NPC_SENSOR_USER_CLOSE, + NPC_MOVEMENT_FIXED_PATH, + NPC_CLOSE_NONE, + NPC_TIMER_NONE, + false, + 2, + 128, + DETECT_ALL_COLLISION, + DAMAGE__SHOCK_ENEMY, + 16, + FRM_JELLYFISH1_SWIM1, + NPC_SHOT_GENERIC, + 0, + FRM_JELLYFISH1_SWIM1, + true, + false, + false, + false, }, }; diff --git a/source/enemy/nsjfish.h b/source/enemy/nsjfish.h index 8d22f1e93..541a1bb2d 100644 --- a/source/enemy/nsjfish.h +++ b/source/enemy/nsjfish.h @@ -25,7 +25,7 @@ class CNpcSmallJellyfishEnemy : public CNpcEnemy { public: - void render(); + virtual void render(); virtual int getFrameCount() {return( FRM_JELLYFISH1_SWIM6 - FRM_JELLYFISH1_SWIM1 + 1 );} virtual u8 canCollideWithEnemy() {return( false );} protected: diff --git a/source/game/game.cpp b/source/game/game.cpp index d117fe790..cae055b25 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -43,6 +43,10 @@ #include "projectl\projectl.h" #endif +#ifndef __JELLFISH_JELLFISH_H__ +#include "jellfish\jellfish.h" +#endif + #ifndef __GFX_FADER_H__ #include "gfx\fader.h" #endif @@ -249,6 +253,7 @@ void CGameScene::think(int _frames) if(!CConversation::isActive()&& !m_pauseMenu->isActive()) { DVECTOR camPos; + CJellyfishGenerator::think( _frames, &Level ); /* if (!s_levelFinished) */CThingManager::thinkAllThings(_frames); /* if (!s_levelFinished) */camPos=m_player->getCameraPos(); /* if (!s_levelFinished) */CBubicleFactory::setMapOffset(&camPos); diff --git a/source/level/level.cpp b/source/level/level.cpp index da1f386c0..21ae83b81 100644 --- a/source/level/level.cpp +++ b/source/level/level.cpp @@ -77,6 +77,10 @@ #include "projectl\projectl.h" #endif +#ifndef __JELLFISH_JELLFISH_H__ +#include "jellfish\jellfish.h" +#endif + #ifndef __GAME_GAMESLOT_H__ #include "game\gameslot.h" #endif @@ -525,6 +529,10 @@ void CLevel::initThings(int _respawningLevel) hazard->setLayerCollision( getCollisionLayer() ); } } + + // initialise jellyfish generator + + CJellyfishGenerator::init(); } diff --git a/users/paul/spongebob project/spongebob project.dsp b/users/paul/spongebob project/spongebob project.dsp index fe7135894..45b308440 100644 --- a/users/paul/spongebob project/spongebob project.dsp +++ b/users/paul/spongebob project/spongebob project.dsp @@ -329,6 +329,14 @@ SOURCE=..\..\..\source\enemy\nshrkman.h # End Source File # Begin Source File +SOURCE=..\..\..\source\enemy\nsjback.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\source\enemy\nsjback.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\enemy\nsjfish.cpp # End Source File # Begin Source File @@ -1868,6 +1876,18 @@ SOURCE=..\..\..\source\fx\fxjfish.cpp SOURCE=..\..\..\source\fx\fxjfish.h # End Source File # End Group +# Begin Group "jellfish" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\source\jellfish\jellfish.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\source\jellfish\jellfish.h +# End Source File +# End Group # End Group # Begin Group "makefiles"