User:Lost Labyrinth/TS2/Graphics Rules.sgr


 * 1) This is a TS2 Graphics Rules file containing fixes for the Intel HD Graphics family.
 * 2) You're welcome to use this provided you know what you are doing.
 * 3) I will not be held responsible for any damage caused to your game.
 * 4) Logging settings
 * 1) Logging settings
 * 1) Logging settings

set logGroup          "ConfigurationManager" set logLevelWarning   warning set logLevelInfo      info set logLevelDebug     debug

log $logGroup $logLevelInfo "Parsing configuration script"


 * 1) Constants
 * 1) Constants
 * 1) Constants

seti Off 0 seti On 1

seti Low   1 seti Medium 2 seti High  3

seti MediumButDefaultLow 4

seti memoryLevelHigh   512 seti memoryLevelMedium 384 seti memoryLevelLow    256 seti memoryLevelUnknown 0

if ( match("${osVersion}","*NT 6.0*") ) seti cpuLevelHigh       3000 seti cpuLevelMedium     2600 seti cpuLevelLow        2000 log $logGroup $logLevelInfo "Setting cpu level for Vista." else seti cpuLevelHigh       2800 seti cpuLevelMedium     2200 seti cpuLevelLow        1450 log $logGroup $logLevelInfo "Setting cpu level for non-Vista." endif

seti cpuLevelUnsupported 0


 * 1) Identify gfx device
 * 1) Identify gfx device
 * 1) Identify gfx device

include "Video Cards.sgr"
 * 1) set some config variables based on a card table and vendor specific rules
 * 2) sets isCardFound, cardVendor, and cardName

if (not $isCardFound) set cardName $cardNameText endif
 * 1) Fallback on the card name text supplied by the card itself.
 * 2) Assumes that at least the cardVendor has been matched, since
 * 3) vendor name is not contained in some vendor card names.
 * 4) Note that specific vendors are overridden to a default card.
 * 5)  For ATI    -> Radeon 9800 Pro
 * 6)  For NVIDIA -> NVIDIA 4800 TI SE

if (varExists(cardConfig)) # test unsupported cards using sw rendering if ($cardConfig = 1) log $logGroup $logLevelInfo "Testing with all devices unsupported." set cardVendor    TestingAllUnsupported set cardName      TestingAllUnsupported
 * 1) Configuration override controlled by command line option -cardConfig.
 * 1) Configuration override controlled by command line option -cardConfig.
 * 1) Configuration override controlled by command line option -cardConfig.

elseif (($cardConfig = 2) and ($deviceNumber = 0)) log $logGroup $logLevelInfo "Testing with the first device unsupported." set cardVendor    TestingFirstUnsupported set cardName      TestingFirstUnsupported

elseif (($cardConfig = 3) and ($deviceNumber != 0)) log $logGroup $logLevelInfo "Testing with the all devices except first unsupported." set cardVendor    TestingAllButFirstUnsupported set cardName      TestingAllButFirstUnsupported

elseif (($cardConfig = 100) and ($deviceNumber = 0)) log $logGroup $logLevelInfo "Testing first device as swvp only part." boolProp forceSoftwareVP true endif endif


 * 1) Determine if gfx device is supported, force software rendering if not
 * 1) Determine if gfx device is supported, force software rendering if not
 * 1) Determine if gfx device is supported, force software rendering if not

setb useSoftwareRasterizer false

if (match("${cardVendor}", "ATI")) if (match("${cardName}", "*Mach*") or match("${cardName}", "*Rage*")) setb useSoftwareRasterizer true endif

elseif (match("${cardVendor}", "NVidia")) if (match("${cardName}", "NV 1") or match("${cardName}", "NV 2") or match("${cardName}", "*Riva*") or match("${cardName}", "*TNT*")) setb useSoftwareRasterizer true endif

elseif (match("${cardVendor}", "Intel")) if (match("${cardName}", "*810*") or match("${cardName}", "*815*") or match("${cardName}", "*740*") or match("${cardName}", "*752*")) setb useSoftwareRasterizer true endif

elseif (match("${cardVendor}", "S3")) if (not match("${cardName}", "*GammaChrome*") and not match("${cardName}", "*DeltaChrome*")) setb useSoftwareRasterizer true endif

elseif (not match("${cardName}", "Parallels *")) # unsupported/unknown vendor setb useSoftwareRasterizer true

endif

if ($useSoftwareRasterizer) log $logGroup $logLevelWarning "Unsupported video card. Forcing software rendering on this device" else log $logGroup $logLevelInfo "Supported video card." endif

if (not $useSoftwareRasterizer) # failed to obtain device texture memory size, force to 32MB if ($textureMemory = 0) seti textureMemory      32 setb textureMemorySizeOK false endif

if ($textureMemory < 28) log $logGroup $logLevelWarning "Insufficient video memory. Forcing software rendering on this device"

# require a card with at least 32MB setb useSoftwareRasterizer true endif endif

if ($useSoftwareRasterizer) # ignore texture memory reported by gfx device, this is not hardware texture memory seti textureMemory 32 endif

if (not $useSoftwareRasterizer) log $logGroup $logLevelInfo "Hardware rendering is enabled" endif


 * 1) Apply gfx device specific workarounds
 * 2) Available device props:
 * 3)  forceSoftwareVP
 * 4)  forceSoftwareDevice
 * 5)  queriesOK
 * 6)  windowedModeFormatConversionOK
 * 7)  enumerateMultisampleLevels
 * 8)  skipValidateDevice
 * 9)  enableDriverMemoryManager
 * 10)  softwareDeviceLocalVideoMemorySize
 * 11)  deviceLocalVideoMemorySizeDefault
 * 12)  disableVSyncSupport
 * 13)  substituteFlipForDiscardSwapEffect
 * 14)  minTextureDimensionForBalance
 * 15) Additional props:
 * 16)  vs2LoopsFunctional
 * 1)  minTextureDimensionForBalance
 * 2) Additional props:
 * 3)  vs2LoopsFunctional
 * 1)  vs2LoopsFunctional

setb textureMemorySizeOK       true setb supportsDirtyRect         true setb supportsTurboRect         true setb supportsSpecialEventCamera true setb forceLowSettings          false setb forceLowResolution        false setb defaultLowResolution        false setb forceMediumMaterialDetail false setb isIntegratedChipset	     false setb forceMediumShadows         false setb forceMediumObjectDetail    false boolProp useRenderTextures      false uintProp antialiasingSupport            1

boolProp dontMergeNHFlora	true

if (not $useSoftwareRasterizer)

# never trust the driver to manage its own memory boolProp enableDriverMemoryManager false

boolProp vs2LoopsFunctional        false boolProp presentWorkaround         false boolProp enumerateMultisampleLevels true

# not enough texture memory for antialiasing if ($textureMemory < 127) boolProp enumerateMultisampleLevels false endif

if (match("${cardVendor}", "NVIDIA")) # on NVidia cards, create a dummy texture on device creation to prevent BSODs boolProp createNVidiaWorkaroundTexture true

if ($appControlledAA) # nvidia drivers handle offscreen aa        uintProp antialiasingSupport    3 else # remove this when the texture manager balancing is fixed. boolProp disableTexMemEstimateAdjustment true

# turn off dirty rects uintProp antialiasingSupport   1 setb supportsDirtyRect         false endif if (match("${cardName}", "*GeForce2*Integrated*") or match("${cardName}", "*GeForce?2*Integrated*") or match("${cardName}", "*GeForce4*Integrated*") or match("${cardName}", "*GeForce?4*Integrated*") or match("${cardName}", "*GeForce2 Quadro2 Pro*")) boolProp causticsEnabled           false boolProp enumerateMultisampleLevels false

setb forceLowSettings  true setb forceLowResolution true endif

# the 6200 Turbo Cache peformed very poorly in CATLAB runs for EP2 if (match("${cardName}", "*6200 TC*") or match("${cardName}", "*6100*")) setb forceLowSettings  true setb defaultLowResolution true endif # need to get around the problem of z fighting in GeForce4 cards if (match("${cardName}", "*GeForce4*")) boolProp raiseLightSnowFF true endif # disable shaders by default for NV3x generation, only enable for high end cards if ($maxVertexProgramVersionHWMajor = 2) boolProp useShaders false

if (match("${cardName}", "GeForceFX*") or match("${cardName}", "*GeForce?FX*")) if (match("${cardName}", "*57?0*") or match("${cardName}", "*58?0*") or match("${cardName}", "*59?0*")) boolProp useShaders true boolProp causticsEnabled false

log $logGroup $logLevelInfo "Enabling shaders for high-end NV3x" endif if (match("${cardName}", "*NV35*") or match("${cardName}", "*NV36*") or match("${cardName}", "*NV38*") or match("${cardName}", "*NV39*")) boolProp useShaders true

log $logGroup $logLevelInfo "Enabling shaders for high-end NV3x" endif # 5700 cards sometimes have problems with bump mapping so setting default to medium if (match("${cardName}", "*5700*")) log $logGroup $logLevelInfo "Forcing Medium Material detail on 5700" setb forceMediumMaterialDetail true endif if (match("${cardName}", "*5700LE*")) log $logGroup $logLevelInfo "Forcing low settings on 5700LE and 6100" setb forceLowSettings   true boolProp useShaders false endif endif

if (match("${cardName}", "QuadroFX*") or match("${cardName}", "*Quadro?FX*")) if (match("${cardName}", "*3000*") or match("${cardName}", "*1?00*")) boolProp useShaders true

log $logGroup $logLevelInfo "Enabling shaders for high-end NV3x Quadro" endif if (match("${cardName}", "*2000*") or match("${cardName}", "*1000*") or match("${cardName}", "*1300*")) boolProp causticsEnabled false

log $logGroup $logLevelInfo "Disabling caustics as these cause cards cause problems with shadows" endif endif

# caps read vs 3.0, but dx9b is returning vs 2.0, once 9c is used this fix can be removed if (match("${cardName}", "*GeForce*")) if (match("${cardName}", "*68?0*")) boolProp useShaders true

log $logGroup $logLevelInfo "Enabling shaders for high-end NV40 Parts on Dx9b" endif endif endif

if ($maxVertexProgramVersionHWMajor = 0) boolProp skipValidateDevice true

log $logGroup $logLevelInfo "Enabling D3DERR_CONFLICTINGRENDERSTATE validation workaround" endif

elseif (match("${cardVendor}", "ATI")) # loops support broken in 6458. Fixed in catalyst 4.9 (6476) but we require 4.10 to be safe. if ($driverBuild >= 6476) boolProp vs2LoopsFunctional true endif # workaround for forced aa crash as of 6458. Fixed in catalyst 4.9 (6476) but we require 4.10 to be safe. # TODO: this is not yet enabled, pending testing #if ($driverBuild < 6476) boolProp useRenderTextures true #endif

# avoid a race condition with color copies and ui     boolProp presentWorkaround  true

if (match("${cardName}", "*Radeon?VE*") or match("${cardName}", "*7?00*") or match("${cardName}", "*R100*") or match("${cardName}", "*IGP 3?0*") or match("${cardName}", "*9100 IGP*")) log $logGroup $logLevelInfo "Forcing turbo rects off" setb supportsTurboRect  false

boolProp simpleTerrain             false boolProp causticsEnabled           false boolProp enumerateMultisampleLevels false

setb forceLowSettings   true if (match("${cardName}", "*9100 IGP*")) log $logGroup $logLevelInfo "Forcing low resolution" setb defaultLowResolution true endif

if (match("${cardName}", "*Radeon?VE*") or $driverBuild < 6414) log $logGroup $logLevelInfo "Forcing swvp" boolProp forceSoftwareVP true endif endif if (match("${cardName}", "*X1300*") or match("${cardName}", "*X300*") or match("${cardName}", "*XPRESS 200*")) log $logGroup $logLevelInfo "Forcing medium settings or lower" boolProp useShaders false setb forceLowSettings   true endif boolProp usePS30 false

if ($maxVertexProgramVersionHWMajor < 2) # Radeon 8500 and greater have problems switching between FF and VS?        log $logGroup $logLevelInfo "Forcing shaders of for ATI DX8"

boolProp useShaders false endif if (match("${cardName}", "*8500*")) #avoid z fighting with light snow boolProp raiseLightSnowFF true setb defaultLowResolution true endif if (match("${cardName}", "*9600 SE *")) setb forceMediumMaterialDetail true setb forceMediumShadows        true setb forceMediumObjectDetail   true endif

if (match("${cardName}", "*Mobility*")) setb isIntegratedChipset true endif

# X800 based cards exhibit rendering corruption if turbo rect is enabled if (match("${cardName}", "*X800*") or match("${cardName}", "*R420*")) setb supportsTurboRect false

log $logGroup $logLevelInfo "Forcing turbo rects off" endif if (match("${cardName}", "*92?0*")) log $logGroup $logLevelInfo "Forcing shadow detail on 9250 and 9200" setb forceMediumShadows true endif elseif (match("${cardVendor}", "S3")) if (match("${cardName}", "*GammaChrome*") or match("${osVersion}","*NT 6.0*") ) boolProp useShaders false log $logGroup $logLevelInfo "Forcing Gamma Chrome to use fixed function shaders" endif

# EP6 CATlab reports gray screen during all cinematics if (match("${cardName}", "*S27*")) setOption SpecialEventCamera $Off endif

elseif (match("${cardVendor}", "Intel")) if (match("${cardName}", "*X3000*")) boolProp disableVSyncSupport       false    # work around flickering UI      else boolProp simpleTerrain             false boolProp enumerateMultisampleLevels false boolProp disableVSyncSupport       false    # work around flickering UI         boolProp useShaders                 true   # (EP2 change) mostly for performance, but driver issues showed up in v14.14 endif

# the Intel minspec driver doesn't misreport available texture memory, so it's not # necessary to adjust the texture memory estimate it returns. This may also fix # a Windows "device failure" message that occurs sometimes on this device. boolProp disableTexMemEstimateAdjustment true # assuming Intel parts are UMA, drop the texture memory to 32 if not much system memory if ($memory <= $memoryLevelLow) if ($textureMemory > 32) seti textureMemory 32 endif endif

if (match("${cardName}", "*845*") or match("${cardName}", "*865*") or match("${cardName}", "*830*") or match("${cardName}", "*855*")) boolProp causticsEnabled false

setb forceLowSettings  true setb forceLowResolution true endif # the 915 sets the caps bit that indicates it can do texture projection, # but does it incorrectly in the pixel stage. Here we override the texture # projection cap we get from the device. if (match("${cardName}", "*915*")) boolProp disableTextureProjection true endif elseif (match("${cardName}", "Parallels *")) if ($textureMemory > 128) seti textureMemory 128 endif

endif

intProp deviceLocalVideoMemorySizeDefault ($textureMemory * 1024 * 1024)

else setb forceLowSettings  true setb forceLowResolution true # force sw, swvp, and no aa  boolProp forceSoftwareDevice        true boolProp forceSoftwareVP           true boolProp enumerateMultisampleLevels false boolProp simpleTerrain             false boolProp causticsEnabled           false

intProp softwareDeviceLocalVideoMemorySize ($textureMemory * 1024 * 1024)

endif

if ($maxPixelProgramVersionMajor < 2) boolProp skipTangentsInVertexData true endif
 * 1) since we don't do bumpmapping on less ps2.0-capable hardware, eliminate tangents
 * 2) from the vertex data
 * 3) also, the presence of per-vertex tangents in the vertex data stream causes
 * 4) "exploded" polygons on the Radeon 9000, even if the data is ignored by the shader


 * 1) Print system info
 * 1) Print system info
 * 1) Print system info

if ($deviceNumber = 0) logSystemInfo "=== Application info ===" logSystemInfo "Name:           ${appName}" logSystemInfo "Version:        ${version}" logSystemInfo "Build:          ${buildType}"

logSystemInfo "=== Machine info ===" logSystemInfo "OS version:     ${osVersion}" logSystemInfo "CPU:            ${cpuSpeed}Mhz, Name:${CPU}, FPU:${FPU}, MMX:${MMX}" logSystemInfo "Memory:         ${memory}MB" logSystemInfo "Free memory:    ${freeMemory}MB" logSystemInfo "User:           ${userName}" logSystemInfo "Computer:       ${computerName}"

logSystemInfo "=== Sound device info ===" logSystemInfo "Name:           ${soundCardName}" logSystemInfo "Driver:         ${soundDriverName}" endif

logSystemInfo "=== Graphics device info ===" logSystemInfo "Number:         ${deviceNumber}" logSystemInfo "Name (driver):  ${cardNameText}" if ($isCardFound) logSystemInfo "Name (database): ${cardName}" else logSystemInfo "Name (database): ${cardName} <>" endif if ($isIntegratedChipset) logSystemInfo "                (Integrated Chipset)" endif logSystemInfo "Vendor:         ${cardVendor}" logSystemInfo "Chipset:        ${cardChipset}" logSystemInfo "Driver:         ${driverName}, Version: ${driverVersion}" logSystemInfo "Driver version: ${driverBuild}" logSystemInfo "Monitor:        ${monitorName}" logSystemInfo "Monitor aspect: ${monitorAspect}, ${monitorAspectString}" logSystemInfo "Screen mode:    ${screenWidth}x${screenHeight}x${screenBPP}BPP,${screenRefresh}Hz" if ($textureMemorySizeOK) logSystemInfo "Texture memory: ${textureMemory}MB" else logSystemInfo "Texture memory: ${textureMemory}MB <>" endif logSystemInfo "HW T&L:         Fixed function:${fixedFunctionHWTnL} Programmable:${maxVertexProgramVersionHWMajor}.${maxVertexProgramVersionHWMinor}" logSystemInfo "Pixel program:  ${maxPixelProgramVersionMajor}.${maxPixelProgramVersionMinor}" logSystemInfo "Texture stages: ${textureStages}" logSystemInfo "AppControlledAA: ${appControlledAA}"


 * 1) UI Options
 * 1) UI Options
 * 1) UI Options

log $logGroup $logLevelDebug "Begin parsing option definitions"

option MaterialDetail setting $Low boolProp bumpMapping false intProp imageDataSizeReductionOnLoad 2

setting $Medium boolProp bumpMapping false intProp imageDataSizeReductionOnLoad 1

setting $High boolProp bumpMapping true intProp imageDataSizeReductionOnLoad 0 end

option ObjectDetail setting $Medium boolProp reduceBoneWeights true boolProp useLODs          true intProp lodOverride       35

setting $High boolProp reduceBoneWeights false boolProp useLODs          false intProp lodOverride       0 end

option ObjectHiding setting $Off intProp renderInsideVisibleObjects 0

setting $On intProp renderInsideVisibleObjects 1 end

option SnowOnGround setting $Off boolProp showSnowOnGround false

setting $On boolProp showSnowOnGround true end

option Shadows setting $Low boolProp simShadows      false boolProp objectShadows   false boolProp guob            false boolProp heightMapShadows false

setting $Medium boolProp simShadows      false boolProp objectShadows   false boolProp guob            true boolProp heightMapShadows true

setting $High boolProp simShadows      true boolProp objectShadows   true boolProp guob            true boolProp heightMapShadows true end

option OpaqueUI setting $Off boolProp renderOpaqueUI false

setting $On boolProp renderOpaqueUI true end

option Reflection setting $Off boolProp   reflectionWithExtraViewer  false boolProp   nhoodWaterReflection       false

setting $On boolProp   reflectionWithExtraViewer  true boolProp   nhoodWaterReflection       true end

option Ceiling setting $Off boolProp   includeCeilings  false

setting $On boolProp   includeCeilings  true end

option EffectsQuality setting $Low boolProp useEffects            true floatProp particleDensity      1 floatProp particleScale        1 intProp  maxParticlesTarget    2000 intProp  particleLODOffset     0    # subtracted from the zoom. intProp  effectPriorityLevel   1 boolProp enableOceanReflection false

setting $Medium boolProp useEffects            true floatProp particleDensity      1 floatProp particleScale        1 intProp  maxParticlesTarget    5000 intProp  particleLODOffset     0    # subtracted from the zoom. intProp  effectPriorityLevel   2 boolProp enableOceanReflection false

setting $High boolProp useEffects            true floatProp particleDensity      1 floatProp particleScale        1 intProp  maxParticlesTarget    10000 intProp  particleLODOffset     0    # subtracted from the zoom. intProp  effectPriorityLevel   3 boolProp enableOceanReflection true end

option LightingQuality setting $Low boolProp lightingEnabled          true boolProp portalLighting           false boolProp floorAndWallNormalMapping false boolProp specHighlights           false

setting $Medium boolProp lightingEnabled          true boolProp portalLighting           true boolProp floorAndWallNormalMapping false boolProp specHighlights           true

setting $High boolProp lightingEnabled          true boolProp portalLighting           true boolProp floorAndWallNormalMapping true boolProp specHighlights           true end

option SoundQuality setting $Low intProp AudioPerformance 0

setting $Medium intProp AudioPerformance 1

setting $High intProp AudioPerformance 2 end

option DirtyRect setting $High # no dirty rects intProp dynamicRenderStrategy 0
 * 1) Options without ui access.
 * 1) Options without ui access.

setting $Medium # 4 buffer mode intProp dynamicRenderStrategy 2

setting $Low # 2 buffer mode intProp dynamicRenderStrategy 1 end

option FullscreenFadeEffect setting $Off boolProp enableSnapshot false

setting $On boolProp enableSnapshot true end

option Turbo setting $High boolProp useTurboRect true

setting $Medium boolProp useTurboRect true

setting $Low boolProp useTurboRect false

end

option SimulatorControls setting $High intProp maxNumOfVisitingSims  8

setting $Medium intProp maxNumOfVisitingSims  6

setting $Low intProp maxNumOfVisitingSims  2 end

option LightingOptimizations setting $High boolProp optimizedDiffusion       true boolProp incrementalLighting      true boolProp lerpLights               true boolProp useDirtyTiles            true end

option AnimationSamplingLevel setting $Low # sample nearest animation frame boolProp animationFrameSampling true

setting $Medium # sample nearest two animation frames and slerp boolProp animationFrameSampling false end

option LivePIP setting $Off boolProp livePIP       false boolProp livePIPDefault false

setting $On boolProp livePIPDefault true # do not override user's choice if the setting is ON end

option SpecialEventCamera setting $Off boolProp chooseCameraSpecialEventEnabled false boolProp CameraSpecialEventEnabled      false

setting $On boolProp chooseCameraSpecialEventEnabled true # do not override user's choice if the setting is ON

end

option ScreenModeResolution setting $Low uintProp maxResWidth     800 uintProp maxResHeight    600 uintProp defaultResWidth 800 uintProp defaultResHeight 600

setting $MediumButDefaultLow uintProp maxResWidth     1280 uintProp maxResHeight    1024 uintProp defaultResWidth 800 uintProp defaultResHeight 600

setting $Medium uintProp maxResWidth     1280 uintProp maxResHeight    1024 uintProp defaultResWidth 1024 uintProp defaultResHeight 768

setting $High uintProp maxResWidth     1600 uintProp maxResHeight    1200 uintProp defaultResWidth 1024 uintProp defaultResHeight 768 end

option SubjectTracking setting $Low floatProp centerTrackingDeadZoneMagnitude 70

setting $Medium floatProp centerTrackingDeadZoneMagnitude 30

setting $High floatProp centerTrackingDeadZoneMagnitude 30 end

option EnableLotImpostersInLot setting $On boolProp enableLotImpostersInLot true setting $Off boolProp enableLotImpostersInLot false end

option EnableNeighborhoodOccupantsInLot setting $On boolProp enableNeighborhoodOccupantsInLot true setting $Off boolProp enableNeighborhoodOccupantsInLot false end

option LotSkirtSizeIncrease setting 0 uintProp lotSkirtSizeIncrease 5 setting 1 uintProp lotSkirtSizeIncrease 9 setting 2 uintProp lotSkirtSizeIncrease 18 setting 3 uintProp lotSkirtSizeIncrease 36 end

log $logGroup $logLevelDebug "Finished parsing option definitions"


 * 1) Hardware Rendering
 * 1) Hardware Rendering
 * 1) Hardware Rendering

setb usingHighDetail false
 * 1) This cannot be defined as a local variable, the if clause is still executed when
 * 2)   sw render path is taken and an exception generated that fails the parsing.  Be
 * 3)   careful with the use of local variables.

if (not $useSoftwareRasterizer) # set a base level of options based on the card rating if (($memory >= $memoryLevelHigh) and ($cpuSpeed >= $cpuLevelHigh) and ($maxVertexProgramVersionHWMajor >= 1) and not $forceLowSettings and not $isIntegratedChipset) log $logGroup $logLevelInfo "Selecting High base level" setOption OpaqueUI             $Off setOption LivePIP              $On setOption Reflection           $On setOption Ceiling              $On setOption EffectsQuality       $High setOption LightingQuality      $High setOption Shadows              $High setOption MaterialDetail       $High setOption ObjectDetail         $High setOption ObjectHiding         $Off setOption SubjectTracking      $High setOption EnableLotImpostersInLot         $On setOption EnableNeighborhoodOccupantsInLot $On setOption LotSkirtSizeIncrease            1 setb usingHighDetail true #use this to test if current level is set to high

elseif (($memory >= $memoryLevelMedium) and ($cpuSpeed >= $cpuLevelMedium) and ($maxVertexProgramVersionHWMajor >= 1) and not $forceLowSettings) log $logGroup $logLevelInfo "Selecting Medium base level" setOption OpaqueUI             $Off setOption LivePIP              $On setOption Reflection           $Off setOption Ceiling		         $Off setOption EffectsQuality       $Medium setOption LightingQuality      $Medium setOption Shadows              $Medium setOption MaterialDetail       $Medium setOption ObjectDetail         $High setOption ObjectHiding         $On setOption SubjectTracking      $Medium setOption EnableLotImpostersInLot         $On setOption EnableNeighborhoodOccupantsInLot $On setOption LotSkirtSizeIncrease            0

else log $logGroup $logLevelInfo "Selecting Low base level" # NOTE: don't set forceLowSettings here, because this will force low simulator settings # if all you have is a low end video card

setOption OpaqueUI             $Off setOption LivePIP              $Off setOption Reflection           $Off setOption Ceiling              $Off setOption EffectsQuality       $Low setOption LightingQuality      $Low setOption Shadows              $Low setOption MaterialDetail       $Low setOption ObjectDetail         $Medium setOption ObjectHiding         $On setOption SubjectTracking      $Low setOption EnableLotImpostersInLot         $Off setOption EnableNeighborhoodOccupantsInLot $Off setOption LotSkirtSizeIncrease            0 endif

setOption LightingOptimizations $High setOption SnowOnGround         $On

# adjust simulator based on cpu speed # adjust the sound quality based on cpu speed (this may be overridden below for low-end systems) # adjust animation sampling based on cpu speed if ($cpuSpeed >= $cpuLevelHigh and not $forceLowSettings) setOption SimulatorControls     $High setOption SoundQuality          $High setOption AnimationSamplingLevel $Medium elseif ($cpuSpeed >= $cpuLevelMedium and not $forceLowSettings) setOption SimulatorControls     $Medium setOption SoundQuality          $Medium setOption AnimationSamplingLevel $Medium else setOption SimulatorControls     $Low setOption SoundQuality          $Low setOption AnimationSamplingLevel $Low endif

# turn off fullscreen fade setOption FullscreenFadeEffect   $Off if ($textureMemory >= 128 and not $isIntegratedChipset) setOption FullscreenFadeEffect $On endif

# screen res defaults if (($maxVertexProgramVersionHWMajor >= 1) and ($textureMemory >= 128) and not $forceLowResolution) setOption ScreenModeResolution $High elseif ($textureMemory >= 64 and not $forceLowResolution) if (($memory <= $memoryLevelLow) and ($cpuSpeed <= $cpuLevelLow)) setOption ScreenModeResolution $MediumButDefaultLow else setOption ScreenModeResolution $Medium endif else setOption ScreenModeResolution $Low endif if ($defaultLowResolution) setOption ScreenModeResolution $MediumButDefaultLow endif

# special event cameras for cinematics if (($maxPixelProgramVersionMajor >= 1) and ($supportsSpecialEventCamera)) setOption SpecialEventCamera $On else setOption SpecialEventCamera $Off endif

# set dirty rect mode if ($supportsDirtyRect) setOption DirtyRect $Medium else setOption DirtyRect $High endif

# set turbo mode if ($supportsTurboRect) setOption Turbo $Medium else setOption Turbo $Low endif if ($forceMediumMaterialDetail and ($memory >= $memoryLevelHigh) and ($cpuSpeed >= $cpuLevelHigh) and not $forceLowSettings) log $logGroup $logLevelWarning "Setting Material Detail" setOption MaterialDetail $Medium endif if ($usingHighDetail and not $forceLowSettings) if ($forceMediumShadows) setOption Shadows $Medium endif if ($forceMediumObjectDetail) setOption ObjectDetail $Medium endif endif endif


 * 1) Software rendering
 * 1) Software rendering
 * 1) Software rendering

if ($useSoftwareRasterizer) setOption LightingOptimizations $High
 * 1) set the options for the software rasterizer

setOption DirtyRect            $Medium setOption Turbo                $Medium setOption OpaqueUI             $Off setOption LivePIP              $Off setOption SpecialEventCamera   $Off

setOption Reflection           $Off setOption Ceiling              $Off setOption EffectsQuality       $Low setOption LightingQuality      $Low setOption Shadows              $Low setOption MaterialDetail       $Low setOption ObjectDetail         $Medium setOption ObjectHiding         $On

# adjust simulator based on cpu speed if ($cpuSpeed >= $cpuLevelHigh) setOption SimulatorControls $Medium # one lower than hw   else setOption SimulatorControls $Low endif

setOption SoundQuality          $Low setOption FullscreenFadeEffect  $Off setOption AnimationSamplingLevel $Low setOption ScreenModeResolution  $Low setOption SubjectTracking       $Low setOption EnableLotImpostersInLot         $Off setOption EnableNeighborhoodOccupantsInLot $Off setOption LotSkirtSizeIncrease            0 setOption SnowOnGround         $On

endif


 * 1) save the selected configuration for this device.
 * 1) save the selected configuration for this device.

boolProp activeDeviceUseSoftwareRasterizer $useSoftwareRasterizer

intProp configParserErrorCode 0
 * 1) tell the caller that we completely finished parsing the script
 * 1) tell the caller that we completely finished parsing the script

uintProp hwMajorPSVersion $maxPixelProgramVersionMajor

log $logGroup $logLevelInfo "Finished Config File"