/*========================================================================= gameover.cpp Author: PKG Created: Project: Spongebob Purpose: Copyright (c) 2001 Climax Development Ltd ===========================================================================*/ /* Sprite/object control - Thrown objects, so need curved path, :o( FX 1 Sandwich 2 makeup bag 3 uniform 4 kelp bar 5 fix tv */ /*---------------------------------------------------------------------- Includes -------- */ #include "fma\fma.h" #ifndef __LEVEL_LEVEL_H__ #include "level\level.h" #endif #ifndef __BACKEND_PARTY_H__ #include "backend\party.h" #endif #ifndef __THING_THING_H__ #include "thing\thing.h" #endif #ifndef __GAME_CONVO_H__ #include "game\convo.h" #endif #ifndef __SOUND_SOUND_H__ #include "sound\sound.h" #endif #ifndef __ACTOR_HEADER__ #include "gfx\actor.h" #endif #ifndef __GFX_FADER_H__ #include "gfx\fader.h" #endif #include "game\game.h" #include "utils\utils.h" #include "pad\pads.h" #include "gfx\font.h" #include "gfx\otpos.h" #include #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 #ifndef __SAVE_SAVE_H__ #include "save\save.h" #endif #ifndef __VID_HEADER_ #include "system\vid.h" #endif /* Std Lib ------- */ /* Data ---- */ #ifndef __ANIM_SPONGEBOB_HEADER__ #include "actor_spongebob_anim.h" #endif #include "actor_spongebob_fma_anim.h" #include "actor_spongebob_fma_itemofs_anim.h" #ifndef __ANIM_MERMAIDMAN_HEADER__ #include "actor_mermaidman_anim.h" #endif #include "actor_mermaidman_fma_itemofs_anim.h" #ifndef __ANIM_BARNACLEBOY_HEADER__ #include "actor_barnacleboy_anim.h" #endif #include "actor_barnacleboy_fma_itemofs_anim.h" #ifndef __ANIM_GARY_HEADER__ #include "actor_gary_anim.h" #endif #ifndef __ANIM_PLANKTON_HEADER__ #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 /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ // Available actors enum { FMA_ACTOR_SPONGEBOB, FMA_ACTOR_BB, FMA_ACTOR_MM, FMA_ACTOR_GARY, FMA_ACTOR_PLANKTON, FMA_ACTOR_PATRICK, FMA_ACTOR_KRABS, FMA_ACTOR_SQUIDWARD, FMA_ACTOR_SANDY, FMA_NUM_ACTORS }; // Actor animation types enum { FMA_ANIM_IDLE, FMA_ANIM_WALK, FMA_ANIM_FIXTV, FMA_ANIM_GIVEEND, FMA_ANIM_GIVESTART, FMA_ANIM_IDEA, FMA_ANIM_QUICKEXIT, FMA_ANIM_SHOUT, FMA_ANIM_STUMBLE, FMA_ANIM_THROW, FMA_ANIM_HIDE, FMA_ANIM_UNHIDE, FMA_ANIM_UNHIDEIDLE, FMA_ANIM_SIT, FMA_ANIM_SITLOOKLEFT, FMA_ANIM_SITASLEEP, FMA_ANIM_RUBHEAD, FMA_NUM_ANIMS, }; // Next scene types enum { FMA_NEXT_SCENE_MAP, FMA_NEXT_SCENE_GAME, FMA_NEXT_SCENE_CREDITS, FMA_NEXT_SCENE_FMA, FMA_NEXT_SCENE_SAVE, FMA_NUM_NEXT_SCENES }; // Available script commands typedef enum { SC_USE_LEVEL, // levelNumber SC_USE_PARTY, // SC_SET_NEXT_SCENE, // nextScene SC_SET_NEXT_FMA_NUMBER, // fmaNumber SC_SET_FADE_TO_BLACK, // SC_SET_FADE_TO_WHITE, // SC_SET_FADE_FROM_WHITE, // SC_SET_DRAW_SCREEN_AS_WHITE,// on/off SC_SNAP_CAMERA_TO, // x,y SC_MOVE_CAMERA_TO, // x,y,frames SC_REGISTER_CONVERSATION, // scriptId SC_WAIT_ON_TIMER, // frames (nonblocking) SC_WAIT_ON_ACTOR_STOP, // actor (nonblocking) 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_WAIT_ON_FADE, // SC_SET_ACTOR_VISIBILITY, // actor,on/off SC_SET_ACTOR_POSITION, // actor,x,y SC_SET_ACTOR_FACING, // actor,facing SC_SET_ACTOR_ANIM_STATE, // actor,state,loop SC_WALK_ACTOR_TO_POSITION, // actor,x,y,frames SC_SET_GLOBAL_ANIMATION, // on/off SC_CREATE_FX, // FxNo, X,Y, FXType SC_KILL_FX, // FxNo SC_SET_ITEM, // item,frame SC_CARRY_ITEM, // item,actor SC_HIDE_ITEM, // item SC_THROW_ITEM_TO_ACTOR, // item,targetActor,arcHeight,frames SC_START, // SC_STOP, // } SCRIPT_COMMAND; /* struct sFMAItemTable { u16 Frame; DVECTOR SprOfs; }; enum FMA_ITEM { FMA_ITEM_C1, FMA_ITEM_C2, FMA_ITEM_C3, FMA_ITEM_C4, FMA_ITEM_C5, FMA_ITEM_MAX } sFMAItemTable FMAItemTable[FMA_ITEM_MAX] { }; */ /*---------------------------------------------------------------------- Structure defintions -------------------- */ // Data for an actors graphics struct sFMAAnim { s16 Bank; s16 Anim; s16 itemBank; s16 itemAnim; }; typedef struct { FileEquate m_file[3]; sFMAAnim m_anims[FMA_NUM_ANIMS]; } ACTOR_GRAPHICS_DATA; // Actor data typedef struct { CActorGfx *m_gfx[3]; u8 m_active; u8 m_animState,m_animFrame; u8 m_animLoop; DVECTOR m_pos; DVECTOR m_ItemOfs; u16 m_startMoveFrame; DVECTOR m_startMovePos; u16 m_endMoveFrame; DVECTOR m_endMovePos; u8 m_moving; u8 m_facing; } ACTOR_DATA; 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; }; /*---------------------------------------------------------------------- Function Prototypes ------------------- */ /*---------------------------------------------------------------------- Vars ---- */ enum { FMA_FX_COUNT=4, FMA_ITEM_MAX=4, }; 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 &FmaScene, // FMA_NEXT_SCENE_FMA &SaveScene, // FMA_NEXT_SCENE_SAVE }; /*****************************************************************************/ // Actor graphics data static const ACTOR_GRAPHICS_DATA s_actorGraphicsData[FMA_NUM_ACTORS]= { { // SpongeBob {ACTORS_SPONGEBOB_SBK,ACTORS_SPONGEBOB_FMA_SBK,ACTORS_SPONGEBOB_FMA_ITEMOFS_SBK}, { /*FMA_ANIM_IDLE*/ {0,ANIM_SPONGEBOB_IDLEBREATH, 2,ANIM_SPONGEBOB_FMA_ITEMOFS_IDLEBREATH}, /*FMA_ANIM_WALK*/ {0,ANIM_SPONGEBOB_RUN, 2,ANIM_SPONGEBOB_FMA_ITEMOFS_RUN}, /*FMA_ANIM_FIXTV*/ {1,ANIM_SPONGEBOB_FMA_FIXTV, 0,-1}, /*FMA_ANIM_GIVEEND*/ {1,ANIM_SPONGEBOB_FMA_GIVEEND, 0,-1}, /*FMA_ANIM_GIVESTART*/ {1,ANIM_SPONGEBOB_FMA_GIVESTART, 0,-1}, /*FMA_ANIM_IDEA*/ {1,ANIM_SPONGEBOB_FMA_IDEA, 0,-1}, /*FMA_ANIM_QUICKEXIT*/ {1,ANIM_SPONGEBOB_FMA_QUICKEXIT, 2,ANIM_SPONGEBOB_FMA_ITEMOFS_QUICKEXIT}, /*FMA_ANIM_SHOUT*/ {1,ANIM_SPONGEBOB_FMA_SHOUT, 0,-1}, /*FMA_ANIM_STUMBLE*/ {1,ANIM_SPONGEBOB_FMA_STUMBLE, 2,ANIM_SPONGEBOB_FMA_ITEMOFS_STUMBLE}, /*FMA_ANIM_THROW*/ {1,ANIM_SPONGEBOB_FMA_THROW, 0,-1}, /*FMA_ANIM_HIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDEIDLE*/ {0,-1, 0,-1}, /*FMA_ANIM_SIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITLOOKLEFT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITASLEEP*/ {0,-1, 0,-1}, /*FMA_ANIM_RUBHEAD*/ {1,ANIM_SPONGEBOB_FMA_PARTY, 0,-1}, }, }, { // Barnicle Boy {ACTORS_BARNACLEBOY_SBK,ACTORS_BARNACLEBOY_FMA_ITEMOFS_SBK,(FileEquate)0}, { /*FMA_ANIM_IDLE*/ {0,ANIM_BARNACLEBOY_IDLE, 1,ANIM_BARNACLEBOY_FMA_ITEMOFS_IDLE}, /*FMA_ANIM_WALK*/ {0,-1, 0,-1}, /*FMA_ANIM_FIXTV*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVEEND*/ {0,ANIM_BARNACLEBOY_GIVEEND, 0,-1}, /*FMA_ANIM_GIVESTART*/ {0,ANIM_BARNACLEBOY_GIVESTART, 0,-1}, /*FMA_ANIM_IDEA*/ {0,-1, 0,-1}, /*FMA_ANIM_QUICKEXIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SHOUT*/ {0,-1, 0,-1}, /*FMA_ANIM_STUMBLE*/ {0,-1, 0,-1}, /*FMA_ANIM_THROW*/ {0,-1, 0,-1}, /*FMA_ANIM_HIDE*/ {0,ANIM_BARNACLEBOY_HIDE, 0,-1}, /*FMA_ANIM_UNHIDE*/ {0,ANIM_BARNACLEBOY_UNHIDE, 1,ANIM_BARNACLEBOY_FMA_ITEMOFS_UNHIDE}, /*FMA_ANIM_UNHIDEIDLE*/ {0,ANIM_BARNACLEBOY_UNHIDEIDLE, 0,-1}, /*FMA_ANIM_SIT*/ {0,ANIM_BARNACLEBOY_SIT, 0,-1}, /*FMA_ANIM_SITLOOKLEFT*/ {0,ANIM_BARNACLEBOY_SITLOOKLEFT, 1,ANIM_BARNACLEBOY_FMA_ITEMOFS_SITLOOKLEFT}, /*FMA_ANIM_SITASLEEP*/ {0,ANIM_BARNACLEBOY_SITASLEEP, 0,-1}, /*FMA_ANIM_RUBHEAD*/ {0,ANIM_BARNACLEBOY_RUBHEAD, 1,ANIM_BARNACLEBOY_FMA_ITEMOFS_RUBHEAD}, }, }, { // Mermaid Man {ACTORS_MERMAIDMAN_SBK,ACTORS_MERMAIDMAN_FMA_ITEMOFS_SBK,(FileEquate)0}, { /*FMA_ANIM_IDLE*/ {0,ANIM_MERMAIDMAN_IDLE, 0,-1}, /*FMA_ANIM_WALK*/ {0,-1, 0,-1}, /*FMA_ANIM_FIXTV*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVEEND*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVESTART*/ {0,-1, 0,-1}, /*FMA_ANIM_IDEA*/ {0,-1, 0,-1}, /*FMA_ANIM_QUICKEXIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SHOUT*/ {0,-1, 0,-1}, /*FMA_ANIM_STUMBLE*/ {0,-1, 0,-1}, /*FMA_ANIM_THROW*/ {0,-1, 0,-1}, /*FMA_ANIM_HIDE*/ {0,ANIM_MERMAIDMAN_HIDE, 0,-1}, /*FMA_ANIM_UNHIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDEIDLE*/ {0,-1, 0,-1}, /*FMA_ANIM_SIT*/ {0,ANIM_MERMAIDMAN_SIT, 0,-1}, /*FMA_ANIM_SITLOOKLEFT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITASLEEP*/ {0,ANIM_MERMAIDMAN_SITASLEEP, 1,ANIM_MERMAIDMAN_FMA_ITEMOFS_SITASLEEP}, /*FMA_ANIM_RUBHEAD*/ {0,-1, 0,-1}, }, }, { // Gary Da Snail {ACTORS_GARY_SBK, (FileEquate)0,(FileEquate)0}, { /*FMA_ANIM_IDLE*/ {0,ANIM_GARY_IDLE, 0,-1}, /*FMA_ANIM_WALK*/ {0,ANIM_GARY_IDLE, 0,-1}, /*FMA_ANIM_FIXTV*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVEEND*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVESTART*/ {0,-1, 0,-1}, /*FMA_ANIM_IDEA*/ {0,-1, 0,-1}, /*FMA_ANIM_QUICKEXIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SHOUT*/ {0,-1, 0,-1}, /*FMA_ANIM_STUMBLE*/ {0,-1, 0,-1}, /*FMA_ANIM_THROW*/ {0,-1, 0,-1}, /*FMA_ANIM_HIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDEIDLE*/ {0,-1, 0,-1}, /*FMA_ANIM_SIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITLOOKLEFT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITASLEEP*/ {0,-1, 0,-1}, /*FMA_ANIM_RUBHEAD*/ {0,-1, 0,-1}, }, }, { // Plankton {ACTORS_PLANKTON_SBK, (FileEquate)0,(FileEquate)0}, { /*FMA_ANIM_IDLE*/ {0,ANIM_PLANKTON_IDLE, 0,-1}, /*FMA_ANIM_WALK*/ {0,-1, 0,-1}, /*FMA_ANIM_FIXTV*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVEEND*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVESTART*/ {0,-1, 0,-1}, /*FMA_ANIM_IDEA*/ {0,-1, 0,-1}, /*FMA_ANIM_QUICKEXIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SHOUT*/ {0,-1, 0,-1}, /*FMA_ANIM_STUMBLE*/ {0,-1, 0,-1}, /*FMA_ANIM_THROW*/ {0,-1, 0,-1}, /*FMA_ANIM_HIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDEIDLE*/ {0,-1, 0,-1}, /*FMA_ANIM_SIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITLOOKLEFT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITASLEEP*/ {0,-1, 0,-1}, /*FMA_ANIM_RUBHEAD*/ {0,-1, 0,-1}, }, }, { // Patrick {ACTORS_PATRICK_SBK, (FileEquate)0,(FileEquate)0}, { /*FMA_ANIM_IDLE*/ {0,ANIM_PATRICK_IDLEBREATHE, 0,-1}, /*FMA_ANIM_WALK*/ {0,-1, 0,-1}, /*FMA_ANIM_FIXTV*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVEEND*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVESTART*/ {0,-1, 0,-1}, /*FMA_ANIM_IDEA*/ {0,-1, 0,-1}, /*FMA_ANIM_QUICKEXIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SHOUT*/ {0,-1, 0,-1}, /*FMA_ANIM_STUMBLE*/ {0,-1, 0,-1}, /*FMA_ANIM_THROW*/ {0,-1, 0,-1}, /*FMA_ANIM_HIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDEIDLE*/ {0,-1, 0,-1}, /*FMA_ANIM_SIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITLOOKLEFT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITASLEEP*/ {0,-1, 0,-1}, /*FMA_ANIM_RUBHEAD*/ {0,-1, 0,-1}, }, }, { // Krusty {ACTORS_KRUSTY_SBK, (FileEquate)0,(FileEquate)0}, { /*FMA_ANIM_IDLE*/ {0,ANIM_KRUSTY_IDLEBREATHE, 0,-1}, /*FMA_ANIM_WALK*/ {0,-1, 0,-1}, /*FMA_ANIM_FIXTV*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVEEND*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVESTART*/ {0,-1, 0,-1}, /*FMA_ANIM_IDEA*/ {0,-1, 0,-1}, /*FMA_ANIM_QUICKEXIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SHOUT*/ {0,-1, 0,-1}, /*FMA_ANIM_STUMBLE*/ {0,-1, 0,-1}, /*FMA_ANIM_THROW*/ {0,-1, 0,-1}, /*FMA_ANIM_HIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDEIDLE*/ {0,-1, 0,-1}, /*FMA_ANIM_SIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITLOOKLEFT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITASLEEP*/ {0,-1, 0,-1}, /*FMA_ANIM_RUBHEAD*/ {0,-1, 0,-1}, }, }, { // Squidward {ACTORS_SQUIDWARD_SBK, (FileEquate)0,(FileEquate)0}, { /*FMA_ANIM_IDLE*/ {0,ANIM_SQUIDWARD_IDLEBREATHE, 0,-1}, /*FMA_ANIM_WALK*/ {0,-1, 0,-1}, /*FMA_ANIM_FIXTV*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVEEND*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVESTART*/ {0,-1, 0,-1}, /*FMA_ANIM_IDEA*/ {0,-1, 0,-1}, /*FMA_ANIM_QUICKEXIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SHOUT*/ {0,-1, 0,-1}, /*FMA_ANIM_STUMBLE*/ {0,-1, 0,-1}, /*FMA_ANIM_THROW*/ {0,-1, 0,-1}, /*FMA_ANIM_HIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDEIDLE*/ {0,-1, 0,-1}, /*FMA_ANIM_SIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITLOOKLEFT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITASLEEP*/ {0,-1, 0,-1}, /*FMA_ANIM_RUBHEAD*/ {0,-1, 0,-1}, }, }, { // Sandy {ACTORS_SANDY_SBK, (FileEquate)0,(FileEquate)0}, { /*FMA_ANIM_IDLE*/ {0,ANIM_SANDY_IDLE, 0,-1}, /*FMA_ANIM_WALK*/ {0,-1, 0,-1}, /*FMA_ANIM_FIXTV*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVEEND*/ {0,-1, 0,-1}, /*FMA_ANIM_GIVESTART*/ {0,-1, 0,-1}, /*FMA_ANIM_IDEA*/ {0,-1, 0,-1}, /*FMA_ANIM_QUICKEXIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SHOUT*/ {0,-1, 0,-1}, /*FMA_ANIM_STUMBLE*/ {0,-1, 0,-1}, /*FMA_ANIM_THROW*/ {0,-1, 0,-1}, /*FMA_ANIM_HIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDE*/ {0,-1, 0,-1}, /*FMA_ANIM_UNHIDEIDLE*/ {0,-1, 0,-1}, /*FMA_ANIM_SIT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITLOOKLEFT*/ {0,-1, 0,-1}, /*FMA_ANIM_SITASLEEP*/ {0,-1, 0,-1}, /*FMA_ANIM_RUBHEAD*/ {0,-1, 0,-1}, }, }, }; ACTOR_DATA m_actorData[FMA_NUM_ACTORS]; /*****************************************************************************/ /*** Intro FMA ***************************************************************/ /*****************************************************************************/ static const int s_FMAIntroScript[]= { SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH1_00_DAT, 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, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,80*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SPONGEBOB,true, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_GARY,FMA_ANIM_IDLE,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_GARY,84*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_GARY,1, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_GARY,true, SC_SNAP_CAMERA_TO, 67*16,18*16, SC_WAIT_ON_TIMER, 60, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH1_00_DAT, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,60*16,30*16,60*2, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_GARY,FMA_ANIM_WALK,1, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_GARY,64*16,30*16,60*3, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, // SC_WAIT_ON_TIMER, 60*2, // Scene 2 - Shady shoals with BB & MM SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_IDLE,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,11*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_MM,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_MM,true, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,60*16,30*16,60*2, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_IDLE,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_BB,17*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_BB,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_BB,true, SC_SNAP_CAMERA_TO, 4*16,18*16, SC_WAIT_ON_TIMER, 60, // Scene 3 - SB Arives SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,40*16,30*16, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,24*16,30*16,60*2, SC_SET_ACTOR_POSITION, FMA_ACTOR_GARY,44*16,30*16, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_GARY,28*16,30*16,60*3, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_GARY, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_GARY,FMA_ANIM_IDLE,1, // Scene 4 - SB talks to em // Scene 5 - MM gives task SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH1_01_DAT, // Scene 7 - SB Leaves SC_WAIT_ON_TIMER, 60, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH1_02_DAT, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_QUICKEXIT,0, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, SC_WAIT_ON_ACTOR_ANIM, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_RUBHEAD,1, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,40*16,30*16,30, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, // Scene 8 - Back to Gary, for non funny end SC_SET_ACTOR_FACING, FMA_ACTOR_GARY,0, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_GARY,30*16,30*16,60, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_GARY, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH1_03_DAT, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_GARY,44*16,30*16,60*2, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_GARY, SC_STOP }; /*****************************************************************************/ /*** C1 End FMA **************************************************************/ /*****************************************************************************/ static const int s_FMAC1EndScript[]= { SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH2_00_DAT, 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, SC_WAIT_ON_TIMER, 60*2, // Scene 2 - inside Shady Shoals SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_SITASLEEP,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,208*16,(30*16)+8, SC_SET_ACTOR_FACING, FMA_ACTOR_MM,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_MM,true, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_SITASLEEP,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_BB,211*16,(30*16)+8, SC_SET_ACTOR_FACING, FMA_ACTOR_BB,1, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_BB,true, SC_CREATE_FX, 0,207*16,(26*16),CFX::FX_TYPE_ZZZZ, SC_CREATE_FX, 1,211*16,(26*16),CFX::FX_TYPE_ZZZZ, SC_SNAP_CAMERA_TO, 197*16,18*16, SC_WAIT_ON_TIMER, 30, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH2_00_DAT, SC_WAIT_ON_TIMER, 30, // Scene 3 - SB enter by door SC_MOVE_CAMERA_TO, 235*16,18*16,60, SC_WAIT_ON_CAMERA_STOP, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,270*16,30*16, 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_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,260*16,30*16,40, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,230*16,30*16,120, SC_MOVE_CAMERA_TO, 210*16,18*16,120, SC_WAIT_ON_CAMERA_STOP, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_STUMBLE,0, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH2_01_DAT, SC_THROW_ITEM_TO_ACTOR, 0,FMA_ACTOR_MM,48,120, // scene 6 - sarnie flys thru the air // SC_SPRITE_SHIT SC_MOVE_CAMERA_TO, 197*16,18*16,120, SC_WAIT_ON_ACTOR_ANIM, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,216*16,30*16,56, SC_WAIT_ON_CAMERA_STOP, SC_WAIT_ON_THROWN_ITEM, 0, // Scene 7 - MM Eats sarnie SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, SC_KILL_FX, 1, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_SITLOOKLEFT,1, SC_SET_ACTOR_FACING, FMA_ACTOR_BB,0, SC_WAIT_ON_TIMER, 30, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH2_02_DAT, // Scene 8 - SB Leaves SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH2_03_DAT, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_QUICKEXIT,0, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, SC_WAIT_ON_ACTOR_ANIM, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,240*16,30*16,40, // SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_RUBHEAD,1, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_STOP }; /*****************************************************************************/ /*** C2 End FMA **************************************************************/ /*****************************************************************************/ 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, SC_WAIT_ON_TIMER, 60*2, // Scene 2 - inside Shady Shoals SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_SITASLEEP,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,208*16,(30*16)+8, SC_SET_ACTOR_FACING, FMA_ACTOR_MM,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_MM,true, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_SITASLEEP,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_BB,211*16,(30*16)+8, SC_SET_ACTOR_FACING, FMA_ACTOR_BB,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_BB,true, SC_CREATE_FX, 0,207*16,(26*16),CFX::FX_TYPE_ZZZZ, SC_CREATE_FX, 1,211*16,(26*16),CFX::FX_TYPE_ZZZZ, SC_SNAP_CAMERA_TO, 197*16,18*16, SC_WAIT_ON_TIMER, 60, // Scene 3 - SB enter by door SC_MOVE_CAMERA_TO, 235*16,18*16,60, SC_WAIT_ON_CAMERA_STOP, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,270*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SPONGEBOB,true, SC_SET_ITEM, 0,FRM__MAKEUPBAG, SC_CARRY_ITEM, 0,FMA_ACTOR_SPONGEBOB, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,260*16,30*16,40, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH3_00_DAT, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,216*16,30*16,216, SC_MOVE_CAMERA_TO, 197*16,18*16,200, SC_WAIT_ON_CAMERA_STOP, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, SC_CARRY_ITEM, 0,FMA_ACTOR_BB, // Scene 7 - BB gives new task SC_KILL_FX, 1, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_SITLOOKLEFT,1, SC_WAIT_ON_TIMER, 30, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH3_01_DAT, // Scene 8 - SB Leaves SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH3_02_DAT, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_QUICKEXIT,0, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, SC_WAIT_ON_ACTOR_ANIM, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,240*16,30*16,40, // SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_RUBHEAD,1, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_STOP }; /*****************************************************************************/ /*** C3 End FMA **************************************************************/ /*****************************************************************************/ 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, SC_WAIT_ON_TIMER, 30, // Scene 2 - SB arrives outside Shady Shoals SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,40*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SPONGEBOB,true, SC_SET_ITEM, 0,FRM__UNIFORM, SC_CARRY_ITEM, 0,FMA_ACTOR_SPONGEBOB, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,14*16,30*16,104, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH4_00_DAT, // Scene 3 - inside Shady Shoals SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_SIT,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,208*16,(30*16)+8, SC_SET_ACTOR_FACING, FMA_ACTOR_MM,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_MM,true, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_SIT,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_BB,211*16,(30*16)+8, SC_SET_ACTOR_FACING, FMA_ACTOR_BB,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_BB,true, SC_SNAP_CAMERA_TO, 197*16,18*16, SC_WAIT_ON_TIMER, 5, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_SITLOOKLEFT,1, SC_WAIT_ON_TIMER, 5, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH4_01_DAT, SC_WAIT_ON_TIMER, 30, // Scene 4 - SB enter by door, and runs over to them SC_MOVE_CAMERA_TO, 235*16,18*16,60, SC_WAIT_ON_CAMERA_STOP, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_HIDE,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,220*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_MM,1, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_HIDE,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_BB,204*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_BB,0, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,270*16,30*16, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,260*16,30*16,40, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,210*16,30*16,248, SC_MOVE_CAMERA_TO, 197*16,18*16,200, SC_WAIT_ON_CAMERA_STOP, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, // BB removes shade SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_UNHIDE,0, SC_WAIT_ON_ACTOR_ANIM, FMA_ACTOR_BB, SC_WAIT_ON_TIMER, 30, SC_THROW_ITEM_TO_ACTOR, 0,FMA_ACTOR_BB,28,60, SC_WAIT_ON_THROWN_ITEM, 0, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH4_02_DAT, // Scene 8 - SB Leaves SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_QUICKEXIT,0, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, SC_WAIT_ON_ACTOR_ANIM, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,240*16,30*16,40, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_RUBHEAD,1, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_STOP }; /*****************************************************************************/ /*** C4 End FMA **************************************************************/ /*****************************************************************************/ 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, SC_WAIT_ON_TIMER, 30, // Scene 2 - SB arrives outside Shady Shoals SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,405*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SPONGEBOB,true, SC_SET_ITEM, 0,FRM__KELP_BAR, SC_CARRY_ITEM, 0,FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_IDLE,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_BB,370*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_BB,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_BB,true, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,382*16,30*16,92, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH5_00_DAT, // SB throws bar thru window SC_THROW_ITEM_TO_ACTOR, 0,FMA_ACTOR_BB,50,120, SC_WAIT_ON_THROWN_ITEM, 0, // BB comes to Porthole SC_WAIT_ON_TIMER, 60*3, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_BB,374*16,30*16,60, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_BB, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH5_01_DAT, // Scene 8 - SB Leaves SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH5_02_DAT, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_QUICKEXIT,0, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, SC_WAIT_ON_ACTOR_ANIM, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,420*16,30*16,40, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_RUBHEAD,1, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_STOP }; /*****************************************************************************/ /*** C5 End FMA **************************************************************/ /*****************************************************************************/ static const int s_FMAC5EndScript[]= { SC_REGISTER_CONVERSATION, SCRIPTS_FMA_CH6_00_DAT, 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_SAVE, SC_START, // Scene 1 - Shade Shoals SC_SNAP_CAMERA_TO, 4*16,18*16, SC_WAIT_ON_TIMER, 30, // Scene 2 - SB arrives outside Shady Shoals SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,40*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SPONGEBOB,true, SC_SET_ITEM, 0,FRM__TOOLBOX, SC_CARRY_ITEM, 0,FMA_ACTOR_SPONGEBOB, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,16*16,30*16,96, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH6_00_DAT, // Scene 3 - SB Fixing TV SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_IDLE,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,224*16,30*16, 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,220*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_BB,1, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_BB,true, SC_SET_ITEM, 0,FRM__AUTOGRAPH, SC_CARRY_ITEM, 0,FMA_ACTOR_BB, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,206*16,30*16, SC_SNAP_CAMERA_TO, 197*16,18*16, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_FIXTV,1, SC_WAIT_ON_TIMER, 60, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH6_01_DAT, SC_WAIT_ON_TIMER, 60, // Scene 4 - Goes to BB, and collects his prize SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,216*16,30*16,44, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH6_02_DAT, SC_THROW_ITEM_TO_ACTOR, 0,FMA_ACTOR_SPONGEBOB,50,120, SC_WAIT_ON_THROWN_ITEM, 0, SC_WAIT_ON_TIMER, 60*1, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_QUICKEXIT,0, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, SC_WAIT_ON_ACTOR_ANIM, FMA_ACTOR_SPONGEBOB, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,240*16,30*16,40, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, // Scene 5 - SB leaves Shady Shoals SC_SNAP_CAMERA_TO, 4*16,18*16, SC_WAIT_ON_TIMER, 30, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,4*16,30*16, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,40*16,30*16,72, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, // Scene 6 - Back in shady SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_SIT,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,208*16,(30*16)+8, SC_SET_ACTOR_FACING, FMA_ACTOR_MM,0, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_BB,FMA_ANIM_SIT,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_BB,211*16,(30*16)+8, SC_SET_ACTOR_FACING, FMA_ACTOR_BB,0, SC_SNAP_CAMERA_TO, 197*16,18*16, SC_WAIT_ON_TIMER, 60, // Scene 7 - TV goes pop SC_CREATE_FX, 0,207*16,28*16,CFX::FX_TYPE_TV_EXPLODE, SC_WAIT_ON_TIMER, 60*3, // Scene 8 - Outside, MM & BB SCREEEEEEEEEEEEEEEAM SC_SNAP_CAMERA_TO, 4*16,18*16, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_CH6_03_DAT, SC_STOP }; /*****************************************************************************/ /*** Plankton FMA ************************************************************/ /*****************************************************************************/ 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, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,0*16,18*16, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SPONGEBOB,true, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,18*16,18*16,72, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,32*16,18*16,56, SC_MOVE_CAMERA_TO, 21*16,5*16,84, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, SC_WAIT_ON_CAMERA_STOP, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_PLANKTON,FMA_ANIM_IDLE,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_PLANKTON,42*16,18*16, SC_SET_ACTOR_FACING, FMA_ACTOR_PLANKTON,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_PLANKTON,true, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_PLANKTON_DAT, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_WALK,1, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,80*16,18*16,192, SC_MOVE_CAMERA_TO, 44*16,5*16,92, SC_WAIT_ON_CAMERA_STOP, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SNAP_CAMERA_TO, 91*16,5*16, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,114*16,18*16, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, SC_WALK_ACTOR_TO_POSITION, FMA_ACTOR_SPONGEBOB,108*16,18*16,24, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_SPONGEBOB,FMA_ANIM_IDLE,1, SC_WAIT_ON_TIMER, 60, SC_SET_FADE_TO_WHITE, SC_WAIT_ON_FADE, SC_WAIT_ON_TIMER, 60, 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_RUBHEAD,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_SPONGEBOB,340,225, SC_SET_ACTOR_FACING, FMA_ACTOR_SPONGEBOB,1, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SPONGEBOB,true, SC_SET_ACTOR_ANIM_STATE, FMA_ACTOR_MM,FMA_ANIM_IDLE,1, SC_SET_ACTOR_POSITION, FMA_ACTOR_MM,188,216, SC_SET_ACTOR_FACING, FMA_ACTOR_MM,0, 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,155,218, SC_SET_ACTOR_FACING, FMA_ACTOR_BB,0, 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,88,233, SC_SET_ACTOR_FACING, FMA_ACTOR_GARY,0, 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,415,230, SC_SET_ACTOR_FACING, FMA_ACTOR_PLANKTON,0, 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,282,211, SC_SET_ACTOR_FACING, FMA_ACTOR_PATRICK,0, 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,460,224, SC_SET_ACTOR_FACING, FMA_ACTOR_KRABS,0, 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,190, SC_SET_ACTOR_FACING, FMA_ACTOR_SQUIDWARD,0, 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,245,185, SC_SET_ACTOR_FACING, FMA_ACTOR_SANDY,0, SC_SET_ACTOR_VISIBILITY, FMA_ACTOR_SANDY,true, SC_WAIT_ON_TIMER, 60*2, SC_WAIT_ON_CONVERSATION, SCRIPTS_FMA_PARTY_DAT, SC_WAIT_ON_TIMER, 60*2, SC_SET_GLOBAL_ANIMATION, false, SC_WAIT_ON_TIMER, 60*1, SC_SET_DRAW_SCREEN_AS_WHITE,true, SC_WAIT_ON_TIMER, 60*1, SC_SET_FADE_FROM_WHITE, SC_SET_DRAW_SCREEN_AS_WHITE,false, SC_WAIT_ON_TIMER, 60*5, SC_STOP }; static const int *s_fmaScripts[CFmaScene::NUM_FMA_SCRIPTS]= { s_FMAIntroScript, s_FMAC1EndScript, s_FMAC2EndScript, s_FMAC3EndScript, s_FMAC4EndScript, s_FMAC5EndScript, s_FMAPlanktonScript, s_FMAPartyScript, }; int s_chosenScript=CFmaScene::FMA_SCRIPT__PARTY; /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CFmaScene::init() { int i; ACTOR_DATA *actor; CLevel::DisplayLoadingScreen(-2); m_level=NULL; m_party=NULL; CThingManager::init(); CConversation::init(); m_cameraPos.vx=30; m_cameraPos.vy=280; m_cameraMoving=false; m_readyToShutdown=false; CActorPool::Reset(); actor=m_actorData; for(i=0;im_gfx[b]=0; if (s_actorGraphicsData[i].m_file[b]) { actor->m_gfx[b]=CActorPool::GetActor(s_actorGraphicsData[i].m_file[b]); } } actor->m_active=false; actor->m_animState=FMA_ANIM_IDLE; actor->m_animLoop=0; actor->m_animFrame=0; actor->m_pos.vx=0; actor->m_pos.vy=0; actor->m_ItemOfs.vx=0; actor->m_ItemOfs.vy=0; actor->m_moving=false; actor->m_facing=0; actor++; } for (i=0; ishutdown(); delete m_level; } if(m_party) { m_party->shutdown(); delete m_party; } CSoundMediator::dumpSong(); CSoundMediator::stopAllSound(); CConversation::shutdown(); CThingManager::shutdown(); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CFmaScene::render() { if(m_drawScreenAsWhite) { POLY_F4 *f4; f4=GetPrimF4(); setXYWH(f4,0,0,512,256); setRGB0(f4,255,255,255); AddPrimToList(f4,0); return; } int i; ACTOR_DATA *actor; sItemData *item; CGameScene::setCameraMtx(); CThingManager::renderAllThings(); CConversation::render(); if(m_level) { m_level->render(); } else if(m_party) { m_party->render(); } actor=m_actorData; for(i=0;im_active) { // need clipping here DVECTOR pos; pos.vx=actor->m_pos.vx-m_cameraPos.vx; pos.vy=actor->m_pos.vy-m_cameraPos.vy; int AnimNo,AnimBank; int facing; ASSERT(s_actorGraphicsData[i].m_anims[actor->m_animState].Anim!=-1); AnimNo=s_actorGraphicsData[i].m_anims[actor->m_animState].Anim; AnimBank=s_actorGraphicsData[i].m_anims[actor->m_animState].Bank; actor->m_gfx[AnimBank]->Render(pos,AnimNo,actor->m_animFrame,actor->m_facing); } actor++; } item=m_itemData; for (i=0; im_visible) { SpriteBank *sb; sFrameHdr *fh; DVECTOR pos; sb=CGameScene::getSpriteBank(); fh=sb->getFrameHeader(item->m_Frame); pos.vx=item->m_Pos.vx-m_cameraPos.vx+(fh->W/2); if(!item->m_facing)pos.vx-=fh->W; pos.vy=item->m_Pos.vy-m_cameraPos.vy-fh->H; sb->printFT4(fh,pos.vx,pos.vy,item->m_facing,0,OTPOS__PICKUP_POS-3); } item++; } CActorPool::CleanUpCache(); #if defined (__USER_paul__) || defined (__USER_daveo__) FontBank *font; char buf[20]; font=new ("Font") FontBank(); font->initialise(&standardFont); sprintf(buf,"%d,%d",m_cameraPos.vx,m_cameraPos.vy); font->print(400,30,buf); font->dump(); delete font; #endif } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CFmaScene::think(int _frames) { #if defined (__USER_paul__) || defined (__USER_daveo__) if (PadGetHeld(0)&PAD_L1) { if(PadGetHeld(0)&PAD_UP) m_cameraPos.vy-=16; if(PadGetHeld(0)&PAD_DOWN) m_cameraPos.vy+=16; if(PadGetHeld(0)&PAD_LEFT) m_cameraPos.vx-=16; if(PadGetHeld(0)&PAD_RIGHT) m_cameraPos.vx+=16; } #endif if(!CFader::isFading()&&m_tuneLoaded&&!m_musicPlaying) { CSoundMediator::playSong(); m_musicPlaying=true; } for(int i=0;i<_frames;i++) { if(m_scriptRunning) { int i; ACTOR_DATA *actor; actor=m_actorData; for(i=0;im_active) { // Move actor? if(actor->m_moving) { int totalFrames,currentFrame; totalFrames=actor->m_endMoveFrame-actor->m_startMoveFrame; currentFrame=totalFrames-(actor->m_endMoveFrame-m_frameCount); if(currentFrame==0) { actor->m_pos=actor->m_startMovePos; } else if(currentFrame==totalFrames) { actor->m_pos=actor->m_endMovePos; actor->m_moving=false; } else { actor->m_pos.vx=actor->m_startMovePos.vx+(((actor->m_endMovePos.vx-actor->m_startMovePos.vx)*currentFrame)/totalFrames); actor->m_pos.vy=actor->m_startMovePos.vy+(((actor->m_endMovePos.vy-actor->m_startMovePos.vy)*currentFrame)/totalFrames); } } } // Anim if(m_globalAnimationFlag) { actor->m_animFrame++; int AnimBank=s_actorGraphicsData[i].m_anims[actor->m_animState].Bank; int AnimNo=s_actorGraphicsData[i].m_anims[actor->m_animState].Anim; int LastFrame=actor->m_gfx[AnimBank]->getFrameCount(AnimNo)-1; if(actor->m_animFrame>=LastFrame) { if (actor->m_animLoop) { // Loop anim actor->m_animFrame=0; } else { // hold on last frame actor->m_animFrame=LastFrame; } } // Is there an item anim for this anim? AnimNo=s_actorGraphicsData[i].m_anims[actor->m_animState].itemAnim; if(AnimNo!=-1) { // Yeah.. grab the item offsets and remember them int x,y; AnimBank=s_actorGraphicsData[i].m_anims[actor->m_animState].itemBank; actor->m_gfx[AnimBank]->getFrameOffsets(AnimNo,actor->m_animFrame,&x,&y); actor->m_ItemOfs.vx=x; actor->m_ItemOfs.vy=y; } } actor++; } // Move Camera if(m_cameraMoving) { int totalFrames,currentFrame; totalFrames=m_endCameraFrame-m_startCameraFrame; currentFrame=totalFrames-(m_endCameraFrame-m_frameCount); if(currentFrame==0) { m_cameraPos=m_startCameraPos; } else if(currentFrame==totalFrames) { m_cameraPos=m_endCameraPos; m_cameraMoving=false; } else { m_cameraPos.vx=m_startCameraPos.vx+(((m_endCameraPos.vx-m_startCameraPos.vx)*currentFrame)/totalFrames); m_cameraPos.vy=m_startCameraPos.vy+(((m_endCameraPos.vy-m_startCameraPos.vy)*currentFrame)/totalFrames); } } // Handle Item for (i=0; im_TargetActor!=-1) { // 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; } } else if (item->m_Actor!=-1) { ACTOR_DATA *actor=&m_actorData[item->m_Actor]; const ACTOR_GRAPHICS_DATA *actorGraphics=&s_actorGraphicsData[item->m_Actor]; // Being carried by an actor item->m_Pos=actor->m_pos; item->m_facing=actor->m_facing; item->m_Pos.vx+=item->m_facing?-actor->m_ItemOfs.vx:actor->m_ItemOfs.vx; item->m_Pos.vy+=actor->m_ItemOfs.vy; } } // Process script do { if(!m_stillProcessingCommand) { startNextScriptCommand(); } if(m_stillProcessingCommand) { processCurrentScriptCommand(); } } while(!m_doOtherProcessing); } if(*m_pc!=SC_WAIT_ON_CONVERSATION) { m_frameCount++; } } if(!CFader::isFading()&&PadGetHeld(0) & PAD_START) { // Give player an exit option!! m_scriptRunning=false; m_doOtherProcessing=true; } if(m_scriptRunning==false&&!m_readyToShutdown) { startShutdown(); } CThingManager::thinkAllThings(_frames); CConversation::think(_frames); if(m_level) { m_level->setCameraCentre(m_cameraPos); m_level->think(_frames); } else if(m_party) { m_party->think(_frames); } } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ int CFmaScene::readyToShutdown() { return m_readyToShutdown&&!CFader::isFading(); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CFmaScene::selectFma(FMA_SCRIPT_NUMBER _fma) { s_chosenScript=_fma; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CFmaScene::startShutdown() { CSoundMediator::stopSpeech(); CFader::setFadingOut(); m_readyToShutdown=true; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CFmaScene::startNextScriptCommand() { m_stillProcessingCommand=false; m_doOtherProcessing=false; 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_SET_NEXT_FMA_NUMBER: // fmaNumber m_pc++; selectFma((FMA_SCRIPT_NUMBER)*(m_pc++)); break; case SC_SET_FADE_TO_BLACK: // m_pc++; CFader::setFadingOut(CFader::BLACK_FADE); break; case SC_SET_FADE_TO_WHITE: // m_pc++; CFader::setFadingOut(CFader::WHITE_FADE); break; case SC_SET_FADE_FROM_WHITE: // m_pc++; CFader::setFadingIn(CFader::WHITE_FADE); break; case SC_SET_DRAW_SCREEN_AS_WHITE:// on/off m_pc++; m_drawScreenAsWhite=*m_pc++; break; case SC_SNAP_CAMERA_TO: // x,y m_pc++; m_cameraPos.vx=*m_pc++; m_cameraPos.vy=*m_pc++; break; case SC_MOVE_CAMERA_TO: // x,y,frames m_pc++; m_cameraMoving=true; m_startCameraPos=m_cameraPos; m_startCameraFrame=m_frameCount; m_endCameraPos.vx=*m_pc++; m_endCameraPos.vy=*m_pc++; m_endCameraFrame=m_frameCount+*m_pc++; break; case SC_REGISTER_CONVERSATION: // scriptId m_pc++; CConversation::registerConversationScript((FileEquate)*(m_pc++)); break; case SC_WAIT_ON_TIMER: // frames m_timer=*(m_pc+1); m_stillProcessingCommand=true; break; case SC_WAIT_ON_ACTOR_STOP: // actor m_stillProcessingCommand=true; break; case SC_WAIT_ON_ACTOR_ANIM: // actor m_stillProcessingCommand=true; break; case SC_WAIT_ON_CAMERA_STOP: // m_stillProcessingCommand=true; break; case SC_WAIT_ON_CONVERSATION: // scriptId CConversation::trigger((FileEquate)*(m_pc+1)); m_stillProcessingCommand=true; break; case SC_WAIT_ON_THROWN_ITEM: // item m_stillProcessingCommand=true; break; case SC_WAIT_ON_FADE: // m_stillProcessingCommand=true; break; case SC_SET_ACTOR_VISIBILITY: // actor,on/off { ACTOR_DATA *actor; m_pc++; actor=&m_actorData[*m_pc++]; actor->m_active=*m_pc++; } break; case SC_SET_ACTOR_POSITION: // actor,x,y { ACTOR_DATA *actor; m_pc++; actor=&m_actorData[*m_pc++]; actor->m_pos.vx=*m_pc++; actor->m_pos.vy=*m_pc++; } break; case SC_SET_ACTOR_FACING: // actor,facing { ACTOR_DATA *actor; m_pc++; actor=&m_actorData[*m_pc++]; actor->m_facing=*m_pc++; } break; case SC_SET_ACTOR_ANIM_STATE: // actor,state { ACTOR_DATA *actor; m_pc++; actor=&m_actorData[*m_pc++]; actor->m_animState=*m_pc++; actor->m_animLoop=*m_pc++; actor->m_animFrame=0; } break; case SC_WALK_ACTOR_TO_POSITION: // actor,x,y,frames { ACTOR_DATA *actor; m_pc++; actor=&m_actorData[*m_pc++]; actor->m_startMoveFrame=m_frameCount; actor->m_startMovePos=actor->m_pos; actor->m_endMovePos.vx=*m_pc++; actor->m_endMovePos.vy=*m_pc++; actor->m_endMoveFrame=m_frameCount+*m_pc++; actor->m_moving=true; } break; case SC_SET_GLOBAL_ANIMATION: // on/off { int flag; m_pc++; flag=*(m_pc++); m_globalAnimationFlag=flag; if(m_party)m_party->setAnimation(flag); } break; case SC_CREATE_FX: { int FXNo; int FXType; DVECTOR Pos; m_pc++; FXNo=*m_pc++; Pos.vx=*m_pc++; Pos.vy=*m_pc++; FXType=*m_pc++; m_FXTable[FXNo]=CFX::Create((CFX::FX_TYPE)FXType,Pos); } break; case SC_KILL_FX: { int FXNo; m_pc++; FXNo=*m_pc++; m_FXTable[FXNo]->killFX(); } break; case SC_SET_ITEM: // item, Frame { sItemData *item; m_pc++; item=&m_itemData[*m_pc++]; item->m_Frame=*m_pc++; } break; 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_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 const ACTOR_DATA *actor=&m_actorData[item->m_TargetActor]; item->m_TargetPos=actor->m_pos; if(actor->m_facing) { item->m_TargetPos.vx-=actor->m_ItemOfs.vx; } else { item->m_TargetPos.vx+=actor->m_ItemOfs.vx; } item->m_TargetPos.vy+=actor->m_ItemOfs.vy; item->m_startPos=item->m_Pos; } break; case SC_START: // m_pc++; CFader::setFadingIn(); m_doOtherProcessing=true; break; case SC_STOP: // m_scriptRunning=false; m_doOtherProcessing=true; break; default: ASSERT(!"Bad script command"); break; } } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CFmaScene::processCurrentScriptCommand() { switch(*m_pc) { case SC_USE_LEVEL: // levelNumber case SC_USE_PARTY: // case SC_SET_NEXT_SCENE: // nextScene case SC_SET_NEXT_FMA_NUMBER: // fmaNumber case SC_SET_FADE_TO_BLACK: // case SC_SET_FADE_TO_WHITE: // case SC_SET_FADE_FROM_WHITE: // case SC_SET_DRAW_SCREEN_AS_WHITE:// on/off case SC_SNAP_CAMERA_TO: // x,y case SC_MOVE_CAMERA_TO: // x,y,frames case SC_REGISTER_CONVERSATION: // scriptId case SC_SET_ACTOR_VISIBILITY: // actor,on/off case SC_SET_ACTOR_POSITION: // actor,x,y 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_SET_GLOBAL_ANIMATION: // on/off case SC_START: // case SC_STOP: // ASSERT(!"Shouldn't be here.."); break; case SC_WAIT_ON_TIMER: // frames if(m_timer--==0) { m_pc+=2; m_stillProcessingCommand=false; } else { m_doOtherProcessing=true; } break; case SC_WAIT_ON_ACTOR_STOP: // actor if(!m_actorData[*(m_pc+1)].m_moving) { m_pc+=2; m_stillProcessingCommand=false; } else { m_doOtherProcessing=true; } break; case SC_WAIT_ON_ACTOR_ANIM: // actor { int ThisActor=*(m_pc+1); ACTOR_DATA *actor=&m_actorData[ThisActor]; const ACTOR_GRAPHICS_DATA *actorGraphics=&s_actorGraphicsData[ThisActor]; int AnimBank=actorGraphics->m_anims[actor->m_animState].Bank; int AnimNo=actorGraphics->m_anims[actor->m_animState].Anim; int LastFrame=actor->m_gfx[AnimBank]->getFrameCount(AnimNo)-1; if(actor->m_animFrame>=LastFrame) { m_pc+=2; m_stillProcessingCommand=false; } else { m_doOtherProcessing=true; } } break; case SC_WAIT_ON_CAMERA_STOP: // if(!m_cameraMoving) { m_pc++; m_stillProcessingCommand=false; } else { m_doOtherProcessing=true; } break; case SC_WAIT_ON_CONVERSATION: // scriptId if(!CConversation::isActive()) { m_pc+=2; m_stillProcessingCommand=false; } else { m_doOtherProcessing=true; } 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; case SC_WAIT_ON_FADE: // if(!CFader::isFading()) { m_pc++; m_stillProcessingCommand=false; m_drawScreenAsWhite=true; } else { m_doOtherProcessing=true; } break; default: ASSERT(!"Bad script command"); break; } } /*=========================================================================== end */