From 835887cfd3226566bde1c0bc177ca7ef59b6ac50 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Thu, 10 Jul 2003 11:47:45 +0000 Subject: [PATCH] battle enemy face stuff --- stepmania/src/CombinedLifeMeterEnemy.cpp | 96 +++++++++++++++++++++++- stepmania/src/CombinedLifeMeterEnemy.h | 4 +- stepmania/src/LifeMeter.h | 1 + stepmania/src/ScreenGameplay.cpp | 71 +----------------- stepmania/src/ScreenGameplay.h | 12 +-- 5 files changed, 104 insertions(+), 80 deletions(-) diff --git a/stepmania/src/CombinedLifeMeterEnemy.cpp b/stepmania/src/CombinedLifeMeterEnemy.cpp index 91ba69317a..315a66d32a 100644 --- a/stepmania/src/CombinedLifeMeterEnemy.cpp +++ b/stepmania/src/CombinedLifeMeterEnemy.cpp @@ -22,6 +22,8 @@ #include "CombinedLifeMeterEnemy.h" #include "ThemeManager.h" #include "GameState.h" +#include "ScreenManager.h" +#include "ScreenGameplay.h" const float SECONDS_TO_SHOW_FACE = 1.5f; @@ -88,8 +90,7 @@ void CombinedLifeMeterEnemy::Update( float fDelta ) m_sprHealthStream.SetGlow( RageColor(1,1,1,0) ); m_fLastSeenHealthPercent = GAMESTATE->m_fOpponentHealthPercent; - m_sprFace.SetState( damage ); - m_fSecondsUntilReturnToNormalFace = SECONDS_TO_SHOW_FACE; + SetFace( damage ); if( GAMESTATE->m_fOpponentHealthPercent == 0 ) { @@ -97,8 +98,95 @@ void CombinedLifeMeterEnemy::Update( float fDelta ) m_sprFrame.SetDiffuse( RageColor(0.5f,0.5f,0.5f,1) ); } } + + + + // + // launch enemy attacks to human players + // + + // Don't apply any attacks if the enemy is already defeated + if( GAMESTATE->m_fOpponentHealthPercent>0 ) + { + + static const CString sPossibleModifiers[NUM_ATTACK_LEVELS][3] = + { + { + "1.5x", + "dizzy", + "drunk" + }, + { + "sudden", + "hidden", + "wave", + }, + { + "expand", + "tornado", + "flip" + } + }; + + #define CROSSED_SONG_SECONDS( s ) ((GAMESTATE->m_fMusicSeconds-fDelta) < s && (GAMESTATE->m_fMusicSeconds) >= s ) + + if( CROSSED_SONG_SECONDS(10) || + CROSSED_SONG_SECONDS(30) || + CROSSED_SONG_SECONDS(50) || + CROSSED_SONG_SECONDS(70) || + CROSSED_SONG_SECONDS(90) || + CROSSED_SONG_SECONDS(110) ) + { + SetFace( attack ); + } + + if( CROSSED_SONG_SECONDS(20) || CROSSED_SONG_SECONDS(40) ) + { + GameState::Attack a; + a.fSecsRemaining = 10; + a.level = ATTACK_LEVEL_1; + a.sModifier = sPossibleModifiers[a.level][rand()%3]; + for( int p=0; pIsHumanPlayer(p) ) + GAMESTATE->LaunchAttack( (PlayerNumber)p, a ); + SCREENMAN->SendMessageToTopScreen( SM_BattleTrickLevel1 ); + SetFace( attack ); + } + if( CROSSED_SONG_SECONDS(60) || CROSSED_SONG_SECONDS(80) ) + { + GameState::Attack a; + a.fSecsRemaining = 10; + a.level = ATTACK_LEVEL_2; + a.sModifier = sPossibleModifiers[a.level][rand()%3]; + for( int p=0; pIsHumanPlayer(p) ) + GAMESTATE->LaunchAttack( (PlayerNumber)p, a ); + SCREENMAN->SendMessageToTopScreen( SM_BattleTrickLevel2 ); + SetFace( attack ); + } + if( CROSSED_SONG_SECONDS(100) ) + { + GameState::Attack a; + a.fSecsRemaining = 10; + a.level = ATTACK_LEVEL_3; + a.sModifier = sPossibleModifiers[a.level][rand()%3]; + for( int p=0; pIsHumanPlayer(p) ) + GAMESTATE->LaunchAttack( (PlayerNumber)p, a ); + SCREENMAN->SendMessageToTopScreen( SM_BattleTrickLevel3 ); + SetFace( attack ); + } + } +} + +void CombinedLifeMeterEnemy::SetFace( Face face ) +{ + m_sprFace.SetState( face ); + m_fSecondsUntilReturnToNormalFace = SECONDS_TO_SHOW_FACE; } - - +void CombinedLifeMeterEnemy::OnTaunt() +{ + SetFace( taunt ); +} \ No newline at end of file diff --git a/stepmania/src/CombinedLifeMeterEnemy.h b/stepmania/src/CombinedLifeMeterEnemy.h index ab11eaae88..5bf604286a 100644 --- a/stepmania/src/CombinedLifeMeterEnemy.h +++ b/stepmania/src/CombinedLifeMeterEnemy.h @@ -14,7 +14,6 @@ #include "LifeMeter.h" #include "Sprite.h" -#include "MeterDisplay.h" class CombinedLifeMeterEnemy : public CombinedLifeMeter @@ -33,8 +32,11 @@ public: virtual bool IsHot( PlayerNumber pn ) { return false; }; virtual bool IsFailing( PlayerNumber pn ) { return false; }; virtual bool FailedEarlier( PlayerNumber pn ) { return false; }; + virtual void OnTaunt(); protected: + void SetFace( Face face ); + Sprite m_sprHealthStream; Sprite m_sprHealthBackground; float m_fLastSeenHealthPercent; diff --git a/stepmania/src/LifeMeter.h b/stepmania/src/LifeMeter.h index 724f510358..2c6ef4b654 100644 --- a/stepmania/src/LifeMeter.h +++ b/stepmania/src/LifeMeter.h @@ -58,6 +58,7 @@ public: virtual bool IsHot( PlayerNumber pn ) = 0; virtual bool IsFailing( PlayerNumber pn ) = 0; virtual bool FailedEarlier( PlayerNumber pn ) = 0; + virtual void OnTaunt() {}; }; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index ff6c2332ca..da715fcff3 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -1130,6 +1130,8 @@ void ScreenGameplay::Update( float fDeltaTime ) if( OneIsHot() ) m_announcerHot.PlayRandom(); else if( AllAreInDanger() ) m_announcerDanger.PlayRandom(); else m_announcerGood.PlayRandom(); + if( m_pCombinedLifeMeter ) + m_pCombinedLifeMeter->OnTaunt(); break; case PLAY_MODE_NONSTOP: case PLAY_MODE_ONI: @@ -1146,75 +1148,6 @@ void ScreenGameplay::Update( float fDeltaTime ) if( GAMESTATE->m_SongOptions.m_bAssistTick && IsTimeToPlayTicks()) m_soundAssistTick.Play(); - - - // - // launch enemy attacks to human players - // - switch( GAMESTATE->m_PlayMode ) - { - case PLAY_MODE_CPU_BATTLE: - - // Don't apply any attacks if the enemy is already defeated - if( GAMESTATE->m_fOpponentHealthPercent==0 ) - break; - - static const CString sPossibleModifiers[NUM_ATTACK_LEVELS][3] = - { - { - "1.5x", - "dizzy", - "drunk" - }, - { - "sudden", - "hidden", - "wave", - }, - { - "expand", - "tornado", - "flip" - } - }; - -#define CROSSED_SONG_SECONDS( s ) ((GAMESTATE->m_fMusicSeconds-fDeltaTime) < s && (GAMESTATE->m_fMusicSeconds) >= s ) - - if( CROSSED_SONG_SECONDS(20) || CROSSED_SONG_SECONDS(40) ) - { - GameState::Attack a; - a.fSecsRemaining = 10; - a.level = ATTACK_LEVEL_1; - a.sModifier = sPossibleModifiers[a.level][rand()%3]; - for( int p=0; pIsHumanPlayer(p) ) - GAMESTATE->LaunchAttack( (PlayerNumber)p, a ); - this->HandleScreenMessage( SM_BattleTrickLevel1 ); - } - if( CROSSED_SONG_SECONDS(60) || CROSSED_SONG_SECONDS(80) ) - { - GameState::Attack a; - a.fSecsRemaining = 10; - a.level = ATTACK_LEVEL_2; - a.sModifier = sPossibleModifiers[a.level][rand()%3]; - for( int p=0; pIsHumanPlayer(p) ) - GAMESTATE->LaunchAttack( (PlayerNumber)p, a ); - this->HandleScreenMessage( SM_BattleTrickLevel2 ); - } - if( CROSSED_SONG_SECONDS(100) ) - { - GameState::Attack a; - a.fSecsRemaining = 10; - a.level = ATTACK_LEVEL_3; - a.sModifier = sPossibleModifiers[a.level][rand()%3]; - for( int p=0; pIsHumanPlayer(p) ) - GAMESTATE->LaunchAttack( (PlayerNumber)p, a ); - this->HandleScreenMessage( SM_BattleTrickLevel3 ); - } - break; - } } diff --git a/stepmania/src/ScreenGameplay.h b/stepmania/src/ScreenGameplay.h index b88d5a9970..981fc083ac 100644 --- a/stepmania/src/ScreenGameplay.h +++ b/stepmania/src/ScreenGameplay.h @@ -45,12 +45,12 @@ const ScreenMessage SM_900Combo = ScreenMessage(SM_User+208); const ScreenMessage SM_1000Combo = ScreenMessage(SM_User+209); const ScreenMessage SM_ComboStopped = ScreenMessage(SM_User+210); -const ScreenMessage SM_BattleTrickLevel1 = ScreenMessage(SM_User+300); -const ScreenMessage SM_BattleTrickLevel2 = ScreenMessage(SM_User+301); -const ScreenMessage SM_BattleTrickLevel3 = ScreenMessage(SM_User+302); -const ScreenMessage SM_BattleDamageLevel1 = ScreenMessage(SM_User+303); -const ScreenMessage SM_BattleDamageLevel2 = ScreenMessage(SM_User+304); -const ScreenMessage SM_BattleDamageLevel3 = ScreenMessage(SM_User+305); +const ScreenMessage SM_BattleTrickLevel1 = ScreenMessage(SM_User+301); +const ScreenMessage SM_BattleTrickLevel2 = ScreenMessage(SM_User+302); +const ScreenMessage SM_BattleTrickLevel3 = ScreenMessage(SM_User+303); +const ScreenMessage SM_BattleDamageLevel1 = ScreenMessage(SM_User+304); +const ScreenMessage SM_BattleDamageLevel2 = ScreenMessage(SM_User+305); +const ScreenMessage SM_BattleDamageLevel3 = ScreenMessage(SM_User+306); class LyricsLoader; class ScreenGameplay : public Screen