diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index fa34af5876..c27a73c2b6 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -103,6 +103,9 @@ PrefsManager::PrefsManager() m_bForceLogFlush = false; m_bLogging = true; m_bShowBeginnerHelper = false; + m_bEndlessBreakEnabled = true; + m_iEndlessNumStagesUntilBreak = 5; + m_iEndlessBreakLength = 5; #ifdef DEBUG m_bShowLogWindow = true; #else @@ -281,6 +284,9 @@ void PrefsManager::ReadGlobalPrefsFromDisk( bool bSwitchToLastPlayedGame ) ini.GetValueB( "Options", "ShowLogWindow", m_bShowLogWindow ); ini.GetValueB( "Options", "ShowBeginnerHelper", m_bShowBeginnerHelper ); ini.GetValue ( "Options", "Language", m_sLanguage ); + ini.GetValueB( "Options", "EndlessBreakEnabled", m_bEndlessBreakEnabled ); + ini.GetValueI( "Options", "EndlessStagesUntilBreak", m_iEndlessNumStagesUntilBreak ); + ini.GetValueI( "Options", "EndlessBreakLength", m_iEndlessBreakLength ); ini.GetValue ( "Options", "CustomSpeedMod", m_sCustomSpeedMod ); @@ -402,6 +408,9 @@ void PrefsManager::SaveGlobalPrefsToDisk() ini.SetValueI( "Options", "ProgressiveNonstopLifebar", m_iProgressiveNonstopLifebar ); ini.SetValueB( "Options", "ShowBeginnerHelper", m_bShowBeginnerHelper ); ini.SetValue ( "Options", "Language", m_sLanguage ); + ini.SetValueB( "Options", "EndlessBreakEnabled", m_bEndlessBreakEnabled ); + ini.SetValueI( "Options", "EndlessStagesUntilBreak", m_iEndlessNumStagesUntilBreak ); + ini.SetValueI( "Options", "EndlessBreakLength", m_iEndlessBreakLength ); ini.SetValue ( "Options", "CustomSpeedMod", m_sCustomSpeedMod ); diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index a7d1884052..17dbb69600 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -95,6 +95,9 @@ public: int m_iProgressiveStageLifebar; int m_iProgressiveNonstopLifebar; bool m_bShowBeginnerHelper; + bool m_bEndlessBreakEnabled; + int m_iEndlessNumStagesUntilBreak; + int m_iEndlessBreakLength; CString m_sLanguage; CString m_sDefaultProfile[NUM_PLAYERS]; // directory name of profile on HD diff --git a/stepmania/src/ScreenEndlessBreak.cpp b/stepmania/src/ScreenEndlessBreak.cpp new file mode 100644 index 0000000000..9c7c622b90 --- /dev/null +++ b/stepmania/src/ScreenEndlessBreak.cpp @@ -0,0 +1,107 @@ +#include "global.h" + +/* +----------------------------------------------------------------------------- + Class: ScreenEndlessBreak + + Desc: See header + + Copyright (c) 2001-2003 by the person(s) listed below. All rights reserved. + Kevin Slaughter +----------------------------------------------------------------------------- +*/ + + +//TODO:: Add scripting support +#include "RageLog.h" +#include "ScreenManager.h" +#include "ScreenEndlessBreak.h" + +ScreenEndlessBreak::ScreenEndlessBreak( CString sName ) : Screen( sName ) +{ + LOG->Trace("ScreenEndlessBreak()"); + ASSERT(GAMESTATE->GetNumPlayersEnabled() > 0); // This should never happen.. but just in case + PostScreenMessage( SM_BreakInitiated, 0 ); + + bool m_bPicLoaded = false; // I don't know of a better way to see if we failed to load a break picture. If someone does, please do it. + + if( (int)PREFSMAN->m_ShowDancingCharacters != 0 ) + { + if( GAMESTATE->GetNumPlayersEnabled() == 1 ) + if( GAMESTATE->m_pCurCharacters[0] != NULL ) + m_sprBreakPicture.LoadTABreakFromCharacter( GAMESTATE->m_pCurCharacters[0] ); + else + m_sprBreakPicture.Load( THEME->GetPathToG("Common fallback takingabreak") ); + else if( GAMESTATE->GetNumPlayersEnabled() > 1 ) // More than 1 player is present. + { + int PlayerToUse = 999; /* If this was 0 by default, the first player would + always be selected. Make it an insane number so + we always generate a random player. */ + while (!GAMESTATE->IsPlayerEnabled(PlayerToUse)) + { + PlayerToUse = (int)(rand()*NUM_PLAYERS); // Is there a danger of this becoming an endless loop?? + if( (GAMESTATE->IsPlayerEnabled(PlayerToUse)) && (GAMESTATE->m_pCurCharacters[PlayerToUse] != NULL) ) + { + m_sprBreakPicture.LoadTABreakFromCharacter( GAMESTATE->m_pCurCharacters[PlayerToUse] ); + break; + } + } + } + } + else // Characters not enabled. + m_sprBreakPicture.Load( THEME->GetPathToG("Common fallback takingabreak") ); + m_sprBreakPicture.SetX( CENTER_X ); + m_sprBreakPicture.SetY( CENTER_Y ); + this->AddChild(&m_sprBreakPicture); + + // Set up our countdown clock. + m_fCountdownSecs = (PREFSMAN->m_iEndlessBreakLength*60); // Stored in minutes. + + //BitmapText stuff + m_textTimeRemaining.LoadFromFont( THEME->GetPathToF("Common Normal") ); + m_textTimeRemaining.SetText( SecondsToTime(m_fCountdownSecs) ); + m_textTimeRemaining.SetX( CENTER_X ); + m_textTimeRemaining.SetY( CENTER_Y ); + + //Transition stuff + m_In.Load( THEME->GetPathToB("ScreenEndlessBreak In") ); + this->AddChild(&m_In); + m_In.StartTransitioning(); + m_Out.Load( THEME->GetPathToB("ScreenEndlessBreak Out") ); + this->AddChild(&m_Out); + m_bExiting = false; +} + +void ScreenEndlessBreak::Update(float fDeltaTime) +{ + m_textTimeRemaining.SetText( SecondsToTime(m_fCountdownSecs) ); + if( !m_bExiting ) + if(m_fCountdownSecs <= 0) + { + m_bExiting = true; + SCREENMAN->PopTopScreen(SM_BreakCompleted); // Destroy this screen and let ScreenGameplay get the message. + m_Out.StartTransitioning(); + } + else + //m_fCountdownSecs--; + m_fCountdownSecs = (m_fCountdownSecs - fDeltaTime); + Screen::Update( fDeltaTime ); +} + +void ScreenEndlessBreak::DrawPrimitives() +{ + Screen::DrawPrimitives(); // Draw all other elements below our TakingABreak pic. + m_sprBreakPicture.Draw(); + m_textTimeRemaining.Draw(); // Draw the time remaining on top of everything. +} + +void ScreenEndlessBreak::Input(const DeviceInput &DeviceI, const InputEventType type, const GameInput *GameI, const MenuInput &MenuI, const StyleInput &StyleI) +{ + //Why is this not working..? + switch( MenuI.button ) + { + case MENU_BUTTON_START: m_fCountdownSecs = 0; break; + } + //Compiler bitching over this.. + //Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); +} \ No newline at end of file diff --git a/stepmania/src/ScreenEndlessBreak.h b/stepmania/src/ScreenEndlessBreak.h new file mode 100644 index 0000000000..0a0b05fc82 --- /dev/null +++ b/stepmania/src/ScreenEndlessBreak.h @@ -0,0 +1,45 @@ +#ifndef SCREENENDLESSBREAK_H +#define SCREENENDLESSBREAK_H + +/* +----------------------------------------------------------------------------- + Class: ScreenEndlessBreak + + Desc: Screen for break periods during endless mode. + + Copyright (c) 2001-2003 by the person(s) listed below. All rights reserved. + Kevin Slaughter +----------------------------------------------------------------------------- +*/ + +#include "Screen.h" +#include "PrefsManager.h" +#include "Banner.h" +#include "Character.h" +#include "GameState.h" +#include "ThemeManager.h" +#include "BitmapText.h" +#include "Transition.h" + +// Sent to ScreenGameplay so it can keep all it's data ready for when we resume play. +const ScreenMessage SM_BreakInitiated = ScreenMessage(SM_User+100); +const ScreenMessage SM_BreakCompleted = ScreenMessage(SM_User+101); + +class ScreenEndlessBreak : public Screen +{ +public: + ScreenEndlessBreak( CString sName ); + + virtual void DrawPrimitives(); + virtual void Update(float fDeltaTime); + virtual void Input(const DeviceInput &DeviceI, const InputEventType type, const GameInput *GameI, const MenuInput &MenuI, const StyleInput &StyleI); + +private: + Banner m_sprBreakPicture; + BitmapText m_textTimeRemaining; + float m_fCountdownSecs; + Transition m_In; + Transition m_Out; + bool m_bExiting; +}; +#endif \ No newline at end of file diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index 246b6a9e2a..59642b9c17 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -62,10 +62,10 @@ LINK32=link.exe # SUBTRACT LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib # Begin Special Build Tool IntDir=.\../Debug6 -TargetDir=\temp\stepmania +TargetDir=\stepmania TargetName=StepMania-debug SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -82,23 +82,23 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_XBOX" /D "_DEBUG" /YX /FD /G6 /Ztmp /c -# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /D "OGG_ONLY" /YX /FD /G6 /Ztmp /c -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /subsystem:xbox /fixed:no /TMP -# ADD LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"../StepManiaXbox-debug.exe" /subsystem:xbox /fixed:no /TMP -XBE=imagebld.exe -# ADD BASE XBE /nologo /stack:0x10000 /debug -# ADD XBE /nologo /stack:0x10000 /debug /out:"../default.xbe" XBCP=xbecopy.exe # ADD BASE XBCP /NOLOGO # ADD XBCP /NOLOGO +XBE=imagebld.exe +# ADD BASE XBE /nologo /stack:0x10000 /debug +# ADD XBE /nologo /stack:0x10000 /debug /out:"../default.xbe" +LINK32=link.exe +# ADD BASE LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /subsystem:xbox /fixed:no /TMP +# ADD LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"../StepManiaXbox-debug.exe" /subsystem:xbox /fixed:no /TMP +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_XBOX" /D "_DEBUG" /YX /FD /G6 /Ztmp /c +# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /D "OGG_ONLY" /YX /FD /G6 /Ztmp /c # Begin Special Build Tool -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -135,10 +135,10 @@ LINK32=link.exe # SUBTRACT LINK32 /verbose /pdb:none # Begin Special Build Tool IntDir=.\../Release6 -TargetDir=\temp\stepmania +TargetDir=\stepmania TargetName=StepMania SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -156,26 +156,26 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania # PROP Intermediate_Dir "StepMania___Xbox_Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /D "WIN32" /D "_XBOX" /D "NDEBUG" /YX"global.h" /FD /c -# SUBTRACT CPP /Fr -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo +XBCP=xbecopy.exe +# ADD BASE XBCP /NOLOGO +# ADD XBCP /NOLOGO +XBE=imagebld.exe +# ADD BASE XBE /nologo /stack:0x10000 /debug +# ADD XBE /nologo /testid:"123456" /stack:0x10000 /debug /out:"../default.xbe" LINK32=link.exe # ADD BASE LINK32 $(intdir)\verstub.obj xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /pdb:"../debug6/StepMania-debug.pdb" /map /debug /machine:IX86 /nodefaultlib:"libcmtd.lib" /out:"../StepMania-debug.exe" # SUBTRACT BASE LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib # ADD LINK32 $(intdir)\verstub.obj xapilib.lib d3d8.lib d3dx8.lib xgraphics.lib dsound.lib dmusic.lib xnet.lib xboxkrnl.lib libcmt.lib /nologo /incremental:no /pdb:"../release6xbox/StepMania.pdb" /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"libcmtd" /out:"../StepManiaXbox.exe" /subsystem:xbox /fixed:no /TMP /OPT:REF # SUBTRACT LINK32 /pdb:none /map /debug -XBE=imagebld.exe -# ADD BASE XBE /nologo /stack:0x10000 /debug -# ADD XBE /nologo /testid:"123456" /stack:0x10000 /debug /out:"../default.xbe" -XBCP=xbecopy.exe -# ADD BASE XBCP /NOLOGO -# ADD XBCP /NOLOGO +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /D "WIN32" /D "_XBOX" /D "NDEBUG" /YX"global.h" /FD /c +# SUBTRACT CPP /Fr # Begin Special Build Tool -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -4183,6 +4183,25 @@ SOURCE=.\ScreenEditMenu.h # End Source File # Begin Source File +SOURCE=.\ScreenEndlessBreak.cpp + +!IF "$(CFG)" == "StepMania - Win32 Debug" + +!ELSEIF "$(CFG)" == "StepMania - Xbox Debug" + +!ELSEIF "$(CFG)" == "StepMania - Win32 Release" + +!ELSEIF "$(CFG)" == "StepMania - Xbox Release" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\ScreenEndlessBreak.h +# End Source File +# Begin Source File + SOURCE=.\ScreenEvaluation.cpp !IF "$(CFG)" == "StepMania - Win32 Debug"