From 44100806396f13d600c8bfce4ad312cd4c2f02db Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 22 Oct 2005 21:54:08 +0000 Subject: [PATCH] Tweak mini: instead of zooming out the whole field, zoom out each individual arrow, and push the columns together a bit. It looks the same, except that it doesn't cause arrows to be closer together, like increasing the scroll speed to match. This keeps mini from causing many more notes to be drawn. In general, effects should try to avoid needing to increase fDrawScale. --- stepmania/src/ArrowEffects.cpp | 25 +++++++++---------------- stepmania/src/NoteField.cpp | 1 - stepmania/src/NoteFieldPositioning.cpp | 4 ++++ stepmania/src/Player.cpp | 11 ----------- 4 files changed, 13 insertions(+), 28 deletions(-) diff --git a/stepmania/src/ArrowEffects.cpp b/stepmania/src/ArrowEffects.cpp index a26a4c3e14..2e997821de 100644 --- a/stepmania/src/ArrowEffects.cpp +++ b/stepmania/src/ArrowEffects.cpp @@ -146,16 +146,8 @@ float ArrowEffects::GetYOffset( const PlayerState* pPlayerState, int iCol, float void ArrowGetReverseShiftAndScale( const PlayerState* pPlayerState, int iCol, float fYReverseOffsetPixels, float &fShiftOut, float &fScaleOut ) { - /* XXX: Hack: we need to scale the reverse shift by the zoom. */ - float fMiniPercent = pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI]; - float fZoom = 1 - fMiniPercent*0.5f; - - // don't divide by 0 - if( fabsf(fZoom) < 0.01 ) - fZoom = 0.01f; - float fPercentReverse = pPlayerState->m_CurrentPlayerOptions.GetReversePercentForColumn(iCol); - fShiftOut = SCALE( fPercentReverse, 0.f, 1.f, -fYReverseOffsetPixels/fZoom/2, fYReverseOffsetPixels/fZoom/2 ); + fShiftOut = SCALE( fPercentReverse, 0.f, 1.f, -fYReverseOffsetPixels/2, fYReverseOffsetPixels/2 ); float fPercentCentered = pPlayerState->m_CurrentPlayerOptions.m_fScrolls[PlayerOptions::SCROLL_CENTERED]; fShiftOut = SCALE( fPercentCentered, 0.f, 1.f, fShiftOut, 0.5f ); @@ -367,11 +359,7 @@ float ArrowEffects::GetRotation( const PlayerState* pPlayerState, float fNoteBea static float GetCenterLine( const PlayerState* pPlayerState ) { - /* Another mini hack: if EFFECT_MINI is on, then our center line is at eg. 320, - * not 160. */ - const float fMiniPercent = pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI]; - const float fZoom = 1 - fMiniPercent*0.5f; - return CENTER_LINE_Y / fZoom; + return CENTER_LINE_Y; } static float GetHiddenSudden( const PlayerState* pPlayerState ) @@ -524,11 +512,16 @@ bool ArrowEffects::NeedZBuffer( const PlayerState* pPlayerState ) float ArrowEffects::GetZoom( const PlayerState* pPlayerState ) { + float fZoom = 1.0f; // FIXME: Move the zoom values into Style if( GAMESTATE->m_pCurStyle->m_bNeedsZoomOutWith2Players && (GAMESTATE->GetNumSidesJoined()==2 || GAMESTATE->AnyPlayersAreCpu()) ) - return 0.6f; - return 1.0f; + fZoom *= 0.6f; + + float fMiniPercent = pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI]; + fZoom *= SCALE( fMiniPercent, 0, 1, 1, 0.5f ); + + return fZoom; } /* diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index a73c3c7b00..c1e48b6853 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -479,7 +479,6 @@ void NoteField::DrawPrimitives() float fDrawScale = 1; fDrawScale *= 1 + 0.5f * fabsf( current_po.m_fPerspectiveTilt ); - fDrawScale *= 1 + fabsf( current_po.m_fEffects[PlayerOptions::EFFECT_MINI] ); iFirstPixelToDraw = (int)(iFirstPixelToDraw * fDrawScale); iLastPixelToDraw = (int)(iLastPixelToDraw * fDrawScale); diff --git a/stepmania/src/NoteFieldPositioning.cpp b/stepmania/src/NoteFieldPositioning.cpp index e006779d53..fb74eef14e 100644 --- a/stepmania/src/NoteFieldPositioning.cpp +++ b/stepmania/src/NoteFieldPositioning.cpp @@ -18,6 +18,10 @@ void NoteFieldMode::BeginDrawTrack( const PlayerState* pPlayerState, int iTrack const Style *s = GAMESTATE->GetCurrentStyle(); // TODO: Remove indexing by PlayerNumber. float fPixelXOffsetFromCenter = s->m_ColumnInfo[pPlayerState->m_PlayerNumber][iTrack].fXOffset; + + const float* fEffects = pPlayerState->m_CurrentPlayerOptions.m_fEffects; + fPixelXOffsetFromCenter *= SCALE( fEffects[PlayerOptions::EFFECT_MINI], 0, 1, 1, 0.5f ); + DISPLAY->Translate( fPixelXOffsetFromCenter, 0, 0 ); } diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index 9233b75210..70f1b203ad 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -496,10 +496,7 @@ void Player::Update( float fDeltaTime ) float fMiniPercent = m_pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI]; - float fNoteFieldZoom = 1 - fMiniPercent*0.5f; float fJudgmentZoom = 1 - fMiniPercent*0.25f; - if( m_pNoteField ) - m_pNoteField->SetZoom( fNoteFieldZoom ); if( m_pJudgment ) m_pJudgment->SetZoom( m_pJudgment->GetZoom() * fJudgmentZoom ); if( m_sprJudgmentFrame.IsLoaded() ) @@ -809,13 +806,6 @@ void Player::DrawPrimitives() float fTiltDegrees = SCALE(fTilt,-1.f,+1.f,+30,-30) * (bReverse?-1:1); - - float fZoom = SCALE( m_pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI], 0.f, 1.f, 1.f, 0.5f ); - if( fTilt > 0 ) - fZoom *= SCALE( fTilt, 0.f, 1.f, 1.f, 0.9f ); - else - fZoom *= SCALE( fTilt, 0.f, -1.f, 1.f, 0.9f ); - float fYOffset; if( fTilt > 0 ) fYOffset = SCALE( fTilt, 0.f, 1.f, 0.f, -45.f ) * (bReverse?-1:1); @@ -823,7 +813,6 @@ void Player::DrawPrimitives() fYOffset = SCALE( fTilt, 0.f, -1.f, 0.f, -20.f ) * (bReverse?-1:1); m_pNoteField->SetY( fOriginalY + fYOffset ); - m_pNoteField->SetZoom( fZoom ); m_pNoteField->SetRotationX( fTiltDegrees ); m_pNoteField->Draw();