diff --git a/data/DataCache.scr b/data/DataCache.scr index aad7923d1..5be04ec27 100644 --- a/data/DataCache.scr +++ b/data/DataCache.scr @@ -48,6 +48,8 @@ scripts/fma_ch6_01.dat scripts/fma_ch6_02.dat scripts/fma_ch6_03.dat +scripts/fma_party.dat + scripts/fma_plankton.dat scripts/c1l1_celebrate.dat diff --git a/data/Scripts/fma_party.scr b/data/Scripts/fma_party.scr index 1922eb051..5645adf7a 100644 --- a/data/Scripts/fma_party.scr +++ b/data/Scripts/fma_party.scr @@ -1,12 +1,11 @@ #include data/scripts/defs/defs.scr #include data/scripts/defs/charanim.scr -#include data/scripts/defs/items.scr #include data/scripts/defs/response.scr #include data/scripts/defs/trans.scr -_setText(CHAR_JACKCUSTARD,STR__INGAME__FMA_C1_INTRO0); +_setText(CHAR_SPONGEBOB,STR__INGAME__FMA_PARTY_SB0); _setResponseOptions(QUESTION_OK); do { @@ -14,7 +13,23 @@ do } while(_getResponse()==ANSWER_NONE); -_setText(CHAR_JACKCUSTARD,STR__INGAME__FMA_C1_INTRO1); +_setText(CHAR_PATRICK,STR__INGAME__FMA_PARTY_PAT0); +_setResponseOptions(QUESTION_OK); +do +{ + pause; +} +while(_getResponse()==ANSWER_NONE); + +_setText(CHAR_JACKCUSTARD,STR__INGAME__FMA_PARTY_VO0); +_setResponseOptions(QUESTION_OK); +do +{ + pause; +} +while(_getResponse()==ANSWER_NONE); + +_setText(CHAR_JACKCUSTARD,STR__INGAME__FMA_PARTY_ALL); _setResponseOptions(QUESTION_OK); do { diff --git a/data/translations/text.dat b/data/translations/text.dat index a3a2881ee..f97a564a1 100644 --- a/data/translations/text.dat +++ b/data/translations/text.dat @@ -282,11 +282,24 @@ eng=SpongeBob SqaurePants!!! Wait until I get my hands on that porous Freak!!!! [STR__INGAME__FMA_PLANKTON] eng=Blast you SpongeBreath, you have found my secret time machine! Whatever you do make sure you fill it up before you bring it back!!!! + ; --------------------------------------------------------------- -[STR__INGAME__GENERIC__CHECK1] -eng=Did that make sense..? +; End party FMA +[STR__INGAME__FMA_PARTY_SB0] +eng=Happy Birthday Patrick from all your friends in Bikini Bottom! +[STR__INGAME__FMA_PARTY_PAT0] +eng=Today’s my birthday? Hmm. I thought I was born a long time ago in a hospital. Thanks for the signed photo of my favorite superheroes anyhow. This the best birthday ever!! +[STR__INGAME__FMA_PARTY_VO0] +eng=Stand Still while I take your picture +[STR__INGAME__FMA_PARTY_ALL] +eng=Happy Birthday! + + +; --------------------------------------------------------------- +; Ingame conversations +; --------------------------------------------------------------- Chapter 1 - Level 1 - 01 [STR__INGAME__CH1__L1__SPONGEY1] eng=Hi Squidward !!! Ready for another great day together, friend? diff --git a/makefile.gfx b/makefile.gfx index c70f4baaf..3e27187e7 100644 --- a/makefile.gfx +++ b/makefile.gfx @@ -605,7 +605,7 @@ SCRIPTS_LIST := ch1l1_01 ch1l1_02 ch1l2_01 ch1l2_02 ch1l2_03 ch1l4_01 ch1l4_02 fma_ch4_00 fma_ch4_01 fma_ch4_02 \ fma_ch5_00 fma_ch5_01 fma_ch5_02 \ fma_ch6_00 fma_ch6_01 fma_ch6_02 fma_ch6_03 \ - fma_plankton \ + fma_plankton fma_party \ c1l1_celebrate c1l2_celebrate c1l3_celebrate c1l4_celebrate \ c2l1_celebrate c2l2_celebrate c2l3_celebrate c2l4_celebrate \ c3l1_celebrate c3l2_celebrate c3l3_celebrate c3l4_celebrate \ diff --git a/source/backend/party.cpp b/source/backend/party.cpp index 0f06dece4..d443d3b01 100644 --- a/source/backend/party.cpp +++ b/source/backend/party.cpp @@ -18,26 +18,10 @@ #include "backend\party.h" -#ifndef __PAD_PADS_H__ -#include "pad\pads.h" -#endif - -#ifndef __GAME_GAME_H__ -#include "game\game.h" -#endif - #ifndef __GAME_GAMESLOT_H__ #include "game\gameslot.h" #endif -#ifndef __FRONTEND_FRONTEND_H__ -#include "frontend\frontend.h" -#endif - -#ifndef __GFX_FADER_H__ -#include "gfx\fader.h" -#endif - #ifndef _FILEIO_HEADER_ #include "fileio\fileio.h" #endif @@ -54,14 +38,6 @@ #include "gfx\sprbank.h" #endif -#ifndef __ACTOR_HEADER__ -#include "gfx\actor.h" -#endif - -#ifndef __BACKEND_CREDITS_H__ -#include "backend\credits.h" -#endif - #ifndef __MATHTABLE_HEADER__ #include "utils\mathtab.h" #endif @@ -104,10 +80,8 @@ static int s_leftBobSin,s_leftBob,s_rightBobSin,s_rightBob; -CPartyScene PartyScene; - -CActorGfx *m_actorSpongebob; -CActorGfx *m_actorPatrick; +//CActorGfx *m_actorSpongebob; +//CActorGfx *m_actorPatrick; /*---------------------------------------------------------------------- @@ -122,29 +96,12 @@ void CPartyScene::init() ASSERT(m_image); SetScreenImage((u8*)m_image); -// m_font=new ("game over font") ScalableFontBank(); -// m_font->initialise(&standardFont); -// m_font->setJustification(ScalableFontBank::JUST_CENTRE); -// m_font->setOt(5); - m_sprites=new ("Party sprites") SpriteBank(); m_sprites->load(PARTY_PARTY_SPR); - m_readyToExit=false; - CFader::setFadingIn(); - - CActorPool::Reset(); - m_actorSpongebob=CActorPool::GetActor(ACTORS_SPONGEBOB_SBK); - m_actorSpongebob->SetOtPos(5); - m_actorPatrick=CActorPool::GetActor(ACTORS_PATRICK_SBK); - m_actorPatrick->SetOtPos(5); - CActorPool::SetUpCache(); - CActorPool::CleanUpCache(); - s_leftBobSin=s_leftBob=s_rightBobSin=s_rightBob=0; CSoundMediator::setSong(CSoundMediator::SONG_PARTY); - CSoundMediator::playSong(); } @@ -156,14 +113,7 @@ void CPartyScene::init() ---------------------------------------------------------------------- */ void CPartyScene::shutdown() { - CSoundMediator::dumpSong(); - - delete m_actorPatrick; - delete m_actorSpongebob; - CActorPool::Reset(); - m_sprites->dump(); delete m_sprites; -// m_font->dump(); delete m_font; MemFree(m_image); } @@ -260,10 +210,6 @@ static PARTY_IMAGE images[]= }; static const int numimages=sizeof(images)/sizeof(PARTY_IMAGE); -DVECTOR sbpos={220,195}; -int sbanim=5,sbfrm=1; -DVECTOR patpos={300,200}; -int patanim=0,patfrm=0; void CPartyScene::render() { int i; @@ -281,7 +227,7 @@ void CPartyScene::render() for(i=0;im_fh<=FRM_TABLESIDE3); - if(gameSlot->isPartyItemHeld(pimage->m_itemId)&&!drawn[pimage->m_elementId]) +// if(gameSlot->isPartyItemHeld(pimage->m_itemId)&&!drawn[pimage->m_elementId]) { int x,y; x=pimage->m_xOffsetBroken*256; @@ -298,14 +244,6 @@ void CPartyScene::render() } pimage++; } - - // Actors - m_actorSpongebob->Render(sbpos,sbanim,sbfrm,0,0); - sbfrm=0; - m_actorPatrick->Render(patpos,patanim,patfrm,0,0); - - - CActorPool::CleanUpCache(); } @@ -317,16 +255,6 @@ void CPartyScene::render() ---------------------------------------------------------------------- */ void CPartyScene::think(int _frames) { - if(!CFader::isFading()) - { - if(PadGetDown(0)&(PAD_CROSS|PAD_START)) - { - m_readyToExit=true; - CFader::setFadingOut(); - GameState::setNextScene(&CreditsScene); - } - } - s_leftBobSin=(s_leftBobSin+(_frames*20))&4095; s_rightBobSin=(s_rightBobSin+(_frames*16))&4095; s_leftBob=(msin(s_leftBobSin)*2)>>12; @@ -334,17 +262,5 @@ void CPartyScene::think(int _frames) } -/*---------------------------------------------------------------------- - Function: - Purpose: - Params: - Returns: - ---------------------------------------------------------------------- */ -int CPartyScene::readyToShutdown() -{ - return m_readyToExit&&!CFader::isFading(); -} - - /*=========================================================================== end */ \ No newline at end of file diff --git a/source/backend/party.h b/source/backend/party.h index 8b7815f21..0a0d3b576 100644 --- a/source/backend/party.h +++ b/source/backend/party.h @@ -18,11 +18,6 @@ Includes -------- */ -#ifndef __SYSTEM_GSTATE_H__ -#include "system\gstate.h" -#endif - - /* Std Lib ------- */ @@ -34,20 +29,16 @@ Structure defintions -------------------- */ -class CPartyScene: public CScene +class CPartyScene { public: void init(); void shutdown(); void render(); void think(int _frames); - int readyToShutdown(); - char *getSceneName() {return"Party";} - private: class SpriteBank *m_sprites; - int m_readyToExit; unsigned char *m_image; }; @@ -57,9 +48,6 @@ private: Globals ------- */ -extern CPartyScene PartyScene; - - /*---------------------------------------------------------------------- Functions --------- */ diff --git a/source/fma/fma.cpp b/source/fma/fma.cpp index d9a7fa4b0..8c3fd3ba5 100644 --- a/source/fma/fma.cpp +++ b/source/fma/fma.cpp @@ -31,6 +31,10 @@ FX #include "level\level.h" #endif +#ifndef __BACKEND_PARTY_H__ +#include "backend\party.h" +#endif + #ifndef __THING_THING_H__ #include "thing\thing.h" #endif @@ -39,10 +43,6 @@ FX #include "game\convo.h" #endif -#ifndef __MAP_MAP_H__ -#include "map\map.h" -#endif - #ifndef __SOUND_SOUND_H__ #include "sound\sound.h" #endif @@ -65,6 +65,25 @@ FX #include "fx\fx.h" #include "fx\FXTvExplode.h" +#ifndef __MATHTABLE_HEADER__ +#include "utils\mathtab.h" +#endif + +// Game scenes.. +#ifndef __MAP_MAP_H__ +#include "map\map.h" +#endif + +#ifndef __FRONTEND_CREDITS_H__ +#include "backend\credits.h" +#endif + +#ifndef __GAME_GAME_H__ +#include "game\game.h" +#endif + + + /* Std Lib ------- */ @@ -92,6 +111,21 @@ FX #include "actor_plankton_anim.h" #endif +#ifndef __ANIM_PATRICK_HEADER__ +#include "actor_patrick_anim.h" +#endif + +#ifndef __ANIM_KRUSTY_HEADER__ +#include "actor_krusty_anim.h" +#endif + +#ifndef __ANIM_squidward_HEADER__ +#include "actor_squidward_anim.h" +#endif + +#ifndef __ANIM_SANDY_HEADER__ +#include "actor_sandy_anim.h" +#endif #define FRM__KELP_BAR FRM__C4_QUEST_ITEM_2 @@ -107,6 +141,10 @@ enum FMA_ACTOR_BB, FMA_ACTOR_GARY, FMA_ACTOR_PLANKTON, + FMA_ACTOR_PATRICK, + FMA_ACTOR_KRABS, + FMA_ACTOR_SQUIDWARD, + FMA_ACTOR_SANDY, FMA_NUM_ACTORS }; @@ -137,10 +175,24 @@ enum FMA_NUM_ANIMS, }; +// Next scene types +enum +{ + FMA_NEXT_SCENE_MAP, + FMA_NEXT_SCENE_GAME, + FMA_NEXT_SCENE_CREDITS, + + FMA_NUM_NEXT_SCENES +}; + // Available script commands typedef enum { + SC_USE_LEVEL, // levelNumber + SC_USE_PARTY, // + SC_SET_NEXT_SCENE, // nextScene + SC_SNAP_CAMERA_TO, // x,y SC_MOVE_CAMERA_TO, // x,y,frames @@ -151,6 +203,7 @@ typedef enum SC_WAIT_ON_ACTOR_ANIM, // actor (nonblocking) SC_WAIT_ON_CAMERA_STOP, // (nonblocking) SC_WAIT_ON_CONVERSATION, // scriptId (nonblocking) + SC_WAIT_ON_THROWN_ITEM, // item SC_SET_ACTOR_VISIBILITY, // actor,on/off SC_SET_ACTOR_POSITION, // actor,x,y @@ -161,10 +214,13 @@ typedef enum SC_CREATE_FX, // FxNo, X,Y, FXType SC_KILL_FX, // FxNo - SC_SET_ITEM, // item, Frame - SC_CARRY_ITEM, // item, actor + SC_SET_ITEM, // item,frame + SC_CARRY_ITEM, // item,actor + SC_HIDE_ITEM, // item + SC_THROW_ITEM_TO_ACTOR, // item,targetActor,arcHeight,frames - SC_STOP, // + SC_START, // + SC_STOP, // } SCRIPT_COMMAND; /* @@ -228,12 +284,19 @@ typedef struct struct sItemData { + s8 m_visible; + DVECTOR m_Pos; s8 m_Actor; u8 m_facing; u16 m_Frame; + s8 m_TargetActor; + DVECTOR m_startPos; DVECTOR m_TargetPos; + u16 m_startMoveFrame; + u16 m_endMoveFrame; + s8 m_throwArcHeight; }; @@ -254,6 +317,15 @@ CFmaScene FmaScene; CFX *m_FXTable[FMA_FX_COUNT]; sItemData m_itemData[FMA_ITEM_MAX]; +/*****************************************************************************/ +static CScene *s_nextGameSceneTable[FMA_NUM_NEXT_SCENES]= +{ + &MapScene, // FMA_NEXT_SCENE_MAP + &GameScene, // FMA_NEXT_SCENE_GAME + &CreditsScene, // FMA_NEXT_SCENE_CREDITS +}; + + /*****************************************************************************/ // Actor graphics data static const ACTOR_GRAPHICS_DATA s_actorGraphicsData[FMA_NUM_ACTORS]= @@ -366,6 +438,94 @@ static const ACTOR_GRAPHICS_DATA s_actorGraphicsData[FMA_NUM_ACTORS]= /*FMA_ANIM_SIT*/ {0,-1}, /*FMA_ANIM_SITLOOKLEFT*/ {0,-1}, /*FMA_ANIM_SITASLEEP*/ {0,-1}, +/*FMA_ANIM_RUBHEAD*/ {0,-1}, + }, + }, + { // Patrick + {ACTORS_PATRICK_SBK, (FileEquate)0},{0,0}, + { +/*FMA_ANIM_IDLE*/ {0,ANIM_PATRICK_IDLEBREATHE}, +/*FMA_ANIM_WALK*/ {0,-1}, +/*FMA_ANIM_FIXTV*/ {0,-1}, +/*FMA_ANIM_GIVEEND*/ {0,-1}, +/*FMA_ANIM_GIVESTART*/ {0,-1}, +/*FMA_ANIM_IDEA*/ {0,-1}, +/*FMA_ANIM_QUICKEXIT*/ {0,-1}, +/*FMA_ANIM_SHOUT*/ {0,-1}, +/*FMA_ANIM_STUMBLE*/ {0,-1}, +/*FMA_ANIM_THROW*/ {0,-1}, +/*FMA_ANIM_HIDE*/ {0,-1}, +/*FMA_ANIM_UNHIDE*/ {0,-1}, +/*FMA_ANIM_UNHIDEIDLE*/ {0,-1}, +/*FMA_ANIM_SIT*/ {0,-1}, +/*FMA_ANIM_SITLOOKLEFT*/ {0,-1}, +/*FMA_ANIM_SITASLEEP*/ {0,-1}, +/*FMA_ANIM_RUBHEAD*/ {0,-1}, + }, + }, + { // Krusty + {ACTORS_KRUSTY_SBK, (FileEquate)0},{0,0}, + { +/*FMA_ANIM_IDLE*/ {0,ANIM_KRUSTY_IDLEBREATHE}, +/*FMA_ANIM_WALK*/ {0,-1}, +/*FMA_ANIM_FIXTV*/ {0,-1}, +/*FMA_ANIM_GIVEEND*/ {0,-1}, +/*FMA_ANIM_GIVESTART*/ {0,-1}, +/*FMA_ANIM_IDEA*/ {0,-1}, +/*FMA_ANIM_QUICKEXIT*/ {0,-1}, +/*FMA_ANIM_SHOUT*/ {0,-1}, +/*FMA_ANIM_STUMBLE*/ {0,-1}, +/*FMA_ANIM_THROW*/ {0,-1}, +/*FMA_ANIM_HIDE*/ {0,-1}, +/*FMA_ANIM_UNHIDE*/ {0,-1}, +/*FMA_ANIM_UNHIDEIDLE*/ {0,-1}, +/*FMA_ANIM_SIT*/ {0,-1}, +/*FMA_ANIM_SITLOOKLEFT*/ {0,-1}, +/*FMA_ANIM_SITASLEEP*/ {0,-1}, +/*FMA_ANIM_RUBHEAD*/ {0,-1}, + }, + }, + { // Squidward + {ACTORS_SQUIDWARD_SBK, (FileEquate)0},{0,0}, + { +/*FMA_ANIM_IDLE*/ {0,ANIM_SQUIDWARD_IDLEBREATHE}, +/*FMA_ANIM_WALK*/ {0,-1}, +/*FMA_ANIM_FIXTV*/ {0,-1}, +/*FMA_ANIM_GIVEEND*/ {0,-1}, +/*FMA_ANIM_GIVESTART*/ {0,-1}, +/*FMA_ANIM_IDEA*/ {0,-1}, +/*FMA_ANIM_QUICKEXIT*/ {0,-1}, +/*FMA_ANIM_SHOUT*/ {0,-1}, +/*FMA_ANIM_STUMBLE*/ {0,-1}, +/*FMA_ANIM_THROW*/ {0,-1}, +/*FMA_ANIM_HIDE*/ {0,-1}, +/*FMA_ANIM_UNHIDE*/ {0,-1}, +/*FMA_ANIM_UNHIDEIDLE*/ {0,-1}, +/*FMA_ANIM_SIT*/ {0,-1}, +/*FMA_ANIM_SITLOOKLEFT*/ {0,-1}, +/*FMA_ANIM_SITASLEEP*/ {0,-1}, +/*FMA_ANIM_RUBHEAD*/ {0,-1}, + }, + }, + { // Sandy + {ACTORS_SANDY_SBK, (FileEquate)0},{0,0}, + { +/*FMA_ANIM_IDLE*/ {0,ANIM_SANDY_IDLE}, +/*FMA_ANIM_WALK*/ {0,-1}, +/*FMA_ANIM_FIXTV*/ {0,-1}, +/*FMA_ANIM_GIVEEND*/ {0,-1}, +/*FMA_ANIM_GIVESTART*/ {0,-1}, +/*FMA_ANIM_IDEA*/ {0,-1}, +/*FMA_ANIM_QUICKEXIT*/ {0,-1}, +/*FMA_ANIM_SHOUT*/ {0,-1}, +/*FMA_ANIM_STUMBLE*/ {0,-1}, +/*FMA_ANIM_THROW*/ {0,-1}, +/*FMA_ANIM_HIDE*/ {0,-1}, +/*FMA_ANIM_UNHIDE*/ {0,-1}, +/*FMA_ANIM_UNHIDEIDLE*/ {0,-1}, +/*FMA_ANIM_SIT*/ {0,-1}, +/*FMA_ANIM_SITLOOKLEFT*/ {0,-1}, +/*FMA_ANIM_SITASLEEP*/ {0,-1}, /*FMA_ANIM_RUBHEAD*/ {0,-1}, }, }, @@ -384,6 +544,10 @@ static const int s_FMAIntroScript[]= SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH1_01_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH1_02_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH1_03_DAT, + SC_USE_LEVEL, 25, + SC_SET_NEXT_SCENE, FMA_NEXT_SCENE_MAP, + SC_START, + // Scene 1 - SB & Gary outside house SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, @@ -468,6 +632,9 @@ static const int s_FMAC1EndScript[]= SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH2_01_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH2_02_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH2_03_DAT, + SC_USE_LEVEL, 25, + SC_SET_NEXT_SCENE, FMA_NEXT_SCENE_MAP, + SC_START, // Scene 1 - Shade Shoals SC_SNAP_CAMERA_TO, 4*16,18*16, @@ -546,6 +713,9 @@ static const int s_FMAC2EndScript[]= SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH3_00_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH3_01_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH3_02_DAT, + SC_USE_LEVEL, 25, + SC_SET_NEXT_SCENE, FMA_NEXT_SCENE_MAP, + SC_START, // Scene 1 - Shade Shoals SC_SNAP_CAMERA_TO, 4*16,18*16, @@ -612,6 +782,9 @@ static const int s_FMAC3EndScript[]= SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH4_00_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH4_01_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH4_02_DAT, + SC_USE_LEVEL, 25, + SC_SET_NEXT_SCENE, FMA_NEXT_SCENE_MAP, + SC_START, // Scene 1 - Shade Shoals SC_SNAP_CAMERA_TO, 4*16,18*16, @@ -697,6 +870,9 @@ static const int s_FMAC4EndScript[]= SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH5_00_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH5_01_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH5_02_DAT, + SC_USE_LEVEL, 25, + SC_SET_NEXT_SCENE, FMA_NEXT_SCENE_MAP, + SC_START, // Scene 1 - Shade Shoals SC_SNAP_CAMERA_TO, 369*16,18*16, @@ -750,6 +926,9 @@ static const int s_FMAC5EndScript[]= SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH6_01_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH6_02_DAT, SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH6_03_DAT, + SC_USE_LEVEL, 25, + SC_SET_NEXT_SCENE, FMA_NEXT_SCENE_MAP, + SC_START, // Scene 1 - Shade Shoals SC_SNAP_CAMERA_TO, 4*16,18*16, @@ -845,6 +1024,11 @@ static const int s_FMAC5EndScript[]= static const int s_FMAPlanktonScript[]= { SC_REGISTER_CONVERSATION, SCRIPTS_FMA_PLANKTON_DAT, + SC_USE_LEVEL, 26, + SC_SET_NEXT_SCENE, FMA_NEXT_SCENE_GAME, + SC_START, + + SC_SNAP_CAMERA_TO, 0*16,5*16, SC_WAIT_ON_TIMER, 60*2, @@ -887,6 +1071,84 @@ static const int s_FMAPlanktonScript[]= SC_STOP }; +/*****************************************************************************/ +/*** Part FMA ****************************************************************/ +/*****************************************************************************/ + +static const int s_FMAPartyScript[]= +{ + // Init + SC_REGISTER_CONVERSATION, SCRIPTS_FMA_PARTY_DAT, + SC_USE_PARTY, + SC_SET_NEXT_SCENE, FMA_NEXT_SCENE_CREDITS, + SC_SNAP_CAMERA_TO, 0,0, + SC_START, + + // Party scene + SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, + SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,150,150, + SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, + SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SPONGEBOB,true, + SC_SET_ITEM, 0,FRM__SANDWICH, + SC_CARRY_ITEM, 0,FMA_ACTOR_SPONGEBOB, + + /* + SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_IDLE,1, + SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,175,150, + SC_SET_ACTOR_FACING, FMA_ACTOR_MM,1, + SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_MM,true, + */ + + SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_IDLE,1, + SC_SET_ACTOR_POSITION, FMA_ACTOR_BB,300,200, + SC_SET_ACTOR_FACING, FMA_ACTOR_BB,1, + SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_BB,true, + + /* + SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_GARY,FMA_ANIM_IDLE,1, + SC_SET_ACTOR_POSITION, FMA_ACTOR_GARY,225,150, + SC_SET_ACTOR_FACING, FMA_ACTOR_GARY,1, + SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_GARY,true, + + SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_PLANKTON,FMA_ANIM_IDLE,1, + SC_SET_ACTOR_POSITION, FMA_ACTOR_PLANKTON,250,150, + SC_SET_ACTOR_FACING, FMA_ACTOR_PLANKTON,1, + SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_PLANKTON,true, + + SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_PATRICK,FMA_ANIM_IDLE,1, + SC_SET_ACTOR_POSITION, FMA_ACTOR_PATRICK,250,200, + SC_SET_ACTOR_FACING, FMA_ACTOR_PATRICK,1, + SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_PATRICK,true, + + SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_KRABS,FMA_ANIM_IDLE,1, + SC_SET_ACTOR_POSITION, FMA_ACTOR_KRABS,275,200, + SC_SET_ACTOR_FACING, FMA_ACTOR_KRABS,1, + SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_KRABS,true, + + SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SQUIDWARD,FMA_ANIM_IDLE,1, + SC_SET_ACTOR_POSITION, FMA_ACTOR_SQUIDWARD,300,200, + SC_SET_ACTOR_FACING, FMA_ACTOR_SQUIDWARD,1, + SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SQUIDWARD,true, + + SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SANDY,FMA_ANIM_IDLE,1, + SC_SET_ACTOR_POSITION, FMA_ACTOR_SANDY,325,150, + SC_SET_ACTOR_FACING, FMA_ACTOR_SANDY,1, + SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SANDY,true, + */ + + SC_WAIT_ON_TIMER, 240, + + SC_THROW_ITEM_TO_ACTOR, 0,FMA_ACTOR_BB,0,120, + SC_WAIT_ON_THROWN_ITEM, 0, + + SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_PARTY_DAT, + SC_HIDE_ITEM, 0, + SC_WAIT_ON_TIMER, 60*600, + + SC_STOP +}; + + static const int *s_fmaScripts[CFmaScene::NUM_FMA_SCRIPTS]= { s_FMAIntroScript, @@ -896,9 +1158,10 @@ static const int *s_fmaScripts[CFmaScene::NUM_FMA_SCRIPTS]= s_FMAC4EndScript, s_FMAC5EndScript, s_FMAPlanktonScript, + s_FMAPartyScript, }; -static CFmaScene::FMA_SCRIPT_NUMBER s_chosenScript=CFmaScene::FMA_SCRIPT__INTRO; +static CFmaScene::FMA_SCRIPT_NUMBER s_chosenScript=CFmaScene::FMA_SCRIPT__PARTY;//FMA_SCRIPT__INTRO; /*---------------------------------------------------------------------- Function: @@ -911,21 +1174,11 @@ void CFmaScene::init() int i; ACTOR_DATA *actor; + m_level=NULL; CThingManager::init(); CConversation::init(); - m_level=new ("FMALevel") CLevel(); - if (s_chosenScript==FMA_SCRIPT__PLANKTON) - { - m_level->init(26); - } - else - { - m_level->init(25); - } - - m_cameraPos.vx=30; m_cameraPos.vy=280; m_cameraMoving=false; @@ -962,7 +1215,9 @@ void CFmaScene::init() } for (i=0; ishutdown(); delete m_level; + if(m_level) + { + m_level->shutdown(); + delete m_level; + } + if(m_party) + { + m_party->shutdown(); + delete m_party; + } + CSoundMediator::dumpSong(); CConversation::shutdown(); @@ -1019,7 +1283,15 @@ void CFmaScene::render() CThingManager::renderAllThings(); CConversation::render(); - m_level->render(); + + if(m_level) + { + m_level->render(); + } + else if(m_party) + { + m_party->render(); + } actor=m_actorData; for(i=0;im_Actor!=-1) + if(item->m_visible) { DVECTOR pos; - pos.vx=item->m_Pos.vx-m_cameraPos.vx; - pos.vy=item->m_Pos.vy-m_cameraPos.vy; - if (item->m_facing) + if(item->m_TargetActor!=-1) { - pos.vx-=s_actorGraphicsData[item->m_Actor].m_ItemOfs.vx; + // Being thrown to an actor + pos.vx=item->m_Pos.vx-m_cameraPos.vx; + pos.vy=item->m_Pos.vy-m_cameraPos.vy; } - else + if (item->m_Actor!=-1) { - pos.vx+=s_actorGraphicsData[item->m_Actor].m_ItemOfs.vx; + // Attached to an actor + pos.vx=item->m_Pos.vx-m_cameraPos.vx; + pos.vy=item->m_Pos.vy-m_cameraPos.vy; + if (item->m_facing) + { + pos.vx-=s_actorGraphicsData[item->m_Actor].m_ItemOfs.vx; + } + else + { + pos.vx+=s_actorGraphicsData[item->m_Actor].m_ItemOfs.vx; + } + pos.vy+=s_actorGraphicsData[item->m_Actor].m_ItemOfs.vy; } - pos.vy+=s_actorGraphicsData[item->m_Actor].m_ItemOfs.vy; - CGameScene::getSpriteBank()->printFT4(item->m_Frame,pos.vx,pos.vy,item->m_facing,0,OTPOS__PICKUP_POS-1); } } @@ -1092,6 +1373,12 @@ void CFmaScene::think(int _frames) } #endif + if(!CFader::isFading()&&m_tuneLoaded&&!m_musicPlaying) + { + CSoundMediator::playSong(); + m_musicPlaying=true; + } + if(PadGetHeld(0) & PAD_START) { // Give player an exit option!! m_scriptRunning=false; @@ -1184,19 +1471,51 @@ void CFmaScene::think(int _frames) for (i=0; im_Actor!=-1) + if(item->m_TargetActor!=-1) { - DVECTOR &TargetPos=m_actorData[item->m_Actor].m_pos; - DVECTOR Move; - - Move.vx=TargetPos.vx-item->m_Pos.vx; - Move.vy=TargetPos.vy-item->m_Pos.vy; - - item->m_Pos.vx+=Move.vx; - item->m_Pos.vy+=Move.vy; + // Being thrown to an actor + int totalFrames,currentFrame; + totalFrames=item->m_endMoveFrame-item->m_startMoveFrame; + currentFrame=totalFrames-(item->m_endMoveFrame-m_frameCount); + if(currentFrame==0) + { + item->m_Pos=item->m_startPos; + } + else if(currentFrame>=totalFrames) + { + item->m_Pos=item->m_TargetPos; + item->m_Actor=item->m_TargetActor; + item->m_TargetActor=-1; + } + else + { + int sin,yoff; + item->m_Pos.vx=item->m_startPos.vx+(((item->m_TargetPos.vx-item->m_startPos.vx)*currentFrame)/totalFrames); + item->m_Pos.vy=item->m_startPos.vy+(((item->m_TargetPos.vy-item->m_startPos.vy)*currentFrame)/totalFrames); + sin=((currentFrame*2048)/totalFrames); + yoff=-(msin(sin)*item->m_throwArcHeight)>>12; + item->m_Pos.vy+=yoff; +/// +//item->m_Pos=item->m_TargetPos; +/// + } + } + else if (item->m_Actor!=-1) + { + // Being carried by an actor +// DVECTOR &TargetPos=m_actorData[item->m_Actor].m_pos; +// DVECTOR Move; +// +// Move.vx=TargetPos.vx-item->m_Pos.vx; +// Move.vy=TargetPos.vy-item->m_Pos.vy; +// +// item->m_Pos.vx+=Move.vx; +// item->m_Pos.vy+=Move.vy; +// +// item->m_facing=m_actorData[item->m_Actor].m_facing; + item->m_Pos=m_actorData[item->m_Actor].m_pos; item->m_facing=m_actorData[item->m_Actor].m_facing; - } } @@ -1220,8 +1539,16 @@ void CFmaScene::think(int _frames) CThingManager::thinkAllThings(_frames); CConversation::think(_frames); - m_level->setCameraCentre(m_cameraPos); - m_level->think(_frames); + + if(m_level) + { + m_level->setCameraCentre(m_cameraPos); + m_level->think(_frames); + } + else if(m_party) + { + m_party->think(_frames); + } } @@ -1258,7 +1585,6 @@ void CFmaScene::selectFma(FMA_SCRIPT_NUMBER _fma) void CFmaScene::startShutdown() { CFader::setFadingOut(); - GameState::setNextScene(&MapScene); m_readyToShutdown=true; } @@ -1276,6 +1602,28 @@ void CFmaScene::startNextScriptCommand() switch(*m_pc) { + case SC_USE_LEVEL: + ASSERT(!m_level); + ASSERT(!m_party); + m_pc++; + m_level=new ("FMALevel") CLevel(); + m_level->init(*(m_pc++)); + m_tuneLoaded=true; + break; + + case SC_USE_PARTY: // + ASSERT(!m_level); + ASSERT(!m_party); + m_pc++; + m_party=new ("FMAParty") CPartyScene(); + m_party->init(); + break; + + case SC_SET_NEXT_SCENE: // nextScene + m_pc++; + GameState::setNextScene(s_nextGameSceneTable[*(m_pc++)]); + break; + case SC_SNAP_CAMERA_TO: // x,y m_pc++; m_cameraPos.vx=*m_pc++; @@ -1319,6 +1667,10 @@ void CFmaScene::startNextScriptCommand() m_stillProcessingCommand=true; break; + case SC_WAIT_ON_THROWN_ITEM: // item + m_stillProcessingCommand=true; + break; + case SC_SET_ACTOR_VISIBILITY: // actor,on/off { ACTOR_DATA *actor; @@ -1398,7 +1750,7 @@ void CFmaScene::startNextScriptCommand() } break; - case SC_SET_ITEM: // item, actor, Frame + case SC_SET_ITEM: // item, Frame { sItemData *item; m_pc++; @@ -1408,15 +1760,70 @@ void CFmaScene::startNextScriptCommand() break; - case SC_CARRY_ITEM: // item, actor + case SC_CARRY_ITEM: // item, actor { sItemData *item; m_pc++; item=&m_itemData[*m_pc++]; item->m_Actor=*m_pc++; + item->m_visible=true; } break; - case SC_STOP: // + + case SC_HIDE_ITEM: // item + m_pc++; + m_itemData[*m_pc++].m_visible=false; + break; + + case SC_THROW_ITEM_TO_ACTOR: // item,targetActor,arcHeight,frames + { + sItemData *item; + m_pc++; + item=&m_itemData[*m_pc++]; + ASSERT(item->m_Actor!=-1); + item->m_TargetActor=*m_pc++; + ASSERT(item->m_Actor!=item->m_TargetActor); + item->m_throwArcHeight=*(m_pc++); + item->m_startMoveFrame=m_frameCount; + item->m_endMoveFrame=m_frameCount+*m_pc++; + + // Calc the positions + item->m_TargetPos=m_actorData[item->m_TargetActor].m_pos; + /* + if(m_actorData[item->m_TargetActor].m_facing) + { + item->m_TargetPos.vx-=s_actorGraphicsData[item->m_TargetActor].m_ItemOfs.vx; + } + else + { + item->m_TargetPos.vx+=s_actorGraphicsData[item->m_TargetActor].m_ItemOfs.vx; + } + item->m_TargetPos.vy+=s_actorGraphicsData[item->m_TargetActor].m_ItemOfs.vy; + */ + item->m_startPos=item->m_Pos; + } +/* +pos.vx=item->m_Pos.vx-m_cameraPos.vx; +pos.vy=item->m_Pos.vy-m_cameraPos.vy; +if (item->m_facing) +{ + pos.vx-=s_actorGraphicsData[item->m_Actor].m_ItemOfs.vx; +} +else +{ + pos.vx+=s_actorGraphicsData[item->m_Actor].m_ItemOfs.vx; +} +pos.vy+=s_actorGraphicsData[item->m_Actor].m_ItemOfs.vy; +*/ + break; + + case SC_START: // + m_pc++; + CFader::setFadingIn(); + m_doOtherProcessing=true; + break; + + case SC_STOP: // nextScene m_scriptRunning=false; m_doOtherProcessing=true; break; @@ -1438,6 +1845,9 @@ void CFmaScene::processCurrentScriptCommand() { switch(*m_pc) { + case SC_USE_LEVEL: // levelNumber + case SC_USE_PARTY: // + case SC_SET_NEXT_SCENE: // nextScene case SC_SNAP_CAMERA_TO: // x,y case SC_MOVE_CAMERA_TO: // x,y,frames case SC_REGISTER_CONVERSATION: // scriptId @@ -1446,7 +1856,8 @@ void CFmaScene::processCurrentScriptCommand() case SC_SET_ACTOR_FACING: // actor,facing case SC_SET_ACTOR_ANIM_STATE: // actor,state case SC_WALK_ACTOR_TO_POSITION: // actor,x,y,frames - case SC_STOP: // + case SC_START: // + case SC_STOP: // nextScene ASSERT(!"Shouldn't be here.."); break; @@ -1518,6 +1929,18 @@ void CFmaScene::processCurrentScriptCommand() } break; + case SC_WAIT_ON_THROWN_ITEM: // item + if(m_itemData[*(m_pc+1)].m_TargetActor==-1) + { + m_pc+=2; + m_stillProcessingCommand=false; + } + else + { + m_doOtherProcessing=true; + } + break; + default: ASSERT(!"Bad script command"); break; diff --git a/source/fma/fma.h b/source/fma/fma.h index 04b98bc0f..082b64fcc 100644 --- a/source/fma/fma.h +++ b/source/fma/fma.h @@ -50,6 +50,7 @@ public: FMA_SCRIPT__CH4FINISHED, FMA_SCRIPT__CH5FINISHED, FMA_SCRIPT__PLANKTON, + FMA_SCRIPT__PARTY, NUM_FMA_SCRIPTS, FMA_SCRIPT__NONE, }FMA_SCRIPT_NUMBER; @@ -72,7 +73,8 @@ private: - class CLevel *m_level; + class CLevel *m_level; + class CPartyScene *m_party; DVECTOR m_cameraPos; @@ -89,6 +91,9 @@ private: int m_timer; int m_frameCount; + int m_tuneLoaded; + int m_musicPlaying; + int m_readyToShutdown; }; diff --git a/source/game/game.cpp b/source/game/game.cpp index fd6c86744..7a200b62e 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -223,6 +223,7 @@ void CGameScene::init() s_restartLevel=false; CFader::setFadingIn(); + CLevel::setIsBossRespawn(false); initLevel(); m_gamestate=GAMESTATE_SHOWING_LIVES; @@ -742,6 +743,7 @@ void CGameScene::initLevel() #ifdef __VERSION_DEBUG__ s_skipToNextLevel=false; #endif + CActorPool::Reset(); Level.init(s_globalLevelSelectThing); createPlayer(); diff --git a/source/gfx/fader.cpp b/source/gfx/fader.cpp index 81d28a791..fea7cc7a5 100644 --- a/source/gfx/fader.cpp +++ b/source/gfx/fader.cpp @@ -85,7 +85,7 @@ void CFader::render() POLY_F4 *f4; POLY_FT3 *ft3; f4=GetPrimF4(); - setXYWH(f4,0,0,511,255); + setXYWH(f4,0,0,VidGetScrW()+1,VidGetScrH()+1); setRGB0(f4,s_fadeValue,s_fadeValue,s_fadeValue); setShadeTex(f4,0); setSemiTrans(f4,1); @@ -116,7 +116,7 @@ void CFader::render() int col; col=255-s_fadeValue; f4=GetPrimF4(); - setXYWH(f4,0,0,511,255); + setXYWH(f4,0,0,VidGetScrW()+1,VidGetScrH()+1); setRGB0(f4,col,col,col); setShadeTex(f4,0); setSemiTrans(f4,1); @@ -139,7 +139,7 @@ void CFader::render() POLY_F4 *f4; f4=GetPrimF4(); - setXYWH(f4,0,0,VidGetScrW(),VidGetScrH()); + setXYWH(f4,0,0,VidGetScrW()+1,VidGetScrH()); switch(s_fadeStyle) { case BLACK_FADE: diff --git a/source/level/level.cpp b/source/level/level.cpp index 0b4d8d5ab..82be4bb7c 100644 --- a/source/level/level.cpp +++ b/source/level/level.cpp @@ -197,7 +197,6 @@ void CLevel::init(int LevelNo) // Load it sLvlTab *lvlTab=&LvlTable[LevelNo]; - CActorPool::Reset(); CSoundMediator::setSong((CSoundMediator::SONGID)lvlTab->songId); DisplayLoadingScreen(lvlTab); diff --git a/source/paul/scenesel.cpp b/source/paul/scenesel.cpp index 229bf8eab..291d2e407 100644 --- a/source/paul/scenesel.cpp +++ b/source/paul/scenesel.cpp @@ -63,10 +63,6 @@ #include "map\map.h" #endif -#ifndef __BACKEND_PARTY_H__ -#include "backend\party.h" -#endif - #ifndef __BACKEND_CREDITS_H__ #include "backend\credits.h" #endif @@ -116,7 +112,6 @@ CScene *CSceneSelector::s_sceneList[]= &FmaScene, &MapScene, &ShopScene, - &PartyScene, &CreditsScene, &AnimTestScene, &SaveScene, diff --git a/source/shop/shop.cpp b/source/shop/shop.cpp index ec1cdff6e..57edce6ed 100644 --- a/source/shop/shop.cpp +++ b/source/shop/shop.cpp @@ -74,14 +74,14 @@ #include "map\map.h" #endif -#ifndef __BACKEND_PARTY_H__ -#include "backend\party.h" -#endif - #ifndef __GUI_POINTER_H__ #include "gui\pointer.h" #endif +#ifndef __FMA_FMA_H__ +#include "fma\fma.h" +#endif + /* Std Lib ------- */ @@ -411,7 +411,8 @@ void CShopScene::think(int _frames) if(s_gotoPartyScreen) { s_gotoPartyScreen=false; - GameState::setNextScene(&PartyScene); + CFmaScene::selectFma(CFmaScene::FMA_SCRIPT__PARTY); + GameState::setNextScene(&FmaScene); } else {