add twister transform

reorganize transform options
This commit is contained in:
Chris Danford
2003-11-07 08:45:21 +00:00
parent 768b2e5846
commit 3ca893b0ca
11 changed files with 125 additions and 124 deletions
+23 -21
View File
@@ -2718,7 +2718,7 @@ Line2=list,Accel;title,Acceler::-ation
Line3=list,Effect Line3=list,Effect
Line4=list,Appearance;title,Appear::-ance Line4=list,Appearance;title,Appear::-ance
Line5=list,Turn Line5=list,Turn
Line6=list,Transform;title,Insert Line6=list,Insert;title,Insert
Line7=list,Scroll Line7=list,Scroll
Line8=list,NoteSkins Line8=list,NoteSkins
Line9=list,Holds Line9=list,Holds
@@ -2942,24 +2942,24 @@ TurnName,5=SHUFFLE
Turn,6=mod,supershuffle Turn,6=mod,supershuffle
TurnName,6=S.SHUFFLE TurnName,6=S.SHUFFLE
Transform=8 Insert=8
TransformDefault=mod,no transform InsertDefault=mod,no little,no wide,no big,no quick,no skippy,no echo,no stomp
Transform,1= Insert,1=
TransformName,1=OFF InsertName,1=OFF
Transform,2=mod,little Insert,2=mod,little
TransformName,2=LITTLE InsertName,2=LITTLE
Transform,3=mod,wide Insert,3=mod,wide
TransformName,3=WIDE InsertName,3=WIDE
Transform,4=mod,big Insert,4=mod,big
TransformName,4=BIG InsertName,4=BIG
Transform,5=mod,quick Insert,5=mod,quick
TransformName,5=QUICK InsertName,5=QUICK
Transform,6=mod,skippy Insert,6=mod,skippy
TransformName,6=SKIPPY InsertName,6=SKIPPY
Transform,7=mod,echo Insert,7=mod,echo
TransformName,7=ECHO InsertName,7=ECHO
Transform,8=mod,stomp Insert,8=mod,stomp
TransformName,8=STOMP InsertName,8=STOMP
Scroll=4 Scroll=4
ScrollDefault=mod,no reverse,no split,no alternate ScrollDefault=mod,no reverse,no split,no alternate
@@ -2972,14 +2972,16 @@ ScrollName,3=SPLIT
Scroll,4=mod,alternate Scroll,4=mod,alternate
ScrollName,4=ALTERNATE ScrollName,4=ALTERNATE
Holds=3 Holds=4
HoldsDefault=mod,no noholds,no planted HoldsDefault=mod,no noholds,no planted,no twister
Holds,1=mod,noholds Holds,1=mod,noholds
HoldsName,1=OFF HoldsName,1=OFF
Holds,2= Holds,2=
HoldsName,2=ON HoldsName,2=ON
Holds,3=mod,planted Holds,3=mod,planted
HoldsName,3=PLANTED HoldsName,3=PLANTED
Holds,4=mod,twister
HoldsName,4=TWISTER
Mines=3 Mines=3
MinesDefault=mod,no nomines,no mines MinesDefault=mod,no nomines,no mines
+2 -2
View File
@@ -183,8 +183,8 @@ bool CodeDetector::DetectAndAdjustMusicOptions( GameController controller )
case CODE_NEXT_APPEARANCE: GAMESTATE->m_PlayerOptions[pn].NextAppearance(); break; case CODE_NEXT_APPEARANCE: GAMESTATE->m_PlayerOptions[pn].NextAppearance(); break;
case CODE_NEXT_TURN: GAMESTATE->m_PlayerOptions[pn].NextTurn(); break; case CODE_NEXT_TURN: GAMESTATE->m_PlayerOptions[pn].NextTurn(); break;
case CODE_REVERSE: GAMESTATE->m_PlayerOptions[pn].NextScroll(); break; case CODE_REVERSE: GAMESTATE->m_PlayerOptions[pn].NextScroll(); break;
case CODE_HOLDS: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bHoldNotes, true, false ); break; case CODE_HOLDS: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bTransforms[PlayerOptions::TRANSFORM_NOHOLDS], true, false ); break;
case CODE_MINES: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bMines, true, false ); break; case CODE_MINES: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_bTransforms[PlayerOptions::TRANSFORM_NOMINES], true, false ); break;
case CODE_DARK: FLOAT_TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_fDark ); break; case CODE_DARK: FLOAT_TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_fDark ); break;
case CODE_CANCEL_ALL: GAMESTATE->m_PlayerOptions[pn].Init(); case CODE_CANCEL_ALL: GAMESTATE->m_PlayerOptions[pn].Init();
GAMESTATE->m_PlayerOptions[pn].FromString( PREFSMAN->m_sDefaultModifiers ); break; GAMESTATE->m_PlayerOptions[pn].FromString( PREFSMAN->m_sDefaultModifiers ); break;
+8 -2
View File
@@ -87,15 +87,21 @@ public:
{ {
int iNum = 0; int iNum = 0;
for( int t=0; t<m_iNumTracks; t++ ) for( int t=0; t<m_iNumTracks; t++ )
if( GetTapNote(t, index) == TAP_TAP ) {
TapNote tn = GetTapNote(t, index);
if( tn == TAP_TAP || tn == TAP_HOLD_HEAD )
iNum++; iNum++;
}
return iNum; return iNum;
} }
inline int GetFirstTrackWithTap( int index ) const inline int GetFirstTrackWithTap( int index ) const
{ {
for( int t=0; t<m_iNumTracks; t++ ) for( int t=0; t<m_iNumTracks; t++ )
if( GetTapNote(t, index) == TAP_TAP ) {
TapNote tn = GetTapNote(t, index);
if( tn == TAP_TAP || tn == TAP_HOLD_HEAD )
return t; return t;
}
return -1; return -1;
} }
inline bool IsThereATapAtRow( int index ) const inline bool IsThereATapAtRow( int index ) const
+42 -51
View File
@@ -260,33 +260,34 @@ float NoteDataUtil::GetChaosRadarValue( const NoteData &in, float fSongSeconds )
return min( fReturn, 1.0f ); return min( fReturn, 1.0f );
} }
void NoteDataUtil::RemoveHoldNotes(NoteData &in) void NoteDataUtil::RemoveHoldNotes(NoteData &in, float fStartBeat, float fEndBeat)
{ {
vector<int> tracks, rows;
// turn all the HoldNotes into TapNotes // turn all the HoldNotes into TapNotes
for( int i=0; i<in.GetNumHoldNotes(); i++ ) for( int i=in.GetNumHoldNotes()-1; i>=0; i++ ) // iterate backwards so we can delete
{ {
const HoldNote &hn = in.GetHoldNote(i); const HoldNote hn = in.GetHoldNote(i);
tracks.push_back(hn.iTrack); bool bHoldInRange =
rows.push_back(BeatToNoteRow(hn.fStartBeat)); (hn.fStartBeat <= fStartBeat && hn.fEndBeat >= fEndBeat) ||
(hn.fStartBeat >= fStartBeat && hn.fStartBeat <= fEndBeat) ||
(hn.fEndBeat >= fStartBeat && hn.fEndBeat <= fEndBeat);
if( !bHoldInRange )
continue; // skip
in.RemoveHoldNote( i );
in.SetTapNote(hn.iTrack, BeatToNoteRow(hn.fStartBeat), TAP_TAP);
} }
// Remove all HoldNotes
while(in.GetNumHoldNotes())
in.RemoveHoldNote(in.GetNumHoldNotes()-1);
for(unsigned j = 0; j < tracks.size(); ++j)
in.SetTapNote(tracks[j], rows[j], TAP_TAP);
} }
void NoteDataUtil::RemoveMines(NoteData &in) void NoteDataUtil::RemoveMines(NoteData &in, float fStartBeat, float fEndBeat )
{ {
int max_row = in.GetLastRow(); int iRowStart = BeatToNoteRow(fStartBeat);
int iRowEnd = BeatToNoteRow(fEndBeat);
for( int t=0; t<in.GetNumTracks(); t++ ) for( int t=0; t<in.GetNumTracks(); t++ )
for( int r=0; r<=max_row; r++ ) for( int r=iRowStart; r<=iRowEnd; r++ )
if( in.GetTapNote(t,r)==TAP_MINE ) if( in.GetTapNote(t,r)==TAP_MINE )
in.SetTapNote(t,r,TAP_EMPTY); in.SetTapNote(t,r,TAP_EMPTY);
} }
@@ -650,7 +651,7 @@ void NoteDataUtil::InsertIntelligentTaps( NoteData &in, float fWindowSizeBeats,
in.Convert4sToHoldNotes(); in.Convert4sToHoldNotes();
} }
void NoteDataUtil::Mines( NoteData &in, float fStartBeat, float fEndBeat ) void NoteDataUtil::AddMines( NoteData &in, float fStartBeat, float fEndBeat )
{ {
const int first_row = BeatToNoteRow( fStartBeat ); const int first_row = BeatToNoteRow( fStartBeat );
const int last_row = min( BeatToNoteRow(fEndBeat), in.GetLastRow() ); const int last_row = min( BeatToNoteRow(fEndBeat), in.GetLastRow() );
@@ -737,20 +738,6 @@ void NoteDataUtil::Echo( NoteData &in, float fStartBeat, float fEndBeat )
if( bTapInMiddle ) if( bTapInMiddle )
continue; continue;
// don't insert a new note if there's already a hold headwithin this interval
// TODO: Why is this necessary? Isn't there a TAP_TAP at the HoldNote head spot?
for( int i=0; i<in.GetNumHoldNotes(); i++ )
{
int iHoldHeadRow = BeatToNoteRow(in.GetHoldNote(i).fStartBeat);
if( iHoldHeadRow >= iRowWindowBegin+1 && iHoldHeadRow <= iRowWindowEnd-1 )
{
bTapInMiddle = true;
break;
}
}
if( bTapInMiddle )
continue;
if( iEchoTrack==-1 ) if( iEchoTrack==-1 )
continue; continue;
@@ -763,6 +750,14 @@ void NoteDataUtil::Echo( NoteData &in, float fStartBeat, float fEndBeat )
} }
void NoteDataUtil::Planted( NoteData &in, float fStartBeat, float fEndBeat ) void NoteDataUtil::Planted( NoteData &in, float fStartBeat, float fEndBeat )
{
ConvertTapsToHolds( in, 1, fStartBeat, fEndBeat );
}
void NoteDataUtil::Twister( NoteData &in, float fStartBeat, float fEndBeat )
{
ConvertTapsToHolds( in, 2, fStartBeat, fEndBeat );
}
void NoteDataUtil::ConvertTapsToHolds( NoteData &in, int iSimultaneousHolds, float fStartBeat, float fEndBeat )
{ {
// Convert all taps to freezes. // Convert all taps to freezes.
const int first_row = BeatToNoteRow( fStartBeat ); const int first_row = BeatToNoteRow( fStartBeat );
@@ -774,6 +769,7 @@ void NoteDataUtil::Planted( NoteData &in, float fStartBeat, float fEndBeat )
if( in.GetTapNote(t,r) == TAP_TAP ) if( in.GetTapNote(t,r) == TAP_TAP )
{ {
// search for row of next TAP_TAP // search for row of next TAP_TAP
int iTapsLeft = iSimultaneousHolds;
for( int r2=r+1; r2<=last_row; r2++ ) for( int r2=r+1; r2<=last_row; r2++ )
{ {
if( in.IsThereATapAtRow(r2) ) if( in.IsThereATapAtRow(r2) )
@@ -782,6 +778,8 @@ void NoteDataUtil::Planted( NoteData &in, float fStartBeat, float fEndBeat )
// don't convert the earlier one to a hold. // don't convert the earlier one to a hold.
if( in.GetFirstTrackWithTap(r2) == t ) if( in.GetFirstTrackWithTap(r2) == t )
goto dont_add_hold; goto dont_add_hold;
iTapsLeft--;
if( iTapsLeft == 0 )
break; // stop searching break; // stop searching
} }
} }
@@ -1114,11 +1112,6 @@ void NoteDataUtil::ConvertAdditionsToRegular( NoteData &in )
void NoteDataUtil::TransformNoteData( NoteData &nd, const PlayerOptions &po, StepsType st, float fStartBeat, float fEndBeat ) void NoteDataUtil::TransformNoteData( NoteData &nd, const PlayerOptions &po, StepsType st, float fStartBeat, float fEndBeat )
{ {
if( !po.m_bHoldNotes )
RemoveHoldNotes( nd );
if( !po.m_bMines )
RemoveMines( nd );
switch( po.m_Turn ) switch( po.m_Turn )
{ {
@@ -1131,20 +1124,18 @@ void NoteDataUtil::TransformNoteData( NoteData &nd, const PlayerOptions &po, Ste
default: ASSERT(0); default: ASSERT(0);
} }
switch( po.m_Transform ) if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOHOLDS] ) NoteDataUtil::RemoveHoldNotes(nd, fStartBeat, fEndBeat);
{ if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOMINES] ) NoteDataUtil::RemoveMines(nd, fStartBeat, fEndBeat);
case PlayerOptions::TRANSFORM_NONE: break; if( po.m_bTransforms[PlayerOptions::TRANSFORM_LITTLE] ) NoteDataUtil::Little(nd, fStartBeat, fEndBeat);
case PlayerOptions::TRANSFORM_LITTLE: NoteDataUtil::Little(nd, fStartBeat, fEndBeat); break; if( po.m_bTransforms[PlayerOptions::TRANSFORM_WIDE] ) NoteDataUtil::Wide(nd, fStartBeat, fEndBeat);
case PlayerOptions::TRANSFORM_WIDE: NoteDataUtil::Wide(nd, fStartBeat, fEndBeat); break; if( po.m_bTransforms[PlayerOptions::TRANSFORM_BIG] ) NoteDataUtil::Big(nd, fStartBeat, fEndBeat);
case PlayerOptions::TRANSFORM_BIG: NoteDataUtil::Big(nd, fStartBeat, fEndBeat); break; if( po.m_bTransforms[PlayerOptions::TRANSFORM_QUICK] ) NoteDataUtil::Quick(nd, fStartBeat, fEndBeat);
case PlayerOptions::TRANSFORM_QUICK: NoteDataUtil::Quick(nd, fStartBeat, fEndBeat); break; if( po.m_bTransforms[PlayerOptions::TRANSFORM_SKIPPY] ) NoteDataUtil::Skippy(nd, fStartBeat, fEndBeat);
case PlayerOptions::TRANSFORM_SKIPPY: NoteDataUtil::Skippy(nd, fStartBeat, fEndBeat); break; if( po.m_bTransforms[PlayerOptions::TRANSFORM_MINES] ) NoteDataUtil::AddMines(nd, fStartBeat, fEndBeat);
case PlayerOptions::TRANSFORM_MINES: NoteDataUtil::Mines(nd, fStartBeat, fEndBeat); break; if( po.m_bTransforms[PlayerOptions::TRANSFORM_ECHO] ) NoteDataUtil::Echo(nd, fStartBeat, fEndBeat);
case PlayerOptions::TRANSFORM_ECHO: NoteDataUtil::Echo(nd, fStartBeat, fEndBeat); break; if( po.m_bTransforms[PlayerOptions::TRANSFORM_PLANTED] ) NoteDataUtil::Planted(nd, fStartBeat, fEndBeat);
case PlayerOptions::TRANSFORM_PLANTED: NoteDataUtil::Planted(nd, fStartBeat, fEndBeat); break; if( po.m_bTransforms[PlayerOptions::TRANSFORM_STOMP] ) NoteDataUtil::Stomp(nd, fStartBeat, fEndBeat);
case PlayerOptions::TRANSFORM_STOMP: NoteDataUtil::Stomp(nd, fStartBeat, fEndBeat); break; if( po.m_bTransforms[PlayerOptions::TRANSFORM_TWISTER] ) NoteDataUtil::Twister(nd, fStartBeat, fEndBeat);
default: ASSERT(0);
}
} }
void NoteDataUtil::Scale( NoteData &nd, float fScale ) void NoteDataUtil::Scale( NoteData &nd, float fScale )
+5 -3
View File
@@ -39,8 +39,8 @@ namespace NoteDataUtil
// radar values - return between 0.0 and 1.2 // radar values - return between 0.0 and 1.2
float GetRadarValue( const NoteData &in, RadarCategory rv, float fSongSeconds ); float GetRadarValue( const NoteData &in, RadarCategory rv, float fSongSeconds );
void RemoveHoldNotes( NoteData &in ); void RemoveHoldNotes( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
void RemoveMines( NoteData &in ); void RemoveMines( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
enum TurnType { left, right, mirror, shuffle, super_shuffle, NUM_TURN_TYPES }; enum TurnType { left, right, mirror, shuffle, super_shuffle, NUM_TURN_TYPES };
void Turn( NoteData &in, StepsType st, TurnType tt ); void Turn( NoteData &in, StepsType st, TurnType tt );
void Little( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Little( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
@@ -49,10 +49,12 @@ namespace NoteDataUtil
void Quick( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Quick( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
void Skippy( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Skippy( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
void InsertIntelligentTaps( NoteData &in, float fWindowSizeBeats, float fInsertOffsetBeats, float fWindowStrideBeats, bool bSkippy, float fStartBeat = 0, float fEndBeat = 99999 ); void InsertIntelligentTaps( NoteData &in, float fWindowSizeBeats, float fInsertOffsetBeats, float fWindowStrideBeats, bool bSkippy, float fStartBeat = 0, float fEndBeat = 99999 );
void Mines( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void AddMines( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
void Echo( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Echo( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
void Planted( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Planted( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
void Stomp( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 ); void Stomp( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
void Twister( NoteData &in, float fStartBeat = 0, float fEndBeat = 99999 );
void ConvertTapsToHolds( NoteData &in, int iSimultaneousHolds, float fStartBeat = 0, float fEndBeat = 99999 );
void SuperShuffleTaps( NoteData &in ); void SuperShuffleTaps( NoteData &in );
// change all TAP_ADDITIONs to TAP_TAPs // change all TAP_ADDITIONs to TAP_TAPs
+2 -1
View File
@@ -49,7 +49,8 @@ void OptionIcon::Load( PlayerNumber pn, CString sText, bool bHeader )
"1X", "1X",
"HOLDS", "HOLDS",
"DEFAULT", "DEFAULT",
"OVERHEAD" }; "OVERHEAD"
};
for( unsigned i=0; i<ARRAYSIZE(sStopWords); i++ ) for( unsigned i=0; i<ARRAYSIZE(sStopWords); i++ )
if( 0==stricmp(sText,sStopWords[i]) ) if( 0==stricmp(sText,sStopWords[i]) )
+3 -1
View File
@@ -349,8 +349,10 @@ void PlayerMinus::Update( float fDeltaTime )
* they won't align with this->m_HoldNoteScores. */ * they won't align with this->m_HoldNoteScores. */
if( po.m_Turn != PlayerOptions::TURN_NONE ) if( po.m_Turn != PlayerOptions::TURN_NONE )
RageException::Throw("Can't use turns as battle attacks"); RageException::Throw("Can't use turns as battle attacks");
if( !po.m_bHoldNotes ) if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOHOLDS] )
RageException::Throw("Can't use NoHolds as a battle attack"); RageException::Throw("Can't use NoHolds as a battle attack");
if( po.m_bTransforms[PlayerOptions::TRANSFORM_NOMINES] )
RageException::Throw("Can't use NoMines as a battle attack");
float fStartBeat, fEndBeat; float fStartBeat, fEndBeat;
mod.GetAttackBeats( GAMESTATE->m_pCurSong, m_PlayerNumber, fStartBeat, fEndBeat ); mod.GetAttackBeats( GAMESTATE->m_pCurSong, m_PlayerNumber, fStartBeat, fEndBeat );
+29 -35
View File
@@ -36,8 +36,7 @@ void PlayerOptions::Init()
m_fSkew = 0; m_SpeedfSkew = 1.0f; m_fSkew = 0; m_SpeedfSkew = 1.0f;
m_fPassmark = 0; m_SpeedfPassmark = 1.0f; m_fPassmark = 0; m_SpeedfPassmark = 1.0f;
m_Turn = TURN_NONE; m_Turn = TURN_NONE;
m_Transform = TRANSFORM_NONE; ZERO( m_bTransforms );
m_bHoldNotes = true;
m_bTimingAssist = false; m_bTimingAssist = false;
m_bProTiming = false; m_bProTiming = false;
m_sPositioning = ""; // "null" m_sPositioning = ""; // "null"
@@ -145,23 +144,19 @@ CString PlayerOptions::GetString() const
default: ASSERT(0); // invalid default: ASSERT(0); // invalid
} }
switch( m_Transform ) if( m_bTransforms[TRANSFORM_NOHOLDS] ) sReturn += "NoHolds, ";
{ if( m_bTransforms[TRANSFORM_NOMINES] ) sReturn += "NoMines, ";
case TRANSFORM_NONE: break; if( m_bTransforms[TRANSFORM_LITTLE] ) sReturn += "Little, ";
case TRANSFORM_LITTLE: sReturn += "Little, "; break; if( m_bTransforms[TRANSFORM_WIDE] ) sReturn += "Wide, ";
case TRANSFORM_WIDE: sReturn += "Wide, "; break; if( m_bTransforms[TRANSFORM_BIG] ) sReturn += "Big, ";
case TRANSFORM_BIG: sReturn += "Big, "; break; if( m_bTransforms[TRANSFORM_QUICK] ) sReturn += "Quick, ";
case TRANSFORM_QUICK: sReturn += "Quick, "; break; if( m_bTransforms[TRANSFORM_SKIPPY] ) sReturn += "Skippy, ";
case TRANSFORM_SKIPPY: sReturn += "Skippy, "; break; if( m_bTransforms[TRANSFORM_MINES] ) sReturn += "Mines, ";
case TRANSFORM_MINES: sReturn += "Mines, "; break; if( m_bTransforms[TRANSFORM_ECHO] ) sReturn += "Echo, ";
case TRANSFORM_ECHO: sReturn += "Echo, "; break; if( m_bTransforms[TRANSFORM_PLANTED] ) sReturn += "Planted, ";
case TRANSFORM_PLANTED: sReturn += "Planted, "; break; if( m_bTransforms[TRANSFORM_STOMP] ) sReturn += "Stomp, ";
case TRANSFORM_STOMP: sReturn += "Stomp, "; break; if( m_bTransforms[TRANSFORM_TWISTER] ) sReturn += "Twister, ";
default: ASSERT(0); // invalid
}
if( !m_bHoldNotes ) sReturn += "NoHolds, ";
if( !m_bMines ) sReturn += "NoMines, ";
if( m_bTimingAssist ) sReturn += "TimingAssist, "; if( m_bTimingAssist ) sReturn += "TimingAssist, ";
if( m_bProTiming ) sReturn += "ProTiming, "; if( m_bProTiming ) sReturn += "ProTiming, ";
@@ -277,22 +272,21 @@ void PlayerOptions::FromString( CString sOptions )
else if( sBit == "right" ) m_Turn = TURN_RIGHT; else if( sBit == "right" ) m_Turn = TURN_RIGHT;
else if( sBit == "shuffle" ) m_Turn = TURN_SHUFFLE; else if( sBit == "shuffle" ) m_Turn = TURN_SHUFFLE;
else if( sBit == "supershuffle" )m_Turn = TURN_SUPER_SHUFFLE; else if( sBit == "supershuffle" )m_Turn = TURN_SUPER_SHUFFLE;
else if( sBit == "transform" && !on ) m_Transform = TRANSFORM_NONE; /* "no transform" */ else if( sBit == "little" ) m_bTransforms[TRANSFORM_LITTLE] = on;
else if( sBit == "little" ) m_Transform = TRANSFORM_LITTLE; else if( sBit == "wide" ) m_bTransforms[TRANSFORM_WIDE] = on;
else if( sBit == "wide" ) m_Transform = TRANSFORM_WIDE; else if( sBit == "big" ) m_bTransforms[TRANSFORM_BIG] = on;
else if( sBit == "big" ) m_Transform = TRANSFORM_BIG; else if( sBit == "quick" ) m_bTransforms[TRANSFORM_QUICK] = on;
else if( sBit == "quick" ) m_Transform = TRANSFORM_QUICK; else if( sBit == "skippy" ) m_bTransforms[TRANSFORM_SKIPPY] = on;
else if( sBit == "skippy" ) m_Transform = TRANSFORM_SKIPPY; else if( sBit == "mines" ) m_bTransforms[TRANSFORM_MINES] = on;
else if( sBit == "mines" ) m_Transform = TRANSFORM_MINES; else if( sBit == "echo" ) m_bTransforms[TRANSFORM_ECHO] = on;
else if( sBit == "echo" ) m_Transform = TRANSFORM_ECHO; else if( sBit == "planted" ) m_bTransforms[TRANSFORM_PLANTED] = on;
else if( sBit == "planted" ) m_Transform = TRANSFORM_PLANTED; else if( sBit == "stomp" ) m_bTransforms[TRANSFORM_STOMP] = on;
else if( sBit == "stomp" ) m_Transform = TRANSFORM_STOMP; else if( sBit == "twister" ) m_bTransforms[TRANSFORM_TWISTER] = on;
else if( sBit == "reverse" ) SET_FLOAT( fScrolls[SCROLL_REVERSE] ) else if( sBit == "reverse" ) SET_FLOAT( fScrolls[SCROLL_REVERSE] )
else if( sBit == "split" ) SET_FLOAT( fScrolls[SCROLL_SPLIT] ) else if( sBit == "split" ) SET_FLOAT( fScrolls[SCROLL_SPLIT] )
else if( sBit == "alternate" ) SET_FLOAT( fScrolls[SCROLL_ALTERNATE] ) else if( sBit == "alternate" ) SET_FLOAT( fScrolls[SCROLL_ALTERNATE] )
else if( sBit == "noholds" ) m_bHoldNotes = !on; else if( sBit == "noholds" || sBit == "nofreeze" ) m_bTransforms[TRANSFORM_NOHOLDS] = on;
else if( sBit == "nofreeze" ) m_bHoldNotes = !on; else if( sBit == "nomines" ) m_bTransforms[TRANSFORM_NOMINES] = on;
else if( sBit == "nomines" ) m_bMines = !on;
else if( sBit == "dark" ) SET_FLOAT( fDark ) else if( sBit == "dark" ) SET_FLOAT( fDark )
else if( sBit == "blind" ) SET_FLOAT( fBlind ) else if( sBit == "blind" ) SET_FLOAT( fBlind )
else if( sBit == "passmark" ) SET_FLOAT( fPassmark ) else if( sBit == "passmark" ) SET_FLOAT( fPassmark )
@@ -359,7 +353,8 @@ void PlayerOptions::NextTurn()
void PlayerOptions::NextTransform() void PlayerOptions::NextTransform()
{ {
m_Transform = (Transform) ((m_Transform+1)%NUM_TRANSFORMS); // It's dumb to use a code to change transforms because there are so many of them. -Chris
//m_Transforms = (Transform) ((m_Transform+1)%NUM_TRANSFORMS);
} }
void PlayerOptions::NextScroll() void PlayerOptions::NextScroll()
@@ -478,9 +473,6 @@ bool ComparePlayerOptions( const PlayerOptions &po1, const PlayerOptions &po2 )
COMPARE(m_fDark); COMPARE(m_fDark);
COMPARE(m_fBlind); COMPARE(m_fBlind);
COMPARE(m_Turn); COMPARE(m_Turn);
COMPARE(m_Transform);
COMPARE(m_bHoldNotes);
COMPARE(m_bMines);
COMPARE(m_bTimingAssist); COMPARE(m_bTimingAssist);
COMPARE(m_bProTiming); COMPARE(m_bProTiming);
COMPARE(m_fPerspectiveTilt); COMPARE(m_fPerspectiveTilt);
@@ -496,6 +488,8 @@ bool ComparePlayerOptions( const PlayerOptions &po1, const PlayerOptions &po2 )
COMPARE(m_fAppearances[i]); COMPARE(m_fAppearances[i]);
for( i = 0; i < PlayerOptions::NUM_SCROLLS; ++i ) for( i = 0; i < PlayerOptions::NUM_SCROLLS; ++i )
COMPARE(m_fScrolls[i]); COMPARE(m_fScrolls[i]);
for( i = 0; i < PlayerOptions::NUM_TRANSFORMS; ++i )
COMPARE(m_bTransforms[i]);
#undef COMPARE #undef COMPARE
return true; return true;
+4 -4
View File
@@ -58,7 +58,8 @@ struct PlayerOptions
NUM_TURNS NUM_TURNS
}; };
enum Transform { enum Transform {
TRANSFORM_NONE=0, TRANSFORM_NOHOLDS,
TRANSFORM_NOMINES,
TRANSFORM_LITTLE, TRANSFORM_LITTLE,
TRANSFORM_WIDE, TRANSFORM_WIDE,
TRANSFORM_BIG, TRANSFORM_BIG,
@@ -68,6 +69,7 @@ struct PlayerOptions
TRANSFORM_ECHO, TRANSFORM_ECHO,
TRANSFORM_PLANTED, TRANSFORM_PLANTED,
TRANSFORM_STOMP, TRANSFORM_STOMP,
TRANSFORM_TWISTER,
NUM_TRANSFORMS NUM_TRANSFORMS
}; };
enum Scroll { enum Scroll {
@@ -99,9 +101,7 @@ struct PlayerOptions
float m_fPassmark, m_SpeedfPassmark; float m_fPassmark, m_SpeedfPassmark;
Turn m_Turn; Turn m_Turn;
Transform m_Transform; bool m_bTransforms[NUM_TRANSFORMS];
bool m_bHoldNotes;
bool m_bMines;
bool m_bTimingAssist; bool m_bTimingAssist;
bool m_bProTiming; bool m_bProTiming;
CString m_sPositioning; /* The current positioning mode, or empty to use the normal positions. */ CString m_sPositioning; /* The current positioning mode, or empty to use the normal positions. */
+5 -2
View File
@@ -156,7 +156,7 @@ Menu g_AreaMenu
MenuRow( "Clear", true ), MenuRow( "Clear", true ),
MenuRow( "Quantize", true, 0, "4TH","8TH","12TH","16TH","24TH","32ND","48TH","64TH" ), MenuRow( "Quantize", true, 0, "4TH","8TH","12TH","16TH","24TH","32ND","48TH","64TH" ),
MenuRow( "Turn", true, 0, "Left","Right","Mirror","Shuffle","Super Shuffle" ), MenuRow( "Turn", true, 0, "Left","Right","Mirror","Shuffle","Super Shuffle" ),
MenuRow( "Transform", true, 0, "Little","Wide","Big","Quick","Skippy","Mines","Echo","Planted","Stomp" ), MenuRow( "Transform", true, 0, "NoHolds","NoMines","Little","Wide","Big","Quick","Skippy","Mines","Echo","Planted","Stomp","Twister" ),
MenuRow( "Alter", true, 0, "Backwards","Swap Sides","Copy Left To Right","Copy Right To Left","Clear Left","Clear Right","Collapse To One","Shift Left","Shift Right" ), MenuRow( "Alter", true, 0, "Backwards","Swap Sides","Copy Left To Right","Copy Right To Left","Clear Left","Clear Right","Collapse To One","Shift Left","Shift Right" ),
MenuRow( "Tempo", true, 0, "Compress 2x","Compress 3->2","Compress 4->3","Expand 3->4","Expand 2->3","Expand 2x" ), MenuRow( "Tempo", true, 0, "Compress 2x","Compress 3->2","Compress 4->3","Expand 3->4","Expand 2->3","Expand 2x" ),
MenuRow( "Play selection", true ), MenuRow( "Play selection", true ),
@@ -1533,15 +1533,18 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
TransformType tt = (TransformType)iAnswers[c]; TransformType tt = (TransformType)iAnswers[c];
switch( tt ) switch( tt )
{ {
case noholds: NoteDataUtil::RemoveHoldNotes( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case nomines: NoteDataUtil::RemoveMines( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case little: NoteDataUtil::Little( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case little: NoteDataUtil::Little( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case wide: NoteDataUtil::Wide( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case wide: NoteDataUtil::Wide( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case big: NoteDataUtil::Big( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case big: NoteDataUtil::Big( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case quick: NoteDataUtil::Quick( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case quick: NoteDataUtil::Quick( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case skippy: NoteDataUtil::Skippy( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case skippy: NoteDataUtil::Skippy( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case mines: NoteDataUtil::Mines( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case mines: NoteDataUtil::AddMines( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case echo: NoteDataUtil::Echo( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case echo: NoteDataUtil::Echo( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case planted: NoteDataUtil::Planted( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case planted: NoteDataUtil::Planted( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case stomp: NoteDataUtil::Stomp( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break; case stomp: NoteDataUtil::Stomp( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
case twister: NoteDataUtil::Twister( m_NoteFieldEdit, fBeginBeat, fEndBeat ); break;
default: ASSERT(0); default: ASSERT(0);
} }
+1 -1
View File
@@ -137,7 +137,7 @@ public:
}; };
void HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers ); void HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers );
enum TurnType { left, right, mirror, shuffle, super_shuffle, NUM_TURN_TYPES }; enum TurnType { left, right, mirror, shuffle, super_shuffle, NUM_TURN_TYPES };
enum TransformType { little, wide, big, quick, skippy, mines, echo, planted, stomp, NUM_TRANSFORM_TYPES }; enum TransformType { noholds, nomines, little, wide, big, quick, skippy, mines, echo, planted, stomp, twister, NUM_TRANSFORM_TYPES };
enum AlterType { backwards, swap_sides, copy_left_to_right, copy_right_to_left, clear_left, clear_right, collapse_to_one, shift_left, shift_right, NUM_ALTER_TYPES }; enum AlterType { backwards, swap_sides, copy_left_to_right, copy_right_to_left, clear_left, clear_right, collapse_to_one, shift_left, shift_right, NUM_ALTER_TYPES };
// MD 11/02/03 - added additional tempo adjusts which make "sense" // MD 11/02/03 - added additional tempo adjusts which make "sense"
enum TempoType { compress_2x, compress_3_2, compress_4_3, expand_4_3, expand_3_2, expand_2x, NUM_TEMPO_TYPES }; enum TempoType { compress_2x, compress_3_2, compress_4_3, expand_4_3, expand_3_2, expand_2x, NUM_TEMPO_TYPES };