From ebddb801fdba023bbf978e79322ee65382e67d2c Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 14 Mar 2004 20:29:42 +0000 Subject: [PATCH] make double + tornado easier --- stepmania/src/ArrowEffects.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/stepmania/src/ArrowEffects.cpp b/stepmania/src/ArrowEffects.cpp index 5f39ec2f56..5d3b176909 100644 --- a/stepmania/src/ArrowEffects.cpp +++ b/stepmania/src/ArrowEffects.cpp @@ -167,8 +167,25 @@ float ArrowGetXPos( PlayerNumber pn, int iColNum, float fYOffset ) if( fEffects[PlayerOptions::EFFECT_TORNADO] > 0 ) { - float fMinX, fMaxX; - GAMESTATE->GetCurrentStyleDef()->GetMinAndMaxColX( pn, fMinX, fMaxX ); + const StyleDef* pStyleDef = GAMESTATE->GetCurrentStyleDef(); + + // TRICKY: Tornado is very unplayable in doubles, so use a smaller + // tornado width if there are many columns + bool bWideField = pStyleDef->m_iColsPerPlayer > 4; + int iTornadoWidth = bWideField ? 2 : 3; + + int iStartCol = iColNum - iTornadoWidth; + int iEndCol = iColNum + iTornadoWidth; + CLAMP( iStartCol, 0, pStyleDef->m_iColsPerPlayer-1 ); + CLAMP( iEndCol, 0, pStyleDef->m_iColsPerPlayer-1 ); + + float fMinX = +100000; + float fMaxX = -100000; + for( int i=iStartCol; i<=iEndCol; i++ ) + { + fMinX = min( fMinX, pStyleDef->m_ColumnInfo[pn][i].fXOffset ); + fMaxX = max( fMaxX, pStyleDef->m_ColumnInfo[pn][i].fXOffset ); + } const float fRealPixelOffset = GAMESTATE->GetCurrentStyleDef()->m_ColumnInfo[pn][iColNum].fXOffset; const float fPositionBetween = SCALE( fRealPixelOffset, fMinX, fMaxX, -1, 1 );