NEW FEATURE: Added 0.25x scroll speed

CHANGE:  Reorganized options on Player Options screen
NEW FEATURE:  New modifier: Acceleration-Land
NEW FEATURE:  New modifier: Acceleration-Expand
NEW FEATURE:  New modifier: Acceleration-Boomerang
CHANGE:  Tweaked Acceleration-Wave for more of a challenge
CHANGE:  Changed format  NoteSkin tap graphic format.  Existing NoteSkins will
	need to update the tap graphic.
This commit is contained in:
Chris Danford
2003-01-25 11:05:12 +00:00
parent 3d4d28eeb0
commit 559c3b7248
23 changed files with 331 additions and 179 deletions
+12 -1
View File
@@ -1,5 +1,16 @@
----------------------- Version 3.02 ---------------------------
NEW FEATURE: Added 0.25x scroll speed
CHANGE: Reorganized options on Player Options screen
NEW FEATURE: New modifier: Acceleration-Land
NEW FEATURE: New modifier: Acceleration-Expand
NEW FEATURE: New modifier: Acceleration-Boomerang
CHANGE: Tweaked Acceleration-Wave for more of a challenge
CHANGE: Changed format NoteSkin tap graphic format. Existing NoteSkins will
need to update the tap graphic.
----------------------- Version 3.01 --------------------------- ----------------------- Version 3.01 ---------------------------
CHANGE: Simplified NoteSkin format. Old NoteSkins will need to be updated. CHANGE: Simplified NoteSkin tap graphic format. Old NoteSkins will need to
update the tap graphic.
NEW FEATURE: AutoSync status now shown during gameplay with icon NEW FEATURE: AutoSync status now shown during gameplay with icon
NEW FEATURE: added autogen icon to select music NEW FEATURE: added autogen icon to select music
NEW FEATURE: toggle for easter eggs in Machine Options NEW FEATURE: toggle for easter eggs in Machine Options
+8
View File
@@ -2,6 +2,14 @@
Fix Fix
///////////////////////// /////////////////////////
Hrm.. I had a few things about Stepmania I wanted to suggest, but can't think of all of them now.. Lemme list the ones I can remember:
- In "all songs" don't have it automatically open one of the folders, or at least have it start at the very beginning of the folder
- a "remember settings" feature or something, so when I press enter on "game mode" it automatically selects Single, Heavy, 2x, Dark, All Songs. Or whatever you specify.
ddrllama: - When pressing "Escape" on the main menu of Stepmania, don't have it go into a demo.. Either have it do nothing, or an "Are you sure you want to quit?" or something message--I'm used to DWI, pressing Escape like 10 times until it quits, and I often forget to only press it twice and then to go to "Quit"
change space so gray arrows aren't so small change space so gray arrows aren't so small
groove radar goes wild when random selected groove radar goes wild when random selected
+1 -1
View File
@@ -669,7 +669,7 @@ SuperShuffle=Down,Up,Left,Right
Little= Little=
NextScrollSpeed= NextScrollSpeed=
PreviousScrollSpeed= PreviousScrollSpeed=
Boost=Left,Right,Down,Up NextAccel=Left,Right,Down,Up
NextEffect=Left,Down,Right NextEffect=Left,Down,Right
NextAppearance=Left,Up,Right NextAppearance=Left,Up,Right
NextTurn= NextTurn=
+42 -8
View File
@@ -21,6 +21,9 @@
#include <math.h> #include <math.h>
RageTimer g_timerExpand;
float g_fExpandSeconds = 0;
float ArrowGetYOffset( PlayerNumber pn, float fNoteBeat ) float ArrowGetYOffset( PlayerNumber pn, float fNoteBeat )
{ {
float fSongBeat = GAMESTATE->m_fSongBeat; float fSongBeat = GAMESTATE->m_fSongBeat;
@@ -36,10 +39,33 @@ float ArrowGetYOffset( PlayerNumber pn, float fNoteBeat )
* *
* I'm not sure which is better. - glenn * I'm not sure which is better. - glenn
*/ */
if( GAMESTATE->m_PlayerOptions[pn].m_bBoost ) /* Boost and wave can no longer be used at the same time. -Chris */
fYOffset *= 1.4f / ((fYOffset+SCREEN_HEIGHT/1.6f)/SCREEN_HEIGHT);
if( GAMESTATE->m_PlayerOptions[pn].m_bEffects[PlayerOptions::EFFECT_WAVE] ) if( fYOffset < 0 )
fYOffset += 15.0f*sinf( fYOffset/38.0f ); return fYOffset; // don't mess with it after crossing the receptors
switch( GAMESTATE->m_PlayerOptions[pn].m_AccelType )
{
case PlayerOptions::ACCEL_BOOST:
fYOffset *= 1.5f / ((fYOffset+SCREEN_HEIGHT/1.2f)/SCREEN_HEIGHT);
break;
case PlayerOptions::ACCEL_LAND:
fYOffset *= SCALE( fYOffset, 0.f, SCREEN_HEIGHT, 0.25f, 1.5f );
break;
case PlayerOptions::ACCEL_WAVE:
fYOffset += 20.0f*sinf( fYOffset/38.0f );
break;
case PlayerOptions::ACCEL_EXPAND:
if( !GAMESTATE->m_bFreeze )
g_fExpandSeconds += g_timerExpand.GetDeltaTime();
else
g_timerExpand.GetDeltaTime(); // throw away
fYOffset *= SCALE( cosf(g_fExpandSeconds*3), -1, 1, 0.5f, 1.5f );
break;
case PlayerOptions::ACCEL_BOOMERANG:
fYOffset *= SCALE( fYOffset, 0.f, SCREEN_HEIGHT, 1.5f, 0.5f );
break;
}
return fYOffset; return fYOffset;
} }
@@ -72,19 +98,27 @@ float ArrowGetXPos( PlayerNumber pn, int iColNum, float fYPos )
return fPixelOffsetFromCenter; return fPixelOffsetFromCenter;
} }
float ArrowGetRotation( PlayerNumber pn, int iColNum, float fYOffset ) float ArrowGetRotation( PlayerNumber pn, float fNoteBeat )
{ {
float fRotation = 0; //StyleDef.m_ColumnToRotation[iColNum]; float fRotation = 0; //StyleDef.m_ColumnToRotation[iColNum];
if( GAMESTATE->m_PlayerOptions[pn].m_bEffects[PlayerOptions::EFFECT_DIZZY] ) if( GAMESTATE->m_PlayerOptions[pn].m_bEffects[PlayerOptions::EFFECT_DIZZY] )
fRotation += fYOffset/SCREEN_HEIGHT*6; {
float fSongBeat = GAMESTATE->m_fSongBeat;
float fBeatsUntilStep = fNoteBeat - fSongBeat;
fRotation += fBeatsUntilStep;
}
return fRotation; return fRotation;
} }
float ArrowGetYPosWithoutReverse( PlayerNumber pn, float fYOffset )
{
return fYOffset * GAMESTATE->m_PlayerOptions[pn].m_fScrollSpeed;
}
float ArrowGetYPos( PlayerNumber pn, float fYOffset ) float ArrowGetYPos( PlayerNumber pn, float fYOffset )
{ {
return fYOffset * GAMESTATE->m_PlayerOptions[pn].m_fArrowScrollSpeed * (GAMESTATE->m_PlayerOptions[pn].m_bReverseScroll ? -1 : 1 ); return ArrowGetYPosWithoutReverse(pn,fYOffset) * (GAMESTATE->m_PlayerOptions[pn].m_bReverseScroll ? -1 : 1 );
} }
+2 -1
View File
@@ -29,12 +29,13 @@ float ArrowGetYOffset( PlayerNumber pn, float fNoteBeat );
// fRotation is Z rotation of an arrow. This will depend on the column of // fRotation is Z rotation of an arrow. This will depend on the column of
// the arrow and possibly the Arrow effect and the fYOffset (in the case of // the arrow and possibly the Arrow effect and the fYOffset (in the case of
// EFFECT_DIZZY). // EFFECT_DIZZY).
float ArrowGetRotation( PlayerNumber pn, int iCol, float fYOffset ); float ArrowGetRotation( PlayerNumber pn, float fNoteBeat );
// fYPos is the position of the note in pixels relative to the center. // fYPos is the position of the note in pixels relative to the center.
// (positive if has not yet been stepped on, negative if has already passed). // (positive if has not yet been stepped on, negative if has already passed).
// This value is fYOffset with bReverseScroll and fScrollSpeed factored in. // This value is fYOffset with bReverseScroll and fScrollSpeed factored in.
float ArrowGetYPosWithoutReverse( PlayerNumber pn, float fYOffset );
float ArrowGetYPos( PlayerNumber pn, float fYOffset ); float ArrowGetYPos( PlayerNumber pn, float fYOffset );
+8 -8
View File
@@ -33,7 +33,7 @@ enum Code {
CODE_LITTLE, CODE_LITTLE,
CODE_NEXT_SCROLL_SPEED, CODE_NEXT_SCROLL_SPEED,
CODE_PREVIOUS_SCROLL_SPEED, CODE_PREVIOUS_SCROLL_SPEED,
CODE_BOOST, CODE_NEXT_ACCEL,
CODE_NEXT_EFFECT, CODE_NEXT_EFFECT,
CODE_NEXT_APPEARANCE, CODE_NEXT_APPEARANCE,
CODE_NEXT_TURN, CODE_NEXT_TURN,
@@ -60,7 +60,7 @@ const CString g_sCodeNames[NUM_CODES] = {
"Little", "Little",
"NextScrollSpeed", "NextScrollSpeed",
"PreviousScrollSpeed", "PreviousScrollSpeed",
"Boost", "NextAccel",
"NextEffect", "NextEffect",
"NextAppearance", "NextAppearance",
"NextTurn", "NextTurn",
@@ -174,14 +174,14 @@ bool CodeDetector::DetectAndAdjustOptions( GameController controller )
case CODE_SHUFFLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_TurnType, PlayerOptions::TURN_SHUFFLE, PlayerOptions::TURN_NONE ); break; case CODE_SHUFFLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_TurnType, PlayerOptions::TURN_SHUFFLE, PlayerOptions::TURN_NONE ); break;
case CODE_SUPER_SHUFFLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_TurnType, PlayerOptions::TURN_SUPER_SHUFFLE, PlayerOptions::TURN_NONE ); break; case CODE_SUPER_SHUFFLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_TurnType, PlayerOptions::TURN_SUPER_SHUFFLE, PlayerOptions::TURN_NONE ); break;
case CODE_LITTLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bLittle, true, false ); break; case CODE_LITTLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bLittle, true, false ); break;
case CODE_NEXT_SCROLL_SPEED:INCREMENT_SCROLL_SPEED( GAMESTATE->m_PlayerOptions[pn].m_fArrowScrollSpeed ); break; case CODE_NEXT_SCROLL_SPEED:INCREMENT_SCROLL_SPEED( GAMESTATE->m_PlayerOptions[pn].m_fScrollSpeed ); break;
case CODE_PREVIOUS_SCROLL_SPEED:DECREMENT_SCROLL_SPEED( GAMESTATE->m_PlayerOptions[pn].m_fArrowScrollSpeed ); break; case CODE_PREVIOUS_SCROLL_SPEED:DECREMENT_SCROLL_SPEED( GAMESTATE->m_PlayerOptions[pn].m_fScrollSpeed ); break;
case CODE_BOOST: GAMESTATE->m_PlayerOptions[pn].m_bBoost ^= true; break; case CODE_NEXT_ACCEL: GAMESTATE->m_PlayerOptions[pn].NextAccel(); break;
case CODE_NEXT_EFFECT: GAMESTATE->m_PlayerOptions[pn].NextEffect(); break; case CODE_NEXT_EFFECT: GAMESTATE->m_PlayerOptions[pn].NextEffect(); break;
case CODE_NEXT_APPEARANCE: GAMESTATE->m_PlayerOptions[pn].m_AppearanceType = PlayerOptions::AppearanceType((GAMESTATE->m_PlayerOptions[pn].m_AppearanceType+1) %PlayerOptions::NUM_APPEARANCE_TYPES ); break; case CODE_NEXT_APPEARANCE: GAMESTATE->m_PlayerOptions[pn].NextAppearance();; break;
case CODE_NEXT_TURN: GAMESTATE->m_PlayerOptions[pn].m_TurnType = PlayerOptions::TurnType( (GAMESTATE->m_PlayerOptions[pn].m_TurnType+1) %PlayerOptions::NUM_TURN_TYPES ); break; case CODE_NEXT_TURN: GAMESTATE->m_PlayerOptions[pn].NextTurn(); break;
case CODE_REVERSE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bReverseScroll, true, false ); break; case CODE_REVERSE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bReverseScroll, true, false ); break;
case CODE_NEXT_COLOR: GAMESTATE->m_PlayerOptions[pn].m_ColorType = PlayerOptions::ColorType( (GAMESTATE->m_PlayerOptions[pn].m_ColorType+1) %PlayerOptions::NUM_COLOR_TYPES ); break; case CODE_NEXT_COLOR: GAMESTATE->m_PlayerOptions[pn].NextColor(); break;
case CODE_HOLDS: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bHoldNotes, true, false ); break; case CODE_HOLDS: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bHoldNotes, true, false ); break;
case CODE_DARK: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bDark, true, false ); break; case CODE_DARK: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bDark, true, false ); break;
case CODE_CANCEL_ALL: GAMESTATE->m_PlayerOptions[pn] = PlayerOptions(); break; case CODE_CANCEL_ALL: GAMESTATE->m_PlayerOptions[pn] = PlayerOptions(); break;
+2 -4
View File
@@ -72,10 +72,7 @@ void GameState::Reset()
m_pCurNotes[p] = NULL; m_pCurNotes[p] = NULL;
m_pCurCourse = NULL; m_pCurCourse = NULL;
m_fMusicSeconds = 0; ResetMusicStatistics();
m_fSongBeat = 0;
m_fCurBPS = 0;
m_bFreeze = 0;
m_CurStageStats = StageStats(); m_CurStageStats = StageStats();
m_vPassedStageStats.clear(); m_vPassedStageStats.clear();
@@ -91,6 +88,7 @@ void GameState::ResetMusicStatistics()
m_fSongBeat = 0; m_fSongBeat = 0;
m_fCurBPS = 10; m_fCurBPS = 10;
m_bFreeze = false; m_bFreeze = false;
m_bPastHereWeGo = false;
} }
int GameState::GetStageIndex() int GameState::GetStageIndex()
+1
View File
@@ -92,6 +92,7 @@ public:
float m_fSongBeat; float m_fSongBeat;
float m_fCurBPS; float m_fCurBPS;
bool m_bFreeze; // in the middle of a freeze bool m_bFreeze; // in the middle of a freeze
bool m_bPastHereWeGo;
void ResetMusicStatistics(); // Call this when it's time to play a new song. Clears the values above. void ResetMusicStatistics(); // Call this when it's time to play a new song. Clears the values above.
+12 -9
View File
@@ -39,6 +39,12 @@ void GrayArrow::Update( float fDeltaTime )
Sprite::Update( fDeltaTime ); Sprite::Update( fDeltaTime );
if( GAMESTATE->m_fMusicSeconds <= 0 ) // music isn't playing
{
SetState( 0 );
}
else
{
/* These could be metrics or configurable. I'd prefer the flash to /* These could be metrics or configurable. I'd prefer the flash to
* start on the beat, I think ... -glenn */ * start on the beat, I think ... -glenn */
@@ -50,17 +56,14 @@ void GrayArrow::Update( float fDeltaTime )
float cur_beat = GAMESTATE->m_fSongBeat; float cur_beat = GAMESTATE->m_fSongBeat;
/* Make sure that the first flash (when cur_beat is passing 0) is just as /* Beats can start in very negative territory (many BMR songs, Drop Out
* long as others. */ * -Remix-). */
cur_beat += 1.0f; cur_beat += 100.0f;
cur_beat -= flash_offset; cur_beat -= flash_offset;
float fPercentIntoBeat = fmodf(cur_beat, 1); float fPercentIntoBeat = fmodf(cur_beat, 1);
SetState( (fPercentIntoBeat<flash_length)? 1 : 2 );
int iNewState = (fPercentIntoBeat < flash_length)? 0:1; }
CLAMP( iNewState, 0, Sprite::GetNumStates() );
SetState( iNewState );
} }
void GrayArrow::Step() void GrayArrow::Step()
+2 -2
View File
@@ -37,8 +37,8 @@ void GrayArrowRow::Load( PlayerNumber pn )
{ {
CString sPath = GAMEMAN->GetPathTo(c, "receptor"); CString sPath = GAMEMAN->GetPathTo(c, "receptor");
m_GrayArrow[c].Load( sPath ); m_GrayArrow[c].Load( sPath );
if( m_GrayArrow[c].GetNumStates() != 2 ) if( m_GrayArrow[c].GetNumStates() != 3 )
RageException::Throw( "'%s' must have two frames", sPath.GetString() ); RageException::Throw( "'%s' must have 3 frames", sPath.GetString() );
m_GrayArrow[c].SetX( pStyleDef->m_ColumnInfo[pn][c].fXOffset ); m_GrayArrow[c].SetX( pStyleDef->m_ColumnInfo[pn][c].fXOffset );
} }
} }
+1 -2
View File
@@ -66,7 +66,6 @@ int NoteDisplay::GetTapFrameNo( const float fNoteBeat )
float fSongBeat = GAMESTATE->m_fSongBeat; float fSongBeat = GAMESTATE->m_fSongBeat;
float fPercentIntoMeasure = fmodf( fSongBeat, g_fTapAnimationLengthInBeats ) / g_fTapAnimationLengthInBeats; float fPercentIntoMeasure = fmodf( fSongBeat, g_fTapAnimationLengthInBeats ) / g_fTapAnimationLengthInBeats;
fPercentIntoMeasure += 1/(iNumFrames*2.f); // fudge factor so that the "full white" frame shows when the arrow overlaps the receptors
int iSongBeatFrameContrib = (int)roundf( fPercentIntoMeasure * iNumFrames ); int iSongBeatFrameContrib = (int)roundf( fPercentIntoMeasure * iNumFrames );
float fBeatFraction = fmodf( fNoteBeat, 1.0f ); float fBeatFraction = fmodf( fNoteBeat, 1.0f );
@@ -317,7 +316,7 @@ void NoteDisplay::DrawTap( const int iCol, const float fBeat, const bool bOnSame
{ {
const float fYOffset = ArrowGetYOffset( m_PlayerNumber, fBeat ); const float fYOffset = ArrowGetYOffset( m_PlayerNumber, fBeat );
const float fYPos = ArrowGetYPos( m_PlayerNumber, fYOffset ); const float fYPos = ArrowGetYPos( m_PlayerNumber, fYOffset );
const float fRotation = ArrowGetRotation( m_PlayerNumber, iCol, fYOffset ); const float fRotation = ArrowGetRotation( m_PlayerNumber, fBeat );
const float fXPos = ArrowGetXPos( m_PlayerNumber, iCol, fYPos ); const float fXPos = ArrowGetXPos( m_PlayerNumber, iCol, fYPos );
const float fAlpha = ArrowGetAlpha( m_PlayerNumber, fYPos, fPercentFadeToFail ); const float fAlpha = ArrowGetAlpha( m_PlayerNumber, fYPos, fPercentFadeToFail );
const float fGlow = ArrowGetGlow( m_PlayerNumber, fYPos, fPercentFadeToFail ); const float fGlow = ArrowGetGlow( m_PlayerNumber, fYPos, fPercentFadeToFail );
+34 -9
View File
@@ -45,11 +45,11 @@ NoteField::NoteField()
} }
void NoteField::Load( NoteData* pNoteData, PlayerNumber pn, int iPixelsToDrawBehind, int iPixelsToDrawAhead ) void NoteField::Load( NoteData* pNoteData, PlayerNumber pn, int iFirstPixelToDraw, int iLastPixelToDraw )
{ {
m_PlayerNumber = pn; m_PlayerNumber = pn;
m_iPixelsToDrawBehind = iPixelsToDrawBehind; m_iFirstPixelToDraw = iFirstPixelToDraw;
m_iPixelsToDrawAhead = iPixelsToDrawAhead; m_iLastPixelToDraw = iLastPixelToDraw;
m_fPercentFadeToFail = -1; m_fPercentFadeToFail = -1;
@@ -150,15 +150,40 @@ void NoteField::DrawPrimitives()
const float fSongBeat = GAMESTATE->m_fSongBeat; const float fSongBeat = GAMESTATE->m_fSongBeat;
const float fBeatsToDrawBehind = m_iPixelsToDrawBehind * (1/(float)ARROW_SIZE) * (1/GAMESTATE->m_PlayerOptions[m_PlayerNumber].m_fArrowScrollSpeed); // CPU OPTIMIZATION OPPORTUNITY:
const float fBeatsToDrawAhead = m_iPixelsToDrawAhead * (1/(float)ARROW_SIZE) * (1/GAMESTATE->m_PlayerOptions[m_PlayerNumber].m_fArrowScrollSpeed); // change this probing to binary search
const float fFirstBeatToDraw = max( 0, fSongBeat - fBeatsToDrawBehind );
/* We actually want to draw up to the last row, which is after MAX_BEATS-1 but // probe for first note on the screen
* before MAX_BEATS. Rely on GetTapNote to cap it for us correctly. */ float fFirstBeatToDraw = fSongBeat-2; // Adjust to balance of performance and showing enough notes.
const float fLastBeatToDraw = min( MAX_BEATS, fSongBeat + fBeatsToDrawAhead ); while( fFirstBeatToDraw<fSongBeat )
{
float fYOffset = ArrowGetYOffset(m_PlayerNumber, fFirstBeatToDraw);
float fYPosWOReverse = ArrowGetYPosWithoutReverse(m_PlayerNumber, fYOffset );
if( fYPosWOReverse < m_iFirstPixelToDraw ) // off screen
fFirstBeatToDraw += 0.1f; // move toward fSongBeat
else // on screen
break; // stop probing
}
fFirstBeatToDraw -= 0.1f; // rewind if we intentionally overshot
// probe for last note to draw
float fLastBeatToDraw = fSongBeat+20; // worst case is 0.25x + boost. Adjust to balance of performance and showing enough notes.
while( fLastBeatToDraw>fSongBeat )
{
float fYOffset = ArrowGetYOffset(m_PlayerNumber, fLastBeatToDraw);
float fYPosWOReverse = ArrowGetYPosWithoutReverse(m_PlayerNumber, fYOffset );
if( fYPosWOReverse > m_iLastPixelToDraw ) // off screen
fLastBeatToDraw -= 0.1f; // move toward fSongBeat
else // on screen
break; // stop probing
}
fLastBeatToDraw += 0.1f; // fast forward since we intentionally overshot
const int iFirstIndexToDraw = BeatToNoteRow(fFirstBeatToDraw); const int iFirstIndexToDraw = BeatToNoteRow(fFirstBeatToDraw);
const int iLastIndexToDraw = BeatToNoteRow(fLastBeatToDraw); const int iLastIndexToDraw = BeatToNoteRow(fLastBeatToDraw);
// LOG->Trace( "start = %f.1, end = %f.1", fFirstBeatToDraw-fSongBeat, fLastBeatToDraw-fSongBeat );
// LOG->Trace( "Drawing elements %d through %d", iFirstIndexToDraw, iLastIndexToDraw ); // LOG->Trace( "Drawing elements %d through %d", iFirstIndexToDraw, iLastIndexToDraw );
if( GAMESTATE->m_bEditing ) if( GAMESTATE->m_bEditing )
+3 -3
View File
@@ -32,7 +32,7 @@ public:
virtual void Update( float fDeltaTime ); virtual void Update( float fDeltaTime );
virtual void DrawPrimitives(); virtual void DrawPrimitives();
void Load( NoteData* pNoteData, PlayerNumber pn, int iPixelsToDrawBehind, int iPixelsToDrawAhead ); void Load( NoteData* pNoteData, PlayerNumber pn, int iFirstPixelToDraw, int iLastPixelToDraw );
void RemoveTapNoteRow( int iIndex ); void RemoveTapNoteRow( int iIndex );
vector<bool> m_bIsHoldingHoldNote; // hack: Need this to know when to "light up" the center of hold notes vector<bool> m_bIsHoldingHoldNote; // hack: Need this to know when to "light up" the center of hold notes
@@ -51,8 +51,8 @@ protected:
float m_fPercentFadeToFail; // -1 of not fading to fail float m_fPercentFadeToFail; // -1 of not fading to fail
PlayerNumber m_PlayerNumber; PlayerNumber m_PlayerNumber;
int m_iPixelsToDrawBehind; int m_iFirstPixelToDraw; // this should be a negative number
int m_iPixelsToDrawAhead; int m_iLastPixelToDraw; // this should be a positive number
// color arrows // color arrows
NoteDisplay m_NoteDisplay[MAX_NOTE_TRACKS]; NoteDisplay m_NoteDisplay[MAX_NOTE_TRACKS];
+4 -1
View File
@@ -40,7 +40,10 @@ struct OptionColumnEntry
const OptionColumnEntry g_OptionColumnEntries[] = const OptionColumnEntry g_OptionColumnEntries[] =
{ {
{"Boost", 0}, {"Boost", 0},
{"Wave", 1}, {"Land", 0},
{"Wave", 0},
{"Expand", 0},
{"Boomerang",0},
{"Drunk", 1}, {"Drunk", 1},
{"Dizzy", 1}, {"Dizzy", 1},
{"Space", 1}, {"Space", 1},
+2 -2
View File
@@ -160,8 +160,8 @@ void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, ScoreDi
if( GAMESTATE->m_PlayerOptions[pn].m_bLittle ) if( GAMESTATE->m_PlayerOptions[pn].m_bLittle )
NoteDataUtil::MakeLittle(*this); NoteDataUtil::MakeLittle(*this);
int iPixelsToDrawBefore = 96; int iPixelsToDrawBefore = -60;
int iPixelsToDrawAfter = 384; int iPixelsToDrawAfter = 350;
// If both options are on, we *do* need to multiply it twice. // If both options are on, we *do* need to multiply it twice.
if( GAMESTATE->m_PlayerOptions[pn].m_bEffects[PlayerOptions::EFFECT_MINI] ) if( GAMESTATE->m_PlayerOptions[pn].m_bEffects[PlayerOptions::EFFECT_MINI] )
+72 -38
View File
@@ -13,32 +13,11 @@
#include "PlayerOptions.h" #include "PlayerOptions.h"
#include "RageUtil.h" #include "RageUtil.h"
void PlayerOptions::NextEffect()
{
if( m_bEffects[NUM_EFFECT_TYPES-1] )
{
ZERO( m_bEffects );
return;
}
for( int i=0; i<NUM_EFFECT_TYPES-1; i++ )
{
if( m_bEffects[i] )
{
ZERO( m_bEffects );
m_bEffects[i+1] = true;
return;
}
}
ZERO( m_bEffects );
m_bEffects[0] = true;
}
void PlayerOptions::Init() void PlayerOptions::Init()
{ {
m_fArrowScrollSpeed = 1.0f; m_fScrollSpeed = 1.0f;
m_bBoost = false; m_AccelType = ACCEL_OFF;
ZERO( m_bEffects ); ZERO( m_bEffects );
m_AppearanceType = APPEARANCE_VISIBLE; m_AppearanceType = APPEARANCE_VISIBLE;
m_TurnType = TURN_NONE; m_TurnType = TURN_NONE;
@@ -54,10 +33,10 @@ CString PlayerOptions::GetString()
{ {
CString sReturn; CString sReturn;
if( m_fArrowScrollSpeed != 1 ) if( m_fScrollSpeed != 1 )
{ {
/* -> 1.00 */ /* -> 1.00 */
CString s = ssprintf( "%2.2f", m_fArrowScrollSpeed ); CString s = ssprintf( "%2.2f", m_fScrollSpeed );
if( s[s.GetLength()-1] == '0' ) { if( s[s.GetLength()-1] == '0' ) {
/* -> 1.0 */ /* -> 1.0 */
s.erase(s.GetLength()-1); // delete last char s.erase(s.GetLength()-1); // delete last char
@@ -69,15 +48,23 @@ CString PlayerOptions::GetString()
sReturn += s + "X, "; sReturn += s + "X, ";
} }
if( m_bBoost ) sReturn += "Boost, "; switch( m_AccelType )
{
case ACCEL_OFF: break;
case ACCEL_BOOST: sReturn += "Boost, "; break;
case ACCEL_LAND: sReturn += "Land, "; break;
case ACCEL_WAVE: sReturn += "Wave, "; break;
case ACCEL_EXPAND: sReturn += "Expand, "; break;
case ACCEL_BOOMERANG: sReturn += "Boomerang, "; break;
default: ASSERT(0);
}
if( m_bEffects[EFFECT_WAVE] ) sReturn += "Wave, ";
if( m_bEffects[EFFECT_DRUNK] ) sReturn += "Drunk, "; if( m_bEffects[EFFECT_DRUNK] ) sReturn += "Drunk, ";
if( m_bEffects[EFFECT_DIZZY] ) sReturn += "Dizzy, "; if( m_bEffects[EFFECT_DIZZY] ) sReturn += "Dizzy, ";
if( m_bEffects[EFFECT_SPACE] ) sReturn += "Space, "; if( m_bEffects[EFFECT_SPACE] ) sReturn += "Space, ";
if( m_bEffects[EFFECT_MINI] ) sReturn += "Mini, "; if( m_bEffects[EFFECT_MINI] ) sReturn += "Mini, ";
if( m_bEffects[EFFECT_FLIP] ) sReturn += "Flip, "; if( m_bEffects[EFFECT_FLIP] ) sReturn += "Flip, ";
if( m_bEffects[EFFECT_TORNADO] ) sReturn += "Tornado, "; if( m_bEffects[EFFECT_TORNADO] )sReturn += "Tornado, ";
switch( m_AppearanceType ) switch( m_AppearanceType )
{ {
@@ -138,16 +125,20 @@ void PlayerOptions::FromString( CString sOptions )
TrimLeft(sBit); TrimLeft(sBit);
TrimRight(sBit); TrimRight(sBit);
if( sBit == "0.5x" ) m_fArrowScrollSpeed = 0.5f; if( sBit == "0.25x" ) m_fScrollSpeed = 0.25f;
else if( sBit == "0.75x" ) m_fArrowScrollSpeed = 0.75f; else if( sBit == "0.5x" ) m_fScrollSpeed = 0.5f;
else if( sBit == "1.5x" ) m_fArrowScrollSpeed = 1.5f; else if( sBit == "0.75x" ) m_fScrollSpeed = 0.75f;
else if( sBit == "2.0x" ) m_fArrowScrollSpeed = 2.0f; else if( sBit == "1.5x" ) m_fScrollSpeed = 1.5f;
else if( sBit == "3.0x" ) m_fArrowScrollSpeed = 3.0f; else if( sBit == "2.0x" ) m_fScrollSpeed = 2.0f;
else if( sBit == "4.0x" ) m_fArrowScrollSpeed = 4.0f; else if( sBit == "3.0x" ) m_fScrollSpeed = 3.0f;
else if( sBit == "5.0x" ) m_fArrowScrollSpeed = 5.0f; else if( sBit == "4.0x" ) m_fScrollSpeed = 4.0f;
else if( sBit == "8.0x" ) m_fArrowScrollSpeed = 8.0f; else if( sBit == "5.0x" ) m_fScrollSpeed = 5.0f;
else if( sBit == "boost" ) m_bBoost = true; else if( sBit == "8.0x" ) m_fScrollSpeed = 8.0f;
else if( sBit == "wave" ) m_bEffects[EFFECT_WAVE] = true; else if( sBit == "boost" ) m_AccelType = ACCEL_BOOST;
else if( sBit == "land" ) m_AccelType = ACCEL_LAND;
else if( sBit == "wave" ) m_AccelType = ACCEL_WAVE;
else if( sBit == "expand" ) m_AccelType = ACCEL_EXPAND;
else if( sBit == "boomerang" ) m_AccelType = ACCEL_BOOMERANG;
else if( sBit == "drunk" ) m_bEffects[EFFECT_DRUNK] = true; else if( sBit == "drunk" ) m_bEffects[EFFECT_DRUNK] = true;
else if( sBit == "dizzy" ) m_bEffects[EFFECT_DIZZY] = true; else if( sBit == "dizzy" ) m_bEffects[EFFECT_DIZZY] = true;
else if( sBit == "space" ) m_bEffects[EFFECT_SPACE] = true; else if( sBit == "space" ) m_bEffects[EFFECT_SPACE] = true;
@@ -172,3 +163,46 @@ void PlayerOptions::FromString( CString sOptions )
else if( sBit == "dark" ) m_bDark = true; else if( sBit == "dark" ) m_bDark = true;
} }
} }
void PlayerOptions::NextAccel()
{
m_AccelType = (AccelType) ((m_AccelType+1)%NUM_ACCEL_TYPES);
}
void PlayerOptions::NextEffect()
{
if( m_bEffects[NUM_EFFECT_TYPES-1] ) // last effect is on
{
ZERO( m_bEffects );
return;
}
for( int i=0; i<NUM_EFFECT_TYPES-1; i++ )
{
if( m_bEffects[i] )
{
ZERO( m_bEffects );
m_bEffects[i+1] = true;
return;
}
}
// if we get here, no effects are on
m_bEffects[0] = true;
}
void PlayerOptions::NextColor()
{
m_ColorType = (ColorType) ((m_ColorType+1)%NUM_COLOR_TYPES);
}
void PlayerOptions::NextAppearance()
{
m_AppearanceType = (AppearanceType) ((m_AppearanceType+1)%NUM_APPEARANCE_TYPES);
}
void PlayerOptions::NextTurn()
{
m_TurnType = (TurnType) ((m_TurnType+1)%NUM_TURN_TYPES);
}
+38 -10
View File
@@ -13,10 +13,18 @@
struct PlayerOptions struct PlayerOptions
{ {
float m_fArrowScrollSpeed; float m_fScrollSpeed;
bool m_bBoost; enum AccelType {
ACCEL_OFF,
ACCEL_BOOST,
ACCEL_LAND,
ACCEL_WAVE,
ACCEL_EXPAND,
ACCEL_BOOMERANG,
NUM_ACCEL_TYPES
} m_AccelType;
void NextAccel();
enum EffectType { enum EffectType {
EFFECT_WAVE,
EFFECT_DRUNK, EFFECT_DRUNK,
EFFECT_DIZZY, EFFECT_DIZZY,
EFFECT_SPACE, EFFECT_SPACE,
@@ -25,16 +33,36 @@ struct PlayerOptions
EFFECT_TORNADO, EFFECT_TORNADO,
NUM_EFFECT_TYPES NUM_EFFECT_TYPES
}; };
bool m_bEffects[NUM_EFFECT_TYPES]; bool m_bEffects[NUM_EFFECT_TYPES]; // no effects are mutually exclusive
void NextEffect(); void NextEffect();
enum AppearanceType { APPEARANCE_VISIBLE=0, APPEARANCE_HIDDEN, APPEARANCE_SUDDEN, APPEARANCE_STEALTH, APPEARANCE_BLINK, NUM_APPEARANCE_TYPES }; enum AppearanceType {
AppearanceType m_AppearanceType; APPEARANCE_VISIBLE=0,
enum TurnType { TURN_NONE=0, TURN_MIRROR, TURN_LEFT, TURN_RIGHT, TURN_SHUFFLE, TURN_SUPER_SHUFFLE, NUM_TURN_TYPES }; APPEARANCE_HIDDEN,
TurnType m_TurnType; APPEARANCE_SUDDEN,
APPEARANCE_STEALTH,
APPEARANCE_BLINK,
NUM_APPEARANCE_TYPES
} m_AppearanceType;
void NextAppearance();
enum TurnType {
TURN_NONE=0,
TURN_MIRROR,
TURN_LEFT,
TURN_RIGHT,
TURN_SHUFFLE,
TURN_SUPER_SHUFFLE,
NUM_TURN_TYPES
} m_TurnType;
void NextTurn();
bool m_bLittle; bool m_bLittle;
bool m_bReverseScroll; bool m_bReverseScroll;
enum ColorType { COLOR_VIVID=0, COLOR_NOTE, COLOR_FLAT, NUM_COLOR_TYPES }; enum ColorType {
ColorType m_ColorType; COLOR_VIVID=0,
COLOR_NOTE,
COLOR_FLAT,
NUM_COLOR_TYPES
} m_ColorType;
void NextColor();
bool m_bHoldNotes; bool m_bHoldNotes;
bool m_bDark; bool m_bDark;
+4 -2
View File
@@ -96,7 +96,7 @@ bool SetUpSongOptions() // always return true.
/* Lots and lots of arrows. This might even bias to arrows a little /* Lots and lots of arrows. This might even bias to arrows a little
* too much. */ * too much. */
GAMESTATE->m_PlayerOptions[p] = PlayerOptions(); GAMESTATE->m_PlayerOptions[p] = PlayerOptions();
GAMESTATE->m_PlayerOptions[p].m_fArrowScrollSpeed = .25f; GAMESTATE->m_PlayerOptions[p].m_fScrollSpeed = .25f;
GAMESTATE->m_PlayerOptions[p].m_bEffects[ PlayerOptions::EFFECT_SPACE ] = true; GAMESTATE->m_PlayerOptions[p].m_bEffects[ PlayerOptions::EFFECT_SPACE ] = true;
GAMESTATE->m_PlayerOptions[p].m_bEffects[ PlayerOptions::EFFECT_MINI ] = true; GAMESTATE->m_PlayerOptions[p].m_bEffects[ PlayerOptions::EFFECT_MINI ] = true;
} }
@@ -112,7 +112,7 @@ bool SetUpSongOptions() // always return true.
GAMESTATE->m_PlayerOptions[p] = PlayerOptions(); GAMESTATE->m_PlayerOptions[p] = PlayerOptions();
if( RandomFloat(0,1)>0.8f ) if( RandomFloat(0,1)>0.8f )
GAMESTATE->m_PlayerOptions[p].m_fArrowScrollSpeed = 1.5f; GAMESTATE->m_PlayerOptions[p].m_fScrollSpeed = 1.5f;
GAMESTATE->m_PlayerOptions[p].m_bEffects[ rand()%PlayerOptions::NUM_EFFECT_TYPES ] = true; GAMESTATE->m_PlayerOptions[p].m_bEffects[ rand()%PlayerOptions::NUM_EFFECT_TYPES ] = true;
if( RandomFloat(0,1)>0.9f ) if( RandomFloat(0,1)>0.9f )
GAMESTATE->m_PlayerOptions[p].m_AppearanceType = PlayerOptions::APPEARANCE_HIDDEN; GAMESTATE->m_PlayerOptions[p].m_AppearanceType = PlayerOptions::APPEARANCE_HIDDEN;
@@ -158,6 +158,8 @@ ScreenDemonstration::ScreenDemonstration() : ScreenGameplay(SetUpSongOptions())
ClearMessageQueue(); // remove all of the messages set in ScreenGameplay that animate "ready", "here we go", etc. ClearMessageQueue(); // remove all of the messages set in ScreenGameplay that animate "ready", "here we go", etc.
GAMESTATE->m_bPastHereWeGo = true;
m_StarWipe.SetOpened(); m_StarWipe.SetOpened();
m_DancingState = STATE_DANCING; m_DancingState = STATE_DANCING;
this->SendScreenMessage( SM_BeginFadingToNextScreen, SECONDS_TO_SHOW ); this->SendScreenMessage( SM_BeginFadingToNextScreen, SECONDS_TO_SHOW );
+3 -3
View File
@@ -222,7 +222,7 @@ ScreenEdit::ScreenEdit()
GAMESTATE->m_SongOptions.m_fMusicRate = 1; GAMESTATE->m_SongOptions.m_fMusicRate = 1;
GAMESTATE->m_PlayerOptions[PLAYER_1].m_fArrowScrollSpeed = 1; GAMESTATE->m_PlayerOptions[PLAYER_1].m_fScrollSpeed = 1;
GAMESTATE->m_PlayerOptions[PLAYER_1].m_ColorType = PlayerOptions::COLOR_NOTE; GAMESTATE->m_PlayerOptions[PLAYER_1].m_ColorType = PlayerOptions::COLOR_NOTE;
m_BGAnimation.LoadFromAniDir( THEME->GetPathTo("BGAnimations","edit") ); m_BGAnimation.LoadFromAniDir( THEME->GetPathTo("BGAnimations","edit") );
@@ -238,7 +238,7 @@ ScreenEdit::ScreenEdit()
m_NoteFieldEdit.SetXY( EDIT_X, EDIT_GRAY_Y ); m_NoteFieldEdit.SetXY( EDIT_X, EDIT_GRAY_Y );
m_NoteFieldEdit.SetZoom( 0.5f ); m_NoteFieldEdit.SetZoom( 0.5f );
m_NoteFieldEdit.Load( &noteData, PLAYER_1, 200, 800 ); m_NoteFieldEdit.Load( &noteData, PLAYER_1, -200, 800 );
m_rectRecordBack.StretchTo( RectI(SCREEN_LEFT, SCREEN_TOP, SCREEN_RIGHT, SCREEN_BOTTOM) ); m_rectRecordBack.StretchTo( RectI(SCREEN_LEFT, SCREEN_TOP, SCREEN_RIGHT, SCREEN_BOTTOM) );
m_rectRecordBack.SetDiffuse( RageColor(0,0,0,0) ); m_rectRecordBack.SetDiffuse( RageColor(0,0,0,0) );
@@ -249,7 +249,7 @@ ScreenEdit::ScreenEdit()
m_NoteFieldRecord.SetXY( EDIT_X, EDIT_GRAY_Y ); m_NoteFieldRecord.SetXY( EDIT_X, EDIT_GRAY_Y );
m_NoteFieldRecord.SetZoom( 1.0f ); m_NoteFieldRecord.SetZoom( 1.0f );
m_NoteFieldRecord.Load( &noteData, PLAYER_1, 200, 300 ); m_NoteFieldRecord.Load( &noteData, PLAYER_1, -100, 300 );
m_Clipboard.m_iNumTracks = m_NoteFieldEdit.m_iNumTracks; m_Clipboard.m_iNumTracks = m_NoteFieldEdit.m_iNumTracks;
+13 -8
View File
@@ -1015,8 +1015,10 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
// //
// handle a step // handle a step
// //
if( m_DancingState == STATE_DANCING && type == IET_FIRST_PRESS && !PREFSMAN->m_bAutoPlay && StyleI.IsValid() ) if( type==IET_FIRST_PRESS &&
if( GAMESTATE->IsPlayerEnabled( StyleI.player ) ) !PREFSMAN->m_bAutoPlay &&
StyleI.IsValid() &&
GAMESTATE->IsPlayerEnabled( StyleI.player ) )
m_Player[StyleI.player].Step( StyleI.col ); m_Player[StyleI.player].Step( StyleI.col );
} }
@@ -1160,18 +1162,19 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
case SM_User+1: case SM_User+1:
break; break;
case SM_User+2: case SM_User+2:
m_sprReady.StartFocusing(); m_sprReady.BeginTweening(0.25f);
m_sprReady.SetTweenDiffuse( RageColor(1,1,1,1) );
m_announcerReady.PlayRandom(); m_announcerReady.PlayRandom();
break; break;
case SM_User+3: case SM_User+3:
break; break;
case SM_User+4: case SM_User+4:
m_sprReady.StartBlurring();
break; break;
case SM_User+5: case SM_User+5:
{ m_sprReady.SetDiffuse( RageColor(1,1,1,0) );
m_announcerHereWeGo.PlayRandom();
m_Background.FadeIn(); m_Background.FadeIn();
} GAMESTATE->m_bPastHereWeGo = true;
break; break;
case SM_User+6: case SM_User+6:
break; break;
@@ -1184,7 +1187,9 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
case SM_StartHereWeGo: case SM_StartHereWeGo:
/* We have 2.5 seconds until the notes start. */ /* We have 2.5 seconds until the notes start. */
m_sprHereWeGo.StartFocusing();
m_sprHereWeGo.SetDiffuse( RageColor(1,1,1,1) );
m_announcerHereWeGo.PlayRandom(); m_announcerHereWeGo.PlayRandom();
/* This gives the HWG about a second of screen time. */ /* This gives the HWG about a second of screen time. */
this->SendScreenMessage( SM_StopHereWeGo, 1.5f ); this->SendScreenMessage( SM_StopHereWeGo, 1.5f );
@@ -1192,7 +1197,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
case SM_StopHereWeGo: case SM_StopHereWeGo:
/* We have one second until the notes start. */ /* We have one second until the notes start. */
m_sprHereWeGo.StartBlurring(); m_sprHereWeGo.SetTweenDiffuse( RageColor(1,1,1,0) );
m_DancingState = STATE_DANCING; // STATE CHANGE! Now the user is allowed to press Back m_DancingState = STATE_DANCING; // STATE CHANGE! Now the user is allowed to press Back
break; break;
+2 -3
View File
@@ -20,7 +20,6 @@
#include "BitmapText.h" #include "BitmapText.h"
#include "Player.h" #include "Player.h"
#include "RandomSample.h" #include "RandomSample.h"
#include "FocusingSprite.h"
#include "RageSoundManager.h" #include "RageSoundManager.h"
#include "RageSound.h" #include "RageSound.h"
#include "MotionBlurSprite.h" #include "MotionBlurSprite.h"
@@ -112,8 +111,8 @@ protected:
TransitionFadeWipe m_Fade; TransitionFadeWipe m_Fade;
TransitionStarWipe m_StarWipe; TransitionStarWipe m_StarWipe;
FocusingSprite m_sprReady; Sprite m_sprReady;
FocusingSprite m_sprHereWeGo; Sprite m_sprHereWeGo;
MotionBlurSprite m_sprCleared; MotionBlurSprite m_sprCleared;
MotionBlurSprite m_sprFailed; MotionBlurSprite m_sprFailed;
MotionBlurSprite m_sprTryExtraStage; MotionBlurSprite m_sprTryExtraStage;
+28 -26
View File
@@ -22,7 +22,7 @@
enum { enum {
PO_SPEED = 0, PO_SPEED = 0,
PO_BOOST, PO_ACCEL,
PO_EFFECT, PO_EFFECT,
PO_APPEAR, PO_APPEAR,
PO_TURN, PO_TURN,
@@ -34,10 +34,10 @@ enum {
NUM_PLAYER_OPTIONS_LINES NUM_PLAYER_OPTIONS_LINES
}; };
OptionRowData g_PlayerOptionsLines[NUM_PLAYER_OPTIONS_LINES] = { OptionRowData g_PlayerOptionsLines[NUM_PLAYER_OPTIONS_LINES] = {
{ "Speed", 9, {"x0.5","x0.75","x1","x1.5","x2","x3","x4","x5","x8"} }, { "Speed", 10, {"x0.25","x0.5","x0.75","x1","x1.5","x2","x3","x4","x5","x8"} },
{ "Boost", 2, {"OFF","ON"} }, { "Acceler\n-ation",6, {"OFF","BOOST","LAND","WAVE","EXPAND","BOOMERANG"} },
{ "Effect", 8, {"OFF","WAVE", "DRUNK", "DIZZY","SPACE","MINI","FLIP","TORNADO"} }, { "Effect", 7, {"OFF","DRUNK","DIZZY","SPACE","MINI","FLIP","TORNADO"} },
{ "Appear\n-ance", 5, {"VISIBLE","HIDDEN","SUDDEN","STEALTH", "BLINK"} }, { "Appear\n-ance", 5, {"VISIBLE","HIDDEN","SUDDEN","STEALTH","BLINK"} },
{ "Turn", 6, {"OFF","MIRROR","LEFT","RIGHT","SHUFFLE","SUPER SHUFFLE"} }, { "Turn", 6, {"OFF","MIRROR","LEFT","RIGHT","SHUFFLE","SUPER SHUFFLE"} },
{ "Little", 2, {"OFF","ON"} }, { "Little", 2, {"OFF","ON"} },
{ "Scroll", 2, {"STANDARD","REVERSE"} }, { "Scroll", 2, {"STANDARD","REVERSE"} },
@@ -72,18 +72,19 @@ void ScreenPlayerOptions::ImportOptions()
{ {
PlayerOptions &po = GAMESTATE->m_PlayerOptions[p]; PlayerOptions &po = GAMESTATE->m_PlayerOptions[p];
if( po.m_fArrowScrollSpeed == 0.5f ) m_iSelectedOption[p][PO_SPEED] = 0; if( po.m_fScrollSpeed == 0.25f ) m_iSelectedOption[p][PO_SPEED] = 0;
else if( po.m_fArrowScrollSpeed == 0.75f) m_iSelectedOption[p][PO_SPEED] = 1; else if( po.m_fScrollSpeed == 0.5f ) m_iSelectedOption[p][PO_SPEED] = 1;
else if( po.m_fArrowScrollSpeed == 1.0f ) m_iSelectedOption[p][PO_SPEED] = 2; else if( po.m_fScrollSpeed == 0.75f) m_iSelectedOption[p][PO_SPEED] = 2;
else if( po.m_fArrowScrollSpeed == 1.5f ) m_iSelectedOption[p][PO_SPEED] = 3; else if( po.m_fScrollSpeed == 1.0f ) m_iSelectedOption[p][PO_SPEED] = 3;
else if( po.m_fArrowScrollSpeed == 2.0f ) m_iSelectedOption[p][PO_SPEED] = 4; else if( po.m_fScrollSpeed == 1.5f ) m_iSelectedOption[p][PO_SPEED] = 4;
else if( po.m_fArrowScrollSpeed == 3.0f ) m_iSelectedOption[p][PO_SPEED] = 5; else if( po.m_fScrollSpeed == 2.0f ) m_iSelectedOption[p][PO_SPEED] = 5;
else if( po.m_fArrowScrollSpeed == 4.0f ) m_iSelectedOption[p][PO_SPEED] = 6; else if( po.m_fScrollSpeed == 3.0f ) m_iSelectedOption[p][PO_SPEED] = 6;
else if( po.m_fArrowScrollSpeed == 5.0f ) m_iSelectedOption[p][PO_SPEED] = 7; else if( po.m_fScrollSpeed == 4.0f ) m_iSelectedOption[p][PO_SPEED] = 7;
else if( po.m_fArrowScrollSpeed == 8.0f ) m_iSelectedOption[p][PO_SPEED] = 8; else if( po.m_fScrollSpeed == 5.0f ) m_iSelectedOption[p][PO_SPEED] = 8;
else m_iSelectedOption[p][PO_SPEED] = 2; else if( po.m_fScrollSpeed == 8.0f ) m_iSelectedOption[p][PO_SPEED] = 9;
else m_iSelectedOption[p][PO_SPEED] = 3;
m_iSelectedOption[p][PO_BOOST] = po.m_bBoost ? 1 : 0; m_iSelectedOption[p][PO_ACCEL] = po.m_AccelType;
for( int i=0; i<PlayerOptions::NUM_EFFECT_TYPES; i++ ) for( int i=0; i<PlayerOptions::NUM_EFFECT_TYPES; i++ )
{ {
@@ -109,18 +110,19 @@ void ScreenPlayerOptions::ExportOptions()
switch( m_iSelectedOption[p][PO_SPEED] ) switch( m_iSelectedOption[p][PO_SPEED] )
{ {
case 0: po.m_fArrowScrollSpeed = 0.5f; break; case 0: po.m_fScrollSpeed = 0.25f; break;
case 1: po.m_fArrowScrollSpeed = 0.75f; break; case 1: po.m_fScrollSpeed = 0.5f; break;
case 2: po.m_fArrowScrollSpeed = 1.0f; break; case 2: po.m_fScrollSpeed = 0.75f; break;
case 3: po.m_fArrowScrollSpeed = 1.5f; break; case 3: po.m_fScrollSpeed = 1.0f; break;
case 4: po.m_fArrowScrollSpeed = 2.0f; break; case 4: po.m_fScrollSpeed = 1.5f; break;
case 5: po.m_fArrowScrollSpeed = 3.0f; break; case 5: po.m_fScrollSpeed = 2.0f; break;
case 6: po.m_fArrowScrollSpeed = 4.0f; break; case 6: po.m_fScrollSpeed = 3.0f; break;
case 7: po.m_fArrowScrollSpeed = 5.0f; break; case 7: po.m_fScrollSpeed = 4.0f; break;
case 8: po.m_fArrowScrollSpeed = 8.0f; break; case 8: po.m_fScrollSpeed = 5.0f; break;
case 9: po.m_fScrollSpeed = 8.0f; break;
} }
po.m_bBoost = (m_iSelectedOption[p][PO_BOOST] == 1); po.m_AccelType = (PlayerOptions::AccelType)m_iSelectedOption[p][PO_ACCEL];
ZERO( po.m_bEffects ); ZERO( po.m_bEffects );
if( m_iSelectedOption[p][PO_EFFECT] > 0 ) if( m_iSelectedOption[p][PO_EFFECT] > 0 )
+1 -2
View File
@@ -581,7 +581,7 @@ void SongManager::GetExtraStageInfo( bool bExtra2, CString sPreferredGroup, cons
po_out.Init(); po_out.Init();
so_out.Init(); so_out.Init();
po_out.m_bReverseScroll = true; po_out.m_bReverseScroll = true;
po_out.m_fArrowScrollSpeed = 1.5f; po_out.m_fScrollSpeed = 1.5f;
so_out.m_DrainType = (bExtra2 ? SongOptions::DRAIN_SUDDEN_DEATH : SongOptions::DRAIN_NO_RECOVER); so_out.m_DrainType = (bExtra2 ? SongOptions::DRAIN_SUDDEN_DEATH : SongOptions::DRAIN_NO_RECOVER);
// should we do something fancy here, like turn on different effects? // should we do something fancy here, like turn on different effects?
@@ -593,7 +593,6 @@ void SongManager::GetExtraStageInfo( bool bExtra2, CString sPreferredGroup, cons
case 2: po_out.m_bEffects[PlayerOptions::EFFECT_DRUNK] = true; break; case 2: po_out.m_bEffects[PlayerOptions::EFFECT_DRUNK] = true; break;
case 3: po_out.m_bEffects[PlayerOptions::EFFECT_MINI] = true; break; case 3: po_out.m_bEffects[PlayerOptions::EFFECT_MINI] = true; break;
case 4: po_out.m_bEffects[PlayerOptions::EFFECT_SPACE] = true; break; case 4: po_out.m_bEffects[PlayerOptions::EFFECT_SPACE] = true; break;
case 5: po_out.m_bEffects[PlayerOptions::EFFECT_WAVE] = true; break;
default: ASSERT(0); default: ASSERT(0);
} }
} }