diff --git a/Graphics/levels/Chapter01/Level04/Level04.MEX b/Graphics/levels/Chapter01/Level04/Level04.MEX index f8a252dee..521aabe0d 100644 Binary files a/Graphics/levels/Chapter01/Level04/Level04.MEX and b/Graphics/levels/Chapter01/Level04/Level04.MEX differ diff --git a/Graphics/levels/Chapter01/Level04/level04.Mep b/Graphics/levels/Chapter01/Level04/level04.Mep index 63ca08ffe..16383ba66 100644 Binary files a/Graphics/levels/Chapter01/Level04/level04.Mep and b/Graphics/levels/Chapter01/Level04/level04.Mep differ diff --git a/makefile.gaz b/makefile.gaz index c3ae0590c..9c2961c40 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -310,6 +310,7 @@ system_src := main \ thing_src := thing triggers_src := trigger \ + tboss \ tcamlock \ tlevexit \ tlook \ diff --git a/source/game/game.cpp b/source/game/game.cpp index 14ccff7bf..1476be34d 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -164,6 +164,7 @@ int CGameScene::s_skipToNextLevel; #endif int CGameScene::s_restartLevel; int CGameScene::s_bossHasBeenKilled; +int CGameScene::s_justHitBossArenaTrigger; /*****************************************************************************/ @@ -242,8 +243,13 @@ void CGameScene::render() render_showing_lives(); break; case GAMESTATE_PLAYING: + case GAMESTATE_FADING_INTO_BOSS_INTRO: render_playing(); break; + case GAMESTATE_BOSS_INTRO: + case GAMESTATE_FADING_OUT_OF_BOSS_INTRO: + render_boss_intro(); + break; } } @@ -329,6 +335,34 @@ void CGameScene::render_playing() CActorPool::CleanUpCache(); } +/*****************************************************************************/ +void CGameScene::render_boss_intro() +{ + POLY_G4 *g4; + + // Black background + g4=GetPrimG4(); + setXYWH(g4,0,0,512,256); + setRGB0(g4,70,50,60); + setRGB1(g4,70,50,60); + setRGB2(g4,50,60,70); + setRGB3(g4,50,60,70); + AddPrimToList(g4,5); + + // Instructions.. + m_scalableFont->setColour(255,255,255); + m_scalableFont->setTrans(0); + m_scalableFont->setSMode(0); + m_scalableFont->setScale(300); + m_scalableFont->setJustification(FontBank::JUST_CENTRE); + m_scalableFont->print(256,30,"HOW TO BEAT THE BOSS..."); + + s_genericFont->setColour(255,255,255); + s_genericFont->setTrans(0); + s_genericFont->setSMode(0); + s_genericFont->print(256,70,"Blah\nBlah\nBlah"); +} + /*****************************************************************************/ void CGameScene::think(int _frames) { @@ -340,6 +374,23 @@ void CGameScene::think(int _frames) case GAMESTATE_PLAYING: think_playing(_frames); break; + case GAMESTATE_FADING_INTO_BOSS_INTRO: + if(!CFader::isFading()) + { + m_gamestate=GAMESTATE_BOSS_INTRO; + CFader::setFadingIn(); + } + break; + case GAMESTATE_BOSS_INTRO: + think_boss_intro(_frames); + break; + case GAMESTATE_FADING_OUT_OF_BOSS_INTRO: + if(!CFader::isFading()) + { + m_gamestate=GAMESTATE_PLAYING; + CFader::setFadingIn(); + } + break; } } @@ -381,6 +432,14 @@ void CGameScene::think_playing(int _frames) return; } + if(s_justHitBossArenaTrigger) + { + m_gamestate=GAMESTATE_FADING_INTO_BOSS_INTRO; + CFader::setFadingOut(); + s_justHitBossArenaTrigger=false; + } + + // Auto-timer stuff if(m_levelHasTimer) { @@ -512,6 +571,18 @@ void CGameScene::think_playing(int _frames) } } + +/*****************************************************************************/ +void CGameScene::think_boss_intro(int _frames) +{ + if(PadGetDown(0)&PAD_CROSS) + { + m_gamestate=GAMESTATE_FADING_OUT_OF_BOSS_INTRO; + CFader::setFadingOut(); + } +} + + /*****************************************************************************/ int CGameScene::readyToShutdown() { @@ -564,6 +635,11 @@ void CGameScene::setReadyToExit() CFader::setFadingOut(); } +/*****************************************************************************/ +void CGameScene::hitBossArenaTrigger() +{ + s_justHitBossArenaTrigger=true; +} /*****************************************************************************/ void CGameScene::initLevel() @@ -592,6 +668,7 @@ void CGameScene::initLevel() m_player->setCameraBox(camBox); s_bossHasBeenKilled=false; + s_justHitBossArenaTrigger=false; if(getLevelNumber()==5&&getChapterNumber()==2) { diff --git a/source/game/game.h b/source/game/game.h index f36200dde..89d785dcb 100644 --- a/source/game/game.h +++ b/source/game/game.h @@ -50,10 +50,14 @@ virtual int canPause(); void sendEvent( GAME_EVENT evt, class CThing *sourceThing ); static void setReadyToExit(); +static void hitBossArenaTrigger(); + static void levelFinished() {s_levelFinished=true;} static void restartlevel() {s_restartLevel=true;} CLevel &GetLevel() {return(Level);} + + // static MATRIX &GetCamMtx() {return(CamMtx);} static ACTOR_TYPE getActorType( int actorNum ) {return actorType[actorNum];} @@ -68,6 +72,9 @@ private: { GAMESTATE_SHOWING_LIVES, GAMESTATE_PLAYING, + GAMESTATE_FADING_INTO_BOSS_INTRO, + GAMESTATE_BOSS_INTRO, + GAMESTATE_FADING_OUT_OF_BOSS_INTRO, }GAMESTATE; enum @@ -78,11 +85,14 @@ private: GAMESTATE m_gamestate; int m_showingLivesTimer; + static int s_justHitBossArenaTrigger; void think_showing_lives(int _frames); void think_playing(int _frames); + void think_boss_intro(int _frames); void render_showing_lives(); void render_playing(); + void render_boss_intro(); protected: diff --git a/source/triggers/tboss.cpp b/source/triggers/tboss.cpp index 9703148fd..441c50da5 100644 --- a/source/triggers/tboss.cpp +++ b/source/triggers/tboss.cpp @@ -58,6 +58,9 @@ void CBossArenaTrigger::collidedWith(CThing *_thisThing) { case TYPE_PLAYER: { + CGameScene::hitBossArenaTrigger(); + shutdown(); + delete this; break; } diff --git a/source/triggers/trigger.cpp b/source/triggers/trigger.cpp index 78ccfc4a8..12671f78c 100644 --- a/source/triggers/trigger.cpp +++ b/source/triggers/trigger.cpp @@ -151,6 +151,10 @@ #include "triggers\toilgeyser.h" #endif +#ifndef __TRIGGERS_TBOSS_H__ +#include "triggers\tboss.h" +#endif + #ifndef __GAME_GAME_H__ #include "game\game.h" #endif @@ -334,7 +338,10 @@ CTrigger *trigger; case TRIGGER_OIL_GEYSER: trigger = (COilGeyserTrigger*)new("OilGeyserTrigger") COilGeyserTrigger(); break; - + // Boss Arena + case TRIGGER_BOSS_ARENA: + trigger = (COilGeyserTrigger*)new("BossArenaTrigger") CBossArenaTrigger(); + break; default: trigger=NULL; } diff --git a/source/triggers/trigger.h b/source/triggers/trigger.h index ccb3b7ce1..2ab9f0ac5 100644 --- a/source/triggers/trigger.h +++ b/source/triggers/trigger.h @@ -56,6 +56,7 @@ enum TRIGGER_TYPE TRIGGER_WIND_LEFT, TRIGGER_WIND_RIGHT, TRIGGER_OIL_GEYSER, + TRIGGER_BOSS_ARENA, // Code based triggers TRIGGER_PLATFORM, diff --git a/tools/Data/bin/MkLevel.ini b/tools/Data/bin/MkLevel.ini index 3dbde496d..4df4a203c 100644 --- a/tools/Data/bin/MkLevel.ini +++ b/tools/Data/bin/MkLevel.ini @@ -162,6 +162,7 @@ WindDown=29 WindLeft=30 WindRight=31 OilGeyser=32 +BossArena=33 ################################################ # FX diff --git a/tools/MapEdit/trigger.ini b/tools/MapEdit/trigger.ini index 8620373e0..e14ca0c15 100644 --- a/tools/MapEdit/trigger.ini +++ b/tools/MapEdit/trigger.ini @@ -71,4 +71,6 @@ HasBox=1 [WindRight] -[OilGeyser] \ No newline at end of file +[OilGeyser] + +[BossArena] diff --git a/users/paul/spongebob project/spongebob project.dsp b/users/paul/spongebob project/spongebob project.dsp index bea11a3bf..3b031bf4c 100644 --- a/users/paul/spongebob project/spongebob project.dsp +++ b/users/paul/spongebob project/spongebob project.dsp @@ -2205,6 +2205,14 @@ SOURCE=..\..\..\source\triggers\tbgeyser.h # End Source File # Begin Source File +SOURCE=..\..\..\source\triggers\tboss.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\source\triggers\tboss.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\triggers\tcamlock.cpp # End Source File # Begin Source File