Guest User

BF3 Lua init script

a guest
Nov 27th, 2011
1,406
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 151.11 KB | None | 0 0
  1. [{'$file': {'fs': 'initfs_Win32',
  2.             'name': 'default_settings.cfg',
  3.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  4. '>}},
  5.  {'$file': {'fs': 'initfs_Win32',
  6.             'name': 'Levels/COOP_007/COOP_007.cfg',
  7.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  8. '>}},
  9.  {'$file': {'fs': 'initfs_Win32',
  10.             'name': 'Levels/COOP_002/COOP_002.cfg',
  11.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  12. '>}},
  13.  {'$file': {'fs': 'initfs_Win32',
  14.             'name': 'Levels/COOP_003/COOP_003.cfg',
  15.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  16. '>}},
  17.  {'$file': {'fs': 'initfs_Win32',
  18.             'name': 'Levels/FrontEnd/FrontEnd.cfg',
  19.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  20. '>}},
  21.  {'$file': {'fs': 'initfs_Win32',
  22.             'name': 'Levels/COOP_010/COOP_010.cfg',
  23.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  24. '>}},
  25.  {'$file': {'fs': 'initfs_Win32',
  26.             'name': 'Levels/COOP_006/COOP_006.cfg',
  27.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  28. '>}},
  29.  {'$file': {'fs': 'initfs_Win32',
  30.             'name': 'Levels/SP_Jet/SP_Jet.cfg',
  31.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  32. '>}},
  33.  {'$file': {'fs': 'initfs_Win32',
  34.             'name': 'Levels/SP_Bank/SP_Bank.cfg',
  35.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  36. '>}},
  37.  {'$file': {'fs': 'initfs_Win32',
  38.             'name': 'Levels/SP_Finale/SP_Finale.cfg',
  39.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  40. '>}},
  41.  {'$file': {'fs': 'initfs_Win32',
  42.             'name': 'Levels/SP_Villa/SP_Villa.cfg',
  43.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  44. '>}},
  45.  {'$file': {'fs': 'initfs_Win32',
  46.             'name': 'Levels/SP_Tank/SP_Tank.cfg',
  47.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  48. '>}},
  49.  {'$file': {'fs': 'initfs_Win32',
  50.             'name': 'Levels/SP_Valley/SP_Valley.cfg',
  51.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  52. '>}},
  53.  {'$file': {'fs': 'initfs_Win32',
  54.             'name': 'Levels/SP_Paris/SP_Paris.cfg',
  55.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  56. '>}},
  57.  {'$file': {'fs': 'initfs_Win32',
  58.             'name': 'Levels/SP_Earthquake2/SP_Earthquake2.cfg',
  59.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  60. '>}},
  61.  {'$file': {'fs': 'initfs_Win32',
  62.             'name': 'Levels/SP_Earthquake/SP_Earthquake.cfg',
  63.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  64. '>}},
  65.  {'$file': {'fs': 'initfs_Win32',
  66.             'name': 'Levels/Web_Loading/Web_Loading.cfg',
  67.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  68. '>}},
  69.  {'$file': {'fs': 'initfs_Win32',
  70.             'name': 'Levels/MP_018/MP_018.cfg',
  71.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  72. '>}},
  73.  {'$file': {'fs': 'initfs_Win32',
  74.             'name': 'Levels/MP_011/MP_011.cfg',
  75.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  76. '>}},
  77.  {'$file': {'fs': 'initfs_Win32',
  78.             'name': 'Levels/MP_001/MP_001.cfg',
  79.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  80. '>}},
  81.  {'$file': {'fs': 'initfs_Win32',
  82.             'name': 'Levels/MP_Subway/MP_Subway.cfg',
  83.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  84. '>}},
  85.  {'$file': {'fs': 'initfs_Win32',
  86.             'name': 'Levels/MP_017/MP_017.cfg',
  87.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  88. '>}},
  89.  {'$file': {'fs': 'initfs_Win32',
  90.             'name': 'Levels/MP_013/MP_013.cfg',
  91.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  92. '>}},
  93.  {'$file': {'fs': 'initfs_Win32',
  94.             'name': 'Levels/MP_012/MP_012.cfg',
  95.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  96. '>}},
  97.  {'$file': {'fs': 'initfs_Win32',
  98.             'name': 'Levels/MP_003/MP_003.cfg',
  99.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  100. '>}},
  101.  {'$file': {'fs': 'initfs_Win32',
  102.             'name': 'Levels/SP_Sniper/SP_Sniper.cfg',
  103.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  104. '>}},
  105.  {'$file': {'fs': 'initfs_Win32',
  106.             'name': 'Levels/MP_007/MP_007.cfg',
  107.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  108. '>}},
  109.  {'$file': {'fs': 'initfs_Win32',
  110.             'name': 'Levels/SP_Tank_b/SP_Tank_b.cfg',
  111.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  112. '>}},
  113.  {'$file': {'fs': 'initfs_Win32',
  114.             'name': 'Levels/SP_New_York/SP_New_York.cfg',
  115.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  116. '>}},
  117.  {'$file': {'fs': 'initfs_Win32',
  118.             'name': 'Levels/COOP_009/COOP_009.cfg',
  119.             'payload': <Blob 'Core.GameConfigurationName   gameconfigurations/game
  120. '>}},
  121.  {'$file': {'name': 'database.dbmanifest',
  122.             'payload': <Blob '<?xml version="1.0"   encoding="UTF-8"?>
  123. <Database id="VeniceRetailPc" family="Venice" displayName="Venice Retail PC Database" pipelineTag="Venice">
  124.     <Settings>
  125.         <Setting name=\'UseSparseSerialization\' value=\'false\'/>
  126.     </Settings>
  127.    
  128.     <EditorSettings>
  129.         <EditorSetting Name="AudioSystemAsset">Sound/AudioSystem</EditorSetting>
  130.         <EditorSetting Name="SoundStatesAsset">Sound/SoundStates</EditorSetting>
  131.         <EditorSetting Name="VoiceOverSystemAsset">Sound/VO/VO_System</EditorSetting>
  132.         <EditorSetting Name="TagDatabaseHost">DICE-BM153\\SQLEXPRESS</EditorSetting>
  133.         <EditorSetting Name="TagDatabaseName">VENICE-META</EditorSetting>
  134.         <EditorSetting Name="TagDatabaseUser">FrostEd</EditorSetting>
  135.         <EditorSetting Name="TagDatabasePwd">frostis</EditorSetting>       
  136.     </EditorSettings>
  137.    
  138.     <!-- Domain configuration    
  139.       -->
  140.  
  141.     <Domain name="Source"   root="Source" isReadOnly="true">
  142.         <EmergencyBindings>
  143.             <Type name="TextureBaseAsset" target="Textures/white"/>
  144.             <Type name="ShaderGraph" target="Shaders/debug/black"/>
  145.         </EmergencyBindings>
  146.     </Domain>
  147.     <Domain name="Temp" root="db/Temp" isEphemeral=\'true\'>
  148.         <Import domain="Source" readOnly=\'true\'/>
  149.     </Domain>
  150.     <Domain name="Win32" root="Output/Win32" isEphemeral=\'true\' isTargetDomain=\'true\'/>
  151.     <Domain name="Xenon" root="Output/Xenon" isEphemeral=\'true\' isTargetDomain=\'true\'/>
  152.     <Domain name="Ps3" root="Output/Ps3" isEphemeral=\'true\' isTargetDomain=\'true\'/>
  153.     <Domain name="Linux" root="Output/Linux" isEphemeral=\'true\' isTargetDomain=\'true\'/>
  154.     <Domain name="Editor" root="Output/Editor" isEphemeral=\'true\'/>  
  155. </Database>
  156. '>}},
  157.  {'$file': {'name': 'Scripts/Game/BugCommands.lua',
  158.             'payload': <Blob 'Commands =
  159. {  
  160.     -- Bug needed for when using Trigger bug in B4Bug, info is used for all bugs
  161.     StandardB4BugBug =
  162.     {
  163.         Name = "Standard B4Bug bug",
  164.         Title = "Venice",
  165.         Menu = "Bugs",
  166.         AutoB4Bug = true,
  167.         IsStandardBug = true,
  168.        
  169.         Information =
  170.         {
  171.             "Field" , "Issue Type" , "Bug",
  172.             "Field" , "Priority" , "Minor (C, V3, L3)",
  173.             "Field" , "Assignee" , "Automatic",
  174.             "Field" , "Report Method" , "B4Bug",
  175.             "Field" , "Milestone Hindering" , "None",
  176.             "Field" , "Language" , "English",
  177.             "Field" , "User Path" , "Probable",
  178.             "RPCGet", "Game Level" , "LocalPlayer.getClientLevelName",
  179.            
  180.             "Field" , "Description" , "\\nSoldier position: ",
  181.             "RPCGet", "Description" , "LocalPlayer.getPlayerPosition",
  182.             "Field" , "Description" , "\\nCurrent camera position: ",
  183.             "RPCGet", "Description" , "DebugCam.getCurrentCameraPosition",
  184.            
  185.             "Field" , "Environment" , "\\nOS Version: ",
  186.             "RPCGet", "Environment" , "BugManager.getOSInfo",
  187.             "Field" , "Environment" , "\\nGPU description: ",
  188.             "RPCGet", "Environment" , "DxRenderer.AdapterDescription",
  189.             "Field" , "Environment" , "\\nGPU driver version: ",
  190.             "RPCGet", "Environment" , "DxRenderer.AdapterDriverVersion",
  191.            
  192.             "RPCGet", "Platform" , "BugManager.getPlatform",
  193.             "RPCGet", "Reported By (Game Team)" , "BugManager.getReportedBy",
  194.             "RPCGet", "Found in Change List (Game)" , "BugManager.getChangelist",
  195.             "RPCGet", "Found in Change List (Frostbite)" , "BugManager.getFrostbiteChangelist",
  196.             "RPCGet" , "Juice Session ID" , "BugManager.getjuiceSessionId",
  197.         }
  198.     },
  199.        
  200.     TestBug1 =
  201.     {
  202.         Name = "Testbug",
  203.         Title = "Venice",
  204.         Menu = "Bugs",
  205.         AutoB4Bug = true,
  206.        
  207.         Information =
  208.         {
  209.         },
  210.        
  211.         RPCs =
  212.         {
  213.         },
  214.     },
  215.    
  216.     TestCommand1 =
  217.     {
  218.         Name = "Testcommand 1",
  219.         Title = "Venice",
  220.         Menu = "QA Commands",
  221.         AutoB4Bug = false,
  222.        
  223.         RPCs =
  224.         {
  225.             "DebugRender.DrawStatsEnable 1",
  226.             "UI.DrawEnable 0",
  227.         },
  228.        
  229.         ReverseRPCs =
  230.         {
  231.             "DebugRender.DrawStatsEnable 0",
  232.             "UI.DrawEnable 1",
  233.         },
  234.     },
  235.  
  236.     TestCommand2 =
  237.     {
  238.         Name = "Testcommand 2",
  239.         Title = "Venice",
  240.         Menu = "QA Commands",
  241.         AutoB4Bug = false,
  242.        
  243.         RPCs =
  244.         {
  245.             "Debug.DrawScreenCenterHelper 1",
  246.             "Render.ForceFov 100",
  247.         },
  248.        
  249.         ReverseRPCs =
  250.         {
  251.             "Debug.DrawScreenCenterHelper 0",
  252.             "Render.ForceFov 65",
  253.         },
  254.     },
  255.    
  256.     AnimationCommand1 =
  257.     {
  258.         Name = "Animation Test",
  259.         Title = "Venice",
  260.         Menu = "Animation",
  261.         AutoB4Bug = false,
  262.        
  263.         RPCs =
  264.         {
  265.             "AntDebug.DrawDebugInfo 1",
  266.             "AntDebug.DrawSignals 1",
  267.             "UI.DrawEnable 0",
  268.         },
  269.        
  270.         ReverseRPCs =
  271.         {
  272.             "AntDebug.DrawDebugInfo 0",
  273.             "AntDebug.DrawSignals 0",
  274.             "UI.DrawEnable 1",
  275.         },
  276.     },
  277.  
  278.     WeaponCommand1 =
  279.     {
  280.         Name = "Show weapon info",
  281.         Title = "Venice",
  282.         Menu = "Weapons",
  283.         AutoB4Bug = false,
  284.        
  285.         RPCs =
  286.         {
  287.             "AntDebug.DrawDebugInfo 1",
  288.             "Debug.DrawScreenCenterHelper 1",
  289.             "clientsoldier.debug.firingstats 1",
  290.         },
  291.        
  292.         ReverseRPCs =
  293.         {
  294.             "AntDebug.DrawDebugInfo 0",
  295.             "Debug.DrawScreenCenterHelper 0",
  296.             "clientsoldier.debug.firingStats 0",
  297.         },
  298.     }, 
  299. }
  300. '>}},
  301.  {'$file': {'name': 'Scripts/Game/Configure.lua',
  302.             'payload': <Blob '--
  303. -- Game configuration script
  304. --
  305.  
  306. -- Local helper functions
  307. function commandLine:lookup(name, default)
  308.     local value = self[string.lower(name)]
  309.  
  310.     return value or default
  311. end
  312.  
  313. local function cmdLineSwitch(switchName, fieldName, inTable)
  314.     local table = inTable or Game
  315.  
  316.     if (commandLine:lookup(switchName)) then
  317.         table[fieldName] = true
  318.     end
  319. end
  320.  
  321. function cmdLineOption(optionName, default)
  322.     return commandLine:lookup(optionName, default)
  323. end
  324.  
  325. local function readCfg(name)
  326.     log:debug("reading cfg: " .. name)
  327.     core.readKeyValueCfg(name, _G)
  328. end
  329.  
  330. local function applySettings(settings)
  331.     core.parseKeyValueCfgString(settings, _G)
  332. end
  333.  
  334. -- Basic settings
  335.  
  336. core.import("Scripts/Game/Settings.lua")
  337.  
  338. -- Import old-school cfg files for backwards compatibility
  339. local defaultConfigFile = commandLine:lookup("defaultConfig")
  340. if defaultConfigFile then
  341.     readCfg(defaultConfigFile)
  342. else
  343.     readCfg("Scripts/Game.cfg")
  344. end
  345.  
  346. --------------------------------------------------------------------------
  347. -- Handle any Drone override options
  348. --
  349.  
  350. for i,v in ipairs(commandLine) do
  351.     if string.lower(v) == "-customconfig" then
  352.         if commandLine[i+1]:find("/") then
  353.             readCfg(commandLine[i+1])
  354.         else
  355.             readCfg("Scripts/" .. commandLine[i+1])
  356.         end
  357.     end
  358. end
  359.  
  360. local editorActive = false
  361. local liveEditingEnable = commandLine:lookup("core.liveeditingenable")
  362. if liveEditingEnable then
  363.     if liveEditingEnable == "1" or liveEditingEnable == "true" then
  364.         editorActive = true
  365.     end
  366. end
  367.  
  368. --------------------------------------------------------------------------
  369. -- Handle local overrides
  370. --
  371. -- This needs to run before we load the level cfg as we can specify the fast startup level name here!
  372.  
  373. if not commandLine:lookup(\'noLocalCfg\', false) then
  374.     -- Read common local cfg file
  375.     readCfg("/local/local.cfg", _G)
  376.  
  377.     if editorActive == true then
  378.         -- Read local cfg with editor specific settings
  379.         readCfg("/local/localeditor.cfg", _G)
  380.     else
  381.         -- Read local cfg with standalone specific settings
  382.         readCfg("/local/localgame.cfg", _G)
  383.     end
  384. end
  385.  
  386. --------------------------------------------------------------------------
  387. -- Handle level specific configuration
  388. --
  389.  
  390. local levelName = commandLine:lookup("level")
  391. if not levelName then
  392.     local gameTable = _G["Game"]
  393.     if gameTable then
  394.         levelName = gameTable["Level"]
  395.     end
  396. end
  397.  
  398. -- Level names without slashes are assumed to be shorthand for
  399. -- Levels/name/name to go with Venice\'s epic level naming convention
  400. if levelName and not string.find(levelName, "/") then
  401.     levelName = "Levels/" .. levelName .. "/" .. levelName
  402. end
  403.  
  404. if levelName then
  405.     readCfg(levelName .. ".cfg")
  406. end
  407.  
  408. --------------------------------------------------------------------------
  409. -- Handle commandline options
  410. --
  411. --   Commandline options effectively override any settings specified
  412. --   elsewhere.
  413. --
  414.  
  415. if not Game then Game = {} end
  416.  
  417. cmdLineSwitch("verbose", "Verbose")
  418.  
  419. if Game.Verbose then
  420.     print "------------Commandline parameters:"
  421.     for k,v in pairs(commandLine) do print (k,v) end
  422. end
  423.  
  424. -- Handle <Table>.<Member> settings
  425.  
  426. if allowCommandlineSettings then
  427.     for _,option in ipairs(commandLine) do
  428.         local table,member = string.match(option, "^%-(%w+)%.(%w+)")
  429.  
  430.         if table and member then
  431.             local value = commandLine[_ + 1]
  432.             if not _G[table] then _G[table] = {} end
  433.             _G[table][member] = value
  434.         else
  435.             local varName = string.match(option, "^%-([%w-]+)")
  436.             if varName then
  437.                 local value = commandLine[_ + 1]
  438.                 if value then
  439.                     _G[varName] = value
  440.                 end
  441.             end
  442.         end
  443.        
  444.     end
  445. end
  446.  
  447. --------------------------------------------------------------------------
  448. -- Force specific settings when running through FrostEd
  449. --
  450.  
  451. if editorActive then
  452.     Online.Backend = "Backend_Lan"
  453.     Online.UseFallback = true
  454.     Client.IsPresenceEnabled = false
  455.     Server.IsPresenceEnabled = false
  456.  
  457.     applySettings([=[
  458.         Server.forceStartMapOnLoad true
  459.         Network.GhostCountWarning true
  460.         Network.GhostCountWarningInfo true
  461.         Game.DisablePreRound true
  462.     ]=])
  463. end
  464.  
  465. --
  466.  
  467. core.import("Scripts/Game/DebugSettings.lua")
  468. '>}},
  469.  {'$file': {'name': 'Scripts/Game/DebugSettings.lua',
  470.             'payload': <Blob '
  471. core = require "Frost.Core"
  472. logging = require "Frost.Logging"
  473.  
  474. local function applySettings(settings)
  475.     core.parseKeyValueCfgString(settings, _G) end
  476.    
  477. -- helpers
  478.  
  479. local function getSetting(key)
  480.     container, field = string.match(key, "(%w+)%.(%w+)");
  481.     if container and field then
  482.         if not _G[container] then
  483.             _G[container] = {}
  484.         end
  485.         return _G[container][field]
  486.     else
  487.         return _G[key]
  488.     end
  489. end
  490.  
  491. local function setSetting(key, value)
  492.     container, field = string.match(key, "(%w+)%.(%w+)");
  493.     if container and field then
  494.         if not _G[container] then
  495.             _G[container] = {}
  496.         end
  497.         _G[container][field] = value
  498.     else
  499.         _G[key] = value
  500.     end
  501. end
  502.  
  503. -- thin-client settings: 0=Off 1=Console
  504.  
  505. setSetting("thin-client", cmdLineOption("thinClient", getSetting("thin-client")))
  506.  
  507. if getSetting("thin-client") == "1" then
  508.     applySettings([=[
  509.         RenderDevice.CreateMinimalWindow true
  510.         Core.HardwareProfile Hardware_Low
  511.         Core.HardwareGpuBias -1
  512.         Server.DebrisClusterEnabled true
  513.         Client.DebrisClusterEnabled false
  514.         DebrisSystem.Enable false
  515.         Client.WorldRenderEnabled false
  516.         Client.EmittersEnabled false
  517.         Client.TerrainEnabled false
  518.         Client.MeshMergingEnabled false
  519.         Client.OvergrowthEnabled false
  520.         Client.OccludersEnabled true
  521.         Decal.SystemEnable false
  522.         Render.DebugRendererEnable false
  523.         UI.HudEnable false
  524.         UI.System UISystem_None    
  525.         EmitterSystem.Enable false
  526.         Window.Fullscreen false
  527.         Render.Enable false
  528.         disable-input true
  529.         scripted-input true
  530.         use-script-input true
  531.         disable-client-correction true
  532.         disable-client-animations true
  533.         Sound.Enable false
  534.         disable-entities true
  535.         disable-camera true
  536.         Texture.LoadingEnabled false
  537.         Texture.RenderTexturesEnabled false
  538.         Mesh.LoadingEnabled false
  539.         ShaderSystem.DatabaseLoadingEnable false
  540.         disable-audio-loading true
  541.         GameTime.ForceUseSleepTimer true
  542.         ShaderSystem.DxFrameVertexBufferPoolSize 16
  543.         ShaderSystem.FrameMemoryBufferSize 16
  544.         PerformanceTracker.Enabled false
  545.     ]=])
  546. end
  547.  
  548. -- testingEnabled 0=Off, 1=On
  549.  
  550. setSetting("testing-enabled", cmdLineOption("testingEnabled", getSetting("testing-enabled")))
  551.  
  552. if getSetting("testing-enabled") == "1" then
  553.     applySettings([=[
  554.         Server.EnableMonkeyTestLayers true
  555.         add-debug-entity true
  556.         scripted-input true
  557.         use-script-input true
  558.         Juice.logClientTestingEvents true
  559.     ]=])
  560. end
  561.  
  562. '>}},
  563.  {'$file': {'name': 'Scripts/Game/Settings.lua',
  564.             'payload': <Blob '--
  565. -- Define basic settings tables
  566. --
  567.  
  568. Game = {
  569.     LogFileEnable = true,
  570. }
  571.  
  572. Client = {
  573. }
  574.  
  575. Server = {
  576. }
  577.  
  578. ShaderSystem = {
  579.     DebugNonFiniteColor = { x=0, y=0, z=0 },
  580. }
  581.  
  582. NetworkSettings = {
  583.     Version = "V0.0",
  584.     ProtocolVersion = 0,
  585.     TitleId = 4,
  586.     ClientPort = 1001,
  587.     ServerPort = 1003,
  588.     MaxGhostCount = 1024,
  589.     MaxClientCount = 64,
  590. }
  591.  
  592. Core = {
  593. }
  594. '>}},
  595.  {'$file': {'name': 'Scripts/Game/Startup.lua',
  596.             'payload': <Blob '--
  597. -- Game startup script
  598. --
  599.  
  600. require "vfs"
  601. core = require "Frost.Core"
  602. logging = require "Frost.Logging"
  603.  
  604. -- The global platform variable can be used to detect which platform
  605. -- we are currently executing on
  606.  
  607. platform = dice.getCurrentPlatformName()
  608.  
  609. -- Set up a logger which logs to the console (not stdout)
  610. -- By default, we only show warnings or worse. For more verbose
  611. -- diagnostics, you may set the level to INFO or DEBUG.
  612.  
  613. log = logging.ingameConsole()
  614. log:setLevel(logging.DEBUG)
  615.  
  616. core.import("Scripts/Game/Configure.lua")
  617.  
  618. '>}},
  619.  {'$file': {'name': 'Scripts/GlobalSettings.lua',
  620.             'payload': <Blob '--
  621. -- Global Settings
  622. --
  623. --  These are front-end settings exposed to the end-user. The idea is that
  624. --  settings that are interesting to the majority of end-users should be
  625. --  defined here to enable tools to query for exposed options.
  626. --
  627. --  This file is imported by Pipeline, Game, etc
  628. --
  629. -- *********************************************************
  630. -- NOTE: This is largely deprecated and will be phased out!
  631. -- *********************************************************
  632.  
  633. GlobalSettings = {}
  634. GlobalSettings.Meta = {}
  635.  
  636. local function ValidateSetting(name, value)
  637.     assert(name and value)
  638.  
  639.     local meta = GlobalSettings.Meta[name]
  640.     local lowerValue = string.lower(value)
  641.  
  642.     if meta then
  643.         for _,v in ipairs(meta.validValues) do
  644.             if string.lower(v[1]) == lowerValue then
  645.                 return v[1]
  646.             end
  647.         end
  648.  
  649.         -- We intentionally don\'t build this string in the loop above
  650.         -- in an attempt to generate less ephemeral garbage
  651.  
  652.         local choices = nil
  653.  
  654.         for _,v in ipairs(meta.validValues) do
  655.             if choices then
  656.                 choices = choices .. ", " .. v[1]
  657.             else
  658.                 choices = v[1]
  659.             end
  660.         end
  661.  
  662.         error("Setting \'" .. name .. "\' cannot be set to specified value: " .. value .. ", valid values are " .. choices)
  663.     else
  664.         error("Undefined setting - \'" .. name .. "\'")
  665.     end
  666. end
  667.  
  668. local function DefineSetting(descriptionTable)
  669.     assert(descriptionTable[1] and descriptionTable[2], "Settings must have name and default values!")
  670.    
  671.     local name = descriptionTable[1];
  672.     local defaultValue = descriptionTable[2];
  673.    
  674.     GlobalSettings[name] = defaultValue
  675.     GlobalSettings.Meta[name] = {}
  676.  
  677.     GlobalSettings.Meta[name].default = defaultValue
  678.    
  679.     if descriptionTable.description then
  680.         GlobalSettings.Meta[name].description = descriptionTable.description
  681.     end
  682.  
  683.     if descriptionTable.validValues then
  684.         GlobalSettings.Meta[name].validValues = descriptionTable.validValues
  685.     end
  686.  
  687.     if descriptionTable.commandLine then
  688.         GlobalSettings.Meta[name].commandLine = descriptionTable.commandLine
  689.     end
  690.  
  691.     if descriptionTable.envVar then
  692.         GlobalSettings.Meta[name].envVar = descriptionTable.envVar
  693.     end
  694.    
  695.     -- Validate default vs validValues
  696.     ValidateSetting(name, defaultValue)
  697. end
  698.  
  699. function ApplyCommandLineSettings(commandLine)
  700.     for setting,meta in pairs(GlobalSettings.Meta) do
  701.         if meta.commandLine then
  702.             local options = meta.commandLine
  703.  
  704.             for _,entry in ipairs(options) do
  705.                 local k = entry[1]
  706.                 local v = entry[2]
  707.  
  708.                 local value = commandLine[string.lower(k)]
  709.  
  710.                 if value then
  711.                     if not v then
  712.                         SetSetting(setting, value, string.format(" (due to -%s %s)", k, value))
  713.                     else
  714.                         SetSetting(setting, v, string.format(" (due to -%s)", k))
  715.                     end
  716.                 end
  717.             end
  718.         end
  719.     end
  720. end
  721.  
  722. function ApplyEnvironmentVariableSettings()
  723.     for setting,meta in pairs(GlobalSettings.Meta) do
  724.         if meta.envVar then
  725.             local envVarValue = os.getenv(meta.envVar)
  726.  
  727.             if envVarValue then
  728.                 SetSetting(setting, envVarValue)
  729.             end
  730.         end
  731.     end
  732. end
  733.  
  734.  
  735. function SetSetting(settingName, value, source)
  736.     if not GlobalSettings[settingName] then
  737.         error("Attempted set of unknown setting \'" .. settingName .. "\'")
  738.     else
  739.         GlobalSettings[settingName] = ValidateSetting(settingName, value)
  740.  
  741.         if log then
  742.             log:debug("Set setting " .. settingName .. " to value: " .. value .. (source or ""))
  743.         end
  744.     end
  745. end
  746.  
  747. function GetGlobalSetting(settingName)
  748.     if not GlobalSettings[settingName] then
  749.         error("Attempted get of unknown setting \'" .. settingName .. "\'")
  750.     else
  751.         return GlobalSettings[settingName]
  752.     end
  753. end
  754.  
  755. --------------------------------------------------------------------------
  756. -- Setting definitions
  757. --
  758.  
  759. DefineSetting {
  760.     "Cache", "Enabled",
  761.  
  762.     validValues = {
  763.         { "Enabled",        "Normal cache mode" },
  764.         { "Disabled",       "No caching" },
  765.         { "ReadOnly",       "Only read from caches (never upload)" },
  766.         { "WriteOnly",      "Only write to caches (useful for fixing problems)" }
  767.     },
  768.     description = "Cache Control",
  769.     commandLine = {
  770.         { "cacheMode" },
  771.         { "nocache",        "Disabled" },
  772.         { "readonlyCache",  "ReadOnly" },
  773.         { "writeOnlyCache", "WriteOnly" },
  774.         { "cache",          "Enabled" }
  775.     },
  776.     envVar = "PIPELINE_CACHE_MODE"
  777. }
  778. '>}},
  779.  {'$file': {'name': 'Scripts/Packages/Frost/Core.lua',
  780.             'payload': <Blob '--
  781. -- Various bits of Lua scaffolding
  782. --
  783.  
  784. require "os"
  785. require "vfs"
  786.  
  787. module("Frost.Core", package.seeall);
  788.  
  789. -- Execute a script
  790. --
  791. --   If flags contains a "silent=true" flag, then no message
  792. --   will be emitted if the script can\'t be found
  793. --
  794.  
  795. -- Execute a script, optionally returning an error message if it fails
  796.  
  797. function import(script, friendlyName, flags)
  798.     local name = friendlyName or script
  799.  
  800.     local success, err = pcall(dofile,script)
  801.    
  802.     if not success and not (flags and flags.silent) then
  803.         error("Could not import script: " .. name .. " error: " .. err)
  804.     end
  805. end
  806.  
  807. -- Execute a new-style config file
  808.  
  809. local function executeCfg(file)
  810.     if log then
  811.         log:debug("  Executing new style (lua) config file")
  812.     end
  813.  
  814.     local script = file:read("*all")
  815.  
  816.     local func, err = loadstring(script)
  817.  
  818.     if func then
  819.         func()
  820.     else
  821.         error(err)
  822.     end
  823. end
  824.  
  825. -- Parse a single line containing a key-value pair (and possibly some comments)
  826.  
  827. function parseKeyValueCfgLine(line, targetTable)
  828.     -- Remove comments
  829.     line = string.gsub(line, "#.*", "")
  830.     line = string.gsub(line, "//.*", "")
  831.    
  832.     -- Split into key, value pairs
  833.     local key, value = string.match(line, "(%S+)%s+(.+)%s*");
  834.    
  835.     if key and value then
  836.         -- Handle dotted key names
  837.         local container, field = string.match(key, "(%w+)%.(%w+)");
  838.        
  839.         if container and field then
  840.             if not targetTable[container] then
  841.                 targetTable[container] = {}
  842.             end
  843.            
  844.             targetTable[container][field] = value;
  845.  
  846.             if log then
  847.                 log:debug(string.format("set %s.%s = %s (from key-value cfg line)", container, field, value))
  848.             end
  849.         else
  850.             targetTable[key] = value;
  851.  
  852.             if log then
  853.                 log:debug(string.format("set %s = %s (from key-value cfg line)", key, value))
  854.             end
  855.         end
  856.     end
  857. end    
  858.  
  859. -- Parse a string of key-value config entries
  860.  
  861. function parseKeyValueCfgString(str, targetTable)
  862.     for line in string.gmatch(str, "[^\\n]*") do
  863.         parseKeyValueCfgLine(line, targetTable)
  864.     end
  865. end
  866.  
  867. -- Parse an old-style key-value CFG file
  868.  
  869. function readKeyValueCfg(file, targetTable)
  870.     if log then
  871.         log:debug("Reading cfg \'" .. file .. "\'")
  872.     end
  873.  
  874.     local f = vfs.open(file, "r")
  875.    
  876.     if not f then
  877.         -- File not found
  878.         if log then
  879.             log:debug("Failed to find file \'" .. file .. "\'")
  880.         end
  881.            
  882.         return
  883.     end
  884.  
  885.     local firstLine = true
  886.  
  887.     while true do
  888.         local line = f:read("*line")
  889.        
  890.         if not line then
  891.             break
  892.         end
  893.  
  894.         if firstLine and line == "#!/bin/lua" then
  895.             executeCfg(f)
  896.         end
  897.        
  898.         parseKeyValueCfgLine(line, targetTable)
  899.     end
  900.    
  901.     f:close();
  902. end
  903. '>}},
  904.  {'$file': {'name': 'Scripts/Packages/Frost/Logging.lua',
  905.             'payload': <Blob '-- Logging package
  906.  
  907. local type, table, string, assert, _tostring = type, table, string, assert, tostring
  908.  
  909. require "vfs"
  910.  
  911. module("Frost.Logging", package.seeall)
  912.  
  913. -- The DEBUG Level designates fine-grained informational events that are most
  914. -- useful to debug an application
  915. DEBUG = "DEBUG"
  916.  
  917. -- The INFO level designates informational messages that highlight the
  918. -- progress of the application at coarse-grained level
  919. INFO = "INFO"
  920.  
  921. -- The WARN level designates potentially harmful situations
  922. WARN = "WARN"
  923.  
  924. -- The ERROR level designates error events that might still allow the
  925. -- application to continue running
  926. ERROR = "ERROR"
  927.  
  928. -- The FATAL level designates very severe error events that will presumably
  929. -- lead the application to abort
  930. FATAL = "FATAL"
  931.  
  932. local LEVEL = {
  933.     [DEBUG] = 1,
  934.     [INFO]  = 2,
  935.     [WARN]  = 3,
  936.     [ERROR] = 4,
  937.     [FATAL] = 5,
  938. }
  939.  
  940.  
  941. -------------------------------------------------------------------------------
  942. -- Creates a new logger object
  943. -------------------------------------------------------------------------------
  944. function new(append)
  945.  
  946.     if type(append) ~= "function" then
  947.         return nil, "Appender must be a function."
  948.     end
  949.  
  950.     local logger = {}
  951.     logger.level = DEBUG
  952.        logger.append = append
  953.  
  954.     logger.setLevel = function (self, level)
  955.         assert(LEVEL[level], string.format("undefined level `%s\'", tostring(level)))
  956.         self.level = level
  957.     end
  958.  
  959.     logger.log = function (self, level, message)
  960.         assert(LEVEL[level], string.format("undefined level `%s\'", tostring(level)))
  961.         if LEVEL[level] < LEVEL[self.level] then
  962.             return
  963.         end
  964.         if type(message) ~= "string" then
  965.           message = tostring(message)
  966.         end
  967.         return logger:append(level, message)
  968.     end
  969.  
  970.     logger.debug = function (logger, message) return logger:log(DEBUG, message) end
  971.     logger.info  = function (logger, message) return logger:log(INFO,  message) end
  972.     logger.warn  = function (logger, message) return logger:log(WARN,  message) end
  973.     logger.error = function (logger, message) return logger:log(ERROR, message) end
  974.     logger.fatal = function (logger, message) return logger:log(FATAL, message) end
  975.     return logger
  976. end
  977.  
  978.  
  979. -------------------------------------------------------------------------------
  980. -- Prepares the log message
  981. -------------------------------------------------------------------------------
  982. function prepareLogMsg(pattern, dt, level, message)
  983.  
  984.    local logMsg = pattern or "%date %level %message\\n"
  985.    message = string.gsub(message, "%%", "%%%%")
  986.    logMsg = string.gsub(logMsg, "%%date", dt)
  987.    logMsg = string.gsub(logMsg, "%%level", level)
  988.    logMsg = string.gsub(logMsg, "%%message", message)
  989.    return logMsg
  990. end
  991.  
  992.  
  993. -------------------------------------------------------------------------------
  994. -- Converts a Lua value to a string
  995. --
  996. -- Converts Table fields in alphabetical order
  997. -------------------------------------------------------------------------------
  998. function tostring(value)
  999.  local str = \'\'
  1000.  
  1001.  if (type(value) ~= \'table\') then
  1002.    if (type(value) == \'string\') then
  1003.      str = string.format("%q", value)
  1004.    else
  1005.      str = _tostring(value)
  1006.    end
  1007.  else
  1008.    local auxTable = {}
  1009.    table.foreach(value, function(i, v)
  1010.      if (tonumber(i) ~= i) then
  1011.        table.insert(auxTable, i)
  1012.      else
  1013.        table.insert(auxTable, tostring(i))
  1014.      end
  1015.    end)
  1016.    table.sort(auxTable)
  1017.  
  1018.    str = str..\'{\'
  1019.    local separator = ""
  1020.    local entry = ""
  1021.    table.foreachi (auxTable, function (i, fieldName)
  1022.      if ((tonumber(fieldName)) and (tonumber(fieldName) > 0)) then
  1023.        entry = tostring(value[tonumber(fieldName)])
  1024.      else
  1025.        entry = fieldName.." = "..tostring(value[fieldName])
  1026.      end
  1027.      str = str..separator..entry
  1028.      separator = ", "
  1029.    end)
  1030.    str = str..\'}\'
  1031.  end
  1032.  return str
  1033. end
  1034.  
  1035. --
  1036. -- Print appender
  1037. --
  1038.  
  1039. function console(logPattern)
  1040.  
  1041.    return new( function(self, level, message)
  1042.                     print(prepareLogMsg(logPattern, os.date(), level, message))
  1043.                     return true
  1044.                 end
  1045.               )
  1046. end
  1047.  
  1048. function ingameConsole()
  1049.  
  1050.    return new( function(self, level, message)
  1051.                     ingamePrint(level, message)
  1052.                     return true
  1053.                 end
  1054.               )
  1055. end
  1056. '>}},
  1057.  {'$file': {'name': 'Scripts/Pipeline/Configuration.lua',
  1058.             'payload': <Blob '--
  1059. -- Pipeline Configuration
  1060. --
  1061. --   This is an internal script used for configuring the pipeline. Normal
  1062. --   users should typically not edit this file, as most end-user settings
  1063. --   are exposed through the GlobalSettings.lua file
  1064. --
  1065.  
  1066. --
  1067. -- Import common settings
  1068. --
  1069.  
  1070. core.import(allScriptsRoot .. "GlobalSettings.lua", "global settings");
  1071.  
  1072. -- Import session startup script, if specified on commandLine
  1073. --
  1074. -- This is used by Drone to change settings
  1075.  
  1076. if commandLine.startupscript then
  1077.     core.import("/data/" .. commandLine.startupScript, _G)
  1078. end
  1079.  
  1080. core.import(scriptsRoot .. "Settings.lua")
  1081.  
  1082. --   -config commandLine switch is used by Drone to configure custom settings
  1083. if commandLine.config then
  1084.     core.readKeyValueCfg("/data/Scripts/" .. commandLine.config, _G)   
  1085. end
  1086.  
  1087. --------------------------------------------------------------------------
  1088. -- Handle commandline options
  1089. --
  1090. --   Commandline options effectively override any settings specified
  1091. --   elsewhere.
  1092. --
  1093.  
  1094. local function cmdLineSwitch(switchName, fieldName)
  1095.     if (commandLine[string.lower(switchName)]) then
  1096.         Pipeline[fieldName] = true
  1097.     end
  1098. end
  1099.  
  1100. local function cmdLineArg(switchName, fieldName)
  1101.     local entry = commandLine[string.lower(switchName)]
  1102.    
  1103.     if (entry) then
  1104.         Pipeline[fieldName] = entry
  1105.         --print("Set " .. fieldName .. " to " .. entry)
  1106.     end
  1107. end
  1108.  
  1109. cmdLineSwitch("debug", "DebugMode");
  1110. cmdLineSwitch("validateData", "ValidateData");
  1111. cmdLineSwitch("addToPerforce", "AddToPerforce");
  1112. cmdLineSwitch("noconsole", "NoConsole");
  1113. cmdLineSwitch("verbose", "Verbose");
  1114. cmdLineSwitch("trace", "EnableTracing");
  1115. cmdLineSwitch("nohal", "DisableHalDevice");
  1116. cmdLineSwitch("trim", "TrimLayout");
  1117. cmdLineSwitch("updateIndex", "UpdateIndexOnly");
  1118.  
  1119. cmdLineArg("opfilter", "OpFilter")
  1120.  
  1121. --
  1122. --  Parse commandline options that may occur multiple times ("list" options)
  1123. --
  1124.  
  1125. ----------------------------------------------------------------------------------------
  1126. --
  1127. -- Diagnostics dump
  1128. --
  1129.  
  1130. if Pipeline.Verbose then
  1131.     print ""
  1132.     print "Pipeline settings summary:"
  1133.     print "------------------------------------------------------"
  1134.    
  1135.     for k,v in pairs(Pipeline) do
  1136.         print(k, v)
  1137.     end
  1138.    
  1139.     print ""
  1140.  
  1141.     print "Command line:"
  1142.     print "------------------------------------------------------"
  1143.    
  1144.     for _,v in pairs(commandLine) do
  1145.         print(_,v)
  1146.     end
  1147.  
  1148.     print ""
  1149. end
  1150. '>}},
  1151.  {'$file': {'name': 'Scripts/Pipeline/Settings.lua',
  1152.             'payload': <Blob '--
  1153. -- Internal Pipeline settings
  1154. --
  1155. --   This is not really the best place to change settings locally,
  1156. --   please see GlobalSettings.lua instead and use it if at all
  1157. --   possible
  1158. --
  1159.  
  1160. local Dx10PathEnable = false
  1161. local Dx10PlusPathEnable = true
  1162. local Dx10Dot1PathEnable = false
  1163. local Dx11PathEnable = true
  1164. local AutoPathEnable = false
  1165. local SkipAllPaths = false
  1166.  
  1167. Pipeline =
  1168. {
  1169.     Verbose = false,
  1170.     Rebuild = false,
  1171.     ShowReason = true,
  1172.     AddToPerforce = false,
  1173.  
  1174.     -- Debugging/profiling options
  1175.     Profiler = false,
  1176.     DebugMode = false,
  1177.     EmitPlaintextDbx = false,
  1178.     EnableTimingLog = false,
  1179.     BundleDebugging = false,
  1180.     ResourceDebugging = false,
  1181.  
  1182.     AsyncOpWrite = true,
  1183.     DumpOplogStats = false,
  1184.  
  1185.     --ServiceMode = true,
  1186. }
  1187.  
  1188. --------------------------------------------------------------
  1189.  
  1190. Core =
  1191. {
  1192.     LogLevel = "Info",
  1193.     StudioBus = "[email protected]"  -- dice-bm150
  1194. }
  1195.  
  1196. Ant =
  1197. {
  1198. --  Setting this to true sometimes breaks reimport
  1199.     ShowSyncDialogOnReimport = false,
  1200. }
  1201.  
  1202. Havok =
  1203. {
  1204.     WriteShapeLog = false,
  1205.     WriteMemoryLog = false,
  1206.     WriteMaterialsLog = false,
  1207.     ErrorOnStaticValidationError = true,   
  1208.     DetailExport = true,
  1209.     LogTriangleDensity = true,
  1210.     HavokImportVersion = 1,
  1211. }
  1212.  
  1213. HavokGroupPhysicsEntity =
  1214. {
  1215.     WriteShapeLog = false,
  1216.     WriteMemoryLog = false,
  1217.     WriteMaterialsLog = false,
  1218.     WriteGroupGeneralLog = false,
  1219.     WritePartInfoLog = false,
  1220.     ErrorOnStaticValidationError = true,   
  1221.     DetailExport = true,
  1222.     LogTriangleDensity = true,
  1223.     HavokImportVersion = 1,
  1224.  
  1225.     AllowDefaultCollisionShape = true
  1226. }
  1227.  
  1228. Texture =
  1229. {
  1230.     SkipMipmapsPs3Enable = true,
  1231.     CudaEnable = true,
  1232.     WaitOnCudaEnable = false,
  1233.     MultithreadedCompressionEnable = true,
  1234.     DefaultTextureGroup = "TextureGroups/Default";
  1235. }
  1236.  
  1237. ObjectBlueprint =
  1238. {
  1239.     AllowDefaultPartMaterial = true,
  1240.     AllowDefaultEntityMaterial = true,
  1241. }
  1242.  
  1243. BlueprintImport =
  1244. {
  1245.     UseDefaultRaycastRoot = false,
  1246.     OptimizeGeometries = true,
  1247.     ErrorOnSceneMismatch = true,
  1248. }
  1249.  
  1250. Mesh =
  1251. {
  1252.     Verbose = false,
  1253.     ZOnlyMeshEnable = true,
  1254.     Ps3EdgeEnable = true,
  1255.     Ps3EdgeCompressPositionsEnable = true, 
  1256.     Ps3EdgeCompressIndicesEnable = true,   
  1257.     Ps3EdgeMinSubsetTriangleCount = 0,
  1258.    
  1259.     MinStreamingLodSize = 0,
  1260.    
  1261.     SootSkipShaderNames =
  1262.     {
  1263.         "Template",
  1264.         "Tmpl",
  1265.         "NoSoot"
  1266.     },
  1267.     WarningsAsErrorsEnable = false,
  1268.    
  1269.     -- EnlightenSaveInputMeshEnable = true,
  1270.     -- RadiosityPixelSize_Lower = 16.0,
  1271.     -- RadiosityPixelSize_Lowest = 8.0,
  1272.     -- RadiosityPixelSize_Low = 4.0,
  1273.     -- RadiosityPixelSize_Medium = 2.0,
  1274.     -- RadiosityPixelSize_High = 1.0,
  1275.     -- RadiosityPixelSize_Higher = 0.5,
  1276.     -- RadiosityPixelSize_Max = 0.25,
  1277. }
  1278.  
  1279. Enlighten =
  1280. {
  1281.     -- Set this to false to prevent any dynamic enlighten data from beeing built and loaded into the game.
  1282.     -- This is useful for retail builds if only static enlighten data is allowed.
  1283.     DynamicEnable = true,
  1284. }
  1285.  
  1286. Level =
  1287. {
  1288.     VoAnimTreesEnable = false,
  1289.  
  1290.     GroupTreeModelEntities = true,
  1291.     GroupStaticModelEntities = true,
  1292.     GroupMiddlegrowthModelEntities = true,
  1293.    
  1294.     OptimizeMaterialGrid = true,
  1295.  
  1296.     LogDetailedInstanceCounts = false
  1297. }
  1298.  
  1299. ShaderState =
  1300. {
  1301.     TerrainDebugColorEnable = false,
  1302.     TerrainOverdrawModeEnable = false,
  1303.     DynamicEnvmapModeEnable = false,
  1304.    
  1305.     StripUnusedTextures = true,
  1306.  
  1307.     VanillaShadowmapsEnable = false,
  1308. --  CascadedBox3ShadowmapsEnable = true,
  1309. --  CascadedBox4ShadowmapsEnable = true,    
  1310. }
  1311.  
  1312. ShaderProgramDatabase =
  1313. {
  1314.     ShaderDebugInfoEnable = false,
  1315.     DxShaderDebugInfoEnable = false,
  1316.  
  1317.     Dx10PathEnable = Dx10PathEnable,   
  1318.     Dx10PlusPathEnable = Dx10PlusPathEnable,
  1319.     Dx10Dot1PathEnable = Dx10Dot1PathEnable,
  1320.     Dx11PathEnable = Dx11PathEnable,
  1321.     AutoPathEnable = AutoPathEnable,
  1322.     SkipAllPaths = SkipAllPaths,
  1323.    
  1324.     Ps3OptimizationLevel = 3,
  1325.     Ps3BuildRandomizedShaders = true
  1326. }
  1327.  
  1328. ShaderDatabase =
  1329. {
  1330.     ShaderDebugInfoEnable = false,
  1331.     DxShaderDebugInfoEnable = false,
  1332.  
  1333.     Dx10PathEnable = Dx10PathEnable,   
  1334.     Dx10PlusPathEnable = Dx10PlusPathEnable,
  1335.     Dx10Dot1PathEnable = Dx10Dot1PathEnable,
  1336.     Dx11PathEnable = Dx11PathEnable,
  1337.     AutoPathEnable = AutoPathEnable,
  1338.     SkipAllPaths = SkipAllPaths,
  1339.  
  1340.     Ps3OptimizationLevel = 3,
  1341.     Ps3BuildRandomizedShaders = true,
  1342.     Ps3PackVertexElementsEnable = true,
  1343.     Ps3ForceHalfPrecisionEnable = false,
  1344.     Ps3ForceVertexDynamicBranchesEnable = false,
  1345.     Ps3ForcePixelDynamicBranchesEnable = false,
  1346.    
  1347.     ForceCompileInConstantsEnable = true,
  1348.     NonFiniteColoringEnable = false,
  1349.     ManualSourceChangeEnable = false,
  1350.     StateMetricsEnable = false,
  1351.     StateSolutionCacheEnable = false,
  1352.     SeparateWorldTransformEnable = false
  1353. }
  1354.  
  1355. Terrain =
  1356. {
  1357.     SplineDecalsSubdivisionCount = 1,
  1358.     MaskFunctionsEnable = false,
  1359. }
  1360.  
  1361. TerrainStreamingTree =
  1362. {
  1363.     OptimizeUsingProceduralMask = true
  1364. }
  1365.  
  1366. Award =
  1367. {
  1368.     OutputAwardXml = true,
  1369.     OutputRankXml = true,
  1370.     InvalidAwardCodeCharacters = "-. ",
  1371.     AllowEmptyAwardCodes = false,
  1372.     CheckStatCategories = true,
  1373.     SetSpecificDataToChildAwards = true,
  1374. }
  1375.  
  1376. Persistence =
  1377. {
  1378.     OutputXml = true,
  1379.     OutputBlazeProperties = true,
  1380.     DeltaGameReports = true,
  1381. }
  1382.  
  1383. Unlock =
  1384. {
  1385.     ExportUnlocks = true
  1386. }
  1387.  
  1388. EmitterSystem =
  1389. {
  1390.     DxAtlasSkipMipmaps = 0,
  1391.     Ps3AtlasSkipMipmaps = 0,
  1392.     XenonAtlasSkipMipmaps = 0, 
  1393. }
  1394.  
  1395. Audio =
  1396. {
  1397.     EnableDevelopmentFeatures = false,
  1398. }
  1399.  
  1400. UIActionscriptInjection =
  1401. {
  1402.     RemoveTraces = true;
  1403. }
  1404.  
  1405. VeniceLevel =
  1406. {
  1407.     GenerateCombatAreaTextures = false;
  1408. }
  1409.  
  1410. GameConfig =
  1411. {
  1412.     AnimationProjectPath = "Animations/AntAnimations",
  1413. }
  1414. '>}},
  1415.  {'$file': {'name': 'Scripts/Pipeline/Startup.lua',
  1416.             'payload': <Blob '-- Pipeline startup script
  1417. --
  1418. --   This is executed very early, and can really only be used to
  1419. --   configure settings.
  1420. --
  1421. --   The settings specified here will override any settings in the
  1422. --   legacy settings file pipeline.config
  1423. --
  1424.  
  1425. core = require "Frost.Core"
  1426.  
  1427. require "os"
  1428. require "vfs"
  1429.  
  1430. Environment = {}
  1431.  
  1432. local userName = os.getenv("USERNAME")
  1433.  
  1434. if userName then Environment.UserName = userName end
  1435.  
  1436. branchName = os.getenv("BRANCH_NAME")
  1437.  
  1438. if not branchName then
  1439.     error("Configuration error: BRANCH_NAME environment variable not set -- fix the .diceconfig file for this branch!")
  1440. end
  1441.  
  1442. -- This is a verification tag to make sure the script is in sync with runtime
  1443. -- whenever something is changed that requires changes to be present on both
  1444. -- the script end and the runtime end, this should be updated. The value is
  1445. -- just an arbitrary string and has no semantic relevance
  1446.  
  1447. local expectVerificationTag = "22062007"
  1448.  
  1449. if verificationTag ~= expectVerificationTag then
  1450.     error("verification tag mismatch! Most likely, your data/Scripts folder is not right for your build!")
  1451. end
  1452.  
  1453. -- Execute configuration and setup scripts
  1454.  
  1455. allScriptsRoot = "/Data/Scripts/"
  1456. scriptsRoot = allScriptsRoot .. "Pipeline/"
  1457.  
  1458. core.import(scriptsRoot .. "Configuration.lua")
  1459.  
  1460. '>}},
  1461.  {'$file': {'name': 'Scripts/Server/Master.lua',
  1462.             'payload': <Blob 'print("Loading scripts...")
  1463.  
  1464. serverSaveFilePath = "serverAdminSave.lua"
  1465.  
  1466. dofile("Scripts/Server/Startup.lua")
  1467. dofile("Scripts/Server/Shutdown.lua")
  1468. dofile("Scripts/Server/Server.lua")
  1469. dofile("Scripts/Server/Session.lua")
  1470.  
  1471. print("Done loading scripts.")'>}},
  1472.  {'$file': {'name': 'Scripts/Server/Server.lua',
  1473.             'payload': <Blob 'require "vfs"
  1474. require "os"
  1475.  
  1476. banList = {}
  1477. levelList = {}
  1478. currentLevelIndex = 0
  1479. maxLevelIndex = 0
  1480.  
  1481. function Server_LoadLevel()
  1482.  
  1483. --  print("Server_LoadLevel called")
  1484.  
  1485. end
  1486.  
  1487. function Server_UnloadLevel()
  1488.  
  1489. --  print("Server_UnloadLevel called")
  1490.  
  1491. end
  1492.  
  1493.  
  1494. function Server_LevelLoaded()
  1495.  
  1496. --  print("Server_LevelLoaded called")
  1497.  
  1498. end
  1499.  
  1500. function Server_LevelUnloaded()
  1501.  
  1502. --  print("Server_LevelUnloaded called")
  1503.  
  1504. end
  1505.  
  1506.  
  1507. ticks = 0
  1508.  
  1509. function Server_ScriptTick()
  1510.  
  1511. --  print("Server_ScriptTick called; ticks = " .. ticks)
  1512.  
  1513.  ticks = ticks + 1
  1514.  
  1515. end
  1516.  
  1517. function Server_PlayerBanned(onlineId, name)
  1518.  
  1519.  print("Server_PlayerBanned called: Player " .. onlineId .. " banned")
  1520.  
  1521.  banList[onlineId] = { ["time"]=os.time(), ["name"]=name }
  1522.  
  1523.  writeServerData()
  1524.  
  1525. end
  1526.  
  1527. function Server_UnbanPlayer(id)
  1528.  
  1529.  if (banList[id] ~= nil) then
  1530.    print("Player " .. id .. " unbanned")
  1531.    banList[id] = nil
  1532.    
  1533.    if (banList[id] ~= nil) then
  1534.       print("Player was not removed for some reason")
  1535.    end
  1536.    
  1537.    writeServerData()
  1538.  else
  1539.    print("No player with id " .. id .. " is banned")
  1540.  end
  1541.  
  1542. end
  1543.  
  1544. function Server_ListBans()
  1545.  
  1546.  --Server_PlayerBanned(174636, "gunnar")
  1547.  --Server_PlayerBanned(345636, "olle")
  1548.  
  1549.  for k,v in pairs(banList) do
  1550.    currentTime = os.date("%c", v.time)
  1551.    print("[" .. k .. "]: " .. v.name .. "," .. currentTime)
  1552.  end
  1553.  
  1554. end
  1555.  
  1556. function Server_LoadNextLevel()
  1557.  
  1558.  if (levelList[currentLevelIndex] ~= nil) then
  1559.     print("Loading level: " .. levelList[currentLevelIndex])
  1560.     loadNextLevel(levelList[currentLevelIndex])
  1561.     if (currentLevelIndex < maxLevelIndex) then
  1562.       currentLevelIndex = currentLevelIndex + 1
  1563.     else
  1564.       currentLevelIndex = 1
  1565.     end
  1566.  else
  1567.    print("Levelindex " .. currentLevelIndex .. " do not exist")
  1568.  end
  1569.  
  1570. end
  1571.  
  1572. function Server_AddLevel(levelName)
  1573.  
  1574.   maxLevelIndex = maxLevelIndex + 1
  1575.  levelList[maxLevelIndex] = levelName
  1576.  print("Added level \'" .. levelName .. "\' to level list")
  1577.  writeServerData()
  1578.  if (currentLevelIndex == 0) then
  1579.    currentLevelIndex = 1
  1580.  end
  1581.  
  1582. end
  1583.  
  1584. function Server_RemoveLevel(levelIndex)
  1585.  
  1586.  if (levelList[levelIndex] ~= nil) then
  1587.     print("Removing level \'" .. levelList[levelIndex] .. "\' at index: " .. levelIndex)
  1588.     --table.remove(levelList, levelIndex)
  1589.     for i=levelIndex,(maxLevelIndex-1),1 do
  1590.       levelList[i] = levelList[i+1]
  1591.     end
  1592.     table.remove(levelList, maxLevelIndex)
  1593.     maxLevelIndex = maxLevelIndex - 1
  1594.    
  1595.     writeServerData()
  1596.     if (currentLevelIndex > maxLevelIndex) then
  1597.      currentLevelIndex = maxLevelIndex
  1598.    end
  1599.  else
  1600.    print("No level at index: " .. levelIndex)
  1601.  end
  1602.  
  1603. end
  1604.  
  1605. function Server_ListLevels()
  1606.  
  1607.  for k,v in pairs(levelList) do
  1608.     if (k == currentLevelIndex) then
  1609.       print("[" .. k .. "]: " .. v .. " <<")
  1610.     else
  1611.       print("[" .. k .. "]: " .. v)
  1612.     end
  1613.  end
  1614.  
  1615. end
  1616.  
  1617. function writeServerData()
  1618.  
  1619.  local currentPlatform = string.lower(dice.getCurrentPlatformName())
  1620.  if (currentPlatform == "xenon" or currentPlatform == "ps3") then
  1621.    return
  1622.  end
  1623.  
  1624.  local f = vfs.open(serverSaveFilePath, "w")
  1625.  
  1626.  if not f then
  1627.     -- File not found
  1628.     return
  1629.  end
  1630.  
  1631.  serializedTable = tableToString(banList)
  1632.  
  1633.  f:write("banList = " .. serializedTable .. "\\n")
  1634.  
  1635.  --print("Wrote to file: banList = " .. serializedTable)
  1636.  
  1637.  serializedTable = tableToString(levelList)
  1638.  
  1639.  f:write("levelList = " .. serializedTable .. "\\n")
  1640.  
  1641.  --print("Wrote to file: levelList = " .. serializedTable)
  1642.  
  1643.  f:close()
  1644.  
  1645. end'>}},
  1646.  {'$file': {'name': 'Scripts/Server/Session.lua',
  1647.             'payload': <Blob 'require "vfs"
  1648. require "os"
  1649.  
  1650. function Session_PlayerJoined(id)
  1651.  
  1652.  print("Session_PlayerJoined called: Player " .. id .. " joined")
  1653.  
  1654. end
  1655.  
  1656. function Session_PlayerLeft(id)
  1657.  
  1658.  print("Session_PlayerLeft called: Player " .. id .. " left")
  1659.  
  1660. end
  1661.  
  1662. function Session_PlayerAuthenticated(id)
  1663.  
  1664.  print("Session_PlayerJoined called: Player " .. id .. " joined")
  1665.  
  1666.  if (banList[id] ~= nil) then
  1667.     print("Player " .. banList[id].name .. " is banned")
  1668.     kickPlayer(id)
  1669.  end
  1670.  
  1671. end'>}},
  1672.  {'$file': {'name': 'Scripts/Server/Shutdown.lua',
  1673.             'payload': <Blob 'function Shutdown()
  1674.  
  1675.  print("Shutdown called")
  1676.  
  1677. end
  1678. '>}},
  1679.  {'$file': {'name': 'Scripts/Server/Startup.lua',
  1680.             'payload': <Blob 'function Startup()
  1681.  
  1682.  print("Startup called")
  1683.  
  1684.  local currentPlatform = string.lower(dice.getCurrentPlatformName())
  1685.  if (currentPlatform == "xenon" or currentPlatform == "ps3") then
  1686.    return
  1687.  end
  1688.  
  1689.  Frost.Core.import(serverSaveFilePath, "Server Admin file", {silent=true})
  1690.  print("Loaded banList")
  1691.  for k,v in pairs(banList) do
  1692.     currentTime = os.date("%c", v.time)
  1693.    print("[" .. k .. "]: " .. v.name .. "," .. currentTime)
  1694.  end
  1695.  
  1696.  print("Loaded levelList")
  1697.  for k,v in pairs(levelList) do
  1698.     maxLevelIndex = maxLevelIndex + 1
  1699.    print("[" .. k .. "]: " .. v)
  1700.  end
  1701.  
  1702.  if (maxLevelIndex > 0) then
  1703.    currentLevelIndex = 1
  1704.  end
  1705.  
  1706. end
  1707. '>}},
  1708.  {'$file': {'name': 'Scripts/UserOptions/DefaultValues.lua',
  1709.             'payload': <Blob 'core = require "Frost.Core"
  1710. logging = require "Frost.Logging"
  1711.  
  1712. function makeConstant(t)
  1713.     return setmetatable({},
  1714.     {
  1715.         __index = function (_, n)
  1716.             if t[n] == nil then
  1717.                 log:error("Invalid constant member \'" .. tostring(n) .. "\'")
  1718.             end
  1719.             return t[n]
  1720.         end,
  1721.  
  1722.         __newindex = function (t, n, v)
  1723.             log:error("Attempting to change constant " .. tostring(n) .. " to " .. tostring(v))
  1724.         end
  1725.     })
  1726. end
  1727.  
  1728. local constants = {
  1729.     Quality = makeConstant({
  1730.         Autodetect = -1,
  1731.         Low = 0,
  1732.         Medium = 1,
  1733.         High = 2,
  1734.         Ultra = 3,
  1735.         Custom = 4,
  1736.        
  1737.         On = 1,
  1738.         Off = 0,
  1739.     }),
  1740.  
  1741.     AnisotropicFilter = makeConstant({
  1742.         X1 = 0,
  1743.         X2 = 1,
  1744.         X4 = 2,
  1745.         X8 = 3,
  1746.         X16 = 4,
  1747.     }),
  1748.  
  1749.     AntiAliasingDeferred = makeConstant({
  1750.         Off = 0,
  1751.         MSAA2X = 1,
  1752.         MSAA4X = 2,
  1753.     }),
  1754.  
  1755.     AntiAliasingPost = makeConstant({
  1756.         Off = 0,
  1757.         Low = 1,
  1758.         Medium = 2,
  1759.         High = 3,
  1760.     }),
  1761.  
  1762.     AmbientOcclusion = makeConstant({
  1763.         Off = 0,
  1764.         SSAO = 1,
  1765.         HBAO = 2,
  1766.     }),
  1767.    
  1768.     MotionBlur = makeConstant({
  1769.         Off = 0,
  1770.         On = 1,
  1771.     }),
  1772. }
  1773.  
  1774. for k, v in pairs(constants) do
  1775.     _G[k] = v
  1776. end
  1777.  
  1778. dofile("Scripts/UserOptions/HardwareProfiles.lua")
  1779. specs = hardwareSpecs[hardwareProfile]
  1780. log:info("hardwareProfile : " .. hardwareProfile)
  1781. cpuCount = specs[\'cpuCount\']
  1782. cpuQuality = specs[\'cpuQuality\'] + hardwareCpuBias
  1783. availableMemory = specs[\'availableMemory\']
  1784. adapterName = specs[\'adapterName\']
  1785. gpuQuality = specs[\'adapterQuality\'] + hardwareGpuBias
  1786. gpuCount = specs[\'gpuCount\']
  1787. availableGpuMemory = specs[\'availableGpuMemory\'] + hardwareGpuBias*256*1024*1024
  1788. deviceSettings = specs[\'deviceSettings\']
  1789.  
  1790. log:info("cpus : " .. cpuCount)
  1791. log:info("memory : " .. availableMemory)
  1792. log:info("adapter : " .. adapterName)
  1793. log:info("gpu quality : " .. gpuQuality)
  1794. log:info("gpuCount : " .. gpuCount)
  1795. log:info("gpuMemory : " .. availableGpuMemory)
  1796.  
  1797.  
  1798.  
  1799. settings = {}
  1800.  
  1801. local function applySettings(settings)
  1802.     core.parseKeyValueCfgString(settings, _G) end
  1803.  
  1804. defaultSettings = {
  1805.     Render = {
  1806.         [Quality.Autodetect] = { -- Auto detect, we fill this in when we\'re done autodetecting
  1807.         },
  1808.  
  1809.         [Quality.Low] = {
  1810.             TextureQuality = Quality.Low,
  1811.             ShadowQuality = Quality.Low,
  1812.             EffectsQuality = Quality.Low,
  1813.             MeshQuality = Quality.Low,
  1814.             TerrainQuality = Quality.Low,
  1815.             UndergrowthQuality = Quality.Low,
  1816.            
  1817.             AntiAliasingDeferred = AntiAliasingDeferred.Off,
  1818.             AntiAliasingPost = AntiAliasingPost.Off,
  1819.             AnisotropicFilter = AnisotropicFilter.X2,
  1820.             AmbientOcclusion = AmbientOcclusion.Off,
  1821.            
  1822.             MotionBlurEnabled = MotionBlur.Off,
  1823.         },
  1824.  
  1825.         [Quality.Medium] = {
  1826.             TextureQuality = Quality.Medium,
  1827.             ShadowQuality = Quality.Medium,
  1828.             EffectsQuality = Quality.Medium,
  1829.             MeshQuality = Quality.Medium,
  1830.             TerrainQuality = Quality.Medium,
  1831.             UndergrowthQuality = Quality.Medium,
  1832.                        
  1833.             AntiAliasingDeferred = AntiAliasingDeferred.Off,
  1834.             AntiAliasingPost = AntiAliasingPost.Medium,
  1835.             AnisotropicFilter = AnisotropicFilter.X4,
  1836.             AmbientOcclusion = AmbientOcclusion.SSAO,
  1837.            
  1838.             MotionBlurEnabled = MotionBlur.Off,
  1839.         },
  1840.  
  1841.         [Quality.High] = {
  1842.             TextureQuality = Quality.High,
  1843.             ShadowQuality = Quality.High,
  1844.             EffectsQuality = Quality.High,
  1845.             MeshQuality = Quality.High,
  1846.             TerrainQuality = Quality.High,
  1847.             UndergrowthQuality = Quality.High,
  1848.            
  1849.             AntiAliasingDeferred = AntiAliasingDeferred.Off,
  1850.             AntiAliasingPost = AntiAliasingPost.High,
  1851.             AnisotropicFilter = AnisotropicFilter.X16,
  1852.             AmbientOcclusion = AmbientOcclusion.HBAO,
  1853.            
  1854.             MotionBlurEnabled = MotionBlur.On,
  1855.         },
  1856.    
  1857.         [Quality.Ultra] = {
  1858.             TextureQuality = Quality.Ultra,
  1859.             ShadowQuality = Quality.Ultra,
  1860.             EffectsQuality = Quality.Ultra,
  1861.             MeshQuality = Quality.Ultra,
  1862.             TerrainQuality = Quality.Ultra,
  1863.             UndergrowthQuality = Quality.Ultra,
  1864.            
  1865.             AntiAliasingDeferred = AntiAliasingDeferred.MSAA4X,
  1866.             AntiAliasingPost = AntiAliasingPost.High,
  1867.             AnisotropicFilter = AnisotropicFilter.X16,
  1868.             AmbientOcclusion = AmbientOcclusion.HBAO,
  1869.            
  1870.             MotionBlurEnabled = MotionBlur.On,
  1871.         },
  1872.        
  1873.         [Quality.Custom] = {
  1874.             -- There is a bug in LuaOptionSetManager where it can not handle empty tables, so we add this dummy option here for now (no time to fix the parser atm)
  1875.             OverallGraphicsQuality = Quality.Custom + 1
  1876.         }
  1877.     }
  1878. }
  1879.  
  1880. settings["OverallGraphicsQuality"] = 0  -- Show as autodetect in UI
  1881. for setting, value in pairs(defaultSettings.Render[deviceSettings.baseQualityLevel]) do
  1882.     settings[setting] = value
  1883. end
  1884. for setting, value in pairs(deviceSettings.defaultSettings or {}) do
  1885.     settings[setting] = value
  1886. end
  1887.  
  1888. -- audio thread
  1889. if cpuCount < 4 then
  1890.     applySettings("Audio.AudioCoreThread 0")
  1891. else
  1892.     if (cpuCount < 6) then
  1893.         applySettings("Audio.AudioCoreThread 2")
  1894.     else
  1895.         applySettings("Audio.AudioCoreThread "..(cpuCount-1))
  1896.     end
  1897. end
  1898.  
  1899. -- audio
  1900. if cpuQuality < 4 then
  1901.    settings[\'AudioQuality\'] = 0.0
  1902. else
  1903.    settings[\'AudioQuality\'] = 1.0
  1904. end
  1905.  
  1906.  
  1907. -- physics
  1908. if cpuQuality < 4 then
  1909.    settings[\'PhysicsQuality\'] = 0.0
  1910. else
  1911.    settings[\'PhysicsQuality\'] = 1.0
  1912. end
  1913.  
  1914. -- animations
  1915. if cpuQuality < 4 then
  1916.    settings[\'AnimationQuality\'] = 0.0
  1917. else
  1918.    settings[\'AnimationQuality\'] = 1.0
  1919. end
  1920.  
  1921. -- textures
  1922. if adapterName == "Xenon" or adapterName == "PS3" then
  1923.    settings[\'TextureQuality\'] = Quality.Medium
  1924. elseif availableGpuMemory <= 512*1024*1024 then
  1925.    settings[\'TextureQuality\'] = Quality.Low
  1926. elseif availableGpuMemory <= 768*1024*1024 then
  1927.    settings[\'TextureQuality\'] = Quality.Medium
  1928. elseif availableGpuMemory <= 1024*1024*1024 then
  1929.     settings[\'TextureQuality\'] = Quality.High
  1930. else
  1931.    settings[\'TextureQuality\'] = Quality.Ultra
  1932. end
  1933.  
  1934.  
  1935. -- resolution
  1936. settings[\'ResolutionWidth\'] = defaultFullscreenWidth or 0
  1937. settings[\'ResolutionHeight\'] = defaultFullscreenHeight or 0
  1938. settings[\'FullscreenRefreshRate\'] = defaultFullscreenRefreshRate or 0.0
  1939. settings[\'FullscreenScreen\'] = 0
  1940. settings[\'FullscreenEnabled\'] = defaultFullscreenEnabled or 0
  1941. settings[\'VSyncEnabled\'] = defaultVSyncEnabled or 0
  1942.  
  1943. -- Test to override auto detected values (using lua to allow use of constants)
  1944. --core.readKeyValueCfg("/user/profile/settings/overrideAutodetect.cfg", settings) --will override autodetected values
  1945. function vfs_loadfile(filename)
  1946.     local f = vfs.open(filename, "r")
  1947.  
  1948.     if f == nil then
  1949.         return false, "File not found!"
  1950.     end
  1951.    
  1952.     function getNextChunk()
  1953.         return f:read(128)
  1954.     end
  1955.    
  1956.     return load(getNextChunk, filename)
  1957. end
  1958.  
  1959. local overrideFilename = "/user/profile/settings/overrideAutodetect.lua"
  1960. local executeAutoDetectOverride, e = vfs_loadfile(overrideFilename)
  1961.  
  1962. function bind(f, param)
  1963.     return function(...)
  1964.         f(param, ...)
  1965.     end
  1966. end
  1967.  
  1968. if executeAutoDetectOverride then
  1969.     overrideSettings = setmetatable({},
  1970.     {
  1971.         __index = constants,
  1972.         __newindex = bind(function(s, t, n, v)
  1973.             if s[n] == nil then
  1974.                 log:error("Trying to set unknown setting " .. n .. " to " .. tostring(n))
  1975.             elseif v == nil then
  1976.                 log:error("Trying to set setting " .. n .. " to nil")
  1977.             else
  1978.                 log:info("Overriding " .. n .. ": " .. tostring(v))
  1979.                 s[n] = v
  1980.             end
  1981.         end, settings)
  1982.     })
  1983.  
  1984.     setfenv(executeAutoDetectOverride, overrideSettings)
  1985.     local success, e = pcall(executeAutoDetectOverride);
  1986.     if not success then
  1987.         log:info("Failed to parse \'" .. overrideFilename .. "\' " .. e)
  1988.     end
  1989. else
  1990.     log:info("Override file error \'" .. overrideFilename .. "\': " .. e)
  1991. end
  1992.  
  1993. -- Last thing we do is to save the values we want for the autodetect setting
  1994. -- (use the same keys as used for the low settings)
  1995. for key, _ in pairs(defaultSettings.Render[Quality.Low]) do
  1996.     defaultSettings.Render[Quality.Autodetect][key] = settings[key]
  1997.     if settings[key] == nil then
  1998.         log:error("Setting " .. key .. " does not have an auto detected default value")
  1999.     end
  2000. end
  2001. '>}},
  2002.  {'$file': {'name': 'Scripts/UserOptions/HardwareProfiles.lua',
  2003.             'payload': <Blob 'function getGpuQuality(gpuName, gpuCount)
  2004.    if string.find(gpuName, "GeForce 8") or
  2005.       string.find(gpuName, "GeForce 9") then
  2006.        return 1
  2007.    elseif string.find(gpuName, "GeForce GTX 26") then
  2008.        return 2
  2009.    elseif string.find(gpuName, "GeForce GTX 2") or
  2010.            string.find(gpuName, "ATI Radeon HD 4870 X2") or
  2011.            string.find(gpuName, "ATI Radeon HD 5800 Series") or
  2012.            string.find(gpuName, "ATI Radeon HD 5900 Series") or
  2013.            string.find(gpuName, "AMD Radeon HD 68") or
  2014.            string.find(gpuName, "AMD Radeon HD 69") or
  2015.            string.find(gpuName, "GeForce GTX 4") or
  2016.            string.find(gpuName, "GeForce GTX 5") then
  2017.         if gpuCount > 1 then
  2018.             return 4
  2019.         else
  2020.             return 3
  2021.         end
  2022.    else
  2023.        return 1
  2024.    end
  2025. end
  2026.  
  2027. function getCpuQuality(cpuCount, cpuSpeed)
  2028.     return (cpuSpeed-1.2)*(cpuCount-1)
  2029. end
  2030.  
  2031. -- 2 cores, 3.0 gHz : 1.8
  2032. -- 2 cores, 3.6 gHz : 2.4
  2033. -- 4 cores, 2.0 gHz : 2.4
  2034. -- 4 cores, 3.2 gHz : 6
  2035. -- 8 cores, 1.8 gHz : 4.2
  2036. -- 8 cores, 3.2 gHz : 14!! awesome
  2037.  
  2038. vendorDB = {
  2039.     [0x1002] = dofile("Scripts/UserOptions/HardwareProfiles/ATI.lua"),
  2040.     [0x10DE] = dofile("Scripts/UserOptions/HardwareProfiles/nVidia.lua"),
  2041.     [0x8086] = dofile("Scripts/UserOptions/HardwareProfiles/Intel.lua")
  2042. }
  2043.  
  2044. -- Autodetect settings based on graphics card device id
  2045. function getDeviceSettings(vendorId, deviceId, adapterName)
  2046.     if adapterName == "Xenon" then
  2047.         return { baseQualityLevel = Quality.Medium, defaultSettings = {}, consoleOverrides = "" }
  2048.     elseif adapterName == "PS3" then
  2049.         return { baseQualityLevel = Quality.High, defaultSettings = {}, consoleOverrides = "" }
  2050.     else
  2051.         return (vendorDB[vendorId] and vendorDB[vendorId][deviceId]) or { baseQualityLevel = Quality.Medium, defaultSettings = {}, consoleOverrides = "" }
  2052.     end
  2053. end
  2054.  
  2055. hardwareSpecs = {
  2056.     [0] = {
  2057.         cpuCount = detectedCpuCount,
  2058.         cpuQuality = getCpuQuality(detectedCpuCount, detectedCpuFreq),
  2059.         availableMemory = detectedAvailableMemory,
  2060.         adapterName = detectedAdapterName,
  2061.         gpuCount = detectedGpuCount,
  2062.         adapterQuality = getGpuQuality(detectedAdapterName, detectedGpuCount),
  2063.         availableGpuMemory = detectedAvailableGpuMemory,
  2064.         deviceSettings = getDeviceSettings(detectedVendorId, detectedDeviceId, detectedAdapterName)
  2065.     },
  2066.  
  2067.     [1] = {
  2068.         cpuCount = detectedCpuCount,
  2069.         cpuQuality = getCpuQuality(2, 2.3),
  2070.         availableMemory = 512*1024*1024,
  2071.         adapterName = "Faked Low",
  2072.         gpuCount = 1,
  2073.         adapterQuality = 0,
  2074.         availableGpuMemory = 512*1024*1024,
  2075.         deviceSettings = { baseQualityLevel = Quality.Low, defaultSettings = {}, consoleOverrides = "" }
  2076.     },
  2077.  
  2078.     [2] = {
  2079.         cpuCount = detectedCpuCount,
  2080.         cpuQuality = getCpuQuality(2, 3),
  2081.         availableMemory = 1*1024*1024*1024,
  2082.         adapterName = "Faked Medium",
  2083.         gpuCount = 1,
  2084.         adapterQuality = 1,
  2085.         availableGpuMemory = 768*1024*1024,
  2086.         deviceSettings = { baseQualityLevel = Quality.Medium, defaultSettings = {}, consoleOverrides = "" }
  2087.     },
  2088.  
  2089.     [3] = {
  2090.         cpuCount = detectedCpuCount,
  2091.         cpuQuality = getCpuQuality(4, 3),
  2092.         availableMemory = 1.5*1024*1024*1024,
  2093.         adapterName = "Faked High",
  2094.         gpuCount = 1,
  2095.         adapterQuality = 3,
  2096.         availableGpuMemory = 1*1024*1024*1024,
  2097.         deviceSettings = { baseQualityLevel = Quality.High, defaultSettings = {}, consoleOverrides = "" }
  2098.     },
  2099.  
  2100.     [4] = {
  2101.         cpuCount = detectedCpuCount,
  2102.         cpuQuality = getCpuQuality(8, 3),
  2103.         availableMemory = 2*1024*1024*1024,
  2104.         adapterName = "Faked Ultra",
  2105.         gpuCount = 2,
  2106.         adapterQuality = 4,
  2107.         availableGpuMemory = 2*1024*1024*1024,
  2108.         deviceSettings = { baseQualityLevel = Quality.Ultra, defaultSettings = {}, consoleOverrides = "" }
  2109.     },
  2110. }
  2111.  
  2112. vendorDB = nil
  2113. '>}},
  2114.  {'$file': {'name': 'Scripts/UserOptions/HardwareProfiles/ATI.lua',
  2115.             'payload': <Blob '-- Settings database for ATI devices
  2116. return {
  2117. --  [0xHHHH] = { -- Example card
  2118. --      baseQualityLevel = Quality.Low,
  2119. --      defaultSettings = {
  2120. --          TextureQuality = Quality.Low,
  2121. --          ShadowQuality = Quality.Low,
  2122. --          EffectsQuality = Quality.Low,
  2123. --      },
  2124. --      consoleOverrides = [=[
  2125. --          WorldRender.MotionBlurEnable 0
  2126. --      ]=]
  2127. --  }
  2128.     [0x9598] = { baseQualityLevel = Quality.Low }, -- ATI All-in-Wonder HD
  2129.     [0x9519] = { baseQualityLevel = Quality.Low }, -- AMD FireStream 9170
  2130.     [0x9452] = { baseQualityLevel = Quality.Low }, -- AMD FireStream 9250
  2131.     [0x9450] = { baseQualityLevel = Quality.Low }, -- AMD FireStream 9270
  2132.     [0x688D] = { baseQualityLevel = Quality.Low }, -- AMD FireStream 9350
  2133.     [0x688C] = { baseQualityLevel = Quality.Low }, -- AMD FireStream 9370
  2134.     [0x94C7] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2350
  2135.     [0x94C3] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2350 Series
  2136.     [0x94C3] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2400 Series
  2137.     [0x94C1] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2400 Series
  2138.     [0x94CC] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2400 Series  
  2139.     [0x94C3] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2400 LE
  2140.     [0x94C9] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 2400
  2141.     [0x94C3] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2400
  2142.     [0x94C1] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2400
  2143.     [0x94C8] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 2400 XT
  2144.     [0x94C1] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2400 XT      
  2145.     [0x9589] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2600
  2146.     [0x9581] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 2600
  2147.     [0x9583] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 2600 XT
  2148.     [0x9588] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2600 XT
  2149.     [0x958A] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2600 X2 Series
  2150.     [0x9400] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2900
  2151.     [0x9405] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2900 GT
  2152.     [0x9400] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2900 XT
  2153.     [0x9400] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 2900 XT
  2154.     [0x9616] = { baseQualityLevel = Quality.Low }, -- ATI Radeon 3000 Graphics
  2155.     [0x9611] = { baseQualityLevel = Quality.Low }, -- ATI Radeon 3100 Graphics
  2156.     [0x9613] = { baseQualityLevel = Quality.Low }, -- ATI Radeon 3100 Graphics
  2157.     [0x9612] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3200 Graphics
  2158.     [0x9610] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3200 Graphics
  2159.     [0x9614] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3300 Graphics
  2160.     [0x95C0] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3400 Series
  2161.     [0x95C5] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3400 Series
  2162.     [0x95C4] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 3400 Series
  2163.     [0x94C3] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3410
  2164.     [0x95C2] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 3430
  2165.     [0x95C5] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3450
  2166.     [0x95C0] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3550
  2167.     [0x95C5] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3550
  2168.     [0x95C0] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3570
  2169.     [0x9589] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3600 Series    
  2170.     [0x9598] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3600 Series      
  2171.     [0x9591] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3600 Series
  2172.     [0x9581] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3600 Series  
  2173.     [0x9583] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3600 Series  
  2174.     [0x9589] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3610
  2175.     [0x9591] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 3650
  2176.     [0x9593] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 3670
  2177.     [0x9501] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3690  
  2178.     [0x9505] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3690  
  2179.     [0x9598] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3730
  2180.     [0x9598] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD3750
  2181.     [0x9501] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3800 Series
  2182.     [0x9505] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3800 Series
  2183.     [0x9507] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3830
  2184.     [0x9505] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3850
  2185.     [0x9504] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 3850
  2186.     [0x9513] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 3850 X2
  2187.     [0x9506] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 3850 X2
  2188.     [0x9501] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 3870
  2189.     [0x950F] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 3870 X2
  2190.     [0x9508] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 3870
  2191.     [0x9509] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 3870 X2
  2192.     [0x9713] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon 4100
  2193.     [0x9712] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 4200 Series
  2194.     [0x9710] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4200
  2195.     [0x95C5] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4230
  2196.     [0x9715] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4250      
  2197.     [0x95C5] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4250  
  2198.     [0x95C0] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4250  
  2199.     [0x9714] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4290
  2200.     [0x9552] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4300/4500 Series    
  2201.     [0x954F] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4300/4500 Series      
  2202.     [0x9553] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4300/4500 Series    
  2203.     [0x9555] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD4300/HD4500 series
  2204.     [0x9552] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 4300 Series
  2205.     [0x9555] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 4300/4500 Series
  2206.     [0x954F] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4450
  2207.     [0x9553] = { baseQualityLevel = Quality.Low }, -- ATI Mobility Radeon HD 4500/5100 Series
  2208.     [0x954F] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4520
  2209.     [0x954F] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4550
  2210.     [0x9540] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4550  
  2211.     [0x9555] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4550  
  2212.     [0x9598] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4570
  2213.     [0x9598] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4580
  2214.     [0x9540] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 4590
  2215.     [0x9490] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4600 Series
  2216.     [0x9498] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4600 Series
  2217.     [0x9598] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4610
  2218.     [0x9498] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4650
  2219.     [0x9480] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 4650
  2220.     [0x9498] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4670
  2221.     [0x9488] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 4670
  2222.     [0x94B3] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4770
  2223.     [0x9498] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4700
  2224.     [0x944E] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4700 Series
  2225.     [0x94B4] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4700 Series  
  2226.     [0x9490] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4710
  2227.     [0x9498] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4720
  2228.     [0x944E] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4730 Series
  2229.     [0x9505] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4730
  2230.     [0x9505] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4750  
  2231.     [0x9501] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4750  
  2232.     [0x94B3] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4770
  2233.     [0x94B5] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4770  
  2234.     [0x9440] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4800 Series        
  2235.     [0x9442] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4800 Series        
  2236.     [0x944C] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4800 Series          
  2237.     [0x9460] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4800 Series          
  2238.     [0x9462] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4800 Series            
  2239.     [0x944A] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4800 Series
  2240.     [0x944E] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4810 Series
  2241.     [0x944E] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4820
  2242.     [0x944C] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4830
  2243.     [0x94A0] = { baseQualityLevel = Quality.High }, -- ATI Mobility Radeon HD 4830
  2244.     [0x944A] = { baseQualityLevel = Quality.High }, -- ATI Mobility Radeon HD 4850
  2245.     [0x9442] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4850
  2246.     [0x9443] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 4850 X2
  2247.     [0x94A1] = { baseQualityLevel = Quality.High }, -- ATI Mobility Radeon HD 4860
  2248.     [0x945A] = { baseQualityLevel = Quality.High }, -- ATI Mobility Radeon HD 4870
  2249.     [0x9440] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4870  
  2250.     [0x9441] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 4870 X2
  2251.     [0x68E1] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5400 Series
  2252.     [0x68F9] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5400 Series
  2253.     [0x68E0] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 5400 Series
  2254.     [0x68E1] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 5400 Series
  2255.     [0x68E0] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 5400 Series
  2256.     [0x68E1] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 5430
  2257.     [0x68F9] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5450
  2258.     [0x68F9] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5470
  2259.     [0x68E1] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5470
  2260.     [0x68F9] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5490
  2261.     [0x68DA] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5500 Series
  2262.     [0x68D9] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5500 Series
  2263.     [0x68CA] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5500 Series
  2264.     [0x68F9] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5530
  2265.     [0x68D9] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5570
  2266.     [0x68C7] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 5570
  2267.     [0x68B9] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5600/5700
  2268.     [0x68D8] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5600 Series
  2269.     [0x68D9] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5630  
  2270.     [0x68DA] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5630
  2271.     [0x68C1] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 5650
  2272.     [0x68D8] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5670
  2273.     [0x68D8] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5690
  2274.     [0x68D8] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5730
  2275.     [0x68C0] = { baseQualityLevel = Quality.Medium }, -- ATI Mobility Radeon HD 5700 Series
  2276.     [0x68BE] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5700 Series
  2277.     [0x68B8] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 5700 Series
  2278.     [0x68C1] = { baseQualityLevel = Quality.High }, -- ATI Mobility Radeon HD 5750
  2279.     [0x689E] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 5800 Series
  2280.     [0x6899] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 5800 Series
  2281.     [0x6898] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 5800 Series
  2282.     [0x68A0] = { baseQualityLevel = Quality.High }, -- ATI Mobility Radeon HD 5800 Series
  2283.     [0x68A1] = { baseQualityLevel = Quality.High }, -- ATI Mobility Radeon HD 5800 Series
  2284.     [0x68A0] = { baseQualityLevel = Quality.High }, -- ATI Mobility Radeon HD 5800 Series
  2285.     [0x68A1] = { baseQualityLevel = Quality.High }, -- ATI Mobility Radeon HD 5800 Series
  2286.     [0x6899] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 5850X2
  2287.     [0x689C] = { baseQualityLevel = Quality.High }, -- ATI Radeon HD 5900 Series
  2288.     [0x9804] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6200 series Graphics
  2289.     [0x9805] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6200 series Graphics
  2290.     [0x68F9] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 6230
  2291.     [0x68E1] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 6230
  2292.     [0x68F9] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 6250
  2293.     [0x68E1] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 6250
  2294.     [0x9802] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6250
  2295.     [0x68F9] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 6290
  2296.     [0x9802] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6300 series Graphics
  2297.     [0x9803] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6300 series Graphics
  2298.     [0x68E5] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6300M Series
  2299.     [0x68E4] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6300M Series
  2300.     [0x9802] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6310
  2301.     [0x68F9] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6350
  2302.     [0x68E4] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6350M
  2303.     [0x68E5] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6330M
  2304.     [0x68E4] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6370M
  2305.     [0x68DA] = { baseQualityLevel = Quality.Low }, -- ATI Radeon HD 6390
  2306.     [0x6770] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6400 Series
  2307.     [0x6760] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6400M Series
  2308.     [0x6779] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6400 Series
  2309.     [0x6760] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6400M Series
  2310.     [0x6761] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6430M
  2311.     [0x6761] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6430M
  2312.     [0x6779] = { baseQualityLevel = Quality.Low }, -- AMD Radeon HD 6450
  2313.     [0x68C1] = { baseQualityLevel = Quality.Medium }, -- AMD Radeon HD 6500M/5600/5700 Series
  2314.     [0x6759] = { baseQualityLevel = Quality.Medium }, -- AMD Radeon HD 6500 Series
  2315.     [0x68C1] = { baseQualityLevel = Quality.Medium }, -- AMD Radeon HD 6500M Series
  2316.     [0x68D9] = { baseQualityLevel = Quality.Medium }, -- ATI Radeon HD 6510
  2317.     [0x68C0] = { baseQualityLevel = Quality.Medium }, -- AMD Radeon HD 6570M
  2318.     [0x68C0] = { baseQualityLevel = Quality.Medium }, -- AMD Radeon HD 6570M/5700 Series
  2319.     [0x6750] = { baseQualityLevel = Quality.Medium }, -- AMD Radeon HD 6600A Series
  2320.     [0x6758] = { baseQualityLevel = Quality.Medium }, -- AMD Radeon HD 6600 Series
  2321.     [0x6741] = { baseQualityLevel = Quality.Medium }, -- AMD Radeon 6600M and 6700M Series
  2322.     [0x6742] = { baseQualityLevel = Quality.Medium }, -- AMD Radeon HD 6625M Graphics
  2323.     [0x6740] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6700M Series
  2324.     [0x68BA] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6700 Series
  2325.     [0x68BF] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6700 Series  
  2326.     [0x673E] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6700 Series  
  2327.     [0x68B8] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6700 Series
  2328.     [0x6741] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6700M Series
  2329.     [0x68BE] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6750
  2330.     [0x68BF] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6750
  2331.     [0x68BA] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6770
  2332.     [0x6740] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6770M
  2333.     [0x68B8] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6770
  2334.     [0x68A8] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6800M Series
  2335.     [0x6738] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6800 Series
  2336.     [0x6739] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6800 Series
  2337.     [0x673E] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6800 Series
  2338.     [0x689B] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6800 Series  
  2339.     [0x68A8] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6800M Series
  2340.     [0x6720] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6900M Series
  2341.     [0x6718] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6900 Series
  2342.     [0x671F] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6900 Series  
  2343.     [0x671D] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6990
  2344.     [0x6718] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6900 Series
  2345.     [0x6720] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6900M Series
  2346.     [0x6719] = { baseQualityLevel = Quality.High }, -- AMD Radeon HD 6900 Series
  2347. }
  2348. '>}},
  2349.  {'$file': {'name': 'Scripts/UserOptions/HardwareProfiles/Intel.lua',
  2350.             'payload': <Blob '-- Settings database for Intel devices
  2351. return {
  2352. --  [0xHHHH] = { -- Example card
  2353. --      baseQualityLevel = Quality.High,
  2354. --      defaultSettings = {
  2355. --          TextureQuality = Quality.Low,
  2356. --          ShadowQuality = Quality.Medium,
  2357. --          EffectsQuality = Quality.High,
  2358. --      },
  2359. --      consoleOverrides = [=[
  2360. --          WorldRender.MotionBlurEnable 0
  2361. --      ]=]
  2362. --  }
  2363. }
  2364. '>}},
  2365.  {'$file': {'name': 'Scripts/UserOptions/HardwareProfiles/nVidia.lua',
  2366.             'payload': <Blob '-- Settings database for nVidia devices
  2367. return {
  2368. --  [0xHHHH] = { -- Example card
  2369. --      baseQualityLevel = Quality.Medium,
  2370. --      defaultSettings = {
  2371. --          TextureQuality = Quality.Low,
  2372. --          ShadowQuality = Quality.Medium,
  2373. --          EffectsQuality = Quality.Medium,
  2374. --      },
  2375. --      consoleOverrides = [=[
  2376. --          WorldRender.MotionBlurEnable 0
  2377. --      ]=]
  2378. --  }
  2379.     [0x004E] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 4000
  2380.     [0x009D] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 4500
  2381.     [0x00CD] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 3450/4000 SDI
  2382.     [0x00CE] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 1400
  2383.     [0x00F8] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 3400/4400
  2384.     [0x014A] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 440
  2385.     [0x014C] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 540M
  2386.     [0x014D] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 550
  2387.     [0x014E] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 540
  2388.     [0x0165] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 285
  2389.     [0x0191] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8800 GTX
  2390.     [0x0193] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8800 GTS
  2391.     [0x0194] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8800 Ultra
  2392.     [0x0197] = { baseQualityLevel = Quality.Low }, -- NVIDIA Tesla C870
  2393.     [0x019D] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 5600
  2394.     [0x019E] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 4600
  2395.     [0x01DB] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 120M
  2396.     [0x01DE] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 350
  2397.     [0x0245] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 210S / NVIDIA GeForce 6150LE
  2398.     [0x029C] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 5500
  2399.     [0x029D] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 3500
  2400.     [0x029E] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 1500
  2401.     [0x029F] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 4500 X2
  2402.     [0x039C] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 560M
  2403.     [0x039E] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 560
  2404.     [0x0400] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8600 GTS
  2405.     [0x0401] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8600 GT
  2406.     [0x0402] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8600 GT
  2407.     [0x0403] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8600 GS
  2408.     [0x0404] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8400 GS
  2409.     [0x0405] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9500M GS
  2410.     [0x0406] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8300 GS
  2411.     [0x0407] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8600M GT
  2412.     [0x0408] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9650M GS
  2413.     [0x0409] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8700M GT
  2414.     [0x040A] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 370
  2415.     [0x040B] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 320M
  2416.     [0x040C] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 570M
  2417.     [0x040D] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 1600M
  2418.     [0x040E] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 570
  2419.     [0x040F] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 1700
  2420.     [0x0410] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 330
  2421.     [0x0420] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8400 SE
  2422.     [0x0421] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8500 GT
  2423.     [0x0422] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8400 GS
  2424.     [0x0423] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8300 GS
  2425.     [0x0424] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8400 GS
  2426.     [0x0425] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8600M GS
  2427.     [0x0426] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8400M GT
  2428.     [0x0427] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8400M GS
  2429.     [0x0428] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8400M G
  2430.     [0x0429] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 140M
  2431.     [0x042A] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 130M
  2432.     [0x042B] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 135M
  2433.     [0x042C] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400 GT
  2434.     [0x042D] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 360M
  2435.     [0x042E] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9300M G
  2436.     [0x042F] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 290
  2437.     [0x053A] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 7050 PV / NVIDIA nForce 630a
  2438.     [0x053B] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 7050 PV / NVIDIA nForce 630a
  2439.     [0x053E] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 7025 / NVIDIA nForce 630a
  2440.     [0x05E0] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 295
  2441.     [0x05E1] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTX 280
  2442.     [0x05E2] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTX 260
  2443.     [0x05E3] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTX 285
  2444.     [0x05E6] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTX 275
  2445.     [0x05E7] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Tesla C1060
  2446.     [0x05EA] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTX 260
  2447.     [0x05EB] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 295
  2448.     [0x05F9] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro CX
  2449.     [0x05FD] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro FX 5800
  2450.     [0x05FE] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro FX 4800
  2451.     [0x05FF] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro FX 3800
  2452.     [0x0600] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8800 GTS 512
  2453.     [0x0601] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800 GT
  2454.     [0x0602] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8800 GT
  2455.     [0x0603] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 230
  2456.     [0x0604] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800 GX2
  2457.     [0x0605] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800 GT
  2458.     [0x0606] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8800 GS
  2459.     [0x0607] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GTS 240
  2460.     [0x0608] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800M GTX
  2461.     [0x0609] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8800M GTS
  2462.     [0x060A] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GTX 280M
  2463.     [0x060B] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800M GT
  2464.     [0x060C] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8800M GTX
  2465.     [0x060F] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GTX 285M
  2466.     [0x0610] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600 GSO
  2467.     [0x0611] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8800 GT
  2468.     [0x0612] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800 GTX/9800 GTX+
  2469.     [0x0613] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800 GTX+
  2470.     [0x0614] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800 GT
  2471.     [0x0615] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTS 250
  2472.     [0x0617] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800M GTX
  2473.     [0x0618] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GTX 260M
  2474.     [0x0619] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 4700 X2
  2475.     [0x061A] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 3700
  2476.     [0x061B] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro VX 200
  2477.     [0x061C] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 3600M
  2478.     [0x061D] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 2800M
  2479.     [0x061E] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 3700M
  2480.     [0x061F] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 3800M
  2481.     [0x0621] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 230
  2482.     [0x0622] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600 GT
  2483.     [0x0623] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600 GS
  2484.     [0x0625] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600 GSO 512
  2485.     [0x0626] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 130
  2486.     [0x0627] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 140
  2487.     [0x0628] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800M GTS
  2488.     [0x062A] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9700M GTS
  2489.     [0x062B] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800M GS
  2490.     [0x062C] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9800M GTS    
  2491.     [0x062D] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600 GT
  2492.     [0x062E] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600 GT
  2493.     [0x0631] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GTS 160M
  2494.     [0x0635] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600 GSO
  2495.     [0x0637] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600 GT
  2496.     [0x0638] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 1800
  2497.     [0x063A] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 2700M
  2498.     [0x0640] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9500 GT
  2499.     [0x0641] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400 GT
  2500.     [0x0643] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9500 GT
  2501.     [0x0644] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9500 GS
  2502.     [0x0645] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9500 GS
  2503.     [0x0646] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 120
  2504.     [0x0647] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600M GT
  2505.     [0x0648] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600M GS
  2506.     [0x0649] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9600M GT
  2507.     [0x064A] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9700M GT
  2508.     [0x064C] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9650M GT
  2509.     [0x0651] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G 110M
  2510.     [0x0652] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 130M
  2511.     [0x0653] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 120M
  2512.     [0x0654] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 220M
  2513.     [0x0655] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 120
  2514.     [0x0656] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 120
  2515.     [0x0658] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 380
  2516.     [0x0659] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 580
  2517.     [0x065A] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 1700M
  2518.     [0x065B] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400 GT
  2519.     [0x065C] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 770M
  2520.     [0x065F] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G210
  2521.     [0x06C0] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 480
  2522.     [0x06C4] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 465
  2523.     [0x06CA] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 480M
  2524.     [0x06CD] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 470
  2525.     [0x06D1] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Tesla C2050 / C2070
  2526.     [0x06D2] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Tesla M2070
  2527.     [0x06D8] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 6000
  2528.     [0x06D9] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 5000
  2529.     [0x06DA] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 5000M
  2530.     [0x06DC] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 6000
  2531.     [0x06DD] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 4000
  2532.     [0x06DE] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Tesla T20 Processor
  2533.     [0x06DF] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Tesla M2070-Q
  2534.     [0x06E0] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9300 GE
  2535.     [0x06E1] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9300 GS
  2536.     [0x06E2] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8400
  2537.     [0x06E3] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8400 SE
  2538.     [0x06E4] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8400 GS
  2539.     [0x06E6] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G100
  2540.     [0x06E7] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9300 SE
  2541.     [0x06E8] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9200M GS
  2542.     [0x06E9] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9300M GS
  2543.     [0x06EA] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 150M
  2544.     [0x06EB] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 160M
  2545.     [0x06EC] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G 105M
  2546.     [0x06EF] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G 103M
  2547.     [0x06F1] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G105M
  2548.     [0x06F8] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 420
  2549.     [0x06F9] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 370 LP
  2550.     [0x06FA] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 450
  2551.     [0x06FB] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 370M
  2552.     [0x06FD] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro NVS 295
  2553.     [0x06FF] = { baseQualityLevel = Quality.Low }, -- NVIDIA HICx16 + Graphics
  2554.     [0x07E0] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 7150 / NVIDIA nForce 630i
  2555.     [0x07E1] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 7100 / NVIDIA nForce 630i
  2556.     [0x07E2] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 7050 / NVIDIA nForce 630i
  2557.     [0x07E3] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 7050 / NVIDIA nForce 610i
  2558.     [0x07E5] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 7050 / NVIDIA nForce 620i
  2559.     [0x0840] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8200M
  2560.     [0x0844] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9100M G
  2561.     [0x0845] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8200M G
  2562.     [0x0846] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9200
  2563.     [0x0847] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9100
  2564.     [0x0848] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8300
  2565.     [0x0849] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8200
  2566.     [0x084A] = { baseQualityLevel = Quality.Low }, -- NVIDIA nForce 730a
  2567.     [0x084B] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9200
  2568.     [0x084C] = { baseQualityLevel = Quality.Low }, -- NVIDIA nForce 980a/780a SLI
  2569.     [0x084D] = { baseQualityLevel = Quality.Low }, -- NVIDIA nForce 750a SLI
  2570.     [0x084F] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8100 / nForce 720a
  2571.     [0x0860] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400
  2572.     [0x0861] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400
  2573.     [0x0862] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400M G
  2574.     [0x0863] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400M
  2575.     [0x0864] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9300
  2576.     [0x0865] = { baseQualityLevel = Quality.Low }, -- NVIDIA ION
  2577.     [0x0866] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400M G  
  2578.     [0x0867] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400
  2579.     [0x0868] = { baseQualityLevel = Quality.Low }, -- NVIDIA nForce 760i SLI
  2580.     [0x0869] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400  
  2581.     [0x086A] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400
  2582.     [0x086C] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9300 / nForce 730i
  2583.     [0x086D] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9200
  2584.     [0x086E] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9100M G
  2585.     [0x086F] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 8200M G
  2586.     [0x0870] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400M        
  2587.     [0x0871] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9200
  2588.     [0x0872] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G102M
  2589.     [0x0873] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G102M  
  2590.     [0x0874] = { baseQualityLevel = Quality.Low }, -- NVIDIA ION
  2591.     [0x0876] = { baseQualityLevel = Quality.Low }, -- NVIDIA ION
  2592.     [0x087A] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 9400
  2593.     [0x087D] = { baseQualityLevel = Quality.Low }, -- NVIDIA ION
  2594.     [0x087E] = { baseQualityLevel = Quality.Low }, -- NVIDIA ION LE
  2595.     [0x087F] = { baseQualityLevel = Quality.Low }, -- NVIDIA ION LE
  2596.     [0x08A0] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 320M
  2597.     [0x08A4] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 320M    
  2598.     [0x0A20] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 220
  2599.     [0x0A22] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 315
  2600.     [0x0A23] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 210
  2601.     [0x0A26] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 405
  2602.     [0x0A27] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 405
  2603.     [0x0A28] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 230M
  2604.     [0x0A29] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 330M
  2605.     [0x0A2A] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 230M
  2606.     [0x0A2B] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 330M
  2607.     [0x0A2C] = { baseQualityLevel = Quality.Low }, -- NVIDIA NVS 5100M
  2608.     [0x0A2D] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 320M  
  2609.     [0x0A34] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 240M
  2610.     [0x0A35] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 325M
  2611.     [0x0A38] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro 400
  2612.     [0x0A3C] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 880M
  2613.     [0x0A60] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G210
  2614.     [0x0A62] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 205
  2615.     [0x0A63] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 310
  2616.     [0x0A64] = { baseQualityLevel = Quality.Low }, -- NVIDIA ION
  2617.     [0x0A65] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 210
  2618.     [0x0A66] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 310
  2619.     [0x0A67] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 315
  2620.     [0x0A68] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G105M
  2621.     [0x0A69] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G105M
  2622.     [0x0A6A] = { baseQualityLevel = Quality.Low }, -- NVIDIA NVS 2100M
  2623.     [0x0A6C] = { baseQualityLevel = Quality.Low }, -- NVIDIA NVS 3100M
  2624.     [0x0A6E] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 305M
  2625.     [0x0A6F] = { baseQualityLevel = Quality.Low }, -- NVIDIA ION
  2626.     [0x0A70] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 310M
  2627.     [0x0A71] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 305M  
  2628.     [0x0A72] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 310M
  2629.     [0x0A73] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 305M
  2630.     [0x0A74] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce G210M
  2631.     [0x0A75] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 310M
  2632.     [0x0A76] = { baseQualityLevel = Quality.Low }, -- NVIDIA ION  
  2633.     [0x0A78] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 380 LP
  2634.     [0x0A7A] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce 315M
  2635.     [0x0A7C] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 380M
  2636.     [0x0CA0] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 330
  2637.     [0x0CA2] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 320
  2638.     [0x0CA3] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 240
  2639.     [0x0CA4] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 340
  2640.     [0x0CA5] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 220
  2641.     [0x0CA7] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 330
  2642.     [0x0CA9] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GTS 250M
  2643.     [0x0CAC] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 220
  2644.     [0x0CAF] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GT 335M
  2645.     [0x0CB0] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GTS 350M
  2646.     [0x0CB1] = { baseQualityLevel = Quality.Low }, -- NVIDIA GeForce GTS 360M
  2647.     [0x0CBC] = { baseQualityLevel = Quality.Low }, -- NVIDIA Quadro FX 1800M
  2648.     [0x0DC0] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 440
  2649.     [0x0DC4] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTS 450
  2650.     [0x0DC5] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTS 450
  2651.     [0x0DC6] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTS 450
  2652.     [0x0DCD] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 555M
  2653.     [0x0DCE] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 555M
  2654.     [0x0DD1] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTX 460M
  2655.     [0x0DD2] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 445M
  2656.     [0x0DD3] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 435M
  2657.     [0x0DD6] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GT 550M
  2658.     [0x0DD8] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 2000
  2659.     [0x0DDA] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 2000M
  2660.     [0x0DE0] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 440
  2661.     [0x0DE1] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 430
  2662.     [0x0DE2] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 420
  2663.     [0x0DE5] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 530
  2664.     [0x0DEC] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 525M
  2665.     [0x0DED] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 520M
  2666.     [0x0DEE] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 415M
  2667.     [0x0DF0] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 425M
  2668.     [0x0DF1] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 420M
  2669.     [0x0DF2] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 435M
  2670.     [0x0DF3] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 420M  
  2671.     [0x0DF4] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 540M
  2672.     [0x0DF5] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 525M
  2673.     [0x0DF6] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 550M
  2674.     [0x0DF7] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 520M
  2675.     [0x0DF8] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 600
  2676.     [0x0DFA] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 1000M
  2677.     [0x0E22] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 460
  2678.     [0x0E23] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 460 SE
  2679.     [0x0E24] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 460
  2680.     [0x0E30] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 470M
  2681.     [0x0E31] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 485M
  2682.     [0x0E3A] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 3000M
  2683.     [0x0E3B] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 4000M
  2684.     [0x1040] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 520
  2685.     [0x1050] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 520M  
  2686.     [0x1054] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce 410M
  2687.     [0x1056] = { baseQualityLevel = Quality.Medium }, -- NVIDIA NVS 4200M
  2688.     [0x1057] = { baseQualityLevel = Quality.Medium }, -- NVIDIA NVS 4200M  
  2689.     [0x1080] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 580
  2690.     [0x1081] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 570
  2691.     [0x1082] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 560 Ti
  2692.     [0x1084] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 560
  2693.     [0x1086] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 570
  2694.     [0x1088] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 590
  2695.     [0x1089] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 580
  2696.     [0x1091] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Tesla M2090
  2697.     [0x109A] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 5010M
  2698.     [0x109B] = { baseQualityLevel = Quality.Medium }, -- NVIDIA Quadro 7000
  2699.     [0x10C0] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce 9300 GS
  2700.     [0x10C3] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce 8400GS
  2701.     [0x10C5] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce 405
  2702.     [0x10D8] = { baseQualityLevel = Quality.Medium }, -- NVIDIA NVS 300
  2703.     [0x1200] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 560 Ti
  2704.     [0x1201] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 560
  2705.     [0x1241] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 545
  2706.     [0x1243] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GT 545
  2707.     [0x1244] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 550 Ti
  2708.     [0x1245] = { baseQualityLevel = Quality.Medium }, -- NVIDIA GeForce GTS 450
  2709.     [0x1251] = { baseQualityLevel = Quality.High }, -- NVIDIA GeForce GTX 560M
  2710. }
  2711. '>}},
  2712.  {'$file': {'name': 'Scripts/UserOptions/Options.lua',
  2713.             'payload': <Blob 'core = require "Frost.Core"
  2714. logging = require "Frost.Logging"
  2715.  
  2716. levelName = currentGameLevel or cmdLineOption(\'level\') or Game.Level
  2717. if levelName then
  2718.     -- Level names without slashes are assumed to be shorthand for
  2719.     -- Levels/name/name to go with Venice\'s epic level naming convention
  2720.     if not string.find(levelName, "/") then
  2721.         levelName = "Levels/" .. levelName .. "/" .. levelName
  2722.     end
  2723.  
  2724.     Game.FastStartupEnable = true
  2725.     if not Game.Level then
  2726.         Game.Level = levelName
  2727.     end
  2728. end
  2729.  
  2730.  
  2731. function applySettings(settings)
  2732.     core.parseKeyValueCfgString(settings, _G)
  2733. end
  2734.  
  2735. function applyQualitySettings(name, qualityMap)
  2736.     local quality = settings[name]
  2737.     if quality == nil then
  2738.         log:error("Invalid setting \'" .. name .. "\'")
  2739.         return
  2740.     end
  2741.    
  2742.     local consoleCommands = qualityMap[quality]
  2743.     if consoleCommands == nil then
  2744.         log:error("Could not find console settings for \'" .. name .. "\' with quality " .. quality)
  2745.     else
  2746.         log:info("setting \'" .. name .. "\': " .. quality)
  2747.         applySettings(consoleCommands)
  2748.     end
  2749. end
  2750.  
  2751. dofile("Scripts/UserOptions/Options/Graphics.lua")
  2752. dofile("Scripts/UserOptions/Options/Physics.lua")
  2753. dofile("Scripts/UserOptions/Options/Sound.lua")
  2754. dofile("Scripts/UserOptions/Options/Animations.lua")
  2755.  
  2756. applySettings(deviceSettings.consoleOverrides or "")
  2757.  
  2758. if not cmdLineOption(\'noLocalCfg\', false) then
  2759.     core.readKeyValueCfg("/local/local.cfg", _G)
  2760. end
  2761.  
  2762. if allowCommandlineSettings then
  2763.     for index,option in ipairs(commandLine) do
  2764.         local table,member = string.match(option, "^%-(%w+)%.(%w+)")
  2765.  
  2766.         if table and member then
  2767.             local value = commandLine[index+1]
  2768.             if not _G[table] then _G[table] = {} end
  2769.             _G[table][member] = value
  2770.         else
  2771.             local varName = string.match(option, "^%-([%w-]+)")
  2772.             if varName then
  2773.                 local value = commandLine[index+1]
  2774.                 if value then
  2775.                     _G[varName] = value
  2776.                 end
  2777.             end
  2778.         end
  2779.     end
  2780. end
  2781.  
  2782. '>}},
  2783.  {'$file': {'name': 'Scripts/UserOptions/Options/Animations.lua',
  2784.             'payload': <Blob 'local quality = settings[\'AnimationQuality\']
  2785. log:info("setting animation quality : "..quality)
  2786.  
  2787. -- IMPORTANT:
  2788. -- GameAnimation.TemporalLoddingFirstDistance *must* be slighly larger than the
  2789. -- distance where IK is disabled in the animation project (EnableFootplanting_ESIG)
  2790. -- for all quality levels.
  2791.  
  2792. if(quality > 0.8) then
  2793.     applySettings([=[
  2794.  
  2795.     GameAnimation.TemporalLoddingFirstDistance 31.0
  2796.     GameAnimation.TemporalLoddingSecondDistance 40.0
  2797.     GameAnimation.TemporalLoddingThirdDistance 60.0
  2798.     GameAnimation.TemporalLoddingFourthDistance 90.0
  2799.     GameAnimation.TemporalLoddingFifthDistance 120.0
  2800.     GameAnimation.TemporalLoddingSixthDistance 208.0
  2801.  
  2802.     GameAnimation.TemporalLoddingFirstDeltaTime = 0.02
  2803.     GameAnimation.TemporalLoddingSecondDeltaTime = 0.04
  2804.     GameAnimation.TemporalLoddingThirdDeltaTime = 0.06
  2805.     GameAnimation.TemporalLoddingFourthDeltaTime = 0.08
  2806.     GameAnimation.TemporalLoddingFifthDeltaTime = 0.10
  2807.     GameAnimation.TemporalLoddingSixthDeltaTime = 0.12
  2808.  
  2809.  ]=])
  2810. else
  2811.     applySettings([=[
  2812.  
  2813.     GameAnimation.TemporalLoddingFirstDistance 31.0
  2814.     GameAnimation.TemporalLoddingSecondDistance 40.0
  2815.     GameAnimation.TemporalLoddingThirdDistance 50.0
  2816.     GameAnimation.TemporalLoddingFourthDistance 90.0
  2817.     GameAnimation.TemporalLoddingFifthDistance 120.0
  2818.     GameAnimation.TemporalLoddingSixthDistance 208.0
  2819.  
  2820.     GameAnimation.TemporalLoddingFirstDeltaTime = 0.02
  2821.     GameAnimation.TemporalLoddingSecondDeltaTime = 0.04
  2822.     GameAnimation.TemporalLoddingThirdDeltaTime = 0.06
  2823.     GameAnimation.TemporalLoddingFourthDeltaTime = 0.08
  2824.     GameAnimation.TemporalLoddingFifthDeltaTime = 0.10
  2825.     GameAnimation.TemporalLoddingSixthDeltaTime = 0.12
  2826.  
  2827.  ]=])
  2828. end
  2829. '>}},
  2830.  {'$file': {'name': 'Scripts/UserOptions/Options/Graphics.lua',
  2831.             'payload': <Blob '------ Common settings for all quality levels
  2832. applySettings([=[
  2833. ]=])
  2834.  
  2835.  
  2836. ------ Texture Quality
  2837. applyQualitySettings(\'TextureQuality\', {
  2838.     -- up to 512 mb
  2839.     [Quality.Low]=[=[
  2840.         Texture.SkipMipmapCount 2
  2841.         TextureStreaming.PoolSize 150000
  2842.         TerrainStreaming.HeightfieldAtlasSampleCountXFactor 1
  2843.         TerrainStreaming.HeightfieldAtlasSampleCountYFactor 1
  2844.         TerrainStreaming.MaskAtlasSampleCountXFactor 1
  2845.         TerrainStreaming.MaskAtlasSampleCountYFactor 1
  2846.         TerrainStreaming.ColorAtlasSampleCountXFactor 1
  2847.         TerrainStreaming.ColorAtlasSampleCountYFactor 1
  2848.         VisualTerrain.TextureAtlasSampleCountXFactor 1
  2849.         VisualTerrain.TextureAtlasSampleCountYFactor 1
  2850.         VisualTerrain.TextureRenderJobCount 1
  2851.         VisualTerrain.TextureRenderJobsLaunchedPerFrameCountMax 1
  2852.         VisualTerrain.Decal3dFarDrawDistanceScaleFactor 1.0
  2853.     ]=],
  2854.  
  2855.     -- up to 768 mb
  2856.     [Quality.Medium]=[=[
  2857.         Texture.SkipMipmapCount 1
  2858.         TextureStreaming.PoolSize 200000
  2859.         TerrainStreaming.HeightfieldAtlasSampleCountXFactor 1
  2860.         TerrainStreaming.HeightfieldAtlasSampleCountYFactor 2
  2861.         TerrainStreaming.MaskAtlasSampleCountXFactor 1
  2862.         TerrainStreaming.MaskAtlasSampleCountYFactor 2
  2863.         TerrainStreaming.ColorAtlasSampleCountXFactor 1
  2864.         TerrainStreaming.ColorAtlasSampleCountYFactor 2
  2865.         VisualTerrain.TextureAtlasSampleCountXFactor 1
  2866.         VisualTerrain.TextureAtlasSampleCountYFactor 2
  2867.         VisualTerrain.TextureRenderJobCount 2
  2868.         VisualTerrain.TextureRenderJobsLaunchedPerFrameCountMax 2
  2869.         VisualTerrain.Decal3dFarDrawDistanceScaleFactor 1.2
  2870.     ]=],
  2871.    
  2872.     -- up to 1G
  2873.     [Quality.High]=[=[
  2874.         Texture.SkipMipmapCount 0
  2875.         TextureStreaming.PoolSize 300000
  2876.         TerrainStreaming.HeightfieldAtlasSampleCountXFactor 1
  2877.         TerrainStreaming.HeightfieldAtlasSampleCountYFactor 2
  2878.         TerrainStreaming.MaskAtlasSampleCountXFactor 1
  2879.         TerrainStreaming.MaskAtlasSampleCountYFactor 2
  2880.         TerrainStreaming.ColorAtlasSampleCountXFactor 1
  2881.         TerrainStreaming.ColorAtlasSampleCountYFactor 2
  2882.         VisualTerrain.TextureAtlasSampleCountXFactor 1
  2883.         VisualTerrain.TextureAtlasSampleCountYFactor 2
  2884.         VisualTerrain.TextureRenderJobCount 4
  2885.         VisualTerrain.TextureRenderJobsLaunchedPerFrameCountMax 4
  2886.         VisualTerrain.Decal3dFarDrawDistanceScaleFactor 1.7
  2887.     ]=],
  2888.  
  2889.     -- 1 Gb or more
  2890.     [Quality.Ultra]=[=[
  2891.         Texture.SkipMipmapCount 0
  2892.         TextureStreaming.PoolSize 500000
  2893.         TerrainStreaming.HeightfieldAtlasSampleCountXFactor 2
  2894.         TerrainStreaming.HeightfieldAtlasSampleCountYFactor 2
  2895.         TerrainStreaming.MaskAtlasSampleCountXFactor 2
  2896.         TerrainStreaming.MaskAtlasSampleCountYFactor 2
  2897.         TerrainStreaming.ColorAtlasSampleCountXFactor 2
  2898.         TerrainStreaming.ColorAtlasSampleCountYFactor 2
  2899.         VisualTerrain.TextureAtlasSampleCountXFactor 2
  2900.         VisualTerrain.TextureAtlasSampleCountYFactor 2
  2901.         VisualTerrain.TextureRenderJobCount 4
  2902.         VisualTerrain.TextureRenderJobsLaunchedPerFrameCountMax 4
  2903.         VisualTerrain.Decal3dFarDrawDistanceScaleFactor 2
  2904.     ]=],
  2905. })
  2906.  
  2907. ------ Mesh Quality
  2908. applyQualitySettings(\'MeshQuality\', {
  2909.     [Quality.Low]=[=[
  2910.         WorldRender.CullScreenAreaScale 1
  2911.         Mesh.GlobalLodScale 1
  2912.         Mesh.ShadowDistanceScale 1
  2913.         MeshStreaming.PoolSize 100000
  2914.        
  2915.         VegetationSystem.UseShadowLodOffset 1
  2916.         VegetationSystem.MaxActiveDistance 100
  2917.         VegetationSystem.MaxPreSimsPerJob 2
  2918.         VegetationSystem.SimulationMemKbClient 2048
  2919.  
  2920.         Render.EdgeModelViewDistance 50
  2921.     ]=],
  2922.     [Quality.Medium]=[=[
  2923.         WorldRender.CullScreenAreaScale 1.7
  2924.         Mesh.GlobalLodScale 1.7
  2925.         Mesh.ShadowDistanceScale 1.7
  2926.         MeshStreaming.PoolSize 100000
  2927.  
  2928.         VegetationSystem.UseShadowLodOffset 0
  2929.         VegetationSystem.MaxActiveDistance 200
  2930.         VegetationSystem.MaxPreSimsPerJob 3
  2931.         VegetationSystem.SimulationMemKbClient 2048
  2932.  
  2933.         Render.EdgeModelViewDistance 70
  2934.     ]=],
  2935.     [Quality.High]=[=[
  2936.         WorldRender.CullScreenAreaScale 3
  2937.         Mesh.GlobalLodScale 3
  2938.         Mesh.ShadowDistanceScale 3
  2939.         MeshStreaming.PoolSize 125000
  2940.  
  2941.         VegetationSystem.UseShadowLodOffset 0
  2942.         VegetationSystem.MaxActiveDistance 300
  2943.         VegetationSystem.MaxPreSimsPerJob 4
  2944.         VegetationSystem.SimulationMemKbClient 4096
  2945.  
  2946.         Render.EdgeModelViewDistance 100
  2947.     ]=],
  2948.     [Quality.Ultra]=[=[
  2949.         WorldRender.CullScreenAreaScale 4
  2950.         Mesh.GlobalLodScale 4
  2951.         Mesh.ShadowDistanceScale 4
  2952.         MeshStreaming.PoolSize 150000
  2953.  
  2954.         VegetationSystem.UseShadowLodOffset 0
  2955.         VegetationSystem.MaxActiveDistance 350
  2956.         VegetationSystem.MaxPreSimsPerJob 8
  2957.         VegetationSystem.SimulationMemKbClient 4096
  2958.        
  2959.         Render.EdgeModelViewDistance 150
  2960.     ]=],
  2961. })
  2962.  
  2963.  
  2964. ------ Effects Quality
  2965. applyQualitySettings(\'EffectsQuality\', {
  2966.     [Quality.Low]=[=[
  2967.         EffectManager.EffectQuality 0
  2968.         EmitterSystem.QuadHalfResEnable 1
  2969.         WorldRender.SpotLightShadomapLevel QualityLevel_Low
  2970.     ]=],
  2971.     [Quality.Medium]=[=[
  2972.         EffectManager.EffectQuality 1
  2973.         EmitterSystem.QuadHalfResEnable 1
  2974.         WorldRender.SpotLightShadomapLevel QualityLevel_Medium
  2975.     ]=],
  2976.     [Quality.High]=[=[
  2977.         EffectManager.EffectQuality 2
  2978.         EmitterSystem.QuadHalfResEnable 1
  2979.         WorldRender.SpotLightShadomapLevel QualityLevel_High
  2980.     ]=],
  2981.     [Quality.Ultra]=[=[
  2982.         EffectManager.EffectQuality 2
  2983.         EmitterSystem.QuadHalfResEnable 0
  2984.         WorldRender.SpotLightShadomapLevel QualityLevel_Ultra
  2985.     ]=],
  2986. })
  2987.  
  2988.  
  2989.  
  2990. ------ Terrain Quality
  2991. applyQualitySettings(\'TerrainQuality\', {
  2992.     [Quality.Low]=[=[
  2993.         VisualTerrain.DxDisplacementMappingEnable 0
  2994.         VisualTerrain.DxTessellatedTriWidth 12
  2995.         VisualTerrain.LodScale 1.0
  2996.     ]=],
  2997.     [Quality.Medium]=[=[
  2998.         VisualTerrain.DxDisplacementMappingEnable 0
  2999.         VisualTerrain.DxTessellatedTriWidth 12
  3000.         VisualTerrain.LodScale 1.1
  3001.     ]=],
  3002.     -- Only on DX11 cards
  3003.     [Quality.High]=[=[
  3004.         VisualTerrain.DxDisplacementMappingEnable 1
  3005.         VisualTerrain.DxTessellatedTriWidth 12
  3006.         VisualTerrain.LodScale 1.1
  3007.     ]=],
  3008.     [Quality.Ultra]=[=[
  3009.         VisualTerrain.DxDisplacementMappingEnable 1
  3010.         VisualTerrain.DxTessellatedTriWidth 9
  3011.         VisualTerrain.LodScale 1.1
  3012.     ]=],
  3013. })
  3014.  
  3015.  
  3016. ------ Terrain Decoration Quality
  3017. applyQualitySettings(\'UndergrowthQuality\', {
  3018.     [Quality.Low]=[=[
  3019.         VisualTerrain.MeshScatteringBuildChannelCount 2
  3020.         VisualTerrain.MeshScatteringBuildChannelsLaunchedPerFrameCountMax 1
  3021.         VisualTerrain.MeshScatteringDensityScaleFactor 1
  3022.         VisualTerrain.MeshScatteringDistanceScaleFactor 1
  3023.         VisualTerrain.MeshScatteringInstancesPerCellMax 2048
  3024.     ]=],
  3025.     [Quality.Medium]=[=[
  3026.         VisualTerrain.MeshScatteringBuildChannelCount 4
  3027.         VisualTerrain.MeshScatteringBuildChannelsLaunchedPerFrameCountMax 2
  3028.         VisualTerrain.MeshScatteringDensityScaleFactor 1.2
  3029.         VisualTerrain.MeshScatteringDistanceScaleFactor 1.3
  3030.         VisualTerrain.MeshScatteringInstancesPerCellMax 3072
  3031.     ]=],
  3032.     [Quality.High]=[=[
  3033.         VisualTerrain.MeshScatteringBuildChannelCount 8
  3034.         VisualTerrain.MeshScatteringBuildChannelsLaunchedPerFrameCountMax 4
  3035.         VisualTerrain.MeshScatteringDensityScaleFactor 1.5
  3036.         VisualTerrain.MeshScatteringDistanceScaleFactor 1.7
  3037.         VisualTerrain.MeshScatteringInstancesPerCellMax 4096
  3038.     ]=],
  3039.     [Quality.Ultra]=[=[
  3040.         VisualTerrain.MeshScatteringBuildChannelCount 8
  3041.         VisualTerrain.MeshScatteringBuildChannelsLaunchedPerFrameCountMax 4
  3042.         VisualTerrain.MeshScatteringDensityScaleFactor 2.0
  3043.         VisualTerrain.MeshScatteringDistanceScaleFactor 2.3
  3044.         VisualTerrain.MeshScatteringInstancesPerCellMax 4096
  3045.     ]=],
  3046. })
  3047.  
  3048.  
  3049. ------ Shadow Quality
  3050. applyQualitySettings(\'ShadowQuality\', {
  3051.     [Quality.Low]=[=[
  3052.         WorldRender.ShadowmapsEnable true
  3053.         WorldRender.ShadowmapViewDistance 100
  3054.         WorldRender.ShadowmapResolution 1024
  3055.         WorldRender.ShadowmapQuality 0
  3056.         WorldRender.TransparencyShadowmapsEnable 0
  3057.     ]=],
  3058.     [Quality.Medium]=[=[
  3059.         WorldRender.ShadowmapsEnable true
  3060.         WorldRender.ShadowmapViewDistance 100
  3061.         WorldRender.ShadowmapResolution 1024
  3062.         WorldRender.ShadowmapQuality 1
  3063.         WorldRender.TransparencyShadowmapsEnable 1
  3064.     ]=],
  3065.     [Quality.High]=[=[
  3066.         WorldRender.ShadowmapsEnable true
  3067.         WorldRender.ShadowmapViewDistance 200
  3068.         WorldRender.ShadowmapResolution 1536
  3069.         WorldRender.ShadowmapQuality 1
  3070.         WorldRender.TransparencyShadowmapsEnable 1
  3071.     ]=],
  3072.     [Quality.Ultra]=[=[
  3073.         WorldRender.ShadowmapsEnable true
  3074.         WorldRender.ShadowmapViewDistance 200
  3075.         WorldRender.ShadowmapResolution 2048
  3076.         WorldRender.ShadowmapQuality 1
  3077.         WorldRender.TransparencyShadowmapsEnable 1
  3078.     ]=],
  3079. })
  3080.  
  3081.  
  3082. ------ Antialiasing Deferred
  3083. applyQualitySettings(\'AntiAliasingDeferred\', {
  3084.     [AntiAliasingDeferred.Off]=[=[
  3085.         WorldRender.MultisampleCount 1
  3086.     ]=],
  3087.     [AntiAliasingDeferred.MSAA2X]=[=[
  3088.         WorldRender.MultisampleCount 2
  3089.     ]=],
  3090.     [AntiAliasingDeferred.MSAA4X]=[=[
  3091.         WorldRender.MultisampleCount 4
  3092.     ]=],
  3093. })
  3094.  
  3095.    
  3096. ------ Antialiasing Post
  3097. applyQualitySettings(\'AntiAliasingPost\', {
  3098.     [AntiAliasingPost.Off]=[=[
  3099.         WorldRender.FxaaEnable 0
  3100.     ]=],
  3101.     [AntiAliasingPost.Low]=[=[
  3102.         WorldRender.FxaaEnable 1
  3103.         WorldRender.FxaaQuality 0
  3104.     ]=],
  3105.     [AntiAliasingPost.Medium]=[=[
  3106.         WorldRender.FxaaEnable 1
  3107.         WorldRender.FxaaQuality 1
  3108.     ]=],
  3109.     [AntiAliasingPost.High]=[=[
  3110.         WorldRender.FxaaEnable 1
  3111.         WorldRender.FxaaQuality 2
  3112.     ]=],
  3113. })
  3114.  
  3115.  
  3116. ------ Ambient Occlusion
  3117. applyQualitySettings(\'AmbientOcclusion\', {
  3118.     [AmbientOcclusion.Off]=[=[
  3119.         PostProcess.DynamicAOEnable 0
  3120.     ]=],
  3121.     [AmbientOcclusion.SSAO]=[=[
  3122.         PostProcess.DynamicAOEnable 1
  3123.         PostProcess.DynamicAOMethod DynamicAOMethod_SSAO
  3124.     ]=],
  3125.     [AmbientOcclusion.HBAO]=[=[
  3126.         PostProcess.DynamicAOEnable 1
  3127.         PostProcess.DynamicAOMethod DynamicAOMethod_HBAO
  3128.     ]=],
  3129. })
  3130.  
  3131.  
  3132. ------ Anisotropic filtering
  3133. ShaderSystem = ShaderSystem or {}
  3134. ShaderSystem.MaxAnisotropy = 2^settings[\'AnisotropicFilter\'] -- 1, 2, 4, 8, 16
  3135.  
  3136.  
  3137. ------- Motion Blur
  3138. WorldRender = WorldRender or {}
  3139. WorldRender.MotionBlurEnable = settings[\'MotionBlurEnabled\']
  3140. -- WorldRender.MotionBlurScale = settings[\'MotionBlur\'] / 5
  3141. -- for some reason motion we get "attempt to perform arithmetic on field \'MotionBlur\' (a nil value)" when starting up so workaround by having a script default value to handle that case --johan
  3142. WorldRender.MotionBlurScale = (settings[\'MotionBlur\'] or 0.5) / 5
  3143.  
  3144.  
  3145. ------- Screen resolution
  3146. RenderDevice = RenderDevice or {}
  3147. RenderDevice.FullscreenWidth = settings[\'ResolutionWidth\']
  3148. RenderDevice.FullscreenHeight = settings[\'ResolutionHeight\']
  3149. RenderDevice.FullscreenRefreshRate = settings[\'FullscreenRefreshRate\']
  3150. RenderDevice.Fullscreen = settings[\'FullscreenEnabled\']
  3151. RenderDevice.FullscreenOutputIndex = settings[\'FullscreenScreen\']
  3152. RenderDevice.VSyncEnable = settings[\'VSyncEnabled\']
  3153. RenderDevice.StereoEnable = settings[\'Stereoscopy\']
  3154. RenderDevice.StereoDepth = settings[\'StereoConvergence\']
  3155.  
  3156. PostProcess.UIBrightnessNorm = settings[\'Brightness\']
  3157. '>}},
  3158.  {'$file': {'name': 'Scripts/UserOptions/Options/Physics.lua',
  3159.             'payload': <Blob 'local quality = settings[\'PhysicsQuality\']
  3160. log:info("setting physics quality : "..quality)
  3161. if(quality > 0.8) then
  3162.     applySettings([=[
  3163.             Physics.EnableFollowWheelRaycasts true
  3164.             Physics.EnableASyncWheelRaycasts true
  3165.  ]=])
  3166. else
  3167.     applySettings([=[
  3168.             Physics.EnableFollowWheelRaycasts false
  3169.             Physics.EnableASyncWheelRaycasts true
  3170.  ]=])
  3171. end
  3172. '>}},
  3173.  {'$file': {'name': 'Scripts/UserOptions/Options/Sound.lua',
  3174.             'payload': <Blob 'local quality = settings[\'AudioQuality\']
  3175. log:info("setting sound quality : "..quality)
  3176. if(quality > 0.8) then
  3177.     applySettings([=[
  3178.             Audio.MaxAudibleSoundCount 15
  3179.             Audio.AudioCoreCpuLoadLimit 50
  3180.  ]=])
  3181. else
  3182.     applySettings([=[
  3183.             Audio.MaxAudibleSoundCount 8
  3184.             Audio.AudioCoreCpuLoadLimit 30
  3185.  ]=])
  3186. end
  3187. '>}},
  3188.  {'$file': {'name': 'Scripts/BuildMonkeyAutosmoke.cfg',
  3189.             'payload': <Blob '#!/bin/lua
  3190.  
  3191. core = require "Frost.Core"
  3192.  
  3193. log:debug("Parsing \'BuildMonkeyAutosmoke.cfg\' settings")
  3194.  
  3195. local function applySettings(settings)
  3196.     core.parseKeyValueCfgString(settings, _G)
  3197. end
  3198.  
  3199. applySettings [=[
  3200.  
  3201. Core.IgnoreAlways           true
  3202.  
  3203. Core.Heartbeat              true
  3204. Core.HeartbeatInterval          20
  3205. Client.UseMouseAndKeyboardSystem    false
  3206.  
  3207. RenderDevice.NvidiaMinDriverVersion 18585
  3208.  
  3209. Client.IsPresenceEnabled false
  3210. Server.IsPresenceEnabled false
  3211.  
  3212. ]=]
  3213. '>}},
  3214.  {'$file': {'name': 'Scripts/BuildMonkeyXenon.cfg',
  3215.             'payload': <Blob '#!/bin/lua
  3216.  
  3217. core = require "Frost.Core"
  3218.  
  3219. log:debug("Parsing \'BuildMonkeyXenon.cfg\' settings")
  3220.  
  3221. local function applySettings(settings)
  3222.     core.parseKeyValueCfgString(settings, _G)
  3223. end
  3224.  
  3225. applySettings [=[
  3226.  
  3227. Core.IgnoreAlways           true
  3228. Client.UseMouseAndKeyboardSystem    false
  3229.  
  3230. SoldierTest.maxCountTestSoldier 23
  3231.  
  3232. Client.IsPresenceEnabled false
  3233. Server.IsPresenceEnabled false
  3234.  
  3235. ]=]
  3236. '>}},
  3237.  {'$file': {'name': 'Scripts/Checkins.cfg',
  3238.             'payload': <Blob "Code Win32;//Frostbite/Sandboxes/Venice/TnT/Code/;\\\\dice-monkeyfarm\\Logs\\Venice.Code.Win32\\Logs
  3239. Code Win64;//Frostbite/Sandboxes/Venice/TnT/Code/;\\\\dice-monkeyfarm\\Logs\\Venice.Code.Win64\\Logs
  3240. Code Xenon;//Frostbite/Sandboxes/Venice/TnT/Code/;\\\\dice-monkeyfarm\\Logs\\Venice.Code.Xenon\\Logs
  3241. Code PS3;//Frostbite/Sandboxes/Venice/TnT/Code/;\\\\dice-monkeyfarm\\Logs\\Venice.Code.PS3\\Logs
  3242. No Master Win32;//Frostbite/Sandboxes/Venice/TnT/Code/;\\\\dice-monkeyfarm\\Logs\\Venice.NoMaster.Win32\\Logs
  3243. # Removed these, since they don't trigger on checkins:
  3244. #No Master Xenon;//Frostbite/Sandboxes/Venice/TnT/Code/;\\\\dice-monkeyfarm\\Logs\\Venice.NoMaster.Xenon\\Logs
  3245. #No Master PS3;//Frostbite/Sandboxes/Venice/TnT/Code/;\\\\dice-monkeyfarm\\Logs\\Venice.NoMaster.PS3\\Logs
  3246. #No Master PS3 (GCC);//Frostbite/Sandboxes/Venice/TnT/Code/;\\\\dice-monkeyfarm\\Logs\\Venice.NoMaster.PS3GCC\\Logs
  3247. #Editor;//Frostbite/Sandboxes/Venice/TnT/Code/;\\\\dice-monkeyfarm\\Logs\\Venice.EditorSmoke\\Logs
  3248. Data Win32;//Venice/Sandboxes/Venice/Data/;\\\\dice-monkeyfarm\\Logs\\Venice.DataSmoke.Win32\\Logs
  3249. Data Win64;//Venice/Sandboxes/Venice/Data/;\\\\dice-monkeyfarm\\Logs\\Venice.DataSmoke.Win64\\Logs
  3250. Data Xenon;//Venice/Sandboxes/Venice/Data/;\\\\dice-monkeyfarm\\Logs\\Venice.DataSmoke.Xenon\\Logs
  3251. Data PS3;//Venice/Sandboxes/Venice/Data/;\\\\dice-monkeyfarm\\Logs\\Venice.DataSmoke.PS3\\Logs
  3252. ">}},
  3253.  {'$file': {'name': 'Scripts/DisablePresence.cfg',
  3254.             'payload': <Blob 'Client.IsPresenceEnabled false
  3255. Server.IsPresenceEnabled false
  3256. '>}},
  3257.  {'$file': {'name': 'Scripts/FrostTest.cfg',
  3258.             'payload': <Blob '#!/bin/lua
  3259.  
  3260. core = require "Frost.Core"
  3261.  
  3262. log:debug("Parsing \'FrostTest.cfg\' settings")
  3263.  
  3264. local function applySettings(settings)
  3265.     core.parseKeyValueCfgString(settings, _G)
  3266. end
  3267.  
  3268. applySettings [=[
  3269.  
  3270. Game.LogFileEnable true
  3271. Client.IsInternetSimulationEnabled false
  3272. Server.IsInternetSimulationEnabled false
  3273.  
  3274. Server.PacketDrops                0
  3275. Server.DropSpikeChance            0
  3276. Server.DuplicationChance          0
  3277. Server.CorruptionChance           0
  3278. Client.PacketDrops                0
  3279. Client.DropSpikeChance            0
  3280. Client.DuplicationChance          0
  3281. Client.CorruptionChance           0
  3282.  
  3283. PerformanceTracker.JuiceLogPerformance false
  3284. Core.DisplayAsserts false
  3285. Core.EnableJuiceTelemetry true
  3286. Core.EnableJuice        true
  3287. CrashDump.WarnBeforeDoingMemoryDump false
  3288. Core.JuiceValidateAsAssert false
  3289. Core.ValidateAsWarning true
  3290.  
  3291. juice-alternative-naming-scheme true
  3292.  
  3293. Core.HardwareProfile Hardware_Low
  3294. Render.SkipMipmapCount  4
  3295.  
  3296. #Demo.RecordDemoFileName /temp/demo/BuildMonkeySession
  3297. #UdpSocket.ReusePort true
  3298. #Network.IncrementServerPortOnFail false
  3299.  
  3300. UI.SpawnOnPressEnter true
  3301.  
  3302. Inventory.postSpawnEquipping true
  3303.  
  3304. Game.DisablePreRound true
  3305. Player.ignoreLevelWarmUpTimers true
  3306. Player.allowDefaultSpawnPointSelection true
  3307.  
  3308. Window.Width 800
  3309. Window.Height 600
  3310. Window.Fullscreen false
  3311.  
  3312. Player.allowRandomSpawnPointSelection true
  3313.  
  3314. UI.SkipIntroVideoSequence true
  3315.  
  3316. ]=]
  3317.  
  3318. '>}},
  3319.  {'$file': {'name': 'Scripts/FrostTestPerformance.cfg',
  3320.             'payload': <Blob '#!/bin/lua
  3321.  
  3322. core = require "Frost.Core"
  3323.  
  3324. log:debug("Parsing \'FrostTestPerformance.cfg\' settings")
  3325.  
  3326. local function applySettings(settings)
  3327.     core.parseKeyValueCfgString(settings, _G)
  3328. end
  3329.  
  3330. applySettings [=[
  3331.  
  3332. Game.LogFileEnable true
  3333. Client.IsInternetSimulationEnabled false
  3334. Server.IsInternetSimulationEnabled false
  3335.  
  3336. Server.PacketDrops                0
  3337. Server.DropSpikeChance            0
  3338. Server.DuplicationChance          0
  3339. Server.CorruptionChance           0
  3340. Client.PacketDrops                0
  3341. Client.DropSpikeChance            0
  3342. Client.DuplicationChance          0
  3343. Client.CorruptionChance           0
  3344.  
  3345. ShaderSystem.DrawStats true
  3346. PerformanceTracker.Interval 99999
  3347. Render.PerfOverlayVisible true
  3348.  
  3349. PerformanceTracker.JuiceLogPerformance true
  3350. Core.DisplayAsserts false
  3351. Core.EnableJuiceTelemetry true
  3352. Core.EnableJuice        true
  3353. CrashDump.WarnBeforeDoingMemoryDump false
  3354. Core.JuiceValidateAsAssert false
  3355. Core.ValidateAsWarning true
  3356.  
  3357. juice-alternative-naming-scheme true
  3358. UdpSocket.ReusePort true
  3359. Network.IncrementServerPortOnFail false
  3360.  
  3361. UI.SpawnOnPressEnter true
  3362.  
  3363. Inventory.postSpawnEquipping true
  3364.  
  3365. Game.DisablePreRound true
  3366. Tickets.DisableTicketBleed true
  3367.  
  3368. ServerMetrics.TickTelemetryEnabled false
  3369. ServerMetrics.PerformanceTelemetryEnabled true
  3370. ServerMetrics.PerformanceProfileStateEnabled true
  3371. ServerMetrics.JuiceTelemetryEnabled true
  3372. ServerMetrics.DbxReportEnabled true
  3373.  
  3374. Player.allowRandomSpawnPointSelection true
  3375.  
  3376. Client.LoadingTimeOut 99999
  3377. Client.LoadedTimeOut 99999
  3378. Client.IngameTimeOut 99999
  3379. Server.IngameTimeOut 99999
  3380. Server.LoadingTimeOut 99999
  3381. BFServer.NoInteractivityTimeoutTime 999999
  3382.  
  3383. Online.Environment Development
  3384. Client.IsPresenceEnabled false
  3385. Server.IsPresenceEnabled false
  3386.  
  3387. ]=]
  3388. '>}},
  3389.  {'$file': {'name': 'Scripts/Game.cfg',
  3390.             'payload': <Blob '#!/bin/lua
  3391.  
  3392. core = require "Frost.Core"
  3393.  
  3394. log:debug("Parsing \'Game.cfg\' settings")
  3395.  
  3396. local function applySettings(settings)
  3397.     core.parseKeyValueCfgString(settings, _G)
  3398. end
  3399.  
  3400. local function append(table, value)
  3401.     table[#table+1] = value
  3402. end
  3403.  
  3404. --
  3405. -- Note that this is now actually a Lua script (signified by the first line
  3406. -- of this file), to allow conditionals and more advanced settings processing
  3407. --
  3408. -- There are two ways to set settings. One is by editing the key-value string
  3409. -- block below, the other is to actually use Lua code to set settings.
  3410. --
  3411.  
  3412.  
  3413. applySettings [=[
  3414.  
  3415. Game.Level Levels/Frontend/Frontend
  3416. #Game.DefaultLayerInclusion GameMode=ConquestLarge
  3417. #Level.Start E3_Demo
  3418.  
  3419. Server.DebrisClusterEnabled       true
  3420. Server.WaterPhysicsEnabled        true
  3421. Server.IsDesertingAllowed         false
  3422. Server.IsRenderDamageEvents       false
  3423. Server.IsStatsEnabled             false
  3424. Server.IsNetworkStatsEnabled      false
  3425. Server.IsAiEnabled                true
  3426. Server.AILooksIntoCamera          false
  3427. Server.IsDestructionEnabled       true
  3428. Server.IsTreeDestructionEnabled   true
  3429. Server.IsSoldierAnimationEnabled  true
  3430. Server.IsSoldierDetailedCollisionEnabled true
  3431. Server.DisableCutscenes           false
  3432. Server.HavokVisualDebugger        false
  3433. Server.ShowTriggerDebugText       false
  3434. Server.TimeoutGame                false
  3435. Server.TimeoutTime                9999.0 // 5.0
  3436.  
  3437. Server.JobEnable                  true
  3438.    
  3439. Server.ThreadedLoadingEnable      true
  3440.  
  3441. // Internet simulation (only active in multiplayer)
  3442. Server.IsInternetSimulationEnabled false
  3443. Server.MinLatency                 0.1
  3444. Server.MaxLatency                 0.2
  3445. Server.PacketDrops                0.01
  3446. Server.DropSpikeChance            0.03
  3447. Server.MinDropDuration            0.3
  3448. Server.MaxDropDuration            1.0
  3449. Server.ReorderingChance           0.01
  3450. Server.DuplicationChance          0.02
  3451. Server.CorruptionChance           0.01
  3452.  
  3453. enable-category-lookup-error-trigger false
  3454. Server.FallBackToSquadSpawn false
  3455.  
  3456. Server.Playlist DefaultPlayList
  3457. Server.forceCurrentMapOnLoad true
  3458. Server.forceStartMapOnLoad false
  3459.  
  3460. Player.allowDefaultSpawnPointSelection true
  3461. Player.ignoreLevelWarmUpTimers true
  3462.  
  3463. Client.IsSpectator                false
  3464. #Client.ScreenshotToFile          true
  3465. Client.OccludersEnabled           true
  3466. Client.DebrisClusterEnabled       true
  3467. Client.TerrainEnabled             true
  3468. Client.WaterPhysicsEnabled        true
  3469. Client.PauseGameOnStartUp         false
  3470. Client.RenderTags                 false
  3471. Client.EffectsEnabled             true
  3472. Client.EmittersEnabled            true
  3473. Client.OnDamageSpottingEnabled    false
  3474.  
  3475. #Client.ServerIp                   10.20.102.99
  3476. #Client.SecondaryServerIp          10.20.102.63
  3477.  
  3478. Client.DrawStats  false
  3479. Client.DrawFpsStats  true
  3480. Client.DrawObjectLimits  true
  3481. Client.DrawNetworkStats false
  3482.  
  3483. Client.Team                       0
  3484. Client.Kit                        0
  3485.  
  3486. Persistence.AllUnlocksAlwaysUnlocked false
  3487.  
  3488. #Client.SpawnPoint
  3489. Client.InvertPitch                false
  3490. Client.InvertPadPcRightStick      false
  3491. //Flip Y-axis for non-pilots (Infantry and Land Vehicles)
  3492. Client.Scheme0FlipY               false
  3493. //Flip Y-axis for pilots (Air Vehicles)
  3494. Client.Scheme1FlipY               false
  3495. Client.AimScale                   1.0
  3496. Client.HavokVisualDebugger        false
  3497. Client.HavokVDBShowsEffectsWorld  false
  3498.  
  3499. Client.IncomingFrequency 15.0
  3500. Client.IncomingRate 128000
  3501. Client.OutgoingRate 48000
  3502.  
  3503. Server.OutgoingFrequency 10.0
  3504. Server.OutgoingRate 128000
  3505. Server.IncomingRate 48000
  3506.  
  3507. // Internet simulation (only active in multiplayer)
  3508. Client.IsInternetSimulationEnabled false
  3509. Client.MinLatency                 0.1
  3510. Client.MaxLatency                 0.2
  3511. Client.PacketDrops                0.01
  3512. Client.DropSpikeChance            0.03
  3513. Client.MinDropDuration            0.3
  3514. Client.MaxDropDuration            1.0
  3515. Client.ReorderingChance           0.01
  3516. Client.DuplicationChance          0.02
  3517. Client.CorruptionChance           0.01
  3518.  
  3519. Client.ThreadedLoadingEnable      true
  3520. Client.VisualFrameInterpolation   true
  3521.  
  3522. Client.AsyncClientBulletEntity    true
  3523.  
  3524. UI.AmpServerEnabled               false
  3525. UI.AmpWaitForServerConnection     false
  3526. UI.AmpPort                        7534
  3527. UI.OnScreenTraces                 false
  3528. UI.ShowDebugStringTag             false
  3529. UI.OutputEnabled                  false
  3530. UI.VerboseOutputEnabled           false
  3531. // Language can be set to override the language that is getting sent from the web
  3532. UI.Language                       LanguageFormat_Undefined
  3533. UI.FontCacheTextureWidth          1024
  3534. UI.FontCacheTextureHeight         1024
  3535. UI.RenderCommandBufferSize        327680
  3536. UI.RenderVertexBufferSize         327680
  3537. UI.RenderIndexBufferSize          98304
  3538. UI.RenderPcBufferScale            4
  3539. UI.DisableMoviesOnConsoles        true
  3540. UI.MaxMinimapIconsPc              256
  3541. UI.MaxMinimapIconsConsole         64
  3542.  
  3543. //Timeout values
  3544. //Client.LoadingTimeOut 99999
  3545. //Client.LoadedTimeOut  99999
  3546. //Client.IngameTimeOut  99999
  3547. //Server.IngameTimeOut  99999
  3548. //Server.LoadingTimeOut 99999
  3549.  
  3550.  
  3551.  
  3552. Core.LogLevel                     Info
  3553. Core.EnableMemoryDump             false
  3554. Core.CrashOnFatalErrors           true
  3555. Core.ProfileDirectoryName         Battlefield 3
  3556. Core.BugSubmitTool                BST_B4Bug
  3557. Core.InitSeed                     xa37dd45ffe100bfffcc9753aabac325f07cb3fa231144fe2e33ae4783feead2b8a73ff021fac326df0ef9753ab9cdf6573ddff0312fab0b0ff39779eaff312a4f5de65892ffee33a44569bebf21f66d22e54a22347efd375981188743afd99baacc342d88a99321235798725fedcbf43252669dade32415fee89da543bf23d4ex
  3558.  
  3559. Game.LogFileEnable true
  3560. Game.LogFileCollisionMode LFCM_Rotate
  3561.  
  3562. Decal.RingBufferMaxVertexCount 15000
  3563. Decal.StaticBufferMaxVertexCount 1000000
  3564. Decal.DebugWarningsEnable false
  3565.  
  3566. ShaderSystem.DxFixupInputSignaturesEnable false
  3567. ShaderSystem.FrameMemoryBufferSize 16777216
  3568. ShaderSystem.DrawStats false
  3569. ShaderSystem.DrawAdvancedStats false
  3570.  
  3571. Render.JobEnable true
  3572. Render.PerfOverlayEnable 1
  3573. Render.DebugRendererEnable 1
  3574. Render.DrawFpsMethod 1
  3575.  
  3576. DebugRender.DxMaxVertexCount 262144
  3577.  
  3578. //Set the Near Plane to 0.06 to help fix the most major clipping issues on weapon animations. -akertz
  3579. Render.NearPlane 0.06
  3580.  
  3581. Render.XenonBufferTwoFramesEnable 1
  3582.  
  3583. RenderDevice.Dx10PlusEnable 1
  3584. RenderDevice.Dx10Dot0Enable 0
  3585. RenderDevice.Dx10Dot1Enable 1
  3586. RenderDevice.Dx11Enable 1
  3587. RenderDevice.DebugInfoEnable 0
  3588. RenderDevice.DebugBreakOnErrorEnable 0
  3589. RenderDevice.DebugBreakOnWarningEnable 0
  3590. RenderDevice.DebugBreakOnInfoEnable 0
  3591. RenderDevice.SwitchToRefEnable 0
  3592. RenderDevice.FullscreenModeEnable true
  3593. RenderDevice.MultiGpuValidationEnable false
  3594.  
  3595. Occlusion.NormalViewDistance 400
  3596. Occlusion.TerrainViewDistance 2000
  3597.  
  3598. WorldRender.MultisampleCount 1
  3599. WorldRender.ShadowmapSliceCount 3
  3600. WorldRender.ShadowmapViewDistance 100
  3601. WorldRender.ShadowmapWidth 1024
  3602. WorldRender.ShadowmapHeight 1024
  3603. WorldRender.ShadowmapsEnable true
  3604. #WorldRender.SubSurfaceRolloffKeyLight 0.33
  3605. #WorldRender.SubSurfaceRolloffLocalLight 1.0
  3606. WorldRender.ShadowmapExtrusionLength 400
  3607.  
  3608. MeshStreaming.Enable 1
  3609.  
  3610. TextureStreaming.Enable 1
  3611. TextureStreaming.PoolSize 200000
  3612. TextureStreaming.MinTextureSize 50000
  3613.  
  3614. # Should really be the new default value
  3615. VisualTerrain.DecalOffsetY 0.04
  3616.  
  3617. TerrainStreaming.DataLoadJobCount 192
  3618.  
  3619. Physics.RemoveRagdollWhenWoken false
  3620. Physics.RemoveFromWorldOnCollisionOverflow false
  3621. Physics.SingleStepCharacter true
  3622. Physics.HeightfieldRSXStreaming true
  3623. #Physics.EnableClientWheelRaycasts true2
  3624.  
  3625. ragdoll-settle-angularvelocity 0.05
  3626. ragdoll-settle-linearvelocity 0.05
  3627. ragdoll-settle-minactivetime 5
  3628.  
  3629. GameAnimation.RespawnOnResourceReload false
  3630. GameAnimation.UseAnimationDrivenCharacter true
  3631. GameAnimation.TemporalLoddingFirstDistance 10000
  3632. GameAnimation.TemporalLoddingSecondDistance 10000
  3633. GameAnimation.TemporalLoddingThirdDistance 10000
  3634. GameAnimation.TemporalLoddingFourthDistance 10000
  3635. GameAnimation.TemporalLoddingFifthDistance 10000
  3636. GameAnimation.TemporalLoddingSixthDistance 10000
  3637.  
  3638. EmitterSystem.EnableJobs true
  3639. EmitterSystem.QuadGroupsJoinNiceAndSimple true
  3640. EmitterSystem.QuadEnableZOcclusion false
  3641.  
  3642. Audio.ReverbAllocSize 983040
  3643.  
  3644. BFServer.NoInteractivityTimeoutTime 300
  3645. BFServer.NoInteractivityThresholdLimit 0.1
  3646. BFServer.DefaultVoiceChannel Squad
  3647.  
  3648. Game.IsGodMode                  false
  3649. Game.IsJesusMode                false
  3650. Game.useSingleWeaponSelector    true
  3651. Game.UseSpeedBasedDetailedCollision true
  3652. Game.AwardsTracking true
  3653. Game.HasUnlimitedAmmo           false
  3654. Game.HasUnlimitedMags           false
  3655. Game.AutoAimEnabled     false
  3656. Game.DifficultyIndex      -1 // Debug difficulty index to data GameConfigurations/Game_Difficulty_Settings.dbx
  3657. //Game.DisablePreRound      true
  3658.  
  3659. #Don\'t turn this on, use the weapon data to control the FOV instead.
  3660. #SoldierRender.WeaponFovEnable  false
  3661.  
  3662. UI.ConstructibleList Objects/Constructibles/Constructibles
  3663. UI.BatchingEnable true
  3664. UI.MaxVertexCount 32768
  3665. UI.RenderTargetMipmapGenEnable true
  3666. UI.PostProcessSystemEnable true
  3667. UI.PostProcessEnable true
  3668. UI.PostProcessMipmapgenEnable false
  3669.  
  3670. UIMessageComp.debugRendering    false
  3671.  
  3672. UICoopComp.UnlockAllLevels  false
  3673. UILevelComp.UnlockAllSpLevels   false
  3674.  
  3675. Client.UseMouseAndKeyboardSystem    true
  3676. Core.EnableDbErrorPolicy true
  3677.  
  3678. #Core.EnableJuice       false
  3679. Core.JuiceServerIP               10.20.96.145
  3680. Core.JuiceLogLevel      Info
  3681.  
  3682. Core.MemoryStatsEnabled true
  3683.  
  3684. DebugRender.TextQueueMaxLineCount 10
  3685. DebugRender.TextQueueTimeVisible 10.0
  3686. proximity-interact-distance 4.0
  3687.  
  3688. Occlusion.MaxTriangleCount 30000
  3689.  
  3690. Core.DisplayAsserts true
  3691.  
  3692. uiqueue-delay 10
  3693. kill-message-delay 0
  3694. audio-reverb-distance-falloff 0.01
  3695.  
  3696. Blaze.ServerAutoAccountCreation true
  3697.  
  3698.  
  3699. SoldierTest.spawnEnabled false
  3700. SoldierTest.scriptsEnabled false
  3701. controllableEntityJobsEnabled true
  3702.  
  3703. DisplayObjective false;
  3704. DisplayMapMarkers false;
  3705.  
  3706. #
  3707. # ANT settings
  3708. #
  3709.  
  3710. Ant.EnableJobs true
  3711.  
  3712. # Memory Budget Size is a pure cosmetical vars to help content creators manage the memory
  3713. antDebug.MemoryBudgetSize 20
  3714.  
  3715. # Vars
  3716. Ant.MaxInterpolationSlots 100
  3717. Soldier.cameraLagEffect 0
  3718. Ant.BlockOnJobs true
  3719. Ant.ClientEmulatesServer false
  3720. Ant.UseCameraFov false
  3721. Ant.UseWeaponFov false
  3722. Soldier.animate3pWhenIn1p true
  3723. Ant.InterpolatePoses true
  3724.  
  3725. // Allow variable length ticks to be used for console MP
  3726. Ant.AllowVariableTickLength true
  3727.  
  3728. Ant.ReducedInterpolationDistance 10.0
  3729. Ant.TrajectoryOnlyInterpolationDistance 100.0
  3730. Ant.CheckGiantSoldiers 0.0
  3731.  
  3732.  
  3733. Customization.dropGearVelocityScale 0.7
  3734.  
  3735. Core.Heartbeat          false
  3736. Core.HeartbeatInterval  2
  3737.  
  3738. Core.HardwareProfile Hardware_AutoDetect
  3739.  
  3740. // Protocol version for retail consoles are set in an if-statement further down. This entry remains to make it possible to change ProtocolVersion from the builds systems.
  3741. Network.ProtocolVersion 61
  3742.  
  3743. Network.TitleId 5
  3744. Network.ClientPort 25100
  3745. Network.ServerPort 25200
  3746. Network.MaxGhostCount 8192
  3747. Network.MaxClientCount 64
  3748. Network.UseFrameManager true
  3749. Network.MaxServerFrameSize 2048
  3750. //Network.MaxClientFrameSize 2048
  3751.  
  3752. //Network.ClientConnectionDebugFilePrefix client
  3753. //Network.ServerConnectionDebugFilePrefix server
  3754.  
  3755. //Demo.TimeDemo demos/perf/demo0
  3756. //Demo.PauseOnStartup true
  3757. //Demo.StartProfilingOnFrame 400
  3758. //Demo.StopProfilingOnFrame 600
  3759. //Demo.LockToPlayerName JLORD1
  3760. //Demo.ForcedDeltaTickCount 0
  3761. //Demo.RecordDemoFileName demos/perf/demo0
  3762. //Demo.PlaybackDemoFileName demos/perf/demo0
  3763.  
  3764. GameSettings.MaxPlayerCount 64
  3765. GameSettings.MaxSpectatorCount 4
  3766.  
  3767. Game.CurrentSKU WW
  3768. Core.AvailableLanguages *
  3769.  
  3770. VeniceOnline.PunkBusterActivateServer false
  3771. VeniceOnline.PunkBusterActivateClient false
  3772. VeniceOnline.ServiceNameOverride null
  3773. VeniceOnline.ClientGameConfigurationOverride null
  3774.  
  3775. Client.IsPresenceEnabled true
  3776. Server.IsPresenceEnabled true
  3777. Online.Environment OnlineEnvironment_Production
  3778. VeniceOnline.BlazeLogLevel 1
  3779.  
  3780. // TEMPORARY SETTINGS. NOT FOR RETAIL (but certainly for Alpha Trial)
  3781. BFServer.PingSite iad
  3782. blaze-connecting-messages true
  3783. LanServerBackend.fakeStatsDownload true
  3784.  
  3785. ]=]
  3786.  
  3787. if platform == \'Win32\' then
  3788. applySettings [=[
  3789.     ShaderSystem.MaxAnisotropy 4
  3790.  
  3791.     Client.LoadMenu 0
  3792.     Client.IgnoreClientFireRateMultiplier true
  3793.  
  3794.     Blaze.ClientAutoAccountCreation true       
  3795.    
  3796.     VisualTerrain.VertexBufferHeightsEnable 0
  3797.     VisualTerrain.MeshScatteringInvisibleCellFovFactor 1
  3798.     VisualTerrain.PatchSlotCount 736
  3799.     VisualTerrain.MeshScatteringInstancesPerCellMax 4096
  3800.        
  3801.     # Due to differences in codecs and data sizes on Win32 compared to console this needs to be quite big
  3802.     Audio.WaveCacheSize 104857600
  3803.     Audio.WaveCacheHeadroom 5242880
  3804.     Audio.WaveCachePruneTimeLimit 0.0f
  3805.     Audio.DelayLineAllocSize 5242880
  3806.  
  3807.     WorldRender.SpotLightShadowmapEnable 1
  3808.     WorldRender.SpotLightShadowmapResolution 1024
  3809.  
  3810.     # we need to use fullres lensflares on PCs to make sure lensflares are rendered _after_ transparent foreground surfaces
  3811.     # related to http://frostbite.ea.com:8080/browse/BFIII-14492
  3812.     WorldRender.HalfResLensFlaresEnable 0
  3813.  
  3814.     RenderDevice.NvidiaMinDriverVersion 28538
  3815.     RenderDevice.AmdMinDriverVersion 11.7
  3816.     RenderDevice.MinDriverRequired 1
  3817.        
  3818.     # average method instead of minimum
  3819.     Render.DrawFpsMethod 1
  3820.    
  3821. ]=]
  3822.  
  3823.     local onlineEnvironment = cmdLineOption(\'onlineEnvironment\')
  3824.     if onlineEnvironment then
  3825.         onlineEnvironment = string.lower(onlineEnvironment)
  3826.     end
  3827.     if onlineEnvironment == "dev" then
  3828.         applySettings [=[
  3829.             Online.Environment OnlineEnvironment_Development
  3830.         ]=]
  3831.     elseif onlineEnvironment == "test" then
  3832.         applySettings [=[
  3833.             Online.Environment OnlineEnvironment_Test
  3834.         ]=]
  3835.     end    
  3836.  
  3837.     local webMode = commandLine:lookup("webmode")
  3838.     if webMode then
  3839.         webMode = string.lower(webMode)
  3840.     end
  3841.  
  3842.     if webMode == "sp" then
  3843.         applySettings [=[
  3844.             VeniceOnline.EnableSnowroller 1
  3845.             VeniceOnline.EnableQoS false
  3846.             Game.Level Levels/Web_Loading/Web_Loading
  3847.             Window.Minimized 1
  3848.             // TODO - Show intro movie once, and go directly to campain menu
  3849.         ]=]
  3850.    
  3851.     elseif webMode == "spoffline" then
  3852.         applySettings [=[
  3853.             Game.Level Levels/FrontEnd/FrontEnd
  3854.             // TODO - Always show intro movie
  3855.         ]=]
  3856.    
  3857.     elseif webMode == "coop" then
  3858.         applySettings [=[
  3859.             VeniceOnline.EnableSnowroller 1
  3860.             VeniceOnline.EnableQoS true
  3861.             Game.Level Levels/Web_Loading/Web_Loading
  3862.             Client.QuitGameOnServerDisconnect true
  3863.             Window.Minimized 1
  3864.            
  3865.             // TODO - Prune these
  3866.             blaze-connecting-messages true
  3867.             Blaze.ClientAutoAccountCreation true
  3868.         ]=]
  3869.    
  3870.     elseif webMode == "mp" then
  3871.         applySettings [=[
  3872.             VeniceOnline.EnableSnowroller 1
  3873.             VeniceOnline.EnableQoS false
  3874.             Game.Level Levels/Web_Loading/Web_Loading
  3875.             Client.QuitGameOnServerDisconnect true
  3876.             Window.Minimized 1
  3877.  
  3878.             // TODO - Prune these
  3879.             blaze-connecting-messages true
  3880.             Blaze.ClientAutoAccountCreation true
  3881.         ]=]
  3882.  
  3883.     else
  3884.         webMode = nil
  3885.     end
  3886.  
  3887.     -- Common webMode options.
  3888.     if webmode then
  3889.         applySettings [=[
  3890.             Core.DisplayAsserts 0
  3891.             Window.Minimized 1
  3892.         ]=]
  3893.     end
  3894. end
  3895.  
  3896.  
  3897. if platform == \'Ps3\' or platform == \'Xenon\' then
  3898. applySettings [=[
  3899.  
  3900.     Client.VSyncEnable 1
  3901.  
  3902.     Ant.MaxInterpolationSlots 32
  3903.  
  3904.     Audio.DelayLineAllocSize 1572864
  3905.  
  3906.     # saves 10 mb of memory on xenon
  3907.     UI.ScreenshotEnable 0
  3908.    
  3909.     Decal.RingBufferMaxVertexCount 8192
  3910.     Decal.StaticBufferMaxVertexCount 16384
  3911.        
  3912.     MeshStreaming.MaxPendingLoadCount 2
  3913.     TextureStreaming.MaxPendingLoadCount 2
  3914.     TextureStreaming.MaxMipmapCount 13
  3915.     TextureStreaming.DefragFrameTransferLimit 1500
  3916.    
  3917.     Network.MaxClientCount 24      
  3918.  
  3919.     WorldRender.ShadowmapAccumEnable 1
  3920.     WorldRender.ShadowmapResolution 608
  3921.     WorldRender.ShadowmapSliceCount 4
  3922.     WorldRender.ShadowmapQuality 1
  3923.  
  3924.     WorldRender.SpotLightShadowmapEnable 1
  3925.     WorldRender.SpotLightShadowmapResolution 512
  3926.    
  3927.     VisualTerrain.LodScale 0.5
  3928.     VisualTerrain.TextureLevelOffset 2
  3929. ]=]
  3930. end
  3931.  
  3932. if platform == \'Ps3\' then
  3933. applySettings [=[
  3934.  
  3935.     TextureStreaming.PoolSize 40000
  3936.     MeshStreaming.PoolSize 50000
  3937.     MeshStreaming.Ps3CellPoolSize 18000
  3938.  
  3939.     VegetationSystem.MaxActiveDistance 200
  3940.  
  3941.     Occlusion.MaxTriangleCount 5000
  3942.  
  3943.     Audio.WaveCacheSize 8925184
  3944.     Audio.WaveCacheHeadroom 131072
  3945.     Audio.WaveCacheRsxSize 20971520
  3946.     Audio.WaveCachePruneTimeLimit 0.0f
  3947.     Audio.WaveCacheRsxPruneTimeLimit 0.0f
  3948.    
  3949.     # ShaderSystem.FrameMemoryBufferSize 3670016
  3950.     ShaderSystem.FrameMemoryBufferSize 5000000
  3951.    
  3952.     Render.Ps3FrameLocalBufferSize 6291456
  3953.     Render.Ps3FrameMainBufferSize 6291456
  3954.     PostProcess.Ps3EdgeMlaaEnable 1
  3955.    
  3956.     Render.Ps3Res1280x704Enable 1
  3957.    
  3958.     GameTime.VSyncSubtractTime 1.0f
  3959. ]=]
  3960.  
  3961.     local superbundles = cmdLineOption(\'super\')
  3962.     if not superbundles then
  3963.         applySettings [=[
  3964.         # Enable DVD emulation when running from Avalanche.
  3965.         Core.HttpDvdSimulation 1
  3966.         Core.HttpDvdSeekPenalty 200
  3967.  
  3968.         # Move textures/meshes to the third streaming lane to remove DVD penalties for them
  3969.         TurboLoader.SoakHddIo 2
  3970.     ]=]
  3971.     end
  3972. end
  3973.  
  3974. if platform == \'Xenon\' then
  3975. applySettings [=[
  3976.  
  3977.     Render.XenonRingBufferSize 2621440
  3978.  
  3979.     VegetationSystem.MaxActiveDistance 100
  3980.  
  3981.     TextureStreaming.PoolSize 50000
  3982.     MeshStreaming.PoolSize 40000
  3983.  
  3984.     MeshStreaming.XenonFinalPoolSizeAdjustment 1000
  3985.     MeshStreaming.XenonRetailPoolSizeAdjustment 1000
  3986.     TextureStreaming.XenonFinalPoolSizeAdjustment 0
  3987.     TextureStreaming.XenonRetailPoolSizeAdjustment 15000
  3988.  
  3989.     Occlusion.MaxTriangleCount 5000
  3990.  
  3991.     Audio.WaveCacheSize 26214400
  3992.     Audio.WaveCacheHeadroom 65536
  3993.     Audio.WaveCachePruneTimeLimit 0.0f
  3994.  
  3995.     ShaderSystem.FrameMemoryBufferSize 6000000
  3996.     ShaderSystem.XenonDispatchCmdBufferSize 1048576
  3997.  
  3998.     WorldRender.XenonOutdoorLightTilingEnable 1
  3999.     WorldRender.FxaaEnable 1
  4000.    
  4001.     VisualTerrain.VertexBufferHeightsEnable 0
  4002.    
  4003.     PostProcess.LUTGammaR 1.3
  4004.     PostProcess.LUTGammaG 1.3
  4005.     PostProcess.LUTGammaB 1.3
  4006.     PostProcess.LUTGammaCurbOffset 0.1
  4007.    
  4008. ]=]
  4009.  
  4010.     local superbundles = cmdLineOption(\'super\')
  4011.     if superbundles then
  4012.         applySettings [=[
  4013.             #temporary disable all free streaming on xbox until the hd install flow is finished, that way we can still create the hd superbundle and thus make sure to fit on disc
  4014.             #Game.ForceDisableFreeStreaming true
  4015.         ]=]
  4016.     else
  4017.         applySettings [=[
  4018.             # Enable DVD emulation when running from Avalanche.
  4019.             Core.HttpDvdSimulation 1
  4020.             Core.HttpDvdSeekPenalty 200
  4021.             # Move textures/meshes to the third streaming lane to remove DVD penalties for them
  4022.             TurboLoader.SoakHddIo 2
  4023.         ]=]
  4024.     end
  4025. end
  4026.  
  4027.  
  4028. local level = cmdLineOption(\'level\')
  4029. if level then
  4030.     log:debug("Level specified on commandline, enabling fast startup")
  4031.  
  4032.     -- Level names without slashes are assumed to be shorthand for
  4033.     -- Levels/name/name to go with Venice\'s epic level naming convention
  4034.     if not string.find(level, "/") then
  4035.         level = "Levels/" .. level .. "/" .. level
  4036.     end
  4037.  
  4038.     Game.Level = level
  4039. end
  4040.  
  4041. if config:lower() == \'retail\' then
  4042.     if platform:lower() == \'ps3\' then
  4043.         applySettings [=[
  4044.             Network.ProtocolVersion 1000
  4045.         ]=]
  4046.     end
  4047.     if platform:lower() == \'xenon\' then
  4048.         applySettings [=[
  4049.             Network.ProtocolVersion 2000
  4050.         ]=]
  4051.     end
  4052. end
  4053.  
  4054. local dedicatedServer = cmdLineOption(\'dedicated\')
  4055. if dedicatedServer then
  4056.     applySettings [=[
  4057.         #HACK: We need to set a level that always exists on the server, unfortunatley there is no such level so we just pick subway...
  4058.         Game.Level Levels/MP_Subway/MP_Subway
  4059.         Game.DefaultLayerInclusion GameMode=ConquestSmall0
  4060.    
  4061.         Server.ThreadingEnable false
  4062.         Ant.EnableJobs false
  4063.  
  4064.         ServerMetrics.Enabled false
  4065.         ServerMetrics.TransactionTelemetryEnabled true
  4066.  
  4067.         ServerMetrics.PerformanceTelemetryEnabled true
  4068.         ServerMetrics.PerformanceProfileStateEnabled true
  4069.     ]=]
  4070.    
  4071.  
  4072.     local protocolVersionCmd = cmdLineOption(\'protocolVersion\')
  4073.     if protocolVersionCmd then
  4074.         Network.ProtocolVersion = protocolVersionCmd
  4075.    
  4076.     else
  4077.         local platformCmd = cmdLineOption(\'platform\')
  4078.         local usingSuperBundles = cmdLineOption(\'super\')
  4079.         if platformCmd and usingSuperBundles then
  4080.             if platformCmd:lower() == \'ps3\' then
  4081.                 Network.ProtocolVersion = \'1000\'
  4082.             elseif platformCmd:lower() == \'xenon\' then
  4083.                 Network.ProtocolVersion = \'2000\'
  4084.             elseif platformCmd:lower() == \'win32\' then
  4085.                 Network.ProtocolVersion = \'61\'
  4086.             end
  4087.         end
  4088.     end
  4089. end
  4090. '>}},
  4091.  {'$file': {'name': 'Scripts/Local.cfg',
  4092.             'payload': <Blob "// Try and not add things to game.cfg if it's not meant to be checked in!
  4093. // Add here settings that you would like to override
  4094.  
  4095.  
  4096. //
  4097. ">}},
  4098.  {'$file': {'name': 'Scripts/LocalE3Win32.cfg',
  4099.             'payload': <Blob 'Client.DrawFps 0
  4100. ShaderSystem.DrawStats 0
  4101. Client.DrawObjectLimits 0
  4102. Core.DisplayAsserts 0
  4103. Window.Fullscreen 1
  4104. Core.MemoryStatsEnabled 0
  4105.  
  4106. -- Should be on for SP Levels
  4107. -- GameTime.ForceDeltaTickCount 1
  4108.  
  4109. -- Uncomment line below to remove all logging and prevent harmful log spam during MP test
  4110. -- Core.LogLevel CllFatalAssert
  4111.  
  4112.  
  4113.  
  4114. -- In case of emergency
  4115.  
  4116. -- WorldRender.TransparencyShadowmapsEnable 1
  4117. -- WorldRender.ShadowmapViewDistance 200
  4118. -- WorldRender.ShadowmapResolution 2048
  4119. -- WorldRender.ShadowmapQuality 1
  4120. -- WorldRender.ShadowmapViewDistance 100
  4121. -- WorldRender.FxaaEnable 1
  4122. -- WorldRender.MotionBlurEnable 1
  4123. -- PostProcess.DynamicAOEnable 1
  4124.  
  4125. -- WorldRender.MultisampleCount 4
  4126. '>}},
  4127.  {'$file': {'name': 'Scripts/LocalEditor.cfg',
  4128.             'payload': <Blob "// Try and not add things to game.cfg if it's not meant to be checked in!
  4129. // Add here settings that you would like to override
  4130. // This file is executed when Frostbite is launched from FrostEd
  4131. ">}},
  4132.  {'$file': {'name': 'Scripts/LocalGame.cfg',
  4133.             'payload': <Blob "// Try and not add things to game.cfg if it's not meant to be checked in!
  4134. // Add here settings that you would like to override
  4135. // This file is executed when Frostbite is executed separately (i.e not from FrostEd)
  4136. ">}},
  4137.  {'$file': {'name': 'Scripts/PlaytestCommon.cfg',
  4138.             'payload': <Blob 'client-matchmaking-map0           paris_line2
  4139. client-matchmaking-map1           mp_berlin
  4140. blaze-server-state-change-logging true
  4141.  
  4142. ShaderSystem.Dx10DelayedShaderLoadingEnable false
  4143.  
  4144. Game.Level            Levels/GarrisonTest/GarrisonTest
  4145.  
  4146. Game.HasUnlimitedMags           false
  4147.  
  4148. Core.EnableJuice true
  4149. Core.EnableBitstreamTypeVerification false
  4150. Core.JuiceUserType      jutDev
  4151. Core.AssertLimit 5
  4152.  
  4153. Client.IsPresenceEnabled          true
  4154. Client.SecondaryServerIp          10.20.102.69
  4155. Client.MemoryStatsEnabled false
  4156. Server.IsPresenceEnabled          false
  4157.  
  4158. //Client.LoadingTimeout 240
  4159. //Client.LoadedTimeout  60
  4160. //Client.IngameTimeout  15
  4161. //Server.IngameTimeout  30
  4162. //Server.LoadingTimeout 60
  4163.  
  4164. // Internet simulation (only active in multiplayer)
  4165. Client.MinLatency                 0.1
  4166. Client.MaxLatency                 0.1
  4167.  
  4168. RenderDevice.NvidiaMinDriverRequired false
  4169.  
  4170. // Online.MatchmakeImmediately true
  4171. // Online.MatchmakingToken fooo
  4172. Online.BlazeWalUrl 10.20.102.120:1246
  4173. Online.EnableSnowroller true
  4174. Online.SnowrollerOrphanTimeout 10
  4175.  
  4176. LanServerBackend.fakeStatsDownload true
  4177. blaze-offline-notification true
  4178.  
  4179. // Game.EnableSurveys   true
  4180.  
  4181. // Client.IncomingRate 512000
  4182. // Server.OutgoingRate 512000
  4183.  
  4184. Client.IncomingRate 150000
  4185. Server.OutgoingRate 150000
  4186. Network.TimeNudgeGhostFrequencyFactor 0
  4187.  
  4188. Network.UseFrameManager true
  4189. // Network.MaxServerFrameSize 4096
  4190. Network.MaxServerFrameSize 2048
  4191. // Physics.SingleStepCharacter false
  4192.  
  4193. // Window.Fullscreen true
  4194. Window.FullscreenAutosize true
  4195.  
  4196. UIScreenshotComp.SceenshotInfos bighead,558,11,743,195,40,40;smallhead,558,11,743,195,18,18;smallupper,430,0,894,464,122,106;home_my_soldier,141,14,396,236,210,187;bigupper,430,0,894,464,290,252;full,362,0,902,800,250,371;
  4197.  
  4198.  
  4199. // Player.zeroRespawnTimeOnSuicide true
  4200.  
  4201. FragalyzerRecorder.StartAutoTrackOnSquadCreate true
  4202.  
  4203. DebugRender.TextQueueMaxLineCount 3
  4204.  
  4205. Player.ignoreLevelWarmUpTimers true
  4206.  
  4207. Core.HardwareCpuBias -1
  4208. Core.HardwareGpuBias -0.5
  4209.  
  4210. Network.TimeNudgeBias 0.05
  4211.  
  4212. Core.DialogLevel 9
  4213.  
  4214. UIScreenshotComp.ScreenshotInfos bighead,558,11,743,195,40,40;smallhead,558,11,743,195,18,18;smallupper,430,0,894,464,122,106;home_my_soldier,141,14,396,236,210,187;bigupper,430,0,894,464,290,252;full,362,0,902,800,250,371;
  4215.  
  4216. Core.Heartbeat          true
  4217. Core.HeartbeatInterval  30
  4218.  
  4219. // for when using the beta.venice.dice.se site
  4220. // Server.BlazeServiceName bf3-beta-2009-pc
  4221.  
  4222. // newline
  4223. '>}},
  4224.  {'$file': {'name': 'Scripts/PlaytestLocal.cfg',
  4225.             'payload': <Blob 'Game.HasUnlimitedMags true
  4226. Explosion.TriggerMaskVolumes true
  4227. Ant.ForceLodDistance 0
  4228. SoldierTest.spawnEnabled true
  4229. SoldierTest.scriptsEnabled true'>}},
  4230.  {'$file': {'name': 'Scripts/PlaytestServer.cfg',
  4231.             'payload': <Blob '//Server Level
  4232. #Game.Level     Levels/Level_01/Level_01
  4233. Game.Level      Levels/Level_02/Level_02
  4234. #Game.Level     Levels/Level_03/Level_03
  4235. #Game.Level     Levels/Level_04/Level_04
  4236. #Game.Level     Levels/Level_05/Level_05
  4237. #Game.Level     Levels/Level_06/Level_06
  4238. Game.Level      Levels/Testrange_Rome_MP05/Testrange_Rome_MP05
  4239.  
  4240. //Game mode (16/64 player)
  4241. #Game.DefaultLayerInclusion       StartupMode=Game;GameMode=ConquestSmall
  4242. Game.DefaultLayerInclusion        StartupMode=Game;GameMode=KingOfTheHill
  4243. #Game.DefaultLayerInclusion       StartupMode=Game;GameMode=ConquestLarge
  4244.  
  4245. Network.MaxClientCount 24
  4246. GameSettings.MaxPlayerCount 24
  4247.  
  4248. Server.IsPresenceEnabled          true
  4249. Server.QueryPortOffset            100
  4250. Core.DisplayAsserts     false
  4251. CrashDump.WarnBeforeDoingMemoryDump false
  4252.  
  4253. // Allow players to spawn even if server blaze connection is down
  4254. Server.statisticsFallback true
  4255.  
  4256. ServerMetrics.Enabled true
  4257. ServerMetrics.PerformanceProfileStateEnabled true
  4258. ServerMetrics.PerformanceTelemetryEnabled true
  4259.  
  4260. // Internet simulation (only active in multiplayer)
  4261. Server.MinLatency                 0.1
  4262. Server.MaxLatency                 0.1
  4263.  
  4264. Demo.RecordDemoFilename demo/PlaytestRecording0
  4265. Demo.AllowOverwrite false
  4266.  
  4267. GameReport.DebugOutput true
  4268.  
  4269. # Server.Playlist Level_01_only
  4270. Server.forcePlaylist false
  4271. Server.forceStartMapOnLoad false
  4272. Game.DisablePreRound false
  4273.  
  4274. # SoldierTest.spawnEnabled true
  4275. # SoldierTest.scriptsEnabled true
  4276.  
  4277. // Just to remember the newline'>}},
  4278.  {'$file': {'name': 'Scripts/ProtocolVersion.cfg',
  4279.             'payload': <Blob 'Network.Version           "V0.74"
  4280. Network.ProtocolVersion                       74
  4281. '>}},
  4282.  {'$file': {'name': 'Scripts/PS3Game.cfg',
  4283.             'payload': <Blob '-url http://10.20.108.7:1338 -host 10.20.108.7 -branch VeniceRetailPc
  4284. '>}},
  4285.  {'$file': {'name': 'Scripts/TestLevel.cfg',
  4286.             'payload': <Blob 'Game.FastStartupEnable            true
  4287. Game.Level                        ../EditorLevels/TestLevel
  4288. Server.IsAiEnabled                false
  4289. Server.IsGodMode                  true
  4290. UI.HudEnable                      false
  4291. '>}},
  4292.  {'$file': {'name': 'Scripts/XenonGame.cfg',
  4293.             'payload': <Blob '-url http://10.20.108.7:1338 -host 10.20.108.7 -branch VeniceRetailPc
  4294. '>}},
  4295.  {'$file': {'name': 'Scripts/Debug/cycleMpLevels',
  4296.             'payload': <Blob 'Core.LogLevel FatalAssert
  4297.  
  4298. server.loadLevel Levels/MP_001/MP_001
  4299. sleep 60
  4300. server.restartLevel
  4301. sleep 60
  4302. server.endRound 0
  4303. sleep 60
  4304. server.endRound 1
  4305. sleep 60
  4306.  
  4307. server.loadLevel Levels/MP_003/MP_003
  4308. sleep 60
  4309. server.restartLevel
  4310. sleep 60
  4311. server.endRound 0
  4312. sleep 60
  4313. server.endRound 1
  4314. sleep 60
  4315.  
  4316. server.loadLevel Levels/MP_007/MP_007
  4317. sleep 60
  4318. server.restartLevel
  4319. sleep 60
  4320. server.endRound 0
  4321. sleep 60
  4322. server.endRound 1
  4323. sleep 60
  4324.  
  4325. server.loadLevel Levels/MP_011/MP_011
  4326. sleep 60
  4327. server.restartLevel
  4328. sleep 60
  4329. server.endRound 0
  4330. sleep 60
  4331. server.endRound 1
  4332. sleep 60
  4333.  
  4334. server.loadLevel Levels/MP_012/MP_012
  4335. sleep 60
  4336. server.restartLevel
  4337. sleep 60
  4338. server.endRound 0
  4339. sleep 60
  4340. server.endRound 1
  4341. sleep 60
  4342.  
  4343. server.loadLevel Levels/MP_013/MP_013
  4344. sleep 60
  4345. server.restartLevel
  4346. sleep 60
  4347. server.endRound 0
  4348. sleep 60
  4349. server.endRound 1
  4350. sleep 60
  4351.  
  4352. server.loadLevel Levels/MP_017/MP_017
  4353. sleep 60
  4354. server.restartLevel
  4355. sleep 60
  4356. server.endRound 0
  4357. sleep 60
  4358. server.endRound 1
  4359. sleep 60
  4360.  
  4361. server.loadLevel Levels/MP_018/MP_018
  4362. sleep 60
  4363. server.restartLevel
  4364. sleep 60
  4365. server.endRound 0
  4366. sleep 60
  4367. server.endRound 1
  4368. sleep 60
  4369.  
  4370. server.loadLevel Levels/MP_Subway/MP_Subway
  4371. sleep 60
  4372. server.restartLevel
  4373. sleep 60
  4374. server.endRound 0
  4375. sleep 60
  4376. server.endRound 1
  4377. sleep 60
  4378.  
  4379. main.playCommands Scripts/Debug/cycleMpLevels
  4380. '>}},
  4381.  {'$file': {'name': 'Scripts/Debug/cycleSpLevels',
  4382.             'payload': <Blob 'Core.LogLevel FatalAssert
  4383.  
  4384. server.loadLevel Levels/SP_New_York/SP_New_York
  4385. sleep 60
  4386. server.restartLevel
  4387. sleep 240
  4388. client.restartFromLastCheckpoint
  4389. sleep 60
  4390.  
  4391. server.loadLevel Levels/SP_Earthquake/SP_Earthquake
  4392. sleep 60
  4393. server.restartLevel
  4394. sleep 180
  4395. client.restartFromLastCheckpoint
  4396. sleep 60
  4397.  
  4398. server.loadLevel Levels/SP_Earthquake2/SP_Earthquake2
  4399. sleep 60
  4400. server.restartLevel
  4401. sleep 180
  4402. client.restartFromLastCheckpoint
  4403. sleep 60
  4404.  
  4405. server.loadLevel Levels/SP_Jet/SP_Jet
  4406. sleep 60
  4407. server.restartLevel
  4408. sleep 180
  4409. client.restartFromLastCheckpoint
  4410. sleep 60
  4411.  
  4412. server.loadLevel Levels/SP_Bank/SP_Bank
  4413. sleep 60
  4414. server.restartLevel
  4415. sleep 180
  4416. client.restartFromLastCheckpoint
  4417. sleep 60
  4418.  
  4419. server.loadLevel Levels/SP_Paris/SP_Paris
  4420. sleep 60
  4421. server.restartLevel
  4422. sleep 180
  4423. client.restartFromLastCheckpoint
  4424. sleep 60
  4425.  
  4426. server.loadLevel Levels/SP_Tank/SP_Tank
  4427. sleep 60
  4428. server.restartLevel
  4429. sleep 180
  4430. client.restartFromLastCheckpoint
  4431. sleep 60
  4432.  
  4433. server.loadLevel Levels/SP_Tank_b/SP_Tank_b
  4434. sleep 60
  4435. server.restartLevel
  4436. sleep 180
  4437. client.restartFromLastCheckpoint
  4438. sleep 60
  4439.  
  4440. server.loadLevel Levels/SP_Sniper/SP_Sniper
  4441. sleep 60
  4442. server.restartLevel
  4443. sleep 180
  4444. client.restartFromLastCheckpoint
  4445. sleep 60
  4446.  
  4447. server.loadLevel Levels/SP_Valley/SP_Valley
  4448. sleep 60
  4449. server.restartLevel
  4450. sleep 180
  4451. client.restartFromLastCheckpoint
  4452. sleep 60
  4453.  
  4454. server.loadLevel Levels/SP_Villa/SP_Villa
  4455. sleep 60
  4456. server.restartLevel
  4457. sleep 180
  4458. client.restartFromLastCheckpoint
  4459. sleep 60
  4460.  
  4461. server.loadLevel Levels/SP_Finale/SP_Finale
  4462. sleep 60
  4463. server.restartLevel
  4464. sleep 180
  4465. client.restartFromLastCheckpoint
  4466. sleep 60
  4467.  
  4468. main.playCommands Scripts/Debug/cycleSpLevels'>}},
  4469.  {'$file': {'name': 'Scripts/Debug/cycleSpLevelsViaMainMenu',
  4470.             'payload': <Blob 'Core.LogLevel FatalAssert
  4471.  
  4472. server.loadLevel Levels/SP_New_York/SP_New_York
  4473. sleep 60
  4474. server.restartLevel
  4475. sleep 240
  4476. client.restartFromLastCheckpoint
  4477. sleep 60
  4478. server.loadLevel Levels/FrontEnd/FrontEnd
  4479. sleep 30
  4480.  
  4481. server.loadLevel Levels/SP_Earthquake/SP_Earthquake
  4482. sleep 60
  4483. server.restartLevel
  4484. sleep 180
  4485. client.restartFromLastCheckpoint
  4486. sleep 60
  4487. server.loadLevel Levels/FrontEnd/FrontEnd
  4488. sleep 30
  4489.  
  4490. server.loadLevel Levels/SP_Earthquake2/SP_Earthquake2
  4491. sleep 60
  4492. server.restartLevel
  4493. sleep 180
  4494. client.restartFromLastCheckpoint
  4495. sleep 60
  4496. server.loadLevel Levels/FrontEnd/FrontEnd
  4497. sleep 30
  4498.  
  4499. server.loadLevel Levels/SP_Jet/SP_Jet
  4500. sleep 60
  4501. server.restartLevel
  4502. sleep 180
  4503. client.restartFromLastCheckpoint
  4504. sleep 60
  4505. server.loadLevel Levels/FrontEnd/FrontEnd
  4506. sleep 30
  4507.  
  4508. server.loadLevel Levels/SP_Bank/SP_Bank
  4509. sleep 60
  4510. server.restartLevel
  4511. sleep 180
  4512. client.restartFromLastCheckpoint
  4513. sleep 60
  4514. server.loadLevel Levels/FrontEnd/FrontEnd
  4515. sleep 30
  4516.  
  4517. server.loadLevel Levels/SP_Paris/SP_Paris
  4518. sleep 60
  4519. server.restartLevel
  4520. sleep 180
  4521. client.restartFromLastCheckpoint
  4522. sleep 60
  4523. server.loadLevel Levels/FrontEnd/FrontEnd
  4524. sleep 30
  4525.  
  4526. server.loadLevel Levels/SP_Tank/SP_Tank
  4527. sleep 60
  4528. server.restartLevel
  4529. sleep 180
  4530. client.restartFromLastCheckpoint
  4531. sleep 60
  4532. server.loadLevel Levels/FrontEnd/FrontEnd
  4533. sleep 30
  4534.  
  4535. server.loadLevel Levels/SP_Tank_b/SP_Tank_b
  4536. sleep 60
  4537. server.restartLevel
  4538. sleep 180
  4539. client.restartFromLastCheckpoint
  4540. sleep 60
  4541. server.loadLevel Levels/FrontEnd/FrontEnd
  4542. sleep 30
  4543.  
  4544. server.loadLevel Levels/SP_Sniper/SP_Sniper
  4545. sleep 60
  4546. server.restartLevel
  4547. sleep 180
  4548. client.restartFromLastCheckpoint
  4549. sleep 60
  4550. server.loadLevel Levels/FrontEnd/FrontEnd
  4551. sleep 30
  4552.  
  4553. server.loadLevel Levels/SP_Valley/SP_Valley
  4554. sleep 60
  4555. server.restartLevel
  4556. sleep 180
  4557. client.restartFromLastCheckpoint
  4558. sleep 60
  4559. server.loadLevel Levels/FrontEnd/FrontEnd
  4560. sleep 30
  4561.  
  4562. server.loadLevel Levels/SP_Villa/SP_Villa
  4563. sleep 60
  4564. server.restartLevel
  4565. sleep 180
  4566. client.restartFromLastCheckpoint
  4567. sleep 60
  4568. server.loadLevel Levels/FrontEnd/FrontEnd
  4569. sleep 30
  4570.  
  4571. server.loadLevel Levels/SP_Finale/SP_Finale
  4572. sleep 60
  4573. server.restartLevel
  4574. sleep 180
  4575. client.restartFromLastCheckpoint
  4576. sleep 60
  4577. server.loadLevel Levels/FrontEnd/FrontEnd
  4578. sleep 30
  4579.  
  4580. main.playCommands Scripts/Debug/cycleSpLevelsViaMainMenu'>}},
  4581.  {'$file': {'name': 'Scripts/Debug/eorLevel',
  4582.             'payload': <Blob 'Core.LogLevel FatalAssert
  4583.  
  4584. server.endRound 1
  4585. sleep 90
  4586.  
  4587. main.playCommands Scripts/Debug/eorLevel'>}},
  4588.  {'$file': {'name': 'Scripts/Debug/joinMultiplayer',
  4589.             'payload': <Blob 'client.joinMultiplayer 10.20.104.109
  4590. sleep 60
  4591. client.exitGame
  4592. sleep 30
  4593.  
  4594. main.playCommands Scripts/Debug/joinMultiplayer'>}},
  4595.  {'$file': {'name': 'Scripts/Debug/restartCheckpoint',
  4596.             'payload': <Blob 'Core.LogLevel FatalAssert
  4597.  
  4598. client.restartFromLastCheckpoint
  4599. sleep 30
  4600.  
  4601. main.playCommands Scripts/Debug/restartCheckpoint'>}},
  4602.  {'$file': {'name': 'Scripts/Debug/restartLevel',
  4603.             'payload': <Blob 'Core.LogLevel FatalAssert
  4604.  
  4605. server.restartLevel
  4606. sleep 60
  4607.  
  4608. main.playCommands Scripts/Debug/restartLevel'>}},
  4609.  {'$file': {'name': 'Scripts/Debug/stressEnterAndDestroyVehicles',
  4610.             'payload': <Blob 'Core.LogLevel FatalAssert
  4611.  
  4612. server.spawnsoldier 0 1 0
  4613. server.spawnsoldier 0 1 0
  4614. server.spawnsoldier 0 2 0
  4615. server.spawnsoldier 0 2 0
  4616. server.spawnsoldier 0 2 0
  4617. sleep 1
  4618.  
  4619. server.playerEnterClosestVehicle 1 true
  4620. server.playerEnterClosestVehicle 2 true
  4621. server.playerEnterClosestVehicle 3 true
  4622. server.playerEnterClosestVehicle 4 true
  4623. server.playerEnterClosestVehicle 5 true
  4624. sleep 1
  4625.  
  4626. server.damageSoldier 1 2000 true
  4627. server.damageSoldier 2 2000 true
  4628. server.damageSoldier 3 2000 true
  4629. server.damageSoldier 4 2000 true
  4630. server.damageSoldier 5 2000 true
  4631. sleep 3
  4632.  
  4633. server.deletePlayer 1
  4634. server.deletePlayer 2
  4635. server.deletePlayer 3
  4636. server.deletePlayer 4
  4637. server.deletePlayer 5
  4638. sleep 2
  4639.  
  4640. main.playCommands Scripts/Debug/stressEnterAndDestroyVehicles'>}}]
  4641.  
  4642.  
Advertisement
Add Comment
Please, Sign In to add comment