add twister transform
reorganize transform options
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 )
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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]) )
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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. */
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 };
|
||||||
|
|||||||
Reference in New Issue
Block a user