From 49a5b67453f4c2f8ccf115bb00c55068b374185f Mon Sep 17 00:00:00 2001 From: Andrew Livy Date: Mon, 2 Jun 2003 11:31:13 +0000 Subject: [PATCH] Added: SelectMode, allows players to cycle between double/halfdouble/single on pump song select screen. Todo: Make it work for versus/make it more 'metricable' Added: More pump theme stuff Changed: Temporarily allowed Voodoo3 onto OGL renderer (DX looks horrid on my voodoo3 Bug?) --- stepmania/Data/VideoCards.ini | 2 +- stepmania/Themes/default/metrics.ini | 17 ++ stepmania/src/ModeSwitcher.cpp | 407 +++++++++++++++++++++++++ stepmania/src/ModeSwitcher.h | 44 +++ stepmania/src/NoteData.cpp | 1 + stepmania/src/ScreenEz2SelectMusic.cpp | 35 +++ stepmania/src/ScreenEz2SelectMusic.h | 3 +- 7 files changed, 507 insertions(+), 2 deletions(-) create mode 100644 stepmania/src/ModeSwitcher.cpp create mode 100644 stepmania/src/ModeSwitcher.h diff --git a/stepmania/Data/VideoCards.ini b/stepmania/Data/VideoCards.ini index 82352aa54e..9e2148148c 100644 --- a/stepmania/Data/VideoCards.ini +++ b/stepmania/Data/VideoCards.ini @@ -3,7 +3,7 @@ NumEntries=3 [0000] DriverRegex=Voodoo3|3dfx -Renderers=d3d +Renderers=opengl,d3d Width=640 Height=480 DisplayColor=16 diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index cdbf99d43d..6aa946a17a 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -22,6 +22,22 @@ WindowTitle=StepMania [Notes] DefaultScrollDirection=0 +[ModeSwitcher] +PrevModeX=-200 +PrevModeY=-170 +PrevIconX=-200 +PrevIconY=-120 +PrevModeZoom=0.8 +NextModeX=200 +NextModeY=-170 +NextIconX=200 +NextIconY=-120 +NextModeZoom=0.8 +CurrentModeX=0 +CurrentModeY=0 +CurrentModeZoom=1 + + [ScreenTitleMenu] LogoHomeOnCommand=x,320;y,240;zoomy,0;sleep,0.5;bounceend,0.5;zoomy,1;glowshift;effectperiod,2.5;effectcolor1,1,1,1,0.1;effectcolor2,1,1,1,0.3 LogoOnCommand=x,320;y,240;zoomy,0;sleep,0.5;bounceend,0.5;zoomy,1;glowshift;effectperiod,2.5;effectcolor1,1,1,1,0.1;effectcolor2,1,1,1,0.3 @@ -619,6 +635,7 @@ TimerSeconds=60 SampleMusicDelay=0.25 [ScreenEz2SelectMusic] +UseModeSwitcher=0 BalloonX=492 BalloonY=140 BalloonOnCommand=linear,0.2;zoomy,1;bob;effectmagnitude,0,10,0 diff --git a/stepmania/src/ModeSwitcher.cpp b/stepmania/src/ModeSwitcher.cpp new file mode 100644 index 0000000000..42fbd394bd --- /dev/null +++ b/stepmania/src/ModeSwitcher.cpp @@ -0,0 +1,407 @@ +#include "global.h" +/* +----------------------------------------------------------------------------- + Class: ModeSwitcher + + Desc: See header. + + Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. + Andrew Livy +----------------------------------------------------------------------------- +*/ + +#include "ModeSwitcher.h" +#include "RageUtil.h" +#include "GameState.h" +#include "PrefsManager.h" +#include "SongManager.h" +#include "ThemeManager.h" +#include "RageSoundManager.h" +#include "StyleDef.h" +#include "song.h" +#include "ActorUtil.h" + +#define PREVMODE_X THEME->GetMetricF("ModeSwitcher","PrevModeX") +#define PREVMODE_Y THEME->GetMetricF("ModeSwitcher","PrevModeY") +#define PREVMODE_ZOOM THEME->GetMetricF("ModeSwitcher","PrevModeZoom") +#define NEXTMODE_X THEME->GetMetricF("ModeSwitcher","NextModeX") +#define NEXTMODE_Y THEME->GetMetricF("ModeSwitcher","NextModeY") +#define NEXTMODE_ZOOM THEME->GetMetricF("ModeSwitcher","NextModeZoom") +#define NEXTICON_X THEME->GetMetricF("ModeSwitcher","NextIconX") +#define NEXTICON_Y THEME->GetMetricF("ModeSwitcher","NextIconY") +#define PREVICON_X THEME->GetMetricF("ModeSwitcher","PrevIconX") +#define PREVICON_Y THEME->GetMetricF("ModeSwitcher","PrevIconY") +#define CURRMODE_X THEME->GetMetricF("ModeSwitcher","CurrentModeX") +#define CURRMODE_Y THEME->GetMetricF("ModeSwitcher","CurrentModeY") +#define CURRMODE_ZOOM THEME->GetMetricF("ModeSwitcher","CurrentModeZoom") + +ModeSwitcher::ModeSwitcher() +{ + m_Nextmode.LoadFromFont( THEME->GetPathToF("ModeSwitcher stylenames") ); + m_Nextmode.SetXY(NEXTMODE_X,NEXTMODE_Y); + m_Nextmode.SetZoom(NEXTMODE_ZOOM); + m_Nextmode.SetText(GetNextStyleName()); + m_Prevmode.LoadFromFont( THEME->GetPathToF("ModeSwitcher stylenames") ); + m_Prevmode.SetXY(PREVMODE_X,PREVMODE_Y); + m_Prevmode.SetText(GetPrevStyleName()); + m_Prevmode.SetZoom(PREVMODE_ZOOM); + m_Stylename.LoadFromFont( THEME->GetPathToF("ModeSwitcher stylenames") ); + m_Stylename.SetXY(CURRMODE_X,CURRMODE_Y); + m_Stylename.SetText(GetStyleName()); + m_Stylename.SetZoom(CURRMODE_ZOOM); + + + m_NextIcon.Load( THEME->GetPathToG("ModeSwitcher nexticon")); + m_NextIcon.SetXY( NEXTICON_X, NEXTICON_Y); + m_PrevIcon.Load( THEME->GetPathToG("ModeSwitcher previcon")); + m_PrevIcon.SetXY( PREVICON_X, PREVICON_Y); + + this->AddChild( &m_NextIcon ); + this->AddChild( &m_PrevIcon ); + + this->AddChild(&m_Stylename); + this->AddChild(&m_Nextmode); + this->AddChild(&m_Prevmode); +} + +ModeSwitcher::~ModeSwitcher() +{ + +} + +CString ModeSwitcher::GetStyleName() +{ + CString sStyleName; + CString sDiff[2]; + + + switch(GAMESTATE->m_CurStyle) + { + case STYLE_PUMP_SINGLE: sStyleName = "SINGLE\n"; break; + case STYLE_PUMP_DOUBLE: sStyleName = "FULL-DOUBLE\n"; break; + case STYLE_PUMP_HALFDOUBLE: sStyleName = "HALFDOUBLE\n"; break; + default: sStyleName = ""; break; + } + + for(int i=0; i<2; i++) + { + if(GAMESTATE->IsPlayerEnabled(i)) + { + switch(GAMESTATE->m_PreferredDifficulty[i]) + { + case DIFFICULTY_BEGINNER: sDiff[i] = "Beginner\n"; break; + case DIFFICULTY_EASY: + { + if(GAMESTATE->m_CurGame == GAME_PUMP) + { + sDiff[i] = "Normal\n"; break; + } + else + { + sDiff[i] = "Light\n"; break; + } + } + case DIFFICULTY_MEDIUM: + { + if(GAMESTATE->m_CurGame == GAME_PUMP) + { + sDiff[i] = "Hard\n"; break; + } + else + { + sDiff[i] = "Standard\n"; break; + } + } + case DIFFICULTY_HARD: + { + if(GAMESTATE->m_CurGame == GAME_PUMP) + { + sDiff[i] = "Crazy\n"; break; + } + else + { + sDiff[i] = "Heavy\n"; break; + } + } + case DIFFICULTY_CHALLENGE: sDiff[i] = "Challenge\n"; break; + default: sDiff[i] = ""; break; + } + } + else + { + sDiff[i] = ""; + } + } + CString returnval; + returnval = sStyleName + sDiff[0] + sDiff[1]; + return returnval; +} + +CString ModeSwitcher::GetNextStyleName() +{ + CString sStyleName[2]; + CString sDiff[2]; + + for(int i=0; i<2; i++) + { + if(GAMESTATE->IsPlayerEnabled(i)) + { + if(GAMESTATE->m_PreferredDifficulty[i] != DIFFICULTY_CHALLENGE) + { + switch(GAMESTATE->m_CurStyle) + { + case STYLE_PUMP_SINGLE: sStyleName[i] = "SINGLE\n"; break; + case STYLE_PUMP_DOUBLE: sStyleName[i] = "FULL-DOUBLE\n"; break; + case STYLE_PUMP_HALFDOUBLE: sStyleName[i] = "HALFDOUBLE\n"; break; + default: sStyleName[i] = ""; break; + } + + switch(GAMESTATE->m_PreferredDifficulty[i]) + { + case DIFFICULTY_BEGINNER: + { + if(GAMESTATE->m_CurGame == GAME_PUMP) + { + sDiff[i] = "Normal\n"; break; + } + else + { + sDiff[i] = "Light\n"; break; + } + } + case DIFFICULTY_EASY: + { + if(GAMESTATE->m_CurGame == GAME_PUMP) + { + sDiff[i] = "Hard\n"; break; + } + else + { + sDiff[i] = "Standard\n"; break; + } + } + case DIFFICULTY_MEDIUM: + { + if(GAMESTATE->m_CurGame == GAME_PUMP) + { + sDiff[i] = "Crazy\n"; break; + } + else + { + sDiff[i] = "Heavy\n"; break; + } + } + case DIFFICULTY_HARD: sDiff[i] = "Challenge\n"; break; + case DIFFICULTY_CHALLENGE: sDiff[i] = "Beginner\n"; break; + default: sDiff[i] = ""; break; + } + } + else + { + switch(GAMESTATE->m_CurStyle) + { + case STYLE_PUMP_SINGLE: sStyleName[i] = "HALFDOUBLE\n"; break; + case STYLE_PUMP_DOUBLE: sStyleName[i] = "SINGLE\n"; break; + case STYLE_PUMP_HALFDOUBLE: sStyleName[i] = "FULL-DOUBLE\n"; break; + default: sStyleName[i] = ""; break; + } + sDiff[i] = "Beginner\n"; + } + } + else + { + sStyleName[i] = ""; + sDiff[i] = ""; + } + } + CString returnval; + returnval = sStyleName[0] + sDiff[0] + sStyleName[1] + sDiff[1]; + return returnval; +} + +CString ModeSwitcher::GetPrevStyleName() +{ + CString sStyleName[2]; + CString sDiff[2]; + + for(int i=0; i<2; i++) + { + if(GAMESTATE->IsPlayerEnabled(i)) + { + if(GAMESTATE->m_PreferredDifficulty[i] != DIFFICULTY_BEGINNER) + { + switch(GAMESTATE->m_CurStyle) + { + case STYLE_PUMP_SINGLE: sStyleName[i] = "SINGLE\n"; break; + case STYLE_PUMP_DOUBLE: sStyleName[i] = "FULL-DOUBLE\n"; break; + case STYLE_PUMP_HALFDOUBLE: sStyleName[i] = "HALFDOUBLE\n"; break; + default: sStyleName[i] = ""; break; + } + + switch(GAMESTATE->m_PreferredDifficulty[i]) + { + case DIFFICULTY_CHALLENGE: + { + if(GAMESTATE->m_CurGame == GAME_PUMP) + { + sDiff[i] = "Crazy\n"; break; + } + else + { + sDiff[i] = "Heavy\n"; break; + } + } + case DIFFICULTY_EASY: sDiff[i] = "Beginner\n"; break; + case DIFFICULTY_MEDIUM: + { + if(GAMESTATE->m_CurGame == GAME_PUMP) + { + sDiff[i] = "Normal\n"; break; + } + else + { + sDiff[i] = "Light\n"; break; + } + } + case DIFFICULTY_HARD: + { + if(GAMESTATE->m_CurGame == GAME_PUMP) + { + sDiff[i] = "Hard\n"; break; + } + else + { + sDiff[i] = "Standard\n"; break; + } + } + case DIFFICULTY_BEGINNER: sDiff[i] = "Challenge\n"; break; + default: sDiff[i] = ""; break; + } + } + else + { + switch(GAMESTATE->m_CurStyle) + { + case STYLE_PUMP_SINGLE: sStyleName[i] = "FULL-DOUBLE\n"; break; + case STYLE_PUMP_DOUBLE: sStyleName[i] = "HALFDOUBLE\n"; break; + case STYLE_PUMP_HALFDOUBLE: sStyleName[i] = "SINGLE\n"; break; + default: sStyleName[i] = ""; break; + } + sDiff[i] = "Challenge\n"; + } + } + else + { + sStyleName[i] = ""; + sDiff[i] = ""; + } + } + CString returnval; + returnval = sStyleName[0] + sDiff[0] + sStyleName[1] + sDiff[1]; + return returnval; +} + +void ModeSwitcher::NextMode(int pn) +{ + if(GAMESTATE->m_CurGame == GAME_PUMP) + { + if(GAMESTATE->IsPlayerEnabled(pn)) + { + if(GAMESTATE->m_PreferredDifficulty[pn] != DIFFICULTY_CHALLENGE) + { + switch(GAMESTATE->m_PreferredDifficulty[pn]) + { + case DIFFICULTY_BEGINNER: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_EASY; break; + case DIFFICULTY_EASY: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_MEDIUM; break; + case DIFFICULTY_MEDIUM: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_HARD; break; + case DIFFICULTY_HARD: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_CHALLENGE; break; + } + m_Stylename.SetText(GetStyleName()); + m_Nextmode.SetText(GetNextStyleName()); + m_Prevmode.SetText(GetPrevStyleName()); + return; + } + else + { + if(GAMESTATE->IsPlayerEnabled(PLAYER_1)) + GAMESTATE->m_PreferredDifficulty[PLAYER_1] = DIFFICULTY_BEGINNER; + if(GAMESTATE->IsPlayerEnabled(PLAYER_2)) + GAMESTATE->m_PreferredDifficulty[PLAYER_2] = DIFFICULTY_BEGINNER; + } + } + + int iStyle = GAMESTATE->m_CurStyle; + switch(iStyle) + { + case STYLE_PUMP_SINGLE: + { + GAMESTATE->m_CurStyle = STYLE_PUMP_HALFDOUBLE; + } + break; + case STYLE_PUMP_HALFDOUBLE: + { + GAMESTATE->m_CurStyle = STYLE_PUMP_DOUBLE; + } + break; + case STYLE_PUMP_DOUBLE: + { + GAMESTATE->m_CurStyle = STYLE_PUMP_SINGLE; + } + break; + } + } + m_Stylename.SetText(GetStyleName()); + m_Nextmode.SetText(GetNextStyleName()); + m_Prevmode.SetText(GetPrevStyleName()); +} + +void ModeSwitcher::PrevMode(int pn) +{ + if(GAMESTATE->IsPlayerEnabled(pn)) + { + if(GAMESTATE->m_PreferredDifficulty[pn] != DIFFICULTY_BEGINNER) + { + switch(GAMESTATE->m_PreferredDifficulty[pn]) + { + case DIFFICULTY_CHALLENGE: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_HARD; break; + case DIFFICULTY_EASY: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_BEGINNER; break; + case DIFFICULTY_MEDIUM: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_EASY; break; + case DIFFICULTY_HARD: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_MEDIUM; break; + } + m_Stylename.SetText(GetStyleName()); + m_Nextmode.SetText(GetNextStyleName()); + m_Prevmode.SetText(GetPrevStyleName()); + return; + } + else + { + if(GAMESTATE->IsPlayerEnabled(PLAYER_1)) + GAMESTATE->m_PreferredDifficulty[PLAYER_1] = DIFFICULTY_CHALLENGE; + if(GAMESTATE->IsPlayerEnabled(PLAYER_2)) + GAMESTATE->m_PreferredDifficulty[PLAYER_2] = DIFFICULTY_CHALLENGE; + } + } + + int iStyle = GAMESTATE->m_CurStyle; + switch(iStyle) + { + case STYLE_PUMP_SINGLE: + { + GAMESTATE->m_CurStyle = STYLE_PUMP_DOUBLE; + } + break; + case STYLE_PUMP_HALFDOUBLE: + { + GAMESTATE->m_CurStyle = STYLE_PUMP_SINGLE; + } + break; + case STYLE_PUMP_DOUBLE: + { + GAMESTATE->m_CurStyle = STYLE_PUMP_HALFDOUBLE; + } + break; + } + m_Stylename.SetText(GetStyleName()); + m_Nextmode.SetText(GetNextStyleName()); + m_Prevmode.SetText(GetPrevStyleName()); +} \ No newline at end of file diff --git a/stepmania/src/ModeSwitcher.h b/stepmania/src/ModeSwitcher.h new file mode 100644 index 0000000000..8d958372b4 --- /dev/null +++ b/stepmania/src/ModeSwitcher.h @@ -0,0 +1,44 @@ +#ifndef MODESWITCHER_H +#define MODESWITCHER_H +/* +----------------------------------------------------------------------------- + Class: ModeSwitcher + + Desc: A ModeSwitcher for ScreenSelectMode + + Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. + Andrew Livy +----------------------------------------------------------------------------- +*/ + +#include "ActorFrame.h" +#include "Banner.h" +#include "Sprite.h" +#include "ScrollingList.h" +#include "SongManager.h" +#include "BitmapText.h" +#include "SongManager.h" +#include "PlayerOptions.h" +#include "SongOptions.h" +#include "BitmapText.h" + +class ModeSwitcher : public ActorFrame +{ +public: + ModeSwitcher(); + ~ModeSwitcher(); + void NextMode(int pn); + void PrevMode(int pn); + +private: + BitmapText m_Stylename; + BitmapText m_Nextmode; + BitmapText m_Prevmode; + Sprite m_NextIcon; + Sprite m_PrevIcon; + CString GetStyleName(); + CString GetNextStyleName(); + CString GetPrevStyleName(); +}; + +#endif diff --git a/stepmania/src/NoteData.cpp b/stepmania/src/NoteData.cpp index ac9f9217f5..272eed7176 100644 --- a/stepmania/src/NoteData.cpp +++ b/stepmania/src/NoteData.cpp @@ -429,6 +429,7 @@ void NoteData::LoadTransformed( NoteData* pOriginal, int iNewNumTracks, const in { const int iOriginalTrack = iOriginalTrackToTakeFrom[t]; + ASSERT( iOriginalTrack < pOriginal->m_iNumTracks ); diff --git a/stepmania/src/ScreenEz2SelectMusic.cpp b/stepmania/src/ScreenEz2SelectMusic.cpp index 3c7932a8e2..e27e32fec4 100644 --- a/stepmania/src/ScreenEz2SelectMusic.cpp +++ b/stepmania/src/ScreenEz2SelectMusic.cpp @@ -60,6 +60,8 @@ #define INFOFRAME_X THEME->GetMetricF("ScreenEz2SelectMusic","InfoFrameX") #define INFOFRAME_Y THEME->GetMetricF("ScreenEz2SelectMusic","InfoFrameY") +#define USE_MODE_SWITCHER THEME->GetMetricI("ScreenEz2SelectMusic","UseModeSwitcher") + const float TWEEN_TIME = 0.5f; const ScreenMessage SM_NoSongs = ScreenMessage(SM_User+3); @@ -178,6 +180,12 @@ ScreenEz2SelectMusic::ScreenEz2SelectMusic() : Screen("ScreenEz2SelectMusic") m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,0) ); this->AddChild( &m_sprOptionsMessage ); + if(USE_MODE_SWITCHER == 1) + { + m_ModeSwitcher.SetXY(CENTER_X,CENTER_Y); + this->AddChild( &m_ModeSwitcher ); + } + m_sprBalloon.SetName( "Balloon" ); TEXTUREMAN->CacheTexture( THEME->GetPathToG("ScreenSelectMusic balloon long") ); TEXTUREMAN->CacheTexture( THEME->GetPathToG("ScreenSelectMusic balloon marathon") ); @@ -376,6 +384,15 @@ void ScreenEz2SelectMusic::TweenOffScreen() m_Guide.FadeOff( 0, "fade", TWEEN_TIME*2 ); m_ChoiceListFrame.FadeOff( 0, "fade", TWEEN_TIME*2 ); m_ChoiceListHighlight.FadeOff( 0, "fade", TWEEN_TIME*2 ); + m_CurrentGroup.FadeOff( 0, "fade", TWEEN_TIME*2 ); + for(int i=0; iStopMusic(); + return; + } + if( !GAMESTATE->IsHumanPlayer(pn) ) return; if( m_arrayNotes[pn].empty() ) @@ -477,6 +503,15 @@ void ScreenEz2SelectMusic::EasierDifficulty( PlayerNumber pn ) void ScreenEz2SelectMusic::HarderDifficulty( PlayerNumber pn ) { + if(USE_MODE_SWITCHER == 1) + { + m_ModeSwitcher.NextMode(pn); + MusicChanged(); + m_MusicBannerWheel.StopBouncing(); + SOUNDMAN->StopMusic(); + return; + } + if( !GAMESTATE->IsHumanPlayer(pn ) ) return; diff --git a/stepmania/src/ScreenEz2SelectMusic.h b/stepmania/src/ScreenEz2SelectMusic.h index 1958fee241..afc23a2b41 100644 --- a/stepmania/src/ScreenEz2SelectMusic.h +++ b/stepmania/src/ScreenEz2SelectMusic.h @@ -21,6 +21,7 @@ #include "DifficultyMeter.h" #include "DifficultyRating.h" #include "RageTimer.h" +#include "ModeSwitcher.h" class ScreenEz2SelectMusic : public Screen { @@ -50,7 +51,7 @@ protected: void TweenOffScreen(); - + ModeSwitcher m_ModeSwitcher; Sprite m_ChoiceListFrame; Sprite m_ChoiceListHighlight; Sprite m_Guide;