void RageFileManager::Unmount( CString Type, CString Root, CString MountPoint ) { LockMut( *g_Mutex ); FixSlashesInPlace( Root ); FixSlashesInPlace( MountPoint ); if( MountPoint.size() && MountPoint.Right(1) != "/" ) MountPoint += '/'; for( unsigned i = 0; i < g_Drivers.size(); ++i ) { if( g_Drivers[i].Type.CompareNoCase( Type ) ) continue; if( g_Drivers[i].Root.CompareNoCase( Root ) ) continue; if( g_Drivers[i].MountPoint.CompareNoCase( MountPoint ) ) continue; delete g_Drivers[i].driver; g_Drivers.erase( g_Drivers.begin()+i ); } g_Mountpoints->LoadFromDrivers( g_Drivers ); }
bool RageFile::Open( const RString& path, int mode ) { ASSERT( FILEMAN != NULL ); Close(); m_Path = path; FixSlashesInPlace(m_Path); m_Mode = mode; if( (m_Mode&READ) && (m_Mode&WRITE) ) { SetError( "Reading and writing are mutually exclusive" ); return false; } if( !(m_Mode&READ) && !(m_Mode&WRITE) ) { SetError( "Neither reading nor writing specified" ); return false; } int error; m_File = FILEMAN->Open( path, mode, error ); if( m_File == NULL ) { SetError( strerror(error) ); return false; } return true; }
void RageFileManager::Mount( CString Type, CString Root, CString MountPoint ) { LockMut( *g_Mutex ); FixSlashesInPlace( Root ); FixSlashesInPlace( MountPoint ); if( MountPoint.size() && MountPoint.Right(1) != "/" ) MountPoint += '/'; ASSERT( Root != "" ); CHECKPOINT_M( ssprintf("\"%s\", \"%s\", \"%s\"", Type.c_str(), Root.c_str(), MountPoint.c_str() ) ); // Unmount anything that was previously mounted here. Unmount( Type, Root, MountPoint ); CHECKPOINT; RageFileDriver *driver = MakeFileDriver( Type, Root ); if( !driver ) { CHECKPOINT; if( LOG ) LOG->Warn("Can't mount unknown VFS type \"%s\", root \"%s\"", Type.c_str(), Root.c_str() ); else fprintf( stderr, "Can't mount unknown VFS type \"%s\", root \"%s\"\n", Type.c_str(), Root.c_str() ); return; } CHECKPOINT; LoadedDriver ld; ld.driver = driver; ld.Type = Type; ld.Root = Root; ld.MountPoint = MountPoint; g_Drivers.push_back( ld ); CHECKPOINT; g_Mountpoints->LoadFromDrivers( g_Drivers ); CHECKPOINT; }
void Transition::Load( CString sBGAniDir ) { if( IsADirectory(sBGAniDir) && sBGAniDir.Right(1) != "/" ) sBGAniDir += "/"; this->RemoveAllChildren(); m_sprTransition.Load( sBGAniDir ); m_sprTransition->PlayCommand( "On" ); this->AddChild( m_sprTransition ); m_fLengthSeconds = m_sprTransition->GetTweenTimeLeft(); m_State = waiting; // load sound from file specified by ini, or use the first sound in the directory if( IsADirectory(sBGAniDir) ) { IniFile ini; ini.ReadFile( sBGAniDir+"/BGAnimation.ini" ); CString sSoundFileName; if( ini.GetValue("BGAnimation","Sound", sSoundFileName) ) { FixSlashesInPlace( sSoundFileName ); CString sPath = sBGAniDir+sSoundFileName; CollapsePath( sPath ); m_sound.Load( sPath ); } else { m_sound.Load( sBGAniDir ); } } else if( GetExtension(sBGAniDir).CompareNoCase("xml") == 0 ) { CString sSoundFile; XNode xml; xml.LoadFromFile( sBGAniDir ); if( xml.GetAttrValue( "Sound", sSoundFile ) ) m_sound.Load( Dirname(sBGAniDir) + sSoundFile ); } }
RageFileDriver *RageFileManager::GetFileDriver( RString sMountpoint ) { FixSlashesInPlace( sMountpoint ); if( sMountpoint.size() && sMountpoint.Right(1) != "/" ) sMountpoint += '/'; g_Mutex->Lock(); RageFileDriver *pRet = NULL; for( unsigned i = 0; i < g_pDrivers.size(); ++i ) { if( g_pDrivers[i]->m_sType == "mountpoints" ) continue; if( g_pDrivers[i]->m_sMountPoint.CompareNoCase( sMountpoint ) ) continue; pRet = g_pDrivers[i]->m_pDriver; ++g_pDrivers[i]->m_iRefs; break; } g_Mutex->Unlock(); return pRet; }
bool msAnimation::LoadMilkshapeAsciiBones( CString sAniName, CString sPath ) { FixSlashesInPlace(sPath); const CString sDir = Dirname( sPath ); RageFile f; if ( !f.Open(sPath) ) RageException::Throw( "Model:: Could not open \"%s\": %s", sPath.c_str(), f.GetError().c_str() ); CString sLine; int iLineNum = 0; msAnimation &Animation = *this; bool bLoaded = false; while( f.GetLine( sLine ) > 0 ) { iLineNum++; if (!strncmp (sLine, "//", 2)) continue; // // bones // int nNumBones = 0; if( sscanf (sLine, "Bones: %d", &nNumBones) != 1 ) continue; char szName[MS_MAX_NAME]; Animation.Bones.resize( nNumBones ); for( int i = 0; i < nNumBones; i++ ) { msBone& Bone = Animation.Bones[i]; // name if( f.GetLine( sLine ) <= 0 ) THROW; if (sscanf (sLine, "\"%[^\"]\"", szName) != 1) THROW; strcpy( Bone.szName, szName ); // parent if( f.GetLine( sLine ) <= 0 ) THROW; strcpy (szName, ""); sscanf (sLine, "\"%[^\"]\"", szName); strcpy( Bone.szParentName, szName ); // flags, position, rotation RageVector3 Position, Rotation; if( f.GetLine( sLine ) <= 0 ) THROW; int nFlags; if (sscanf (sLine, "%d %f %f %f %f %f %f", &nFlags, &Position[0], &Position[1], &Position[2], &Rotation[0], &Rotation[1], &Rotation[2]) != 7) { THROW; } Rotation = RadianToDegree(Rotation); Bone.nFlags = nFlags; memcpy( &Bone.Position, &Position, sizeof(Bone.Position) ); memcpy( &Bone.Rotation, &Rotation, sizeof(Bone.Rotation) ); // position key count if( f.GetLine( sLine ) <= 0 ) THROW; int nNumPositionKeys = 0; if (sscanf (sLine, "%d", &nNumPositionKeys) != 1) THROW; Bone.PositionKeys.resize( nNumPositionKeys ); for( int j = 0; j < nNumPositionKeys; ++j ) { if( f.GetLine( sLine ) <= 0 ) THROW; float fTime; if (sscanf (sLine, "%f %f %f %f", &fTime, &Position[0], &Position[1], &Position[2]) != 4) THROW; msPositionKey key; key.fTime = fTime; key.Position = RageVector3( Position[0], Position[1], Position[2] ); Bone.PositionKeys[j] = key; } // rotation key count if( f.GetLine( sLine ) <= 0 ) THROW; int nNumRotationKeys = 0; if (sscanf (sLine, "%d", &nNumRotationKeys) != 1) THROW; Bone.RotationKeys.resize( nNumRotationKeys ); for( int j = 0; j < nNumRotationKeys; ++j ) { if( f.GetLine( sLine ) <= 0 ) THROW; float fTime; if (sscanf (sLine, "%f %f %f %f", &fTime, &Rotation[0], &Rotation[1], &Rotation[2]) != 4) THROW; Rotation = RadianToDegree(Rotation); msRotationKey key; key.fTime = fTime; key.Rotation = RageVector3( Rotation[0], Rotation[1], Rotation[2] ); Bone.RotationKeys[j] = key; } } // Ignore "Frames:" in file. Calculate it ourself Animation.nTotalFrames = 0; for( int i = 0; i < (int)Animation.Bones.size(); i++ ) { msBone& Bone = Animation.Bones[i]; for( unsigned j = 0; j < Bone.PositionKeys.size(); ++j ) Animation.nTotalFrames = max( Animation.nTotalFrames, (int)Bone.PositionKeys[j].fTime ); for( unsigned j = 0; j < Bone.RotationKeys.size(); ++j ) Animation.nTotalFrames = max( Animation.nTotalFrames, (int)Bone.RotationKeys[j].fTime ); } } return bLoaded; }
void BGAnimationLayer::LoadFromNode( const XNode* pNode ) { { bool bCond; if( pNode->GetAttrValue("Condition", bCond) && !bCond ) return; } bool bStretch = false; { RString type = "sprite"; pNode->GetAttrValue( "Type", type ); type.MakeLower(); /* The preferred way of stretching a sprite to fit the screen is "Type=sprite" * and "stretch=1". "type=1" is for backwards-compatibility. */ pNode->GetAttrValue( "Stretch", bStretch ); // Check for string match first, then do integer match. // "if(StringType(type)==0)" was matching against all string matches. // -Chris if( type.EqualsNoCase("sprite") ) { m_Type = TYPE_SPRITE; } else if( type.EqualsNoCase("particles") ) { m_Type = TYPE_PARTICLES; } else if( type.EqualsNoCase("tiles") ) { m_Type = TYPE_TILES; } else if( StringToInt(type) == 1 ) { m_Type = TYPE_SPRITE; bStretch = true; } else if( StringToInt(type) == 2 ) { m_Type = TYPE_PARTICLES; } else if( StringToInt(type) == 3 ) { m_Type = TYPE_TILES; } else { m_Type = TYPE_SPRITE; } } pNode->GetAttrValue( "FOV", m_fFOV ); pNode->GetAttrValue( "Lighting", m_bLighting ); pNode->GetAttrValue( "TexCoordVelocityX", m_fTexCoordVelocityX ); pNode->GetAttrValue( "TexCoordVelocityY", m_fTexCoordVelocityY ); // compat: pNode->GetAttrValue( "StretchTexCoordVelocityX", m_fTexCoordVelocityX ); pNode->GetAttrValue( "StretchTexCoordVelocityY", m_fTexCoordVelocityY ); // particle and tile stuff float fZoomMin = 1; float fZoomMax = 1; pNode->GetAttrValue( "ZoomMin", fZoomMin ); pNode->GetAttrValue( "ZoomMax", fZoomMax ); float fVelocityXMin = 10, fVelocityXMax = 10; float fVelocityYMin = 0, fVelocityYMax = 0; float fVelocityZMin = 0, fVelocityZMax = 0; float fOverrideSpeed = 0; // 0 means don't override speed pNode->GetAttrValue( "VelocityXMin", fVelocityXMin ); pNode->GetAttrValue( "VelocityXMax", fVelocityXMax ); pNode->GetAttrValue( "VelocityYMin", fVelocityYMin ); pNode->GetAttrValue( "VelocityYMax", fVelocityYMax ); pNode->GetAttrValue( "VelocityZMin", fVelocityZMin ); pNode->GetAttrValue( "VelocityZMax", fVelocityZMax ); pNode->GetAttrValue( "OverrideSpeed", fOverrideSpeed ); int iNumParticles = 10; pNode->GetAttrValue( "NumParticles", iNumParticles ); pNode->GetAttrValue( "ParticlesBounce", m_bParticlesBounce ); pNode->GetAttrValue( "TilesStartX", m_fTilesStartX ); pNode->GetAttrValue( "TilesStartY", m_fTilesStartY ); pNode->GetAttrValue( "TilesSpacingX", m_fTilesSpacingX ); pNode->GetAttrValue( "TilesSpacingY", m_fTilesSpacingY ); pNode->GetAttrValue( "TileVelocityX", m_fTileVelocityX ); pNode->GetAttrValue( "TileVelocityY", m_fTileVelocityY ); switch( m_Type ) { case TYPE_SPRITE: { Actor* pActor = ActorUtil::LoadFromNode( pNode, this ); this->AddChild( pActor ); if( bStretch ) pActor->StretchTo( FullScreenRectF ); } break; case TYPE_PARTICLES: { RString sFile; ActorUtil::GetAttrPath( pNode, "File", sFile ); FixSlashesInPlace( sFile ); CollapsePath( sFile ); for( int i=0; i<iNumParticles; i++ ) { Actor* pActor = ActorUtil::MakeActor( sFile, this ); if( pActor == NULL ) continue; this->AddChild( pActor ); pActor->SetXY( randomf(float(FullScreenRectF.left),float(FullScreenRectF.right)), randomf(float(FullScreenRectF.top),float(FullScreenRectF.bottom)) ); pActor->SetZoom( randomf(fZoomMin,fZoomMax) ); m_vParticleVelocity.push_back( RageVector3( randomf(fVelocityXMin,fVelocityXMax), randomf(fVelocityYMin,fVelocityYMax), randomf(fVelocityZMin,fVelocityZMax) ) ); if( fOverrideSpeed != 0 ) { RageVec3Normalize( &m_vParticleVelocity[i], &m_vParticleVelocity[i] ); m_vParticleVelocity[i] *= fOverrideSpeed; } } } break; case TYPE_TILES: { RString sFile; ActorUtil::GetAttrPath( pNode, "File", sFile ); FixSlashesInPlace( sFile ); CollapsePath( sFile ); AutoActor s; s.Load( sFile ); if( m_fTilesSpacingX == -1 ) m_fTilesSpacingX = s->GetUnzoomedWidth(); if( m_fTilesSpacingY == -1 ) m_fTilesSpacingY = s->GetUnzoomedHeight(); m_iNumTilesWide = 2+(int)(SCREEN_WIDTH /m_fTilesSpacingX); m_iNumTilesHigh = 2+(int)(SCREEN_HEIGHT/m_fTilesSpacingY); unsigned NumSprites = m_iNumTilesWide * m_iNumTilesHigh; for( unsigned i=0; i<NumSprites; i++ ) { Actor* pSprite = ActorUtil::MakeActor( sFile, this ); if( pSprite == NULL ) continue; this->AddChild( pSprite ); pSprite->SetTextureWrapping( true ); // gets rid of some "cracks" pSprite->SetZoom( randomf(fZoomMin,fZoomMax) ); } } break; default: FAIL_M(ssprintf("Unrecognized layer type: %i", m_Type)); } bool bStartOnRandomFrame = false; pNode->GetAttrValue( "StartOnRandomFrame", bStartOnRandomFrame ); if( bStartOnRandomFrame ) { for( unsigned i=0; i<m_SubActors.size(); i++ ) m_SubActors[i]->SetState( RandomInt(m_SubActors[i]->GetNumStates()) ); } }
static void NormalizePath( CString &sPath ) { FixSlashesInPlace( sPath ); CollapsePath( sPath, true ); }
void PrefsManager::ReadPrefsFromFile( const CString &sIni ) { IniFile ini; if( !ini.ReadFile(sIni) ) return; ini.GetValue( "Options", "Interlaced", m_bInterlaced ); ini.GetValue( "Options", "PAL", m_bPAL ); ini.GetValue( "Options", "CelShadeModels", m_bCelShadeModels ); ini.GetValue( "Options", "ConstantUpdateDeltaSeconds", m_fConstantUpdateDeltaSeconds ); ini.GetValue( "Options", "DisplayWidth", m_iDisplayWidth ); ini.GetValue( "Options", "DisplayHeight", m_iDisplayHeight ); ini.GetValue( "Options", "DisplayColorDepth", m_iDisplayColorDepth ); ini.GetValue( "Options", "TextureColorDepth", m_iTextureColorDepth ); ini.GetValue( "Options", "MovieColorDepth", m_iMovieColorDepth ); ini.GetValue( "Options", "MaxTextureResolution", m_iMaxTextureResolution ); ini.GetValue( "Options", "RefreshRate", m_iRefreshRate ); ini.GetValue( "Options", "UseDedicatedMenuButtons", m_bOnlyDedicatedMenuButtons ); ini.GetValue( "Options", "ShowStats", m_bShowStats ); ini.GetValue( "Options", "ShowBanners", m_bShowBanners ); ini.GetValue( "Options", "BackgroundMode", (int&)m_BackgroundMode ); ini.GetValue( "Options", "NumBackgrounds", m_iNumBackgrounds); ini.GetValue( "Options", "ShowDanger", m_bShowDanger ); ini.GetValue( "Options", "BGBrightness", m_fBGBrightness ); ini.GetValue( "Options", "MenuTimer", m_bMenuTimer ); ini.GetValue( "Options", "NumArcadeStages", m_iNumArcadeStages ); ini.GetValue( "Options", "EventMode", m_bEventMode ); ini.GetValue( "Options", "AutoPlay", m_bAutoPlay ); ini.GetValue( "Options", "JudgeWindowScale", m_fJudgeWindowScale ); ini.GetValue( "Options", "JudgeWindowAdd", m_fJudgeWindowAdd ); ini.GetValue( "Options", "JudgeWindowSecondsMarvelous", m_fJudgeWindowSecondsMarvelous ); ini.GetValue( "Options", "JudgeWindowSecondsPerfect", m_fJudgeWindowSecondsPerfect ); ini.GetValue( "Options", "JudgeWindowSecondsGreat", m_fJudgeWindowSecondsGreat ); ini.GetValue( "Options", "JudgeWindowSecondsGood", m_fJudgeWindowSecondsGood ); ini.GetValue( "Options", "JudgeWindowSecondsBoo", m_fJudgeWindowSecondsBoo ); ini.GetValue( "Options", "JudgeWindowSecondsOK", m_fJudgeWindowSecondsOK ); ini.GetValue( "Options", "JudgeWindowSecondsMine", m_fJudgeWindowSecondsMine ); ini.GetValue( "Options", "JudgeWindowSecondsAttack", m_fJudgeWindowSecondsAttack ); ini.GetValue( "Options", "LifeDifficultyScale", m_fLifeDifficultyScale ); ini.GetValue( "Options", "LifeDeltaPercentChangeMarvelous", m_fLifeDeltaPercentChangeMarvelous ); ini.GetValue( "Options", "LifeDeltaPercentChangePerfect", m_fLifeDeltaPercentChangePerfect ); ini.GetValue( "Options", "LifeDeltaPercentChangeGreat", m_fLifeDeltaPercentChangeGreat ); ini.GetValue( "Options", "LifeDeltaPercentChangeGood", m_fLifeDeltaPercentChangeGood ); ini.GetValue( "Options", "LifeDeltaPercentChangeBoo", m_fLifeDeltaPercentChangeBoo ); ini.GetValue( "Options", "LifeDeltaPercentChangeMiss", m_fLifeDeltaPercentChangeMiss ); ini.GetValue( "Options", "LifeDeltaPercentChangeHitMine", m_fLifeDeltaPercentChangeHitMine ); ini.GetValue( "Options", "LifeDeltaPercentChangeOK", m_fLifeDeltaPercentChangeOK ); ini.GetValue( "Options", "LifeDeltaPercentChangeNG", m_fLifeDeltaPercentChangeNG ); ini.GetValue( "Options", "TugMeterPercentChangeMarvelous", m_fTugMeterPercentChangeMarvelous ); ini.GetValue( "Options", "TugMeterPercentChangePerfect", m_fTugMeterPercentChangePerfect ); ini.GetValue( "Options", "TugMeterPercentChangeGreat", m_fTugMeterPercentChangeGreat ); ini.GetValue( "Options", "TugMeterPercentChangeGood", m_fTugMeterPercentChangeGood ); ini.GetValue( "Options", "TugMeterPercentChangeBoo", m_fTugMeterPercentChangeBoo ); ini.GetValue( "Options", "TugMeterPercentChangeMiss", m_fTugMeterPercentChangeMiss ); ini.GetValue( "Options", "TugMeterPercentChangeHitMine", m_fTugMeterPercentChangeHitMine ); ini.GetValue( "Options", "TugMeterPercentChangeOK", m_fTugMeterPercentChangeOK ); ini.GetValue( "Options", "TugMeterPercentChangeNG", m_fTugMeterPercentChangeNG ); ini.GetValue( "Options", "RegenComboAfterFail", m_iRegenComboAfterFail ); ini.GetValue( "Options", "RegenComboAfterMiss", m_iRegenComboAfterMiss ); ini.GetValue( "Options", "MaxRegenComboAfterFail", m_iMaxRegenComboAfterFail ); ini.GetValue( "Options", "MaxRegenComboAfterMiss", m_iMaxRegenComboAfterMiss ); ini.GetValue( "Options", "TwoPlayerRecovery", m_bTwoPlayerRecovery ); ini.GetValue( "Options", "MercifulDrain", m_bMercifulDrain ); ini.GetValue( "Options", "Minimum1FullSongInCourses", m_bMinimum1FullSongInCourses ); ini.GetValue( "Options", "PercentScoreWeightMarvelous", m_iPercentScoreWeightMarvelous ); ini.GetValue( "Options", "PercentScoreWeightPerfect", m_iPercentScoreWeightPerfect ); ini.GetValue( "Options", "PercentScoreWeightGreat", m_iPercentScoreWeightGreat ); ini.GetValue( "Options", "PercentScoreWeightGood", m_iPercentScoreWeightGood ); ini.GetValue( "Options", "PercentScoreWeightBoo", m_iPercentScoreWeightBoo ); ini.GetValue( "Options", "PercentScoreWeightMiss", m_iPercentScoreWeightMiss ); ini.GetValue( "Options", "PercentScoreWeightOK", m_iPercentScoreWeightOK ); ini.GetValue( "Options", "PercentScoreWeightNG", m_iPercentScoreWeightNG ); ini.GetValue( "Options", "PercentScoreWeightHitMine", m_iPercentScoreWeightHitMine ); ini.GetValue( "Options", "GradeWeightMarvelous", m_iGradeWeightMarvelous ); ini.GetValue( "Options", "GradeWeightPerfect", m_iGradeWeightPerfect ); ini.GetValue( "Options", "GradeWeightGreat", m_iGradeWeightGreat ); ini.GetValue( "Options", "GradeWeightGood", m_iGradeWeightGood ); ini.GetValue( "Options", "GradeWeightBoo", m_iGradeWeightBoo ); ini.GetValue( "Options", "GradeWeightMiss", m_iGradeWeightMiss ); ini.GetValue( "Options", "GradeWeightHitMine", m_iGradeWeightHitMine ); ini.GetValue( "Options", "GradeWeightOK", m_iGradeWeightOK ); ini.GetValue( "Options", "GradeWeightNG", m_iGradeWeightNG ); ini.GetValue( "Options", "NumGradeTiersUsed", m_iNumGradeTiersUsed ); for( int g=0; g<NUM_GRADE_TIERS; g++ ) { Grade grade = (Grade)g; CString s = GradeToString( grade ); ini.GetValue( "Options", "GradePercent"+s, m_fGradePercent[g] ); } ini.GetValue( "Options", "GradeTier02IsAllPerfects", m_bGradeTier02IsAllPerfects ); ini.GetValue( "Options", "SuperMeterPercentChangeMarvelous",m_fSuperMeterPercentChangeMarvelous ); ini.GetValue( "Options", "SuperMeterPercentChangePerfect", m_fSuperMeterPercentChangePerfect ); ini.GetValue( "Options", "SuperMeterPercentChangeGreat", m_fSuperMeterPercentChangeGreat ); ini.GetValue( "Options", "SuperMeterPercentChangeGood", m_fSuperMeterPercentChangeGood ); ini.GetValue( "Options", "SuperMeterPercentChangeBoo", m_fSuperMeterPercentChangeBoo ); ini.GetValue( "Options", "SuperMeterPercentChangeMiss", m_fSuperMeterPercentChangeMiss ); ini.GetValue( "Options", "SuperMeterPercentChangeHitMine", m_fSuperMeterPercentChangeHitMine ); ini.GetValue( "Options", "SuperMeterPercentChangeOK", m_fSuperMeterPercentChangeOK ); ini.GetValue( "Options", "SuperMeterPercentChangeNG", m_fSuperMeterPercentChangeNG ); ini.GetValue( "Options", "MercifulSuperMeter", m_bMercifulSuperMeter ); ini.GetValue( "Options", "DelayedEscape", m_bDelayedEscape ); ini.GetValue( "Options", "HiddenSongs", m_bHiddenSongs ); ini.GetValue( "Options", "Vsync", m_bVsync ); ini.GetValue( "Options", "HowToPlay", m_bInstructions ); ini.GetValue( "Options", "Caution", m_bShowDontDie ); ini.GetValue( "Options", "ShowSelectGroup", m_bShowSelectGroup ); ini.GetValue( "Options", "ShowNative", m_bShowNative ); ini.GetValue( "Options", "ArcadeOptionsNavigation", m_bArcadeOptionsNavigation ); ini.GetValue( "Options", "DelayedTextureDelete", m_bDelayedTextureDelete ); ini.GetValue( "Options", "TexturePreload", m_bTexturePreload ); ini.GetValue( "Options", "DelayedScreenLoad", m_bDelayedScreenLoad ); ini.GetValue( "Options", "DelayedModelDelete", m_bDelayedModelDelete ); ini.GetValue( "Options", "BannerCache", (int&)m_BannerCache ); ini.GetValue( "Options", "PalettedBannerCache", m_bPalettedBannerCache ); ini.GetValue( "Options", "FastLoad", m_bFastLoad ); ini.GetValue( "Options", "MusicWheelUsesSections", (int&)m_MusicWheelUsesSections ); ini.GetValue( "Options", "MusicWheelSwitchSpeed", m_iMusicWheelSwitchSpeed ); ini.GetValue( "Options", "SoundWriteAhead", m_iSoundWriteAhead ); ini.GetValue( "Options", "EasterEggs", m_bEasterEggs ); ini.GetValue( "Options", "MarvelousTiming", (int&)m_iMarvelousTiming ); ini.GetValue( "Options", "SoundVolume", m_fSoundVolume ); ini.GetValue( "Options", "CoinMode", m_iCoinMode ); ini.GetValue( "Options", "CoinsPerCredit", m_iCoinsPerCredit ); m_iCoinsPerCredit = max(m_iCoinsPerCredit, 1); ini.GetValue( "Options", "Premium", (int&)m_Premium ); ini.GetValue( "Options", "DelayedCreditsReconcile", m_bDelayedCreditsReconcile ); ini.GetValue( "Options", "BoostAppPriority", m_iBoostAppPriority ); ini.GetValue( "Options", "PickExtraStage", m_bPickExtraStage ); ini.GetValue( "Options", "ComboContinuesBetweenSongs", m_bComboContinuesBetweenSongs ); ini.GetValue( "Options", "LongVerSeconds", m_fLongVerSongSeconds ); ini.GetValue( "Options", "MarathonVerSeconds", m_fMarathonVerSongSeconds ); ini.GetValue( "Options", "ShowSongOptions", (int&)m_ShowSongOptions ); ini.GetValue( "Options", "AllowUnacceleratedRenderer", m_bAllowUnacceleratedRenderer ); ini.GetValue( "Options", "ThreadedInput", m_bThreadedInput ); ini.GetValue( "Options", "ThreadedMovieDecode", m_bThreadedMovieDecode ); ini.GetValue( "Options", "ScreenTestMode", m_bScreenTestMode ); ini.GetValue( "Options", "MachineName", m_sMachineName ); ini.GetValue( "Options", "IgnoredMessageWindows", m_sIgnoredMessageWindows ); ini.GetValue( "Options", "SoloSingle", m_bSoloSingle ); ini.GetValue( "Options", "DancePointsForOni", m_bDancePointsForOni ); ini.GetValue( "Options", "PercentageScoring", m_bPercentageScoring ); ini.GetValue( "Options", "MinPercentageForMachineSongHighScore", m_fMinPercentageForMachineSongHighScore ); ini.GetValue( "Options", "MinPercentageForMachineCourseHighScore", m_fMinPercentageForMachineCourseHighScore ); ini.GetValue( "Options", "Disqualification", m_bDisqualification ); ini.GetValue( "Options", "ShowLyrics", m_bShowLyrics ); ini.GetValue( "Options", "AutogenSteps", m_bAutogenSteps ); ini.GetValue( "Options", "AutogenGroupCourses", m_bAutogenGroupCourses ); ini.GetValue( "Options", "BreakComboToGetItem", m_bBreakComboToGetItem ); ini.GetValue( "Options", "LockCourseDifficulties", m_bLockCourseDifficulties ); ini.GetValue( "Options", "ShowDancingCharacters", (int&)m_ShowDancingCharacters ); ini.GetValue( "Options", "CourseSortOrder", (int&)m_iCourseSortOrder ); ini.GetValue( "Options", "MoveRandomToEnd", m_bMoveRandomToEnd ); ini.GetValue( "Options", "SubSortByNumSteps", m_bSubSortByNumSteps ); ini.GetValue( "Options", "ScoringType", (int&)m_iScoringType ); ini.GetValue( "Options", "ProgressiveLifebar", m_iProgressiveLifebar ); ini.GetValue( "Options", "ProgressiveNonstopLifebar", m_iProgressiveNonstopLifebar ); ini.GetValue( "Options", "ProgressiveStageLifebar", m_iProgressiveStageLifebar ); ini.GetValue( "Options", "UseUnlockSystem", m_bUseUnlockSystem ); ini.GetValue( "Options", "FirstRun", m_bFirstRun ); ini.GetValue( "Options", "AutoMapJoysticks", m_bAutoMapOnJoyChange ); ini.GetValue( "Options", "CpuClock", m_iCpuClock ); ini.GetValue( "Options", "CoursesToShowRanking", m_sCoursesToShowRanking ); ini.GetValue( "Options", "GetRankingName", (int&)m_iGetRankingName); ini.GetValue( "Options", "SmoothLines", m_bSmoothLines ); ini.GetValue( "Options", "GlobalOffsetSeconds", m_fGlobalOffsetSeconds ); ini.GetValue( "Options", "ShowBeginnerHelper", m_bShowBeginnerHelper ); ini.GetValue( "Options", "Language", m_sLanguage ); ini.GetValue( "Options", "EndlessBreakEnabled", m_bEndlessBreakEnabled ); ini.GetValue( "Options", "EndlessStagesUntilBreak", m_iEndlessNumStagesUntilBreak ); ini.GetValue( "Options", "EndlessBreakLength", m_iEndlessBreakLength ); ini.GetValue( "Options", "DisableScreenSaver", m_bDisableScreenSaver ); ini.GetValue( "Options", "ProductID", m_iProductID ); FOREACH_PlayerNumber( p ) ini.GetValue( "Options", ssprintf("DefaultLocalProfileIDP%d",p+1), m_sDefaultLocalProfileID[p] ); ini.GetValue( "Options", "CenterImageTranslateX", m_iCenterImageTranslateX ); ini.GetValue( "Options", "CenterImageTranslateY", m_iCenterImageTranslateY ); ini.GetValue( "Options", "CenterImageScaleX", m_fCenterImageScaleX ); ini.GetValue( "Options", "CenterImageScaleY", m_fCenterImageScaleY ); ini.GetValue( "Options", "AttractSoundFrequency", m_iAttractSoundFrequency ); ini.GetValue( "Options", "AllowExtraStage", m_bAllowExtraStage ); ini.GetValue( "Options", "HideDefaultNoteSkin", m_bHideDefaultNoteSkin ); ini.GetValue( "Options", "MaxHighScoresPerListForMachine", m_iMaxHighScoresPerListForMachine ); ini.GetValue( "Options", "MaxHighScoresPerListForPlayer", m_iMaxHighScoresPerListForPlayer ); ini.GetValue( "Options", "PadStickSeconds", m_fPadStickSeconds ); ini.GetValue( "Options", "ForceMipMaps", m_bForceMipMaps ); ini.GetValue( "Options", "TrilinearFiltering", m_bTrilinearFiltering ); ini.GetValue( "Options", "AnisotropicFiltering", m_bAnisotropicFiltering ); ini.GetValue( "Options", "AutoRestart", g_bAutoRestart ); ini.GetValue( "Options", "AdditionalSongFolders", m_sAdditionalSongFolders ); ini.GetValue( "Options", "AdditionalFolders", m_sAdditionalFolders ); FixSlashesInPlace(m_sAdditionalSongFolders); FixSlashesInPlace(m_sAdditionalFolders); ini.GetValue( "Debug", "LogToDisk", m_bLogToDisk ); ini.GetValue( "Debug", "ForceLogFlush", m_bForceLogFlush ); ini.GetValue( "Debug", "ShowLogOutput", m_bShowLogOutput ); ini.GetValue( "Debug", "Timestamping", m_bTimestamping ); ini.GetValue( "Debug", "LogSkips", m_bLogSkips ); ini.GetValue( "Debug", "LogCheckpoints", m_bLogCheckpoints ); ini.GetValue( "Debug", "ShowLoadingWindow", m_bShowLoadingWindow ); FOREACH( IPreference*, *g_pvpSubscribers, p ) (*p)->ReadFrom( ini ); }