diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index 28c9faeb47..4268c752a7 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -509,6 +509,8 @@ public: static int zoomto( T* p, lua_State *L ) { p->ZoomTo(FArg(1), FArg(2)); return 0; } static int zoomtowidth( T* p, lua_State *L ) { p->ZoomToWidth(FArg(1)); return 0; } static int zoomtoheight( T* p, lua_State *L ) { p->ZoomToHeight(FArg(1)); return 0; } + static int basezoomx( T* p, lua_State *L ) { p->SetBaseZoomX(FArg(1)); return 0; } + static int basezoomy( T* p, lua_State *L ) { p->SetBaseZoomY(FArg(1)); return 0; } static int stretchto( T* p, lua_State *L ) { p->StretchTo( RectF(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } static int cropleft( T* p, lua_State *L ) { p->SetCropLeft(FArg(1)); return 0; } static int croptop( T* p, lua_State *L ) { p->SetCropTop(FArg(1)); return 0; } @@ -628,6 +630,8 @@ public: ADD_METHOD( zoomto ) ADD_METHOD( zoomtowidth ) ADD_METHOD( zoomtoheight ) + ADD_METHOD( basezoomx ) + ADD_METHOD( basezoomy ) ADD_METHOD( stretchto ) ADD_METHOD( cropleft ) ADD_METHOD( croptop ) diff --git a/stepmania/src/HighScore.cpp b/stepmania/src/HighScore.cpp index b315eb1669..22252aabc9 100644 --- a/stepmania/src/HighScore.cpp +++ b/stepmania/src/HighScore.cpp @@ -58,7 +58,7 @@ XNode* HighScore::CreateNode() const if( hns != HNS_NONE ) // HACK: don't save meaningless "none" count pHoldNoteScores->AppendChild( HoldNoteScoreToString(hns), iHoldNoteScores[hns] ); pNode->AppendChild( radarValues.CreateNode() ); - + pNode->AppendChild( "LifeRemainingSeconds", fLifeRemainingSeconds ); return pNode; } @@ -94,6 +94,7 @@ void HighScore::LoadFromNode( const XNode* pNode ) const XNode* pRadarValues = pNode->GetChild( "RadarValues" ); if( pRadarValues ) radarValues.LoadFromNode( pRadarValues ); + pNode->GetChildValue( "LifeRemainingSeconds", fLifeRemainingSeconds ); /* Validate input. */ grade = clamp( grade, GRADE_TIER01, GRADE_FAILED ); diff --git a/stepmania/src/HighScore.h b/stepmania/src/HighScore.h index b9d64284cc..f8a264d5cd 100644 --- a/stepmania/src/HighScore.h +++ b/stepmania/src/HighScore.h @@ -25,6 +25,7 @@ struct HighScore int iTapNoteScores[NUM_TAP_NOTE_SCORES]; int iHoldNoteScores[NUM_HOLD_NOTE_SCORES]; RadarValues radarValues; + float fLifeRemainingSeconds; HighScore() { Unset(); } void Unset() @@ -42,6 +43,7 @@ struct HighScore ZERO( iTapNoteScores ); ZERO( iHoldNoteScores ); radarValues.MakeUnknown(); + fLifeRemainingSeconds = 0; } bool operator>=( const HighScore& other ) const; @@ -63,10 +65,13 @@ struct HighScore FOREACH_HoldNoteScore( hns ) COMPARE( iHoldNoteScores[hns] ); COMPARE( radarValues ); + COMPARE( fLifeRemainingSeconds ); #undef COMPARE return true; } + float GetSurvivalSeconds() { return fSurviveSeconds + fLifeRemainingSeconds; } + XNode* CreateNode() const; void LoadFromNode( const XNode* pNode ); diff --git a/stepmania/src/PlayerStageStats.cpp b/stepmania/src/PlayerStageStats.cpp index e0048f34b6..98b6e561db 100644 --- a/stepmania/src/PlayerStageStats.cpp +++ b/stepmania/src/PlayerStageStats.cpp @@ -466,11 +466,15 @@ class LunaPlayerStageStats : public Luna public: LunaPlayerStageStats() { LUA->Register( Register ); } - static int GetCaloriesBurned( T* p, lua_State *L ) { lua_pushnumber(L, p->fCaloriesBurned ); return 1; } + static int GetCaloriesBurned( T* p, lua_State *L ) { lua_pushnumber(L, p->fCaloriesBurned ); return 1; } + static int GetLifeRemainingSeconds( T* p, lua_State *L ) { lua_pushnumber(L, p->fLifeRemainingSeconds); return 1; } + static int GetSurvivalSeconds( T* p, lua_State *L ) { lua_pushnumber(L, p->GetSurvivalSeconds()); return 1; } static void Register(lua_State *L) { ADD_METHOD( GetCaloriesBurned ) + ADD_METHOD( GetLifeRemainingSeconds ) + ADD_METHOD( GetSurvivalSeconds ) Luna::Register( L ); } }; diff --git a/stepmania/src/PlayerStageStats.h b/stepmania/src/PlayerStageStats.h index 822f0a0117..3524523aa6 100644 --- a/stepmania/src/PlayerStageStats.h +++ b/stepmania/src/PlayerStageStats.h @@ -96,6 +96,8 @@ struct PlayerStageStats void UpdateComboList( float fSecond, bool rollover ); Combo_t GetMaxCombo() const; + float GetSurvivalSeconds() { return fAliveSeconds + fLifeRemainingSeconds; } + // Lua void PushSelf( lua_State *L ); }; diff --git a/stepmania/src/RageUtil.cpp b/stepmania/src/RageUtil.cpp index c87a6f532a..46923e419a 100644 --- a/stepmania/src/RageUtil.cpp +++ b/stepmania/src/RageUtil.cpp @@ -138,6 +138,19 @@ CString SecondsToMMSSMsMs( float fSecs ) return sReturn; } +CString SecondsToMSSMsMs( float fSecs ) +{ + const int iMinsDisplay = (int)fSecs/60; + const int iSecsDisplay = (int)fSecs - iMinsDisplay*60; + const int iLeftoverDisplay = (int) ( (fSecs - iMinsDisplay*60 - iSecsDisplay) * 100 ); + CString sReturn = ssprintf( "%01d:%02d.%02d", iMinsDisplay, iSecsDisplay, min(99,iLeftoverDisplay) ); + return sReturn; +} + +#include "LuaFunctions.h" +#include "LuaManager.h" +LuaFunction_Float( SecondsToMSSMsMs, SecondsToMSSMsMs(a1) ) + CString SecondsToMMSSMsMsMs( float fSecs ) { const int iMinsDisplay = (int)fSecs/60; diff --git a/stepmania/src/RageUtil.h b/stepmania/src/RageUtil.h index 6c82b3c87c..def793d45f 100644 --- a/stepmania/src/RageUtil.h +++ b/stepmania/src/RageUtil.h @@ -213,6 +213,7 @@ bool IsAnInt( const CString &s ); bool IsHexVal( const CString &s ); float HHMMSSToSeconds( const CString &sHMS ); CString SecondsToHHMMSS( float fSecs ); +CString SecondsToMSSMsMs( float fSecs ); CString SecondsToMMSSMsMs( float fSecs ); CString SecondsToMMSSMsMsMs( float fSecs ); CString PrettyPercent( float fNumerator, float fDenominator ); diff --git a/stepmania/src/ScoreDisplayLifeTime.cpp b/stepmania/src/ScoreDisplayLifeTime.cpp index b8a27f7806..4b9cbdabdc 100644 --- a/stepmania/src/ScoreDisplayLifeTime.cpp +++ b/stepmania/src/ScoreDisplayLifeTime.cpp @@ -67,8 +67,7 @@ void ScoreDisplayLifeTime::Update( float fDelta ) float fSecs = STATSMAN->m_CurStageStats.m_player[m_pPlayerState->m_PlayerNumber].fLifeRemainingSeconds; - CString s = SecondsToMMSSMsMs(fSecs); - s.erase( s.begin() ); // erase first digit + CString s = SecondsToMSSMsMs(fSecs); m_textTimeRemaining.SetText( s ); } diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index 36952e95bc..c460788b1f 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -136,48 +136,32 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName ) : ScreenWithMenuElement STATSMAN->m_CurStageStats.m_player[PLAYER_2].SetLifeRecordAt( 1-fP1, f ); } - STATSMAN->m_CurStageStats.m_player[PLAYER_1].iActualDancePoints = rand()%3; - STATSMAN->m_CurStageStats.m_player[PLAYER_1].iPossibleDancePoints = 2; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].iActualDancePoints = rand()%2; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].iPossibleDancePoints = 1; - STATSMAN->m_CurStageStats.m_player[PLAYER_1].iCurCombo = 0; - STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 0, false ); - STATSMAN->m_CurStageStats.m_player[PLAYER_1].iCurCombo = 1; - STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 1, false ); - STATSMAN->m_CurStageStats.m_player[PLAYER_1].iCurCombo = 50; - STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 25, false ); - STATSMAN->m_CurStageStats.m_player[PLAYER_1].iCurCombo = 250; - STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 100, false ); - if( rand()%2 ) + FOREACH_PlayerNumber( p ) { - STATSMAN->m_CurStageStats.m_player[PLAYER_1].iCurCombo = rand()%11000; - STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 110, false ); + STATSMAN->m_CurStageStats.m_player[p].iActualDancePoints = rand()%3; + STATSMAN->m_CurStageStats.m_player[p].iPossibleDancePoints = 2; + STATSMAN->m_CurStageStats.m_player[p].iCurCombo = 0; + STATSMAN->m_CurStageStats.m_player[p].UpdateComboList( 0, false ); + STATSMAN->m_CurStageStats.m_player[p].iCurCombo = 1; + STATSMAN->m_CurStageStats.m_player[p].UpdateComboList( 1, false ); + STATSMAN->m_CurStageStats.m_player[p].iCurCombo = 50; + STATSMAN->m_CurStageStats.m_player[p].UpdateComboList( 25, false ); + STATSMAN->m_CurStageStats.m_player[p].iCurCombo = 250; + STATSMAN->m_CurStageStats.m_player[p].UpdateComboList( 100, false ); + if( rand()%2 ) + { + STATSMAN->m_CurStageStats.m_player[p].iCurCombo = rand()%11000; + STATSMAN->m_CurStageStats.m_player[p].UpdateComboList( 110, false ); + } + if( rand()%5 == 0 ) + { + STATSMAN->m_CurStageStats.m_player[p].bFailedEarlier = true; + } + STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_MARVELOUS] = rand()%3; + STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_PERFECT] = rand()%3; + STATSMAN->m_CurStageStats.m_player[p].iTapNoteScores[TNS_GREAT] = rand()%3; + STATSMAN->m_CurStageStats.m_player[p].fLifeRemainingSeconds = randomf( 90, 580 ); } - if( rand()%5 == 0 ) - { - STATSMAN->m_CurStageStats.m_player[PLAYER_1].bFailedEarlier = true; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].bFailedEarlier = true; - } - STATSMAN->m_CurStageStats.m_player[PLAYER_2].iCurCombo = 0; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].UpdateComboList( 0, false ); - STATSMAN->m_CurStageStats.m_player[PLAYER_2].iCurCombo = 1; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].UpdateComboList( 1, false ); - STATSMAN->m_CurStageStats.m_player[PLAYER_2].iCurCombo = 50; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].UpdateComboList( 25, false ); - STATSMAN->m_CurStageStats.m_player[PLAYER_2].iCurCombo = 250; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].UpdateComboList( 100, false ); - if( rand()%2 ) - { - STATSMAN->m_CurStageStats.m_player[PLAYER_2].iCurCombo = rand()%11000; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].UpdateComboList( 110, false ); - } - - STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_MARVELOUS] = rand()%3; - STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_PERFECT] = rand()%3; - STATSMAN->m_CurStageStats.m_player[PLAYER_1].iTapNoteScores[TNS_GREAT] = rand()%3; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_MARVELOUS] = rand()%3; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_PERFECT] = rand()%3; - STATSMAN->m_CurStageStats.m_player[PLAYER_2].iTapNoteScores[TNS_GREAT] = rand()%3; STATSMAN->m_vPlayedStageStats.clear(); } @@ -938,6 +922,8 @@ void ScreenEvaluation::CommitScores( memcpy( hs.iTapNoteScores, stageStats.m_player[p].iTapNoteScores, sizeof(hs.iTapNoteScores) ); memcpy( hs.iHoldNoteScores, stageStats.m_player[p].iHoldNoteScores, sizeof(hs.iHoldNoteScores) ); hs.radarValues = stageStats.m_player[p].radarActual; + hs.fLifeRemainingSeconds = stageStats.m_player[p].fLifeRemainingSeconds; + StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index e59de89b2a..e253c6e3f4 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -2375,7 +2375,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) } else if( SM == SM_StartLoadingNextSong ) - { + { m_pSoundMusic->Stop(); /* Next song. */ diff --git a/stepmania/src/ScreenRanking.cpp b/stepmania/src/ScreenRanking.cpp index 9d4b26eab7..4c3a6088bc 100644 --- a/stepmania/src/ScreenRanking.cpp +++ b/stepmania/src/ScreenRanking.cpp @@ -119,6 +119,7 @@ ScreenRanking::ScreenRanking( CString sClassName ) : ScreenAttract( sClassName ) SONG_SCORE_ROWS_TO_SHOW (m_sName,"SongScoreRowsToShow"), SONG_SCORE_SECONDS_PER_ROW (m_sName,"SongScoreSecondsPerRow"), MANUAL_SCROLLING (m_sName,"ManualScroling"), + SHOW_SURVIVAL_TIME (m_sName,"ShowSurvivalTime"), BULLET_START_X (m_sName,"BulletStartX"), BULLET_START_Y (m_sName,"BulletStartY"), @@ -871,6 +872,8 @@ float ScreenRanking::SetPage( PageToShow pts ) } CString s = hs.GetDisplayName() + "\n" + PercentageDisplay::FormatPercentScore( hs.fPercentDP ); + if( SHOW_SURVIVAL_TIME ) + s += " " + SecondsToMSSMsMs(hs.GetSurvivalSeconds()); pTextStepsScore->SetText( s ); } } @@ -914,6 +917,8 @@ float ScreenRanking::SetPage( PageToShow pts ) } CString s = hs.GetDisplayName() + "\n" + PercentageDisplay::FormatPercentScore( hs.fPercentDP ); + if( SHOW_SURVIVAL_TIME ) + s += " " + SecondsToMSSMsMs(hs.GetSurvivalSeconds()); pTextStepsScore->SetText( s ); } } diff --git a/stepmania/src/ScreenRanking.h b/stepmania/src/ScreenRanking.h index c308cd88dd..1480645cdd 100644 --- a/stepmania/src/ScreenRanking.h +++ b/stepmania/src/ScreenRanking.h @@ -126,6 +126,7 @@ protected: ThemeMetric SONG_SCORE_ROWS_TO_SHOW; ThemeMetric SONG_SCORE_SECONDS_PER_ROW; ThemeMetric MANUAL_SCROLLING; + ThemeMetric SHOW_SURVIVAL_TIME; ThemeMetric BULLET_START_X; ThemeMetric BULLET_START_Y;