ScreenEnding::ScreenEnding() { if( PREFSMAN->m_sTestInitialScreen.Get() != "" ) { PROFILEMAN->LoadFirstAvailableProfile(PLAYER_1); PROFILEMAN->LoadFirstAvailableProfile(PLAYER_2); GAMESTATE->m_PlayMode.Set( PLAY_MODE_REGULAR ); GAMESTATE->SetCurrentStyle( GAMEMAN->GameAndStringToStyle( GAMEMAN->GetDefaultGame(),"versus"), PLAYER_INVALID ); GAMESTATE->JoinPlayer( PLAYER_1 ); GAMESTATE->JoinPlayer( PLAYER_2 ); GAMESTATE->set_curr_song(SONGMAN->GetRandomSong()); GAMESTATE->m_pCurCourse.Set( SONGMAN->GetRandomCourse() ); GAMESTATE->m_pCurSteps[PLAYER_1].Set( GAMESTATE->get_curr_song()->GetAllSteps()[0] ); GAMESTATE->m_pCurSteps[PLAYER_2].Set( GAMESTATE->get_curr_song()->GetAllSteps()[0] ); STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_vpPossibleSteps.push_back( GAMESTATE->m_pCurSteps[PLAYER_1] ); STATSMAN->m_CurStageStats.m_player[PLAYER_2].m_vpPossibleSteps.push_back( GAMESTATE->m_pCurSteps[PLAYER_2] ); STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_iStepsPlayed = 1; STATSMAN->m_CurStageStats.m_player[PLAYER_2].m_iStepsPlayed = 1; PO_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions, ModsLevel_Stage, m_fScrollSpeed, 2.0f ); PO_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[PLAYER_2]->m_PlayerOptions, ModsLevel_Stage, m_fScrollSpeed, 2.0f ); GAMESTATE->m_iCurrentStageIndex = 0; FOREACH_ENUM( PlayerNumber, p ) GAMESTATE->m_iPlayerStageTokens[p] = 1; PO_GROUP_CALL( GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions, ModsLevel_Stage, ChooseRandomModifiers ); PO_GROUP_CALL( GAMESTATE->m_pPlayerState[PLAYER_2]->m_PlayerOptions, ModsLevel_Stage, ChooseRandomModifiers ); for( float f = 0; f < 100.0f; f += 1.0f ) { float fP1 = fmodf(f/100*4+.3f,1); STATSMAN->m_CurStageStats.m_player[PLAYER_1].SetLifeRecordAt( fP1, f ); STATSMAN->m_CurStageStats.m_player[PLAYER_2].SetLifeRecordAt( 1-fP1, f ); } STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_iActualDancePoints = RandomInt( 3 ); STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_iPossibleDancePoints = 2; STATSMAN->m_CurStageStats.m_player[PLAYER_2].m_iActualDancePoints = RandomInt( 2 ); STATSMAN->m_CurStageStats.m_player[PLAYER_2].m_iPossibleDancePoints = 1; STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_iCurCombo = 0; STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 0, false ); STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_iCurCombo = 1; STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 1, false ); STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_iCurCombo = 50; STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 25, false ); STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_iCurCombo = 250; STATSMAN->m_CurStageStats.m_player[PLAYER_1].UpdateComboList( 100, false ); STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_iTapNoteScores[TNS_W1] = RandomInt( 2 ); STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_iTapNoteScores[TNS_W2] = RandomInt( 2 ); STATSMAN->m_CurStageStats.m_player[PLAYER_1].m_iTapNoteScores[TNS_W3] = RandomInt( 2 ); STATSMAN->m_CurStageStats.m_player[PLAYER_2].m_iTapNoteScores[TNS_W1] = RandomInt( 2 ); STATSMAN->m_CurStageStats.m_player[PLAYER_2].m_iTapNoteScores[TNS_W2] = RandomInt( 2 ); STATSMAN->m_CurStageStats.m_player[PLAYER_2].m_iTapNoteScores[TNS_W3] = RandomInt( 2 ); STATSMAN->m_vPlayedStageStats.clear(); } }
void ScreenEvaluation::Init() { LOG->Trace( "ScreenEvaluation::Init()" ); // debugging // Only fill StageStats with fake info if we're the InitialScreen // (i.e. StageStats not already filled) if( PREFSMAN->m_sTestInitialScreen.Get() == m_sName ) { PROFILEMAN->LoadFirstAvailableProfile(PLAYER_1); PROFILEMAN->LoadFirstAvailableProfile(PLAYER_2); STATSMAN->m_vPlayedStageStats.clear(); STATSMAN->m_vPlayedStageStats.push_back( StageStats() ); StageStats &ss = STATSMAN->m_vPlayedStageStats.back(); GAMESTATE->m_PlayMode.Set( PLAY_MODE_REGULAR ); GAMESTATE->SetCurrentStyle( GAMEMAN->GameAndStringToStyle(GAMEMAN->GetDefaultGame(),"versus"), PLAYER_INVALID ); ss.m_playMode = GAMESTATE->m_PlayMode; ss.m_Stage = Stage_1st; enum_add( ss.m_Stage, rand()%3 ); ss.m_EarnedExtraStage = (EarnedExtraStage)(rand() % NUM_EarnedExtraStage); GAMESTATE->SetMasterPlayerNumber(PLAYER_1); GAMESTATE->m_pCurSong.Set( SONGMAN->GetRandomSong() ); ss.m_vpPlayedSongs.push_back( GAMESTATE->m_pCurSong ); ss.m_vpPossibleSongs.push_back( GAMESTATE->m_pCurSong ); GAMESTATE->m_pCurCourse.Set( SONGMAN->GetRandomCourse() ); GAMESTATE->m_iCurrentStageIndex = 0; FOREACH_ENUM( PlayerNumber, p ) GAMESTATE->m_iPlayerStageTokens[p] = 1; FOREACH_PlayerNumber( p ) { ss.m_player[p].m_pStyle = GAMESTATE->GetCurrentStyle(p); if( RandomInt(2) ) PO_GROUP_ASSIGN_N( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_bTransforms, PlayerOptions::TRANSFORM_ECHO, true ); // show "disqualified" SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_fMusicRate, 1.1f ); GAMESTATE->JoinPlayer( p ); GAMESTATE->m_pCurSteps[p].Set( GAMESTATE->m_pCurSong->GetAllSteps()[0] ); if( GAMESTATE->m_pCurCourse ) { vector<Trail*> apTrails; GAMESTATE->m_pCurCourse->GetAllTrails( apTrails ); if( apTrails.size() ) GAMESTATE->m_pCurTrail[p].Set( apTrails[0] ); } ss.m_player[p].m_vpPossibleSteps.push_back( GAMESTATE->m_pCurSteps[PLAYER_1] ); ss.m_player[p].m_iStepsPlayed = 1; PO_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_fScrollSpeed, 2.0f ); PO_GROUP_CALL( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, ChooseRandomModifiers ); } for( float f = 0; f < 100.0f; f += 1.0f ) { float fP1 = fmodf(f/100*4+.3f,1); ss.m_player[PLAYER_1].SetLifeRecordAt( fP1, f ); ss.m_player[PLAYER_2].SetLifeRecordAt( 1-fP1, f ); } FOREACH_PlayerNumber( p ) { float fSeconds = GAMESTATE->m_pCurSong->GetStepsSeconds(); ss.m_player[p].m_iActualDancePoints = RandomInt( 3 ); ss.m_player[p].m_iPossibleDancePoints = 2; if( RandomInt(2) ) ss.m_player[p].m_iCurCombo = RandomInt(15000); else ss.m_player[p].m_iCurCombo = 0; ss.m_player[p].UpdateComboList( 0, true ); ss.m_player[p].m_iCurCombo += 50; ss.m_player[p].UpdateComboList( 0.10f * fSeconds, false ); ss.m_player[p].m_iCurCombo = 0; ss.m_player[p].UpdateComboList( 0.15f * fSeconds, false ); ss.m_player[p].m_iCurCombo = 1; ss.m_player[p].UpdateComboList( 0.25f * fSeconds, false ); ss.m_player[p].m_iCurCombo = 50; ss.m_player[p].UpdateComboList( 0.35f * fSeconds, false ); ss.m_player[p].m_iCurCombo = 0; ss.m_player[p].UpdateComboList( 0.45f * fSeconds, false ); ss.m_player[p].m_iCurCombo = 1; ss.m_player[p].UpdateComboList( 0.50f * fSeconds, false ); ss.m_player[p].m_iCurCombo = 100; ss.m_player[p].UpdateComboList( 1.00f * fSeconds, false ); if( RandomInt(5) == 0 ) { ss.m_player[p].m_bFailed = true; } ss.m_player[p].m_iTapNoteScores[TNS_W1] = RandomInt( 3 ); ss.m_player[p].m_iTapNoteScores[TNS_W2] = RandomInt( 3 ); ss.m_player[p].m_iTapNoteScores[TNS_W3] = RandomInt( 3 ); ss.m_player[p].m_iPossibleGradePoints = 4*ScoreKeeperNormal::TapNoteScoreToGradePoints(TNS_W1, false); ss.m_player[p].m_fLifeRemainingSeconds = randomf( 90, 580 ); ss.m_player[p].m_iScore = rand() % (900*1000*1000); ss.m_player[p].m_iPersonalHighScoreIndex = (rand() % 3) - 1; ss.m_player[p].m_iMachineHighScoreIndex = (rand() % 3) - 1; ss.m_player[p].m_PeakComboAward = (PeakComboAward)(rand()%NUM_PeakComboAward); ss.m_player[p].m_StageAward = (StageAward)(rand()%NUM_StageAward); FOREACH_ENUM( RadarCategory, rc ) { switch( rc ) { case RadarCategory_Stream: case RadarCategory_Voltage: case RadarCategory_Air: case RadarCategory_Freeze: case RadarCategory_Chaos: ss.m_player[p].m_radarPossible[rc] = randomf( 0, 1 ); ss.m_player[p].m_radarActual[rc] = randomf( 0, ss.m_player[p].m_radarPossible[rc] ); break; case RadarCategory_TapsAndHolds: case RadarCategory_Jumps: case RadarCategory_Holds: case RadarCategory_Mines: case RadarCategory_Hands: case RadarCategory_Rolls: case RadarCategory_Lifts: case RadarCategory_Fakes: ss.m_player[p].m_radarPossible[rc] = 1 + (rand() % 200); ss.m_player[p].m_radarActual[rc] = rand() % (int)(ss.m_player[p].m_radarPossible[rc]); break; default: break; } ; // filled in by ScreenGameplay on start of notes } } }
void ScreenHowToPlay::Init() { ScreenAttract::Init(); if( (bool)USE_PAD && DoesFileExist( GetAnimPath(ANIM_DANCE_PAD) ) ) { m_pmDancePad = new Model; m_pmDancePad->SetName( "Pad" ); m_pmDancePad->LoadMilkshapeAscii( GetAnimPath(ANIM_DANCE_PAD) ); m_pmDancePad->SetRotationX( 35 ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_pmDancePad ); } // Display random character vector<Character*> vpCharacters; CHARMAN->GetCharacters( vpCharacters ); if( (bool)USE_CHARACTER && vpCharacters.size() && HaveAllCharAnimations() ) { Character* rndchar = CHARMAN->GetRandomCharacter(); RString sModelPath = rndchar->GetModelPath(); if( sModelPath != "" ) { m_pmCharacter = new Model; m_pmCharacter->SetName( "Character" ); m_pmCharacter->LoadMilkshapeAscii( rndchar->GetModelPath() ); m_pmCharacter->LoadMilkshapeAsciiBones( "Step-LEFT", GetAnimPath( ANIM_LEFT ) ); m_pmCharacter->LoadMilkshapeAsciiBones( "Step-DOWN", GetAnimPath( ANIM_DOWN ) ); m_pmCharacter->LoadMilkshapeAsciiBones( "Step-UP", GetAnimPath( ANIM_UP ) ); m_pmCharacter->LoadMilkshapeAsciiBones( "Step-RIGHT", GetAnimPath( ANIM_RIGHT ) ); m_pmCharacter->LoadMilkshapeAsciiBones( "Step-JUMPLR", GetAnimPath( ANIM_JUMPLR ) ); RString sRestFile = rndchar->GetRestAnimationPath(); ASSERT( !sRestFile.empty() ); m_pmCharacter->LoadMilkshapeAsciiBones( "rest",rndchar->GetRestAnimationPath() ); m_pmCharacter->SetDefaultAnimation( "rest" ); m_pmCharacter->PlayAnimation( "rest" ); // Stay bouncing after a step has finished animating. m_pmCharacter->SetRotationX( 40 ); m_pmCharacter->SetCullMode( CULL_NONE ); // many of the models floating around have the vertex order flipped LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_pmCharacter ); } } GAMESTATE->SetCurrentStyle( GAMEMAN->GetHowToPlayStyleForGame(GAMESTATE->m_pCurGame) ); if( USE_PLAYER ) { m_pLifeMeterBar = new LifeMeterBar; m_pLifeMeterBar->SetName("LifeMeterBar"); m_pLifeMeterBar->Load( GAMESTATE->m_pPlayerState[PLAYER_1], &STATSMAN->m_CurStageStats.m_player[PLAYER_1] ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_pLifeMeterBar ); m_pLifeMeterBar->FillForHowToPlay( NUM_W2S, NUM_MISSES ); SMLoader::LoadFromSMFile( THEME->GetPathO(m_sName, "steps"), m_Song, false ); m_Song.AddAutoGenNotes(); const Style* pStyle = GAMESTATE->GetCurrentStyle(); Steps *pSteps = SongUtil::GetStepsByDescription( &m_Song, pStyle->m_StepsType, "" ); ASSERT_M( pSteps != NULL, ssprintf("%i", pStyle->m_StepsType) ); NoteData tempNoteData; pSteps->GetNoteData( tempNoteData ); pStyle->GetTransformedNoteDataForStyle( PLAYER_1, tempNoteData, m_NoteData ); GAMESTATE->m_pCurSong.Set( &m_Song ); GAMESTATE->m_bGameplayLeadIn.Set( false ); GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerController = PC_AUTOPLAY; m_Player->Init( "Player", GAMESTATE->m_pPlayerState[PLAYER_1], NULL, m_pLifeMeterBar, NULL, NULL, NULL, NULL, NULL, NULL ); m_Player.Load( m_NoteData ); m_Player->SetName( "Player" ); this->AddChild( m_Player ); LOAD_ALL_COMMANDS_AND_SET_XY_AND_ON_COMMAND( m_Player ); // Don't show judgement PO_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions, ModsLevel_Stage, m_fBlind, 1.0f ); GAMESTATE->m_MasterPlayerNumber = PLAYER_1; GAMESTATE->m_bDemonstrationOrJukebox = true; } // deferred until after the player, so the notes go under it if( m_pLifeMeterBar ) this->AddChild( m_pLifeMeterBar ); if( m_pmDancePad ) this->AddChild( m_pmDancePad ); if( m_pmCharacter ) this->AddChild( m_pmCharacter ); m_fFakeSecondsIntoSong = 0; this->MoveToTail( &m_In ); this->MoveToTail( &m_Out ); }