fixed broken screen gameplay, started adding coin-op logic

This commit is contained in:
Chris Danford
2003-01-10 02:22:07 +00:00
parent ae81b1c4c6
commit 21ab45ec96
31 changed files with 549 additions and 440 deletions
+2
View File
@@ -1,4 +1,6 @@
----------------------- Version 3.01 --------------------------- ----------------------- Version 3.01 ---------------------------
NEW FEATURE: New High Score screen
NEW FEATURE: Full "attract" sequence
NEW FEATURE: .SM files can now contain UTF-8 text. NEW FEATURE: .SM files can now contain UTF-8 text.
NEW FEATURE: New alignment tags for bitmap fonts. NEW FEATURE: New alignment tags for bitmap fonts.
NEW FEATURE: Bitmap fonts now support full Unicode mapping. NEW FEATURE: Bitmap fonts now support full Unicode mapping.
+15 -11
View File
@@ -2,7 +2,7 @@
// - ScreenCaution // - ScreenCaution
// - ScreenEz2SelectPlayer // - ScreenEz2SelectPlayer
// - ScreenSelectMode // - ScreenSelectMode
// - ScreenHowToPlay // - ScreenInstructions
// - ScreenSelectCourse // - ScreenSelectCourse
// - ScreenSelectDifficulty // - ScreenSelectDifficulty
// - ScreenSelectGroup // - ScreenSelectGroup
@@ -133,7 +133,7 @@ CursorShadowLengthY=10
HelpText=Use &LEFT; &RIGHT; to select, then press START HelpText=Use &LEFT; &RIGHT; to select, then press START
TimerSeconds=40 TimerSeconds=40
NextScreenArcade=ScreenSelectGroup NextScreenArcade=ScreenSelectGroup
NextScreenOni=ScreenHowToPlay NextScreenOni=ScreenInstructions
[ScreenSelectGroup] [ScreenSelectGroup]
FrameX=180 FrameX=180
@@ -161,9 +161,9 @@ TitlesRows=10
TitlesZoom=0.5 TitlesZoom=0.5
HelpText=Use &LEFT; &RIGHT; to select, then press START HelpText=Use &LEFT; &RIGHT; to select, then press START
TimerSeconds=40 TimerSeconds=40
NextScreen=ScreenHowToPlay NextScreen=ScreenInstructions
[ScreenHowToPlay] [ScreenInstructions]
NextScreenArcade=ScreenSelectMusic NextScreenArcade=ScreenSelectMusic
NextScreenOni=ScreenSelectCourse NextScreenOni=ScreenSelectCourse
HelpText=Press START to continue HelpText=Press START to continue
@@ -438,8 +438,8 @@ CreditsP1Y=472
CreditsP2X=540 CreditsP2X=540
CreditsP2Y=472 CreditsP2Y=472
CreditsColor=1,1,1,1 CreditsColor=1,1,1,1
CreditsShadowLength=2 CreditsShadowLength=0
CreditsZoom=0.5 CreditsZoom=1.0
[WheelItemDisplay] [WheelItemDisplay]
IconX=-136 IconX=-136
@@ -722,19 +722,19 @@ SecondsToShow=10
NextScreen=ScreenHighScores NextScreen=ScreenHighScores
[ScreenHighScores] [ScreenHighScores]
SecondsToShow=10 SecondsToShow=30
NextScreen=ScreenMemoryCard NextScreen=ScreenMemoryCard
[ScreenMemoryCard] [ScreenMemoryCard]
SecondsToShow=10 SecondsToShow=5
NextScreen=ScreenWarning NextScreen=ScreenWarning
[ScreenWarning] [ScreenWarning]
SecondsToShow=10 SecondsToShow=5
NextScreen=ScreenCompany NextScreen=ScreenCompany
[ScreenCompany] [ScreenCompany]
SecondsToShow=10 SecondsToShow=5
NextScreen=ScreenAlbums NextScreen=ScreenAlbums
[ScreenAlbums] [ScreenAlbums]
@@ -742,9 +742,13 @@ SecondsToShow=10
NextScreen=ScreenLogo NextScreen=ScreenLogo
[ScreenLogo] [ScreenLogo]
SecondsToShow=20 SecondsToShow=5
NextScreen=ScreenDemonstration NextScreen=ScreenDemonstration
[ScreenDemonstration] [ScreenDemonstration]
SecondsToShow=30 SecondsToShow=30
NextScreen=ScreenHowToPlay
[ScreenHowToPlay]
SecondsToShow=30
NextScreen=ScreenUnlock NextScreen=ScreenUnlock
+18
View File
@@ -20,6 +20,8 @@
Actor::Actor() Actor::Actor()
{ {
m_bFirstUpdate = true;
m_iNumTweenStates = 0; m_iNumTweenStates = 0;
m_size = RageVector2( 1, 1 ); m_size = RageVector2( 1, 1 );
@@ -198,10 +200,26 @@ void Actor::UpdateTweening( float fDeltaTime )
} }
} }
bool Actor::IsFirstUpdate()
{
return m_bFirstUpdate;
}
void Actor::FirstUpdate()
{
}
void Actor::Update( float fDeltaTime ) void Actor::Update( float fDeltaTime )
{ {
// LOG->Trace( "Actor::Update( %f )", fDeltaTime ); // LOG->Trace( "Actor::Update( %f )", fDeltaTime );
if( m_bFirstUpdate )
{
this->FirstUpdate();
m_bFirstUpdate = false;
}
// update effect // update effect
switch( m_Effect ) switch( m_Effect )
{ {
+4 -10
View File
@@ -49,6 +49,8 @@ public:
virtual void BeginDraw(); // pushes transform onto world matrix stack virtual void BeginDraw(); // pushes transform onto world matrix stack
virtual void DrawPrimitives() = 0; // override with Actor specific action virtual void DrawPrimitives() = 0; // override with Actor specific action
virtual void EndDraw(); // pops transform from world matrix stack virtual void EndDraw(); // pops transform from world matrix stack
bool IsFirstUpdate();
virtual void FirstUpdate(); // called after object is constructed, but before the first call to Update()
virtual void Update( float fDeltaTime ); virtual void Update( float fDeltaTime );
virtual void UpdateTweening( float fDeltaTime ); virtual void UpdateTweening( float fDeltaTime );
@@ -188,19 +190,11 @@ public:
protected: protected:
/* bool m_bFirstUpdate;
RageVector2 m_size; // width, height
RageVector3 m_pos; // X-Y coordinate of where the center point will appear on screen
RageVector3 m_rotation; // X, Y, and Z m_rotation
RageVector2 m_scale; // X and Y zooming
RageColor m_colorDiffuse[4]; // 4 corner colors - left to right, top to bottom
RageColor m_colorGlow;
*/
// //
// Stuff for tweening // Stuff for tweening
// //
struct TweenState struct TweenState
{ {
// start and end position for tweening // start and end position for tweening
+6
View File
@@ -34,6 +34,7 @@ enum // DanceButtons
DANCE_BUTTON_MENURIGHT, DANCE_BUTTON_MENURIGHT,
DANCE_BUTTON_MENUUP, DANCE_BUTTON_MENUUP,
DANCE_BUTTON_MENUDOWN, DANCE_BUTTON_MENUDOWN,
DANCE_BUTTON_INSERTCOIN,
NUM_DANCE_BUTTONS, // leave this at the end NUM_DANCE_BUTTONS, // leave this at the end
}; };
@@ -50,6 +51,7 @@ enum // PumpButtons
PUMP_BUTTON_MENURIGHT, PUMP_BUTTON_MENURIGHT,
PUMP_BUTTON_MENUUP, PUMP_BUTTON_MENUUP,
PUMP_BUTTON_MENUDOWN, PUMP_BUTTON_MENUDOWN,
PUMP_BUTTON_INSERTCOIN,
NUM_PUMP_BUTTONS, // leave this at the end NUM_PUMP_BUTTONS, // leave this at the end
}; };
@@ -68,6 +70,7 @@ enum // EZ2Buttons
EZ2_BUTTON_MENURIGHT, EZ2_BUTTON_MENURIGHT,
EZ2_BUTTON_MENUUP, EZ2_BUTTON_MENUUP,
EZ2_BUTTON_MENUDOWN, EZ2_BUTTON_MENUDOWN,
EZ2_BUTTON_INSERTCOIN,
NUM_EZ2_BUTTONS, // leave this at the end NUM_EZ2_BUTTONS, // leave this at the end
}; };
@@ -84,6 +87,7 @@ enum // ParaButtons
PARA_BUTTON_MENURIGHT, PARA_BUTTON_MENURIGHT,
PARA_BUTTON_MENUUP, PARA_BUTTON_MENUUP,
PARA_BUTTON_MENUDOWN, PARA_BUTTON_MENUDOWN,
PARA_BUTTON_INSERTCOIN,
NUM_PARA_BUTTONS, // leave this at the end NUM_PARA_BUTTONS, // leave this at the end
}; };
@@ -103,6 +107,7 @@ enum // 3DDX Buttons
DS3DDX_BUTTON_MENURIGHT, DS3DDX_BUTTON_MENURIGHT,
DS3DDX_BUTTON_MENUUP, DS3DDX_BUTTON_MENUUP,
DS3DDX_BUTTON_MENUDOWN, DS3DDX_BUTTON_MENUDOWN,
DS3DDX_BUTTON_INSERTCOIN,
NUM_DS3DDX_BUTTONS, // leave this at the end. NUM_DS3DDX_BUTTONS, // leave this at the end.
}; };
@@ -125,6 +130,7 @@ enum // BM Buttons
BM_BUTTON_MENURIGHT, BM_BUTTON_MENURIGHT,
BM_BUTTON_MENUUP, BM_BUTTON_MENUUP,
BM_BUTTON_MENUDOWN, BM_BUTTON_MENUDOWN,
BM_BUTTON_INSERTCOIN,
NUM_BM_BUTTONS, // leave this at the end. NUM_BM_BUTTONS, // leave this at the end.
}; };
+36
View File
@@ -78,6 +78,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"MenuRight", "MenuRight",
"MenuUp", "MenuUp",
"MenuDown", "MenuDown",
"Insert Coin",
}, },
{ // m_szSecondaryFunction { // m_szSecondaryFunction
"(MenuLeft)", "(MenuLeft)",
@@ -92,6 +93,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"",
}, },
{ // m_DedicatedMenuButton { // m_DedicatedMenuButton
DANCE_BUTTON_MENULEFT, // MENU_BUTTON_LEFT DANCE_BUTTON_MENULEFT, // MENU_BUTTON_LEFT
@@ -100,6 +102,7 @@ GameDef g_GameDefs[NUM_GAMES] =
DANCE_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN DANCE_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN
DANCE_BUTTON_START, // MENU_BUTTON_START DANCE_BUTTON_START, // MENU_BUTTON_START
DANCE_BUTTON_BACK, // MENU_BUTTON_BACK DANCE_BUTTON_BACK, // MENU_BUTTON_BACK
DANCE_BUTTON_INSERTCOIN,// MENU_BUTTON_INSERTCOIN
}, },
{ // m_SecondaryMenuButton { // m_SecondaryMenuButton
DANCE_BUTTON_LEFT, // MENU_BUTTON_LEFT DANCE_BUTTON_LEFT, // MENU_BUTTON_LEFT
@@ -108,6 +111,7 @@ GameDef g_GameDefs[NUM_GAMES] =
DANCE_BUTTON_DOWN, // MENU_BUTTON_DOWN DANCE_BUTTON_DOWN, // MENU_BUTTON_DOWN
DANCE_BUTTON_START, // MENU_BUTTON_START DANCE_BUTTON_START, // MENU_BUTTON_START
DANCE_BUTTON_BACK, // MENU_BUTTON_BACK DANCE_BUTTON_BACK, // MENU_BUTTON_BACK
DANCE_BUTTON_INSERTCOIN,// MENU_BUTTON_INSERTCOIN
}, },
{ // m_iDefaultKeyboardKey { // m_iDefaultKeyboardKey
{ // PLAYER_1 { // PLAYER_1
@@ -123,6 +127,7 @@ GameDef g_GameDefs[NUM_GAMES] =
-1, //no default key // DANCE_BUTTON_MENURIGHT -1, //no default key // DANCE_BUTTON_MENURIGHT
SDLK_UP, // DANCE_BUTTON_MENUUP SDLK_UP, // DANCE_BUTTON_MENUUP
SDLK_DOWN, // DANCE_BUTTON_MENUDOWN SDLK_DOWN, // DANCE_BUTTON_MENUDOWN
SDLK_F1, // DANCE_BUTTON_INSERTCOIN
}, },
{ // PLAYER_2 { // PLAYER_2
SDLK_KP4, // DANCE_BUTTON_LEFT, SDLK_KP4, // DANCE_BUTTON_LEFT,
@@ -137,6 +142,7 @@ GameDef g_GameDefs[NUM_GAMES] =
-1, //no default key // DANCE_BUTTON_MENURIGHT -1, //no default key // DANCE_BUTTON_MENURIGHT
-1, //no default key // DANCE_BUTTON_MENUUP -1, //no default key // DANCE_BUTTON_MENUUP
-1, //no default key // DANCE_BUTTON_MENUDOWN -1, //no default key // DANCE_BUTTON_MENUDOWN
SDLK_F2, // DANCE_BUTTON_INSERTCOIN
}, },
} }
}, },
@@ -157,6 +163,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"MenuRight", "MenuRight",
"MenuUp", "MenuUp",
"MenuDown", "MenuDown",
"Insert Coin",
}, },
{ // m_szSecondaryFunction { // m_szSecondaryFunction
"(MenuUp)", "(MenuUp)",
@@ -170,6 +177,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"",
}, },
{ // m_DedicatedMenuButton { // m_DedicatedMenuButton
PUMP_BUTTON_MENULEFT, // MENU_BUTTON_LEFT PUMP_BUTTON_MENULEFT, // MENU_BUTTON_LEFT
@@ -178,6 +186,7 @@ GameDef g_GameDefs[NUM_GAMES] =
PUMP_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN PUMP_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN
PUMP_BUTTON_START, // MENU_BUTTON_START PUMP_BUTTON_START, // MENU_BUTTON_START
PUMP_BUTTON_BACK, // MENU_BUTTON_BACK PUMP_BUTTON_BACK, // MENU_BUTTON_BACK
PUMP_BUTTON_INSERTCOIN,// MENU_BUTTON_INSERTCOIN
}, },
{ // m_SecondaryMenuButton { // m_SecondaryMenuButton
PUMP_BUTTON_DOWNLEFT, // MENU_BUTTON_LEFT PUMP_BUTTON_DOWNLEFT, // MENU_BUTTON_LEFT
@@ -186,6 +195,7 @@ GameDef g_GameDefs[NUM_GAMES] =
PUMP_BUTTON_UPRIGHT, // MENU_BUTTON_DOWN PUMP_BUTTON_UPRIGHT, // MENU_BUTTON_DOWN
PUMP_BUTTON_CENTER, // MENU_BUTTON_START PUMP_BUTTON_CENTER, // MENU_BUTTON_START
PUMP_BUTTON_BACK, // MENU_BUTTON_BACK PUMP_BUTTON_BACK, // MENU_BUTTON_BACK
PUMP_BUTTON_INSERTCOIN,// MENU_BUTTON_INSERTCOIN
}, },
{ // m_iDefaultKeyboardKey { // m_iDefaultKeyboardKey
{ // PLAYER_1 { // PLAYER_1
@@ -200,6 +210,7 @@ GameDef g_GameDefs[NUM_GAMES] =
SDLK_RIGHT, // PUMP_BUTTON_MENURIGHT SDLK_RIGHT, // PUMP_BUTTON_MENURIGHT
SDLK_UP, // PUMP_BUTTON_MENUUP SDLK_UP, // PUMP_BUTTON_MENUUP
SDLK_DOWN, // PUMP_BUTTON_MENUDOWN SDLK_DOWN, // PUMP_BUTTON_MENUDOWN
SDLK_F1, // PUMP_BUTTON_INSERTCOIN
}, },
{ // PLAYER_2 { // PLAYER_2
SDLK_KP7, // PUMP_BUTTON_UPLEFT, SDLK_KP7, // PUMP_BUTTON_UPLEFT,
@@ -213,6 +224,7 @@ GameDef g_GameDefs[NUM_GAMES] =
-1, //no default key // PUMP_BUTTON_MENURIGHT -1, //no default key // PUMP_BUTTON_MENURIGHT
-1, //no default key // PUMP_BUTTON_MENUUP -1, //no default key // PUMP_BUTTON_MENUUP
-1, //no default key // PUMP_BUTTON_MENUDOWN -1, //no default key // PUMP_BUTTON_MENUDOWN
SDLK_F2, // PUMP_BUTTON_INSERTCOIN
}, },
} }
}, },
@@ -235,6 +247,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"MenuRight", "MenuRight",
"MenuUp", "MenuUp",
"MenuDown", "MenuDown",
"Insert Coin",
}, },
{ // m_szSecondaryFunction { // m_szSecondaryFunction
"(MenuUp)", "(MenuUp)",
@@ -250,6 +263,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"",
}, },
{ // m_DedicatedMenuButton { // m_DedicatedMenuButton
EZ2_BUTTON_MENULEFT, // MENU_BUTTON_LEFT EZ2_BUTTON_MENULEFT, // MENU_BUTTON_LEFT
@@ -258,6 +272,7 @@ GameDef g_GameDefs[NUM_GAMES] =
EZ2_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN EZ2_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN
EZ2_BUTTON_START, // MENU_BUTTON_START EZ2_BUTTON_START, // MENU_BUTTON_START
EZ2_BUTTON_BACK, // MENU_BUTTON_BACK EZ2_BUTTON_BACK, // MENU_BUTTON_BACK
EZ2_BUTTON_INSERTCOIN, // MENU_BUTTON_INSERTCOIN
}, },
{ // m_SecondaryMenuButton { // m_SecondaryMenuButton
EZ2_BUTTON_HANDUPLEFT, // MENU_BUTTON_LEFT EZ2_BUTTON_HANDUPLEFT, // MENU_BUTTON_LEFT
@@ -266,6 +281,7 @@ GameDef g_GameDefs[NUM_GAMES] =
EZ2_BUTTON_FOOTUPRIGHT, // MENU_BUTTON_DOWN EZ2_BUTTON_FOOTUPRIGHT, // MENU_BUTTON_DOWN
EZ2_BUTTON_FOOTDOWN, // MENU_BUTTON_START EZ2_BUTTON_FOOTDOWN, // MENU_BUTTON_START
EZ2_BUTTON_BACK, // MENU_BUTTON_BACK EZ2_BUTTON_BACK, // MENU_BUTTON_BACK
EZ2_BUTTON_INSERTCOIN, // MENU_BUTTON_INSERTCOIN
}, },
{ // m_iDefaultKeyboardKey { // m_iDefaultKeyboardKey
{ // PLAYER_1 { // PLAYER_1
@@ -282,6 +298,7 @@ GameDef g_GameDefs[NUM_GAMES] =
SDLK_RIGHT, // EZ2_BUTTON_MENURIGHT SDLK_RIGHT, // EZ2_BUTTON_MENURIGHT
SDLK_UP, // EZ2_BUTTON_MENUUP SDLK_UP, // EZ2_BUTTON_MENUUP
SDLK_DOWN, // EZ2_BUTTON_MENUDOWN SDLK_DOWN, // EZ2_BUTTON_MENUDOWN
SDLK_F1, // EZ2_BUTTON_INSERTCOIN
}, },
{ // PLAYER_2 { // PLAYER_2
-1, // EZ2_BUTTON_FOOTUPLEFT, -1, // EZ2_BUTTON_FOOTUPLEFT,
@@ -297,6 +314,7 @@ GameDef g_GameDefs[NUM_GAMES] =
-1, //no default key // EZ2_BUTTON_MENURIGHT -1, //no default key // EZ2_BUTTON_MENURIGHT
-1, //no default key // EZ2_BUTTON_MENUUP -1, //no default key // EZ2_BUTTON_MENUUP
-1, //no default key // EZ2_BUTTON_MENUDOWN -1, //no default key // EZ2_BUTTON_MENUDOWN
SDLK_F2, // EZ2_BUTTON_INSERTCOIN
}, },
}, },
}, },
@@ -317,6 +335,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"MenuRight", "MenuRight",
"MenuUp", "MenuUp",
"MenuDown", "MenuDown",
"Insert Coin",
}, },
{ // m_szSecondaryFunction { // m_szSecondaryFunction
"(MenuLeft)", "(MenuLeft)",
@@ -330,6 +349,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"",
}, },
{ // m_DedicatedMenuButton { // m_DedicatedMenuButton
PARA_BUTTON_MENULEFT, // MENU_BUTTON_LEFT PARA_BUTTON_MENULEFT, // MENU_BUTTON_LEFT
@@ -338,6 +358,7 @@ GameDef g_GameDefs[NUM_GAMES] =
PARA_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN PARA_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN
PARA_BUTTON_START, // MENU_BUTTON_START PARA_BUTTON_START, // MENU_BUTTON_START
PARA_BUTTON_BACK, // MENU_BUTTON_BACK PARA_BUTTON_BACK, // MENU_BUTTON_BACK
PARA_BUTTON_INSERTCOIN,// MENU_BUTTON_INSERTCOIN
}, },
{ // m_SecondaryMenuButton { // m_SecondaryMenuButton
PARA_BUTTON_LEFT, // MENU_BUTTON_LEFT PARA_BUTTON_LEFT, // MENU_BUTTON_LEFT
@@ -346,6 +367,7 @@ GameDef g_GameDefs[NUM_GAMES] =
PARA_BUTTON_UPLEFT, // MENU_BUTTON_DOWN PARA_BUTTON_UPLEFT, // MENU_BUTTON_DOWN
PARA_BUTTON_START, // MENU_BUTTON_START PARA_BUTTON_START, // MENU_BUTTON_START
PARA_BUTTON_BACK, // MENU_BUTTON_BACK PARA_BUTTON_BACK, // MENU_BUTTON_BACK
PARA_BUTTON_INSERTCOIN,// MENU_BUTTON_INSERTCOIN
}, },
{ // m_iDefaultKeyboardKey { // m_iDefaultKeyboardKey
{ // PLAYER_1 { // PLAYER_1
@@ -360,6 +382,7 @@ GameDef g_GameDefs[NUM_GAMES] =
SDLK_RIGHT, //no default key // PARA_BUTTON_MENURIGHT SDLK_RIGHT, //no default key // PARA_BUTTON_MENURIGHT
SDLK_UP, // PARA_BUTTON_MENUUP SDLK_UP, // PARA_BUTTON_MENUUP
SDLK_DOWN, // PARA_BUTTON_MENUDOWN SDLK_DOWN, // PARA_BUTTON_MENUDOWN
SDLK_F1, // PARA_BUTTON_INSERTCOIN
}, },
{ // PLAYER_2 { // PLAYER_2
-1, // PARA_BUTTON_LEFT, -1, // PARA_BUTTON_LEFT,
@@ -373,6 +396,7 @@ GameDef g_GameDefs[NUM_GAMES] =
-1, //no default key // PARA_BUTTON_MENURIGHT -1, //no default key // PARA_BUTTON_MENURIGHT
-1, // PARA_BUTTON_MENUUP -1, // PARA_BUTTON_MENUUP
-1, -1,
-1, // PARA_BUTTON_INSERTCOIN
}, },
} }
}, },
@@ -396,6 +420,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"MenuRight", "MenuRight",
"MenuUp", "MenuUp",
"MenuDown", "MenuDown",
"Insert Coin",
}, },
{ // m_szSecondaryFunction { // m_szSecondaryFunction
"(MenuLeft)", "(MenuLeft)",
@@ -412,6 +437,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"",
}, },
{ // m_DedicatedMenuButton { // m_DedicatedMenuButton
DS3DDX_BUTTON_MENULEFT, // MENU_BUTTON_LEFT DS3DDX_BUTTON_MENULEFT, // MENU_BUTTON_LEFT
@@ -420,6 +446,7 @@ GameDef g_GameDefs[NUM_GAMES] =
DS3DDX_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN DS3DDX_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN
DS3DDX_BUTTON_START, // MENU_BUTTON_START DS3DDX_BUTTON_START, // MENU_BUTTON_START
DS3DDX_BUTTON_BACK, // MENU_BUTTON_BACK DS3DDX_BUTTON_BACK, // MENU_BUTTON_BACK
DS3DDX_BUTTON_INSERTCOIN,// MENU_BUTTON_INSERTCOIN
}, },
{ // m_SecondaryMenuButton { // m_SecondaryMenuButton
DS3DDX_BUTTON_HANDLEFT, // MENU_BUTTON_LEFT DS3DDX_BUTTON_HANDLEFT, // MENU_BUTTON_LEFT
@@ -428,6 +455,7 @@ GameDef g_GameDefs[NUM_GAMES] =
DS3DDX_BUTTON_HANDDOWN, // MENU_BUTTON_DOWN DS3DDX_BUTTON_HANDDOWN, // MENU_BUTTON_DOWN
DS3DDX_BUTTON_START, // MENU_BUTTON_START DS3DDX_BUTTON_START, // MENU_BUTTON_START
DS3DDX_BUTTON_BACK, // MENU_BUTTON_BACK DS3DDX_BUTTON_BACK, // MENU_BUTTON_BACK
DS3DDX_BUTTON_INSERTCOIN,// MENU_BUTTON_INSERTCOIN
}, },
{ // m_iDefaultKeyboardKey { // m_iDefaultKeyboardKey
{ // PLAYER_1 { // PLAYER_1
@@ -445,6 +473,7 @@ GameDef g_GameDefs[NUM_GAMES] =
SDLK_RIGHT, //no default key // DS3DDX_BUTTON_MENURIGHT SDLK_RIGHT, //no default key // DS3DDX_BUTTON_MENURIGHT
SDLK_UP, // DS3DDX_BUTTON_MENUUP SDLK_UP, // DS3DDX_BUTTON_MENUUP
SDLK_DOWN, // DS3DDX_BUTTON_MENUDOWN SDLK_DOWN, // DS3DDX_BUTTON_MENUDOWN
SDLK_F1, // DS3DDX_BUTTON_INSERTCOIN
}, },
{ // PLAYER_2 { // PLAYER_2
-1, // DS3DDX_BUTTON_HANDLEFT, -1, // DS3DDX_BUTTON_HANDLEFT,
@@ -461,6 +490,7 @@ GameDef g_GameDefs[NUM_GAMES] =
-1, //no default key // DS3DDX_BUTTON_MENURIGHT -1, //no default key // DS3DDX_BUTTON_MENURIGHT
-1, // DS3DDX_BUTTON_MENUUP -1, // DS3DDX_BUTTON_MENUUP
-1, // DS3DDX_BUTTON_MENUDOWN -1, // DS3DDX_BUTTON_MENUDOWN
-1, // DS3DDX_BUTTON_INSERTCOIN
}, },
} }
}, },
@@ -485,6 +515,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"MenuRight", "MenuRight",
"MenuUp", "MenuUp",
"MenuDown", "MenuDown",
"Insert Coin",
}, },
{ // m_szSecondaryFunction { // m_szSecondaryFunction
"(MenuLeft)", "(MenuLeft)",
@@ -503,6 +534,7 @@ GameDef g_GameDefs[NUM_GAMES] =
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"(dedicated)", "(dedicated)",
"",
}, },
{ // m_DedicatedMenuButton { // m_DedicatedMenuButton
BM_BUTTON_MENULEFT, // MENU_BUTTON_LEFT BM_BUTTON_MENULEFT, // MENU_BUTTON_LEFT
@@ -511,6 +543,7 @@ GameDef g_GameDefs[NUM_GAMES] =
BM_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN BM_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN
BM_BUTTON_START, // MENU_BUTTON_START BM_BUTTON_START, // MENU_BUTTON_START
BM_BUTTON_SELECT, // MENU_BUTTON_BACK BM_BUTTON_SELECT, // MENU_BUTTON_BACK
BM_BUTTON_INSERTCOIN,// MENU_BUTTON_INSERTCOIN
}, },
{ // m_SecondaryMenuButton { // m_SecondaryMenuButton
BM_BUTTON_KEY1, // MENU_BUTTON_LEFT BM_BUTTON_KEY1, // MENU_BUTTON_LEFT
@@ -519,6 +552,7 @@ GameDef g_GameDefs[NUM_GAMES] =
BM_BUTTON_SCRATCHDOWN, // MENU_BUTTON_DOWN BM_BUTTON_SCRATCHDOWN, // MENU_BUTTON_DOWN
BM_BUTTON_START, // MENU_BUTTON_START BM_BUTTON_START, // MENU_BUTTON_START
BM_BUTTON_SELECT, // MENU_BUTTON_BACK BM_BUTTON_SELECT, // MENU_BUTTON_BACK
BM_BUTTON_INSERTCOIN,// MENU_BUTTON_INSERTCOIN
}, },
{ // m_iDefaultKeyboardKey { // m_iDefaultKeyboardKey
{ // PLAYER_1 { // PLAYER_1
@@ -537,6 +571,7 @@ GameDef g_GameDefs[NUM_GAMES] =
SDLK_RIGHT, // BM_BUTTON_MENURIGHT SDLK_RIGHT, // BM_BUTTON_MENURIGHT
SDLK_UP, // BM_BUTTON_MENUUP SDLK_UP, // BM_BUTTON_MENUUP
SDLK_DOWN, // BM_BUTTON_MENUDOWN SDLK_DOWN, // BM_BUTTON_MENUDOWN
SDLK_F1, // BM_BUTTON_INSERTCOIN
}, },
{ // PLAYER_2 { // PLAYER_2
-1, // BM_BUTTON_KEY1, -1, // BM_BUTTON_KEY1,
@@ -554,6 +589,7 @@ GameDef g_GameDefs[NUM_GAMES] =
-1, // BM_BUTTON_MENURIGHT -1, // BM_BUTTON_MENURIGHT
-1, // BM_BUTTON_MENUUP -1, // BM_BUTTON_MENUUP
-1, // BM_BUTTON_MENUDOWN -1, // BM_BUTTON_MENUDOWN
-1, // BM_BUTTON_INSERTCOIN
}, },
} }
}, },
+1
View File
@@ -22,6 +22,7 @@ enum MenuButton
MENU_BUTTON_DOWN, MENU_BUTTON_DOWN,
MENU_BUTTON_START, MENU_BUTTON_START,
MENU_BUTTON_BACK, MENU_BUTTON_BACK,
MENU_BUTTON_INSERTCOIN,
NUM_MENU_BUTTONS, // leave this at the end NUM_MENU_BUTTONS, // leave this at the end
MENU_BUTTON_INVALID MENU_BUTTON_INVALID
}; };
-8
View File
@@ -17,7 +17,6 @@
Screen::Screen() Screen::Screen()
{ {
m_FirstUpdate = true;
} }
Screen::~Screen() Screen::~Screen()
@@ -106,10 +105,3 @@ void Screen::SendScreenMessage( ScreenMessage SM, float fDelay )
QSM.fDelayRemaining = fDelay; QSM.fDelayRemaining = fDelay;
m_QueuedMessages.push_back( QSM ); m_QueuedMessages.push_back( QSM );
} }
bool Screen::FirstUpdate()
{
bool ret = m_FirstUpdate;
m_FirstUpdate = false;
return ret;
}
-3
View File
@@ -39,9 +39,6 @@ public:
void SendScreenMessage( const ScreenMessage SM, const float fDelay ); void SendScreenMessage( const ScreenMessage SM, const float fDelay );
void ClearMessageQueue() { m_QueuedMessages.clear(); } void ClearMessageQueue() { m_QueuedMessages.clear(); }
/* Used only by ScreenManager::Update. */
bool FirstUpdate();
protected: protected:
// structure for holding messages sent to a Screen // structure for holding messages sent to a Screen
+48 -62
View File
@@ -37,33 +37,6 @@ const ScreenMessage SM_GoToNextScreen = ScreenMessage(SM_User+3);
ScreenAttract::ScreenAttract() ScreenAttract::ScreenAttract()
{ {
LOG->Trace( "ScreenAttract::ScreenAttract()" ); LOG->Trace( "ScreenAttract::ScreenAttract()" );
m_bFirstUpdate = true;
//
// I think it's better to do all the initialization here rather than have it scattered
// about in all the global singleton classes
//
GAMESTATE->Reset();
PREFSMAN->ReadGamePrefsFromDisk();
INPUTMAPPER->ReadMappingsFromDisk();
GAMESTATE->m_bPlayersCanJoin = true;
if( !GAMEMAN->DoesNoteSkinExist( GAMEMAN->GetCurNoteSkin() ) )
{
CStringArray asNoteSkinNames;
GAMEMAN->GetNoteSkinNames( asNoteSkinNames );
GAMEMAN->SwitchNoteSkin( asNoteSkinNames[0] );
}
if( !THEME->DoesThemeExist( THEME->GetCurThemeName() ) )
{
CString sGameName = GAMESTATE->GetCurrentGameDef()->m_szName;
if( THEME->DoesThemeExist( sGameName ) )
THEME->SwitchTheme( sGameName );
else
THEME->SwitchTheme( "default" );
}
PREFSMAN->SaveGamePrefsToDisk();
} }
@@ -77,36 +50,59 @@ void ScreenAttract::Input( const DeviceInput& DeviceI, const InputEventType type
{ {
// LOG->Trace( "ScreenAttract::Input()" ); // LOG->Trace( "ScreenAttract::Input()" );
if(type != IET_FIRST_PRESS) return; // don't care
if( m_Fade.IsClosing() ) if( m_Fade.IsClosing() )
return; return;
Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); if( MenuI.IsValid() )
{
switch( MenuI.button )
{
case MENU_BUTTON_LEFT:
case MENU_BUTTON_RIGHT:
m_Fade.CloseWipingRight( SM_GoToNextScreen );
break;
case MENU_BUTTON_START:
GAMESTATE->m_bSideIsJoined[MenuI.player] = true;
GAMESTATE->m_MasterPlayerNumber = MenuI.player;
GAMESTATE->m_bPlayersCanJoin = false;
SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","insert coin") );
::Sleep( 1000 ); // do a little pause, like the arcade does
SCREENMAN->SetNewScreen( "ScreenTitleMenu" );
break;
case MENU_BUTTON_BACK:
Exit();
break;
}
}
// Screen::Input( DeviceI, type, GameI, MenuI, StyleI );
}
void ScreenAttract::FirstUpdate()
{
// We have to do initialization in the first update because this->GetElementName() won't
// work until the object has been fully constructed.
m_Background.LoadFromAniDir( THEME->GetPathTo("BGAnimations",this->GetElementName()) );
this->AddChild( &m_Background );
m_Fade.SetClosed();
m_Fade.OpenWipingRight( SM_None );
this->AddChild( &m_Fade );
SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo(this->GetElementName()) );
m_soundStart.Load( THEME->GetPathTo("Sounds","menu start") );
SOUNDMAN->PlayMusic( THEME->GetPathTo("Sounds",this->GetElementName() + " music") );
this->SendScreenMessage( SM_BeginFadingOut, SECONDS_TO_SHOW );
} }
void ScreenAttract::Update( float fDelta ) void ScreenAttract::Update( float fDelta )
{ {
// We have to do initialization in the first update because this->GetElementName() won't
// work until the object has been fully constructed.
if( m_bFirstUpdate )
{
m_Background.LoadFromAniDir( THEME->GetPathTo("BGAnimations",this->GetElementName()) );
this->AddChild( &m_Background );
m_Fade.SetClosed();
m_Fade.OpenWipingRight( SM_None );
this->AddChild( &m_Fade );
SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo(this->GetElementName()) );
m_soundStart.Load( THEME->GetPathTo("Sounds","menu start") );
SOUNDMAN->PlayMusic( THEME->GetPathTo("Sounds",this->GetElementName() + " music") );
this->SendScreenMessage( SM_BeginFadingOut, SECONDS_TO_SHOW );
m_bFirstUpdate = false;
}
Screen::Update(fDelta); Screen::Update(fDelta);
} }
@@ -115,21 +111,11 @@ void ScreenAttract::HandleScreenMessage( const ScreenMessage SM )
switch( SM ) switch( SM )
{ {
case SM_BeginFadingOut: case SM_BeginFadingOut:
m_Fade.CloseWipingRight( SM_GoToNextScreen ); if( !m_Fade.IsClosing() )
m_Fade.CloseWipingRight( SM_GoToNextScreen );
break; break;
case SM_GoToNextScreen: case SM_GoToNextScreen:
SCREENMAN->SetNewScreen( NEXT_SCREEN ); SCREENMAN->SetNewScreen( NEXT_SCREEN );
break; break;
} }
} }
void ScreenAttract::MenuStart( PlayerNumber pn )
{
GAMESTATE->m_bSideIsJoined[pn] = true;
GAMESTATE->m_MasterPlayerNumber = pn;
GAMESTATE->m_bPlayersCanJoin = false;
SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","insert coin") );
::Sleep( 1000 ); // do a little pause, like the arcade does
SCREENMAN->SetNewScreen( "ScreenTitleMenu" );
}
+5 -5
View File
@@ -4,7 +4,8 @@
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Class: ScreenAttract Class: ScreenAttract
Desc: Base class for all attraction screens. Desc: Base class for all attraction screens. This class handles input
and coin logic
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford Chris Danford
@@ -27,16 +28,15 @@ public:
virtual ~ScreenAttract(); virtual ~ScreenAttract();
virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
virtual void FirstUpdate();
virtual void Update( float fDelta ); virtual void Update( float fDelta );
virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void HandleScreenMessage( const ScreenMessage SM );
private: protected:
void MenuStart( PlayerNumber pn );
virtual CString GetMetricName() = 0; // used to loop up theme metrics virtual CString GetMetricName() = 0; // used to loop up theme metrics
virtual CString GetElementName() = 0; // used to loop up theme elements virtual CString GetElementName() = 0; // used to loop up theme elements
bool m_bFirstUpdate;
BGAnimation m_Background; BGAnimation m_Background;
TransitionFade m_Fade; TransitionFade m_Fade;
RandomSample m_soundStart; RandomSample m_soundStart;
+196
View File
@@ -10,3 +10,199 @@
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
*/ */
#include "ScreenDemonstration.h"
#include "RageLog.h"
#include "ThemeManager.h"
#include "GameState.h"
#include "SongManager.h"
#include "StepMania.h"
#define SECONDS_TO_SHOW THEME->GetMetricF("ScreenDemonstration","SecondsToShow")
#define NEXT_SCREEN THEME->GetMetric("ScreenDemonstration","NextScreen")
const ScreenMessage SM_NotesEnded = ScreenMessage(SM_User+101); // MUST be same as in ScreenGameplay
const ScreenMessage SM_BeginFadingToNextScreen = ScreenMessage(SM_User+1000);
const ScreenMessage SM_GoToNextScreen = ScreenMessage(SM_User+1002);
ScreenDemonstration::ScreenDemonstration() : ScreenGameplay( false )
{
LOG->Trace( "ScreenDemonstration::ScreenDemonstration()" );
GAMESTATE->m_bDemonstration = true;
//
// Set the current song to prepare for a demonstration
//
switch( GAMESTATE->m_CurGame )
{
case GAME_DANCE: GAMESTATE->m_CurStyle = STYLE_DANCE_VERSUS; break;
case GAME_PUMP: GAMESTATE->m_CurStyle = STYLE_PUMP_VERSUS; break;
case GAME_EZ2: GAMESTATE->m_CurStyle = STYLE_EZ2_SINGLE_VERSUS; break;
case GAME_PARA: GAMESTATE->m_CurStyle = STYLE_PARA_SINGLE; break;
case GAME_DS3DDX: GAMESTATE->m_CurStyle = STYLE_DS3DDX_SINGLE; break;
case GAME_BM: GAMESTATE->m_CurStyle = STYLE_BM_SINGLE; break;
default: ASSERT(0);
}
GAMESTATE->m_PlayMode = PLAY_MODE_ARCADE;
//
// Search for a Song and Steps to play during the demo
//
for( int i=0; i<600; i++ ) // try 600 times
{
Song* pSong = SONGMAN->GetRandomSong();
if( pSong == NULL ) // returns NULL there are no songs
{
// we didn't find a song. Abort demonstration.
this->SendScreenMessage( SM_GoToNextScreen, 0 );
return;
}
if( pSong->m_apNotes.empty() )
continue; // skip
if( !pSong->HasMusic() )
continue; // skip
vector<Notes*> apNotes;
pSong->GetNotesThatMatch( GAMESTATE->GetCurrentStyleDef()->m_NotesType, apNotes );
if( apNotes.empty() )
continue; // skip
// Found something we can use!
Notes* pNotes = apNotes[ rand()%apNotes.size() ];
GAMESTATE->m_pCurSong = pSong;
for( int p=0; p<NUM_PLAYERS; p++ )
GAMESTATE->m_pCurNotes[p] = pNotes;
break; // done looking
}
ASSERT( GAMESTATE->m_pCurSong );
GAMESTATE->m_MasterPlayerNumber = PLAYER_1;
// choose some cool options
for( int p=0; p<NUM_PLAYERS; p++ )
{
if( !GAMESTATE->IsPlayerEnabled(p) )
continue;
GAMESTATE->m_PlayerOptions[p] = PlayerOptions();
if( RandomFloat(0,1)>0.8f )
GAMESTATE->m_PlayerOptions[p].m_fArrowScrollSpeed = 1.5f;
GAMESTATE->m_PlayerOptions[p].m_bEffects[ rand()%PlayerOptions::NUM_EFFECT_TYPES ] = true;
if( RandomFloat(0,1)>0.9f )
GAMESTATE->m_PlayerOptions[p].m_AppearanceType = PlayerOptions::APPEARANCE_HIDDEN;
if( RandomFloat(0,1)>0.9f )
GAMESTATE->m_PlayerOptions[p].m_AppearanceType = PlayerOptions::APPEARANCE_SUDDEN;
if( RandomFloat(0,1)>0.7f )
GAMESTATE->m_PlayerOptions[p].m_bReverseScroll = true;
if( RandomFloat(0,1)>0.8f )
GAMESTATE->m_PlayerOptions[p].m_bDark = true;
}
GAMESTATE->m_SongOptions = SongOptions();
GAMESTATE->m_SongOptions.m_LifeType = (randomf(0,1)>0.8f) ? SongOptions::LIFE_BATTERY : SongOptions::LIFE_BAR;
GAMESTATE->m_SongOptions.m_FailType = SongOptions::FAIL_OFF;
}
ScreenDemonstration::~ScreenDemonstration()
{
GAMESTATE->m_bDemonstration = false;
}
void ScreenDemonstration::FirstUpdate()
{
LOG->Trace( "ScreenDemonstration::FirstUpdate()" );
ScreenGameplay::FirstUpdate();
m_sprDemonstrationOverlay.Load( THEME->GetPathTo("Graphics","demonstration overlay") );
m_sprDemonstrationOverlay.SetXY( CENTER_X, CENTER_Y );
this->AddChild( &m_sprDemonstrationOverlay );
m_sprDemonstrationBlink.Load( THEME->GetPathTo("Graphics","demonstration blink") );
m_sprDemonstrationBlink.SetXY( CENTER_X, CENTER_Y );
m_sprDemonstrationBlink.SetEffectBlinking();
this->AddChild( &m_sprDemonstrationBlink );
m_Fade.OpenWipingRight();
this->ClearMessageQueue(); // remove all of the messages set in ScreenGameplay that animate "ready", "here we go", etc.
m_StarWipe.SetOpened();
m_DancingState = STATE_DANCING;
this->SendScreenMessage( SM_BeginFadingToNextScreen, SECONDS_TO_SHOW );
}
void ScreenDemonstration::Update( float fDeltaTime )
{
ScreenGameplay::Update( fDeltaTime );
m_textAutoPlay.SetDiffuse( RageColor(1,1,1,0) ); // hide autoplay
}
void ScreenDemonstration::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
{
//LOG->Trace( "ScreenDemonstration::Input()" );
if(type != IET_FIRST_PRESS) return; // don't care
if( m_Fade.IsClosing() )
return;
if( MenuI.IsValid() )
{
switch( MenuI.button )
{
case MENU_BUTTON_LEFT:
case MENU_BUTTON_RIGHT:
m_Fade.CloseWipingRight( SM_GoToNextScreen );
break;
case MENU_BUTTON_START:
m_soundMusic.Stop();
GAMESTATE->m_bSideIsJoined[MenuI.player] = true;
GAMESTATE->m_MasterPlayerNumber = MenuI.player;
GAMESTATE->m_bPlayersCanJoin = false;
SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","insert coin") );
::Sleep( 1000 ); // do a little pause, like the arcade does
SCREENMAN->SetNewScreen( "ScreenTitleMenu" );
break;
case MENU_BUTTON_BACK:
Exit();
break;
}
}
}
void ScreenDemonstration::HandleScreenMessage( const ScreenMessage SM )
{
switch( SM )
{
case SM_NotesEnded:
this->SendScreenMessage( SM_BeginFadingToNextScreen, 0 );
return;
case SM_BeginFadingToNextScreen:
m_Fade.CloseWipingRight( SM_GoToNextScreen );
return;
case SM_GoToNextScreen:
SCREENMAN->SetNewScreen( NEXT_SCREEN );
return;
}
ScreenGameplay::HandleScreenMessage( SM );
}
+14 -5
View File
@@ -9,16 +9,25 @@
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
*/ */
#include "ScreenAttract.h" #include "ScreenGameplay.h"
#include "Sprite.h"
class ScreenDemonstration : public ScreenAttract class ScreenDemonstration : public ScreenGameplay
{ {
public: public:
ScreenDemonstration();
~ScreenDemonstration();
virtual void FirstUpdate();
virtual void Update( float fDeltaTime );
virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
virtual void HandleScreenMessage( const ScreenMessage SM );
protected:
Sprite m_sprDemonstrationOverlay;
Sprite m_sprDemonstrationBlink;
private:
virtual CString GetMetricName() { return "Demonstration"; }; // used to look up theme metrics
virtual CString GetElementName() { return "demonstration"; }; // used to look up theme elements
}; };
+102 -155
View File
@@ -72,7 +72,6 @@
#define SURVIVE_TIME_X THEME->GetMetricF("ScreenGameplay","SurviveTimeX") #define SURVIVE_TIME_X THEME->GetMetricF("ScreenGameplay","SurviveTimeX")
#define SURVIVE_TIME_Y THEME->GetMetricF("ScreenGameplay","SurviveTimeY") #define SURVIVE_TIME_Y THEME->GetMetricF("ScreenGameplay","SurviveTimeY")
#define SECONDS_BETWEEN_COMMENTS THEME->GetMetricF("ScreenGameplay","SecondsBetweenComments") #define SECONDS_BETWEEN_COMMENTS THEME->GetMetricF("ScreenGameplay","SecondsBetweenComments")
#define DEMONSTRATION_SECONDS THEME->GetMetricF("ScreenGameplay","DemonstrationSeconds")
#define TICK_EARLY_SECONDS THEME->GetMetricF("ScreenGameplay","TickEarlySeconds") #define TICK_EARLY_SECONDS THEME->GetMetricF("ScreenGameplay","TickEarlySeconds")
float g_fTickEarlySecondsCache = 0; // reading directly out of theme metrics is slow float g_fTickEarlySecondsCache = 0; // reading directly out of theme metrics is slow
@@ -81,7 +80,6 @@ float g_fTickEarlySecondsCache = 0; // reading directly out of theme metrics is
// received while STATE_DANCING // received while STATE_DANCING
const ScreenMessage SM_NotesEnded = ScreenMessage(SM_User+101); const ScreenMessage SM_NotesEnded = ScreenMessage(SM_User+101);
const ScreenMessage SM_BeginLoadingNextSong = ScreenMessage(SM_User+102); const ScreenMessage SM_BeginLoadingNextSong = ScreenMessage(SM_User+102);
const ScreenMessage SM_BeginFadingToTitleMenu = ScreenMessage(SM_User+103);
const ScreenMessage SM_PlayToastySound = ScreenMessage(SM_User+105); const ScreenMessage SM_PlayToastySound = ScreenMessage(SM_User+105);
// received while STATE_OUTRO // received while STATE_OUTRO
@@ -95,16 +93,20 @@ const ScreenMessage SM_BeginFailed = ScreenMessage(SM_User+121);
const ScreenMessage SM_ShowFailed = ScreenMessage(SM_User+122); const ScreenMessage SM_ShowFailed = ScreenMessage(SM_User+122);
const ScreenMessage SM_PlayFailComment = ScreenMessage(SM_User+123); const ScreenMessage SM_PlayFailComment = ScreenMessage(SM_User+123);
const ScreenMessage SM_GoToScreenAfterFail = ScreenMessage(SM_User+125); const ScreenMessage SM_GoToScreenAfterFail = ScreenMessage(SM_User+125);
const ScreenMessage SM_GoToTitleMenu = ScreenMessage(SM_User+126);
ScreenGameplay::ScreenGameplay() ScreenGameplay::ScreenGameplay( bool bLoadSounds )
{ {
LOG->Trace( "ScreenGameplay::ScreenGameplay()" ); LOG->Trace( "ScreenGameplay::ScreenGameplay()" );
int p; /* Important! Don't do any with GAMESTATE in the ScreenGameplay constructor.
for( p=0; p<NUM_PLAYERS; p++ ) * ScreenDemonstration sets the song and other properties in its constructor,
* which is always called after the ScreenGameplay constructor. Instead,
* do this initialization in FirstUpdate()
*/
for( int p=0; p<NUM_PLAYERS; p++ )
{ {
m_pLifeMeter[p] = NULL; m_pLifeMeter[p] = NULL;
m_pScoreDisplay[p] = NULL; m_pScoreDisplay[p] = NULL;
@@ -115,16 +117,55 @@ ScreenGameplay::ScreenGameplay()
SOUNDMAN->music->StopPlaying(); SOUNDMAN->music->StopPlaying();
m_soundToasty.Load( THEME->GetPathTo("Sounds","gameplay toasty") );
if( bLoadSounds ) // don't load sounds if just playing demonstration
{
m_soundFail.Load( THEME->GetPathTo("Sounds","gameplay failed") );
m_soundTryExtraStage.Load( THEME->GetPathTo("Sounds","gameplay try extra stage") );
m_soundOniDie.Load( THEME->GetPathTo("Sounds","gameplay oni die") );
m_announcerReady.Load( ANNOUNCER->GetPathTo("gameplay ready") );
if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() )
m_announcerHereWeGo.Load( ANNOUNCER->GetPathTo("gameplay here we go extra") );
else if( GAMESTATE->IsFinalStage() )
m_announcerHereWeGo.Load( ANNOUNCER->GetPathTo("gameplay here we go final") );
else
m_announcerHereWeGo.Load( ANNOUNCER->GetPathTo("gameplay here we go normal") );
m_announcerDanger.Load( ANNOUNCER->GetPathTo("gameplay comment danger") );
m_announcerGood.Load( ANNOUNCER->GetPathTo("gameplay comment good") );
m_announcerHot.Load( ANNOUNCER->GetPathTo("gameplay comment hot") );
m_announcerOni.Load( ANNOUNCER->GetPathTo("gameplay comment oni") );
m_announcer100Combo.Load( ANNOUNCER->GetPathTo("gameplay 100 combo") );
m_announcer200Combo.Load( ANNOUNCER->GetPathTo("gameplay 200 combo") );
m_announcer300Combo.Load( ANNOUNCER->GetPathTo("gameplay 300 combo") );
m_announcer400Combo.Load( ANNOUNCER->GetPathTo("gameplay 400 combo") );
m_announcer500Combo.Load( ANNOUNCER->GetPathTo("gameplay 500 combo") );
m_announcer600Combo.Load( ANNOUNCER->GetPathTo("gameplay 600 combo") );
m_announcer700Combo.Load( ANNOUNCER->GetPathTo("gameplay 700 combo") );
m_announcer800Combo.Load( ANNOUNCER->GetPathTo("gameplay 800 combo") );
m_announcer900Combo.Load( ANNOUNCER->GetPathTo("gameplay 900 combo") );
m_announcer1000Combo.Load( ANNOUNCER->GetPathTo("gameplay 1000 combo") );
m_announcerComboStopped.Load( ANNOUNCER->GetPathTo("gameplay combo stopped") );
}
m_iRowLastCrossed = -1;
m_soundAssistTick.Load( THEME->GetPathTo("Sounds","gameplay assist tick") );
}
void ScreenGameplay::FirstUpdate()
{
Screen::FirstUpdate();
/* It's OK to operate on GAMESTATE here, but not in the constructor */
GAMESTATE->ResetStageStatistics(); // clear values GAMESTATE->ResetStageStatistics(); // clear values
const bool bExtra = GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2();
const bool bReverse[NUM_PLAYERS] = {
GAMESTATE->m_PlayerOptions[0].m_bReverseScroll,
GAMESTATE->m_PlayerOptions[1].m_bReverseScroll
};
// Update possible dance points // Update possible dance points
for( p=0; p<NUM_PLAYERS; p++ ) for( int p=0; p<NUM_PLAYERS; p++ )
{ {
if( !GAMESTATE->IsPlayerEnabled(p) ) if( !GAMESTATE->IsPlayerEnabled(p) )
continue; // skip continue; // skip
@@ -158,6 +199,16 @@ ScreenGameplay::ScreenGameplay()
} }
} }
const bool bExtra = GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2();
const bool bReverse[NUM_PLAYERS] = {
GAMESTATE->m_PlayerOptions[0].m_bReverseScroll,
GAMESTATE->m_PlayerOptions[1].m_bReverseScroll
};
m_bChangedOffsetOrBPM = (GAMESTATE->m_SongOptions.m_AutoAdjust == SongOptions::ADJUST_ON); m_bChangedOffsetOrBPM = (GAMESTATE->m_SongOptions.m_AutoAdjust == SongOptions::ADJUST_ON);
@@ -232,16 +283,6 @@ ScreenGameplay::ScreenGameplay()
m_textStageNumber.SetText( GAMESTATE->GetStageText() ); m_textStageNumber.SetText( GAMESTATE->GetStageText() );
m_textStageNumber.SetDiffuse( GAMESTATE->GetStageColor() ); m_textStageNumber.SetDiffuse( GAMESTATE->GetStageColor() );
Song* pSong;
pSong = GAMESTATE->m_pCurSong;
m_BPMDisplay.SetXY( BPM_X, BPM_Y );
m_BPMDisplay.SetZoom( BPM_ZOOM );
this->AddChild( &m_BPMDisplay );
float fMinBPM, fMaxBPM;
pSong->GetMinMaxBPM( fMinBPM, fMaxBPM );
m_BPMDisplay.SetBPMRange( fMinBPM, fMaxBPM );
for( p=0; p<NUM_PLAYERS; p++ ) for( p=0; p<NUM_PLAYERS; p++ )
{ {
m_textCourseSongNumber[p].LoadFromFont( THEME->GetPathTo("Fonts","Header2") ); m_textCourseSongNumber[p].LoadFromFont( THEME->GetPathTo("Fonts","Header2") );
@@ -323,7 +364,6 @@ ScreenGameplay::ScreenGameplay()
m_textPlayerOptions[p].SetXY( PLAYER_OPTIONS_X(p), PLAYER_OPTIONS_Y(p,bExtra) ); m_textPlayerOptions[p].SetXY( PLAYER_OPTIONS_X(p), PLAYER_OPTIONS_Y(p,bExtra) );
m_textPlayerOptions[p].SetZoom( 0.5f ); m_textPlayerOptions[p].SetZoom( 0.5f );
m_textPlayerOptions[p].SetDiffuse( RageColor(1,1,1,1) ); m_textPlayerOptions[p].SetDiffuse( RageColor(1,1,1,1) );
m_textPlayerOptions[p].SetText( GAMESTATE->m_PlayerOptions[p].GetString() );
this->AddChild( &m_textPlayerOptions[p] ); this->AddChild( &m_textPlayerOptions[p] );
} }
@@ -355,7 +395,7 @@ ScreenGameplay::ScreenGameplay()
m_textAutoPlay.LoadFromFont( THEME->GetPathTo("Fonts","normal") ); m_textAutoPlay.LoadFromFont( THEME->GetPathTo("Fonts","normal") );
m_textAutoPlay.SetXY( AUTOPLAY_X, AUTOPLAY_Y ); m_textAutoPlay.SetXY( AUTOPLAY_X, AUTOPLAY_Y );
m_textAutoPlay.SetText( "AutoPlay is ON" ); m_textAutoPlay.SetText( "AutoPlay is ON" );
m_textAutoPlay.SetDiffuse( RageColor(1,1,1,1) ); m_textAutoPlay.SetDiffuse( RageColor(1,1,1,PREFSMAN->m_bAutoPlay?1:0) );
this->AddChild( &m_textAutoPlay ); this->AddChild( &m_textAutoPlay );
@@ -390,20 +430,6 @@ ScreenGameplay::ScreenGameplay()
m_sprTryExtraStage.SetDiffuse( RageColor(1,1,1,0) ); m_sprTryExtraStage.SetDiffuse( RageColor(1,1,1,0) );
this->AddChild( &m_sprTryExtraStage ); this->AddChild( &m_sprTryExtraStage );
if( GAMESTATE->m_bDemonstration )
{
m_sprDemonstrationOverlay.Load( THEME->GetPathTo("Graphics","gameplay demonstration overlay") );
m_sprDemonstrationOverlay.SetXY( CENTER_X, CENTER_Y );
this->AddChild( &m_sprDemonstrationOverlay );
m_sprDemonstrationBlink.Load( THEME->GetPathTo("Graphics","gameplay demonstration blink") );
m_sprDemonstrationBlink.SetXY( CENTER_X, CENTER_Y );
m_sprDemonstrationBlink.SetEffectBlinking();
this->AddChild( &m_sprDemonstrationBlink );
m_Fade.OpenWipingRight();
}
m_Fade.SetOpened(); m_Fade.SetOpened();
this->AddChild( &m_Fade ); this->AddChild( &m_Fade );
@@ -419,60 +445,22 @@ ScreenGameplay::ScreenGameplay()
m_sprToasty.SetDiffuse( RageColor(1,1,1,0) ); m_sprToasty.SetDiffuse( RageColor(1,1,1,0) );
this->AddChild( &m_sprToasty ); this->AddChild( &m_sprToasty );
m_soundToasty.Load( THEME->GetPathTo("Sounds","gameplay toasty") ); Song* pSong;
pSong = GAMESTATE->m_pCurSong;
m_BPMDisplay.SetXY( BPM_X, BPM_Y );
m_BPMDisplay.SetZoom( BPM_ZOOM );
this->AddChild( &m_BPMDisplay );
float fMinBPM, fMaxBPM;
pSong->GetMinMaxBPM( fMinBPM, fMaxBPM );
m_BPMDisplay.SetBPMRange( fMinBPM, fMaxBPM );
if( !GAMESTATE->m_bDemonstration ) // don't load sounds if just playing demonstration
{
m_soundFail.Load( THEME->GetPathTo("Sounds","gameplay failed") );
m_soundTryExtraStage.Load( THEME->GetPathTo("Sounds","gameplay try extra stage") );
m_soundOniDie.Load( THEME->GetPathTo("Sounds","gameplay oni die") );
m_announcerReady.Load( ANNOUNCER->GetPathTo("gameplay ready") );
if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() )
m_announcerHereWeGo.Load( ANNOUNCER->GetPathTo("gameplay here we go extra") );
else if( GAMESTATE->IsFinalStage() )
m_announcerHereWeGo.Load( ANNOUNCER->GetPathTo("gameplay here we go final") );
else
m_announcerHereWeGo.Load( ANNOUNCER->GetPathTo("gameplay here we go normal") );
m_announcerDanger.Load( ANNOUNCER->GetPathTo("gameplay comment danger") );
m_announcerGood.Load( ANNOUNCER->GetPathTo("gameplay comment good") );
m_announcerHot.Load( ANNOUNCER->GetPathTo("gameplay comment hot") );
m_announcerOni.Load( ANNOUNCER->GetPathTo("gameplay comment oni") );
m_announcer100Combo.Load( ANNOUNCER->GetPathTo("gameplay 100 combo") );
m_announcer200Combo.Load( ANNOUNCER->GetPathTo("gameplay 200 combo") );
m_announcer300Combo.Load( ANNOUNCER->GetPathTo("gameplay 300 combo") );
m_announcer400Combo.Load( ANNOUNCER->GetPathTo("gameplay 400 combo") );
m_announcer500Combo.Load( ANNOUNCER->GetPathTo("gameplay 500 combo") );
m_announcer600Combo.Load( ANNOUNCER->GetPathTo("gameplay 600 combo") );
m_announcer700Combo.Load( ANNOUNCER->GetPathTo("gameplay 700 combo") );
m_announcer800Combo.Load( ANNOUNCER->GetPathTo("gameplay 800 combo") );
m_announcer900Combo.Load( ANNOUNCER->GetPathTo("gameplay 900 combo") );
m_announcer1000Combo.Load( ANNOUNCER->GetPathTo("gameplay 1000 combo") );
m_announcerComboStopped.Load( ANNOUNCER->GetPathTo("gameplay combo stopped") );
}
m_iRowLastCrossed = -1;
m_soundAssistTick.Load( THEME->GetPathTo("Sounds","gameplay assist tick") );
TweenOnScreen(); TweenOnScreen();
/* XXX: We set m_textPlayerOptions[p] above, so that won't for( int i=0; i<30; i++ )
* include options set by the course. Should it? -glenn */ this->SendScreenMessage( ScreenMessage(SM_User+i), i/2.0f ); // Send messages to we can get the introduction rolling
LoadNextSong( true );
if( GAMESTATE->m_bDemonstration ) LoadNextSong( true );
{
m_StarWipe.SetOpened();
m_DancingState = STATE_DANCING;
this->SendScreenMessage( SM_BeginFadingToTitleMenu, DEMONSTRATION_SECONDS );
}
else
{
for( int i=0; i<30; i++ )
this->SendScreenMessage( ScreenMessage(SM_User+i), i/2.0f ); // Send messages to we can get the introduction rolling
}
} }
ScreenGameplay::~ScreenGameplay() ScreenGameplay::~ScreenGameplay()
@@ -572,6 +560,9 @@ void ScreenGameplay::LoadNextSong( bool bFirstLoad )
if( !GAMESTATE->IsPlayerEnabled(p) ) if( !GAMESTATE->IsPlayerEnabled(p) )
continue; continue;
m_textPlayerOptions[p].SetText( GAMESTATE->m_PlayerOptions[p].GetString() );
// reset oni game over graphic // reset oni game over graphic
m_sprOniGameOver[p].SetY( SCREEN_TOP - m_sprOniGameOver[p].GetZoomedHeight()/2 ); m_sprOniGameOver[p].SetY( SCREEN_TOP - m_sprOniGameOver[p].GetZoomedHeight()/2 );
m_sprOniGameOver[p].SetDiffuse( RageColor(1,1,1,0) ); // 0 alpha so we don't waste time drawing while not visible m_sprOniGameOver[p].SetDiffuse( RageColor(1,1,1,0) ); // 0 alpha so we don't waste time drawing while not visible
@@ -661,7 +652,7 @@ bool ScreenGameplay::AllFailedEarlier()
} }
// play assist ticks // play assist ticks
bool ScreenGameplay::PlayTicks() const bool ScreenGameplay::IsTimeToPlayTicks() const
{ {
// Sound cards have a latency between when a sample is Play()ed and when the sound // Sound cards have a latency between when a sample is Play()ed and when the sound
// will start coming out the speaker. Compensate for this by boosting // will start coming out the speaker. Compensate for this by boosting
@@ -709,6 +700,8 @@ hehe - Andy)
void ScreenGameplay::Update( float fDeltaTime ) void ScreenGameplay::Update( float fDeltaTime )
{ {
Screen::Update( fDeltaTime );
int pn; int pn;
if( GAMESTATE->m_pCurSong == NULL ) if( GAMESTATE->m_pCurSong == NULL )
@@ -803,29 +796,25 @@ void ScreenGameplay::Update( float fDeltaTime )
// //
// Check to see if it's time to play a gameplay comment // Check to see if it's time to play a gameplay comment
// //
if( !GAMESTATE->m_bDemonstration ) // don't play announcer comments in demonstration m_fTimeLeftBeforeDancingComment -= fDeltaTime;
if( m_fTimeLeftBeforeDancingComment <= 0 )
{ {
m_fTimeLeftBeforeDancingComment -= fDeltaTime; switch( GAMESTATE->m_PlayMode )
if( m_fTimeLeftBeforeDancingComment <= 0 )
{ {
switch( GAMESTATE->m_PlayMode ) case PLAY_MODE_ARCADE:
{ if( OneIsHot() ) m_announcerHot.PlayRandom();
case PLAY_MODE_ARCADE: else if( AllAreInDanger() ) m_announcerDanger.PlayRandom();
if( OneIsHot() ) m_announcerHot.PlayRandom(); else m_announcerGood.PlayRandom();
else if( AllAreInDanger() ) m_announcerDanger.PlayRandom(); break;
else m_announcerGood.PlayRandom(); case PLAY_MODE_ONI:
break; case PLAY_MODE_ENDLESS:
case PLAY_MODE_ONI: m_announcerOni.PlayRandom();
case PLAY_MODE_ENDLESS: break;
m_announcerOni.PlayRandom(); default:
break; ASSERT(0);
default:
ASSERT(0);
}
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; // reset for the next comment
} }
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS; // reset for the next comment
} }
} }
@@ -849,16 +838,8 @@ void ScreenGameplay::Update( float fDeltaTime )
m_iRowLastCrossed = iRowNow; m_iRowLastCrossed = iRowNow;
} }
if(IsTimeToPlayTicks())
if(PlayTicks())
m_soundAssistTick.Play(); m_soundAssistTick.Play();
if( PREFSMAN->m_bAutoPlay && !GAMESTATE->m_bDemonstration )
m_textAutoPlay.SetDiffuse( RageColor(1,1,1,1) );
else
m_textAutoPlay.SetDiffuse( RageColor(1,1,1,0) );
Screen::Update( fDeltaTime );
} }
@@ -873,26 +854,6 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
//LOG->Trace( "ScreenGameplay::Input()" ); //LOG->Trace( "ScreenGameplay::Input()" );
if(type == IET_RELEASE) return; // don't care if(type == IET_RELEASE) return; // don't care
if( GAMESTATE->m_bDemonstration )
{
/* Special case:always allow escape. */
if( DeviceI.device==DEVICE_KEYBOARD && DeviceI.button==SDLK_ESCAPE && !m_Fade.IsClosing() )
{
this->SendScreenMessage( SM_BeginFadingToTitleMenu, 0 );
}
/* Since escape backs out, we want to allow any other back buttons to
* work, too, to avoid confusion. */
else if( (MenuI.button==MENU_BUTTON_START || MenuI.button==MENU_BUTTON_BACK)
&& !m_Fade.IsClosing() )
{
m_soundMusic.StopPlaying();
SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","insert coin") );
::Sleep( 1000 ); // do a little pause, like the arcade does
this->SendScreenMessage( SM_GoToTitleMenu, 0 );
}
return; // don't fall through below
}
// Handle special keys to adjust the offset // Handle special keys to adjust the offset
if( DeviceI.device == DEVICE_KEYBOARD ) if( DeviceI.device == DEVICE_KEYBOARD )
{ {
@@ -928,6 +889,7 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
break; break;
case SDLK_F8: case SDLK_F8:
PREFSMAN->m_bAutoPlay = !PREFSMAN->m_bAutoPlay; PREFSMAN->m_bAutoPlay = !PREFSMAN->m_bAutoPlay;
m_textAutoPlay.SetDiffuse( RageColor(1,1,1,PREFSMAN->m_bAutoPlay?1:0) );
break; break;
case SDLK_F9: case SDLK_F9:
case SDLK_F10: case SDLK_F10:
@@ -1146,12 +1108,6 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
// received while STATE_DANCING // received while STATE_DANCING
case SM_NotesEnded: case SM_NotesEnded:
{ {
if( GAMESTATE->m_bDemonstration ) // Don't show "CLEARED" in Demo
{
this->SendScreenMessage( SM_BeginFadingToTitleMenu, 0 );
return;
}
// save any statistics // save any statistics
int p; int p;
for( p=0; p<NUM_PLAYERS; p++ ) for( p=0; p<NUM_PLAYERS; p++ )
@@ -1237,9 +1193,6 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
LoadNextSong( false ); LoadNextSong( false );
m_OniFade.OpenWipingRight( SM_None ); m_OniFade.OpenWipingRight( SM_None );
break; break;
case SM_BeginFadingToTitleMenu:
m_Fade.CloseWipingRight( SM_GoToTitleMenu );
break;
case SM_BeginToasty: case SM_BeginToasty:
this->SendScreenMessage( SM_PlayToastySound, 0.3f ); this->SendScreenMessage( SM_PlayToastySound, 0.3f );
@@ -1490,9 +1443,6 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
else else
SCREENMAN->SetNewScreen( "ScreenGameOver" ); SCREENMAN->SetNewScreen( "ScreenGameOver" );
break; break;
case SM_GoToTitleMenu:
SCREENMAN->SetNewScreen( "ScreenTitleMenu" );
break;
} }
} }
@@ -1512,8 +1462,7 @@ void ScreenGameplay::TweenOnScreen()
{ {
float fOriginalY = apActorsInLifeFrame[i]->GetY(); float fOriginalY = apActorsInLifeFrame[i]->GetY();
apActorsInLifeFrame[i]->SetY( fOriginalY-100 ); apActorsInLifeFrame[i]->SetY( fOriginalY-100 );
if( !GAMESTATE->m_bDemonstration ) apActorsInLifeFrame[i]->BeginTweening( 0.5f ); // sleep
apActorsInLifeFrame[i]->BeginTweening( 0.5f ); // sleep
apActorsInLifeFrame[i]->BeginTweening( 1 ); apActorsInLifeFrame[i]->BeginTweening( 1 );
apActorsInLifeFrame[i]->SetTweenY( fOriginalY ); apActorsInLifeFrame[i]->SetTweenY( fOriginalY );
} }
@@ -1533,8 +1482,7 @@ void ScreenGameplay::TweenOnScreen()
{ {
float fOriginalY = apActorsInScoreFrame[i]->GetY(); float fOriginalY = apActorsInScoreFrame[i]->GetY();
apActorsInScoreFrame[i]->SetY( fOriginalY+100 ); apActorsInScoreFrame[i]->SetY( fOriginalY+100 );
if( !GAMESTATE->m_bDemonstration ) apActorsInScoreFrame[i]->BeginTweening( 0.5f ); // sleep
apActorsInScoreFrame[i]->BeginTweening( 0.5f ); // sleep
apActorsInScoreFrame[i]->BeginTweening( 1 ); apActorsInScoreFrame[i]->BeginTweening( 1 );
apActorsInScoreFrame[i]->SetTweenY( fOriginalY ); apActorsInScoreFrame[i]->SetTweenY( fOriginalY );
} }
@@ -1543,8 +1491,7 @@ void ScreenGameplay::TweenOnScreen()
{ {
float fOriginalX = m_DifficultyIcon[p].GetX(); float fOriginalX = m_DifficultyIcon[p].GetX();
m_DifficultyIcon[p].SetX( (p==PLAYER_1) ? fOriginalX-200 : fOriginalX+200 ); m_DifficultyIcon[p].SetX( (p==PLAYER_1) ? fOriginalX-200 : fOriginalX+200 );
if( !GAMESTATE->m_bDemonstration ) m_DifficultyIcon[p].BeginTweening( 0.5f ); // sleep
m_DifficultyIcon[p].BeginTweening( 0.5f ); // sleep
m_DifficultyIcon[p].BeginTweening( 1 ); m_DifficultyIcon[p].BeginTweening( 1 );
m_DifficultyIcon[p].SetTweenX( fOriginalX ); m_DifficultyIcon[p].SetTweenX( fOriginalX );
} }
+7 -7
View File
@@ -1,3 +1,5 @@
#ifndef SCREENGAMEPLAY_H
#define SCREENGAMEPLAY_H
/* /*
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Class: ScreenGameplay Class: ScreenGameplay
@@ -47,15 +49,16 @@ const ScreenMessage SM_ComboStopped = ScreenMessage(SM_User+210);
class ScreenGameplay : public Screen class ScreenGameplay : public Screen
{ {
public: public:
ScreenGameplay(); ScreenGameplay( bool bLoadSounds = true );
virtual ~ScreenGameplay(); virtual ~ScreenGameplay();
virtual void FirstUpdate();
virtual void Update( float fDeltaTime ); virtual void Update( float fDeltaTime );
virtual void DrawPrimitives(); virtual void DrawPrimitives();
virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI );
virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void HandleScreenMessage( const ScreenMessage SM );
private: protected:
void TweenOnScreen(); void TweenOnScreen();
void TweenOffScreen(); void TweenOffScreen();
@@ -66,7 +69,7 @@ private:
bool AllAreInDanger(); bool AllAreInDanger();
bool AllAreFailing(); bool AllAreFailing();
bool AllFailedEarlier(); bool AllFailedEarlier();
bool PlayTicks() const; bool IsTimeToPlayTicks() const;
enum DancingState { enum DancingState {
STATE_INTRO = 0, // not allowed to press Back STATE_INTRO = 0, // not allowed to press Back
@@ -123,9 +126,6 @@ private:
Sprite m_sprToasty; // easter egg Sprite m_sprToasty; // easter egg
Sprite m_sprDemonstrationOverlay;
Sprite m_sprDemonstrationBlink;
RandomSample m_soundFail; RandomSample m_soundFail;
RandomSample m_soundOniDie; RandomSample m_soundOniDie;
RandomSample m_soundTryExtraStage; RandomSample m_soundTryExtraStage;
@@ -156,4 +156,4 @@ private:
}; };
#endif
+7 -7
View File
@@ -37,8 +37,8 @@ ScreenInstructions::ScreenInstructions()
LOG->Trace( "ScreenInstructions::ScreenInstructions()" ); LOG->Trace( "ScreenInstructions::ScreenInstructions()" );
m_Menu.Load( m_Menu.Load(
THEME->GetPathTo("BGAnimations","How To Play"), THEME->GetPathTo("BGAnimations","Instructions"),
THEME->GetPathTo("Graphics","How To Play Top Edge"), THEME->GetPathTo("Graphics","Instructions Top Edge"),
HELP_TEXT, false, true, TIMER_SECONDS HELP_TEXT, false, true, TIMER_SECONDS
); );
this->AddChild( &m_Menu ); this->AddChild( &m_Menu );
@@ -56,13 +56,13 @@ ScreenInstructions::ScreenInstructions()
switch( GAMESTATE->m_PlayMode ) switch( GAMESTATE->m_PlayMode )
{ {
case PLAY_MODE_ARCADE: case PLAY_MODE_ARCADE:
sHowToPlayPath = THEME->GetPathTo("Graphics","how to play arcade"); sHowToPlayPath = THEME->GetPathTo("Graphics","instructions arcade");
break; break;
case PLAY_MODE_ENDLESS: case PLAY_MODE_ENDLESS:
sHowToPlayPath = THEME->GetPathTo("Graphics","how to play endless"); sHowToPlayPath = THEME->GetPathTo("Graphics","instructions endless");
break; break;
case PLAY_MODE_ONI: case PLAY_MODE_ONI:
sHowToPlayPath = THEME->GetPathTo("Graphics","how to play oni"); sHowToPlayPath = THEME->GetPathTo("Graphics","instructions oni");
break; break;
default: default:
ASSERT(0); ASSERT(0);
@@ -77,7 +77,7 @@ ScreenInstructions::ScreenInstructions()
m_sprHowToPlay.BeginTweening( 0.6f, Actor::TWEEN_BIAS_BEGIN ); m_sprHowToPlay.BeginTweening( 0.6f, Actor::TWEEN_BIAS_BEGIN );
m_sprHowToPlay.SetTweenX( CENTER_X ); m_sprHowToPlay.SetTweenX( CENTER_X );
SOUNDMAN->PlayMusic( THEME->GetPathTo("Sounds","how to play music") ); SOUNDMAN->PlayMusic( THEME->GetPathTo("Sounds","instructions music") );
} }
ScreenInstructions::~ScreenInstructions() ScreenInstructions::~ScreenInstructions()
@@ -96,7 +96,7 @@ void ScreenInstructions::DrawPrimitives()
{ {
m_Menu.DrawBottomLayer(); m_Menu.DrawBottomLayer();
m_Menu.DrawTopLayer(); m_Menu.DrawTopLayer();
Screen::DrawPrimitives(); // draw How To Play graphic on top of all the others! Screen::DrawPrimitives(); // draw instructions graphic on top of all the others!
} }
void ScreenInstructions::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) void ScreenInstructions::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
+6 -4
View File
@@ -102,10 +102,10 @@ void ScreenManager::Update( float fDeltaTime )
* *
* So, let's just drop the first update for every screen. * So, let's just drop the first update for every screen.
*/ */
if(m_ScreenStack[i]->FirstUpdate()) if( m_ScreenStack[i]->IsFirstUpdate() )
continue; m_ScreenStack[i]->Update( 0 );
else
m_ScreenStack[i]->Update( fDeltaTime ); m_ScreenStack[i]->Update( fDeltaTime );
} }
} }
@@ -197,6 +197,7 @@ void ScreenManager::Input( const DeviceInput& DeviceI, const InputEventType type
#include "ScreenLogo.h" #include "ScreenLogo.h"
#include "ScreenUnlock.h" #include "ScreenUnlock.h"
#include "ScreenDemonstration.h" #include "ScreenDemonstration.h"
#include "ScreenInstructions.h"
#include "ScreenPrompt.h" #include "ScreenPrompt.h"
#include "ScreenTextEntry.h" #include "ScreenTextEntry.h"
@@ -243,6 +244,7 @@ Screen* ScreenManager::MakeNewScreen( CString sClassName )
else if( 0==stricmp(sClassName, "ScreenLogo") ) ret = new ScreenLogo; else if( 0==stricmp(sClassName, "ScreenLogo") ) ret = new ScreenLogo;
else if( 0==stricmp(sClassName, "ScreenUnlock") ) ret = new ScreenUnlock; else if( 0==stricmp(sClassName, "ScreenUnlock") ) ret = new ScreenUnlock;
else if( 0==stricmp(sClassName, "ScreenDemonstration") ) ret = new ScreenDemonstration; else if( 0==stricmp(sClassName, "ScreenDemonstration") ) ret = new ScreenDemonstration;
else if( 0==stricmp(sClassName, "ScreenInstructions") ) ret = new ScreenInstructions;
else else
RageException::Throw( "Invalid Screen class name '%s'", sClassName.GetString() ); RageException::Throw( "Invalid Screen class name '%s'", sClassName.GetString() );
+1 -1
View File
@@ -46,7 +46,7 @@ public:
void RefreshCreditsMessages(); void RefreshCreditsMessages();
private: private:
vector<Screen*> m_ScreenStack; vector<Screen*> m_ScreenStack; // bottommost to topmost
vector<Screen*> m_ScreensToDelete; vector<Screen*> m_ScreensToDelete;
Screen *m_ScreenBuffered; Screen *m_ScreenBuffered;
+13
View File
@@ -95,6 +95,19 @@ void ScreenPrompt::Input( const DeviceInput& DeviceI, const InputEventType type,
if( m_Fade.IsOpening() ) if( m_Fade.IsOpening() )
return; return;
if( DeviceI.device == DEVICE_KEYBOARD )
{
switch( DeviceI.button )
{
case SDLK_LEFT:
this->MenuLeft( StyleI.player );
return;
case SDLK_RIGHT:
this->MenuLeft( StyleI.player );
return;
}
}
Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); Screen::Input( DeviceI, type, GameI, MenuI, StyleI );
} }
+3 -2
View File
@@ -18,6 +18,7 @@
#include "GameState.h" #include "GameState.h"
#include "InputMapper.h" #include "InputMapper.h"
#include "ThemeManager.h" #include "ThemeManager.h"
#include "StepMania.h"
enum { enum {
@@ -100,12 +101,12 @@ void ScreenSelectGame::ExportOptions()
void ScreenSelectGame::GoToPrevState() void ScreenSelectGame::GoToPrevState()
{ {
SCREENMAN->SetNewScreen( "ScreenTitleMenu" ); Reset();
} }
void ScreenSelectGame::GoToNextState() void ScreenSelectGame::GoToNextState()
{ {
SCREENMAN->SetNewScreen( "ScreenTitleMenu" ); Reset();
} }
+1 -1
View File
@@ -333,7 +333,7 @@ void ScreenSelectStyle::UpdateEnabledDisabled()
if( IsEnabled(i) ) if( IsEnabled(i) )
m_sprIcon[i].SetDiffuse( RageColor(1,1,1,1) ); m_sprIcon[i].SetDiffuse( RageColor(1,1,1,1) );
else else
m_sprIcon[i].SetDiffuse( RageColor(0.5f,0.5f,0.5f,1) ); m_sprIcon[i].SetDiffuse( RageColor(0.25f,0.25f,0.25f,1) );
} }
// Select first enabled style // Select first enabled style
+5 -111
View File
@@ -58,47 +58,19 @@ const CString CHOICE_TEXT[ScreenTitleMenu::NUM_TITLE_MENU_CHOICES] = {
#define COLOR_SELECTED THEME->GetMetricC("ScreenTitleMenu","ColorSelected") #define COLOR_SELECTED THEME->GetMetricC("ScreenTitleMenu","ColorSelected")
#define ZOOM_NOT_SELECTED THEME->GetMetricF("ScreenTitleMenu","ZoomNotSelected") #define ZOOM_NOT_SELECTED THEME->GetMetricF("ScreenTitleMenu","ZoomNotSelected")
#define ZOOM_SELECTED THEME->GetMetricF("ScreenTitleMenu","ZoomSelected") #define ZOOM_SELECTED THEME->GetMetricF("ScreenTitleMenu","ZoomSelected")
#define SECONDS_BEFORE_DEMONSTRATION THEME->GetMetricF("ScreenTitleMenu","SecondsBeforeDemonstration")
#define SECONDS_BETWEEN_ATTRACT THEME->GetMetricF("ScreenTitleMenu","SecondsBetweenAttract") #define SECONDS_BETWEEN_ATTRACT THEME->GetMetricF("ScreenTitleMenu","SecondsBetweenAttract")
#define HELP_TEXT THEME->GetMetric("ScreenTitleMenu","HelpText") #define HELP_TEXT THEME->GetMetric("ScreenTitleMenu","HelpText")
#define NEXT_SCREEN THEME->GetMetric("ScreenTitleMenu","NextScreen") #define NEXT_SCREEN THEME->GetMetric("ScreenTitleMenu","NextScreen")
const ScreenMessage SM_PlayAttract = ScreenMessage(SM_User+1); const ScreenMessage SM_PlayAttract = ScreenMessage(SM_User+1);
const ScreenMessage SM_GoToNextScreen = ScreenMessage(SM_User+12); const ScreenMessage SM_GoToNextScreen = ScreenMessage(SM_User+12);
const ScreenMessage SM_GoToDemonstration = ScreenMessage(SM_User+13); const ScreenMessage SM_GoToAttractLoop = ScreenMessage(SM_User+13);
ScreenTitleMenu::ScreenTitleMenu() ScreenTitleMenu::ScreenTitleMenu()
{ {
LOG->Trace( "ScreenTitleMenu::ScreenTitleMenu()" ); LOG->Trace( "ScreenTitleMenu::ScreenTitleMenu()" );
//
// I think it's better to do all the initialization here rather than have it scattered
// about in all the global singleton classes
//
GAMESTATE->Reset();
PREFSMAN->ReadGamePrefsFromDisk();
INPUTMAPPER->ReadMappingsFromDisk();
GAMESTATE->m_bPlayersCanJoin = true;
if( !GAMEMAN->DoesNoteSkinExist( GAMEMAN->GetCurNoteSkin() ) )
{
CStringArray asNoteSkinNames;
GAMEMAN->GetNoteSkinNames( asNoteSkinNames );
GAMEMAN->SwitchNoteSkin( asNoteSkinNames[0] );
}
if( !THEME->DoesThemeExist( THEME->GetCurThemeName() ) )
{
CString sGameName = GAMESTATE->GetCurrentGameDef()->m_szName;
if( THEME->DoesThemeExist( sGameName ) )
THEME->SwitchTheme( sGameName );
else
THEME->SwitchTheme( "default" );
}
PREFSMAN->SaveGamePrefsToDisk();
m_Background.LoadFromAniDir( THEME->GetPathTo("BGAnimations","title menu") ); m_Background.LoadFromAniDir( THEME->GetPathTo("BGAnimations","title menu") );
this->AddChild( &m_Background ); this->AddChild( &m_Background );
@@ -190,79 +162,14 @@ void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType ty
if( m_Fade.IsClosing() ) if( m_Fade.IsClosing() )
return; return;
/* Reset the demonstration timer when a key is pressed. */
TimeToDemonstration.GetDeltaTime();
if(DeviceI.device == DEVICE_KEYBOARD && DeviceI.button == SDLK_F1 && type == IET_FIRST_PRESS)
{
FadeToDemonstration();
return;
}
Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); Screen::Input( DeviceI, type, GameI, MenuI, StyleI );
} }
void ScreenTitleMenu::Update( float fDelta ) void ScreenTitleMenu::Update( float fDelta )
{ {
if(TimeToDemonstration.PeekDeltaTime() >= SECONDS_BEFORE_DEMONSTRATION)
{
FadeToDemonstration();
TimeToDemonstration.GetDeltaTime();
}
Screen::Update(fDelta); Screen::Update(fDelta);
} }
void ScreenTitleMenu::FadeToDemonstration()
{
// Set up the game state for a demonstration
switch( GAMESTATE->m_CurGame )
{
case GAME_DANCE: GAMESTATE->m_CurStyle = STYLE_DANCE_VERSUS; break;
case GAME_PUMP: GAMESTATE->m_CurStyle = STYLE_PUMP_VERSUS; break;
case GAME_EZ2: GAMESTATE->m_CurStyle = STYLE_EZ2_SINGLE_VERSUS; break;
case GAME_PARA: GAMESTATE->m_CurStyle = STYLE_PARA_SINGLE; break;
case GAME_DS3DDX: GAMESTATE->m_CurStyle = STYLE_DS3DDX_SINGLE; break;
case GAME_BM: GAMESTATE->m_CurStyle = STYLE_BM_SINGLE; break;
default: ASSERT(0);
}
GAMESTATE->m_PlayMode = PLAY_MODE_ARCADE;
if(!SONGMAN->ChooseRandomSong())
{
// Couldn't find Song/Notes to play. Abort demonstration!
GAMESTATE->Reset();
return;
}
ASSERT( GAMESTATE->m_pCurSong );
GAMESTATE->m_MasterPlayerNumber = PLAYER_1;
// choose some cool options
for( int p=0; p<NUM_PLAYERS; p++ )
{
if( !GAMESTATE->IsPlayerEnabled(p) )
continue;
if( RandomFloat(0,1)>0.8f )
GAMESTATE->m_PlayerOptions[p].m_fArrowScrollSpeed = 1.5f;
GAMESTATE->m_PlayerOptions[p].m_bEffects[ rand()%PlayerOptions::NUM_EFFECT_TYPES ] = true;
if( RandomFloat(0,1)>0.9f )
GAMESTATE->m_PlayerOptions[p].m_AppearanceType = PlayerOptions::APPEARANCE_HIDDEN;
if( RandomFloat(0,1)>0.9f )
GAMESTATE->m_PlayerOptions[p].m_AppearanceType = PlayerOptions::APPEARANCE_SUDDEN;
if( RandomFloat(0,1)>0.7f )
GAMESTATE->m_PlayerOptions[p].m_bReverseScroll = true;
if( RandomFloat(0,1)>0.8f )
GAMESTATE->m_PlayerOptions[p].m_bDark = true;
}
GAMESTATE->m_SongOptions.m_LifeType = (randomf(0,1)>0.8f) ? SongOptions::LIFE_BATTERY : SongOptions::LIFE_BAR;
GAMESTATE->m_SongOptions.m_FailType = SongOptions::FAIL_OFF;
GAMESTATE->m_bDemonstration = true;
m_Fade.CloseWipingRight( SM_GoToDemonstration );
}
void ScreenTitleMenu::HandleScreenMessage( const ScreenMessage SM ) void ScreenTitleMenu::HandleScreenMessage( const ScreenMessage SM )
{ {
@@ -310,11 +217,8 @@ void ScreenTitleMenu::HandleScreenMessage( const ScreenMessage SM )
break; break;
} }
break; break;
case SM_GoToDemonstration: case SM_GoToAttractLoop:
{ SCREENMAN->SetNewScreen( "ScreenCompany" );
ASSERT( GAMESTATE->m_pCurSong );
SCREENMAN->SetNewScreen( "ScreenGameplay" );
}
break; break;
} }
} }
@@ -406,11 +310,7 @@ void ScreenTitleMenu::MenuStart( PlayerNumber pn )
break; break;
case CHOICE_EXIT: { case CHOICE_EXIT: {
m_soundSelect.PlayRandom(); m_soundSelect.PlayRandom();
Exit();
SDL_Event *event;
event = (SDL_Event *) malloc(sizeof(event));
event->type = SDL_QUIT;
SDL_PushEvent(event);
LOG->Trace("CHOICE_EXIT: shutting down"); LOG->Trace("CHOICE_EXIT: shutting down");
} }
return; return;
@@ -421,12 +321,6 @@ void ScreenTitleMenu::MenuStart( PlayerNumber pn )
void ScreenTitleMenu::MenuBack( PlayerNumber pn ) void ScreenTitleMenu::MenuBack( PlayerNumber pn )
{ {
if(m_TitleMenuChoice == CHOICE_EXIT) this->m_Fade.CloseWipingRight( SM_GoToAttractLoop );
return;
LoseFocus( m_TitleMenuChoice );
m_TitleMenuChoice = CHOICE_EXIT;
m_soundChange.PlayRandom();
GainFocus( m_TitleMenuChoice );
} }
-1
View File
@@ -51,7 +51,6 @@ private:
void MenuDown( PlayerNumber pn ); void MenuDown( PlayerNumber pn );
void MenuBack( PlayerNumber pn ); void MenuBack( PlayerNumber pn );
void MenuStart( PlayerNumber pn ); void MenuStart( PlayerNumber pn );
void FadeToDemonstration();
TitleMenuChoice m_TitleMenuChoice; TitleMenuChoice m_TitleMenuChoice;
+4 -30
View File
@@ -623,38 +623,12 @@ void SongManager::GetExtraStageInfo( bool bExtra2, CString sPreferredGroup, cons
} }
} }
/* Pick a random song (for the demonstration). */ Song* SongManager::GetRandomSong()
bool SongManager::ChooseRandomSong()
{ {
if( SONGMAN->m_pSongs.empty() ) if( m_pSongs.empty() )
return false; return NULL;
int i; return SONGMAN->m_pSongs[ rand()%m_pSongs.size() ];
for( i=0; i<600; i++ ) // try 600 times
{
Song* pSong = m_pSongs[ rand()%m_pSongs.size() ];
if( pSong->m_apNotes.empty() )
continue; // skip
if( !pSong->HasMusic() )
continue; // skip
for( int j=0; j<3; j++ ) // try 3 times
{
Notes* pNotes = pSong->m_apNotes[ rand()%pSong->m_apNotes.size() ];
if( pNotes->m_NotesType != GAMESTATE->GetCurrentStyleDef()->m_NotesType )
continue;
// found something we can use!
GAMESTATE->m_pCurSong = pSong;
for( int p=0; p<NUM_PLAYERS; p++ )
GAMESTATE->m_pCurNotes[p] = pNotes;
return true;
}
}
return false;
} }
Song* SongManager::GetSongFromDir( CString sDir ) Song* SongManager::GetSongFromDir( CString sDir )
+1 -3
View File
@@ -62,9 +62,7 @@ public:
void GetExtraStageInfo( bool bExtra2, CString sPreferredGroup, const StyleDef *s, void GetExtraStageInfo( bool bExtra2, CString sPreferredGroup, const StyleDef *s,
Song*& pSongOut, Notes*& pNotesOut, PlayerOptions& po_out, SongOptions& so_out ); Song*& pSongOut, Notes*& pNotesOut, PlayerOptions& po_out, SongOptions& so_out );
/* Choose a random song from the current style. Return true Song* GetRandomSong();
* if successful, false if no song could be found. */
bool ChooseRandomSong();
Song* GetSongFromDir( CString sDir ); Song* GetSongFromDir( CString sDir );
+36 -4
View File
@@ -108,6 +108,39 @@ void ApplyGraphicOptions()
TEXTUREMAN->ReloadAll(); TEXTUREMAN->ReloadAll();
} }
void Exit()
{
SDL_Event *event;
event = (SDL_Event *) malloc(sizeof(event));
event->type = SDL_QUIT;
SDL_PushEvent(event);
}
void Reset()
{
GAMESTATE->Reset();
PREFSMAN->ReadGamePrefsFromDisk();
INPUTMAPPER->ReadMappingsFromDisk();
GAMESTATE->m_bPlayersCanJoin = true;
if( !GAMEMAN->DoesNoteSkinExist( GAMEMAN->GetCurNoteSkin() ) )
{
CStringArray asNoteSkinNames;
GAMEMAN->GetNoteSkinNames( asNoteSkinNames );
GAMEMAN->SwitchNoteSkin( asNoteSkinNames[0] );
}
if( !THEME->DoesThemeExist( THEME->GetCurThemeName() ) )
{
CString sGameName = GAMESTATE->GetCurrentGameDef()->m_szName;
if( THEME->DoesThemeExist( sGameName ) )
THEME->SwitchTheme( sGameName );
else
THEME->SwitchTheme( "default" );
}
PREFSMAN->SaveGamePrefsToDisk();
SCREENMAN->SetNewScreen( "ScreenCompany" ); // Change this to set a different initial screen
}
static void GameLoop(); static void GameLoop();
#include "SDL_utils.h" #include "SDL_utils.h"
@@ -220,9 +253,7 @@ int main(int argc, char* argv[])
FONT = new FontManager; FONT = new FontManager;
SCREENMAN = new ScreenManager; SCREENMAN = new ScreenManager;
Reset();
// normal game
SCREENMAN->SetNewScreen( "ScreenWarning" );
/* Run the main loop. */ /* Run the main loop. */
GameLoop(); GameLoop();
@@ -307,9 +338,10 @@ static void HandleInputEvents(float fDeltaTime)
// pressed just F4 // pressed just F4
PREFSMAN->m_bWindowed = !PREFSMAN->m_bWindowed; PREFSMAN->m_bWindowed = !PREFSMAN->m_bWindowed;
ApplyGraphicOptions(); ApplyGraphicOptions();
// fall through continue;
/* why fall through? other code shouldn't be using /* why fall through? other code shouldn't be using
* globally-bound keys -glenn */ * globally-bound keys -glenn */
/* you're right. -Chris */
} }
} }
else if( type == IET_FIRST_PRESS && DeviceI == DeviceInput(DEVICE_KEYBOARD, SDLK_F5)) else if( type == IET_FIRST_PRESS && DeviceI == DeviceInput(DEVICE_KEYBOARD, SDLK_F5))
+2 -2
View File
@@ -60,7 +60,7 @@ IntDir=.\../Release6
TargetDir=\stepmania\stepmania TargetDir=\stepmania\stepmania
TargetName=StepMania TargetName=StepMania
SOURCE="$(InputPath)" 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 PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool # End Special Build Tool
@@ -95,7 +95,7 @@ IntDir=.\../Debug6
TargetDir=\stepmania\stepmania TargetDir=\stepmania\stepmania
TargetName=StepMania-debug TargetName=StepMania-debug
SOURCE="$(InputPath)" 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 PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool # End Special Build Tool
+2
View File
@@ -14,7 +14,9 @@
void ApplyGraphicOptions(); void ApplyGraphicOptions();
void Exit();
void Reset();
#endif #endif
+6
View File
@@ -192,6 +192,12 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
<File <File
RelativePath="ScreenCaution.h"> RelativePath="ScreenCaution.h">
</File> </File>
<File
RelativePath="ScreenDemonstration.cpp">
</File>
<File
RelativePath="ScreenDemonstration.h">
</File>
<File <File
RelativePath="ScreenDimensions.h"> RelativePath="ScreenDimensions.h">
</File> </File>
+1 -1
View File
@@ -334,7 +334,7 @@ try_element_again:
asPossibleElementFilePaths[0].GetString(), sNewFilePath.GetString()); asPossibleElementFilePaths[0].GetString(), sNewFilePath.GetString());
#ifdef _DEBUG #ifdef _DEBUG
if( MessageBox(NULL, "ThemeManager", message.GetString(), MB_RETRYCANCEL ) == IDRETRY) if( MessageBox(NULL, message.GetString(), "ThemeManager", MB_RETRYCANCEL ) == IDRETRY)
goto try_element_again; goto try_element_again;
#endif #endif
RageException::Throw( "%s", message.GetString() ); RageException::Throw( "%s", message.GetString() );
+2 -2
View File
@@ -7,8 +7,8 @@
; NOTE: this .NSI script is designed for NSIS v1.8+ ; NOTE: this .NSI script is designed for NSIS v1.8+
Name "StepMania" Name "StepMania"
OutFile "stepmania310.exe" OutFile "stepmania301.exe"
!define PRODUCT_NAME "StepMania 3.1" !define PRODUCT_NAME "StepMania 3.01"
; Some default compiler settings (uncomment and change at will): ; Some default compiler settings (uncomment and change at will):