From 1f8a45cbee775d7c9197e3d50b8cc72cd4290b78 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 10 Aug 2003 10:12:50 +0000 Subject: [PATCH] Add mines transform --- stepmania/NoteSkins/dance/default/metrics.ini | 2 + stepmania/src/NoteDataUtil.cpp | 14 +++++++ stepmania/src/NoteDataUtil.h | 1 + stepmania/src/NoteDisplay.cpp | 37 ++++++++++++++----- stepmania/src/NoteDisplay.h | 6 ++- stepmania/src/NoteField.cpp | 3 +- stepmania/src/NoteTypes.h | 5 ++- stepmania/src/Player.cpp | 1 + stepmania/src/PlayerOptions.cpp | 2 + stepmania/src/PlayerOptions.h | 1 + stepmania/src/ScreenPlayerOptions.cpp | 2 +- 11 files changed, 59 insertions(+), 15 deletions(-) diff --git a/stepmania/NoteSkins/dance/default/metrics.ini b/stepmania/NoteSkins/dance/default/metrics.ini index b991d07991..491199dd3c 100644 --- a/stepmania/NoteSkins/dance/default/metrics.ini +++ b/stepmania/NoteSkins/dance/default/metrics.ini @@ -2,6 +2,7 @@ DrawHoldHeadForTapsOnSameRow=1 TapNoteAnimationLengthInBeats=4 TapAdditionAnimationLengthInBeats=4 +TapMineAnimationLengthInBeats=1 HoldHeadAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway. HoldTopCapAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway. HoldBottomCapAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway. @@ -9,6 +10,7 @@ HoldBodyAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway. HoldTailAnimationLengthInBeats=4 // doesn't matter. Only 1 frame anyway. TapNoteAnimationIsVivid=1 TapAdditionAnimationIsVivid=1 +TapMineAnimationIsVivid=0 HoldHeadAnimationIsVivid=0 HoldTopCapAnimationIsVivid=0 HoldBodyAnimationIsVivid=0 diff --git a/stepmania/src/NoteDataUtil.cpp b/stepmania/src/NoteDataUtil.cpp index 69c072d0d3..cbaca32932 100644 --- a/stepmania/src/NoteDataUtil.cpp +++ b/stepmania/src/NoteDataUtil.cpp @@ -876,3 +876,17 @@ void NoteDataUtil::ConvertAdditionsToRegular( NoteData &in ) if( in.GetTapNote(t,r) == TAP_ADDITION ) in.SetTapNote(t,r,TAP_TAP); } + +void NoteDataUtil::Mines( NoteData &in ) +{ + int iTapCount = 0; + + for( int r=0; r<=in.GetLastRow(); r++ ) + for( int t=0; tGetMetricB(pn,name,"DrawHoldHeadForTapsOnSameRow") #define TAP_NOTE_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"TapNoteAnimationLengthInBeats") #define TAP_ADDITION_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"TapAdditionAnimationLengthInBeats") +#define TAP_MINE_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"TapMineAnimationLengthInBeats") #define HOLD_HEAD_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldHeadAnimationLengthInBeats") #define HOLD_TOPCAP_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldTopCapAnimationLengthInBeats") #define HOLD_BODY_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldBodyAnimationLengthInBeats") #define HOLD_BOTTOMCAP_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldBottomCapAnimationLengthInBeats") #define HOLD_TAIL_ANIMATION_LENGTH_IN_BEATS NOTESKIN->GetMetricF(pn,name,"HoldTailAnimationLengthInBeats") #define TAP_NOTE_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"TapNoteAnimationIsVivid") -#define TAP_ADDITION_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"TapNoteAnimationIsVivid") +#define TAP_ADDITION_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"TapAdditionAnimationIsVivid") +#define TAP_MINE_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"TapMineAnimationIsVivid") #define HOLD_HEAD_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldHeadAnimationIsVivid") #define HOLD_TOPCAP_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldTopCapAnimationIsVivid") #define HOLD_BODY_ANIMATION_IS_VIVID NOTESKIN->GetMetricB(pn,name,"HoldBodyAnimationIsVivid") @@ -76,6 +78,7 @@ struct NoteMetricCache_t { bool m_bDrawHoldHeadForTapsOnSameRow; float m_fTapNoteAnimationLengthInBeats; float m_fTapAdditionAnimationLengthInBeats; + float m_fTapMineAnimationLengthInBeats; float m_fHoldHeadAnimationLengthInBeats; float m_fHoldTopCapAnimationLengthInBeats; float m_fHoldBodyAnimationLengthInBeats; @@ -83,6 +86,7 @@ struct NoteMetricCache_t { float m_fHoldTailAnimationLengthInBeats; bool m_bTapNoteAnimationIsVivid; bool m_bTapAdditionAnimationIsVivid; + bool m_bTapMineAnimationIsVivid; bool m_bHoldHeadAnimationIsVivid; bool m_bHoldTopCapAnimationIsVivid; bool m_bHoldBodyAnimationIsVivid; @@ -109,6 +113,7 @@ void NoteMetricCache_t::Load(PlayerNumber pn, const CString &name) m_bDrawHoldHeadForTapsOnSameRow = DRAW_HOLD_HEAD_FOR_TAPS_ON_SAME_ROW; m_fTapNoteAnimationLengthInBeats = TAP_NOTE_ANIMATION_LENGTH_IN_BEATS; m_fTapAdditionAnimationLengthInBeats = TAP_ADDITION_ANIMATION_LENGTH_IN_BEATS; + m_fTapMineAnimationLengthInBeats = TAP_MINE_ANIMATION_LENGTH_IN_BEATS; m_fHoldHeadAnimationLengthInBeats = HOLD_HEAD_ANIMATION_LENGTH_IN_BEATS; m_fHoldTopCapAnimationLengthInBeats = HOLD_TOPCAP_ANIMATION_LENGTH_IN_BEATS; m_fHoldBodyAnimationLengthInBeats = HOLD_BODY_ANIMATION_LENGTH_IN_BEATS; @@ -116,6 +121,7 @@ void NoteMetricCache_t::Load(PlayerNumber pn, const CString &name) m_fHoldTailAnimationLengthInBeats = HOLD_TAIL_ANIMATION_LENGTH_IN_BEATS; m_bTapNoteAnimationIsVivid = TAP_NOTE_ANIMATION_IS_VIVID; m_bTapAdditionAnimationIsVivid = TAP_ADDITION_ANIMATION_IS_VIVID; + m_bTapMineAnimationIsVivid = TAP_MINE_ANIMATION_IS_VIVID; m_bHoldHeadAnimationIsVivid = HOLD_HEAD_ANIMATION_IS_VIVID; m_bHoldTopCapAnimationIsVivid = HOLD_TOPCAP_ANIMATION_IS_VIVID; m_bHoldBodyAnimationIsVivid = HOLD_BODY_ANIMATION_IS_VIVID; @@ -144,6 +150,7 @@ NoteDisplay::NoteDisplay() m_pHoldHeadInactive[i] = NULL; } m_pTapAddition = NULL; + m_pTapMine = NULL; cache = new NoteMetricCache_t; } @@ -157,6 +164,7 @@ NoteDisplay::~NoteDisplay() delete m_pHoldHeadInactive[i]; } delete m_pTapAddition; + delete m_pTapMine; delete cache; } @@ -190,6 +198,8 @@ void NoteDisplay::Load( int iColNum, PlayerNumber pn ) m_pTapAddition = MakeModelOrSprite( NOTESKIN->GetPathTo(pn, Button, "tap addition") ); + m_pTapMine = MakeModelOrSprite( NOTESKIN->GetPathTo(pn, Button, "tap mine") ); + if( cache->m_bHoldHeadAnimationIsNoteColor ) { for( int i=0; im_bTapNoteAnimationIsNoteColor ) - nt = BeatToNoteType( fNoteBeat ); - if( nt == NOTE_TYPE_INVALID ) - nt = NOTE_TYPE_32ND; - Actor *pActorOut = m_pTapNote[nt]; - SetActiveFrame( fNoteBeat, *m_pTapAddition, @@ -319,6 +322,18 @@ Actor * NoteDisplay::GetTapAdditionActor( float fNoteBeat ) return m_pTapAddition; } +Actor * NoteDisplay::GetTapMineActor( float fNoteBeat ) +{ + SetActiveFrame( + fNoteBeat, + *m_pTapMine, + cache->m_fTapMineAnimationLengthInBeats, + cache->m_bTapMineAnimationIsVivid, + false ); + + return m_pTapMine; +} + Sprite * NoteDisplay::GetHoldTopCapSprite( float fNoteBeat, bool bActive ) { NoteType nt = NoteType(0); @@ -790,7 +805,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float DrawHold( hn, bActive, fLife, fPercentFadeToFail, true ); } -void NoteDisplay::DrawTap( const int iCol, const float fBeat, const bool bOnSameRowAsHoldStart, const bool bIsAddition, const float fPercentFadeToFail, const float fLife ) +void NoteDisplay::DrawTap( int iCol, float fBeat, bool bOnSameRowAsHoldStart, bool bIsAddition, bool bIsMine, float fPercentFadeToFail, float fLife ) { const float fYOffset = ArrowGetYOffset( m_PlayerNumber, fBeat ); const float fYPos = ArrowGetYPos( m_PlayerNumber, fYOffset ); @@ -804,7 +819,9 @@ void NoteDisplay::DrawTap( const int iCol, const float fBeat, const bool bOnSame RageColor glow = RageColor(1,1,1,fGlow); Actor* pActor = NULL; - if( bIsAddition ) + if( bIsMine ) + pActor = GetTapMineActor( fBeat ); + else if( bIsAddition ) pActor = GetTapAdditionActor( fBeat ); else if( bOnSameRowAsHoldStart && cache->m_bDrawHoldHeadForTapsOnSameRow ) pActor = GetHoldHeadActor( fBeat, false ); diff --git a/stepmania/src/NoteDisplay.h b/stepmania/src/NoteDisplay.h index 070a4564e7..adffcda469 100644 --- a/stepmania/src/NoteDisplay.h +++ b/stepmania/src/NoteDisplay.h @@ -29,13 +29,14 @@ public: void Load( int iColNum, PlayerNumber pn ); - void DrawTap( const int iCol, const float fBeat, const bool bOnSameRowAsHoldStart, const bool bIsAddition, const float fPercentFadeToFail, const float fLife = 1 ); - void DrawHold( const HoldNote& hn, const bool bActive, const float fLife, const float fPercentFadeToFail, bool bDrawGlowOnly = false ); + void DrawTap( int iCol, float fBeat, bool bOnSameRowAsHoldStart, bool bIsAddition, bool bIsMine, float fPercentFadeToFail, float fLife = 1 ); + void DrawHold( const HoldNote& hn, bool bActive, float fLife, float fPercentFadeToFail, bool bDrawGlowOnly = false ); protected: void SetActiveFrame( float fNoteBeat, Actor &actorToSet, float fAnimationLengthInBeats, bool bVivid, bool bNoteColor ); Actor *GetTapNoteActor( float fNoteBeat ); Actor *GetTapAdditionActor( float fNoteBeat ); + Actor *GetTapMineActor( float fNoteBeat ); Actor *GetHoldHeadActor( float fNoteBeat, bool bActive ); Actor* GetHoldTailActor( float fNoteBeat, bool bActive ); Sprite *GetHoldTopCapSprite( float fNoteBeat, bool bActive ); @@ -56,6 +57,7 @@ protected: Actor* m_pTapNote[NOTE_COLOR_IMAGES]; Actor* m_pTapAddition; + Actor* m_pTapMine; Actor* m_pHoldHeadActive[NOTE_COLOR_IMAGES]; Actor* m_pHoldHeadInactive[NOTE_COLOR_IMAGES]; Sprite m_sprHoldTopCapActive[NOTE_COLOR_IMAGES]; diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index 71a91d5b43..eb16885601 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -438,8 +438,9 @@ void NoteField::DrawPrimitives() } bool bIsAddition = (tn == TAP_ADDITION); + bool bIsMine = (tn == TAP_MINE); - m_NoteDisplay[c].DrawTap( c, NoteRowToBeat(i), bHoldNoteBeginsOnThisBeat, bIsAddition, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail ); + m_NoteDisplay[c].DrawTap( c, NoteRowToBeat(i), bHoldNoteBeginsOnThisBeat, bIsAddition, bIsMine, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail ); } g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(c); diff --git a/stepmania/src/NoteTypes.h b/stepmania/src/NoteTypes.h index d4dcb8741d..0af3d49ed4 100644 --- a/stepmania/src/NoteTypes.h +++ b/stepmania/src/NoteTypes.h @@ -31,8 +31,11 @@ static const TapNote TAP_HOLD_TAIL = '3'; /* In 4s mode, holds and TAP_HOLD_HEAD are deleted and TAP_HOLD is added: */ static const TapNote TAP_HOLD = '4'; -static const TapNote TAP_ADDITION = '5'; // additional note added by a transform +// additional note added by a transform +static const TapNote TAP_ADDITION = '5'; +// mine note - don't step! +static const TapNote TAP_MINE = '6'; enum { diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index dcc51dd0bf..518934cda5 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -146,6 +146,7 @@ void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, Combine case PlayerOptions::TRANSFORM_BIG: NoteDataUtil::Big(*this); break; case PlayerOptions::TRANSFORM_QUICK: NoteDataUtil::Quick(*this); break; case PlayerOptions::TRANSFORM_SKIPPY: NoteDataUtil::Skippy(*this); break; + case PlayerOptions::TRANSFORM_MINES: NoteDataUtil::Mines(*this); break; default: ASSERT(0); } diff --git a/stepmania/src/PlayerOptions.cpp b/stepmania/src/PlayerOptions.cpp index c4e3e02955..8de56f267f 100644 --- a/stepmania/src/PlayerOptions.cpp +++ b/stepmania/src/PlayerOptions.cpp @@ -125,6 +125,7 @@ CString PlayerOptions::GetString() case TRANSFORM_BIG: sReturn += "Big, "; break; case TRANSFORM_QUICK: sReturn += "Quick, "; break; case TRANSFORM_SKIPPY: sReturn += "Skippy, "; break; + case TRANSFORM_MINES: sReturn += "Mines, "; break; default: ASSERT(0); // invalid } @@ -229,6 +230,7 @@ void PlayerOptions::FromString( CString sOptions ) else if( sBit == "big" ) m_Transform = TRANSFORM_BIG; else if( sBit == "quick" ) m_Transform = TRANSFORM_QUICK; else if( sBit == "skippy" ) m_Transform = TRANSFORM_SKIPPY; + else if( sBit == "mines" ) m_Transform = TRANSFORM_MINES; else if( sBit == "reverse" ) m_fReverseScroll = 1; else if( sBit == "noholds" ) m_bHoldNotes = false; else if( sBit == "nofreeze" ) m_bHoldNotes = false; diff --git a/stepmania/src/PlayerOptions.h b/stepmania/src/PlayerOptions.h index 2a2874781f..5e72381c56 100644 --- a/stepmania/src/PlayerOptions.h +++ b/stepmania/src/PlayerOptions.h @@ -63,6 +63,7 @@ struct PlayerOptions TRANSFORM_BIG, TRANSFORM_QUICK, TRANSFORM_SKIPPY, + TRANSFORM_MINES, NUM_TRANSFORMS }; diff --git a/stepmania/src/ScreenPlayerOptions.cpp b/stepmania/src/ScreenPlayerOptions.cpp index cde224c4fe..5f7396fde6 100644 --- a/stepmania/src/ScreenPlayerOptions.cpp +++ b/stepmania/src/ScreenPlayerOptions.cpp @@ -50,7 +50,7 @@ OptionRow g_PlayerOptionsLines[NUM_PLAYER_OPTIONS_LINES] = { OptionRow( "Effect", "OFF","DRUNK","DIZZY","MINI","FLIP","TORNADO" ), OptionRow( "Appear\n-ance", "VISIBLE","HIDDEN","SUDDEN","STEALTH","BLINK", "R.VANISH" ), OptionRow( "Turn", "OFF","MIRROR","LEFT","RIGHT","SHUFFLE","S.SHUFFLE" ), - OptionRow( "Trans\n-form", "OFF","LITTLE","WIDE","BIG","QUICK","SKIPPY" ), + OptionRow( "Trans\n-form", "OFF","LITTLE","WIDE","BIG","QUICK","SKIPPY","MINES" ), OptionRow( "Scroll", "STANDARD","REVERSE" ), OptionRow( "Note\nSkin", "" ), OptionRow( "Holds", "OFF","ON" ),