From 7bd15144cbb80089d715f9f770e883cd028c8588 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 10 Aug 2003 21:27:54 +0000 Subject: [PATCH] add explosion graphic and sound if step on mine --- stepmania/NoteSkins/dance/default/metrics.ini | 28 +++++++ stepmania/Themes/default/metrics.ini | 20 ----- stepmania/src/GameConstantsAndTypes.cpp | 16 ++++ stepmania/src/GameConstantsAndTypes.h | 1 + stepmania/src/GhostArrow.cpp | 65 ++++----------- stepmania/src/GhostArrow.h | 6 +- stepmania/src/GhostArrowBright.cpp | 80 ------------------- stepmania/src/GhostArrowBright.h | 30 ------- stepmania/src/GhostArrowRow.cpp | 66 ++++++++++----- stepmania/src/GhostArrowRow.h | 9 ++- stepmania/src/Player.cpp | 29 ++++++- stepmania/src/Player.h | 7 +- stepmania/src/StepMania.dsp | 27 +------ stepmania/src/StepMania.vcproj | 6 -- 14 files changed, 146 insertions(+), 244 deletions(-) delete mode 100644 stepmania/src/GhostArrowBright.cpp delete mode 100644 stepmania/src/GhostArrowBright.h diff --git a/stepmania/NoteSkins/dance/default/metrics.ini b/stepmania/NoteSkins/dance/default/metrics.ini index 491199dd3c..8013f57fd9 100644 --- a/stepmania/NoteSkins/dance/default/metrics.ini +++ b/stepmania/NoteSkins/dance/default/metrics.ini @@ -29,3 +29,31 @@ UseLighting=0 ReverseDrawOrder=1101 HoldHeadIsAboveWavyParts=1 HoldTailIsAboveWavyParts=1 + +[GhostArrowDim] +NoneCommand= +MissCommand= +BooCommand=diffuse,0.8,0.0,0.6,1;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +GoodCommand=diffuse,0.3,0.8,1.0,1;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +GreatCommand=diffuse,0.0,1.0,0.4,1;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +PerfectCommand=diffuse,1.0,1.0,0.3,1;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +MarvelousCommand=diffuse,1.0,1.0,1.0,1;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 + +[GhostArrowBright] +NoneCommand= +MissCommand= +BooCommand=diffuse,0.8,0.0,0.6,1;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +GoodCommand=diffuse,0.3,0.8,1.0,1;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +GreatCommand=diffuse,0.0,1.0,0.4,1;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +PerfectCommand=diffuse,1.0,1.0,0.3,1;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +MarvelousCommand=diffuse,1.0,1.0,1.0,1;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 + +[GhostArrowMine] +NoneCommand= +MissCommand=blend,add;diffuse,1,1,1,1;zoom,1;rotationz,0;linear,0.3;rotationz,90;linear,0.3;rotationz,180;diffusealpha,0 +BooCommand= +GoodCommand= +GreatCommand= +PerfectCommand= +MarvelousCommand= + diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 5e9fa768d7..f8ed5cc8f3 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -1711,26 +1711,6 @@ OddLineIn=addx,640;decelerate,0.5;addx,-640; EvenLineOut=stoptweening;accelerate,0.3;addx,-640; OddLineOut=stoptweening;accelerate,0.3;addx,640; -[GhostArrow] -ShowSeconds=0.12 -ZoomStart=1.0 -ZoomEnd=1.3 -ColorMarvelous=1.0,1.0,1.0,1 // white -ColorPerfect=1.0,1.0,0.3,1 // yellow -ColorGreat=0.0,1.0,0.4,1 // green -ColorGood=0.3,0.8,1.0,1 // blue -ColorBoo=0.8,0.0,0.6,1 // purple - -[GhostArrowBright] -ShowSeconds=0.12 -ZoomStart=1.0 -ZoomEnd=1.3 -ColorMarvelous=1.0,1.0,1.0,1 // white -ColorPerfect=1.0,1.0,0.3,1 // yellow -ColorGreat=0.0,1.0,0.4,1 // green -ColorGood=0.3,0.8,1.0,1 // blue -ColorBoo=0.8,0.0,0.6,1 // purple - [HoldGhostArrow] WarmUpSeconds=0.25 diff --git a/stepmania/src/GameConstantsAndTypes.cpp b/stepmania/src/GameConstantsAndTypes.cpp index d55ae36c42..8dc5873da4 100644 --- a/stepmania/src/GameConstantsAndTypes.cpp +++ b/stepmania/src/GameConstantsAndTypes.cpp @@ -141,3 +141,19 @@ SongSortOrder StringToSongSortOrder( CString str ) return SORT_INVALID; } + + +CString TapNoteScoreToString( TapNoteScore tns ) +{ + switch( tns ) + { + case TNS_NONE: return "none"; + case TNS_MISS: return "miss"; + case TNS_BOO: return "boo"; + case TNS_GOOD: return "good"; + case TNS_GREAT: return "great"; + case TNS_PERFECT: return "perfect"; + case TNS_MARVELOUS: return "marvelous"; + default: ASSERT(0); return ""; // invalid Difficulty + } +} diff --git a/stepmania/src/GameConstantsAndTypes.h b/stepmania/src/GameConstantsAndTypes.h index e23e0af2e5..7342e95d08 100644 --- a/stepmania/src/GameConstantsAndTypes.h +++ b/stepmania/src/GameConstantsAndTypes.h @@ -144,6 +144,7 @@ enum TapNoteScore { NUM_TAP_NOTE_SCORES }; +CString TapNoteScoreToString( TapNoteScore tns ); //enum TapNoteTiming { // TNT_NONE, diff --git a/stepmania/src/GhostArrow.cpp b/stepmania/src/GhostArrow.cpp index cda42d4cad..b96924be0e 100644 --- a/stepmania/src/GhostArrow.cpp +++ b/stepmania/src/GhostArrow.cpp @@ -12,34 +12,26 @@ */ #include "GhostArrow.h" -#include "PrefsManager.h" -#include "ThemeManager.h" - - -CachedThemeMetricF GA_SHOW_SECONDS ("GhostArrow","ShowSeconds"); -CachedThemeMetricF GA_ZOOM_START ("GhostArrow","ZoomStart"); -CachedThemeMetricF GA_ZOOM_END ("GhostArrow","ZoomEnd"); -CachedThemeMetricC GA_COLOR_MARVELOUS ("GhostArrow","ColorMarvelous"); -CachedThemeMetricC GA_COLOR_PERFECT ("GhostArrow","ColorPerfect"); -CachedThemeMetricC GA_COLOR_GREAT ("GhostArrow","ColorGreat"); -CachedThemeMetricC GA_COLOR_GOOD ("GhostArrow","ColorGood"); -CachedThemeMetricC GA_COLOR_BOO ("GhostArrow","ColorBoo"); +#include "NoteSkinManager.h" GhostArrow::GhostArrow() { - GA_SHOW_SECONDS.Refresh(); - GA_ZOOM_START.Refresh(); - GA_ZOOM_END.Refresh(); - GA_COLOR_MARVELOUS.Refresh(); - GA_COLOR_PERFECT.Refresh(); - GA_COLOR_GREAT.Refresh(); - GA_COLOR_GOOD.Refresh(); - GA_COLOR_BOO.Refresh(); - SetDiffuse( RageColor(1,1,1,0) ); } +void GhostArrow::Init( PlayerNumber pn ) +{ + m_PlayerNumber = pn; + + for( int i=0; iGetMetric(m_PlayerNumber,m_sName,sCommand); + } +} + void GhostArrow::Update( float fDeltaTime ) { Sprite::Update( fDeltaTime ); @@ -47,34 +39,5 @@ void GhostArrow::Update( float fDeltaTime ) void GhostArrow::Step( TapNoteScore score ) { - // HACK: set the length of each frame so the animation plays in exactly 1 pop up time. - // We can't do this in the constructor because the image hasn't been loaded yet - for( int i=0; iCommand( m_sScoreCommand[score] ); } diff --git a/stepmania/src/GhostArrow.h b/stepmania/src/GhostArrow.h index 75d202c15f..0ea234d490 100644 --- a/stepmania/src/GhostArrow.h +++ b/stepmania/src/GhostArrow.h @@ -12,20 +12,24 @@ ----------------------------------------------------------------------------- */ - #include "Sprite.h" #include "GameConstantsAndTypes.h" +#include "PlayerNumber.h" class GhostArrow : public Sprite { public: GhostArrow(); + virtual void Init( PlayerNumber pn ); + virtual void Update( float fDeltaTime ); void Step( TapNoteScore score ); protected: + PlayerNumber m_PlayerNumber; + CString m_sScoreCommand[NUM_TAP_NOTE_SCORES]; }; diff --git a/stepmania/src/GhostArrowBright.cpp b/stepmania/src/GhostArrowBright.cpp deleted file mode 100644 index 6c162a4366..0000000000 --- a/stepmania/src/GhostArrowBright.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include "global.h" -/* ------------------------------------------------------------------------------ - Class: GhostArrowBright - - Desc: See header. - - Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. - Ben Nordstrom - Chris Danford ------------------------------------------------------------------------------ -*/ - -#include "GhostArrowBright.h" -#include "PrefsManager.h" -#include "ThemeManager.h" - - -CachedThemeMetricF GAB_SHOW_SECONDS ("GhostArrowBright","ShowSeconds"); -CachedThemeMetricF GAB_ZOOM_START ("GhostArrowBright","ZoomStart"); -CachedThemeMetricF GAB_ZOOM_END ("GhostArrowBright","ZoomEnd"); -CachedThemeMetricC GAB_COLOR_MARVELOUS ("GhostArrowBright","ColorMarvelous"); -CachedThemeMetricC GAB_COLOR_PERFECT ("GhostArrowBright","ColorPerfect"); -CachedThemeMetricC GAB_COLOR_GREAT ("GhostArrowBright","ColorGreat"); -CachedThemeMetricC GAB_COLOR_GOOD ("GhostArrowBright","ColorGood"); -CachedThemeMetricC GAB_COLOR_BOO ("GhostArrowBright","ColorBoo"); - - -GhostArrowBright::GhostArrowBright() -{ - GAB_SHOW_SECONDS.Refresh(); - GAB_ZOOM_START.Refresh(); - GAB_ZOOM_END.Refresh(); - GAB_COLOR_MARVELOUS.Refresh(); - GAB_COLOR_PERFECT.Refresh(); - GAB_COLOR_GREAT.Refresh(); - GAB_COLOR_GOOD.Refresh(); - GAB_COLOR_BOO.Refresh(); - - SetDiffuse( RageColor(1,1,1,0) ); -} - -void GhostArrowBright::Update( float fDeltaTime ) -{ - Sprite::Update( fDeltaTime ); -} - -void GhostArrowBright::Step( TapNoteScore score ) -{ - // HACK: set the length of each frame so the animation plays in exactly 1 pop up time. - // We can't do this in the constructor because the image hasn't been loaded yet - for( int i=0; iGetPathTo(pn, Button, "tap explosion dim") ); - m_GhostArrowRowBright[c].Load( NOTESKIN->GetPathTo(pn, Button, "tap explosion bright") ); - m_HoldGhostArrowRow[c].Load( NOTESKIN->GetPathTo(pn, Button, "hold explosion") ); + m_GhostDim[c].SetName( "GhostArrowDim" ); + m_GhostBright[c].SetName( "GhostArrowBright" ); + m_GhostMine[c].SetName( "GhostArrowMine" ); + m_HoldGhost[c].SetName( "HoldGhostArrow" ); + + m_GhostDim[c].Init( pn ); + m_GhostBright[c].Init( pn ); + m_GhostMine[c].Init( pn ); + //m_HoldGhost[c].Init( pn ); - m_GhostArrowRow[c].SetX( pStyleDef->m_ColumnInfo[pn][c].fXOffset ); - m_GhostArrowRowBright[c].SetX( pStyleDef->m_ColumnInfo[pn][c].fXOffset ); - m_HoldGhostArrowRow[c].SetX( pStyleDef->m_ColumnInfo[pn][c].fXOffset ); + m_GhostDim[c].Load( NOTESKIN->GetPathTo(pn, Button, "tap explosion dim") ); + m_GhostBright[c].Load( NOTESKIN->GetPathTo(pn, Button, "tap explosion bright") ); + m_GhostMine[c].Load( NOTESKIN->GetPathTo(pn, Button, "tap explosion mine") ); + m_HoldGhost[c].Load( NOTESKIN->GetPathTo(pn, Button, "hold explosion") ); + + m_GhostDim[c].SetX( pStyleDef->m_ColumnInfo[pn][c].fXOffset ); + m_GhostBright[c].SetX( pStyleDef->m_ColumnInfo[pn][c].fXOffset ); + m_GhostMine[c].SetX( pStyleDef->m_ColumnInfo[pn][c].fXOffset ); + m_HoldGhost[c].SetX( pStyleDef->m_ColumnInfo[pn][c].fXOffset ); } } @@ -56,9 +68,10 @@ void GhostArrowRow::Update( float fDeltaTime ) { for( int c=0; c= 0 && iCol < m_iNumCols ); if( bBright ) - m_GhostArrowRowBright[iCol].Step( score ); + m_GhostBright[iCol].Step( score ); else - m_GhostArrowRow[iCol].Step( score ); + m_GhostDim[iCol].Step( score ); } void GhostArrowRow::HoldNote( int iCol ) { ASSERT( iCol >= 0 && iCol < m_iNumCols ); - m_HoldGhostArrowRow[iCol].Step(); + m_HoldGhost[iCol].Step(); +} + +void GhostArrowRow::TapMine( int iCol, TapNoteScore score ) +{ + m_GhostMine[iCol].Step( score ); } diff --git a/stepmania/src/GhostArrowRow.h b/stepmania/src/GhostArrowRow.h index 63471bf92c..4e3cb616cb 100644 --- a/stepmania/src/GhostArrowRow.h +++ b/stepmania/src/GhostArrowRow.h @@ -13,7 +13,6 @@ #include "ActorFrame.h" #include "GhostArrow.h" -#include "GhostArrowBright.h" #include "HoldGhostArrow.h" #include "GameConstantsAndTypes.h" #include "StyleDef.h" @@ -30,15 +29,17 @@ public: void Load( PlayerNumber pn ); void TapNote( int iCol, TapNoteScore score, bool bBright ); + void TapMine( int iCol, TapNoteScore score ); void HoldNote( int iCol ); protected: int m_iNumCols; PlayerNumber m_PlayerNumber; - GhostArrow m_GhostArrowRow[MAX_NOTE_TRACKS]; - GhostArrowBright m_GhostArrowRowBright[MAX_NOTE_TRACKS]; - HoldGhostArrow m_HoldGhostArrowRow[MAX_NOTE_TRACKS]; + GhostArrow m_GhostDim[MAX_NOTE_TRACKS]; + GhostArrow m_GhostBright[MAX_NOTE_TRACKS]; + GhostArrow m_GhostMine[MAX_NOTE_TRACKS]; + HoldGhostArrow m_HoldGhost[MAX_NOTE_TRACKS]; }; diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index 951686a3a8..ca656c5e2a 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -199,6 +199,8 @@ void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, Combine } m_sLastSeenNoteSkin = GAMESTATE->m_PlayerOptions[m_PlayerNumber].m_sNoteSkin; + + m_soundMineExplosion.Load( THEME->GetPathToS("Player explosion") ); } void Player::Update( float fDeltaTime ) @@ -458,6 +460,9 @@ void Player::Step( int col, RageTimer tm ) const float fSecondsFromPerfect = fabsf( fNoteOffset ); + + TapNote tn = GetTapNote(col,iIndexOverlappingNote); + // calculate TapNoteScore TapNoteScore score; @@ -472,6 +477,15 @@ void Player::Step( int col, RageTimer tm ) else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowGoodSeconds ) score = TNS_GOOD; else if( fScaledSecondsFromPerfect <= PREFSMAN->m_fJudgeWindowBooSeconds ) score = TNS_BOO; else score = TNS_NONE; + + // Penalize for stepping on mines + if( tn == TAP_MINE && score > TNS_NONE ) + { + m_soundMineExplosion.Play(); + score = TNS_MISS; + m_GhostArrowRow.TapMine( col, TNS_MISS ); + } + break; } case PC_CPU: @@ -483,9 +497,21 @@ void Player::Step( int col, RageTimer tm ) * misses. */ if( score == TNS_MISS ) return; + + // Unless the computer made a very good step, they were fooled by the mine + if( tn == TAP_MINE && score <= TNS_GREAT ) + { + m_soundMineExplosion.Play(); + score = TNS_MISS; + m_GhostArrowRow.TapMine( col, TNS_MISS ); + } break; case PC_AUTOPLAY: score = TNS_MARVELOUS; + + // Don't step on mines + if( tn == TAP_MINE ) + return; break; default: ASSERT(0); @@ -493,9 +519,6 @@ void Player::Step( int col, RageTimer tm ) break; } - // Stepping on a mine counts as a miss - if( GetTapNote(col,iIndexOverlappingNote) == TAP_MINE ) - score = TNS_MISS; if( score != TNS_NONE && score != TNS_MISS ) { diff --git a/stepmania/src/Player.h b/stepmania/src/Player.h index 80b3295032..9eecba3431 100644 --- a/stepmania/src/Player.h +++ b/stepmania/src/Player.h @@ -16,10 +16,6 @@ #include "Sprite.h" #include "BitmapText.h" -#include "GrayArrow.h" -#include "GhostArrow.h" -#include "GhostArrowBright.h" -#include "HoldGhostArrow.h" #include "ActorFrame.h" #include "RandomSample.h" #include "Judgment.h" @@ -32,6 +28,7 @@ #include "ArrowBackdrop.h" #include "RageTimer.h" #include "ProTimingDisplay.h" +#include "RageSound.h" class ScoreDisplay; class LifeMeter; @@ -97,6 +94,8 @@ protected: CString m_sLastSeenNoteSkin; bool m_bShowJudgment; int m_iRowLastCrossed; + + RageSound m_soundMineExplosion; }; #endif diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index 2feeabf1fa..215bd49fe6 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -65,7 +65,7 @@ IntDir=.\../Debug6 TargetDir=\stepmania\stepmania TargetName=StepMania-debug SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -102,7 +102,7 @@ IntDir=.\Debug TargetDir=\stepmania\stepmania TargetName=default SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -142,7 +142,7 @@ IntDir=.\../Release6 TargetDir=\stepmania\stepmania TargetName=StepMania SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -183,7 +183,7 @@ IntDir=.\StepMania___Xbox_Release TargetDir=\stepmania\stepmania TargetName=default SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -2984,25 +2984,6 @@ SOURCE=.\GhostArrow.h # End Source File # Begin Source File -SOURCE=.\GhostArrowBright.cpp - -!IF "$(CFG)" == "StepMania - Win32 Debug" - -!ELSEIF "$(CFG)" == "StepMania - Xbox Debug" - -!ELSEIF "$(CFG)" == "StepMania - Win32 Release" - -!ELSEIF "$(CFG)" == "StepMania - Xbox Release" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\GhostArrowBright.h -# End Source File -# Begin Source File - SOURCE=.\GhostArrowRow.cpp !IF "$(CFG)" == "StepMania - Win32 Debug" diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj index ba11b3c29a..3fc8fcfe6d 100644 --- a/stepmania/src/StepMania.vcproj +++ b/stepmania/src/StepMania.vcproj @@ -1349,12 +1349,6 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ - - - -