diff --git a/stepmania/src/GameCommand.cpp b/stepmania/src/GameCommand.cpp index e707495b15..c22c7f022c 100644 --- a/stepmania/src/GameCommand.cpp +++ b/stepmania/src/GameCommand.cpp @@ -785,8 +785,7 @@ void GameCommand::ApplySelf( const vector &vpns ) const GAMESTATE->m_PlayMode != OldPlayMode && GAMESTATE->m_SongOptions.GetStage().m_LifeType == SongOptions::LIFE_BAR ) { - //MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, .m_LifeType = SongOptions::LIFE_BATTERY ); - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_LifeType, SongOptions::LIFE_BATTERY ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_LifeType, SongOptions::LIFE_BATTERY ); } } diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 8fe779585f..6618d890a3 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -369,7 +369,7 @@ void GameState::PlayersFinalized() * sets a default of "reverse", and the player turns it off, we should * set it off. However, don't reset modifiers that aren't saved by the * profile, so we don't ignore unsaved modifiers when a profile is in use. */ - MODS_GROUP_CALL( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions, ModsLevel_Preferred, ResetSavedPrefs ); + PO_GROUP_CALL( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions, ModsLevel_Preferred, ResetSavedPrefs ); GAMESTATE->ApplyPreferredModifiers( pn, sModifiers ); } // Only set the sort order if it wasn't already set by a GameCommand (or by an earlier profile) diff --git a/stepmania/src/ModsGroup.h b/stepmania/src/ModsGroup.h index 7e6dc7ce2c..f3ccc8bf17 100644 --- a/stepmania/src/ModsGroup.h +++ b/stepmania/src/ModsGroup.h @@ -13,9 +13,16 @@ enum ModsLevel NUM_ModsLevel, }; -#define MODS_GROUP_ASSIGN( group, level, member, val ) \ - (group).Assign( (level), &(group).GroupType::member, (val) ) -#define MODS_GROUP_CALL( group, level, fun ) (group).Call( (level), &(group).GroupType::fun ) +#define MODS_GROUP_ASSIGN( group, level, member, val ) (group).Assign( (level), member, (val) ) +#define MODS_GROUP_ASSIGN_N( group, level, member, n, val ) (group).Assign_n( (level), member, (n), (val) ) +#define MODS_GROUP_CALL( group, level, fun ) (group).Call( (level), fun ) + +#define PO_GROUP_ASSIGN( group, level, member, val ) MODS_GROUP_ASSIGN( (group), (level), &PlayerOptions::member, (val) ) +#define PO_GROUP_ASSIGN_N( group, level, member, n, val ) MODS_GROUP_ASSIGN_N( (group), (level), &PlayerOptions::member, (n), (val) ) +#define PO_GROUP_CALL( group, level, fun ) MODS_GROUP_CALL( (group), (level), &PlayerOptions::fun ) +#define SO_GROUP_ASSIGN( group, level, member, val ) MODS_GROUP_ASSIGN( (group), (level), &SongOptions::member, (val) ) +#define SO_GROUP_ASSIGN_N( group, level, member, n, val ) MODS_GROUP_ASSIGN_N( (group), (level), &SongOptions::member, (n), (val) ) +#define SO_GROUP_CALL( group, level, fun ) MODS_GROUP_CALL( (group), (level), &SongOptions::fun ) template class ModsGroup @@ -25,8 +32,6 @@ class ModsGroup T m_Current; // approaches ModsLevel_Song public: - typedef T GroupType; - void Init() { Call( ModsLevel_Preferred, &T::Init ); @@ -49,6 +54,16 @@ public: m_[level].*member = val; } + // XXX U T::*member doesn't work, U T::*member[] doesn't work, U (T::*member)[] doesn't work. What is V? + template + void Assign_n( ModsLevel level, V member, size_t index, const U &val ) + { + if( level != ModsLevel_Song ) + (m_Current.*member)[index] = val; + for( ; level < NUM_ModsLevel; enum_add(level, 1) ) + (m_[level].*member)[index] = val; + } + void Assign( ModsLevel level, const T &val ) { if( level != ModsLevel_Song ) diff --git a/stepmania/src/ScreenDebugOverlay.cpp b/stepmania/src/ScreenDebugOverlay.cpp index 3925315740..4da7e643ad 100644 --- a/stepmania/src/ScreenDebugOverlay.cpp +++ b/stepmania/src/ScreenDebugOverlay.cpp @@ -481,7 +481,7 @@ class DebugLineAssistTick : public IDebugLine virtual void Do( RString &sMessageOut ) { bool bAssistTick = !GAMESTATE->m_SongOptions.GetSong().m_bAssistTick; - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Song, m_bAssistTick, bAssistTick ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Song, m_bAssistTick, bAssistTick ); MESSAGEMAN->Broadcast( Message_AssistTickChanged ); IDebugLine::Do( sMessageOut ); } @@ -506,7 +506,7 @@ class DebugLineAutosync : public IDebugLine { SongOptions::AutosyncType as = enum_add2( GAMESTATE->m_SongOptions.GetSong().m_AutosyncType, 1 ); wrap( (int&)as, SongOptions::NUM_AUTOSYNC_TYPES ); - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Song, m_AutosyncType, as ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Song, m_AutosyncType, as ); MESSAGEMAN->Broadcast( Message_AutosyncChanged ); IDebugLine::Do( sMessageOut ); } diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index e8c2a5046d..ae56f9f1d9 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -697,11 +697,11 @@ void ScreenEdit::Init() const RString &sNoteSkin = EDITOR_NOTE_SKINS[pn]; if( NOTESKIN->DoesNoteSkinExist(sNoteSkin) ) - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions, ModsLevel_Stage, m_sNoteSkin, sNoteSkin ); + PO_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions, ModsLevel_Stage, m_sNoteSkin, sNoteSkin ); } m_PlayerStateEdit.m_PlayerNumber = PLAYER_1; - MODS_GROUP_ASSIGN( m_PlayerStateEdit.m_PlayerOptions, ModsLevel_Stage, m_sNoteSkin, GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.GetStage().m_sNoteSkin ); + PO_GROUP_ASSIGN( m_PlayerStateEdit.m_PlayerOptions, ModsLevel_Stage, m_sNoteSkin, GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.GetStage().m_sNoteSkin ); m_pSteps->GetNoteData( m_NoteDataEdit ); m_NoteFieldEdit.SetXY( EDIT_X, EDIT_Y ); @@ -775,7 +775,7 @@ void ScreenEdit::Init() ScreenEdit::~ScreenEdit() { FOREACH_PlayerNumber( pn ) - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions, ModsLevel_Stage, m_sNoteSkin, m_sOldNoteSkins[pn] ); + PO_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions, ModsLevel_Stage, m_sNoteSkin, m_sOldNoteSkins[pn] ); // UGLY: Don't delete the Song's steps. m_songLastSave.DetachSteps(); @@ -1257,7 +1257,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) fScrollSpeed = fSpeeds[iSpeed]; } - MODS_GROUP_ASSIGN( pPlayerState->m_PlayerOptions, ModsLevel_Stage, m_fScrollSpeed, fScrollSpeed ); + PO_GROUP_ASSIGN( pPlayerState->m_PlayerOptions, ModsLevel_Stage, m_fScrollSpeed, fScrollSpeed ); break; } @@ -1389,7 +1389,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) DoHelp(); break; case EDIT_BUTTON_TOGGLE_ASSIST_TICK: - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_bAssistTick, !GAMESTATE->m_SongOptions.GetStage().m_bAssistTick ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_bAssistTick, !GAMESTATE->m_SongOptions.GetStage().m_bAssistTick ); break; case EDIT_BUTTON_OPEN_NEXT_STEPS: case EDIT_BUTTON_OPEN_PREV_STEPS: @@ -2028,7 +2028,7 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) TransitionEditState( STATE_EDITING ); break; case EDIT_BUTTON_TOGGLE_ASSIST_TICK: - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_bAssistTick, !GAMESTATE->m_SongOptions.GetStage().m_bAssistTick ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_bAssistTick, !GAMESTATE->m_SongOptions.GetStage().m_bAssistTick ); break; case EDIT_BUTTON_TOGGLE_AUTOPLAY: { @@ -2151,7 +2151,7 @@ void ScreenEdit::TransitionEditState( EditState em ) { case STATE_RECORDING: case STATE_RECORDING_PAUSED: - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions, ModsLevel_Stage, m_fScrolls[PlayerOptions::SCROLL_CENTERED], 1.0f ); + PO_GROUP_ASSIGN_N( GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions, ModsLevel_Stage, m_fScrolls, PlayerOptions::SCROLL_CENTERED, 1.0f ); break; } diff --git a/stepmania/src/ScreenEnding.cpp b/stepmania/src/ScreenEnding.cpp index b0c4232b91..20483373d0 100644 --- a/stepmania/src/ScreenEnding.cpp +++ b/stepmania/src/ScreenEnding.cpp @@ -40,11 +40,11 @@ ScreenEnding::ScreenEnding() : ScreenAttract( false/*dont reset GAMESTATE*/ ) GAMESTATE->m_pCurSteps[PLAYER_2].Set( GAMESTATE->m_pCurSong->GetAllSteps()[0] ); STATSMAN->m_CurStageStats.m_player[PLAYER_1].vpPlayedSteps.push_back( GAMESTATE->m_pCurSteps[PLAYER_1] ); STATSMAN->m_CurStageStats.m_player[PLAYER_2].vpPlayedSteps.push_back( GAMESTATE->m_pCurSteps[PLAYER_2] ); - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions, ModsLevel_Stage, m_fScrollSpeed, 2.0f ); - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[PLAYER_2]->m_PlayerOptions, ModsLevel_Stage, m_fScrollSpeed, 2.0f ); + 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; - MODS_GROUP_CALL( GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions, ModsLevel_Stage, ChooseRandomModifiers ); - MODS_GROUP_CALL( GAMESTATE->m_pPlayerState[PLAYER_2]->m_PlayerOptions, ModsLevel_Stage, ChooseRandomModifiers ); + 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 ) { diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index 9ed665ea49..aa5ba5629a 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -107,7 +107,7 @@ ScreenEvaluation::ScreenEvaluation() FOREACH_PlayerNumber( p ) { if( RandomInt(2) ) - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_bTransforms[PlayerOptions::TRANSFORM_ECHO], true ); // show "disqualified" + PO_GROUP_ASSIGN_N( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_bTransforms, PlayerOptions::TRANSFORM_ECHO, true ); // show "disqualified" GAMESTATE->m_bSideIsJoined[p] = true; GAMESTATE->m_pCurSteps[p].Set( GAMESTATE->m_pCurSong->GetAllSteps()[0] ); @@ -119,8 +119,8 @@ ScreenEvaluation::ScreenEvaluation() STATSMAN->m_CurStageStats.m_player[p].vpPossibleSteps.push_back( GAMESTATE->m_pCurSteps[PLAYER_1] ); - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_fScrollSpeed, 2.0f ); - MODS_GROUP_CALL( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, ChooseRandomModifiers ); + 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 ) diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index 697f4007ed..1428e5502b 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -1027,7 +1027,7 @@ void ScreenGameplay::LoadNextSong() /* If we're in battery mode, force FailImmediate. We assume in PlayerMinus::Step that * failed players can't step. */ if( GAMESTATE->m_SongOptions.GetCurrent().m_LifeType == SongOptions::LIFE_BATTERY ) - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Song, m_FailType, SongOptions::FAIL_IMMEDIATE ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Song, m_FailType, SongOptions::FAIL_IMMEDIATE ); m_textSongOptions.SetText( GAMESTATE->m_SongOptions.GetCurrent().GetString() ); diff --git a/stepmania/src/ScreenGameplaySyncMachine.cpp b/stepmania/src/ScreenGameplaySyncMachine.cpp index dc5d300284..18ba185869 100644 --- a/stepmania/src/ScreenGameplaySyncMachine.cpp +++ b/stepmania/src/ScreenGameplaySyncMachine.cpp @@ -28,7 +28,7 @@ void ScreenGameplaySyncMachine::Init() ASSERT( pSteps ); GAMESTATE->m_pCurSteps[0].Set( pSteps ); - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_AutosyncType, SongOptions::AUTOSYNC_MACHINE ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_AutosyncType, SongOptions::AUTOSYNC_MACHINE ); PREFSMAN->m_AutoPlay.Set( PC_HUMAN ); ScreenGameplayNormal::Init( false ); diff --git a/stepmania/src/ScreenHowToPlay.cpp b/stepmania/src/ScreenHowToPlay.cpp index 7aff1479c4..092becd942 100644 --- a/stepmania/src/ScreenHowToPlay.cpp +++ b/stepmania/src/ScreenHowToPlay.cpp @@ -170,7 +170,7 @@ void ScreenHowToPlay::Init() SET_XY_AND_ON_COMMAND( m_Player ); // Don't show judgement - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions, ModsLevel_Stage, m_fBlind, 1.0f ); + 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; } diff --git a/stepmania/src/ScreenJukebox.cpp b/stepmania/src/ScreenJukebox.cpp index 5c99924c9f..14cc88f52c 100644 --- a/stepmania/src/ScreenJukebox.cpp +++ b/stepmania/src/ScreenJukebox.cpp @@ -200,13 +200,13 @@ void ScreenJukebox::Init() { /* Lots and lots of arrows. This might even bias to arrows a little * too much. */ - MODS_GROUP_CALL( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, Init ); - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_fScrollSpeed, .25f ); - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_fPerspectiveTilt, -1.0f ); - MODS_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_fEffects[ PlayerOptions::EFFECT_MINI ], 1.0f ); + PO_GROUP_CALL( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, Init ); + PO_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_fScrollSpeed, .25f ); + PO_GROUP_ASSIGN( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_fPerspectiveTilt, -1.0f ); + PO_GROUP_ASSIGN_N( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, m_fEffects, PlayerOptions::EFFECT_MINI, 1.0f ); } - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_LifeType, SongOptions::LIFE_BATTERY ); - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_FailType, SongOptions::FAIL_OFF ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_LifeType, SongOptions::LIFE_BATTERY ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_FailType, SongOptions::FAIL_OFF ); } FOREACH_EnabledPlayer( p ) @@ -227,7 +227,7 @@ void ScreenJukebox::Init() GAMESTATE->GetDefaultSongOptions( so ); GAMESTATE->m_SongOptions.Assign( ModsLevel_Stage, so ); - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_FailType, SongOptions::FAIL_OFF ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_FailType, SongOptions::FAIL_OFF ); GAMESTATE->m_bDemonstrationOrJukebox = true; diff --git a/stepmania/src/ScreenNameEntry.cpp b/stepmania/src/ScreenNameEntry.cpp index 78f70bdf84..c385a845f1 100644 --- a/stepmania/src/ScreenNameEntry.cpp +++ b/stepmania/src/ScreenNameEntry.cpp @@ -114,8 +114,8 @@ void ScreenNameEntry::Init() // reset Player and Song Options { FOREACH_PlayerNumber( p ) - MODS_GROUP_CALL( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, Init ); - MODS_GROUP_CALL( GAMESTATE->m_SongOptions, ModsLevel_Stage, Init ); + PO_GROUP_CALL( GAMESTATE->m_pPlayerState[p]->m_PlayerOptions, ModsLevel_Stage, Init ); + SO_GROUP_CALL( GAMESTATE->m_SongOptions, ModsLevel_Stage, Init ); } vector aFeats[NUM_PLAYERS]; diff --git a/stepmania/src/ScreenPlayerOptions.cpp b/stepmania/src/ScreenPlayerOptions.cpp index 2dc09f1d68..b58789628f 100644 --- a/stepmania/src/ScreenPlayerOptions.cpp +++ b/stepmania/src/ScreenPlayerOptions.cpp @@ -158,7 +158,7 @@ void ScreenPlayerOptions::UpdateDisqualified( int row, PlayerNumber pn ) // Find out if the current row when exprorted causes disqualification. // Exporting the row will fill GAMESTATE->m_PlayerOptions. - MODS_GROUP_CALL( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions, ModsLevel_Preferred, Init ); + PO_GROUP_CALL( GAMESTATE->m_pPlayerState[pn]->m_PlayerOptions, ModsLevel_Preferred, Init ); vector v; v.push_back( pn ); ExportOptions( row, v ); diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index e42571f40b..943fc6311a 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -1170,8 +1170,8 @@ void ScreenSelectMusic::MenuStart( PlayerNumber pn ) // apply #LIVES if( pCourse->m_iLives != -1 ) { - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_LifeType, SongOptions::LIFE_BATTERY ); - MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_iBatteryLives, pCourse->m_iLives ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_LifeType, SongOptions::LIFE_BATTERY ); + SO_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_iBatteryLives, pCourse->m_iLives ); } m_bMadeChoice = true;