Apparently VC doesn't like using (group).GroupType as a type (and frankly, I couldn't get g++ to accept it outside of StepMania, either) so use the macros with PO and SO prefixes for PlayerOptions and SongOptions, respectively. Also, pointers to data members can't point to elements of an array (no idea why gcc was allowing it before) so use Assign_n and pass the index separately. (Very annoying, typeof() should really be in the standard.)
This commit is contained in:
@@ -785,8 +785,7 @@ void GameCommand::ApplySelf( const vector<PlayerNumber> &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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 T>
|
||||
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<typename U, typename V>
|
||||
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 )
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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() );
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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<GameState::RankingFeat> aFeats[NUM_PLAYERS];
|
||||
|
||||
@@ -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<PlayerNumber> v;
|
||||
v.push_back( pn );
|
||||
ExportOptions( row, v );
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user