add default character so Rave/Battle is playable without character models

This commit is contained in:
Chris Danford
2003-09-25 04:22:51 +00:00
parent dbb2527fcb
commit 4414561fe6
10 changed files with 83 additions and 38 deletions
+4 -1
View File
@@ -122,7 +122,10 @@ bool BeginnerHelper::CanUse()
if( GAMESTATE->m_CurGame != GAME_DANCE )
return false;
if( GAMESTATE->m_pCharacters.size() == 0 )
vector<Character*> apCharacters;
GAMESTATE->GetCharacters( apCharacters );
if( apCharacters.size() == 0 )
return false;
switch (GAMESTATE->m_CurStyle)
+9 -1
View File
@@ -52,7 +52,15 @@ CString GetRandomFileInDir( CString sDir )
}
CString Character::GetModelPath() { return m_sCharDir + "model.txt"; }
CString Character::GetModelPath()
{
CString s = m_sCharDir + "model.txt";
if( DoesFileExist(s) )
return s;
else
return "";
}
CString Character::GetRestAnimationPath() { return DerefRedir(GetRandomFileInDir(m_sCharDir + "Rest" SLASH)); }
CString Character::GetWarmUpAnimationPath() { return DerefRedir(GetRandomFileInDir(m_sCharDir + "WarmUp" SLASH)); }
CString Character::GetDanceAnimationPath() { return DerefRedir(GetRandomFileInDir(m_sCharDir + "Dance" SLASH)); }
+3
View File
@@ -53,6 +53,9 @@ DancingCharacters::DancingCharacters()
if( !pChar )
continue;
if( pChar->GetModelPath().empty() )
continue;
if( GAMESTATE->GetNumPlayersEnabled()==2 )
m_Character[p].SetX( MODEL_X_TWO_PLAYERS[p] );
else
+29 -1
View File
@@ -113,7 +113,7 @@ void GameState::Reset()
if( PREFSMAN->m_ShowDancingCharacters == PrefsManager::CO_RANDOM)
m_pCurCharacters[p] = GetRandomCharacter();
else
m_pCurCharacters[p] = NULL;
m_pCurCharacters[p] = GetDefaultCharacter();
}
for( p=0; p<NUM_PLAYERS; p++ )
@@ -727,3 +727,31 @@ bool GameState::ShowMarvelous() const
return false;
}
void GameState::GetCharacters( vector<Character*> apCharactersOut )
{
for( unsigned i=0; i<m_pCharacters.size(); i++ )
if( m_pCharacters[i]->m_sName.CompareNoCase("default")!=0 )
apCharactersOut.push_back( m_pCharacters[i] );
}
Character* GameState::GetRandomCharacter()
{
vector<Character*> apCharacters;
GetCharacters( apCharacters );
if( apCharacters.size() )
return m_pCharacters[rand()%apCharacters.size()];
else
return NULL;
}
Character* GameState::GetDefaultCharacter()
{
for( unsigned i=0; i<m_pCharacters.size(); i++ )
{
if( m_pCharacters[i]->m_sName.CompareNoCase("default")==0 )
return m_pCharacters[i];
}
return NULL;
}
+6 -8
View File
@@ -96,13 +96,9 @@ public:
return true;
return false;
}
Character* GameState::GetRandomCharacter()
{
if( m_pCharacters.size() )
return m_pCharacters[rand()%m_pCharacters.size()];
else
return NULL;
}
void GetCharacters( vector<Character*> apCharactersOut );
Character* GameState::GetRandomCharacter();
Character* GameState::GetDefaultCharacter();
PlayerController m_PlayerController[NUM_PLAYERS];
@@ -234,7 +230,9 @@ public:
void AdjustFailType();
// character stuff
vector<Character*> m_pCharacters;
private:
vector<Character*> m_pCharacters;
public:
Character* m_pCurCharacters[NUM_PLAYERS];
void ReloadCharacters();
+1
View File
@@ -154,6 +154,7 @@ void PlayerMinus::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, Co
for( int al=0; al<NUM_ATTACK_LEVELS; al++ )
{
Character *ch = GAMESTATE->m_pCurCharacters[m_PlayerNumber];
ASSERT( ch );
CString* asAttacks = ch->m_sAttacks[al];
for( int att = 0; att < NUM_ATTACKS_PER_LEVEL; ++att )
{
+3 -1
View File
@@ -104,7 +104,9 @@ ScreenHowToPlay::ScreenHowToPlay() : ScreenAttract("ScreenHowToPlay")
}
// Display random character
if( USECHARACTER && GAMESTATE->m_pCharacters.size() && HaveAllCharAnimations() )
vector<Character*> apCharacters;
GAMESTATE->GetCharacters( apCharacters );
if( USECHARACTER && apCharacters.size() && HaveAllCharAnimations() )
{
Character* rndchar = GAMESTATE->GetRandomCharacter();
+11 -5
View File
@@ -176,9 +176,11 @@ void ScreenPlayerOptions::ImportOptions()
//
m_OptionRow[PO_CHARACTER].choices.clear();
m_OptionRow[PO_CHARACTER].choices.push_back( "OFF" );
for( i=0; i<GAMESTATE->m_pCharacters.size(); i++ )
vector<Character*> apCharacters;
GAMESTATE->GetCharacters( apCharacters );
for( i=0; i<apCharacters.size(); i++ )
{
CString s = GAMESTATE->m_pCharacters[i]->m_sName;
CString s = apCharacters[i]->m_sName;
s.MakeUpper();
m_OptionRow[PO_CHARACTER].choices.push_back( s );
}
@@ -293,8 +295,10 @@ void ScreenPlayerOptions::ImportOptions()
m_iSelectedOption[p][PO_PERSPECTIVE] = n;
}
for( i=0; i<GAMESTATE->m_pCharacters.size(); i++ )
if( GAMESTATE->m_pCurCharacters[p] == GAMESTATE->m_pCharacters[i] )
vector<Character*> apCharacters;
GAMESTATE->GetCharacters( apCharacters );
for( i=0; i<apCharacters.size(); i++ )
if( GAMESTATE->m_pCurCharacters[p] == apCharacters[i] )
m_iSelectedOption[p][PO_CHARACTER] = i+1;
/* Why do this? We don't want to erase if we back out. */
@@ -430,7 +434,9 @@ void ScreenPlayerOptions::ExportOptions()
else
{
int choice = m_iSelectedOption[p][PO_CHARACTER] - 1;
GAMESTATE->m_pCurCharacters[p] = GAMESTATE->m_pCharacters[choice];
vector<Character*> apCharacters;
GAMESTATE->GetCharacters( apCharacters );
GAMESTATE->m_pCurCharacters[p] = apCharacters[choice];
}
}
}
+16 -20
View File
@@ -71,17 +71,6 @@ ScreenSelectCharacter::ScreenSelectCharacter() : Screen("ScreenSelectCharacter")
//
case PLAY_MODE_BATTLE:
case PLAY_MODE_RAVE:
//
// The case of disallowing the playing of Rave/Battle mode when there
// are no characters should be handled by ScreenSelectXxx consulting
// GAMESTATE->IsPlayable(), and not here.
//
// if( GAMESTATE->m_pCharacters.empty() )
// {
// SCREENMAN->Prompt( SM_GoToPrevScreen, "No characters are installed.\n\nAt least one character must be installed\nto play this mode." );
// return;
//}
ASSERT( !GAMESTATE->m_pCharacters.empty() );
break;
//
@@ -89,8 +78,9 @@ ScreenSelectCharacter::ScreenSelectCharacter() : Screen("ScreenSelectCharacter")
// characters or if this screen should be hidden
//
default:
if( GAMESTATE->m_pCharacters.empty() ||
PREFSMAN->m_ShowDancingCharacters != PrefsManager::CO_SELECT )
vector<Character*> apCharacters;
GAMESTATE->GetCharacters( apCharacters );
if( apCharacters.empty() || PREFSMAN->m_ShowDancingCharacters != PrefsManager::CO_SELECT )
{
HandleScreenMessage( SM_GoToNextScreen );
return;
@@ -278,7 +268,9 @@ void ScreenSelectCharacter::AfterValueChange( PlayerNumber pn )
case CHOOSING_CPU_CHARACTER:
case CHOOSING_HUMAN_CHARACTER:
{
Character* pChar = GAMESTATE->m_pCharacters[ m_iSelectedCharacter[pnAffected] ];
vector<Character*> apCharacters;
GAMESTATE->GetCharacters( apCharacters );
Character* pChar = apCharacters[ m_iSelectedCharacter[pnAffected] ];
m_sprCard[pnAffected].UnloadTexture();
m_sprCard[pnAffected].Load( pChar->GetCardPath() );
@@ -288,13 +280,13 @@ void ScreenSelectCharacter::AfterValueChange( PlayerNumber pn )
m_AttackIcons[pnAffected][i][j].Load( pnAffected, pChar->m_sAttacks[i][j] );
int c = m_iSelectedCharacter[pnAffected] - MAX_CHAR_ICONS_TO_SHOW/2;
wrap( c, GAMESTATE->m_pCharacters.size() );
wrap( c, apCharacters.size() );
for( unsigned i=0; i<MAX_CHAR_ICONS_TO_SHOW; i++ )
{
c++;
wrap( c, GAMESTATE->m_pCharacters.size() );
Character* pCharacter = GAMESTATE->m_pCharacters[c];
wrap( c, apCharacters.size() );
Character* pCharacter = apCharacters[c];
Banner &banner = m_sprIcons[pnAffected][i];
banner.LoadIconFromCharacter( pCharacter );
float fX = (pnAffected==PLAYER_1) ? 320-ICON_WIDTH : 320+ICON_WIDTH;
@@ -340,8 +332,10 @@ void ScreenSelectCharacter::Move( PlayerNumber pn, int deltaValue )
{
case CHOOSING_CPU_CHARACTER:
case CHOOSING_HUMAN_CHARACTER:
m_iSelectedCharacter[pnAffected] = (m_iSelectedCharacter[pnAffected]+deltaValue)+GAMESTATE->m_pCharacters.size();
m_iSelectedCharacter[pnAffected] %= GAMESTATE->m_pCharacters.size();
vector<Character*> apCharacters;
GAMESTATE->GetCharacters( apCharacters );
m_iSelectedCharacter[pnAffected] += deltaValue;
wrap( m_iSelectedCharacter[pnAffected], apCharacters.size() );
AfterValueChange(pn);
m_soundChange.PlayRandom();
break;
@@ -378,7 +372,9 @@ void ScreenSelectCharacter::MenuStart( PlayerNumber pn )
{
for( int p=0; p<NUM_PLAYERS; p++ )
{
Character* pChar = GAMESTATE->m_pCharacters[ m_iSelectedCharacter[p] ];
vector<Character*> apCharacters;
GAMESTATE->GetCharacters( apCharacters );
Character* pChar = apCharacters[ m_iSelectedCharacter[p] ];
GAMESTATE->m_pCurCharacters[p] = pChar;
}
+1 -1
View File
@@ -79,7 +79,7 @@ IDD_OK DIALOG DISCARDABLE 0, 0, 318, 87
STYLE DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION
CAPTION "StepMania"
FONT 8, "MS Shell Dlg"
BEGIN
BEGIN
DEFPUSHBUTTON "OK",IDOK,131,66,50,14
CONTROL "&Don't display this message",IDC_HUSH,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,211,67,100,10