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:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -104,6 +104,7 @@ void LifeMeterBattery::ChangeLife( TapNoteScore score )
|
||||
|
||||
switch( score )
|
||||
{
|
||||
case TNS_MARVELOUS:
|
||||
case TNS_PERFECT:
|
||||
case TNS_GREAT:
|
||||
break;
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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] )
|
||||
{
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 ", "
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user