diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index befb81cc10..ebdaa9ce14 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -220,8 +220,7 @@ NextScreen=ScreenSelectGroup HelpText= [ScreenSelectDifficulty] -Choices=arcade-beginner,arcade-easy,arcade-medium,arcade-hard,nonstop,oni,endless -#,rave +Choices=arcade-beginner,arcade-easy,arcade-medium,arcade-hard,nonstop,oni,endless,rave NumChoicesOnPage1=4 HelpText=Use &LEFT; &RIGHT; to select, then press START TimerSeconds=40 @@ -1781,7 +1780,8 @@ NGCommand=shadowlength,4;diffusealpha,1;zoom,1;y,-10;linear,0.8;y,10;sleep,0.5;l OKCommand=shadowlength,4;diffusealpha,1;zoom,1.25;linear,0.3;zoomx,1;zoomy,1;sleep,0.5;linear,0;diffusealpha,0 [Player] -GrayArrowsY=96 +GrayArrowsYStandard=96 +GrayArrowsYReverse=384 JudgmentXOffsetOneSideP1=0 JudgmentXOffsetOneSideP2=0 JudgmentXOffsetBothSides=0 @@ -1790,7 +1790,8 @@ ComboXOffsetOneSideP1=0 ComboXOffsetOneSideP2=0 ComboXOffsetBothSides=0 ComboY=270 -HoldJudgmentY=150 +HoldJudgmentYStandard=150 +HoldJudgmentYReverse=330 BrightGhostComboThreshold=100 StartDrawingAtPixels=-60 StopDrawingAtPixels=350 diff --git a/stepmania/src/NoteDisplay.cpp b/stepmania/src/NoteDisplay.cpp index 683b851a9d..1a24a2aefc 100644 --- a/stepmania/src/NoteDisplay.cpp +++ b/stepmania/src/NoteDisplay.cpp @@ -760,7 +760,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float { // bDrawGlowOnly is a little hacky. We need to draw the diffuse part and the glow part one pass at a time to minimize state changes - const bool bReverse = GAMESTATE->m_CurrentPlayerOptions[m_PlayerNumber].m_fReverseScroll == 1; + const bool bReverse = GAMESTATE->m_CurrentPlayerOptions[m_PlayerNumber].m_fReverseScroll > 0.5; const int iCol = hn.iTrack; const float fStartYOffset = ArrowGetYOffset( m_PlayerNumber, hn.fStartBeat ); diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index eb16885601..d7b4168d9c 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -229,8 +229,8 @@ void NoteField::DrawPrimitives() int iLastPixelToDraw = m_iLastPixelToDraw; float fDrawScale = 1; - fDrawScale *= 1 + 0.5f * fabsf( GAMESTATE->m_PlayerOptions[m_PlayerNumber].m_fPerspectiveTilt ); - fDrawScale *= 1 + fabsf( GAMESTATE->m_PlayerOptions[m_PlayerNumber].m_fEffects[PlayerOptions::EFFECT_MINI] ); + fDrawScale *= 1 + 0.5f * fabsf( GAMESTATE->m_CurrentPlayerOptions[m_PlayerNumber].m_fPerspectiveTilt ); + fDrawScale *= 1 + fabsf( GAMESTATE->m_CurrentPlayerOptions[m_PlayerNumber].m_fEffects[PlayerOptions::EFFECT_MINI] ); float fFirstDrawScale = g_NoteFieldMode[m_PlayerNumber].m_fFirstPixelToDrawScale; float fLastDrawScale = g_NoteFieldMode[m_PlayerNumber].m_fLastPixelToDrawScale; diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index bb105a0927..3c1758c8a4 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -33,13 +33,15 @@ #include "NoteFieldPositioning.h" #include "NoteDataUtil.h" -#define GRAY_ARROWS_Y THEME->GetMetricF("Player","GrayArrowsY") +CachedThemeMetricF GRAY_ARROWS_Y_STANDARD ("Player","GrayArrowsYStandard"); +CachedThemeMetricF GRAY_ARROWS_Y_REVERSE ("Player","GrayArrowsYReverse"); #define JUDGMENT_X( p, both_sides ) THEME->GetMetricF("Player",both_sides ? "JudgmentXOffsetBothSides" : ssprintf("JudgmentXOffsetOneSideP%d",p+1)) #define JUDGMENT_Y THEME->GetMetricF("Player","JudgmentY") #define COMBO_X( p, both_sides ) THEME->GetMetricF("Player",both_sides ? "ComboXOffsetBothSides" : ssprintf("ComboXOffsetOneSideP%d",p+1)) #define COMBO_Y THEME->GetMetricF("Player","ComboY") -#define HOLD_JUDGMENT_Y THEME->GetMetricF("Player","HoldJudgmentY") -CachedThemeMetricI BRIGHT_GHOST_COMBO_THRESHOLD("Player","BrightGhostComboThreshold"); +CachedThemeMetricF HOLD_JUDGMENT_Y_STANDARD ("Player","HoldJudgmentYStandard"); +CachedThemeMetricF HOLD_JUDGMENT_Y_REVERSE ("Player","HoldJudgmentYReverse"); +CachedThemeMetricI BRIGHT_GHOST_COMBO_THRESHOLD("Player","BrightGhostComboThreshold"); #define START_DRAWING_AT_PIXELS THEME->GetMetricI("Player","StartDrawingAtPixels") #define STOP_DRAWING_AT_PIXELS THEME->GetMetricI("Player","StopDrawingAtPixels") #define MAX_PRO_TIMING_ERROR THEME->GetMetricI("Player","MaxProTimingError") @@ -53,6 +55,10 @@ static const float StepSearchDistanceForwards = 1.0f; Player::Player() { + GRAY_ARROWS_Y_STANDARD.Refresh(); + GRAY_ARROWS_Y_REVERSE.Refresh(); + HOLD_JUDGMENT_Y_STANDARD.Refresh(); + HOLD_JUDGMENT_Y_REVERSE.Refresh(); BRIGHT_GHOST_COMBO_THRESHOLD.Refresh(); m_PlayerNumber = PLAYER_INVALID; @@ -156,22 +162,12 @@ void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, Combine int c; for( c=0; cm_iColsPerPlayer; c++ ) { - m_HoldJudgment[c].SetY( bReverse ? SCREEN_BOTTOM-HOLD_JUDGMENT_Y : SCREEN_TOP+HOLD_JUDGMENT_Y ); m_HoldJudgment[c].SetX( (float)pStyleDef->m_ColumnInfo[pn][c].fXOffset ); m_HoldJudgment[c].Command( g_NoteFieldMode[pn].m_HoldJudgmentCmd[c] ); } - m_ArrowBackdrop.SetY( bReverse ? SCREEN_BOTTOM-GRAY_ARROWS_Y : SCREEN_TOP+GRAY_ARROWS_Y ); - m_NoteField.SetY( bReverse ? SCREEN_BOTTOM-GRAY_ARROWS_Y : SCREEN_TOP+GRAY_ARROWS_Y ); - m_GrayArrowRow.SetY( bReverse ? SCREEN_BOTTOM-GRAY_ARROWS_Y : SCREEN_TOP+GRAY_ARROWS_Y ); - m_GhostArrowRow.SetY( bReverse ? SCREEN_BOTTOM-GRAY_ARROWS_Y : SCREEN_TOP+GRAY_ARROWS_Y ); - - if( GAMESTATE->m_PlayerOptions[pn].m_fEffects[PlayerOptions::EFFECT_MINI] == 1 ) - { - m_NoteField.SetZoom( 0.5f ); - m_GrayArrowRow.SetZoom( 0.5f ); - m_GhostArrowRow.SetZoom( 0.5f ); - } + // Need to set Y positions of all these elements in Update since + // they change depending on PlayerOptions. m_sLastSeenNoteSkin = GAMESTATE->m_PlayerOptions[m_PlayerNumber].m_sNoteSkin; @@ -187,6 +183,27 @@ void Player::Update( float fDeltaTime ) const float fSongBeat = GAMESTATE->m_fSongBeat; + + // + // Update Y positions + // + float fPercentReverse = GAMESTATE->m_CurrentPlayerOptions[m_PlayerNumber].m_fReverseScroll; + float fHoldJudgeYPos = SCALE( fPercentReverse, 0.f, 1.f, HOLD_JUDGMENT_Y_STANDARD, HOLD_JUDGMENT_Y_REVERSE ); + float fGrayYPos = SCALE( fPercentReverse, 0.f, 1.f, GRAY_ARROWS_Y_STANDARD, GRAY_ARROWS_Y_REVERSE ); + int c; + for( c=0; cGetCurrentStyleDef()->m_iColsPerPlayer; c++ ) + m_HoldJudgment[c].SetY( fGrayYPos ); + m_ArrowBackdrop.SetY( fGrayYPos ); + m_NoteField.SetY( fGrayYPos ); + m_GrayArrowRow.SetY( fGrayYPos ); + m_GhostArrowRow.SetY( fGrayYPos ); + + float fMiniPercent = GAMESTATE->m_CurrentPlayerOptions[m_PlayerNumber].m_fEffects[PlayerOptions::EFFECT_MINI]; + float fZoom = 1 - fMiniPercent*0.5; + m_NoteField.SetZoom( fZoom ); + m_GrayArrowRow.SetZoom( fZoom ); + m_GhostArrowRow.SetZoom( fZoom ); + // // Check for TapNote misses // diff --git a/stepmania/src/ProductInfo.inc b/stepmania/src/ProductInfo.inc index 078c04a7dd..c010a9eabf 100644 --- a/stepmania/src/ProductInfo.inc +++ b/stepmania/src/ProductInfo.inc @@ -2,7 +2,7 @@ ; Don't forget to also change ProductInfo.h! !define PRODUCT_NAME "StepMania" -!define PRODUCT_VER "3.9 alpha 2" +!define PRODUCT_VER "3.9 alpha 3" !define PRODUCT_NAME_VER "${PRODUCT_NAME} ${PRODUCT_VER}" ; String used for the install directory and registry locations