diff --git a/source/fma/fma.cpp b/source/fma/fma.cpp index bdf82874c..a8d0eabab 100644 --- a/source/fma/fma.cpp +++ b/source/fma/fma.cpp @@ -207,6 +207,9 @@ typedef enum SC_SET_NEXT_SCENE, // nextScene SC_SET_NEXT_FMA_NUMBER, // fmaNumber + SC_SET_FADE_TO_BLACK, // + SC_SET_FADE_TO_WHITE, // + SC_SNAP_CAMERA_TO, // x,y SC_MOVE_CAMERA_TO, // x,y,frames @@ -218,6 +221,7 @@ typedef enum 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 @@ -1090,13 +1094,16 @@ static const int s_FMAPlanktonScript[]= SC_WAIT_ON_CAMERA_STOP, SC_WAIT_ON_ACTOR_STOP, FMA_ACTOR_SPONGEBOB, - SC_SNAP_CAMERA_TO, 94*16,5*16, + 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 @@ -1183,7 +1190,7 @@ static const int *s_fmaScripts[CFmaScene::NUM_FMA_SCRIPTS]= -int s_chosenScript=CFmaScene::FMA_SCRIPT__CH1FINISHED; +int s_chosenScript=CFmaScene::FMA_SCRIPT__PLANKTON; /*---------------------------------------------------------------------- @@ -1265,6 +1272,8 @@ void CFmaScene::init() m_stillProcessingCommand=false; m_doOtherProcessing=false; StopLoad(); + + m_drawScreenAsWhite=false; } @@ -1311,6 +1320,16 @@ void CFmaScene::shutdown() ---------------------------------------------------------------------- */ 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; @@ -1666,6 +1685,16 @@ void CFmaScene::startNextScriptCommand() 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_SNAP_CAMERA_TO: // x,y m_pc++; m_cameraPos.vx=*m_pc++; @@ -1713,6 +1742,10 @@ void CFmaScene::startNextScriptCommand() m_stillProcessingCommand=true; break; + case SC_WAIT_ON_FADE: // + m_stillProcessingCommand=true; + break; + case SC_SET_ACTOR_VISIBILITY: // actor,on/off { ACTOR_DATA *actor; @@ -1887,6 +1920,8 @@ void CFmaScene::processCurrentScriptCommand() 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_SNAP_CAMERA_TO: // x,y case SC_MOVE_CAMERA_TO: // x,y,frames case SC_REGISTER_CONVERSATION: // scriptId @@ -1982,6 +2017,19 @@ void CFmaScene::processCurrentScriptCommand() } 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; diff --git a/source/fma/fma.h b/source/fma/fma.h index f48217822..f0193c6a0 100644 --- a/source/fma/fma.h +++ b/source/fma/fma.h @@ -97,6 +97,8 @@ private: int m_globalAnimationFlag; int m_readyToShutdown; + + int m_drawScreenAsWhite; };