diff --git a/stepmania/Themes/default/Fonts/MusicList titles 16x16.png b/stepmania/Themes/default/Fonts/MusicList titles 16x16.png index 0b91d1e11f..e68e158072 100644 Binary files a/stepmania/Themes/default/Fonts/MusicList titles 16x16.png and b/stepmania/Themes/default/Fonts/MusicList titles 16x16.png differ diff --git a/stepmania/Themes/default/Fonts/ScreenCredits titles.redir b/stepmania/Themes/default/Fonts/ScreenCredits titles.redir new file mode 100644 index 0000000000..219504d9e6 --- /dev/null +++ b/stepmania/Themes/default/Fonts/ScreenCredits titles.redir @@ -0,0 +1 @@ +MusicList titles diff --git a/stepmania/Themes/default/Graphics/ScreenCredits background frame.png b/stepmania/Themes/default/Graphics/ScreenCredits background frame.png new file mode 100644 index 0000000000..b153acd307 Binary files /dev/null and b/stepmania/Themes/default/Graphics/ScreenCredits background frame.png differ diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 26d06e0dc0..0c68de97d2 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -1252,3 +1252,23 @@ HelpText=&UP; &DOWN; to change line &LEFT; &RIGHT; to select between options Game=Change the current game type with this option. TimerSeconds=30 +[ScreenCredits] +BackgroundsBaseX=160 +BackgroundsBaseY=0 +BackgroundsVelocityX=0 +BackgroundsVelocityY=30 +BackgroundsSpacingX=0 +BackgroundsSpacingY=-240 +BackgroundsWidth=312 +BackgroundsHeight=232 +TextsColorIntro=0.5,0.5,1,1 +TextsColorHeader=1,0.5,0.5,1 +TextsColorNormal=1,1,1,1 +TextsBaseX=480 +TextsBaseY=0 +TextsVelocityX=0 +TextsVelocityY=-50 +TextsSpacingX=0 +TextsSpacingY=30 +TextsZoom=0.5 +NextScreen=ScreenRanking diff --git a/stepmania/src/ActorCollision.h b/stepmania/src/ActorCollision.h new file mode 100644 index 0000000000..133363cde3 --- /dev/null +++ b/stepmania/src/ActorCollision.h @@ -0,0 +1,41 @@ +#ifndef ActorCollision_H +#define ActorCollision_H +/* +----------------------------------------------------------------------------- + Class: ActorCollision + + Desc: + + Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. + Chris Danford +----------------------------------------------------------------------------- +*/ + +#include "Actor.h" +#include "GameConstantsAndTypes.h" + + +inline float GetOffScreenLeft( Actor* pActor ) { return SCREEN_LEFT - pActor->GetZoomedWidth()/2; } +inline float GetOffScreenRight( Actor* pActor ) { return SCREEN_RIGHT + pActor->GetZoomedWidth()/2; } +inline float GetOffScreenTop( Actor* pActor ) { return SCREEN_TOP - pActor->GetZoomedHeight()/2; } +inline float GetOffScreenBottom(Actor* pActor ) { return SCREEN_BOTTOM+ pActor->GetZoomedHeight()/2; } + +inline bool IsOffScreenLeft( Actor* pActor ) { return pActor->GetX() < GetOffScreenLeft(pActor); } +inline bool IsOffScreenRight( Actor* pActor ) { return pActor->GetX() > GetOffScreenRight(pActor); } +inline bool IsOffScreenTop( Actor* pActor ) { return pActor->GetY() < GetOffScreenTop(pActor); } +inline bool IsOffScreenBottom(Actor* pActor ) { return pActor->GetY() > GetOffScreenBottom(pActor); } +inline bool IsOffScreen( Actor* pActor ) { return IsOffScreenLeft(pActor) || IsOffScreenRight(pActor) || IsOffScreenTop(pActor) || IsOffScreenBottom(pActor); } + +// guard rail is the area that keeps particles from going off screen +inline float GetGuardRailLeft( Actor* pActor ) { return SCREEN_LEFT + pActor->GetZoomedWidth()/2; } +inline float GetGuardRailRight( Actor* pActor ) { return SCREEN_RIGHT - pActor->GetZoomedWidth()/2; } +inline float GetGuardRailTop( Actor* pActor ) { return SCREEN_TOP + pActor->GetZoomedHeight()/2; } +inline float GetGuardRailBottom(Actor* pActor ) { return SCREEN_BOTTOM- pActor->GetZoomedHeight()/2; } + +inline bool HitGuardRailLeft( Actor* pActor ) { return pActor->GetX() < GetGuardRailLeft(pActor); } +inline bool HitGuardRailRight( Actor* pActor ) { return pActor->GetX() > GetGuardRailRight(pActor); } +inline bool HitGuardRailTop( Actor* pActor ) { return pActor->GetY() < GetGuardRailTop(pActor); } +inline bool HitGuardRailBottom(Actor* pActor ) { return pActor->GetY() > GetGuardRailBottom(pActor); } + + +#endif \ No newline at end of file diff --git a/stepmania/src/ActorScroller.cpp b/stepmania/src/ActorScroller.cpp new file mode 100644 index 0000000000..4624c19fce --- /dev/null +++ b/stepmania/src/ActorScroller.cpp @@ -0,0 +1,87 @@ +#include "global.h" // testing updates +/* +----------------------------------------------------------------------------- + Class: ActorScroller + + Desc: See header. + + Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. + Chris Danford +----------------------------------------------------------------------------- +*/ + +#include "ActorScroller.h" +#include "ActorCollision.h" +#include +#include "RageUtil.h" + + +ActorScroller::ActorScroller() +{ + m_fSecsIntoScroll = 0; +} + +void ActorScroller::Load( vector vActors, float fBaseX, float fBaseY, float fVelX, float fVelY, float fSpacingX, float fSpacingY ) +{ + m_vActors = vActors; + m_vBase.x = fBaseX; + m_vBase.y = fBaseY; + m_vVelocity.x = fVelX; + m_vVelocity.y = fVelY; + m_vSpacing.x = fSpacingX; + m_vSpacing.y = fSpacingY; + + // adjust base + float t = 10000; // inf + if( m_vSpacing.x != 0 ) + t = min( t, m_vBase.x / fabsf(m_vSpacing.x) ); + if( m_vSpacing.y != 0 ) + t = min( t, m_vBase.y / fabsf(m_vSpacing.y) ); + m_vBase.x -= t * fabsf(m_vSpacing.x); + m_vBase.y -= t * fabsf(m_vSpacing.y); + if( m_vVelocity.x < 0 ) + m_vBase.x += SCREEN_WIDTH; + if( m_vVelocity.y < 0 ) + m_vBase.y += SCREEN_HEIGHT; + + // push off screen + if( m_vVelocity.x!=0 ) m_vBase.x += m_vSpacing.x/2; + if( m_vVelocity.y!=0 ) m_vBase.y += m_vSpacing.y/2; +} + +float ActorScroller::GetTotalSecsToScroll() +{ + float fMaxSecToScroll = 0; + if( m_vVelocity.x != 0 ) + { + float fSecToScroll = fabsf(m_vSpacing.x*(m_vActors.size()+1) + SCREEN_WIDTH) / fabsf(m_vVelocity.x); + fMaxSecToScroll = max( fMaxSecToScroll, fSecToScroll ); + } + if( m_vVelocity.y != 0 ) + { + float fSecToScroll = fabsf(m_vSpacing.y*(m_vActors.size()+1) + SCREEN_HEIGHT) / fabsf(m_vVelocity.y); + fMaxSecToScroll = max( fMaxSecToScroll, fSecToScroll ); + } + return fMaxSecToScroll; +} + +void ActorScroller::Update( float fDeltaTime ) +{ + m_fSecsIntoScroll += fDeltaTime; + + for( unsigned i=0; iSetXY( fX, fY ); + } +} + +void ActorScroller::DrawPrimitives() +{ + for( unsigned i=0; iDraw(); +} \ No newline at end of file diff --git a/stepmania/src/ActorScroller.h b/stepmania/src/ActorScroller.h new file mode 100644 index 0000000000..7723764b14 --- /dev/null +++ b/stepmania/src/ActorScroller.h @@ -0,0 +1,39 @@ +#ifndef ActorScroller_H +#define ActorScroller_H +/* +----------------------------------------------------------------------------- + Class: ActorScroller + + Desc: A container for other actors. + + Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. + Chris Danford +----------------------------------------------------------------------------- +*/ + +#include "Actor.h" + + +class ActorScroller : public Actor +{ +public: + ActorScroller(); + + // owner's responsibility to delete vActors! + void Load( vector vActors, float fBaseX, float fBaseY, float fVelX, float fVelY, float fSpacingX, float fSpacingY ); + + void Update( float fDelta ); + void DrawPrimitives(); + + float GetTotalSecsToScroll(); + +protected: + float m_fSecsIntoScroll; + RageVector2 m_vBase; + RageVector2 m_vVelocity; + RageVector2 m_vSpacing; + vector m_vActors; +}; + + +#endif diff --git a/stepmania/src/BGAnimationLayer.cpp b/stepmania/src/BGAnimationLayer.cpp index c8ac692436..339c9334fa 100644 --- a/stepmania/src/BGAnimationLayer.cpp +++ b/stepmania/src/BGAnimationLayer.cpp @@ -22,28 +22,9 @@ #include "RageLog.h" #include "song.h" #include "ThemeManager.h" +#include "ActorCollision.h" -inline float GetOffScreenLeft( Actor* pActor ) { return SCREEN_LEFT - pActor->GetZoomedWidth()/2; } -inline float GetOffScreenRight( Actor* pActor ) { return SCREEN_RIGHT + pActor->GetZoomedWidth()/2; } -inline float GetOffScreenTop( Actor* pActor ) { return SCREEN_TOP - pActor->GetZoomedHeight()/2; } -inline float GetOffScreenBottom(Actor* pActor ) { return SCREEN_BOTTOM+ pActor->GetZoomedHeight()/2; } - -inline bool IsOffScreenLeft( Actor* pActor ) { return pActor->GetX() < GetOffScreenLeft(pActor); } -inline bool IsOffScreenRight( Actor* pActor ) { return pActor->GetX() > GetOffScreenRight(pActor); } -inline bool IsOffScreenTop( Actor* pActor ) { return pActor->GetY() < GetOffScreenTop(pActor); } -inline bool IsOffScreenBottom(Actor* pActor ) { return pActor->GetY() > GetOffScreenBottom(pActor); } - -// guard rail is the area that keeps particles from going off screen -inline float GetGuardRailLeft( Actor* pActor ) { return SCREEN_LEFT + pActor->GetZoomedWidth()/2; } -inline float GetGuardRailRight( Actor* pActor ) { return SCREEN_RIGHT - pActor->GetZoomedWidth()/2; } -inline float GetGuardRailTop( Actor* pActor ) { return SCREEN_TOP + pActor->GetZoomedHeight()/2; } -inline float GetGuardRailBottom(Actor* pActor ) { return SCREEN_BOTTOM- pActor->GetZoomedHeight()/2; } - -inline bool HitGuardRailLeft( Actor* pActor ) { return pActor->GetX() < GetGuardRailLeft(pActor); } -inline bool HitGuardRailRight( Actor* pActor ) { return pActor->GetX() > GetGuardRailRight(pActor); } -inline bool HitGuardRailTop( Actor* pActor ) { return pActor->GetY() < GetGuardRailTop(pActor); } -inline bool HitGuardRailBottom(Actor* pActor ) { return pActor->GetY() > GetGuardRailBottom(pActor); } const float PARTICLE_SPEED = 300; diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index 0c909f3af6..a43cc59c6d 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -225,8 +225,8 @@ void NoteField::DrawPrimitives() fDrawScale *= 1 + 0.5f * fabsf( GAMESTATE->m_PlayerOptions[m_PlayerNumber].m_fPerspectiveTilt ); fDrawScale *= 1 + fabsf( GAMESTATE->m_PlayerOptions[m_PlayerNumber].m_fEffects[PlayerOptions::EFFECT_MINI] ); - iFirstPixelToDraw *= fDrawScale; - iLastPixelToDraw *= fDrawScale; + iFirstPixelToDraw = (int)(iFirstPixelToDraw * fDrawScale); + iLastPixelToDraw = (int)(iLastPixelToDraw * fDrawScale); // CPU OPTIMIZATION OPPORTUNITY: diff --git a/stepmania/src/NoteFieldPositioning.cpp b/stepmania/src/NoteFieldPositioning.cpp index b8c9115ad5..336521e37c 100644 --- a/stepmania/src/NoteFieldPositioning.cpp +++ b/stepmania/src/NoteFieldPositioning.cpp @@ -143,7 +143,8 @@ void NoteFieldPositioning::LoadFromStyleDef(const StyleDef *s, PlayerNumber pn) if(!fgets(buf, 1000, f)) break; sscanf(buf, "%f", &m_fFov[t]); } - fclose(f); + if( f ) + fclose(f); // XXX } diff --git a/stepmania/src/Screen.cpp b/stepmania/src/Screen.cpp index 508bdf10da..a5661b7e7c 100644 --- a/stepmania/src/Screen.cpp +++ b/stepmania/src/Screen.cpp @@ -272,6 +272,7 @@ void Screen::ClearMessageQueue( const ScreenMessage SM ) #include "ScreenGameplayOptions.h" #include "ScreenStyleSplash.h" #include "ScreenAutogenOptions.h" +#include "ScreenCredits.h" Screen* Screen::Create( CString sClassName ) { @@ -332,6 +333,7 @@ Screen* Screen::Create( CString sClassName ) else if( 0==stricmp(sClassName, "ScreenGameplayOptions") ) ret = new ScreenGameplayOptions; else if( 0==stricmp(sClassName, "ScreenStyleSplash") ) ret = new ScreenStyleSplash; else if( 0==stricmp(sClassName, "ScreenAutogenOptions") ) ret = new ScreenAutogenOptions; + else if( 0==stricmp(sClassName, "ScreenCredits") ) ret = new ScreenCredits; else RageException::Throw( "Invalid Screen class name '%s'", sClassName.GetString() ); return ret; diff --git a/stepmania/src/ScreenCredits.cpp b/stepmania/src/ScreenCredits.cpp new file mode 100644 index 0000000000..ea503056bd --- /dev/null +++ b/stepmania/src/ScreenCredits.cpp @@ -0,0 +1,301 @@ +#include "global.h" +/* +----------------------------------------------------------------------------- + Class: ScreenCredits + + Desc: See header. + + Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. + Chris Danford +----------------------------------------------------------------------------- +*/ + + +#include "ScreenCredits.h" +#include "ScreenManager.h" +#include "RageLog.h" +#include "GameConstantsAndTypes.h" +#include "SongManager.h" +#include "GameState.h" +#include "ThemeManager.h" +#include "AnnouncerManager.h" +#include +#include "CroppedSprite.h" +#include "Song.h" +#include "BitmapText.h" + + +#define BACKGROUNDS_BASE_X THEME->GetMetricF("ScreenCredits","BackgroundsBaseX") +#define BACKGROUNDS_BASE_Y THEME->GetMetricF("ScreenCredits","BackgroundsBaseY") +#define BACKGROUNDS_VELOCITY_X THEME->GetMetricF("ScreenCredits","BackgroundsVelocityX") +#define BACKGROUNDS_VELOCITY_Y THEME->GetMetricF("ScreenCredits","BackgroundsVelocityY") +#define BACKGROUNDS_SPACING_X THEME->GetMetricF("ScreenCredits","BackgroundsSpacingX") +#define BACKGROUNDS_SPACING_Y THEME->GetMetricF("ScreenCredits","BackgroundsSpacingY") +#define BACKGROUNDS_WIDTH THEME->GetMetricF("ScreenCredits","BackgroundsWidth") +#define BACKGROUNDS_HEIGHT THEME->GetMetricF("ScreenCredits","BackgroundsHeight") +#define TEXTS_COLOR_INTRO THEME->GetMetricC("ScreenCredits","TextsColorIntro") +#define TEXTS_COLOR_HEADER THEME->GetMetricC("ScreenCredits","TextsColorHeader") +#define TEXTS_COLOR_NORMAL THEME->GetMetricC("ScreenCredits","TextsColorNormal") +#define TEXTS_ZOOM THEME->GetMetricF("ScreenCredits","TextsZoom") +#define TEXTS_BASE_X THEME->GetMetricF("ScreenCredits","TextsBaseX") +#define TEXTS_BASE_Y THEME->GetMetricF("ScreenCredits","TextsBaseY") +#define TEXTS_VELOCITY_X THEME->GetMetricF("ScreenCredits","TextsVelocityX") +#define TEXTS_VELOCITY_Y THEME->GetMetricF("ScreenCredits","TextsVelocityY") +#define TEXTS_SPACING_X THEME->GetMetricF("ScreenCredits","TextsSpacingX") +#define TEXTS_SPACING_Y THEME->GetMetricF("ScreenCredits","TextsSpacingY") +#define NEXT_SCREEN THEME->GetMetric ("ScreenCredits","NextScreen") + +const int NUM_BACKGROUNDS = 20; + +struct CreditLine +{ + int colorIndex; + const char* text; +}; + +const CreditLine CREDIT_LINES[] = +{ + {1,"STEPMANIA TEAM"}, + {0,""}, + {0,""}, + {0,""}, + {2,"☆☆GRAPHICS☆☆"}, + {0,"v1ral (Lucas Tang)"}, + {0,"SPiGuMuS"}, + {0,"Visage"}, + {0,"DJ McFox (Ryan McKanna)"}, + {0,"Cloud34 (Lamden Travis)"}, + {0,"Redcrusher (Michael Curry)"}, + {0,"Steve 'healing_vision' Klise"}, + {0,"Mauro Panichella"}, + {0,""}, + {0,""}, + {0,""}, + {2,"☆☆WEB DESIGN☆☆"}, + {0,"Brian 'Bork' Bugh"}, + {0,""}, + {0,""}, + {0,""}, + {2,"☆☆SOUND☆☆"}, + {0,"Kyle 'KeeL' Ward"}, + {0,"Jim 'Izlude' Cabeen"}, + {0,""}, + {0,""}, + {0,""}, + {2,"☆☆TESTING☆☆"}, + {0,"Gotetsu"}, + {0,"spds (James Sanders)"}, + {0,""}, + {0,""}, + {0,""}, + {2,"☆☆PROGRAMMING☆☆"}, + {0,"Chris Danford"}, + {0,"Andrew 'Frieza' Livy"}, + {0,"Glenn Maynard"}, + {0,"Bruno Figueiredo"}, + {0,"Dro Kulix (Peter S. May)"}, + {0,"nmspaz (Jared Roberts)"}, + {0,"binarys (Brendan Walker)"}, + {0,"Lance Gilbert (Neovanglist)"}, + {0,"Michel Donais"}, + {0,"Mantis (Ben Nordstrom)"}, + {0,"Parasyte (Chris Gomez)"}, + {0,"dirkthedaring (Michael Patterson)"}, + {0,"angedelamort (Sauleil Lamarre)"}, + {0,"Edwin Evans"}, + {0,"Brian 'Bork' Bugh"}, + {0,"Elvis314 (Joel Maher)"}, + {0,"Kefabi (Garth Smith)"}, + {0,"Pkillah (Playah Killah)"}, + {0,"DJ McFox (Ryan McKanna)"}, + {0,"Robert Kemmetmueller"}, + {0,"Shabach (Ben Andersen)"}, + {0,"SlinkyWizard (Will Valladao)"}, + {0,"TheChip"}, + {0,"WarriorBob (David H)"}, + {0,"Mike Waltson"}, + {0,""}, + {0,""}, + {0,""}, + {2,"☆☆SPECIAL THANKS TO☆☆"}, + {0,"SimWolf"}, + {0,"DJ DraftHorse"}, + {0,"Dance With Intensity"}, + {0,"BeMaNiRuler"}, + {0,"DDRLlama"}, + {0,"DDRManiaX"}, + {0,"NMR"}, + {0,"Random Hajile"}, + {0,"Lagged"}, + {0,"The Melting Pot"}, + {0,"DDRJamz Global BBS"}, + {0,"Eric 'WaffleKing' Webster"}, + {0,"Mark 'Foobly' Verrey"}, + {0,"Mandarin Blue"}, + {0,"Anne Kiel"}, + {0,"BeMaNiFiNiNaTiC (Jeremy Hine)"}, + {0,"Garett Sakamoto"}, + {0,"SailorBob"}, + {0,"AngelTK (Kenny Lai)"}, + {0,"Illusionz - Issaquah, WA"}, + {0,"Quarters - Kirkland, WA"}, + {0,"Segapark - Bournemouth, UK"}, + {0,"Pier Amusements - Bournemouth, UK"}, + {0,"Westcliff Amusements - Bournemouth, UK"}, + {0,"Naoki"}, + {0,"Konami Computer Entertainment Japan"}, + {0,""}, + {0,""}, + {0,""}, + {0,""}, + {0,""}, + {0,""}, + {0,""}, + {0,""}, + {1,"Join the StepMania team"}, + {1,"and help us out!"}, +}; +const unsigned NUM_CREDIT_LINES = sizeof(CREDIT_LINES) / sizeof(CreditLine); + + +ScreenCredits::ScreenCredits() +{ + LOG->Trace( "ScreenCredits::ScreenCredits()" ); + + unsigned i; + + GAMESTATE->Reset(); // so that credits message for both players will show + + + m_Background.LoadFromAniDir( THEME->GetPathTo("BGAnimations","ScreenCredits background") ); + this->AddChild( &m_Background ); + + vector arraySongs; + SONGMAN->GetSongs( arraySongs ); + SortSongPointerArrayByTitle( arraySongs ); + + for( i=0; iHasBackground() ) + break; + } + + CroppedSprite* pBackground = new CroppedSprite; + pBackground->SetCroppedSize( BACKGROUNDS_WIDTH, BACKGROUNDS_HEIGHT ); + pBackground->LoadBG( pSong->HasBackground() ? pSong->GetBackgroundPath() : THEME->GetPathTo("Graphics","Common fallback background") ); + m_vBackgrounds.push_back( pBackground ); + + Sprite* pFrame = new Sprite; + pFrame->Load( THEME->GetPathTo("Graphics","ScreenCredits background frame") ); + m_vFrames.push_back( pFrame ); + } + m_ScrollerBackgrounds.Load( m_vBackgrounds, BACKGROUNDS_BASE_X, BACKGROUNDS_BASE_Y, BACKGROUNDS_VELOCITY_X, BACKGROUNDS_VELOCITY_Y, BACKGROUNDS_SPACING_X, BACKGROUNDS_SPACING_Y ); + this->AddChild( &m_ScrollerBackgrounds ); + m_ScrollerFrames.Load( m_vFrames, BACKGROUNDS_BASE_X, BACKGROUNDS_BASE_Y, BACKGROUNDS_VELOCITY_X, BACKGROUNDS_VELOCITY_Y, BACKGROUNDS_SPACING_X, BACKGROUNDS_SPACING_Y ); + this->AddChild( &m_ScrollerFrames ); + + + for( i=0; iLoadFromFont( THEME->GetPathTo("Fonts","ScreenCredits titles") ); + pText->SetText( CREDIT_LINES[i].text ); + switch( CREDIT_LINES[i].colorIndex ) + { + case 1: pText->SetDiffuse( TEXTS_COLOR_INTRO ); break; + case 2: pText->SetDiffuse( TEXTS_COLOR_HEADER ); break; + case 0: pText->SetDiffuse( TEXTS_COLOR_NORMAL ); break; + default: ASSERT(0); + } + pText->SetZoom( TEXTS_ZOOM ); + m_vTexts.push_back( pText ); + } + m_ScrollerTexts.Load( m_vTexts, TEXTS_BASE_X, TEXTS_BASE_Y, TEXTS_VELOCITY_X, TEXTS_VELOCITY_Y, TEXTS_SPACING_X, TEXTS_SPACING_Y ); + this->AddChild( &m_ScrollerTexts ); + + + m_Overlay.LoadFromAniDir( THEME->GetPathTo("BGAnimations","ScreenCredits overlay") ); + this->AddChild( &m_Overlay ); + + m_In.Load( THEME->GetPathTo("BGAnimations","ScreenCredits in") ); + this->AddChild( &m_In ); // draw and update manually + m_In.StartTransitioning(); + + m_Out.Load( THEME->GetPathTo("BGAnimations","ScreenCredits out") ); + this->AddChild( &m_Out ); // draw and update manually + + this->PostScreenMessage( SM_BeginFadingOut, m_ScrollerTexts.GetTotalSecsToScroll() ); + + SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("credits") ); + + SOUNDMAN->PlayMusic( THEME->GetPathTo("Sounds","ScreenCredits music") ); +} + +ScreenCredits::~ScreenCredits() +{ + unsigned i; + + for( i=0; iTrace( "ScreenCredits::Input()" ); + + if( m_In.IsTransitioning() || m_Out.IsTransitioning() ) + return; + + Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default input handler +} + +void ScreenCredits::HandleScreenMessage( const ScreenMessage SM ) +{ + switch( SM ) + { + case SM_BeginFadingOut: + if( !m_Out.IsTransitioning() ) + m_Out.StartTransitioning( SM_GoToNextScreen ); + break; + case SM_GoToNextScreen: + SONGMAN->SaveMachineScoresToDisk(); + SCREENMAN->SetNewScreen( NEXT_SCREEN ); + break; + } +} + +void ScreenCredits::MenuStart( PlayerNumber pn ) +{ + this->PostScreenMessage( SM_BeginFadingOut, 0 ); +} + +void ScreenCredits::MenuBack( PlayerNumber pn ) +{ + this->PostScreenMessage( SM_BeginFadingOut, 0 ); +} + diff --git a/stepmania/src/ScreenCredits.h b/stepmania/src/ScreenCredits.h new file mode 100644 index 0000000000..9e589aeb00 --- /dev/null +++ b/stepmania/src/ScreenCredits.h @@ -0,0 +1,51 @@ +/* +----------------------------------------------------------------------------- + File: ScreenCredits.h + + Desc: Music plays and song names scroll across the screen. + + Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. + Chris Danford +----------------------------------------------------------------------------- +*/ + +#include "Screen.h" +#include "TransitionBGAnimation.h" +#include "ActorScroller.h" + + +class ScreenCredits : public Screen +{ +public: + ScreenCredits(); + ~ScreenCredits(); + + virtual void Update( float fDeltaTime ); + virtual void DrawPrimitives(); + + virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void HandleScreenMessage( const ScreenMessage SM ); + + void MenuStart( PlayerNumber pn ); + void MenuBack( PlayerNumber pn ); + +private: + + BGAnimation m_Background; + + ActorScroller m_ScrollerBackgrounds; + vector m_vBackgrounds; + + ActorScroller m_ScrollerFrames; + vector m_vFrames; + + ActorScroller m_ScrollerTexts; + vector m_vTexts; + + BGAnimation m_Overlay; + + TransitionBGAnimation m_In; + TransitionBGAnimation m_Out; +}; + + diff --git a/stepmania/src/ScreenMusicScroll.cpp b/stepmania/src/ScreenMusicScroll.cpp index ac69da82b3..96a8b58bdb 100644 --- a/stepmania/src/ScreenMusicScroll.cpp +++ b/stepmania/src/ScreenMusicScroll.cpp @@ -31,110 +31,7 @@ const CString CREDIT_LINES[] = { - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "GRAPHICS:", - "v1ral (Lucas Tang)", - "SPiGuMuS", - "Visage", - "DJ McFox (Ryan McKanna)", - "Cloud34 (Lamden Travis)", - "Redcrusher (Michael Curry)", - "Steve 'healing_vision' Klise", - "Mauro Panichella", - "", - "", - "", - "WEB DESIGN:", - "Brian 'Bork' Bugh", - "", - "", - "", - "SOUND:", - "Kyle 'KeeL' Ward", - "Jim 'Animechanic' Cabeen" - "", - "", - "", - "TESTING:", - "Gotetsu", - "spds (James Sanders)", - "", - "", - "", - "PROGRAMMING:", - "Chris Danford", - "Andrew 'Frieza' Livy", - "Glenn Maynard", - "Bruno Figueiredo", - "Dro Kulix (Peter S. May)", - "nmspaz (Jared Roberts)", - "binarys (Brendan Walker)", - "Lance Gilbert (Neovanglist)", - "Michel Donais", - "Mantis (Ben Nordstrom)", - "Parasyte (Chris Gomez)", - "dirkthedaring (Michael Patterson)", - "angedelamort (Sauleil Lamarre)", - "Edwin Evans", - "Brian 'Bork' Bugh", - "Elvis314 (Joel Maher)", - "Kefabi (Garth Smith)", - "Pkillah (Playah Killah)", - "DJ McFox (Ryan McKanna)", - "Robert Kemmetmueller", - "Shabach (Ben Andersen)", - "SlinkyWizard (Will Valladao)", - "TheChip (The Chip)", - "WarriorBob (David H)", - "Mike Waltson", - "", - "", - "", - "SPECIAL THANKS TO:", - "SimWolf", - "DJ DraftHorse", - "Dance With Intensity", - "BeMaNiRuler", - "DDRLlama", - "DDRManiaX", - "NMR", - "Random Hajile", - "Lagged", - "The Melting Pot", - "DDRJamz Global BBS", - "Eric 'WaffleKing' Webster", - "Mark 'Foobly' Verrey", - "Mandarin Blue", - "Anne Kiel", - "BeMaNiFiNiNaTiC (Jeremy Hine)", - "Garett Sakamoto", - "SailorBob", - "AngelTK (Kenny Lai)", - "Illusionz - Issaquah, WA", - "Quarters - Kirkland, WA", - "Segapark - Bournemouth, UK", - "Pier Amusements - Bournemouth, UK", - "Westcliff Amusements - Bournemouth, UK", - "Naoki", - "Konami Computer Entertainment Japan", - "", - "", - "", - "", - "", - "", - "", - "", - "Please, join the StepMania team and help us out!", +"" }; const unsigned NUM_CREDIT_LINES = sizeof(CREDIT_LINES) / sizeof(CString); @@ -168,14 +65,14 @@ ScreenMusicScroll::ScreenMusicScroll() m_iNumLines++; } - for( i=0; iGetPathTo("Fonts","ScreenMusicScroll titles") ); - m_textLines[m_iNumLines].SetText( CREDIT_LINES[i] ); - m_textLines[m_iNumLines].SetZoom( TEXT_ZOOM ); - - m_iNumLines++; - } +// for( i=0; iGetPathTo("Fonts","ScreenMusicScroll titles") ); +// m_textLines[m_iNumLines].SetText( CREDIT_LINES[i] ); +// m_textLines[m_iNumLines].SetZoom( TEXT_ZOOM ); +// +// m_iNumLines++; +// } for( i=0; iSetNewScreen( "ScreenMusicScroll" ); + { + Grade max_grade = GRADE_E; + vector vSongs; + StageStats stats; + GAMESTATE->GetFinalEvalStatsAndSongs( stats, vSongs ); + for( int p=0; pIsPlayerEnabled(p) ) + max_grade = max( max_grade, stats.GetGrade((PlayerNumber)p) ); + if( max_grade >= GRADE_AA ) + SCREENMAN->SetNewScreen( "ScreenCredits" ); + else + SCREENMAN->SetNewScreen( "ScreenMusicScroll" ); + } break; } } diff --git a/stepmania/src/ScreenPlayerOptions.cpp b/stepmania/src/ScreenPlayerOptions.cpp index 4802bce6ef..58174858dd 100644 --- a/stepmania/src/ScreenPlayerOptions.cpp +++ b/stepmania/src/ScreenPlayerOptions.cpp @@ -123,7 +123,7 @@ void ScreenPlayerOptions::ImportOptions() m_iSelectedOption[p][PO_HOLD_NOTES] = po.m_bHoldNotes ? 1 : 0; m_iSelectedOption[p][PO_DARK] = po.m_fDark==1 ? 1 : 0; - m_iSelectedOption[p][PO_PERSPECTIVE]= SCALE( po.m_fPerspectiveTilt, -1, +1, 0, 2 ); + m_iSelectedOption[p][PO_PERSPECTIVE]= SCALE( (int)po.m_fPerspectiveTilt, -1, +1, 0, 2 ); po.Init(); @@ -171,7 +171,7 @@ void ScreenPlayerOptions::ExportOptions() po.m_bHoldNotes = (m_iSelectedOption[p][PO_HOLD_NOTES] == 1); po.m_fDark = (m_iSelectedOption[p][PO_DARK] == 1) ? 1.f : 0.f; - po.m_fPerspectiveTilt = m_iSelectedOption[p][PO_PERSPECTIVE] - 1; + po.m_fPerspectiveTilt = (float)m_iSelectedOption[p][PO_PERSPECTIVE] - 1; } } diff --git a/stepmania/src/Sprite.cpp b/stepmania/src/Sprite.cpp index ba5940da30..dcb0b964c8 100644 --- a/stepmania/src/Sprite.cpp +++ b/stepmania/src/Sprite.cpp @@ -310,8 +310,8 @@ void Sprite::DrawPrimitives() ////////////////////// // render the diffuse pass ////////////////////// - v[0].c = m_temp.diffuse[2]; // bottom left - v[1].c = m_temp.diffuse[0]; // top left + v[0].c = m_temp.diffuse[0]; // top left + v[1].c = m_temp.diffuse[2]; // bottom left v[2].c = m_temp.diffuse[3]; // bottom right v[3].c = m_temp.diffuse[1]; // top right DISPLAY->DrawQuad( v ); diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index c87b8b6d41..b330afe261 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -60,7 +60,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 @@ -95,7 +95,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 @@ -407,6 +407,14 @@ SOURCE=.\NoteDataWithScoring.h # End Source File # Begin Source File +SOURCE=.\NoteFieldPositioning.cpp +# End Source File +# Begin Source File + +SOURCE=.\NoteFieldPositioning.h +# End Source File +# Begin Source File + SOURCE=.\Notes.cpp # End Source File # Begin Source File @@ -553,14 +561,6 @@ SOURCE=.\TitleSubstitution.cpp SOURCE=.\TitleSubstitution.h # End Source File -# Begin Source File - -SOURCE=.\NoteFieldPositioning.cpp -# End Source File -# Begin Source File - -SOURCE=.\NoteFieldPositioning.h -# End Source File # End Group # Begin Group "File Types" @@ -932,6 +932,10 @@ SOURCE=.\Actor.h # End Source File # Begin Source File +SOURCE=.\ActorCollision.h +# End Source File +# Begin Source File + SOURCE=.\ActorFrame.cpp # End Source File # Begin Source File @@ -940,6 +944,14 @@ SOURCE=.\ActorFrame.h # End Source File # Begin Source File +SOURCE=.\ActorScroller.cpp +# End Source File +# Begin Source File + +SOURCE=.\ActorScroller.h +# End Source File +# Begin Source File + SOURCE=.\BitmapText.cpp # End Source File # Begin Source File @@ -1512,6 +1524,14 @@ SOURCE=.\ScreenCompany.h # End Source File # Begin Source File +SOURCE=.\ScreenCredits.cpp +# End Source File +# Begin Source File + +SOURCE=.\ScreenCredits.h +# End Source File +# Begin Source File + SOURCE=.\ScreenDemonstration.cpp # End Source File # Begin Source File diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj index c2a9f7e01b..6ff9b16f10 100644 --- a/stepmania/src/StepMania.vcproj +++ b/stepmania/src/StepMania.vcproj @@ -202,6 +202,12 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ + + + + @@ -1513,12 +1519,21 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ + + + + + +