diff options
| -rw-r--r-- | src/bonusRoom.cpp | 81 | 
1 files changed, 63 insertions, 18 deletions
diff --git a/src/bonusRoom.cpp b/src/bonusRoom.cpp index 7b795f6..b7fd395 100644 --- a/src/bonusRoom.cpp +++ b/src/bonusRoom.cpp @@ -4,12 +4,16 @@  #include <sfx.h>  #include <stage.h> +extern "C" void *MakeMarioEnterDemoMode(); +extern "C" void *MakeMarioExitDemoMode();  extern "C" bool SpawnEffect(const char*, int, Vec*, S16Vec*, Vec*);  extern "C" void *StopBGMMusic();  extern "C" void *StartBGMMusic();  extern "C" void *SoundRelatedClass;  extern "C" void *MapSoundPlayer(void *SoundClass, int soundID, int unk); +// THIS IS A DUMB NAME +extern bool NoMichaelBuble;  int Songs[16][4][16][3] = {  @@ -367,18 +371,20 @@ void dSongPrize::beginState_Shrink() {  	// /* keysX[i] = { frame, value, slope }; */  	keysX[0] = (HermiteKey){ 0.0, pos.x, 0.8 };  	keysY[0] = (HermiteKey){ 0.0, pos.y, 0.8 }; -	keysS[0] = (HermiteKey){ 0.0, 3.0, 0.8 }; +	keysS[0] = (HermiteKey){ 0.0, 3.0, -0.8 };  	keysX[1] = (HermiteKey){ 60.0, pos.x + (30.0 * queue) - 172.0, 1.0 };  	keysY[1] = (HermiteKey){ 60.0, pos.y + 64.0, 1.0 }; -	keysS[1] = (HermiteKey){ 60.0, 1.0, 1.0 };	 +	keysS[1] = (HermiteKey){ 60.0, 1.0, 0.0 };	  }  void dSongPrize::executeState_Shrink() {  	float modX = GetHermiteCurveValue(timer, keysX, Xkey_count);  	float modY = GetHermiteCurveValue(timer, keysY, Ykey_count); -	float modS = GetHermiteCurveValue(timer, keysS, Skey_count); +	//float modS = GetHermiteCurveValue(timer, keysS, Skey_count); +	float modS = 3.0f - (timer * (2.0f / 60.0f));  	pos = (Vec){ modX, modY, pos.z }; +	//OSReport("Item scale according to Hermite Keys: %f from frame %d\n", modS, timer);  	scale = (Vec){ modS, modS, modS };  	if (timer == 60) { doStateChange(&StateID_Wait); } @@ -462,7 +468,7 @@ class dSingAlong : public dStageActor_c {  		int onExecute();  		int onDraw(); -		int beforeExecute() { return true; } +		//int beforeExecute() { return true; }  		int afterExecute(int) { return true; }  		dSingAlong() : state(this, &StateID_Intro) { } @@ -519,6 +525,7 @@ dSingAlong *dSingAlong::build() {  /*****************************************************************************/  // Events  int dSingAlong::onCreate() { +	NoMichaelBuble = true;  	OSReport("Creating the Sing Along gang.");  	// Load in the settings @@ -608,6 +615,7 @@ CREATE_STATE(dSingAlong, Intro);  void dSingAlong::beginState_Intro() {}  void dSingAlong::endState_Intro() {}  void dSingAlong::executeState_Intro() { +	MakeMarioEnterDemoMode();  	state.setState(&StateID_Prize);  } @@ -712,7 +720,9 @@ void dSingAlong::executeState_Call() {  	timer += 1;  } -void dSingAlong::endState_Call() {} +void dSingAlong::endState_Call() { +	MakeMarioExitDemoMode(); +}  /*****************************************************************************/ @@ -729,6 +739,7 @@ void dSingAlong::executeState_Response() {  	if (Songs[song][chorus][currentNote][0] == 0) {  		isResponding = 0;  		OSReport("Switching to some other mode: %d", isResponding); +		MakeMarioEnterDemoMode();  		state.setState(&StateID_Prize);  	}  } @@ -750,8 +761,13 @@ void dSingAlong::beginState_Failure() {  	SBf->unglow();   	SBg->unglow();  +	MakeMarioEnterDemoMode();  }  void dSingAlong::executeState_Failure() { +	if (timer == 5 && chorus == 0) +		for (int i = 0; i < 4; i++) +			if (dAcPy_c *player = dAcPy_c::findByID(i)) +				player->setAnimePlayWithAnimID(dm_surprise);  	// Play a success/failure sound  	if (timer == 20) { @@ -760,17 +776,29 @@ void dSingAlong::executeState_Failure() {  		StopBGMMusic();  	} +	if (timer == 260 && chorus > 0) { +		nw4r::snd::SoundHandle handle; +		PlaySoundWithFunctionB4(SoundRelatedClass, &handle, STRM_BGM_MINIGAME_FANFARE_GOOD, 1); +		for (int i = 0; i < 4; i++) +			if (dAcPy_c *player = dAcPy_c::findByID(i)) { +				player->setAnimePlayWithAnimID(dm_glad); +				player->setFlag(0x24); +			} +	} +  	// Delete the big powerup with a poof if it's fail  	if (timer == 30*1) {  		SpawnEffect("Wm_en_blockcloud", 0, &(Vec){pos.x, pos.y+32.0, pos.z+500.0}, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5});  		nw4r::snd::SoundHandle handle;  		PlaySoundWithFunctionB4(SoundRelatedClass, &handle, SE_MG_IH_NOPAIR_OK, 1);  		PrizeModel->Delete(1); +		if (chorus == 0) +			timer += 140;  	}  	// Make the banked powerups do a little dance/effect  	// Play a sound for each powerup gained -	if (timer == 30*5) { +	if (timer == 30*9) {  		if (chorus >= 1) {  			Pa->doStateChange(&dSongPrize::StateID_Spin);  			nw4r::snd::SoundHandle handle; @@ -781,7 +809,7 @@ void dSingAlong::executeState_Failure() {  		}  	} -	if (timer == 30*6) { +	if (timer == 30*10) {  		if (chorus >= 2) {  			Pb->doStateChange(&dSongPrize::StateID_Spin);  			nw4r::snd::SoundHandle handle; @@ -792,7 +820,7 @@ void dSingAlong::executeState_Failure() {  		}  	} -	if (timer == 30*6) { +	if (timer == 30*11) {  		if (chorus >= 3) {  			Pc->doStateChange(&dSongPrize::StateID_Spin);  			nw4r::snd::SoundHandle handle; @@ -804,22 +832,22 @@ void dSingAlong::executeState_Failure() {  	}  	// If victory, make mario do a little dance/sound -	if (timer == 30*8) { +	if (timer == 30*13) {  		nw4r::snd::SoundHandle handle1, handle2, handle3, handle4;  		if (GetSpecificPlayerActor(0) != 0) -			PlaySoundWithFunctionB4(SoundRelatedClass, &handle1, SE_VOC_MA_GAME_OVER, 1); +			PlaySoundWithFunctionB4(SoundRelatedClass, &handle1, (chorus == 0) ? SE_VOC_MA_CS_COURSE_MISS : SE_VOC_MA_CLEAR_MULTI, 1);  		if (GetSpecificPlayerActor(1) != 0) -			PlaySoundWithFunctionB4(SoundRelatedClass, &handle1, SE_VOC_LU_GAME_OVER, 1); +			PlaySoundWithFunctionB4(SoundRelatedClass, &handle2, (chorus == 0) ? SE_VOC_LU_CS_COURSE_MISS : SE_VOC_LU_CLEAR_MULTI, 1);  		if (GetSpecificPlayerActor(2) != 0) -			PlaySoundWithFunctionB4(SoundRelatedClass, &handle1, SE_VOC_KO_GAME_OVER, 1); +			PlaySoundWithFunctionB4(SoundRelatedClass, &handle3, (chorus == 0) ? SE_VOC_KO_CS_COURSE_MISS : SE_VOC_KO_CLEAR_MULTI, 1);  		if (GetSpecificPlayerActor(3) != 0) -			PlaySoundWithFunctionB4(SoundRelatedClass, &handle1, SE_VOC_KO2_GAME_OVER, 1); +			PlaySoundWithFunctionB4(SoundRelatedClass, &handle4, (chorus == 0) ? SE_VOC_KO2_CS_COURSE_MISS : SE_VOC_KO2_CLEAR_MULTI, 1);  	}  	// Add the powerups and exit the stage -	if (timer == 30*10) { +	if (timer == 30*15) {  		this->addPowerups();  		ExitStage(WORLD_MAP, 0, BEAT_LEVEL, MARIO_WIPE);  	} @@ -834,8 +862,16 @@ CREATE_STATE(dSingAlong, Win);  void dSingAlong::beginState_Win() {  	this->timer = 0; +	MakeMarioEnterDemoMode();  }  void dSingAlong::executeState_Win() { +	if (timer == 5) +		for (int i = 0; i < 4; i++) +			if (dAcPy_c *player = dAcPy_c::findByID(i)) { +				player->setAnimePlayWithAnimID(dm_glad); +				player->setFlag(0x24); +			} +  	// Play a success/failure sound  	if (timer == 30) {  		nw4r::snd::SoundHandle handle; @@ -846,7 +882,16 @@ void dSingAlong::executeState_Win() {  	// Make the banked powerups do a little dance/effect  	// Play a sound for each powerup gained  	if (timer == 30*3 || timer == 30*4 || timer == 30*5 || timer == 30*6) { -		Pa->doStateChange(&dSongPrize::StateID_Spin); +		dSongPrize *bullshit = 0; +		if (timer == 30*3) +			bullshit = Pa; +		else if (timer == 30*4) +			bullshit = Pb; +		else if (timer == 30*5) +			bullshit = Pc; +		else if (timer == 30*6) +			bullshit = Pd; +		bullshit->doStateChange(&dSongPrize::StateID_Spin);  		nw4r::snd::SoundHandle handle;  		PlaySoundWithFunctionB4(SoundRelatedClass, &handle, SE_OBJ_ITEM_FROM_KINOPIO, 1);  	} @@ -858,11 +903,11 @@ void dSingAlong::executeState_Win() {  		if (GetSpecificPlayerActor(0) != 0)  			PlaySoundWithFunctionB4(SoundRelatedClass, &handle1, SE_VOC_MA_CLEAR_MULTI, 1);  		if (GetSpecificPlayerActor(1) != 0) -			PlaySoundWithFunctionB4(SoundRelatedClass, &handle1, SE_VOC_LU_CLEAR_MULTI, 1); +			PlaySoundWithFunctionB4(SoundRelatedClass, &handle2, SE_VOC_LU_CLEAR_MULTI, 1);  		if (GetSpecificPlayerActor(2) != 0) -			PlaySoundWithFunctionB4(SoundRelatedClass, &handle1, SE_VOC_KO_CLEAR_MULTI, 1); +			PlaySoundWithFunctionB4(SoundRelatedClass, &handle3, SE_VOC_KO_CLEAR_MULTI, 1);  		if (GetSpecificPlayerActor(3) != 0) -			PlaySoundWithFunctionB4(SoundRelatedClass, &handle1, SE_VOC_KO2_CLEAR_MULTI, 1); +			PlaySoundWithFunctionB4(SoundRelatedClass, &handle4, SE_VOC_KO2_CLEAR_MULTI, 1);  		SpawnEffect("Wm_ob_fireworks_y", 0, &(Vec){pos.x-80.0, pos.y+20.0, pos.z+500.0}, &(S16Vec){0,0,0}, &(Vec){0.75, 0.75, 0.75});  	}  | 
