new battle layout

This commit is contained in:
Chris Danford
2003-05-13 13:35:32 +00:00
parent 99957a0391
commit a5f09f296c
20 changed files with 561 additions and 64 deletions
@@ -21,3 +21,4 @@ HoldTailAnimationIsNoteColor=0
StartDrawingHoldBodyOffsetFromHead=0
StopDrawingHoldBodyOffsetFromTail=-32 // top of tail
HoldNGGrayPercent=0.25
UseLighting=0
+62
View File
@@ -0,0 +1,62 @@
#include "global.h"
/*
-----------------------------------------------------------------------------
Class: EnemyFace
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "EnemyFace.h"
#include "RageUtil.h"
#include "GameConstantsAndTypes.h"
#include "MusicWheel.h"
#include "EnemyFace.h"
#include "RageTimer.h"
#include <math.h>
#include "ThemeManager.h"
#include "GameState.h"
const float SECONDS_TO_SHOW_FACE = 1.5f;
EnemyFace::EnemyFace()
{
Load( THEME->GetPathToG("EnemyFace 2x3") );
ASSERT( this->GetNumStates() >= NUM_FACES );
StopAnimating();
SetFace( normal );
}
void EnemyFace::Update( float fDelta )
{
if( m_fSecondsUntilReturnToNormal > 0 )
{
m_fSecondsUntilReturnToNormal -= fDelta;
if( m_fSecondsUntilReturnToNormal < 0 )
{
m_fSecondsUntilReturnToNormal = 0;
this->SetState( normal );
}
}
if( GAMESTATE->m_fOpponentHealthPercent == 0 )
this->SetState( defeated );
Sprite::Update( fDelta );
}
void EnemyFace::SetFace( Face face )
{
if( GAMESTATE->m_fOpponentHealthPercent == 0 )
return;
this->SetState( face );
m_fSecondsUntilReturnToNormal = SECONDS_TO_SHOW_FACE;
}
+32
View File
@@ -0,0 +1,32 @@
#ifndef EnemyFace_H
#define EnemyFace_H
/*
-----------------------------------------------------------------------------
Class: EnemyFace
Desc: A little graphic to the left of the song's text banner in the MusicWheel.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "Sprite.h"
class EnemyFace : public Sprite
{
public:
EnemyFace();
virtual void Update( float fDelta );
enum Face { normal=0, taunt, attack, damage, defeated, NUM_FACES };
void SetFace( Face face );
protected:
float m_fSecondsUntilReturnToNormal;
};
#endif
+36
View File
@@ -0,0 +1,36 @@
#include "global.h"
/*
-----------------------------------------------------------------------------
Class: EnemyHealth
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "EnemyHealth.h"
#include "ThemeManager.h"
#include "GameState.h"
EnemyHealth::EnemyHealth() :
MeterDisplay(
THEME->GetPathToG("EnemyHealth stream"),
THEME->GetPathToG("EnemyHealth frame"),
464 )
{
m_fLastSeenHealthPercent = -1;
}
void EnemyHealth::Update( float fDelta )
{
if( m_fLastSeenHealthPercent != GAMESTATE->m_fOpponentHealthPercent )
{
this->SetPercent( GAMESTATE->m_fOpponentHealthPercent );
m_fLastSeenHealthPercent = GAMESTATE->m_fOpponentHealthPercent;
}
MeterDisplay::Update( fDelta );
}
+29
View File
@@ -0,0 +1,29 @@
#ifndef EnemyHealth_H
#define EnemyHealth_H
/*
-----------------------------------------------------------------------------
Class: EnemyHealth
Desc: A little graphic to the left of the song's text banner in the MusicWheel.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "MeterDisplay.h"
class EnemyHealth : public MeterDisplay
{
public:
EnemyHealth();
virtual void Update( float fDelta );
protected:
float m_fLastSeenHealthPercent;
};
#endif
+15 -31
View File
@@ -122,33 +122,6 @@ void GameState::Update( float fDelta )
if( m_bActiveAttackEndedThisUpdate[p] )
RebuildPlayerOptionsFromActiveAttacks( (PlayerNumber)p );
/* if( m_PlayerOptions[p].m_bUseScrollBPM && m_pCurSong )
{
float fTargetBPM = m_PlayerOptions[p].m_fScrollBPM;
float fConstBPS = fTargetBPM/60.f;
// Optimization opportunity: take fewer samples where the weight is less
const int iNumBPSSamples = 100;
const float fSampleStep = 0.08f; // sample over the next 8 beats
float fSumBPS = 0;
int iSumWeight = 0;
for( int i=0; i<iNumBPSSamples; i++ )
{
int iWeight = iNumBPSSamples - i;
float fBeatsAheadToSample = i*fSampleStep;
float fBPS = m_pCurSong->GetBPMAtBeat( m_fSongBeat+fBeatsAheadToSample )/60.f;
// Don't allow super low bps values, or else the scroll speed goes crazy at a stop
CLAMP( fBPS, 60.f/60.f, 10000 );
fSumBPS += fBPS * iWeight;
iSumWeight += iWeight;
}
float fAvgBPS = fSumBPS / iSumWeight;
m_PlayerOptions[p].m_fScrollSpeed = fConstBPS / fAvgBPS;
}
*/
}
}
@@ -170,6 +143,8 @@ void GameState::ResetMusicStatistics()
m_fCurBPS = 10;
m_bFreeze = false;
m_bPastHereWeGo = false;
m_fOpponentHealthPercent = 1;
}
void GameState::UpdateSongPosition(float fPositionSeconds)
@@ -376,10 +351,18 @@ PlayerNumber GameState::GetWinner()
BattleResult GameState::GetBattleResult( PlayerNumber pn )
{
PlayerNumber winner = GetWinner();
if( winner == PLAYER_INVALID )
return RESULT_DRAW;
return (winner==pn) ? RESULT_WIN : RESULT_LOSE;
// PlayerNumber winner = GetWinner();
// if( winner == PLAYER_INVALID )
// return RESULT_DRAW;
// return (winner==pn) ? RESULT_WIN : RESULT_LOSE;
switch( GAMESTATE->m_PlayMode )
{
case PLAY_MODE_BATTLE:
return (m_fOpponentHealthPercent==0)?RESULT_WIN:RESULT_LOSE;
default:
ASSERT(0);
return RESULT_WIN;
}
}
void GameState::GetFinalEvalStatsAndSongs( StageStats& statsOut, vector<Song*>& vSongsOut )
@@ -446,6 +429,7 @@ void GameState::LaunchAttack( PlayerNumber target, Attack a )
if( m_ActiveAttacks[target][s].fSecsRemaining <= 0 )
{
m_ActiveAttacks[target][s] = a;
GAMESTATE->RebuildPlayerOptionsFromActiveAttacks( target );
return;
}
}
+1
View File
@@ -175,6 +175,7 @@ public:
// used in PLAY_MODE_BATTLE
Attack m_Inventory[NUM_PLAYERS][NUM_INVENTORY_SLOTS];
float m_fOpponentHealthPercent;
bool m_bActiveAttackEndedThisUpdate[NUM_PLAYERS]; // flag for other objects to watch (play sounds)
void LaunchAttack( PlayerNumber target, Attack aa );
+26 -7
View File
@@ -17,6 +17,8 @@
#include "RageTimer.h"
#include "PrefsManager.h"
#include "song.h"
#include "ScreenManager.h"
#include "ScreenGameplay.h"
#define NUM_ITEM_TYPES THEME->GetMetricF("Inventory","NumItemTypes")
@@ -56,6 +58,13 @@ Inventory::Inventory()
{
}
Inventory::~Inventory()
{
for( unsigned i=0; i<m_vpSoundUseItem.size(); i++ )
delete m_vpSoundUseItem[i];
m_vpSoundUseItem.clear();
}
void Inventory::Load( PlayerNumber pn )
{
ITEM_USE_RATE_SECONDS.Refresh();
@@ -68,12 +77,15 @@ void Inventory::Load( PlayerNumber pn )
// don't load battle sounds if they're not going to be used
if( GAMESTATE->m_PlayMode == PLAY_MODE_BATTLE )
{
for( int p=0; p<NUM_PLAYERS; p++ )
m_soundAcquireItem.Load( THEME->GetPathToS("Inventory aquire item") );
for( unsigned i=0; i<g_Items.size(); i++ )
{
m_soundAcquireItem.Load( THEME->GetPathToS("Inventory aquire item") );
m_soundUseItem.Load( THEME->GetPathToS("Inventory use item") );
m_soundItemEnding.Load( THEME->GetPathToS("Inventory item ending") );
RageSound* pSound = new RageSound;
CString sPath = THEME->GetPathToS( ssprintf("Inventory use item %u",i+1) );
pSound->Load( sPath );
m_vpSoundUseItem.push_back( pSound );
}
m_soundItemEnding.Load( THEME->GetPathToS("Inventory item ending") );
}
}
@@ -172,10 +184,17 @@ void Inventory::UseItem( int iSlot )
PlayerNumber pnToAttack = OPPOSITE_PLAYER[m_PlayerNumber];
GameState::Attack a = asInventory[iSlot];
GAMESTATE->LaunchAttack( pnToAttack, a );
GAMESTATE->RebuildPlayerOptionsFromActiveAttacks( pnToAttack );
// GAMESTATE->LaunchAttack( pnToAttack, a );
// GAMESTATE->RebuildPlayerOptionsFromActiveAttacks( pnToAttack );
float fPercentHealthToDrain = (a.level+1) / 10.f;
ASSERT( fPercentHealthToDrain > 0 );
GAMESTATE->m_fOpponentHealthPercent -= fPercentHealthToDrain;
CLAMP( GAMESTATE->m_fOpponentHealthPercent, 0.f, 1.f );
// remove the item
asInventory[iSlot].MakeBlank();
m_soundUseItem.Play();
m_vpSoundUseItem[a.level]->Play();
SCREENMAN->SendMessageToTopScreen( (ScreenMessage)(SM_BattleDamageLevel1+a.level) );
}
+2 -1
View File
@@ -20,6 +20,7 @@ class Inventory : public Actor
{
public:
Inventory();
~Inventory();
void Load( PlayerNumber pn );
virtual void Update( float fDelta );
@@ -34,7 +35,7 @@ protected:
int m_iLastSeenCombo;
RageSound m_soundAcquireItem;
RageSound m_soundUseItem;
vector<RageSound*> m_vpSoundUseItem;
RageSound m_soundItemEnding;
};
+68
View File
@@ -0,0 +1,68 @@
#include "global.h"
/*
-----------------------------------------------------------------------------
File: MeterDisplay.h
Desc: The song's MeterDisplay displayed in SelectSong.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
-----------------------------------------------------------------------------
*/
#include "MeterDisplay.h"
MeterDisplay::MeterDisplay(
CString sSteamPath,
CString sFramePath,
float fStreamWidth )
{
m_fStreamWidth = fStreamWidth;
m_sprStream.Load( sSteamPath );
m_sprStream.SetZoomX( fStreamWidth / m_sprStream.GetUnzoomedWidth() );
m_quad.SetZoomY( m_sprStream.GetUnzoomedHeight() );
m_quad.SetX( m_fStreamWidth/2 );
m_quad.SetHorizAlign( Actor::align_right );
m_quad.SetDiffuse( RageColor(0,0,0,1) );
m_sprFrame.Load( sFramePath );
m_fTrailingPercent = 0;
SetPercent( 0.5f );
}
MeterDisplay::~MeterDisplay()
{
}
void MeterDisplay::Update( float fDelta )
{
fapproach( m_fTrailingPercent, m_fPercent, 0.2f*fDelta );
m_quad.SetZoomX( m_fStreamWidth * (1-m_fTrailingPercent) );
m_sprStream.Update( fDelta );
m_quad.Update( fDelta );
m_sprFrame.Update( fDelta );
Actor::Update( fDelta );
}
void MeterDisplay::DrawPrimitives()
{
m_sprStream.Draw();
m_quad.Draw();
m_sprFrame.Draw();
}
void MeterDisplay::SetPercent( float fPercent )
{
ASSERT( fPercent >= 0 && fPercent <= 1 );
m_fPercent = fPercent;
m_sprFrame.Command( "glow,1,1,1,1;linear,0.5;glow,1,1,1,0" );
m_sprStream.Command( "glow,1,1,1,1;linear,0.5;glow,1,1,1,0" );
}
+42
View File
@@ -0,0 +1,42 @@
#ifndef MeterDisplay_H
#define MeterDisplay_H
/*
-----------------------------------------------------------------------------
File: MeterDisplay.h
Desc:
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "Actor.h"
#include "Sprite.h"
#include "Quad.h"
class MeterDisplay : public Actor
{
public:
MeterDisplay(
CString sSteamPath,
CString sFramePath,
float fStreamWidth );
virtual ~MeterDisplay();
virtual void Update( float fDelta );
virtual void DrawPrimitives();
void SetPercent( float fPercent );
protected:
float m_fStreamWidth;
float m_fPercent;
float m_fTrailingPercent;
Sprite m_sprStream;
Quad m_quad;
Sprite m_sprFrame;
};
#endif
+18 -10
View File
@@ -65,6 +65,7 @@ Actor* MakeModelOrSprite( CString sFile )
#define START_DRAWING_HOLD_BODY_OFFSET_FROM_HEAD NOTESKIN->GetMetricI(pn,name,"StartDrawingHoldBodyOffsetFromHead")
#define STOP_DRAWING_HOLD_BODY_OFFSET_FROM_TAIL NOTESKIN->GetMetricI(pn,name,"StopDrawingHoldBodyOffsetFromTail")
#define HOLD_NG_GRAY_PERCENT NOTESKIN->GetMetricF(pn,name,"HoldNGGrayPercent")
#define USE_LIGHTING NOTESKIN->GetMetricB(pn,name,"UseLighting")
// cache
struct NoteMetricCache_t {
@@ -90,6 +91,7 @@ struct NoteMetricCache_t {
int m_iStartDrawingHoldBodyOffsetFromHead;
int m_iStopDrawingHoldBodyOffsetFromTail;
float m_fHoldNGGrayPercent;
bool m_bUseLighting;
void Load(PlayerNumber pn, const CString &name);
} *NoteMetricCache;
@@ -118,6 +120,7 @@ void NoteMetricCache_t::Load(PlayerNumber pn, const CString &name)
m_iStartDrawingHoldBodyOffsetFromHead = START_DRAWING_HOLD_BODY_OFFSET_FROM_HEAD;
m_iStopDrawingHoldBodyOffsetFromTail = STOP_DRAWING_HOLD_BODY_OFFSET_FROM_TAIL;
m_fHoldNGGrayPercent = HOLD_NG_GRAY_PERCENT;
m_bUseLighting = USE_LIGHTING;
}
NoteDisplay::NoteDisplay()
@@ -700,19 +703,24 @@ void NoteDisplay::DrawTap( const int iCol, const float fBeat, const bool bOnSame
pActor->SetDiffuse( diffuse );
pActor->SetGlow( glow );
DISPLAY->EnableLighting( true );
DISPLAY->SetLightDirectional(
0,
RageColor(0.0f,0.0f,0.0f,1),
RageColor(1,1,1,1),
RageColor(1,1,1,1),
RageVector3(1, 0, +1) );
if( cache->m_bUseLighting )
{
DISPLAY->EnableLighting( true );
DISPLAY->SetLightDirectional(
0,
RageColor(0.0f,0.0f,0.0f,1),
RageColor(1,1,1,1),
RageColor(1,1,1,1),
RageVector3(1, 0, +1) );
}
pActor->Draw();
DISPLAY->SetLightOff( 0 );
DISPLAY->EnableLighting( false );
if( cache->m_bUseLighting )
{
DISPLAY->SetLightOff( 0 );
DISPLAY->EnableLighting( false );
}
}
+1 -1
View File
@@ -173,7 +173,7 @@ bool RageSound::Load(CString sSoundFilePath, int precache)
SoundReader_SDL_Sound *NewSample = new SoundReader_SDL_Sound;
if(!NewSample->Open(sSoundFilePath.c_str()))
RageException::Throw( "RageSoundManager::RageSoundManager: error opening sound %s: %s",
RageException::Throw( "RageSoundManager::RageSoundManager: error opening sound '%s': '%s'",
sSoundFilePath.c_str(), NewSample->GetError().c_str());
Sample = NewSample;
+1
View File
@@ -68,6 +68,7 @@ bool RandomSample::LoadSoundDir( CString sDir, int iMaxToLoad )
GetDirListing( sDir + "*.ogg", arraySoundFiles );
GetDirListing( sDir + "*.wav", arraySoundFiles );
random_shuffle( arraySoundFiles.begin(), arraySoundFiles.end() );
arraySoundFiles.resize( min( arraySoundFiles.size(), (unsigned)iMaxToLoad ) );
for( unsigned i=0; i<arraySoundFiles.size(); i++ )
-1
View File
@@ -86,7 +86,6 @@ void RaveHelper::LaunchAttack( AttackLevel al )
a.sModifier = sAttackToGive;
GAMESTATE->LaunchAttack( pnToAttack, a );
GAMESTATE->RebuildPlayerOptionsFromActiveAttacks( pnToAttack );
m_soundLaunchAttack.Play();
}
+1
View File
@@ -71,6 +71,7 @@ const CreditLine CREDIT_LINES[] =
{0,"Mauro Panichella"},
{0,"Griever (Julian)"},
{0,"Miguel Moore"},
{0,"Dj 'AeON ExOdus' Washington"},
{0,""},
{0,""},
{0,""},
+15 -1
View File
@@ -664,7 +664,21 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName, Type type ) : Screen(sCl
switch( m_Type )
{
case stage:
SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation "+GradeToString(max_grade)) );
switch( GAMESTATE->m_PlayMode )
{
case PLAY_MODE_BATTLE:
{
bool bWon = GAMESTATE->GetBattleResult(GAMESTATE->m_MasterPlayerNumber) == RESULT_WIN;
if( bWon )
SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation win") );
else
SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation lose") );
}
break;
default:
SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation "+GradeToString(max_grade)) );
break;
}
break;
case course:
case summary:
+167 -12
View File
@@ -37,7 +37,8 @@
#include "ActorUtil.h"
#include "NoteSkinManager.h"
#include "RageTextureManager.h"
#include "EnemyHealth.h"
#include "EnemyFace.h"
//
// Defines
@@ -242,6 +243,19 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration ) : Screen("ScreenGameplay")
this->AddChild( &m_sprOniGameOver[p] );
}
if( GAMESTATE->m_PlayMode == PLAY_MODE_BATTLE )
{
m_pEnemyFace = new EnemyFace;
m_pEnemyFace->SetName( "EnemyFace" );
this->AddChild( m_pEnemyFace );
SET_XY( *m_pEnemyFace );
m_pEnemyHealth = new EnemyHealth;
m_pEnemyHealth->SetName( "EnemyHealth" );
this->AddChild( m_pEnemyHealth );
SET_XY( *m_pEnemyHealth );
}
this->AddChild(&m_TimingAssist);
this->AddChild( &m_NextSongIn );
@@ -530,6 +544,19 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration ) : Screen("ScreenGameplay")
m_announcer1000Combo.Load( ANNOUNCER->GetPathTo("gameplay 1000 combo") );
m_announcerComboStopped.Load( ANNOUNCER->GetPathTo("gameplay combo stopped") );
m_soundAssistTick.Load( THEME->GetPathToS("ScreenGameplay assist tick") );
if( GAMESTATE->m_PlayMode == PLAY_MODE_BATTLE )
{
m_announcerBattleTrickLevel1.Load( ANNOUNCER->GetPathTo("gameplay battle trick level1") );
m_announcerBattleTrickLevel2.Load( ANNOUNCER->GetPathTo("gameplay battle trick level2") );
m_announcerBattleTrickLevel3.Load( ANNOUNCER->GetPathTo("gameplay battle trick level3") );
m_soundBattleTrickLevel1.Load( THEME->GetPathToS("ScreenGameplay battle trick level1") );
m_soundBattleTrickLevel2.Load( THEME->GetPathToS("ScreenGameplay battle trick level2") );
m_soundBattleTrickLevel3.Load( THEME->GetPathToS("ScreenGameplay battle trick level3") );
m_announcerBattleDamageLevel1.Load( ANNOUNCER->GetPathTo("gameplay battle damage level1") );
m_announcerBattleDamageLevel2.Load( ANNOUNCER->GetPathTo("gameplay battle damage level2") );
m_announcerBattleDamageLevel3.Load( ANNOUNCER->GetPathTo("gameplay battle damage level3") );
}
}
// Get the transitions rolling on the first update.
@@ -548,6 +575,9 @@ ScreenGameplay::~ScreenGameplay()
SAFE_DELETE( m_pScoreKeeper[p] );
}
delete m_pEnemyHealth;
delete m_pEnemyFace;
m_soundMusic.StopPlaying();
}
@@ -956,6 +986,8 @@ void ScreenGameplay::Update( float fDeltaTime )
if( OneIsHot() ) m_announcerHot.PlayRandom();
else if( AllAreInDanger() ) m_announcerDanger.PlayRandom();
else m_announcerGood.PlayRandom();
if( m_pEnemyFace )
m_pEnemyFace->SetFace( EnemyFace::taunt );
break;
case PLAY_MODE_NONSTOP:
case PLAY_MODE_ONI:
@@ -994,6 +1026,67 @@ void ScreenGameplay::Update( float fDeltaTime )
if( GAMESTATE->m_SongOptions.m_bAssistTick && IsTimeToPlayTicks())
m_soundAssistTick.Play();
// launch battle attacks
if( GAMESTATE->m_PlayMode == PLAY_MODE_BATTLE )
{
#define CROSSED_SONG_SECONDS( s ) ((GAMESTATE->m_fMusicSeconds-fDeltaTime) < s && (GAMESTATE->m_fMusicSeconds) >= s )
static const CString sPossibleModifiers[NUM_ATTACK_LEVELS][3] =
{
{
"1.5x",
"dizzy",
"drunk"
},
{
"sudden",
"hidden",
"wave",
},
{
"expand",
"tornado",
"flip"
}
};
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; p<NUM_PLAYERS; p++ )
if( GAMESTATE->IsPlayerEnabled(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; p<NUM_PLAYERS; p++ )
if( GAMESTATE->IsPlayerEnabled(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; p<NUM_PLAYERS; p++ )
if( GAMESTATE->IsPlayerEnabled(p) )
GAMESTATE->LaunchAttack( (PlayerNumber)p, a );
this->HandleScreenMessage( SM_BattleTrickLevel3 );
}
}
}
@@ -1408,84 +1501,138 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
m_Toasty.StartTransitioning();
break;
#define SECS_SINCE_LAST_COMMENT (SECONDS_BETWEEN_COMMENTS-m_fTimeLeftBeforeDancingComment)
case SM_100Combo:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcer100Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_200Combo:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcer200Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_300Combo:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcer300Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_400Combo:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcer400Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_500Combo:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcer500Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_600Combo:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcer600Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_700Combo:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcer700Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_800Combo:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcer800Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_900Combo:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcer900Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_1000Combo:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcer1000Combo.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_ComboStopped:
if( m_fTimeLeftBeforeDancingComment < 12 )
if( SECS_SINCE_LAST_COMMENT > 10 )
{
m_announcerComboStopped.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
break;
case SM_BattleTrickLevel1:
if( SECS_SINCE_LAST_COMMENT > 5 )
{
m_announcerBattleTrickLevel1.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
m_soundBattleTrickLevel1.PlayRandom();
m_pEnemyFace->SetFace( EnemyFace::attack );
break;
case SM_BattleTrickLevel2:
if( SECS_SINCE_LAST_COMMENT > 5 )
{
m_announcerBattleTrickLevel2.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
m_soundBattleTrickLevel2.PlayRandom();
m_pEnemyFace->SetFace( EnemyFace::attack );
break;
case SM_BattleTrickLevel3:
if( SECS_SINCE_LAST_COMMENT > 5 )
{
m_announcerBattleTrickLevel3.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
m_soundBattleTrickLevel3.PlayRandom();
m_pEnemyFace->SetFace( EnemyFace::attack );
break;
case SM_BattleDamageLevel1:
if( SECS_SINCE_LAST_COMMENT > 5 )
{
m_announcerBattleDamageLevel1.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
m_pEnemyFace->SetFace( EnemyFace::damage );
break;
case SM_BattleDamageLevel2:
if( SECS_SINCE_LAST_COMMENT > 5 )
{
m_announcerBattleDamageLevel2.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
m_pEnemyFace->SetFace( EnemyFace::damage );
break;
case SM_BattleDamageLevel3:
if( SECS_SINCE_LAST_COMMENT > 5 )
{
m_announcerBattleDamageLevel3.PlayRandom();
m_fTimeLeftBeforeDancingComment = SECONDS_BETWEEN_COMMENTS;
}
m_pEnemyFace->SetFace( EnemyFace::damage );
break;
case SM_SaveChangedBeforeGoingBack:
if( m_bChangedOffsetOrBPM )
{
@@ -1595,6 +1742,10 @@ void ScreenGameplay::TweenOnScreen()
ON_COMMAND( m_textPlayerOptions[p] );
ON_COMMAND( m_DifficultyIcon[p] );
}
if( m_pEnemyFace )
ON_COMMAND( *m_pEnemyFace );
if( m_pEnemyHealth )
ON_COMMAND( *m_pEnemyHealth );
}
void ScreenGameplay::TweenOffScreen()
@@ -1613,6 +1764,10 @@ void ScreenGameplay::TweenOffScreen()
OFF_COMMAND( m_textPlayerOptions[p] );
OFF_COMMAND( m_DifficultyIcon[p] );
}
if( m_pEnemyFace )
OFF_COMMAND( *m_pEnemyFace );
if( m_pEnemyHealth )
OFF_COMMAND( *m_pEnemyHealth );
if(m_textDebug.GetTweenTimeLeft() > 1/8.f)
{
+20
View File
@@ -30,6 +30,8 @@
//#include "BeginnerHelper.h" // uncomment once it's checked in
#include "LyricDisplay.h"
#include "TimingAssist.h"
class EnemyHealth;
class EnemyFace;
// messages sent by Combo
@@ -47,6 +49,13 @@ 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);
class LyricsLoader;
class ScreenGameplay : public Screen
{
@@ -139,6 +148,8 @@ protected:
// used in PLAY_MODE_BATTLE
Inventory m_Inventory[NUM_PLAYERS];
ActiveItemList m_ActiveItemList[NUM_PLAYERS];
EnemyHealth* m_pEnemyHealth;
EnemyFace* m_pEnemyFace;
// used in PLAY_MODE_RAVE
RaveHelper m_RaveHelper[NUM_PLAYERS];
@@ -169,6 +180,15 @@ protected:
RandomSample m_announcer900Combo;
RandomSample m_announcer1000Combo;
RandomSample m_announcerComboStopped;
RandomSample m_announcerBattleTrickLevel1;
RandomSample m_announcerBattleTrickLevel2;
RandomSample m_announcerBattleTrickLevel3;
RandomSample m_soundBattleTrickLevel1;
RandomSample m_soundBattleTrickLevel2;
RandomSample m_soundBattleTrickLevel3;
RandomSample m_announcerBattleDamageLevel1;
RandomSample m_announcerBattleDamageLevel2;
RandomSample m_announcerBattleDamageLevel3;
bool m_bZeroDeltaOnNextUpdate;
bool m_bDemonstration;
+24
View File
@@ -1096,6 +1096,14 @@ SOURCE=.\FadingBanner.h
# End Source File
# Begin Source File
SOURCE=.\MeterDisplay.cpp
# End Source File
# Begin Source File
SOURCE=.\MeterDisplay.h
# End Source File
# Begin Source File
SOURCE=.\Transition.cpp
# End Source File
# Begin Source File
@@ -1148,6 +1156,22 @@ SOURCE=.\DancingCharacters.h
# End Source File
# Begin Source File
SOURCE=.\EnemyFace.cpp
# End Source File
# Begin Source File
SOURCE=.\EnemyFace.h
# End Source File
# Begin Source File
SOURCE=.\EnemyHealth.cpp
# End Source File
# Begin Source File
SOURCE=.\EnemyHealth.h
# End Source File
# Begin Source File
SOURCE=.\GhostArrow.cpp
# End Source File
# Begin Source File