diff --git a/stepmania/src/ArrowEffects.cpp b/stepmania/src/ArrowEffects.cpp index a99d8feced..e3dac63047 100644 --- a/stepmania/src/ArrowEffects.cpp +++ b/stepmania/src/ArrowEffects.cpp @@ -199,10 +199,13 @@ const float fCenterLine = 160; // from fYPos == 0 const float fFadeDist = 100; // used by ArrowGetAlpha and ArrowGetGlow below -float ArrowGetPercentVisible( PlayerNumber pn, int iCol, float fYPos ) +static float ArrowGetPercentVisible( PlayerNumber pn, int iCol, float fYPos, float fYReverseOffsetPixels ) { if( GAMESTATE->m_CurrentPlayerOptions[pn].GetReversePercentForColumn(iCol) > 0.5f ) - fYPos *= -1; + { + fYPos -= SCALE( GAMESTATE->m_CurrentPlayerOptions[pn].GetReversePercentForColumn(iCol), 0.f, 1.f, 0.f, fYReverseOffsetPixels ); + fYPos /= SCALE( GAMESTATE->m_CurrentPlayerOptions[pn].GetReversePercentForColumn(iCol), 0.f, 1.f, 1.f, -1.f ); + } const float fDistFromCenterLine = fYPos - fCenterLine; @@ -254,10 +257,10 @@ float ArrowGetPercentVisible( PlayerNumber pn, int iCol, float fYPos ) return clamp( 1+fVisibleAdjust, 0, 1 ); } -float ArrowGetAlpha( PlayerNumber pn, int iCol, float fYPos, float fPercentFadeToFail ) +float ArrowGetAlpha( PlayerNumber pn, int iCol, float fYPos, float fPercentFadeToFail, float fYReverseOffsetPixels ) { // fYPos /= GAMESTATE->m_CurrentPlayerOptions[pn].m_fScrollSpeed; - float fPercentVisible = ArrowGetPercentVisible(pn,iCol,fYPos); + float fPercentVisible = ArrowGetPercentVisible(pn,iCol,fYPos,fYReverseOffsetPixels); if( fPercentFadeToFail != -1 ) fPercentVisible = 1 - fPercentFadeToFail; @@ -265,10 +268,10 @@ float ArrowGetAlpha( PlayerNumber pn, int iCol, float fYPos, float fPercentFadeT return (fPercentVisible>0.5f) ? 1.0f : 0.0f; } -float ArrowGetGlow( PlayerNumber pn, int iCol, float fYPos, float fPercentFadeToFail ) +float ArrowGetGlow( PlayerNumber pn, int iCol, float fYPos, float fPercentFadeToFail, float fYReverseOffsetPixels ) { // fYPos /= GAMESTATE->m_CurrentPlayerOptions[pn].m_fScrollSpeed; - float fPercentVisible = ArrowGetPercentVisible(pn,iCol,fYPos); + float fPercentVisible = ArrowGetPercentVisible(pn,iCol,fYPos,fYReverseOffsetPixels); if( fPercentFadeToFail != -1 ) fPercentVisible = 1 - fPercentFadeToFail; @@ -310,3 +313,4 @@ bool ArrowsNeedZBuffer( PlayerNumber pn ) return false; } + diff --git a/stepmania/src/ArrowEffects.h b/stepmania/src/ArrowEffects.h index d5edc88a93..8f1de72cc5 100644 --- a/stepmania/src/ArrowEffects.h +++ b/stepmania/src/ArrowEffects.h @@ -49,12 +49,12 @@ bool ArrowsNeedZBuffer( PlayerNumber pn ); // fAlpha is the transparency of the arrow. It depends on fYPos and the // AppearanceType. -float ArrowGetAlpha( PlayerNumber pn, int iCol, float fYPos, float fPercentFadeToFail ); +float ArrowGetAlpha( PlayerNumber pn, int iCol, float fYPos, float fPercentFadeToFail, float fYReverseOffsetPixels ); // fAlpha is the transparency of the arrow. It depends on fYPos and the // AppearanceType. -float ArrowGetGlow( PlayerNumber pn, int iCol, float fYPos, float fPercentFadeToFail ); +float ArrowGetGlow( PlayerNumber pn, int iCol, float fYPos, float fPercentFadeToFail, float fYReverseOffsetPixels ); // Depends on fYOffset. diff --git a/stepmania/src/NoteDisplay.cpp b/stepmania/src/NoteDisplay.cpp index d7531125cb..55ce5daea0 100644 --- a/stepmania/src/NoteDisplay.cpp +++ b/stepmania/src/NoteDisplay.cpp @@ -169,9 +169,10 @@ NoteDisplay::~NoteDisplay() delete cache; } -void NoteDisplay::Load( int iColNum, PlayerNumber pn ) +void NoteDisplay::Load( int iColNum, PlayerNumber pn, float fYReverseOffsetPixels ) { m_PlayerNumber = pn; + m_fYReverseOffsetPixels = fYReverseOffsetPixels; /* Normally, this is empty and we use the style table entry via ColToButtonName. */ CString Button = g_NoteFieldMode[m_PlayerNumber].NoteButtonNames[iColNum]; @@ -479,10 +480,10 @@ void NoteDisplay::DrawHoldTopCap( const HoldNote& hn, const bool bActive, float ASSERT( fTexCoordTop>=-0.0001 && fTexCoordBottom<=1.0001 ); /* allow for rounding error */ const float fTexCoordLeft = pRect->left; const float fTexCoordRight = pRect->right; - const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail ); - const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail ); - const float fGlowTop = ArrowGetGlow( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail ); - const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail ); + const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fGlowTop = ArrowGetGlow( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail, m_fYReverseOffsetPixels ); const RageColor colorDiffuseTop = RageColor(fColorScale,fColorScale,fColorScale,fAlphaTop); const RageColor colorDiffuseBottom = RageColor(fColorScale,fColorScale,fColorScale,fAlphaBottom); const RageColor colorGlowTop = RageColor(1,1,1,fGlowTop); @@ -562,10 +563,10 @@ void NoteDisplay::DrawHoldBody( const HoldNote& hn, const bool bActive, float fY ASSERT( fTexCoordTop<=2 && fTexCoordBottom<=2 ); const float fTexCoordLeft = pRect->left; const float fTexCoordRight = pRect->right; - const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail ); - const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail ); - const float fGlowTop = ArrowGetGlow( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail ); - const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail ); + const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fGlowTop = ArrowGetGlow( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail, m_fYReverseOffsetPixels ); const RageColor colorDiffuseTop = RageColor(fColorScale,fColorScale,fColorScale,fAlphaTop); const RageColor colorDiffuseBottom = RageColor(fColorScale,fColorScale,fColorScale,fAlphaBottom); const RageColor colorGlowTop = RageColor(1,1,1,fGlowTop); @@ -632,10 +633,10 @@ void NoteDisplay::DrawHoldBottomCap( const HoldNote& hn, const bool bActive, flo const float fTexCoordBottom = SCALE( fBottomDistFromTailTop, 0, fFrameHeight, pRect->top, pRect->bottom ); const float fTexCoordLeft = pRect->left; const float fTexCoordRight = pRect->right; - const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail ); - const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail ); - const float fGlowTop = ArrowGetGlow( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail ); - const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail ); + const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fAlphaBottom = ArrowGetAlpha( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fGlowTop = ArrowGetGlow( m_PlayerNumber, iCol, fYTop, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fGlowBottom = ArrowGetGlow( m_PlayerNumber, iCol, fYBottom, fPercentFadeToFail, m_fYReverseOffsetPixels ); const RageColor colorDiffuseTop = RageColor(fColorScale,fColorScale,fColorScale,fAlphaTop); const RageColor colorDiffuseBottom = RageColor(fColorScale,fColorScale,fColorScale,fAlphaBottom); const RageColor colorGlowTop = RageColor(1,1,1,fGlowTop); @@ -667,8 +668,8 @@ void NoteDisplay::DrawHoldTail( const HoldNote& hn, bool bActive, float fYTail, const float fY = fYTail; const float fX = ArrowGetXPos( m_PlayerNumber, iCol, fY ); const float fZ = ArrowGetZPos( m_PlayerNumber, iCol, fY ); - const float fAlpha = ArrowGetAlpha( m_PlayerNumber, iCol, fY, fPercentFadeToFail ); - const float fGlow = ArrowGetGlow( m_PlayerNumber, iCol, fY, fPercentFadeToFail ); + const float fAlpha = ArrowGetAlpha( m_PlayerNumber, iCol, fY, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fGlow = ArrowGetGlow( m_PlayerNumber, iCol, fY, fPercentFadeToFail, m_fYReverseOffsetPixels ); const RageColor colorDiffuse= RageColor(fColorScale,fColorScale,fColorScale,fAlpha); const RageColor colorGlow = RageColor(1,1,1,fGlow); @@ -717,8 +718,8 @@ void NoteDisplay::DrawHoldHead( const HoldNote& hn, bool bActive, float fYHead, const float fY = fYHead; const float fX = ArrowGetXPos( m_PlayerNumber, iCol, fY ); const float fZ = ArrowGetZPos( m_PlayerNumber, iCol, fY ); - const float fAlpha = ArrowGetAlpha( m_PlayerNumber, iCol, fY, fPercentFadeToFail ); - const float fGlow = ArrowGetGlow( m_PlayerNumber, iCol, fY, fPercentFadeToFail ); + const float fAlpha = ArrowGetAlpha( m_PlayerNumber, iCol, fY, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fGlow = ArrowGetGlow( m_PlayerNumber, iCol, fY, fPercentFadeToFail, m_fYReverseOffsetPixels ); const RageColor colorDiffuse= RageColor(fColorScale,fColorScale,fColorScale,fAlpha); const RageColor colorGlow = RageColor(1,1,1,fGlow); @@ -811,8 +812,8 @@ void NoteDisplay::DrawTap( int iCol, float fBeat, bool bOnSameRowAsHoldStart, bo const float fRotation = ArrowGetRotation( m_PlayerNumber, fBeat ); const float fXPos = ArrowGetXPos( m_PlayerNumber, iCol, fYPos ); const float fZPos = ArrowGetZPos( m_PlayerNumber, iCol, fYPos ); - const float fAlpha = ArrowGetAlpha( m_PlayerNumber, iCol, fYPos, fPercentFadeToFail ); - const float fGlow = ArrowGetGlow( m_PlayerNumber, iCol, fYPos, fPercentFadeToFail ); + const float fAlpha = ArrowGetAlpha( m_PlayerNumber, iCol, fYPos, fPercentFadeToFail, m_fYReverseOffsetPixels ); + const float fGlow = ArrowGetGlow( m_PlayerNumber, iCol, fYPos, fPercentFadeToFail, m_fYReverseOffsetPixels ); const float fColorScale = ArrowGetBrightness( m_PlayerNumber, fBeat ) * SCALE(fLife,0,1,0.2f,1); RageColor diffuse = RageColor(fColorScale,fColorScale,fColorScale,fAlpha); RageColor glow = RageColor(1,1,1,fGlow); diff --git a/stepmania/src/NoteDisplay.h b/stepmania/src/NoteDisplay.h index 14a6fb0c66..ddecf2b13d 100644 --- a/stepmania/src/NoteDisplay.h +++ b/stepmania/src/NoteDisplay.h @@ -27,7 +27,7 @@ public: NoteDisplay(); ~NoteDisplay(); - void Load( int iColNum, PlayerNumber pn ); + void Load( int iColNum, PlayerNumber pn, float fYReverseOffsetPixels ); void DrawTap( int iCol, float fBeat, bool bOnSameRowAsHoldStart, bool bIsAddition, bool bIsMine, float fPercentFadeToFail, float fLife, float fReverseOffsetPixels ); void DrawHold( const HoldNote& hn, bool bActive, float fLife, float fPercentFadeToFail, bool bDrawGlowOnly, float fReverseOffsetPixels ); @@ -68,6 +68,7 @@ protected: Sprite m_sprHoldBottomCapInactive[NOTE_COLOR_IMAGES]; Actor* m_pHoldTailActive[NOTE_COLOR_IMAGES]; Actor* m_pHoldTailInactive[NOTE_COLOR_IMAGES]; + float m_fYReverseOffsetPixels; }; #endif diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index 5f3da56cd9..43275f99c0 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -62,7 +62,7 @@ void NoteField::Load( NoteData* pNoteData, PlayerNumber pn, int iFirstPixelToDra // init note displays for( int c=0; cGetCurrentStyleDef()->m_iColsPerPlayer ); } @@ -71,7 +71,7 @@ void NoteField::ReloadNoteSkin() { // init note displays for( int c=0; c