NEW FEATURE: AutoSync status now shown during gameplay with icon

NEW FEATURE:  added autogen icon to select music
NEW FEATURE:  toggle for easter eggs in Machine Options
NEW FEATURE:  marvelous step timing togglable in Machine Options
NEW FEATURE:  Grade AAAA (all marvelous)
CHANGE:  Only show ScreenHowToPlay if at least one player chose easy
This commit is contained in:
Chris Danford
2003-01-11 08:55:21 +00:00
parent 82a4960bd9
commit 3ff91dffb0
51 changed files with 654 additions and 401 deletions
+6
View File
@@ -1,4 +1,10 @@
----------------------- Version 3.01 ---------------------------
NEW FEATURE: AutoSync status now shown during gameplay with icon
NEW FEATURE: added autogen icon to select music
NEW FEATURE: toggle for easter eggs in Machine Options
NEW FEATURE: marvelous step timing togglable in Machine Options
NEW FEATURE: Grade AAAA (all marvelous)
CHANGE: Only show ScreenHowToPlay if at least one player chose easy
NEW FEATURE: New High Score screen
NEW FEATURE: Full "attract" sequence
NEW FEATURE: .SM files can now contain UTF-8 text.
+23 -10
View File
@@ -30,18 +30,12 @@ ChoicesSpacingY=42
ChoicesShadowLength=5
HelpX=320
HelpY=440
LogoX=320
LogoY=240
VersionX=590
VersionY=20
SongsX=20
SongsY=20
ColorNotSelected=1,1,1,1
ColorSelected=0.5,1,0.5,1
ZoomNotSelected=1.0
ZoomSelected=1.3
SecondsBeforeDemonstration=30
SecondsBetweenAttract=12
SecondsBetweenComments=12
SecondsBeforeAttract=30
HelpText=Use &UP; &DOWN; to select, then press START
NextScreen=ScreenCaution
@@ -332,8 +326,8 @@ SurviveTimeX=320
SurviveTimeY=340
DebugX=320
DebugY=240
AutoPlayX=320
AutoPlayY=360
StatusIconsX=320
StatusIconsY=400
SecondsBetweenComments=10
DemonstrationSeconds=30
TickEarlySeconds=0.058
@@ -355,6 +349,11 @@ PercentBaseP1X=120
PercentBaseP2X=572
PercentBaseY=134
JudgeLabelsX=320
MarvelousP1X=230
MarvelousP2X=410
MarvelousOniP1X=230
MarvelousOniP2X=410
MarvelousY=176
PerfectP1X=230
PerfectP2X=410
PerfectOniP1X=230
@@ -538,6 +537,8 @@ HelpText=Use arrow keys to navigate, ENTER to assign, SPACE to clear, ESCAPE whe
ShowSeconds=0.25
ZoomStart=1.0
ZoomEnd=1.5
ColorMarvelousStart=1.0,1.0,0.3,1 // yellow
ColorMarvelousEnd=1.0,1.0,0.3,0 // yellow no alpha
ColorPerfectStart=1.0,1.0,0.3,1 // yellow
ColorPerfectEnd=1.0,1.0,0.3,0 // yellow no alpha
ColorGreatStart=0.0,1.0,0.4,1 // green
@@ -551,6 +552,8 @@ ColorBooEnd=0.8,0.0,0.6,0 // purple no alpha
ShowSeconds=0.25
ZoomStart=1.0
ZoomEnd=1.5
ColorMarvelousStart=1.0,1.0,0.3,1 // yellow
ColorMarvelousEnd=1.0,1.0,0.3,0 // yellow no alpha
ColorPerfectStart=1.0,1.0,0.3,1 // yellow
ColorPerfectEnd=1.0,1.0,0.3,0 // yellow no alpha
ColorGreatStart=0.0,1.0,0.4,1 // green
@@ -587,6 +590,8 @@ RightEdge=620
BottomEdge=460
[Player]
JudgeMarvelousZoomX=1.3
JudgeMarvelousZoomY=1.3
JudgePerfectZoomX=1.3
JudgePerfectZoomY=1.3
JudgeGreatZoomX=1.2
@@ -694,6 +699,8 @@ JudgeDifficulty=Increase this value to cause your steps to be judged more strict
LifeDifficulty=Increate this value to cause your life meter to::drain faster and refill slower.
HiddenSongs=Some songs are only playable during Oni courses and::with roulette. Leave this "OFF" to always display all songs.
ShowStats=Display Performance Statistics in the upper right corner::of the screen. FPS = frames per second.::TPF = triangles per frame. DPF = draws per frame.
EasterEggs=Enable or disable some special easter eggs.
MarvelousTiming=Enable or disable marvelous judgement.
[ScreenGraphicOptions]
DisplayMode=Chose whether you would like StepMania to run full screen,::or to display in a window on your desktop.
@@ -742,6 +749,12 @@ SecondsToShow=10
NextScreen=ScreenLogo
[ScreenLogo]
LogoX=320
LogoY=240
VersionX=590
VersionY=20
SongsX=20
SongsY=20
SecondsToShow=5
NextScreen=ScreenDemonstration
+28 -1
View File
@@ -12,13 +12,40 @@
#include "ActorFrame.h"
void ActorFrame::AddChild( Actor* pActor)
void ActorFrame::AddChild( Actor* pActor )
{
ASSERT( pActor );
ASSERT( (void*)pActor != (void*)0xC0000005 );
m_SubActors.push_back( pActor );
}
void ActorFrame::MoveToBack( Actor* pActor )
{
vector<Actor*>::iterator iter = find( m_SubActors.begin(), m_SubActors.end(), pActor );
if( iter == m_SubActors.end() ) // didn't find
{
ASSERT(0); // called with a pActor that doesn't exist
return;
}
m_SubActors.erase( iter );
m_SubActors.push_back( pActor );
}
void ActorFrame::MoveToFront( Actor* pActor )
{
vector<Actor*>::iterator iter = find( m_SubActors.begin(), m_SubActors.end(), pActor );
if( iter == m_SubActors.end() ) // didn't find
{
ASSERT(0); // called with a pActor that doesn't exist
return;
}
m_SubActors.erase( iter );
m_SubActors.insert( m_SubActors.begin(), pActor );
}
void ActorFrame::DrawPrimitives()
{
// draw all sub-ActorFrames while we're in the ActorFrame's local coordinate space
+3 -1
View File
@@ -16,7 +16,9 @@
class ActorFrame : public Actor
{
public:
virtual void AddChild( Actor* pActor);
virtual void AddChild( Actor* pActor );
virtual void MoveToBack( Actor* pActor );
virtual void MoveToFront( Actor* pActor );
virtual ~ActorFrame() { }
virtual void Update( float fDeltaTime );
+9 -3
View File
@@ -57,6 +57,7 @@ void Combo::UpdateScore( TapNoteScore score, int iNumNotesInThisRow )
switch( score )
{
case TNS_MARVELOUS:
case TNS_PERFECT:
case TNS_GREAT:
{
@@ -64,10 +65,15 @@ void Combo::UpdateScore( TapNoteScore score, int iNumNotesInThisRow )
m_iCurCombo += iNumNotesInThisRow; // continue combo
if( score == TNS_PERFECT ) m_iCurComboOfPerfects += iNumNotesInThisRow;
else m_iCurComboOfPerfects = 0;
switch( score )
{
case TNS_MARVELOUS:
case TNS_PERFECT:
m_iCurComboOfPerfects += iNumNotesInThisRow;
break;
}
if( m_iCurComboOfPerfects>=150 && (m_iCurComboOfPerfects%150)==0 && RandomFloat(0,1) > 0.5 && !GAMESTATE->m_bDemonstration )
if( (m_iCurComboOfPerfects>=150) && (m_iCurComboOfPerfects%150)==0 && !GAMESTATE->m_bDemonstration )
SCREENMAN->SendMessageToTopScreen( SM_BeginToasty, 0 );
+2
View File
@@ -124,6 +124,7 @@ enum TapNoteScore {
TNS_GOOD,
TNS_GREAT,
TNS_PERFECT,
TNS_MARVELOUS,
NUM_TAP_NOTE_SCORES
};
@@ -131,6 +132,7 @@ inline int TapNoteScoreToDancePoints( TapNoteScore tns )
{
switch( tns )
{
case TNS_MARVELOUS: return +3;
case TNS_PERFECT: return +2;
case TNS_GREAT: return +1;
case TNS_GOOD: return +0;
+7 -6
View File
@@ -343,10 +343,11 @@ Grade GameState::GetCurrentGrade( PlayerNumber pn )
LOG->Trace( "iPossibleDancePoints: %i", m_iPossibleDancePoints[pn] );
LOG->Trace( "fPercentDancePoints: %f", fPercentDancePoints );
if ( fPercentDancePoints >= 1.00 ) return GRADE_AAA;
else if( fPercentDancePoints >= 0.93 ) return GRADE_AA;
else if( fPercentDancePoints >= 0.80 ) return GRADE_A;
else if( fPercentDancePoints >= 0.65 ) return GRADE_B;
else if( fPercentDancePoints >= 0.45 ) return GRADE_C;
else return GRADE_D;
if ( fPercentDancePoints >= 1+1/3.0f ) return GRADE_AAAA;
if ( fPercentDancePoints >= 1.00 ) return GRADE_AAA;
else if( fPercentDancePoints >= 0.93 ) return GRADE_AA;
else if( fPercentDancePoints >= 0.80 ) return GRADE_A;
else if( fPercentDancePoints >= 0.65 ) return GRADE_B;
else if( fPercentDancePoints >= 0.45 ) return GRADE_C;
else return GRADE_D;
}
+1 -1
View File
@@ -59,7 +59,7 @@ public:
CString m_sLoadingMessage;
CString m_sPreferredGroup;
Difficulty m_PreferredDifficulty[NUM_PLAYERS];
Difficulty m_PreferredDifficulty[NUM_PLAYERS];
SongSortOrder m_SongSortOrder; // used by MusicWheel
PlayMode m_PlayMode;
bool m_bEditing; // NoteField does special stuff when this is true
+28 -22
View File
@@ -16,21 +16,24 @@
#include "ThemeManager.h"
#define SHOW_SECONDS THEME->GetMetricF("GhostArrow","ShowSeconds")
#define ZOOM_START THEME->GetMetricF("GhostArrow","ZoomStart")
#define ZOOM_END THEME->GetMetricF("GhostArrow","ZoomEnd")
#define COLOR_PERFECT_START THEME->GetMetricC("GhostArrow","ColorPerfectStart")
#define COLOR_PERFECT_END THEME->GetMetricC("GhostArrow","ColorPerfectEnd")
#define COLOR_GREAT_START THEME->GetMetricC("GhostArrow","ColorGreatStart")
#define COLOR_GREAT_END THEME->GetMetricC("GhostArrow","ColorGreatEnd")
#define COLOR_GOOD_START THEME->GetMetricC("GhostArrow","ColorGoodStart")
#define COLOR_GOOD_END THEME->GetMetricC("GhostArrow","ColorGoodEnd")
#define COLOR_BOO_START THEME->GetMetricC("GhostArrow","ColorBooStart")
#define COLOR_BOO_END THEME->GetMetricC("GhostArrow","ColorBooEnd")
#define SHOW_SECONDS THEME->GetMetricF("GhostArrow","ShowSeconds")
#define ZOOM_START THEME->GetMetricF("GhostArrow","ZoomStart")
#define ZOOM_END THEME->GetMetricF("GhostArrow","ZoomEnd")
#define COLOR_MARVELOUS_START THEME->GetMetricC("GhostArrow","ColorMarvelousStart")
#define COLOR_MARVELOUS_END THEME->GetMetricC("GhostArrow","ColorMarvelousEnd")
#define COLOR_PERFECT_START THEME->GetMetricC("GhostArrow","ColorPerfectStart")
#define COLOR_PERFECT_END THEME->GetMetricC("GhostArrow","ColorPerfectEnd")
#define COLOR_GREAT_START THEME->GetMetricC("GhostArrow","ColorGreatStart")
#define COLOR_GREAT_END THEME->GetMetricC("GhostArrow","ColorGreatEnd")
#define COLOR_GOOD_START THEME->GetMetricC("GhostArrow","ColorGoodStart")
#define COLOR_GOOD_END THEME->GetMetricC("GhostArrow","ColorGoodEnd")
#define COLOR_BOO_START THEME->GetMetricC("GhostArrow","ColorBooStart")
#define COLOR_BOO_END THEME->GetMetricC("GhostArrow","ColorBooEnd")
float g_fShowSeconds;
float g_fZoomStart, g_fZoomEnd;
RageColor
g_colorMarvelousStart, g_colorMarvelousEnd,
g_colorPerfectStart, g_colorPerfectEnd,
g_colorGreatStart, g_colorGreatEnd,
g_colorGoodStart, g_colorGoodEnd,
@@ -38,17 +41,19 @@ RageColor
GhostArrow::GhostArrow()
{
g_fShowSeconds = SHOW_SECONDS;
g_fZoomStart = ZOOM_START;
g_fZoomEnd = ZOOM_END;
g_colorPerfectStart = COLOR_PERFECT_START;
g_colorPerfectEnd = COLOR_PERFECT_END;
g_colorGreatStart = COLOR_GREAT_START;
g_colorGreatEnd = COLOR_GREAT_END;
g_colorGoodStart = COLOR_GOOD_START;
g_colorGoodEnd = COLOR_GOOD_END;
g_colorBooStart = COLOR_BOO_START;
g_colorBooEnd = COLOR_BOO_END;
g_fShowSeconds = SHOW_SECONDS;
g_fZoomStart = ZOOM_START;
g_fZoomEnd = ZOOM_END;
g_colorMarvelousStart = COLOR_MARVELOUS_START;
g_colorMarvelousEnd = COLOR_MARVELOUS_END;
g_colorPerfectStart = COLOR_PERFECT_START;
g_colorPerfectEnd = COLOR_PERFECT_END;
g_colorGreatStart = COLOR_GREAT_START;
g_colorGreatEnd = COLOR_GREAT_END;
g_colorGoodStart = COLOR_GOOD_START;
g_colorGoodEnd = COLOR_GOOD_END;
g_colorBooStart = COLOR_BOO_START;
g_colorBooEnd = COLOR_BOO_END;
SetDiffuse( RageColor(1,1,1,0) );
@@ -69,6 +74,7 @@ void GhostArrow::Step( TapNoteScore score )
RageColor colorStart, colorEnd;
switch( score )
{
case TNS_MARVELOUS: colorStart = g_colorMarvelousStart; colorEnd = g_colorMarvelousEnd; break;
case TNS_PERFECT: colorStart = g_colorPerfectStart; colorEnd = g_colorPerfectEnd; break;
case TNS_GREAT: colorStart = g_colorGreatStart; colorEnd = g_colorGreatEnd; break;
case TNS_GOOD: colorStart = g_colorGoodStart; colorEnd = g_colorGoodEnd; break;
+32 -26
View File
@@ -16,22 +16,25 @@
#include "ThemeManager.h"
#define SHOW_SECONDS THEME->GetMetricF("GhostArrowBright","ShowSeconds")
#define ZOOM_START THEME->GetMetricF("GhostArrowBright","ZoomStart")
#define ZOOM_END THEME->GetMetricF("GhostArrowBright","ZoomEnd")
#define COLOR_PERFECT_START THEME->GetMetricC("GhostArrowBright","ColorPerfectStart")
#define COLOR_PERFECT_END THEME->GetMetricC("GhostArrowBright","ColorPerfectEnd")
#define COLOR_GREAT_START THEME->GetMetricC("GhostArrowBright","ColorGreatStart")
#define COLOR_GREAT_END THEME->GetMetricC("GhostArrowBright","ColorGreatEnd")
#define COLOR_GOOD_START THEME->GetMetricC("GhostArrowBright","ColorGoodStart")
#define COLOR_GOOD_END THEME->GetMetricC("GhostArrowBright","ColorGoodEnd")
#define COLOR_BOO_START THEME->GetMetricC("GhostArrowBright","ColorBooStart")
#define COLOR_BOO_END THEME->GetMetricC("GhostArrowBright","ColorBooEnd")
#define SHOW_SECONDS THEME->GetMetricF("GhostArrowBright","ShowSeconds")
#define ZOOM_START THEME->GetMetricF("GhostArrowBright","ZoomStart")
#define ZOOM_END THEME->GetMetricF("GhostArrowBright","ZoomEnd")
#define COLOR_MARVELOUS_START THEME->GetMetricC("GhostArrowBright","ColorMarvelousStart")
#define COLOR_MARVELOUS_END THEME->GetMetricC("GhostArrowBright","ColorMarvelousEnd")
#define COLOR_PERFECT_START THEME->GetMetricC("GhostArrowBright","ColorPerfectStart")
#define COLOR_PERFECT_END THEME->GetMetricC("GhostArrowBright","ColorPerfectEnd")
#define COLOR_GREAT_START THEME->GetMetricC("GhostArrowBright","ColorGreatStart")
#define COLOR_GREAT_END THEME->GetMetricC("GhostArrowBright","ColorGreatEnd")
#define COLOR_GOOD_START THEME->GetMetricC("GhostArrowBright","ColorGoodStart")
#define COLOR_GOOD_END THEME->GetMetricC("GhostArrowBright","ColorGoodEnd")
#define COLOR_BOO_START THEME->GetMetricC("GhostArrowBright","ColorBooStart")
#define COLOR_BOO_END THEME->GetMetricC("GhostArrowBright","ColorBooEnd")
// "2" appended so the names won't conflict with the GhostArrow
float g_fShowSeconds2;
float g_fZoomStart2, g_fZoomEnd2;
RageColor
g_colorMarvelousStart2, g_colorMarvelousEnd2,
g_colorPerfectStart2, g_colorPerfectEnd2,
g_colorGreatStart2, g_colorGreatEnd2,
g_colorGoodStart2, g_colorGoodEnd2,
@@ -40,17 +43,19 @@ RageColor
GhostArrowBright::GhostArrowBright()
{
g_fShowSeconds2 = SHOW_SECONDS;
g_fZoomStart2 = ZOOM_START;
g_fZoomEnd2 = ZOOM_END;
g_colorPerfectStart2= COLOR_PERFECT_START;
g_colorPerfectEnd2 = COLOR_PERFECT_END;
g_colorGreatStart2 = COLOR_GREAT_START;
g_colorGreatEnd2 = COLOR_GREAT_END;
g_colorGoodStart2 = COLOR_GOOD_START;
g_colorGoodEnd2 = COLOR_GOOD_END;
g_colorBooStart2 = COLOR_BOO_START;
g_colorBooEnd2 = COLOR_BOO_END;
g_fShowSeconds2 = SHOW_SECONDS;
g_fZoomStart2 = ZOOM_START;
g_fZoomEnd2 = ZOOM_END;
g_colorMarvelousStart2 = COLOR_MARVELOUS_START;
g_colorMarvelousEnd2 = COLOR_MARVELOUS_END;
g_colorPerfectStart2 = COLOR_PERFECT_START;
g_colorPerfectEnd2 = COLOR_PERFECT_END;
g_colorGreatStart2 = COLOR_GREAT_START;
g_colorGreatEnd2 = COLOR_GREAT_END;
g_colorGoodStart2 = COLOR_GOOD_START;
g_colorGoodEnd2 = COLOR_GOOD_END;
g_colorBooStart2 = COLOR_BOO_START;
g_colorBooEnd2 = COLOR_BOO_END;
SetDiffuse( RageColor(1,1,1,0) );
@@ -71,10 +76,11 @@ void GhostArrowBright::Step( TapNoteScore score )
RageColor colorStart, colorEnd;
switch( score )
{
case TNS_PERFECT: colorStart = g_colorPerfectStart2; colorEnd = g_colorPerfectEnd2; break;
case TNS_GREAT: colorStart = g_colorGreatStart2; colorEnd = g_colorGreatEnd2; break;
case TNS_GOOD: colorStart = g_colorGoodStart2; colorEnd = g_colorGoodEnd2; break;
case TNS_BOO: colorStart = g_colorBooStart2; colorEnd = g_colorBooEnd2; break;
case TNS_MARVELOUS: colorStart = g_colorMarvelousStart2;colorEnd = g_colorMarvelousEnd2; break;
case TNS_PERFECT: colorStart = g_colorPerfectStart2; colorEnd = g_colorPerfectEnd2; break;
case TNS_GREAT: colorStart = g_colorGreatStart2; colorEnd = g_colorGreatEnd2; break;
case TNS_GOOD: colorStart = g_colorGoodStart2; colorEnd = g_colorGoodEnd2; break;
case TNS_BOO: colorStart = g_colorBooStart2; colorEnd = g_colorBooEnd2; break;
case TNS_MISS: // miss should never be passed in here
default:
ASSERT(0);
+3 -1
View File
@@ -16,6 +16,7 @@ CString GradeToString( Grade g )
{
switch( g )
{
case GRADE_AAAA: return "AAAA";
case GRADE_AAA: return "AAA";
case GRADE_AA: return "AA";
case GRADE_A: return "A";
@@ -32,7 +33,8 @@ Grade StringToGrade( const CString &sGrade )
{
CString s = sGrade;
s.MakeUpper();
if ( s == "AAA" ) return GRADE_AAA;
if ( s == "AAAA" ) return GRADE_AAAA;
else if( s == "AAA" ) return GRADE_AAA;
else if( s == "AA" ) return GRADE_AA;
else if( s == "A" ) return GRADE_A;
else if( s == "B" ) return GRADE_B;
+1 -1
View File
@@ -15,7 +15,7 @@
enum Grade { GRADE_NO_DATA=0,
GRADE_E, GRADE_D, GRADE_C, GRADE_B, GRADE_A,
GRADE_AA,GRADE_AAA };
GRADE_AA,GRADE_AAA,GRADE_AAAA };
CString GradeToString( Grade g );
Grade StringToGrade( const CString &s );
+17 -15
View File
@@ -26,7 +26,7 @@ const float GRADES_TO_SCROLL = NUM_GRADE_FRAMES*4;
GradeDisplay::GradeDisplay()
{
Load( THEME->GetPathTo("Graphics","evaluation grades 1x7") );
Load( THEME->GetPathTo("Graphics","evaluation grades 1x8") );
StopAnimating();
m_fTimeLeftInScroll = 0;
@@ -85,13 +85,14 @@ void GradeDisplay::SetGrade( PlayerNumber pn, Grade g )
int iNumCols = (this->GetNumStates()>8) ? 2 : 1;
switch( g )
{
case GRADE_AAA: SetState( 0*iNumCols+pn ); break;
case GRADE_AA: SetState( 1*iNumCols+pn ); break;
case GRADE_A: SetState( 2*iNumCols+pn ); break;
case GRADE_B: SetState( 3*iNumCols+pn ); break;
case GRADE_C: SetState( 4*iNumCols+pn ); break;
case GRADE_D: SetState( 5*iNumCols+pn ); break;
case GRADE_E: SetState( 6*iNumCols+pn ); break;
case GRADE_AAAA: SetState( 0*iNumCols+pn ); break;
case GRADE_AAA: SetState( 1*iNumCols+pn ); break;
case GRADE_AA: SetState( 2*iNumCols+pn ); break;
case GRADE_A: SetState( 3*iNumCols+pn ); break;
case GRADE_B: SetState( 4*iNumCols+pn ); break;
case GRADE_C: SetState( 5*iNumCols+pn ); break;
case GRADE_D: SetState( 6*iNumCols+pn ); break;
case GRADE_E: SetState( 7*iNumCols+pn ); break;
case GRADE_NO_DATA: SetDiffuse( RageColor(1,1,1,0) ); break;
default: ASSERT(0);
}
@@ -110,13 +111,14 @@ void GradeDisplay::SpinAndSettleOn( Grade g )
int iFrameNo=0;
switch( g )
{
case GRADE_AAA: iFrameNo = 0; break;
case GRADE_AA: iFrameNo = 1; break;
case GRADE_A: iFrameNo = 2; break;
case GRADE_B: iFrameNo = 3; break;
case GRADE_C: iFrameNo = 4; break;
case GRADE_D: iFrameNo = 5; break;
case GRADE_E: iFrameNo = 6; break;
case GRADE_AAAA: iFrameNo = 0; break;
case GRADE_AAA: iFrameNo = 1; break;
case GRADE_AA: iFrameNo = 2; break;
case GRADE_A: iFrameNo = 3; break;
case GRADE_B: iFrameNo = 4; break;
case GRADE_C: iFrameNo = 5; break;
case GRADE_D: iFrameNo = 6; break;
case GRADE_E: iFrameNo = 7; break;
default: ASSERT(0);
}
+8 -20
View File
@@ -53,28 +53,15 @@ void Judgement::SetJudgement( TapNoteScore score )
switch( score )
{
case TNS_PERFECT: m_sprJudgement.SetState( 0 ); break;
case TNS_GREAT: m_sprJudgement.SetState( 1 ); break;
case TNS_GOOD: m_sprJudgement.SetState( 2 ); break;
case TNS_BOO: m_sprJudgement.SetState( 3 ); break;
case TNS_MISS: m_sprJudgement.SetState( 4 ); break;
default: ASSERT( false );
case TNS_MARVELOUS: m_sprJudgement.SetState( 0 ); break;
case TNS_PERFECT: m_sprJudgement.SetState( 1 ); break;
case TNS_GREAT: m_sprJudgement.SetState( 2 ); break;
case TNS_GOOD: m_sprJudgement.SetState( 3 ); break;
case TNS_BOO: m_sprJudgement.SetState( 4 ); break;
case TNS_MISS: m_sprJudgement.SetState( 5 ); break;
default: ASSERT(0);
}
// Chris: Resize the graphic file itself if you want the size different for Ez2.
/*
if ( GAMESTATE->m_CurGame == GAME_EZ2 ) // Resize Judgement graphics for Ez2.
{
m_sprJudgement.SetHeight( 22.0f * 2.1f );
m_sprJudgement.SetWidth( 143.0f * 2.1f );
if ( score == TNS_PERFECT || score == TNS_GREAT )
{
m_sprJudgement.SetHeight( 22.0f * 2.6f );
m_sprJudgement.SetWidth( 143.0f * 2.8f );
}
}
*/
m_fDisplayCountdown = JUDGEMENT_DISPLAY_TIME;
m_sprJudgement.SetEffectNone();
@@ -100,6 +87,7 @@ void Judgement::SetJudgement( TapNoteScore score )
float fMagnitudeX, fMagnitudeY;
switch( score )
{
case TNS_MARVELOUS: fMagnitudeX = 1.50f; fMagnitudeY = 2.00f; break;
case TNS_PERFECT: fMagnitudeX = 1.50f; fMagnitudeY = 2.00f; break;
case TNS_GREAT: fMagnitudeX = 1.30f; fMagnitudeY = 1.50f; break;
case TNS_GOOD: fMagnitudeX = 1.10f; fMagnitudeY = 1.25f; break;
+9
View File
@@ -276,11 +276,14 @@ void LifeMeterBar::ChangeLife( TapNoteScore score )
case SongOptions::DRAIN_NORMAL:
switch( score )
{
case TNS_MARVELOUS: fDeltaLife = +0.008f; break;
case TNS_PERFECT: fDeltaLife = +0.008f; break;
case TNS_GREAT: fDeltaLife = +0.004f; break;
case TNS_GOOD: fDeltaLife = +0.000f; break;
case TNS_BOO: fDeltaLife = -0.040f; break;
case TNS_MISS: fDeltaLife = -0.080f; break;
default:
ASSERT(0);
}
if( IsHot() && score < TNS_GOOD )
fDeltaLife = -0.10f; // make it take a while to get back to "doing great"
@@ -288,21 +291,27 @@ void LifeMeterBar::ChangeLife( TapNoteScore score )
case SongOptions::DRAIN_NO_RECOVER:
switch( score )
{
case TNS_MARVELOUS: fDeltaLife = +0.000f; break;
case TNS_PERFECT: fDeltaLife = +0.000f; break;
case TNS_GREAT: fDeltaLife = +0.000f; break;
case TNS_GOOD: fDeltaLife = +0.000f; break;
case TNS_BOO: fDeltaLife = -0.040f; break;
case TNS_MISS: fDeltaLife = -0.080f; break;
default:
ASSERT(0);
}
break;
case SongOptions::DRAIN_SUDDEN_DEATH:
switch( score )
{
case TNS_MARVELOUS: fDeltaLife = +0; break;
case TNS_PERFECT: fDeltaLife = +0; break;
case TNS_GREAT: fDeltaLife = +0; break;
case TNS_GOOD: fDeltaLife = -1.0; break;
case TNS_BOO: fDeltaLife = -1.0; break;
case TNS_MISS: fDeltaLife = -1.0; break;
default:
ASSERT(0);
}
break;
default:
+1
View File
@@ -104,6 +104,7 @@ void LifeMeterBattery::ChangeLife( TapNoteScore score )
switch( score )
{
case TNS_MARVELOUS:
case TNS_PERFECT:
case TNS_GREAT:
break;
-1
View File
@@ -100,7 +100,6 @@ WheelItemDisplay::WheelItemDisplay()
for( int p=0; p<NUM_PLAYERS; p++ )
{
m_GradeDisplay[p].Load( THEME->GetPathTo("Graphics","select music small grades 2x8") );
m_GradeDisplay[p].SetZoom( 1.0f );
m_GradeDisplay[p].SetXY( GRADE_X(p), 0 );
}
+1 -1
View File
@@ -298,7 +298,7 @@ int NoteData::GetPossibleDancePoints()
//An "OK" (Successful Freeze step) will add 6 points
//A "NG" (Unsuccessful Freeze step) is worth 0 points
return GetNumTapNotes()*TapNoteScoreToDancePoints(TNS_PERFECT) +
return GetNumTapNotes()*TapNoteScoreToDancePoints(TNS_PERFECT) + // not Marvelous
GetNumHoldNotes()*HoldNoteScoreToDancePoints(HNS_OK);
}
+7 -2
View File
@@ -59,7 +59,7 @@ int NoteDataWithScoring::GetNumDoublesWithScore( TapNoteScore tns, const float f
for( unsigned i=iStartIndex; i<min(iEndIndex, m_TapNoteScores[0].size()); i++ )
{
int iNumNotesThisIndex = 0;
TapNoteScore minTapNoteScore = TNS_PERFECT;
TapNoteScore minTapNoteScore = TNS_MARVELOUS;
for( int t=0; t<m_iNumTracks; t++ )
{
if( GetTapNote(t, i) != TAP_EMPTY )
@@ -113,6 +113,7 @@ float NoteDataWithScoring::GetActualStreamRadarValue( float fSongSeconds )
{
// density of steps
int iNumSuccessfulNotes =
GetNumTapNotesWithScore(TNS_MARVELOUS) +
GetNumTapNotesWithScore(TNS_PERFECT) +
GetNumTapNotesWithScore(TNS_GREAT)/2 +
GetNumHoldNotesWithScore(HNS_OK);
@@ -132,7 +133,10 @@ float NoteDataWithScoring::GetActualVoltageRadarValue( float fSongSeconds )
for( int i=0; i<MAX_BEATS; i+=BEAT_WINDOW )
{
int iNumNotesThisWindow = GetNumTapNotesWithScore(TNS_PERFECT,(float)i,(float)i+BEAT_WINDOW) + GetNumHoldNotesWithScore(HNS_OK,(float)i,(float)i+BEAT_WINDOW);
int iNumNotesThisWindow = 0;
iNumNotesThisWindow += GetNumTapNotesWithScore(TNS_MARVELOUS,(float)i,(float)i+BEAT_WINDOW);
iNumNotesThisWindow += GetNumTapNotesWithScore(TNS_PERFECT,(float)i,(float)i+BEAT_WINDOW);
iNumNotesThisWindow += GetNumHoldNotesWithScore(HNS_OK,(float)i,(float)i+BEAT_WINDOW);
float fDensityThisWindow = iNumNotesThisWindow/(float)BEAT_WINDOW;
fMaxDensitySoFar = max( fMaxDensitySoFar, fDensityThisWindow );
}
@@ -145,6 +149,7 @@ float NoteDataWithScoring::GetActualAirRadarValue( float fSongSeconds )
{
// number of doubles
int iNumDoubles =
GetNumDoublesWithScore(TNS_MARVELOUS) +
GetNumDoublesWithScore(TNS_PERFECT) +
GetNumDoublesWithScore(TNS_GREAT)/2;
float fReturn = iNumDoubles / fSongSeconds;
+45 -24
View File
@@ -28,6 +28,8 @@
#include "ThemeManager.h"
#include "Combo.h"
#define JUDGE_MARVELOUS_ZOOM_X THEME->GetMetricF("Player","JudgeMarvelousZoomX")
#define JUDGE_MARVELOUS_ZOOM_Y THEME->GetMetricF("Player","JudgeMarvelousZoomY")
#define JUDGE_PERFECT_ZOOM_X THEME->GetMetricF("Player","JudgePerfectZoomX")
#define JUDGE_PERFECT_ZOOM_Y THEME->GetMetricF("Player","JudgePerfectZoomY")
#define JUDGE_GREAT_ZOOM_X THEME->GetMetricF("Player","JudgeGreatZoomX")
@@ -41,15 +43,18 @@
// cache because reading from theme metrics is slow
float g_fJudgePerfectZoomX,
g_fJudgePerfectZoomY,
g_fJudgeGreatZoomX,
g_fJudgeGreatZoomY,
g_fJudgeGoodZoomX,
g_fJudgeGoodZoomY,
g_fJudgeBooZoomX,
g_fJudgeBooZoomY,
g_fComboJudgeTweenSeconds;
float
g_fJudgeMarvelousZoomX,
g_fJudgeMarvelousZoomY,
g_fJudgePerfectZoomX,
g_fJudgePerfectZoomY,
g_fJudgeGreatZoomX,
g_fJudgeGreatZoomY,
g_fJudgeGoodZoomX,
g_fJudgeGoodZoomY,
g_fJudgeBooZoomX,
g_fJudgeBooZoomY,
g_fComboJudgeTweenSeconds;
int g_iBrightGhostThreshold;
// these two items are in the
@@ -68,6 +73,8 @@ const float HOLD_ARROW_NG_TIME = 0.18f;
Player::Player()
{
// Update theme metrics cache
g_fJudgeMarvelousZoomX = JUDGE_MARVELOUS_ZOOM_X;
g_fJudgeMarvelousZoomY = JUDGE_MARVELOUS_ZOOM_Y;
g_fJudgePerfectZoomX = JUDGE_PERFECT_ZOOM_X;
g_fJudgePerfectZoomY = JUDGE_PERFECT_ZOOM_Y;
g_fJudgeGreatZoomX = JUDGE_GREAT_ZOOM_X;
@@ -393,21 +400,26 @@ void Player::Step( int col )
// compute the score for this hit
const float fStepBeat = NoteRowToBeat( (float)iIndexOverlappingNote );
const float fBeatsUntilStep = fStepBeat - fSongBeat;
const float fPercentFromPerfect = fabsf( fBeatsUntilStep / GetMaxBeatDifference() );
const float fSecondsFromPerfect = fabsf( fBeatsUntilStep / GAMESTATE->m_fCurBPS );
// const float fPercentFromPerfect = fabsf( fBeatsUntilStep / GetMaxBeatDifference() );
const float fNoteOffset = fBeatsUntilStep / GAMESTATE->m_fCurBPS; //the offset from the actual step in seconds
TapNoteScore score;
LOG->Trace("fPercentFromPerfect %f", fPercentFromPerfect);
if( fPercentFromPerfect < PREFSMAN->m_fJudgeWindowPerfectPercent ) score = TNS_PERFECT;
else if( fPercentFromPerfect < PREFSMAN->m_fJudgeWindowGreatPercent ) score = TNS_GREAT;
else if( fPercentFromPerfect < PREFSMAN->m_fJudgeWindowGoodPercent ) score = TNS_GOOD;
LOG->Trace("fSecondsFromPerfect = %f", fSecondsFromPerfect);
if( fSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowMarvelousSeconds ) score = TNS_MARVELOUS;
else if( fSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowPerfectSeconds ) score = TNS_PERFECT;
else if( fSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGreatSeconds ) score = TNS_GREAT;
else if( fSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGoodSeconds ) score = TNS_GOOD;
//we have to mark boo's as better than MISS's now that the window is expanded
else if( fPercentFromPerfect < 1.0f ) score = TNS_BOO;
else score = TNS_NONE;
else if( fSecondsFromPerfect <= 1.0f ) score = TNS_BOO;
else score = TNS_NONE;
if( !GAMESTATE->m_bEditing && (GAMESTATE->m_bDemonstration || PREFSMAN->m_bAutoPlay) )
score = TNS_MARVELOUS;
if( score==TNS_MARVELOUS && !PREFSMAN->m_bMarvelousTiming )
score = TNS_PERFECT;
bDestroyedNote = (score >= TNS_GOOD);
@@ -415,7 +427,7 @@ void Player::Step( int col )
LOG->Trace("(%2d/%2d)Note offset: %f, Score: %i", m_iOffsetSample, SAMPLE_COUNT, fNoteOffset, score);
SetTapNoteScore(col, iIndexOverlappingNote, score);
if (GAMESTATE->m_SongOptions.m_AutoAdjust == SongOptions::ADJUST_ON)
if (GAMESTATE->m_SongOptions.m_bAutoSync )
{
m_fOffset[m_iOffsetSample++] = fNoteOffset;
if (m_iOffsetSample >= SAMPLE_COUNT)
@@ -460,7 +472,7 @@ void Player::OnRowDestroyed( int iIndexThatWasSteppedOn )
LOG->Trace( "Player::OnRowDestroyed" );
// find the minimum score of the row
TapNoteScore score = TNS_PERFECT;
TapNoteScore score = TNS_MARVELOUS;
for( int t=0; t<m_iNumTracks; t++ )
{
TapNoteScore tns = GetTapNoteScore(t, iIndexThatWasSteppedOn);
@@ -482,8 +494,14 @@ void Player::OnRowDestroyed( int iIndexThatWasSteppedOn )
/* If the whole row was hit with perfects or greats, remove the row
* from the NoteField, so it disappears. */
if ( score==TNS_PERFECT || score == TNS_GREAT )
switch ( score )
{
case TNS_MARVELOUS:
case TNS_PERFECT:
case TNS_GREAT:
m_NoteField.RemoveTapNoteRow( iIndexThatWasSteppedOn );
break;
}
int iNumNotesInThisRow = 0;
for( int c=0; c<m_iNumTracks; c++ ) // for each column
@@ -511,10 +529,13 @@ void Player::OnRowDestroyed( int iIndexThatWasSteppedOn )
float fStartZoomX=0.f, fStartZoomY=0.f;
switch( score )
{
case TNS_PERFECT: fStartZoomX = g_fJudgePerfectZoomX; fStartZoomY = g_fJudgePerfectZoomY; break;
case TNS_GREAT: fStartZoomX = g_fJudgeGreatZoomX; fStartZoomY = g_fJudgeGreatZoomY; break;
case TNS_GOOD: fStartZoomX = g_fJudgeGoodZoomX; fStartZoomY = g_fJudgeGoodZoomY; break;
case TNS_BOO: fStartZoomX = g_fJudgeBooZoomX; fStartZoomY = g_fJudgeBooZoomY; break;
case TNS_MARVELOUS: fStartZoomX = g_fJudgeMarvelousZoomX; fStartZoomY = g_fJudgeMarvelousZoomY; break;
case TNS_PERFECT: fStartZoomX = g_fJudgePerfectZoomX; fStartZoomY = g_fJudgePerfectZoomY; break;
case TNS_GREAT: fStartZoomX = g_fJudgeGreatZoomX; fStartZoomY = g_fJudgeGreatZoomY; break;
case TNS_GOOD: fStartZoomX = g_fJudgeGoodZoomX; fStartZoomY = g_fJudgeGoodZoomY; break;
case TNS_BOO: fStartZoomX = g_fJudgeBooZoomX; fStartZoomY = g_fJudgeBooZoomY; break;
default:
ASSERT(0);
}
m_frameJudgement.StopTweening();
m_frameJudgement.SetZoomX( fStartZoomX );
@@ -630,7 +651,7 @@ void Player::HandleHoldNoteScore( HoldNoteScore score, TapNoteScore TapNoteScore
float Player::GetMaxBeatDifference()
{
return GAMESTATE->m_fCurBPS * PREFSMAN->m_fJudgeWindowSeconds * GAMESTATE->m_SongOptions.m_fMusicRate;
return GAMESTATE->m_fCurBPS * GAMESTATE->m_SongOptions.m_fMusicRate * PREFSMAN->m_fJudgeWindowBooSeconds * PREFSMAN->m_fJudgeWindowScale;
}
void Player::FadeToFail()
+24 -16
View File
@@ -52,15 +52,17 @@ PrefsManager::PrefsManager()
m_bEventMode = false;
m_iNumArcadeStages = 3;
m_bAutoPlay = false;
m_fJudgeWindowSeconds = 0.17f;
m_fJudgeWindowPerfectPercent = 0.25f;
m_fJudgeWindowGreatPercent = 0.50f;
m_fJudgeWindowGoodPercent = 0.75f;
m_fJudgeWindowScale = 1.0f;
m_fJudgeWindowMarvelousSeconds = 0.023f;
m_fJudgeWindowPerfectSeconds = 0.043f;
m_fJudgeWindowGreatSeconds = 0.086f;
m_fJudgeWindowGoodSeconds = 0.129f;
m_fJudgeWindowBooSeconds = 0.172f;
m_fLifeDifficultyScale = 1.0f;
m_iMovieDecodeMS = 2;
m_bUseBGIfNoBanner = false;
m_bDelayedEscape = true;
m_bHowToPlay = true;
m_bInstructions = true;
m_bShowDontDie = true;
m_bShowSelectGroup = true;
m_bArcadeOptionsNavigation = false;
@@ -68,6 +70,8 @@ PrefsManager::PrefsManager()
m_bCoinOpMode = false;
m_bMusicWheelUsesSections = true;
m_bChangeBannersWhenFast = false;
m_bEasterEggs = true;
m_bMarvelousTiming = true;
/* I'd rather get occasional people asking for support for this even though it's
* already here than lots of people asking why songs aren't being displayed. */
@@ -107,17 +111,17 @@ PrefsManager::~PrefsManager()
ini.GetValueB( "Options", "EventMode", m_bEventMode );
ini.GetValueI( "Options", "NumArcadeStages", m_iNumArcadeStages );
ini.GetValueB( "Options", "AutoPlay", m_bAutoPlay );
ini.GetValueF( "Options", "JudgeWindowSeconds", m_fJudgeWindowSeconds );
ini.GetValueF( "Options", "JudgeWindowPerfectPercent", m_fJudgeWindowPerfectPercent );
ini.GetValueF( "Options", "JudgeWindowGreatPercent", m_fJudgeWindowGreatPercent );
ini.GetValueF( "Options", "JudgeWindowGoodPercent", m_fJudgeWindowGoodPercent );
ini.GetValueF( "Options", "JudgeWindowScale", m_fJudgeWindowScale );
ini.GetValueF( "Options", "JudgeWindowPerfectSeconds", m_fJudgeWindowPerfectSeconds );
ini.GetValueF( "Options", "JudgeWindowGreatSeconds", m_fJudgeWindowGreatSeconds );
ini.GetValueF( "Options", "JudgeWindowGoodSeconds", m_fJudgeWindowGoodSeconds );
ini.GetValueF( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale );
ini.GetValueI( "Options", "MovieDecodeMS", m_iMovieDecodeMS );
ini.GetValueB( "Options", "UseBGIfNoBanner", m_bUseBGIfNoBanner );
ini.GetValueB( "Options", "DelayedEscape", m_bDelayedEscape );
ini.GetValueB( "Options", "HiddenSongs", m_bHiddenSongs );
ini.GetValueB( "Options", "Vsync", m_bVsync );
ini.GetValueB( "Options", "HowToPlay", m_bHowToPlay );
ini.GetValueB( "Options", "HowToPlay", m_bInstructions );
ini.GetValueB( "Options", "Caution", m_bShowDontDie );
ini.GetValueB( "Options", "SelectGroup", m_bShowSelectGroup );
ini.GetValueB( "Options", "ArcadeOptionsNavigation", m_bArcadeOptionsNavigation );
@@ -127,6 +131,8 @@ PrefsManager::~PrefsManager()
ini.GetValueB( "Options", "MusicWheelUsesSections", m_bMusicWheelUsesSections );
ini.GetValueB( "Options", "ChangeBannersWhenFast", m_bChangeBannersWhenFast );
ini.GetValue ( "Options", "SoundDrivers", m_bSoundDrivers );
ini.GetValueB( "Options", "EasterEggs", m_bEasterEggs );
ini.GetValueB( "Options", "MarvelousTiming", m_bMarvelousTiming );
ini.GetValueF( "Options", "SoundVolume", m_fSoundVolume );
m_asAdditionalSongFolders.clear();
@@ -164,17 +170,17 @@ void PrefsManager::SaveGlobalPrefsToDisk()
ini.SetValueB( "Options", "MenuTimer", m_bMenuTimer );
ini.SetValueI( "Options", "NumArcadeStages", m_iNumArcadeStages );
ini.SetValueB( "Options", "AutoPlay", m_bAutoPlay );
ini.SetValueF( "Options", "JudgeWindowSeconds", m_fJudgeWindowSeconds );
ini.SetValueF( "Options", "JudgeWindowPerfectPercent", m_fJudgeWindowPerfectPercent );
ini.SetValueF( "Options", "JudgeWindowGreatPercent", m_fJudgeWindowGreatPercent );
ini.SetValueF( "Options", "JudgeWindowGoodPercent", m_fJudgeWindowGoodPercent );
ini.SetValueF( "Options", "JudgeWindowScale", m_fJudgeWindowScale );
ini.SetValueF( "Options", "JudgeWindowPerfectSeconds", m_fJudgeWindowPerfectSeconds );
ini.SetValueF( "Options", "JudgeWindowGreatSeconds", m_fJudgeWindowGreatSeconds );
ini.SetValueF( "Options", "JudgeWindowGoodSeconds", m_fJudgeWindowGoodSeconds );
ini.SetValueF( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale );
ini.SetValueI( "Options", "MovieDecodeMS", m_iMovieDecodeMS );
ini.SetValueB( "Options", "UseBGIfNoBanner", m_bUseBGIfNoBanner );
ini.SetValueB( "Options", "DelayedEscape", m_bDelayedEscape );
ini.SetValueB( "Options", "HiddenSongs", m_bHiddenSongs );
ini.SetValueB( "Options", "Vsync", m_bVsync );
ini.SetValueB( "Options", "HowToPlay", m_bHowToPlay );
ini.SetValueB( "Options", "HowToPlay", m_bInstructions );
ini.SetValueB( "Options", "Caution", m_bShowDontDie );
ini.SetValueB( "Options", "SelectGroup", m_bShowSelectGroup );
ini.SetValueB( "Options", "ArcadeOptionsNavigation", m_bArcadeOptionsNavigation );
@@ -182,7 +188,9 @@ void PrefsManager::SaveGlobalPrefsToDisk()
ini.SetValueI( "Options", "UnloadTextureDelaySeconds", m_iUnloadTextureDelaySeconds );
ini.SetValueB( "Options", "MusicWheelUsesSections", m_bMusicWheelUsesSections );
ini.SetValueB( "Options", "ChangeBannersWhenFast", m_bChangeBannersWhenFast );
ini.SetValueB( "Options", "CoinOpMode", m_bCoinOpMode );
ini.SetValue ( "Options", "SoundDrivers", m_bSoundDrivers );
ini.SetValueB( "Options", "EasterEggs", m_bEasterEggs );
ini.SetValueB( "Options", "MarvelousTiming", m_bMarvelousTiming );
/* Only write this if it's been changed. This ensures that we can change
* the default and have it take effect for everyone (except people who
+9 -5
View File
@@ -42,18 +42,22 @@ public:
bool m_bShowDanger;
int m_iNumArcadeStages;
bool m_bEventMode;
float m_fJudgeWindowSeconds;
float m_fJudgeWindowScale;
float m_fLifeDifficultyScale;
float m_fJudgeWindowPerfectPercent;
float m_fJudgeWindowGreatPercent;
float m_fJudgeWindowGoodPercent;
float m_fJudgeWindowMarvelousSeconds;
float m_fJudgeWindowPerfectSeconds;
float m_fJudgeWindowGreatSeconds;
float m_fJudgeWindowGoodSeconds;
float m_fJudgeWindowBooSeconds;
bool m_bAutoPlay;
bool m_bDelayedEscape;
bool m_bHowToPlay, m_bShowDontDie, m_bShowSelectGroup;
bool m_bInstructions, m_bShowDontDie, m_bShowSelectGroup;
bool m_bArcadeOptionsNavigation;
bool m_bCoinOpMode;
bool m_bMusicWheelUsesSections;
bool m_bChangeBannersWhenFast;
bool m_bEasterEggs;
bool m_bMarvelousTiming;
CStringArray m_asAdditionalSongFolders;
CString m_DWIPath;
+1
View File
@@ -416,6 +416,7 @@ void RageInput::Update( float fDeltaTime )
for( int axis=0; axis<iNumJoyAxes; axis++ )
{
Sint16 val = SDL_JoystickGetAxis(pJoy,axis);
// LOG->Trace( "axis %d = %d", axis, val );
if( val < -16000 )
{
JoystickButton b = (JoystickButton)(JOY_LEFT+2*axis);
+1
View File
@@ -136,6 +136,7 @@ void ScoreDisplayRolling::AddToScore( TapNoteScore score, int iCurCombo )
int p; // score multiplier
switch( score )
{
case TNS_MARVELOUS: p = 10; break;
case TNS_PERFECT: p = 10; break;
case TNS_GREAT: p = 5; break;
default: p = 0; break;
+1
View File
@@ -32,6 +32,7 @@ void ScoreKeeperMAX2::AddScore( TapNoteScore score )
switch( score )
{
case TNS_MARVELOUS: p = 10; break;
case TNS_PERFECT: p = 10; break;
case TNS_GREAT: p = 5; break;
default: p = 0; break;
+3 -3
View File
@@ -30,7 +30,7 @@ enum {
AO_ANNOUNCER = 0,
AO_THEME,
AO_SKIN,
AO_HOWTOPLAY,
AO_INSTRUCTIONS,
AO_CAUTION,
AO_SELECT_GROUP,
AO_WHEEL_SECTIONS,
@@ -154,7 +154,7 @@ void ScreenAppearanceOptions::ImportOptions()
if( m_iSelectedOption[0][AO_SKIN] == -1 )
m_iSelectedOption[0][AO_SKIN] = 0;
m_iSelectedOption[0][AO_HOWTOPLAY] = PREFSMAN->m_bHowToPlay? 1:0;
m_iSelectedOption[0][AO_INSTRUCTIONS] = PREFSMAN->m_bInstructions? 1:0;
m_iSelectedOption[0][AO_CAUTION] = PREFSMAN->m_bShowDontDie? 1:0;
m_iSelectedOption[0][AO_SELECT_GROUP] = PREFSMAN->m_bShowSelectGroup? 1:0;
m_iSelectedOption[0][AO_WHEEL_SECTIONS] = PREFSMAN->m_bMusicWheelUsesSections? 1:0;
@@ -179,7 +179,7 @@ void ScreenAppearanceOptions::ExportOptions()
CString sNewSkin = m_OptionRowData[AO_SKIN].szOptionsText[iSelectedSkin];
GAMEMAN->SwitchNoteSkin( sNewSkin );
PREFSMAN->m_bHowToPlay = !!m_iSelectedOption[0][AO_HOWTOPLAY];
PREFSMAN->m_bInstructions = !!m_iSelectedOption[0][AO_INSTRUCTIONS];
PREFSMAN->m_bShowDontDie = !!m_iSelectedOption[0][AO_CAUTION];
PREFSMAN->m_bShowSelectGroup = !!m_iSelectedOption[0][AO_SELECT_GROUP];
PREFSMAN->m_bMusicWheelUsesSections = !!m_iSelectedOption[0][AO_WHEEL_SECTIONS];
+4 -2
View File
@@ -52,7 +52,7 @@ void ScreenAttract::Input( const DeviceInput& DeviceI, const InputEventType type
if(type != IET_FIRST_PRESS) return; // don't care
if( m_Fade.IsClosing() )
if( m_Fade.IsOpening() || m_Fade.IsClosing() )
return;
if( MenuI.IsValid() )
@@ -64,6 +64,7 @@ void ScreenAttract::Input( const DeviceInput& DeviceI, const InputEventType type
m_Fade.CloseWipingRight( SM_GoToNextScreen );
break;
case MENU_BUTTON_START:
m_soundMusic.Stop();
GAMESTATE->m_bSideIsJoined[MenuI.player] = true;
GAMESTATE->m_MasterPlayerNumber = MenuI.player;
GAMESTATE->m_bPlayersCanJoin = false;
@@ -96,7 +97,8 @@ void ScreenAttract::FirstUpdate()
m_soundStart.Load( THEME->GetPathTo("Sounds","menu start") );
SOUNDMAN->PlayMusic( THEME->GetPathTo("Sounds",this->GetElementName() + " music") );
m_soundMusic.Load( THEME->GetPathTo("Sounds",this->GetElementName() + " music") );
m_soundMusic.Play();
this->SendScreenMessage( SM_BeginFadingOut, SECONDS_TO_SHOW );
}
+3
View File
@@ -19,6 +19,7 @@
#include "RandomSample.h"
#include "BGAnimation.h"
#include "RageTimer.h"
#include "RageSound.h"
class ScreenAttract : public Screen
@@ -40,6 +41,8 @@ protected:
BGAnimation m_Background;
TransitionFade m_Fade;
RandomSample m_soundStart;
RageSound m_soundMusic;
};
+4 -1
View File
@@ -120,6 +120,7 @@ ScreenDemonstration::ScreenDemonstration() : ScreenGameplay( false )
ScreenDemonstration::~ScreenDemonstration()
{
GAMESTATE->m_bDemonstration = false;
GAMESTATE->Reset();
}
void ScreenDemonstration::FirstUpdate()
@@ -151,7 +152,9 @@ void ScreenDemonstration::Update( float fDeltaTime )
{
ScreenGameplay::Update( fDeltaTime );
m_textAutoPlay.SetDiffuse( RageColor(1,1,1,0) ); // hide autoplay
// hide status icons
for( int i=0; i<NUM_STATUS_ICONS; i++ )
m_sprStatusIcons[i].SetDiffuse( RageColor(1,1,1,0) );
}
void ScreenDemonstration::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
+46 -77
View File
@@ -26,7 +26,7 @@
#include "RageSoundManager.h"
#define SONGSEL_SCREEN THEME->GetMetric("ScreenEvaluation","SongSelectScreen")
#define SONGSEL_SCREEN THEME->GetMetric("ScreenEvaluation","SongSelectScreen")
#define BANNER_X THEME->GetMetricF("ScreenEvaluation","BannerX")
#define BANNER_Y THEME->GetMetricF("ScreenEvaluation","BannerY")
#define STAGE_X THEME->GetMetricF("ScreenEvaluation","StageX")
@@ -38,6 +38,8 @@
#define PERCENT_BASE_X( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("PercentBaseP%dX",p+1))
#define PERCENT_BASE_Y THEME->GetMetricF("ScreenEvaluation","PercentBaseY")
#define JUDGE_LABELS_X THEME->GetMetricF("ScreenEvaluation","JudgeLabelsX")
#define MARVELOUS_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("Marvelous%sP%dX",o?"Oni":"",p+1))
#define MARVELOUS_Y THEME->GetMetricF("ScreenEvaluation","MarvelousY")
#define PERFECT_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("Perfect%sP%dX",o?"Oni":"",p+1))
#define PERFECT_Y THEME->GetMetricF("ScreenEvaluation","PerfectY")
#define GREAT_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("Great%sP%dX",o?"Oni":"",p+1))
@@ -77,25 +79,27 @@
float JUDGE_X( bool oni, int p, int l ) {
switch( l ) {
case 0: return PERFECT_X(oni,p);
case 1: return GREAT_X(oni,p);
case 2: return GOOD_X(oni,p);
case 3: return BOO_X(oni,p);
case 4: return MISS_X(oni,p);
case 5: return OK_X(oni,p);
case 6: return MAX_COMBO_X(oni,p);
case 0: return MARVELOUS_X(oni,p);
case 1: return PERFECT_X(oni,p);
case 2: return GREAT_X(oni,p);
case 3: return GOOD_X(oni,p);
case 4: return BOO_X(oni,p);
case 5: return MISS_X(oni,p);
case 6: return OK_X(oni,p);
case 7: return MAX_COMBO_X(oni,p);
default: ASSERT(0); return 0;
}
}
float JUDGE_Y( int l ) {
switch( l ) {
case 0: return PERFECT_Y;
case 1: return GREAT_Y;
case 2: return GOOD_Y;
case 3: return BOO_Y;
case 4: return MISS_Y;
case 5: return OK_Y;
case 6: return MAX_COMBO_Y;
case 0: return MARVELOUS_Y;
case 1: return PERFECT_Y;
case 2: return GREAT_Y;
case 3: return GOOD_Y;
case 4: return BOO_Y;
case 5: return MISS_Y;
case 6: return OK_Y;
case 7: return MAX_COMBO_Y;
default: ASSERT(0); return 0;
}
}
@@ -168,23 +172,6 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary )
}
///////////////////////////
// Andy:
// Fake COOL! / GOOD / OOPS for Ez2dancer using the DDR Rankings.
/* Todo: Accomodate this using theme metrics
if( GAMESTATE->m_CurGame == GAME_EZ2 )
{
for( int p=0; p<NUM_PLAYERS; p++ )
{
iTapNoteScores[p][TNS_PERFECT] += iTapNoteScores[p][TNS_GREAT];
iTapNoteScores[p][TNS_GREAT] = 0;
iTapNoteScores[p][TNS_MISS] += iTapNoteScores[p][TNS_BOO];
iTapNoteScores[p][TNS_BOO] = 0;
}
}
*/
///////////////////////////
// Init the song banners depending on m_ResultMode
///////////////////////////
@@ -280,29 +267,7 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary )
grade[p] = GRADE_E;
continue;
}
/* Based on the percentage of your total "Dance Points" to the maximum
* possible number, the following rank is assigned:
*
* 100% - AAA
* 93% - AA
* 80% - A
* 65% - B
* 45% - C
* Less - D
* Fail - E
*/
float fPercentDancePoints = iActualDancePoints[p] / (float)iPossibleDancePoints[p];
fPercentDancePoints = max( fPercentDancePoints, 0 );
LOG->Trace( "iActualDancePoints: %i", iActualDancePoints[p] );
LOG->Trace( "iPossibleDancePoints: %i", iPossibleDancePoints[p] );
LOG->Trace( "fPercentDancePoints: %f", fPercentDancePoints );
if ( fPercentDancePoints >= 1.00 ) grade[p] = GRADE_AAA;
else if( fPercentDancePoints >= 0.93 ) grade[p] = GRADE_AA;
else if( fPercentDancePoints >= 0.80 ) grade[p] = GRADE_A;
else if( fPercentDancePoints >= 0.65 ) grade[p] = GRADE_B;
else if( fPercentDancePoints >= 0.45 ) grade[p] = GRADE_C;
else grade[p] = GRADE_D;
grade[p] = GAMESTATE->GetCurrentGrade( (PlayerNumber)p );
}
Grade max_grade = GRADE_NO_DATA;
@@ -505,7 +470,7 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary )
for( l=0; l<NUM_JUDGE_LINES; l++ )
{
// EZ2 should hide these things by placing them off screen with theme metrics
m_sprJudgeLabels[l].Load( THEME->GetPathTo("Graphics","evaluation judge labels 1x7") );
m_sprJudgeLabels[l].Load( THEME->GetPathTo("Graphics","evaluation judge labels 1x8") );
m_sprJudgeLabels[l].StopAnimating();
m_sprJudgeLabels[l].SetState( l );
m_sprJudgeLabels[l].SetXY( JUDGE_LABELS_X, JUDGE_Y(l) );
@@ -536,13 +501,14 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary )
this->AddChild( &m_textJudgeNumbers[l][p] );
}
m_textJudgeNumbers[0][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_PERFECT]) );
m_textJudgeNumbers[1][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_GREAT]) );
m_textJudgeNumbers[2][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_GOOD]) );
m_textJudgeNumbers[3][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_BOO]) );
m_textJudgeNumbers[4][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_MISS]) );
m_textJudgeNumbers[5][p].SetText( ssprintf("%4d", iHoldNoteScores[p][HNS_OK]) );
m_textJudgeNumbers[6][p].SetText( ssprintf("%4d", iMaxCombo[p]) );
m_textJudgeNumbers[0][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_MARVELOUS]) );
m_textJudgeNumbers[1][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_PERFECT]) );
m_textJudgeNumbers[2][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_GREAT]) );
m_textJudgeNumbers[3][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_GOOD]) );
m_textJudgeNumbers[4][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_BOO]) );
m_textJudgeNumbers[5][p].SetText( ssprintf("%4d", iTapNoteScores[p][TNS_MISS]) );
m_textJudgeNumbers[6][p].SetText( ssprintf("%4d", iHoldNoteScores[p][HNS_OK]) );
m_textJudgeNumbers[7][p].SetText( ssprintf("%4d", iMaxCombo[p]) );
if( m_ResultMode==RM_ONI )
@@ -579,13 +545,14 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary )
case RM_ARCADE_STAGE:
switch( max_grade )
{
case GRADE_E: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation e") ); break;
case GRADE_D: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation d") ); break;
case GRADE_C: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation c") ); break;
case GRADE_B: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation b") ); break;
case GRADE_A: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation a") ); break;
case GRADE_AA: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation aa") ); break;
case GRADE_AAA: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation aaa") ); break;
case GRADE_E: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation e") ); break;
case GRADE_D: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation d") ); break;
case GRADE_C: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation c") ); break;
case GRADE_B: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation b") ); break;
case GRADE_A: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation a") ); break;
case GRADE_AA: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation aa") ); break;
case GRADE_AAA: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation aaa") ); break;
case GRADE_AAAA: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation aaaa") ); break;
case GRADE_NO_DATA:
default:
ASSERT(0); // invalid grade
@@ -595,13 +562,14 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary )
case RM_ARCADE_SUMMARY:
switch( max_grade )
{
case GRADE_E: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final e") ); break;
case GRADE_D: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final d") ); break;
case GRADE_C: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final c") ); break;
case GRADE_B: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final b") ); break;
case GRADE_A: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final a") ); break;
case GRADE_AA: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final aa") ); break;
case GRADE_AAA: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final aaa") ); break;
case GRADE_E: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final e") ); break;
case GRADE_D: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final d") ); break;
case GRADE_C: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final c") ); break;
case GRADE_B: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final b") ); break;
case GRADE_A: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final a") ); break;
case GRADE_AA: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final aa") ); break;
case GRADE_AAA: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final aaa") ); break;
case GRADE_AAAA: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final aaaa") ); break;
case GRADE_NO_DATA:
default:
ASSERT(0); // invalid grade
@@ -616,6 +584,7 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary )
{
case GRADE_AA:
case GRADE_AAA:
case GRADE_AAAA:
this->SendScreenMessage( SM_PlayCheer, 2.5f );
break;
}
+1 -1
View File
@@ -22,7 +22,7 @@
#include "DifficultyIcon.h"
const int NUM_JUDGE_LINES = 7; // perfect, great, good, boo, miss, ok, max_combo
const int NUM_JUDGE_LINES = 8; // marvelous, perfect, great, good, boo, miss, ok, max_combo
const int STAGES_TO_SHOW_IN_SUMMARY = 3; // only show the latest three stages in a summary
+2
View File
@@ -30,6 +30,8 @@ const ScreenMessage SM_PlayAnnouncer = ScreenMessage(SM_User + 3);
ScreenGameOver::ScreenGameOver()
{
GAMESTATE->Reset();
m_Background.LoadFromAniDir( THEME->GetPathTo("BGAnimations","game over") );
this->AddChild( &m_Background );
+66 -40
View File
@@ -67,8 +67,8 @@
#define DIFFICULTY_Y( p, e, r ) THEME->GetMetricF("ScreenGameplay",ssprintf("DifficultyP%d%s%sY",p+1,e?"Extra":"",r?"Reverse":""))
#define DEBUG_X THEME->GetMetricF("ScreenGameplay","DebugX")
#define DEBUG_Y THEME->GetMetricF("ScreenGameplay","DebugY")
#define AUTOPLAY_X THEME->GetMetricF("ScreenGameplay","AutoPlayX")
#define AUTOPLAY_Y THEME->GetMetricF("ScreenGameplay","AutoPlayY")
#define STATUS_ICONS_X THEME->GetMetricF("ScreenGameplay","StatusIconsX")
#define STATUS_ICONS_Y THEME->GetMetricF("ScreenGameplay","StatusIconsY")
#define SURVIVE_TIME_X THEME->GetMetricF("ScreenGameplay","SurviveTimeX")
#define SURVIVE_TIME_Y THEME->GetMetricF("ScreenGameplay","SurviveTimeY")
#define SECONDS_BETWEEN_COMMENTS THEME->GetMetricF("ScreenGameplay","SecondsBetweenComments")
@@ -209,7 +209,7 @@ void ScreenGameplay::FirstUpdate()
m_bChangedOffsetOrBPM = (GAMESTATE->m_SongOptions.m_AutoAdjust == SongOptions::ADJUST_ON);
m_bChangedOffsetOrBPM = GAMESTATE->m_SongOptions.m_bAutoSync;
m_DancingState = STATE_INTRO;
@@ -392,11 +392,16 @@ void ScreenGameplay::FirstUpdate()
m_textDebug.SetDiffuse( RageColor(1,1,1,1) );
this->AddChild( &m_textDebug );
m_textAutoPlay.LoadFromFont( THEME->GetPathTo("Fonts","normal") );
m_textAutoPlay.SetXY( AUTOPLAY_X, AUTOPLAY_Y );
m_textAutoPlay.SetText( "AutoPlay is ON" );
m_textAutoPlay.SetDiffuse( RageColor(1,1,1,PREFSMAN->m_bAutoPlay?1:0) );
this->AddChild( &m_textAutoPlay );
for( int s=0; s<NUM_STATUS_ICONS; s++ )
{
m_sprStatusIcons[s].Load( THEME->GetPathTo("Graphics",ssprintf("gameplay status icons 1x%d",NUM_STATUS_ICONS)) );
m_sprStatusIcons[s].StopAnimating();
m_sprStatusIcons[s].SetState(s);
this->AddChild( &m_sprStatusIcons[s] );
}
PositionStatusIcons(); // position them
m_StarWipe.SetClosed();
@@ -861,26 +866,16 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
{
case SDLK_F6:
m_bChangedOffsetOrBPM = true;
if (GAMESTATE->m_SongOptions.m_AutoAdjust == SongOptions::ADJUST_ON) {
GAMESTATE->m_SongOptions.m_AutoAdjust = SongOptions::ADJUST_OFF;
m_textDebug.SetText( "AutoAdjust is OFF" );
} else {
GAMESTATE->m_SongOptions.m_AutoAdjust = SongOptions::ADJUST_ON;
m_textDebug.SetText( "AutoAdjust is ON" );
}
m_textDebug.SetDiffuse( RageColor(1,1,1,1) );
m_textDebug.StopTweening();
m_textDebug.BeginTweening( 3 ); // sleep
m_textDebug.BeginTweening( 0.5f ); // fade out
m_textDebug.SetTweenDiffuse( RageColor(1,1,1,0) );
GAMESTATE->m_SongOptions.m_bAutoSync = !GAMESTATE->m_SongOptions.m_bAutoSync; // toggle
PositionStatusIcons();
break;
case SDLK_F7:
if( GAMESTATE->m_SongOptions.m_AssistType == SongOptions::ASSIST_NONE )
GAMESTATE->m_SongOptions.m_AssistType = SongOptions::ASSIST_TICK;
else
GAMESTATE->m_SongOptions.m_AssistType = SongOptions::ASSIST_NONE;
m_textDebug.SetText( ssprintf( "Assist tick is %s.", (GAMESTATE->m_SongOptions.m_AssistType==SongOptions::ASSIST_NONE)?"OFF":"ON") );
m_textDebug.SetText( ssprintf("Assist Tick is %s", GAMESTATE->m_SongOptions.m_AssistType==SongOptions::ASSIST_TICK?"ON":"OFF") );
m_textDebug.SetDiffuse( RageColor(1,1,1,1) );
m_textDebug.StopTweening();
m_textDebug.BeginTweening( 3 ); // sleep
@@ -889,7 +884,7 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
break;
case SDLK_F8:
PREFSMAN->m_bAutoPlay = !PREFSMAN->m_bAutoPlay;
m_textAutoPlay.SetDiffuse( RageColor(1,1,1,PREFSMAN->m_bAutoPlay?1:0) );
PositionStatusIcons();
break;
case SDLK_F9:
case SDLK_F10:
@@ -988,12 +983,44 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
m_Player[StyleI.player].Step( StyleI.col );
}
void ScreenGameplay::PositionStatusIcons()
{
bool status[NUM_STATUS_ICONS] = {
PREFSMAN->m_bAutoPlay,
GAMESTATE->m_SongOptions.m_bAutoSync
};
vector<Actor*> vActorsToShow;
for( int i=0; i<NUM_STATUS_ICONS; i++ )
{
m_sprStatusIcons[i].SetDiffuse( RageColor(1,1,1,status[i]?1.f:0.f) );
if( status[i] )
vActorsToShow.push_back( &m_sprStatusIcons[i] );
}
float width_of_one = m_sprStatusIcons[0].GetUnzoomedWidth();
float center_x = STATUS_ICONS_X;
float left_most_x = center_x-(vActorsToShow.size()-1)*width_of_one/2;
float right_most_x = center_x+(vActorsToShow.size()-1)*width_of_one/2;
for( unsigned a=0; a<vActorsToShow.size(); a++ )
{
vActorsToShow[a]->SetY( STATUS_ICONS_Y );
if( vActorsToShow.size()-1 == 0 )
vActorsToShow[a]->SetX( center_x );
else
vActorsToShow[a]->SetX( SCALE(a, 0.0f, vActorsToShow.size()-1, left_most_x, right_most_x) );
}
}
void SaveChanges()
{
/* XXX: Hmm. Better would be to make sure m_pCurCourse is only set when we're
* playing out of a course, and use that here, so these things wouldn't need to
* special case play modes. Need to make sure m_pCurCourse gets erased
* correctly, though. -glenn */
/* That's a very clever idea! I will look into this soon. -Chris */
switch( GAMESTATE->m_PlayMode )
{
case PLAY_MODE_ARCADE:
@@ -1195,24 +1222,23 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
break;
case SM_BeginToasty:
this->SendScreenMessage( SM_PlayToastySound, 0.3f );
if( PREFSMAN->m_bEasterEggs )
{
m_soundToasty.Play();
// set off screen
m_sprToasty.StopTweening();
m_sprToasty.SetDiffuse( RageColor(1,1,1,1) );
m_sprToasty.SetX( SCREEN_RIGHT+m_sprToasty.GetUnzoomedWidth()/2 );
m_sprToasty.SetY( SCREEN_BOTTOM-m_sprToasty.GetUnzoomedHeight()/2 );
m_sprToasty.BeginTweening( 0.2f, Actor::TWEEN_BIAS_BEGIN ); // slide on
m_sprToasty.SetTweenX( SCREEN_RIGHT-m_sprToasty.GetUnzoomedWidth()/2 );
m_sprToasty.BeginTweening( 0.6f ); // sleep
m_sprToasty.BeginTweening( 0.3f, Actor::TWEEN_BIAS_END ); // slide off
m_sprToasty.SetTweenX( SCREEN_RIGHT+m_sprToasty.GetUnzoomedWidth()/2 );
m_sprToasty.BeginTweening( 0.001f ); // fade out
m_sprToasty.SetDiffuse( RageColor(1,1,1,0) );
break;
case SM_PlayToastySound:
m_soundToasty.Play();
// set off screen
m_sprToasty.StopTweening();
m_sprToasty.SetDiffuse( RageColor(1,1,1,1) );
m_sprToasty.SetX( SCREEN_RIGHT+m_sprToasty.GetUnzoomedWidth()/2 );
m_sprToasty.SetY( SCREEN_BOTTOM-m_sprToasty.GetUnzoomedHeight()/2 );
m_sprToasty.BeginTweening( 0.2f, Actor::TWEEN_BIAS_BEGIN ); // slide on
m_sprToasty.SetTweenX( SCREEN_RIGHT-m_sprToasty.GetUnzoomedWidth()/2 );
m_sprToasty.BeginTweening( 0.6f ); // sleep
m_sprToasty.BeginTweening( 0.3f, Actor::TWEEN_BIAS_END ); // slide off
m_sprToasty.SetTweenX( SCREEN_RIGHT+m_sprToasty.GetUnzoomedWidth()/2 );
m_sprToasty.BeginTweening( 0.001f ); // fade out
m_sprToasty.SetDiffuse( RageColor(1,1,1,0) );
}
break;
case SM_100Combo:
+21 -18
View File
@@ -77,33 +77,36 @@ protected:
STATE_OUTRO, // not allowed to press Back
NUM_DANCING_STATES
};
DancingState m_DancingState;
bool m_bChangedOffsetOrBPM;
DancingState m_DancingState;
bool m_bChangedOffsetOrBPM;
float m_fTimeLeftBeforeDancingComment; // this counter is only running while STATE_DANCING
float m_fTimeLeftBeforeDancingComment; // this counter is only running while STATE_DANCING
Background m_Background;
Background m_Background;
TransitionOniFade m_OniFade; // shows between songs in a course
TransitionOniFade m_OniFade; // shows between songs in a course
Sprite m_sprLifeFrame;
LifeMeter* m_pLifeMeter[NUM_PLAYERS];
BitmapText m_textStageNumber;
BitmapText m_textCourseSongNumber[NUM_PLAYERS];
Sprite m_sprLifeFrame;
LifeMeter* m_pLifeMeter[NUM_PLAYERS];
BitmapText m_textStageNumber;
BitmapText m_textCourseSongNumber[NUM_PLAYERS];
Sprite m_sprMiddleFrame;
BPMDisplay m_BPMDisplay;
Sprite m_sprMiddleFrame;
BPMDisplay m_BPMDisplay;
Sprite m_sprScoreFrame;
ScoreDisplay* m_pScoreDisplay[NUM_PLAYERS];
BitmapText m_textPlayerOptions[NUM_PLAYERS];
BitmapText m_textSongOptions;
Sprite m_sprScoreFrame;
ScoreDisplay* m_pScoreDisplay[NUM_PLAYERS];
BitmapText m_textPlayerOptions[NUM_PLAYERS];
BitmapText m_textSongOptions;
BitmapText m_textDebug;
BitmapText m_textAutoPlay; // shows whether AutoPlay is on.
BitmapText m_textDebug;
#define NUM_STATUS_ICONS 2
Sprite m_sprStatusIcons[NUM_STATUS_ICONS]; // shows whether these options are on.
void PositionStatusIcons(); // reposition the three above when the value of one changes
BitmapText m_MaxCombo;
BitmapText m_MaxCombo;
TransitionFadeWipe m_Fade;
TransitionStarWipe m_StarWipe;
+22 -2
View File
@@ -36,6 +36,7 @@ ScreenInstructions::ScreenInstructions()
{
LOG->Trace( "ScreenInstructions::ScreenInstructions()" );
m_Menu.Load(
THEME->GetPathTo("BGAnimations","Instructions"),
THEME->GetPathTo("Graphics","Instructions Top Edge"),
@@ -43,13 +44,32 @@ ScreenInstructions::ScreenInstructions()
);
this->AddChild( &m_Menu );
if(!PREFSMAN->m_bHowToPlay)
if(!PREFSMAN->m_bInstructions)
{
this->SendScreenMessage( SM_GoToNextScreen, 0 );
m_Menu.ImmedOffScreenToMenu();
this->SendScreenMessage( SM_GoToNextScreen, 0.f );
return;
}
//
// Skip this screen unless someone chose easy
//
Difficulty easiestDiffuclty = DIFFICULTY_HARD;
for( int p=0; p<NUM_PLAYERS; p++ )
{
if( !GAMESTATE->IsPlayerEnabled(p) )
continue;
easiestDiffuclty = min( easiestDiffuclty, GAMESTATE->m_PreferredDifficulty[p] );
}
if( easiestDiffuclty != DIFFICULTY_EASY )
{
this->SendScreenMessage( SM_GoToNextScreen, 0 );
m_Menu.ImmedOffScreenToMenu();
return;
}
m_Menu.TweenOnScreenFromMenu( SM_None, true );
CString sHowToPlayPath;
+69
View File
@@ -0,0 +1,69 @@
#include "stdafx.h"
/*
-----------------------------------------------------------------------------
Class: ScreenLogo
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "ScreenLogo.h"
#include "ThemeManager.h"
#include "GameState.h"
#include "GameDef.h"
#include "RageLog.h"
#include "SongManager.h"
#define LOGO_X THEME->GetMetricF("ScreenLogo","LogoX")
#define LOGO_Y THEME->GetMetricF("ScreenLogo","LogoY")
#define VERSION_X THEME->GetMetricF("ScreenLogo","VersionX")
#define VERSION_Y THEME->GetMetricF("ScreenLogo","VersionY")
#define SONGS_X THEME->GetMetricF("ScreenLogo","SongsX")
#define SONGS_Y THEME->GetMetricF("ScreenLogo","SongsY")
ScreenLogo::ScreenLogo()
{
LOG->Trace( "ScreenLogo::ScreenLogo()" );
}
void ScreenLogo::FirstUpdate()
{
ScreenAttract::FirstUpdate();
// we have to do init here because ScreenAttract does it's initialization in FirstUpdate()
m_sprLogo.Load( THEME->GetPathTo("Graphics",ssprintf("logo %s",GAMESTATE->GetCurrentGameDef()->m_szName)) );
m_sprLogo.SetXY( LOGO_X, LOGO_Y );
m_sprLogo.SetGlow( RageColor(1,1,1,1) );
m_sprLogo.SetZoomY( 0 );
m_sprLogo.StopTweening();
m_sprLogo.BeginTweening( 0.5f ); // sleep
m_sprLogo.BeginTweening( 0.5f, Actor::TWEEN_BOUNCE_END );
m_sprLogo.SetEffectGlowing(1, RageColor(1,1,1,0.1f), RageColor(1,1,1,0.3f) );
m_sprLogo.SetTweenZoom( 1 );
this->AddChild( &m_sprLogo );
m_textVersion.LoadFromFont( THEME->GetPathTo("Fonts","normal") );
m_textVersion.SetText( "v3.0 final" );
m_textVersion.SetDiffuse( RageColor(0.6f,0.6f,0.6f,1) ); // light gray
m_textVersion.SetXY( VERSION_X, VERSION_Y );
m_textVersion.SetZoom( 0.5f );
m_textVersion.SetShadowLength( 2 );
this->AddChild( &m_textVersion );
m_textSongs.LoadFromFont( THEME->GetPathTo("Fonts","normal") );
m_textSongs.SetHorizAlign( Actor::align_left );
m_textSongs.SetText( ssprintf("Found %u Songs", SONGMAN->m_pSongs.size()) );
m_textSongs.SetDiffuse( RageColor(0.6f,0.6f,0.6f,1) ); // light gray
m_textSongs.SetXY( SONGS_X, SONGS_Y );
m_textSongs.SetZoom( 0.5f );
m_textSongs.SetShadowLength( 2 );
this->AddChild( &m_textSongs );
this->MoveToBack( &(ScreenAttract::m_Fade) ); // put it in the back so it covers up the stuff we just added
}
+9
View File
@@ -1,3 +1,5 @@
#ifndef SCREENLOGO_H
#define SCREENLOGO_H
/*
-----------------------------------------------------------------------------
Class: ScreenLogo
@@ -15,12 +17,19 @@
class ScreenLogo : public ScreenAttract
{
public:
ScreenLogo();
virtual void FirstUpdate();
private:
virtual CString GetMetricName() { return "Logo"; }; // used to look up theme metrics
virtual CString GetElementName() { return "logo"; }; // used to look up theme elements
Sprite m_sprLogo;
BitmapText m_textVersion;
BitmapText m_textSongs;
};
#endif
+26 -18
View File
@@ -31,6 +31,8 @@ enum {
MO_LIFE_DIFFICULTY,
MO_HIDDEN_SONGS,
MO_SHOWSTATS,
MO_EASTER_EGGS,
MO_MARVELOUS,
NUM_MACHINE_OPTIONS_LINES
};
/* Hmm. Ignore JoyAxes and Back Delayed probably belong in "input options",
@@ -43,6 +45,8 @@ OptionRowData g_MachineOptionsLines[NUM_MACHINE_OPTIONS_LINES] = {
{ "Life\nDifficulty", 7, {"1","2","3","4","5","6","7"} },
{ "Hidden\nSongs", 2, {"OFF","ON"} },
{ "Show\nStats", 2, {"OFF","ON"} },
{ "Easter\nEggs", 2, {"OFF","ON"} },
{ "Marvelous\nTiming", 2, {"OFF","ON"} },
};
ScreenMachineOptions::ScreenMachineOptions() :
@@ -88,15 +92,15 @@ void ScreenMachineOptions::ImportOptions()
* impossible, and perhaps it *is* justice that even the CPU fails
* it. :)
*/
if( PREFSMAN->m_fJudgeWindowSeconds == 0.27f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 0;
else if( PREFSMAN->m_fJudgeWindowSeconds == 0.24f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 1;
else if( PREFSMAN->m_fJudgeWindowSeconds == 0.21f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 2;
else if( PREFSMAN->m_fJudgeWindowSeconds == 0.18f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 3;
else if( PREFSMAN->m_fJudgeWindowSeconds == 0.15f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 4;
else if( PREFSMAN->m_fJudgeWindowSeconds == 0.12f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 5;
else if( PREFSMAN->m_fJudgeWindowSeconds == 0.09f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 6;
else if( PREFSMAN->m_fJudgeWindowSeconds == 0.06f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 7;
else m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 3;
if( PREFSMAN->m_fJudgeWindowScale == 1.50f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 0;
else if( PREFSMAN->m_fJudgeWindowScale == 1.33f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 1;
else if( PREFSMAN->m_fJudgeWindowScale == 1.16f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 2;
else if( PREFSMAN->m_fJudgeWindowScale == 1.00f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 3;
else if( PREFSMAN->m_fJudgeWindowScale == 0.84f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 4;
else if( PREFSMAN->m_fJudgeWindowScale == 0.66f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 5;
else if( PREFSMAN->m_fJudgeWindowScale == 0.50f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 6;
else if( PREFSMAN->m_fJudgeWindowScale == 0.33f ) m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 7;
else m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] = 3;
if( PREFSMAN->m_fLifeDifficultyScale == 1.60f ) m_iSelectedOption[0][MO_LIFE_DIFFICULTY] = 0;
else if( PREFSMAN->m_fLifeDifficultyScale == 1.40f ) m_iSelectedOption[0][MO_LIFE_DIFFICULTY] = 1;
@@ -108,6 +112,8 @@ void ScreenMachineOptions::ImportOptions()
else m_iSelectedOption[0][MO_LIFE_DIFFICULTY] = 3;
m_iSelectedOption[0][MO_SHOWSTATS] = PREFSMAN->m_bShowStats ? 1:0;
m_iSelectedOption[0][MO_EASTER_EGGS] = PREFSMAN->m_bEasterEggs ? 1:0;
m_iSelectedOption[0][MO_MARVELOUS] = PREFSMAN->m_bMarvelousTiming ? 1:0;
}
void ScreenMachineOptions::ExportOptions()
@@ -120,14 +126,14 @@ void ScreenMachineOptions::ExportOptions()
switch( m_iSelectedOption[0][MO_JUDGE_DIFFICULTY] )
{
case 0: PREFSMAN->m_fJudgeWindowSeconds = 0.27f; break;
case 1: PREFSMAN->m_fJudgeWindowSeconds = 0.24f; break;
case 2: PREFSMAN->m_fJudgeWindowSeconds = 0.21f; break;
case 3: PREFSMAN->m_fJudgeWindowSeconds = 0.18f; break;
case 4: PREFSMAN->m_fJudgeWindowSeconds = 0.15f; break;
case 5: PREFSMAN->m_fJudgeWindowSeconds = 0.12f; break;
case 6: PREFSMAN->m_fJudgeWindowSeconds = 0.09f; break;
case 7: PREFSMAN->m_fJudgeWindowSeconds = 0.06f; break;
case 0: PREFSMAN->m_fJudgeWindowScale = 1.50f; break;
case 1: PREFSMAN->m_fJudgeWindowScale = 1.33f; break;
case 2: PREFSMAN->m_fJudgeWindowScale = 1.16f; break;
case 3: PREFSMAN->m_fJudgeWindowScale = 1.00f; break;
case 4: PREFSMAN->m_fJudgeWindowScale = 0.84f; break;
case 5: PREFSMAN->m_fJudgeWindowScale = 0.66f; break;
case 6: PREFSMAN->m_fJudgeWindowScale = 0.50f; break;
case 7: PREFSMAN->m_fJudgeWindowScale = 0.33f; break;
default: ASSERT(0);
}
@@ -143,7 +149,9 @@ void ScreenMachineOptions::ExportOptions()
default: ASSERT(0);
}
PREFSMAN->m_bShowStats = m_iSelectedOption[0][MO_SHOWSTATS] == 1;
PREFSMAN->m_bShowStats = m_iSelectedOption[0][MO_SHOWSTATS] == 1;
PREFSMAN->m_bEasterEggs = m_iSelectedOption[0][MO_EASTER_EGGS] == 1;
PREFSMAN->m_bMarvelousTiming = m_iSelectedOption[0][MO_MARVELOUS] == 1;
}
void ScreenMachineOptions::GoToPrevState()
+1 -1
View File
@@ -236,7 +236,7 @@ void ScreenMusicScroll::HandleScreenMessage( const ScreenMessage SM )
m_Fade.CloseWipingRight( SM_GoToNextScreen );
break;
case SM_GoToNextScreen:
SCREENMAN->SetNewScreen( "ScreenTitleMenu" );
SCREENMAN->SetNewScreen( "ScreenCompany" );
break;
}
}
+2 -1
View File
@@ -95,7 +95,7 @@ void ScreenPrompt::Input( const DeviceInput& DeviceI, const InputEventType type,
if( m_Fade.IsOpening() )
return;
if( DeviceI.device == DEVICE_KEYBOARD )
if( DeviceI.device==DEVICE_KEYBOARD && type==IET_FIRST_PRESS )
{
switch( DeviceI.button )
{
@@ -144,6 +144,7 @@ void ScreenPrompt::MenuRight( PlayerNumber pn )
m_bAnswer = !m_bAnswer;
m_textAnswer[m_bAnswer].SetEffectGlowing();
m_rectAnswerBox.StopTweening();
m_rectAnswerBox.BeginTweening( 0.2f );
m_rectAnswerBox.SetTweenXY( m_textAnswer[m_bAnswer].GetX(), m_textAnswer[m_bAnswer].GetY() );
m_rectAnswerBox.SetTweenZoomX( m_textAnswer[m_bAnswer].GetWidestLineWidthInSourcePixels()+10.0f );
+1 -1
View File
@@ -300,7 +300,7 @@ void ScreenSelectMode::AfterChange()
{
for( unsigned i=0; i<m_apPossibleModeChoices.size(); i++ )
{
if(i == m_ScrollingList.GetSelection())
if(i == (unsigned)m_ScrollingList.GetSelection())
{
m_Infotext[i].SetDiffuse(RageColor(1,1,1,1));
}
+15
View File
@@ -139,6 +139,10 @@ ScreenSelectMusic::ScreenSelectMusic()
m_DifficultyIcon[p].Load( THEME->GetPathTo("graphics","select music difficulty icons 1x6") );
m_DifficultyIcon[p].SetXY( DIFFICULTY_ICON_X(p), DIFFICULTY_ICON_Y(p) );
this->AddChild( &m_DifficultyIcon[p] );
m_AutoGenIcon[p].Load( THEME->GetPathTo("graphics","select music autogen icon") );
m_AutoGenIcon[p].SetXY( DIFFICULTY_ICON_X(p), DIFFICULTY_ICON_Y(p) );
this->AddChild( &m_AutoGenIcon[p] );
}
m_GrooveRadar.SetXY( RADAR_X, RADAR_Y );
@@ -286,6 +290,7 @@ void ScreenSelectMusic::TweenOnScreen()
// m_textPlayerOptions[p].SetTweenZoomY( fOriginalZoomY );
m_DifficultyIcon[p].FadeOn( 0, "foldy", TWEEN_TIME );
m_AutoGenIcon[p].FadeOn( 0, "foldy", TWEEN_TIME );
m_FootMeter[p].FadeOn( 0, "foldy", TWEEN_TIME );
}
@@ -328,6 +333,7 @@ void ScreenSelectMusic::TweenOffScreen()
// m_textPlayerOptions[p].FadeOff( 0, "fade", TWEEN_TIME );
m_DifficultyIcon[p].FadeOff( 0, "foldy", TWEEN_TIME );
m_AutoGenIcon[p].FadeOff( 0, "foldy", TWEEN_TIME );
m_FootMeter[p].FadeOff( 0, "foldy", TWEEN_TIME );
}
@@ -690,6 +696,15 @@ void ScreenSelectMusic::AfterNotesChange( PlayerNumber pn )
m_HighScore[pn].SetScore( (float)m_pNotes->m_iTopScore );
m_DifficultyIcon[pn].SetFromNotes( pn, pNotes );
if( pNotes && pNotes->IsAutogen() )
{
m_AutoGenIcon[pn].SetEffectCamelion();
}
else
{
m_AutoGenIcon[pn].SetEffectNone();
m_AutoGenIcon[pn].SetDiffuse( RageColor(1,1,1,0) );
}
m_FootMeter[pn].SetFromNotes( pNotes );
m_GrooveRadar.SetFromNotes( pn, pNotes );
m_MusicWheel.NotesChanged( pn );
+1
View File
@@ -66,6 +66,7 @@ protected:
Sprite m_sprCDTitle;
Sprite m_sprDifficultyFrame[NUM_PLAYERS];
DifficultyIcon m_DifficultyIcon[NUM_PLAYERS];
Sprite m_AutoGenIcon[NUM_PLAYERS];
GrooveRadar m_GrooveRadar;
// BitmapText m_textPlayerOptions[NUM_PLAYERS];
BitmapText m_textSongOptions;
+3 -3
View File
@@ -27,7 +27,7 @@ enum {
SO_FAIL,
SO_ASSIST,
SO_RATE,
SO_AUTOADJ,
SO_AUTOSYNC,
NUM_SONG_OPTIONS_LINES
};
@@ -65,7 +65,7 @@ void ScreenSongOptions::ImportOptions()
m_iSelectedOption[0][SO_BAT_LIVES] = so.m_iBatteryLives-1;
m_iSelectedOption[0][SO_FAIL] = so.m_FailType;
m_iSelectedOption[0][SO_ASSIST] = so.m_AssistType;
m_iSelectedOption[0][SO_AUTOADJ] = so.m_AutoAdjust;
m_iSelectedOption[0][SO_AUTOSYNC] = so.m_bAutoSync;
if( so.m_fMusicRate == 0.7f ) m_iSelectedOption[0][SO_RATE] = 0;
else if( so.m_fMusicRate == 0.8f ) m_iSelectedOption[0][SO_RATE] = 1;
@@ -88,7 +88,7 @@ void ScreenSongOptions::ExportOptions()
so.m_iBatteryLives = m_iSelectedOption[0][SO_BAT_LIVES]+1;
so.m_FailType = (SongOptions::FailType)m_iSelectedOption[0][SO_FAIL];
so.m_AssistType = (SongOptions::AssistType)m_iSelectedOption[0][SO_ASSIST];
so.m_AutoAdjust = (SongOptions::AutoAdjustType)m_iSelectedOption[0][SO_AUTOADJ];
so.m_bAutoSync = m_iSelectedOption[0][SO_AUTOSYNC] != 0;
switch( m_iSelectedOption[0][SO_RATE] )
{
+28 -50
View File
@@ -42,27 +42,22 @@ const CString CHOICE_TEXT[ScreenTitleMenu::NUM_TITLE_MENU_CHOICES] = {
"EXIT",
};
#define HELP_X THEME->GetMetricF("ScreenTitleMenu","HelpX")
#define HELP_Y THEME->GetMetricF("ScreenTitleMenu","HelpY")
#define CHOICES_X THEME->GetMetricF("ScreenTitleMenu","ChoicesX")
#define CHOICES_START_Y THEME->GetMetricF("ScreenTitleMenu","ChoicesStartY")
#define CHOICES_SPACING_Y THEME->GetMetricF("ScreenTitleMenu","ChoicesSpacingY")
#define CHOICES_SHADOW_LENGTH THEME->GetMetricF("ScreenTitleMenu","ChoicesShadowLength")
#define HELP_X THEME->GetMetricF("ScreenTitleMenu","HelpX")
#define HELP_Y THEME->GetMetricF("ScreenTitleMenu","HelpY")
#define LOGO_X THEME->GetMetricF("ScreenTitleMenu","LogoX")
#define LOGO_Y THEME->GetMetricF("ScreenTitleMenu","LogoY")
#define VERSION_X THEME->GetMetricF("ScreenTitleMenu","VersionX")
#define VERSION_Y THEME->GetMetricF("ScreenTitleMenu","VersionY")
#define SONGS_X THEME->GetMetricF("ScreenTitleMenu","SongsX")
#define SONGS_Y THEME->GetMetricF("ScreenTitleMenu","SongsY")
#define COLOR_NOT_SELECTED THEME->GetMetricC("ScreenTitleMenu","ColorNotSelected")
#define COLOR_SELECTED THEME->GetMetricC("ScreenTitleMenu","ColorSelected")
#define ZOOM_NOT_SELECTED THEME->GetMetricF("ScreenTitleMenu","ZoomNotSelected")
#define ZOOM_SELECTED THEME->GetMetricF("ScreenTitleMenu","ZoomSelected")
#define SECONDS_BETWEEN_ATTRACT THEME->GetMetricF("ScreenTitleMenu","SecondsBetweenAttract")
#define SECONDS_BETWEEN_COMMENTS THEME->GetMetricF("ScreenTitleMenu","SecondsBetweenComments")
#define SECONDS_BEFORE_ATTRACT THEME->GetMetricF("ScreenTitleMenu","SecondsBeforeAttract")
#define HELP_TEXT THEME->GetMetric("ScreenTitleMenu","HelpText")
#define NEXT_SCREEN THEME->GetMetric("ScreenTitleMenu","NextScreen")
const ScreenMessage SM_PlayAttract = ScreenMessage(SM_User+1);
const ScreenMessage SM_PlayComment = ScreenMessage(SM_User+1);
const ScreenMessage SM_GoToNextScreen = ScreenMessage(SM_User+12);
const ScreenMessage SM_GoToAttractLoop = ScreenMessage(SM_User+13);
@@ -70,21 +65,15 @@ const ScreenMessage SM_GoToAttractLoop = ScreenMessage(SM_User+13);
ScreenTitleMenu::ScreenTitleMenu()
{
LOG->Trace( "ScreenTitleMenu::ScreenTitleMenu()" );
}
m_Background.LoadFromAniDir( THEME->GetPathTo("BGAnimations","title menu") );
this->AddChild( &m_Background );
void ScreenTitleMenu::FirstUpdate()
{
LOG->Trace( "ScreenTitleMenu::FirstUpdate()" );
m_sprLogo.Load( THEME->GetPathTo("Graphics",ssprintf("title menu logo %s",GAMESTATE->GetCurrentGameDef()->m_szName)) );
m_sprLogo.SetXY( LOGO_X, LOGO_Y );
m_sprLogo.SetGlow( RageColor(1,1,1,1) );
m_sprLogo.SetZoomY( 0 );
m_sprLogo.StopTweening();
m_sprLogo.BeginTweening( 0.5f ); // sleep
m_sprLogo.BeginTweening( 0.5f, Actor::TWEEN_BOUNCE_END );
m_sprLogo.SetEffectGlowing(1, RageColor(1,1,1,0.1f), RageColor(1,1,1,0.3f) );
m_sprLogo.SetTweenZoom( 1 );
this->AddChild( &m_sprLogo );
ScreenLogo::FirstUpdate();
// we have to do init here because ScreenLogo does it's initialization in FirstUpdate()
m_textHelp.LoadFromFont( THEME->GetPathTo("Fonts","help") );
m_textHelp.SetText( HELP_TEXT );
m_textHelp.SetXY( HELP_X, HELP_Y );
@@ -93,24 +82,6 @@ ScreenTitleMenu::ScreenTitleMenu()
m_textHelp.SetShadowLength( 2 );
this->AddChild( &m_textHelp );
m_textVersion.LoadFromFont( THEME->GetPathTo("Fonts","normal") );
m_textVersion.SetText( "v3.0 final" );
m_textVersion.SetDiffuse( RageColor(0.6f,0.6f,0.6f,1) ); // light gray
m_textVersion.SetXY( VERSION_X, VERSION_Y );
m_textVersion.SetZoom( 0.5f );
m_textVersion.SetShadowLength( 2 );
this->AddChild( &m_textVersion );
m_textSongs.LoadFromFont( THEME->GetPathTo("Fonts","normal") );
m_textSongs.SetHorizAlign( Actor::align_left );
m_textSongs.SetText( ssprintf("Found %u Songs", SONGMAN->m_pSongs.size()) );
m_textSongs.SetDiffuse( RageColor(0.6f,0.6f,0.6f,1) ); // light gray
m_textSongs.SetXY( SONGS_X, SONGS_Y );
m_textSongs.SetZoom( 0.5f );
m_textSongs.SetShadowLength( 2 );
this->AddChild( &m_textSongs );
int i;
for( i=0; i< NUM_TITLE_MENU_CHOICES; i++ )
{
@@ -122,12 +93,6 @@ ScreenTitleMenu::ScreenTitleMenu()
this->AddChild( &m_textChoice[i] );
}
m_Fade.SetClosed();
m_Fade.OpenWipingRight( SM_None );
this->AddChild( &m_Fade );
SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("title menu game name") );
@@ -142,11 +107,14 @@ ScreenTitleMenu::ScreenTitleMenu()
LoseFocus( i );
GainFocus( m_TitleMenuChoice );
m_soundMusic.Stop();
SOUNDMAN->PlayMusic( THEME->GetPathTo("Sounds","title menu music") );
this->SendScreenMessage( SM_PlayAttract, SECONDS_BETWEEN_ATTRACT );
}
this->SendScreenMessage( SM_PlayComment, SECONDS_BETWEEN_COMMENTS);
this->MoveToBack( &(ScreenAttract::m_Fade) ); // put it in the back so it covers up the stuff we just added
}
ScreenTitleMenu::~ScreenTitleMenu()
{
@@ -167,6 +135,12 @@ void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType ty
void ScreenTitleMenu::Update( float fDelta )
{
if(TimeToDemonstration.PeekDeltaTime() >= SECONDS_BEFORE_ATTRACT)
{
this->SendScreenMessage( SM_GoToAttractLoop, 0 );
TimeToDemonstration.GetDeltaTime();
}
Screen::Update(fDelta);
}
@@ -175,9 +149,9 @@ void ScreenTitleMenu::HandleScreenMessage( const ScreenMessage SM )
{
switch( SM )
{
case SM_PlayAttract:
case SM_PlayComment:
m_soundAttract.PlayRandom();
this->SendScreenMessage( SM_PlayAttract, SECONDS_BETWEEN_ATTRACT );
this->SendScreenMessage( SM_PlayComment, SECONDS_BETWEEN_COMMENTS );
break;
case SM_GoToNextScreen:
switch( m_TitleMenuChoice )
@@ -246,6 +220,8 @@ void ScreenTitleMenu::GainFocus( int iChoiceIndex )
void ScreenTitleMenu::MenuUp( PlayerNumber pn )
{
TimeToDemonstration.GetDeltaTime(); /* Reset the demonstration timer when a key is pressed. */
LoseFocus( m_TitleMenuChoice );
if( m_TitleMenuChoice == 0 ) // wrap around
@@ -261,6 +237,8 @@ void ScreenTitleMenu::MenuUp( PlayerNumber pn )
void ScreenTitleMenu::MenuDown( PlayerNumber pn )
{
TimeToDemonstration.GetDeltaTime(); /* Reset the demonstration timer when a key is pressed. */
LoseFocus( m_TitleMenuChoice );
if( m_TitleMenuChoice == (int)ScreenTitleMenu::NUM_TITLE_MENU_CHOICES-1 )
+4 -8
View File
@@ -9,7 +9,7 @@
-----------------------------------------------------------------------------
*/
#include "Screen.h"
#include "ScreenLogo.h"
#include "Sprite.h"
#include "BitmapText.h"
#include "TransitionFade.h"
@@ -18,12 +18,14 @@
#include "RageTimer.h"
class ScreenTitleMenu : public Screen
class ScreenTitleMenu : public ScreenLogo
{
public:
ScreenTitleMenu();
virtual ~ScreenTitleMenu();
virtual void FirstUpdate();
virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
virtual void Update( float fDelta );
virtual void HandleScreenMessage( const ScreenMessage SM );
@@ -54,15 +56,9 @@ private:
TitleMenuChoice m_TitleMenuChoice;
BGAnimation m_Background;
Sprite m_sprLogo;
BitmapText m_textHelp;
BitmapText m_textVersion;
BitmapText m_textSongs;
BitmapText m_textChoice[NUM_TITLE_MENU_CHOICES];
TransitionFade m_Fade;
RandomSample m_soundAttract;
RandomSample m_soundChange;
RandomSample m_soundSelect;
+10 -9
View File
@@ -25,7 +25,7 @@ const float GRADES_TO_SCROLL = NUM_GRADE_FRAMES*4;
SmallGradeDisplay::SmallGradeDisplay()
{
Load( THEME->GetPathTo("Graphics","select music small grades 2x8") );
Load( THEME->GetPathTo("Graphics","select music small grades 2x9") );
StopAnimating();
SetGrade( PLAYER_1, GRADE_NO_DATA );
@@ -50,14 +50,15 @@ void SmallGradeDisplay::SetGrade( PlayerNumber pn, Grade g )
int iNumCols = 2;
switch( g )
{
case GRADE_AAA: SetState( 0*iNumCols+pn ); break;
case GRADE_AA: SetState( 1*iNumCols+pn ); break;
case GRADE_A: SetState( 2*iNumCols+pn ); break;
case GRADE_B: SetState( 3*iNumCols+pn ); break;
case GRADE_C: SetState( 4*iNumCols+pn ); break;
case GRADE_D: SetState( 5*iNumCols+pn ); break;
case GRADE_E: SetState( 6*iNumCols+pn ); break;
case GRADE_NO_DATA: SetState( 7*iNumCols+pn ); break;
case GRADE_AAAA: SetState( 0*iNumCols+pn ); break;
case GRADE_AAA: SetState( 1*iNumCols+pn ); break;
case GRADE_AA: SetState( 2*iNumCols+pn ); break;
case GRADE_A: SetState( 3*iNumCols+pn ); break;
case GRADE_B: SetState( 4*iNumCols+pn ); break;
case GRADE_C: SetState( 5*iNumCols+pn ); break;
case GRADE_D: SetState( 6*iNumCols+pn ); break;
case GRADE_E: SetState( 7*iNumCols+pn ); break;
case GRADE_NO_DATA: SetState( 8*iNumCols+pn ); break;
default: ASSERT(0);
}
}
+2 -5
View File
@@ -49,11 +49,8 @@ CString SongOptions::GetString()
sReturn += s + "xMusic, ";
}
switch( m_AutoAdjust )
{
case ADJUST_OFF: break;
case ADJUST_ON: sReturn += "AutoAdjust, "; break;
}
if( m_bAutoSync )
sReturn += "AutoSync, ";
if( sReturn.GetLength() > 2 )
sReturn.erase( sReturn.GetLength()-2 ); // delete the trailing ", "
+2 -3
View File
@@ -25,8 +25,7 @@ struct SongOptions
enum AssistType { ASSIST_NONE=0, ASSIST_TICK };
AssistType m_AssistType;
float m_fMusicRate;
enum AutoAdjustType { ADJUST_OFF=0, ADJUST_ON };
AutoAdjustType m_AutoAdjust;
bool m_bAutoSync;
SongOptions() { Init(); };
void Init()
@@ -37,7 +36,7 @@ struct SongOptions
m_FailType = FAIL_ARCADE;
m_AssistType = ASSIST_NONE;
m_fMusicRate = 1.0f;
m_AutoAdjust = ADJUST_OFF;
m_bAutoSync = false;
};
CString GetString();
void FromString( CString sOptions );
+6 -2
View File
@@ -60,7 +60,7 @@ IntDir=.\../Release6
TargetDir=\stepmania\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
@@ -95,7 +95,7 @@ IntDir=.\../Debug6
TargetDir=\stepmania\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
@@ -1409,6 +1409,10 @@ SOURCE=.\ScreenInstructions.h
# End Source File
# Begin Source File
SOURCE=.\ScreenLogo.cpp
# End Source File
# Begin Source File
SOURCE=.\ScreenLogo.h
# End Source File
# Begin Source File
+36
View File
@@ -231,6 +231,12 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
<File
RelativePath="ScreenEz2SelectPlayer.h">
</File>
<File
RelativePath="ScreenEz2Stage.cpp">
</File>
<File
RelativePath="ScreenEz2Stage.h">
</File>
<File
RelativePath="ScreenGameOver.cpp">
</File>
@@ -249,12 +255,33 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
<File
RelativePath="ScreenGraphicOptions.h">
</File>
<File
RelativePath="ScreenHighScores.cpp">
</File>
<File
RelativePath="ScreenHighScores.h">
</File>
<File
RelativePath="ScreenHowToPlay.h">
</File>
<File
RelativePath="ScreenInputOptions.cpp">
</File>
<File
RelativePath="ScreenInputOptions.h">
</File>
<File
RelativePath="ScreenInstructions.cpp">
</File>
<File
RelativePath="ScreenInstructions.h">
</File>
<File
RelativePath="ScreenLogo.cpp">
</File>
<File
RelativePath="ScreenLogo.h">
</File>
<File
RelativePath="ScreenMachineOptions.cpp">
</File>
@@ -273,6 +300,9 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
<File
RelativePath="ScreenMapControllers.h">
</File>
<File
RelativePath="ScreenMemoryCard.h">
</File>
<File
RelativePath="ScreenMessage.h">
</File>
@@ -396,6 +426,12 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
<File
RelativePath="ScreenTitleMenu.h">
</File>
<File
RelativePath="ScreenUnlock.h">
</File>
<File
RelativePath="ScreenWarning.h">
</File>
</Filter>
<Filter
Name="Data Structures"