state("gk") { // nothing to do here; we need to grab the pointers ourselves instead of hardcoding them } // Runs once, the only place you can add custom settings, before the process is connected to! startup { // NOTE: Enable Log Output Action DebugOutput = (text, setting) => { if (setting) { print("[OpenGOAL] " + text); } }; vars.DebugOutput = DebugOutput; Action>, string, int, Type, dynamic, bool, string, bool> AddOption = (list, id, offset, type, splitVal, defaultEnabled, name, debug) => { var d = new Dictionary(); d.Add("id", id); d.Add("offset", offset); d.Add("type", type); d.Add("splitVal", splitVal); d.Add("defaultEnabled", defaultEnabled); d.Add("name", name); d.Add("debug", debug); list.Add(d); }; Action AddToSettings = (options, parent) => { foreach (Dictionary option in options) { settings.Add(option["id"], option["defaultEnabled"], option["name"], parent); } }; settings.Add("asl_settings", true, "Autosplitter Settings"); settings.Add("asl_settings_debug", false, "Enable Debug Logs", "asl_settings"); vars.optionLists = new List>>(); vars.endingConditions = new List>(); AddOption(vars.endingConditions, "endingConditions_errol-death", 12, typeof(byte), 1, true, "Errol Death", false); AddOption(vars.endingConditions, "endingConditions_all-collectables", 13, typeof(byte), 1, false, "All Collectables", false); AddOption(vars.endingConditions, "endingConditions_all-orbs", 4, typeof(uint), 600, false, "All Orbs", false); settings.Add("group_endingConditions", true, "Ending Conditions"); AddToSettings(vars.endingConditions, "group_endingConditions"); // NOTE: This section is autogenerated. Do not edit it directly. // __AUTOGENERATED__ START vars.anyPercent = new List>(); AddOption(vars.anyPercent, "anyPercent_res-arena-training-1", 418, typeof(byte), 1, false, "res-arena-training-1", false); AddOption(vars.anyPercent, "anyPercent_arena-fight-1-throne", 546, typeof(byte), 1, false, "arena-fight-1-throne", false); AddOption(vars.anyPercent, "anyPercent_res-wascity-chase", 420, typeof(byte), 1, false, "res-wascity-chase", false); AddOption(vars.anyPercent, "anyPercent_int-temple-defend", 549, typeof(byte), 1, false, "int-temple-defend", false); AddOption(vars.anyPercent, "anyPercent_int-city-bbush-get-to-26", 551, typeof(byte), 1, false, "int-city-bbush-get-to-26", false); AddOption(vars.anyPercent, "anyPercent_int-city-bbush-get-to-31", 552, typeof(byte), 1, false, "int-city-bbush-get-to-31", false); AddOption(vars.anyPercent, "anyPercent_palace-ruins-patrol-stadium", 550, typeof(byte), 1, false, "palace-ruins-patrol-stadium", false); AddOption(vars.anyPercent, "anyPercent_res-palace-ruins-patrol", 475, typeof(byte), 1, false, "res-palace-ruins-patrol", false); AddOption(vars.anyPercent, "anyPercent_res-palace-ruins-attack", 476, typeof(byte), 1, false, "res-palace-ruins-attack", false); AddOption(vars.anyPercent, "anyPercent_res-comb-wild-ride", 477, typeof(byte), 1, false, "res-comb-wild-ride", false); AddOption(vars.anyPercent, "anyPercent_res-precursor-destroy-ship", 478, typeof(byte), 1, false, "res-precursor-destroy-ship", false); AddOption(vars.anyPercent, "anyPercent_desert-final-boss-walker", 554, typeof(byte), 1, false, "desert-final-boss-walker", false); settings.Add("preset_anyPercent", false, "Any%"); AddToSettings(vars.anyPercent, "preset_anyPercent"); vars.optionLists.Add(vars.anyPercent); vars.noOob = new List>(); AddOption(vars.noOob, "noOob_res-arena-training-1", 418, typeof(byte), 1, false, "res-arena-training-1", false); AddOption(vars.noOob, "noOob_arena-fight-1-throne", 546, typeof(byte), 1, false, "arena-fight-1-throne", false); AddOption(vars.noOob, "noOob_int-temple-climb", 548, typeof(byte), 1, false, "int-temple-climb", false); AddOption(vars.noOob, "noOob_res-temple-climb", 433, typeof(byte), 1, false, "res-temple-climb", false); AddOption(vars.noOob, "noOob_int-temple-defend", 549, typeof(byte), 1, false, "int-temple-defend", false); AddOption(vars.noOob, "noOob_int-city-bbush-get-to-26", 551, typeof(byte), 1, false, "int-city-bbush-get-to-26", false); AddOption(vars.noOob, "noOob_palace-ruins-patrol-stadium", 550, typeof(byte), 1, false, "palace-ruins-patrol-stadium", false); AddOption(vars.noOob, "noOob_res-palace-ruins-patrol", 475, typeof(byte), 1, false, "res-palace-ruins-patrol", false); AddOption(vars.noOob, "noOob_res-palace-ruins-attack", 476, typeof(byte), 1, false, "res-palace-ruins-attack", false); AddOption(vars.noOob, "noOob_res-comb-wild-ride", 477, typeof(byte), 1, false, "res-comb-wild-ride", false); AddOption(vars.noOob, "noOob_res-precursor-destroy-ship", 478, typeof(byte), 1, false, "res-precursor-destroy-ship", false); AddOption(vars.noOob, "noOob_desert-final-boss-walker", 554, typeof(byte), 1, false, "desert-final-boss-walker", false); settings.Add("preset_noOob", false, "Any% No OoB (Unrestricted)"); AddToSettings(vars.noOob, "preset_noOob"); vars.optionLists.Add(vars.noOob); vars.noOobResticted = new List>(); AddOption(vars.noOobResticted, "noOobResticted_res-arena-training-1", 418, typeof(byte), 1, false, "res-arena-training-1", false); AddOption(vars.noOobResticted, "noOobResticted_arena-fight-1-throne", 546, typeof(byte), 1, false, "arena-fight-1-throne", false); AddOption(vars.noOobResticted, "noOobResticted_res-wascity-chase", 420, typeof(byte), 1, false, "res-wascity-chase", false); AddOption(vars.noOobResticted, "noOobResticted_res-wascity-pre-game", 421, typeof(byte), 1, false, "res-wascity-pre-game", false); AddOption(vars.noOobResticted, "noOobResticted_res-desert-turtle-training", 422, typeof(byte), 1, false, "res-desert-turtle-training", false); AddOption(vars.noOobResticted, "noOobResticted_nest-eggs-tunnel", 547, typeof(byte), 1, false, "nest-eggs-tunnel", false); AddOption(vars.noOobResticted, "noOobResticted_res-nest-eggs", 432, typeof(byte), 1, false, "res-nest-eggs", false); AddOption(vars.noOobResticted, "noOobResticted_int-temple-climb", 548, typeof(byte), 1, false, "int-temple-climb", false); AddOption(vars.noOobResticted, "noOobResticted_res-temple-climb", 433, typeof(byte), 1, false, "res-temple-climb", false); AddOption(vars.noOobResticted, "noOobResticted_res-desert-glide", 434, typeof(byte), 1, false, "res-desert-glide", false); AddOption(vars.noOobResticted, "noOobResticted_res-volcano-darkeco", 435, typeof(byte), 1, false, "res-volcano-darkeco", false); AddOption(vars.noOobResticted, "noOobResticted_res-temple-oracle", 436, typeof(byte), 1, false, "res-temple-oracle", false); AddOption(vars.noOobResticted, "noOobResticted_res-desert-oasis-defense", 437, typeof(byte), 1, false, "res-desert-oasis-defense", false); AddOption(vars.noOobResticted, "noOobResticted_res-temple-tests", 438, typeof(byte), 1, false, "res-temple-tests", false); AddOption(vars.noOobResticted, "noOobResticted_res-comb-travel", 439, typeof(byte), 1, false, "res-comb-travel", false); AddOption(vars.noOobResticted, "noOobResticted_res-mine-explore", 440, typeof(byte), 1, false, "res-mine-explore", false); AddOption(vars.noOobResticted, "noOobResticted_res-mine-blow", 441, typeof(byte), 1, false, "res-mine-blow", false); AddOption(vars.noOobResticted, "noOobResticted_palace-ruins-patrol-stadium", 550, typeof(byte), 1, false, "palace-ruins-patrol-stadium", false); AddOption(vars.noOobResticted, "noOobResticted_int-city-bbush-get-to-28", 553, typeof(byte), 1, false, "int-city-bbush-get-to-28", false); AddOption(vars.noOobResticted, "noOobResticted_res-palace-ruins-patrol", 475, typeof(byte), 1, false, "res-palace-ruins-patrol", false); AddOption(vars.noOobResticted, "noOobResticted_res-palace-ruins-attack", 476, typeof(byte), 1, false, "res-palace-ruins-attack", false); AddOption(vars.noOobResticted, "noOobResticted_res-comb-wild-ride", 477, typeof(byte), 1, false, "res-comb-wild-ride", false); AddOption(vars.noOobResticted, "noOobResticted_res-precursor-destroy-ship", 478, typeof(byte), 1, false, "res-precursor-destroy-ship", false); AddOption(vars.noOobResticted, "noOobResticted_desert-final-boss-walker", 554, typeof(byte), 1, false, "desert-final-boss-walker", false); settings.Add("preset_noOobResticted", false, "Any% No OoB (Restricted)"); AddToSettings(vars.noOobResticted, "preset_noOobResticted"); vars.optionLists.Add(vars.noOobResticted); vars.anyhero = new List>(); AddOption(vars.anyhero, "anyhero_res-arena-training-1", 418, typeof(byte), 1, false, "res-arena-training-1", false); AddOption(vars.anyhero, "anyhero_arena-fight-1-throne", 546, typeof(byte), 1, false, "arena-fight-1-throne", false); AddOption(vars.anyhero, "anyhero_res-wascity-chase", 420, typeof(byte), 1, false, "res-wascity-chase", false); AddOption(vars.anyhero, "anyhero_int-temple-defend", 549, typeof(byte), 1, false, "int-temple-defend", false); AddOption(vars.anyhero, "anyhero_int-city-bbush-get-to-26", 551, typeof(byte), 1, false, "int-city-bbush-get-to-26", false); AddOption(vars.anyhero, "anyhero_int-city-bbush-get-to-31", 552, typeof(byte), 1, false, "int-city-bbush-get-to-31", false); AddOption(vars.anyhero, "anyhero_palace-ruins-patrol-stadium", 550, typeof(byte), 1, false, "palace-ruins-patrol-stadium", false); AddOption(vars.anyhero, "anyhero_res-palace-ruins-patrol", 475, typeof(byte), 1, false, "res-palace-ruins-patrol", false); AddOption(vars.anyhero, "anyhero_res-palace-ruins-attack", 476, typeof(byte), 1, false, "res-palace-ruins-attack", false); AddOption(vars.anyhero, "anyhero_res-comb-wild-ride", 477, typeof(byte), 1, false, "res-comb-wild-ride", false); AddOption(vars.anyhero, "anyhero_res-precursor-destroy-ship", 478, typeof(byte), 1, false, "res-precursor-destroy-ship", false); AddOption(vars.anyhero, "anyhero_desert-final-boss-walker", 554, typeof(byte), 1, false, "desert-final-boss-walker", false); settings.Add("preset_anyhero", false, "Any% Hero Mode"); AddToSettings(vars.anyhero, "preset_anyhero"); vars.optionLists.Add(vars.anyhero); vars.allMissions = new List>(); AddOption(vars.allMissions, "allMissions_res-arena-training-1", 418, typeof(byte), 1, false, "res-arena-training-1", false); AddOption(vars.allMissions, "allMissions_arena-fight-1-throne", 546, typeof(byte), 1, false, "arena-fight-1-throne", false); AddOption(vars.allMissions, "allMissions_res-wascity-chase", 420, typeof(byte), 1, false, "res-wascity-chase", false); AddOption(vars.allMissions, "allMissions_res-wascity-pre-game", 421, typeof(byte), 1, false, "res-wascity-pre-game", false); AddOption(vars.allMissions, "allMissions_res-desert-turtle-training", 422, typeof(byte), 1, false, "res-desert-turtle-training", false); AddOption(vars.allMissions, "allMissions_res-desert-course-race", 423, typeof(byte), 1, false, "res-desert-course-race", false); AddOption(vars.allMissions, "allMissions_res-desert-artifact-race-1", 424, typeof(byte), 1, false, "res-desert-artifact-race-1", false); AddOption(vars.allMissions, "allMissions_res-wascity-leaper-race", 425, typeof(byte), 1, false, "res-wascity-leaper-race", false); AddOption(vars.allMissions, "allMissions_res-desert-hover", 426, typeof(byte), 1, false, "res-desert-hover", false); AddOption(vars.allMissions, "allMissions_res-arena-fight-2", 427, typeof(byte), 1, false, "res-arena-fight-2", false); AddOption(vars.allMissions, "allMissions_res-desert-catch-lizards", 428, typeof(byte), 1, false, "res-desert-catch-lizards", false); AddOption(vars.allMissions, "allMissions_res-desert-rescue", 429, typeof(byte), 1, false, "res-desert-rescue", false); AddOption(vars.allMissions, "allMissions_res-wascity-gungame", 430, typeof(byte), 1, false, "res-wascity-gungame", false); AddOption(vars.allMissions, "allMissions_res-arena-fight-3", 431, typeof(byte), 1, false, "res-arena-fight-3", false); AddOption(vars.allMissions, "allMissions_res-nest-eggs", 432, typeof(byte), 1, false, "res-nest-eggs", false); AddOption(vars.allMissions, "allMissions_res-temple-climb", 433, typeof(byte), 1, false, "res-temple-climb", false); AddOption(vars.allMissions, "allMissions_res-desert-glide", 434, typeof(byte), 1, false, "res-desert-glide", false); AddOption(vars.allMissions, "allMissions_res-volcano-darkeco", 435, typeof(byte), 1, false, "res-volcano-darkeco", false); AddOption(vars.allMissions, "allMissions_res-temple-oracle", 436, typeof(byte), 1, false, "res-temple-oracle", false); AddOption(vars.allMissions, "allMissions_res-desert-oasis-defense", 437, typeof(byte), 1, false, "res-desert-oasis-defense", false); AddOption(vars.allMissions, "allMissions_res-temple-tests", 438, typeof(byte), 1, false, "res-temple-tests", false); AddOption(vars.allMissions, "allMissions_res-comb-travel", 439, typeof(byte), 1, false, "res-comb-travel", false); AddOption(vars.allMissions, "allMissions_res-mine-explore", 440, typeof(byte), 1, false, "res-mine-explore", false); AddOption(vars.allMissions, "allMissions_res-mine-blow", 441, typeof(byte), 1, false, "res-mine-blow", false); AddOption(vars.allMissions, "allMissions_res-mine-boss", 442, typeof(byte), 1, false, "res-mine-boss", false); AddOption(vars.allMissions, "allMissions_res-sewer-met-hum", 443, typeof(byte), 1, false, "res-sewer-met-hum", false); AddOption(vars.allMissions, "allMissions_res-city-vehicle-training", 444, typeof(byte), 1, false, "res-city-vehicle-training", false); AddOption(vars.allMissions, "allMissions_res-city-port-fight", 445, typeof(byte), 1, false, "res-city-port-fight", false); AddOption(vars.allMissions, "allMissions_res-city-port-attack", 446, typeof(byte), 1, false, "res-city-port-attack", false); AddOption(vars.allMissions, "allMissions_res-city-gun-course-1", 447, typeof(byte), 1, false, "res-city-gun-course-1", false); AddOption(vars.allMissions, "allMissions_res-city-sniper-fight", 448, typeof(byte), 1, false, "res-city-sniper-fight", false); AddOption(vars.allMissions, "allMissions_res-sewer-kg-met", 449, typeof(byte), 1, false, "res-sewer-kg-met", false); AddOption(vars.allMissions, "allMissions_res-city-destroy-darkeco", 450, typeof(byte), 1, false, "res-city-destroy-darkeco", false); AddOption(vars.allMissions, "allMissions_res-forest-kill-plants", 451, typeof(byte), 1, false, "res-forest-kill-plants", false); AddOption(vars.allMissions, "allMissions_res-city-destroy-grid", 452, typeof(byte), 1, false, "res-city-destroy-grid", false); AddOption(vars.allMissions, "allMissions_res-city-hijack-vehicle", 453, typeof(byte), 1, false, "res-city-hijack-vehicle", false); AddOption(vars.allMissions, "allMissions_res-city-port-assault", 454, typeof(byte), 1, false, "res-city-port-assault", false); AddOption(vars.allMissions, "allMissions_res-city-gun-course-2", 455, typeof(byte), 1, false, "res-city-gun-course-2", false); AddOption(vars.allMissions, "allMissions_res-city-blow-barricade", 456, typeof(byte), 1, false, "res-city-blow-barricade", false); AddOption(vars.allMissions, "allMissions_res-city-protect-hq", 457, typeof(byte), 1, false, "res-city-protect-hq", false); AddOption(vars.allMissions, "allMissions_res-sewer-hum-kg", 458, typeof(byte), 1, false, "res-sewer-hum-kg", false); AddOption(vars.allMissions, "allMissions_res-city-power-game", 459, typeof(byte), 1, false, "res-city-power-game", false); AddOption(vars.allMissions, "allMissions_res-desert-artifact-race-2", 460, typeof(byte), 1, false, "res-desert-artifact-race-2", false); AddOption(vars.allMissions, "allMissions_res-nest-hunt", 461, typeof(byte), 1, false, "res-nest-hunt", false); AddOption(vars.allMissions, "allMissions_res-desert-beast-battle", 462, typeof(byte), 1, false, "res-desert-beast-battle", false); AddOption(vars.allMissions, "allMissions_res-desert-jump-mission", 463, typeof(byte), 1, false, "res-desert-jump-mission", false); AddOption(vars.allMissions, "allMissions_res-desert-chase-marauders", 464, typeof(byte), 1, false, "res-desert-chase-marauders", false); AddOption(vars.allMissions, "allMissions_res-forest-ring-chase", 465, typeof(byte), 1, false, "res-forest-ring-chase", false); AddOption(vars.allMissions, "allMissions_res-factory-sky-battle", 466, typeof(byte), 1, false, "res-factory-sky-battle", false); AddOption(vars.allMissions, "allMissions_res-factory-assault", 467, typeof(byte), 1, false, "res-factory-assault", false); AddOption(vars.allMissions, "allMissions_res-factory-boss", 468, typeof(byte), 1, false, "res-factory-boss", false); AddOption(vars.allMissions, "allMissions_res-temple-defend", 469, typeof(byte), 1, false, "res-temple-defend", false); AddOption(vars.allMissions, "allMissions_res-wascity-defend", 470, typeof(byte), 1, false, "res-wascity-defend", false); AddOption(vars.allMissions, "allMissions_res-forest-turn-on-machine", 471, typeof(byte), 1, false, "res-forest-turn-on-machine", false); AddOption(vars.allMissions, "allMissions_res-precursor-tour", 472, typeof(byte), 1, false, "res-precursor-tour", false); AddOption(vars.allMissions, "allMissions_res-city-blow-tower", 473, typeof(byte), 1, false, "res-city-blow-tower", false); AddOption(vars.allMissions, "allMissions_res-tower-destroy", 474, typeof(byte), 1, false, "res-tower-destroy", false); AddOption(vars.allMissions, "allMissions_res-palace-ruins-patrol", 475, typeof(byte), 1, false, "res-palace-ruins-patrol", false); AddOption(vars.allMissions, "allMissions_res-palace-ruins-attack", 476, typeof(byte), 1, false, "res-palace-ruins-attack", false); AddOption(vars.allMissions, "allMissions_res-comb-wild-ride", 477, typeof(byte), 1, false, "res-comb-wild-ride", false); AddOption(vars.allMissions, "allMissions_res-precursor-destroy-ship", 478, typeof(byte), 1, false, "res-precursor-destroy-ship", false); AddOption(vars.allMissions, "allMissions_desert-final-boss-walker", 554, typeof(byte), 1, false, "desert-final-boss-walker", false); settings.Add("preset_allMissions", false, "All Missions"); AddToSettings(vars.allMissions, "preset_allMissions"); vars.optionLists.Add(vars.allMissions); vars.hundredPercent = new List>(); AddOption(vars.hundredPercent, "hundredPercent_res-arena-training-1", 418, typeof(byte), 1, false, "res-arena-training-1", false); AddOption(vars.hundredPercent, "hundredPercent_arena-fight-1-throne", 546, typeof(byte), 1, false, "arena-fight-1-throne", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-chase", 420, typeof(byte), 1, false, "res-wascity-chase", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-pre-game", 421, typeof(byte), 1, false, "res-wascity-pre-game", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-turtle-training", 422, typeof(byte), 1, false, "res-desert-turtle-training", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-course-race", 423, typeof(byte), 1, false, "res-desert-course-race", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-artifact-race-1", 424, typeof(byte), 1, false, "res-desert-artifact-race-1", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-leaper-race", 425, typeof(byte), 1, false, "res-wascity-leaper-race", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-hover", 426, typeof(byte), 1, false, "res-desert-hover", false); AddOption(vars.hundredPercent, "hundredPercent_res-arena-fight-2", 427, typeof(byte), 1, false, "res-arena-fight-2", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-catch-lizards", 428, typeof(byte), 1, false, "res-desert-catch-lizards", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-rescue", 429, typeof(byte), 1, false, "res-desert-rescue", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-gungame", 430, typeof(byte), 1, false, "res-wascity-gungame", false); AddOption(vars.hundredPercent, "hundredPercent_res-arena-fight-3", 431, typeof(byte), 1, false, "res-arena-fight-3", false); AddOption(vars.hundredPercent, "hundredPercent_res-nest-eggs", 432, typeof(byte), 1, false, "res-nest-eggs", false); AddOption(vars.hundredPercent, "hundredPercent_res-temple-climb", 433, typeof(byte), 1, false, "res-temple-climb", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-glide", 434, typeof(byte), 1, false, "res-desert-glide", false); AddOption(vars.hundredPercent, "hundredPercent_res-volcano-darkeco", 435, typeof(byte), 1, false, "res-volcano-darkeco", false); AddOption(vars.hundredPercent, "hundredPercent_res-temple-oracle", 436, typeof(byte), 1, false, "res-temple-oracle", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-oasis-defense", 437, typeof(byte), 1, false, "res-desert-oasis-defense", false); AddOption(vars.hundredPercent, "hundredPercent_res-temple-tests", 438, typeof(byte), 1, false, "res-temple-tests", false); AddOption(vars.hundredPercent, "hundredPercent_res-comb-travel", 439, typeof(byte), 1, false, "res-comb-travel", false); AddOption(vars.hundredPercent, "hundredPercent_res-mine-explore", 440, typeof(byte), 1, false, "res-mine-explore", false); AddOption(vars.hundredPercent, "hundredPercent_res-mine-blow", 441, typeof(byte), 1, false, "res-mine-blow", false); AddOption(vars.hundredPercent, "hundredPercent_res-mine-boss", 442, typeof(byte), 1, false, "res-mine-boss", false); AddOption(vars.hundredPercent, "hundredPercent_res-sewer-met-hum", 443, typeof(byte), 1, false, "res-sewer-met-hum", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-vehicle-training", 444, typeof(byte), 1, false, "res-city-vehicle-training", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-port-fight", 445, typeof(byte), 1, false, "res-city-port-fight", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-port-attack", 446, typeof(byte), 1, false, "res-city-port-attack", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-gun-course-1", 447, typeof(byte), 1, false, "res-city-gun-course-1", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-sniper-fight", 448, typeof(byte), 1, false, "res-city-sniper-fight", false); AddOption(vars.hundredPercent, "hundredPercent_res-sewer-kg-met", 449, typeof(byte), 1, false, "res-sewer-kg-met", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-destroy-darkeco", 450, typeof(byte), 1, false, "res-city-destroy-darkeco", false); AddOption(vars.hundredPercent, "hundredPercent_res-forest-kill-plants", 451, typeof(byte), 1, false, "res-forest-kill-plants", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-destroy-grid", 452, typeof(byte), 1, false, "res-city-destroy-grid", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-hijack-vehicle", 453, typeof(byte), 1, false, "res-city-hijack-vehicle", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-port-assault", 454, typeof(byte), 1, false, "res-city-port-assault", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-gun-course-2", 455, typeof(byte), 1, false, "res-city-gun-course-2", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-blow-barricade", 456, typeof(byte), 1, false, "res-city-blow-barricade", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-protect-hq", 457, typeof(byte), 1, false, "res-city-protect-hq", false); AddOption(vars.hundredPercent, "hundredPercent_res-sewer-hum-kg", 458, typeof(byte), 1, false, "res-sewer-hum-kg", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-power-game", 459, typeof(byte), 1, false, "res-city-power-game", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-artifact-race-2", 460, typeof(byte), 1, false, "res-desert-artifact-race-2", false); AddOption(vars.hundredPercent, "hundredPercent_res-nest-hunt", 461, typeof(byte), 1, false, "res-nest-hunt", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-beast-battle", 462, typeof(byte), 1, false, "res-desert-beast-battle", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-jump-mission", 463, typeof(byte), 1, false, "res-desert-jump-mission", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-chase-marauders", 464, typeof(byte), 1, false, "res-desert-chase-marauders", false); AddOption(vars.hundredPercent, "hundredPercent_res-forest-ring-chase", 465, typeof(byte), 1, false, "res-forest-ring-chase", false); AddOption(vars.hundredPercent, "hundredPercent_res-factory-sky-battle", 466, typeof(byte), 1, false, "res-factory-sky-battle", false); AddOption(vars.hundredPercent, "hundredPercent_res-factory-assault", 467, typeof(byte), 1, false, "res-factory-assault", false); AddOption(vars.hundredPercent, "hundredPercent_res-factory-boss", 468, typeof(byte), 1, false, "res-factory-boss", false); AddOption(vars.hundredPercent, "hundredPercent_res-temple-defend", 469, typeof(byte), 1, false, "res-temple-defend", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-defend", 470, typeof(byte), 1, false, "res-wascity-defend", false); AddOption(vars.hundredPercent, "hundredPercent_res-forest-turn-on-machine", 471, typeof(byte), 1, false, "res-forest-turn-on-machine", false); AddOption(vars.hundredPercent, "hundredPercent_res-precursor-tour", 472, typeof(byte), 1, false, "res-precursor-tour", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-blow-tower", 473, typeof(byte), 1, false, "res-city-blow-tower", false); AddOption(vars.hundredPercent, "hundredPercent_res-tower-destroy", 474, typeof(byte), 1, false, "res-tower-destroy", false); AddOption(vars.hundredPercent, "hundredPercent_res-palace-ruins-patrol", 475, typeof(byte), 1, false, "res-palace-ruins-patrol", false); AddOption(vars.hundredPercent, "hundredPercent_res-palace-ruins-attack", 476, typeof(byte), 1, false, "res-palace-ruins-attack", false); AddOption(vars.hundredPercent, "hundredPercent_res-comb-wild-ride", 477, typeof(byte), 1, false, "res-comb-wild-ride", false); AddOption(vars.hundredPercent, "hundredPercent_res-precursor-destroy-ship", 478, typeof(byte), 1, false, "res-precursor-destroy-ship", false); AddOption(vars.hundredPercent, "hundredPercent_desert-final-boss-walker", 554, typeof(byte), 1, false, "desert-final-boss-walker", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-1", 481, typeof(byte), 1, false, "res-desert-bbush-get-to-1", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-2", 482, typeof(byte), 1, false, "res-desert-bbush-get-to-2", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-3", 483, typeof(byte), 1, false, "res-desert-bbush-get-to-3", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-4", 484, typeof(byte), 1, false, "res-desert-bbush-get-to-4", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-5", 485, typeof(byte), 1, false, "res-desert-bbush-get-to-5", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-6", 486, typeof(byte), 1, false, "res-desert-bbush-get-to-6", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-7", 487, typeof(byte), 1, false, "res-desert-bbush-get-to-7", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-8", 488, typeof(byte), 1, false, "res-desert-bbush-get-to-8", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-9", 489, typeof(byte), 1, false, "res-desert-bbush-get-to-9", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-11", 490, typeof(byte), 1, false, "res-desert-bbush-get-to-11", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-12", 491, typeof(byte), 1, false, "res-desert-bbush-get-to-12", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-14", 492, typeof(byte), 1, false, "res-desert-bbush-get-to-14", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-16", 493, typeof(byte), 1, false, "res-desert-bbush-get-to-16", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-17", 494, typeof(byte), 1, false, "res-desert-bbush-get-to-17", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-get-to-18", 495, typeof(byte), 1, false, "res-wascity-bbush-get-to-18", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-get-to-19", 496, typeof(byte), 1, false, "res-desert-bbush-get-to-19", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-get-to-20", 497, typeof(byte), 1, false, "res-wascity-bbush-get-to-20", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-get-to-21", 498, typeof(byte), 1, false, "res-wascity-bbush-get-to-21", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-get-to-22", 499, typeof(byte), 1, false, "res-wascity-bbush-get-to-22", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-get-to-23", 500, typeof(byte), 1, false, "res-wascity-bbush-get-to-23", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-get-to-24", 501, typeof(byte), 1, false, "res-wascity-bbush-get-to-24", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-get-to-25", 502, typeof(byte), 1, false, "res-wascity-bbush-get-to-25", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-26", 503, typeof(byte), 1, false, "res-city-bbush-get-to-26", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-27", 504, typeof(byte), 1, false, "res-city-bbush-get-to-27", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-28", 505, typeof(byte), 1, false, "res-city-bbush-get-to-28", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-29", 506, typeof(byte), 1, false, "res-city-bbush-get-to-29", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-30", 507, typeof(byte), 1, false, "res-city-bbush-get-to-30", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-31", 508, typeof(byte), 1, false, "res-city-bbush-get-to-31", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-32", 509, typeof(byte), 1, false, "res-city-bbush-get-to-32", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-33", 510, typeof(byte), 1, false, "res-city-bbush-get-to-33", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-34", 511, typeof(byte), 1, false, "res-city-bbush-get-to-34", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-35", 512, typeof(byte), 1, false, "res-city-bbush-get-to-35", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-36", 513, typeof(byte), 1, false, "res-city-bbush-get-to-36", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-37", 514, typeof(byte), 1, false, "res-city-bbush-get-to-37", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-38", 515, typeof(byte), 1, false, "res-city-bbush-get-to-38", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-39", 516, typeof(byte), 1, false, "res-city-bbush-get-to-39", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-40", 517, typeof(byte), 1, false, "res-city-bbush-get-to-40", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-41", 518, typeof(byte), 1, false, "res-city-bbush-get-to-41", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-42", 519, typeof(byte), 1, false, "res-city-bbush-get-to-42", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-43", 520, typeof(byte), 1, false, "res-city-bbush-get-to-43", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-get-to-44", 521, typeof(byte), 1, false, "res-city-bbush-get-to-44", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-ring-1", 522, typeof(byte), 1, false, "res-desert-bbush-ring-1", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-ring-2", 523, typeof(byte), 1, false, "res-desert-bbush-ring-2", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-ring-3", 524, typeof(byte), 1, false, "res-wascity-bbush-ring-3", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-ring-4", 525, typeof(byte), 1, false, "res-wascity-bbush-ring-4", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-ring-5", 526, typeof(byte), 1, false, "res-city-bbush-ring-5", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-ring-6", 527, typeof(byte), 1, false, "res-city-bbush-ring-6", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-egg-spider-1", 528, typeof(byte), 1, false, "res-desert-bbush-egg-spider-1", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-spirit-chase-1", 529, typeof(byte), 1, false, "res-desert-bbush-spirit-chase-1", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-spirit-chase-2", 530, typeof(byte), 1, false, "res-wascity-bbush-spirit-chase-2", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-spirit-chase-3", 531, typeof(byte), 1, false, "res-city-bbush-spirit-chase-3", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-timer-chase-1", 532, typeof(byte), 1, false, "res-desert-bbush-timer-chase-1", false); AddOption(vars.hundredPercent, "hundredPercent_res-wascity-bbush-timer-chase-2", 533, typeof(byte), 1, false, "res-wascity-bbush-timer-chase-2", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-air-time", 534, typeof(byte), 1, false, "res-desert-bbush-air-time", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-total-air-time", 535, typeof(byte), 1, false, "res-desert-bbush-total-air-time", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-jump-distance", 536, typeof(byte), 1, false, "res-desert-bbush-jump-distance", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-total-jump-distance", 537, typeof(byte), 1, false, "res-desert-bbush-total-jump-distance", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-roll-count", 538, typeof(byte), 1, false, "res-desert-bbush-roll-count", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-time-trial-1", 539, typeof(byte), 1, false, "res-desert-bbush-time-trial-1", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-rally", 540, typeof(byte), 1, false, "res-desert-bbush-rally", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-bbush-port-attack", 541, typeof(byte), 1, false, "res-city-bbush-port-attack", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-rescue-bbush", 542, typeof(byte), 1, false, "res-desert-rescue-bbush", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-gun-course-play-for-fun", 543, typeof(byte), 1, false, "res-city-gun-course-play-for-fun", false); AddOption(vars.hundredPercent, "hundredPercent_res-city-jetboard-bbush", 544, typeof(byte), 1, false, "res-city-jetboard-bbush", false); AddOption(vars.hundredPercent, "hundredPercent_res-desert-bbush-destroy-interceptors", 545, typeof(byte), 1, false, "res-desert-bbush-destroy-interceptors", false); settings.Add("preset_hundredPercent", false, "100%"); AddToSettings(vars.hundredPercent, "preset_hundredPercent"); vars.optionLists.Add(vars.hundredPercent); vars.manualOptions = new List>(); AddOption(vars.manualOptions, "res-arena-training-1", 418, typeof(byte), 1, false, "res-arena-training-1", false); AddOption(vars.manualOptions, "res-arena-fight-1", 419, typeof(byte), 1, false, "res-arena-fight-1", false); AddOption(vars.manualOptions, "res-wascity-chase", 420, typeof(byte), 1, false, "res-wascity-chase", false); AddOption(vars.manualOptions, "res-wascity-pre-game", 421, typeof(byte), 1, false, "res-wascity-pre-game", false); AddOption(vars.manualOptions, "res-desert-turtle-training", 422, typeof(byte), 1, false, "res-desert-turtle-training", false); AddOption(vars.manualOptions, "res-desert-course-race", 423, typeof(byte), 1, false, "res-desert-course-race", false); AddOption(vars.manualOptions, "res-desert-artifact-race-1", 424, typeof(byte), 1, false, "res-desert-artifact-race-1", false); AddOption(vars.manualOptions, "res-wascity-leaper-race", 425, typeof(byte), 1, false, "res-wascity-leaper-race", false); AddOption(vars.manualOptions, "res-desert-hover", 426, typeof(byte), 1, false, "res-desert-hover", false); AddOption(vars.manualOptions, "res-arena-fight-2", 427, typeof(byte), 1, false, "res-arena-fight-2", false); AddOption(vars.manualOptions, "res-desert-catch-lizards", 428, typeof(byte), 1, false, "res-desert-catch-lizards", false); AddOption(vars.manualOptions, "res-desert-rescue", 429, typeof(byte), 1, false, "res-desert-rescue", false); AddOption(vars.manualOptions, "res-wascity-gungame", 430, typeof(byte), 1, false, "res-wascity-gungame", false); AddOption(vars.manualOptions, "res-arena-fight-3", 431, typeof(byte), 1, false, "res-arena-fight-3", false); AddOption(vars.manualOptions, "res-nest-eggs", 432, typeof(byte), 1, false, "res-nest-eggs", false); AddOption(vars.manualOptions, "res-temple-climb", 433, typeof(byte), 1, false, "res-temple-climb", false); AddOption(vars.manualOptions, "res-desert-glide", 434, typeof(byte), 1, false, "res-desert-glide", false); AddOption(vars.manualOptions, "res-volcano-darkeco", 435, typeof(byte), 1, false, "res-volcano-darkeco", false); AddOption(vars.manualOptions, "res-temple-oracle", 436, typeof(byte), 1, false, "res-temple-oracle", false); AddOption(vars.manualOptions, "res-desert-oasis-defense", 437, typeof(byte), 1, false, "res-desert-oasis-defense", false); AddOption(vars.manualOptions, "res-temple-tests", 438, typeof(byte), 1, false, "res-temple-tests", false); AddOption(vars.manualOptions, "res-comb-travel", 439, typeof(byte), 1, false, "res-comb-travel", false); AddOption(vars.manualOptions, "res-mine-explore", 440, typeof(byte), 1, false, "res-mine-explore", false); AddOption(vars.manualOptions, "res-mine-blow", 441, typeof(byte), 1, false, "res-mine-blow", false); AddOption(vars.manualOptions, "res-mine-boss", 442, typeof(byte), 1, false, "res-mine-boss", false); AddOption(vars.manualOptions, "res-sewer-met-hum", 443, typeof(byte), 1, false, "res-sewer-met-hum", false); AddOption(vars.manualOptions, "res-city-vehicle-training", 444, typeof(byte), 1, false, "res-city-vehicle-training", false); AddOption(vars.manualOptions, "res-city-port-fight", 445, typeof(byte), 1, false, "res-city-port-fight", false); AddOption(vars.manualOptions, "res-city-port-attack", 446, typeof(byte), 1, false, "res-city-port-attack", false); AddOption(vars.manualOptions, "res-city-gun-course-1", 447, typeof(byte), 1, false, "res-city-gun-course-1", false); AddOption(vars.manualOptions, "res-city-sniper-fight", 448, typeof(byte), 1, false, "res-city-sniper-fight", false); AddOption(vars.manualOptions, "res-sewer-kg-met", 449, typeof(byte), 1, false, "res-sewer-kg-met", false); AddOption(vars.manualOptions, "res-city-destroy-darkeco", 450, typeof(byte), 1, false, "res-city-destroy-darkeco", false); AddOption(vars.manualOptions, "res-forest-kill-plants", 451, typeof(byte), 1, false, "res-forest-kill-plants", false); AddOption(vars.manualOptions, "res-city-destroy-grid", 452, typeof(byte), 1, false, "res-city-destroy-grid", false); AddOption(vars.manualOptions, "res-city-hijack-vehicle", 453, typeof(byte), 1, false, "res-city-hijack-vehicle", false); AddOption(vars.manualOptions, "res-city-port-assault", 454, typeof(byte), 1, false, "res-city-port-assault", false); AddOption(vars.manualOptions, "res-city-gun-course-2", 455, typeof(byte), 1, false, "res-city-gun-course-2", false); AddOption(vars.manualOptions, "res-city-blow-barricade", 456, typeof(byte), 1, false, "res-city-blow-barricade", false); AddOption(vars.manualOptions, "res-city-protect-hq", 457, typeof(byte), 1, false, "res-city-protect-hq", false); AddOption(vars.manualOptions, "res-sewer-hum-kg", 458, typeof(byte), 1, false, "res-sewer-hum-kg", false); AddOption(vars.manualOptions, "res-city-power-game", 459, typeof(byte), 1, false, "res-city-power-game", false); AddOption(vars.manualOptions, "res-desert-artifact-race-2", 460, typeof(byte), 1, false, "res-desert-artifact-race-2", false); AddOption(vars.manualOptions, "res-nest-hunt", 461, typeof(byte), 1, false, "res-nest-hunt", false); AddOption(vars.manualOptions, "res-desert-beast-battle", 462, typeof(byte), 1, false, "res-desert-beast-battle", false); AddOption(vars.manualOptions, "res-desert-jump-mission", 463, typeof(byte), 1, false, "res-desert-jump-mission", false); AddOption(vars.manualOptions, "res-desert-chase-marauders", 464, typeof(byte), 1, false, "res-desert-chase-marauders", false); AddOption(vars.manualOptions, "res-forest-ring-chase", 465, typeof(byte), 1, false, "res-forest-ring-chase", false); AddOption(vars.manualOptions, "res-factory-sky-battle", 466, typeof(byte), 1, false, "res-factory-sky-battle", false); AddOption(vars.manualOptions, "res-factory-assault", 467, typeof(byte), 1, false, "res-factory-assault", false); AddOption(vars.manualOptions, "res-factory-boss", 468, typeof(byte), 1, false, "res-factory-boss", false); AddOption(vars.manualOptions, "res-temple-defend", 469, typeof(byte), 1, false, "res-temple-defend", false); AddOption(vars.manualOptions, "res-wascity-defend", 470, typeof(byte), 1, false, "res-wascity-defend", false); AddOption(vars.manualOptions, "res-forest-turn-on-machine", 471, typeof(byte), 1, false, "res-forest-turn-on-machine", false); AddOption(vars.manualOptions, "res-precursor-tour", 472, typeof(byte), 1, false, "res-precursor-tour", false); AddOption(vars.manualOptions, "res-city-blow-tower", 473, typeof(byte), 1, false, "res-city-blow-tower", false); AddOption(vars.manualOptions, "res-tower-destroy", 474, typeof(byte), 1, false, "res-tower-destroy", false); AddOption(vars.manualOptions, "res-palace-ruins-patrol", 475, typeof(byte), 1, false, "res-palace-ruins-patrol", false); AddOption(vars.manualOptions, "res-palace-ruins-attack", 476, typeof(byte), 1, false, "res-palace-ruins-attack", false); AddOption(vars.manualOptions, "res-comb-wild-ride", 477, typeof(byte), 1, false, "res-comb-wild-ride", false); AddOption(vars.manualOptions, "res-precursor-destroy-ship", 478, typeof(byte), 1, false, "res-precursor-destroy-ship", false); AddOption(vars.manualOptions, "res-desert-final-boss", 479, typeof(byte), 1, false, "res-desert-final-boss", false); AddOption(vars.manualOptions, "res-city-win", 480, typeof(byte), 1, false, "res-city-win", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-1", 481, typeof(byte), 1, false, "res-desert-bbush-get-to-1", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-2", 482, typeof(byte), 1, false, "res-desert-bbush-get-to-2", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-3", 483, typeof(byte), 1, false, "res-desert-bbush-get-to-3", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-4", 484, typeof(byte), 1, false, "res-desert-bbush-get-to-4", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-5", 485, typeof(byte), 1, false, "res-desert-bbush-get-to-5", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-6", 486, typeof(byte), 1, false, "res-desert-bbush-get-to-6", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-7", 487, typeof(byte), 1, false, "res-desert-bbush-get-to-7", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-8", 488, typeof(byte), 1, false, "res-desert-bbush-get-to-8", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-9", 489, typeof(byte), 1, false, "res-desert-bbush-get-to-9", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-11", 490, typeof(byte), 1, false, "res-desert-bbush-get-to-11", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-12", 491, typeof(byte), 1, false, "res-desert-bbush-get-to-12", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-14", 492, typeof(byte), 1, false, "res-desert-bbush-get-to-14", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-16", 493, typeof(byte), 1, false, "res-desert-bbush-get-to-16", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-17", 494, typeof(byte), 1, false, "res-desert-bbush-get-to-17", false); AddOption(vars.manualOptions, "res-wascity-bbush-get-to-18", 495, typeof(byte), 1, false, "res-wascity-bbush-get-to-18", false); AddOption(vars.manualOptions, "res-desert-bbush-get-to-19", 496, typeof(byte), 1, false, "res-desert-bbush-get-to-19", false); AddOption(vars.manualOptions, "res-wascity-bbush-get-to-20", 497, typeof(byte), 1, false, "res-wascity-bbush-get-to-20", false); AddOption(vars.manualOptions, "res-wascity-bbush-get-to-21", 498, typeof(byte), 1, false, "res-wascity-bbush-get-to-21", false); AddOption(vars.manualOptions, "res-wascity-bbush-get-to-22", 499, typeof(byte), 1, false, "res-wascity-bbush-get-to-22", false); AddOption(vars.manualOptions, "res-wascity-bbush-get-to-23", 500, typeof(byte), 1, false, "res-wascity-bbush-get-to-23", false); AddOption(vars.manualOptions, "res-wascity-bbush-get-to-24", 501, typeof(byte), 1, false, "res-wascity-bbush-get-to-24", false); AddOption(vars.manualOptions, "res-wascity-bbush-get-to-25", 502, typeof(byte), 1, false, "res-wascity-bbush-get-to-25", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-26", 503, typeof(byte), 1, false, "res-city-bbush-get-to-26", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-27", 504, typeof(byte), 1, false, "res-city-bbush-get-to-27", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-28", 505, typeof(byte), 1, false, "res-city-bbush-get-to-28", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-29", 506, typeof(byte), 1, false, "res-city-bbush-get-to-29", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-30", 507, typeof(byte), 1, false, "res-city-bbush-get-to-30", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-31", 508, typeof(byte), 1, false, "res-city-bbush-get-to-31", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-32", 509, typeof(byte), 1, false, "res-city-bbush-get-to-32", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-33", 510, typeof(byte), 1, false, "res-city-bbush-get-to-33", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-34", 511, typeof(byte), 1, false, "res-city-bbush-get-to-34", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-35", 512, typeof(byte), 1, false, "res-city-bbush-get-to-35", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-36", 513, typeof(byte), 1, false, "res-city-bbush-get-to-36", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-37", 514, typeof(byte), 1, false, "res-city-bbush-get-to-37", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-38", 515, typeof(byte), 1, false, "res-city-bbush-get-to-38", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-39", 516, typeof(byte), 1, false, "res-city-bbush-get-to-39", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-40", 517, typeof(byte), 1, false, "res-city-bbush-get-to-40", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-41", 518, typeof(byte), 1, false, "res-city-bbush-get-to-41", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-42", 519, typeof(byte), 1, false, "res-city-bbush-get-to-42", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-43", 520, typeof(byte), 1, false, "res-city-bbush-get-to-43", false); AddOption(vars.manualOptions, "res-city-bbush-get-to-44", 521, typeof(byte), 1, false, "res-city-bbush-get-to-44", false); AddOption(vars.manualOptions, "res-desert-bbush-ring-1", 522, typeof(byte), 1, false, "res-desert-bbush-ring-1", false); AddOption(vars.manualOptions, "res-desert-bbush-ring-2", 523, typeof(byte), 1, false, "res-desert-bbush-ring-2", false); AddOption(vars.manualOptions, "res-wascity-bbush-ring-3", 524, typeof(byte), 1, false, "res-wascity-bbush-ring-3", false); AddOption(vars.manualOptions, "res-wascity-bbush-ring-4", 525, typeof(byte), 1, false, "res-wascity-bbush-ring-4", false); AddOption(vars.manualOptions, "res-city-bbush-ring-5", 526, typeof(byte), 1, false, "res-city-bbush-ring-5", false); AddOption(vars.manualOptions, "res-city-bbush-ring-6", 527, typeof(byte), 1, false, "res-city-bbush-ring-6", false); AddOption(vars.manualOptions, "res-desert-bbush-egg-spider-1", 528, typeof(byte), 1, false, "res-desert-bbush-egg-spider-1", false); AddOption(vars.manualOptions, "res-desert-bbush-spirit-chase-1", 529, typeof(byte), 1, false, "res-desert-bbush-spirit-chase-1", false); AddOption(vars.manualOptions, "res-wascity-bbush-spirit-chase-2", 530, typeof(byte), 1, false, "res-wascity-bbush-spirit-chase-2", false); AddOption(vars.manualOptions, "res-city-bbush-spirit-chase-3", 531, typeof(byte), 1, false, "res-city-bbush-spirit-chase-3", false); AddOption(vars.manualOptions, "res-desert-bbush-timer-chase-1", 532, typeof(byte), 1, false, "res-desert-bbush-timer-chase-1", false); AddOption(vars.manualOptions, "res-wascity-bbush-timer-chase-2", 533, typeof(byte), 1, false, "res-wascity-bbush-timer-chase-2", false); AddOption(vars.manualOptions, "res-desert-bbush-air-time", 534, typeof(byte), 1, false, "res-desert-bbush-air-time", false); AddOption(vars.manualOptions, "res-desert-bbush-total-air-time", 535, typeof(byte), 1, false, "res-desert-bbush-total-air-time", false); AddOption(vars.manualOptions, "res-desert-bbush-jump-distance", 536, typeof(byte), 1, false, "res-desert-bbush-jump-distance", false); AddOption(vars.manualOptions, "res-desert-bbush-total-jump-distance", 537, typeof(byte), 1, false, "res-desert-bbush-total-jump-distance", false); AddOption(vars.manualOptions, "res-desert-bbush-roll-count", 538, typeof(byte), 1, false, "res-desert-bbush-roll-count", false); AddOption(vars.manualOptions, "res-desert-bbush-time-trial-1", 539, typeof(byte), 1, false, "res-desert-bbush-time-trial-1", false); AddOption(vars.manualOptions, "res-desert-bbush-rally", 540, typeof(byte), 1, false, "res-desert-bbush-rally", false); AddOption(vars.manualOptions, "res-city-bbush-port-attack", 541, typeof(byte), 1, false, "res-city-bbush-port-attack", false); AddOption(vars.manualOptions, "res-desert-rescue-bbush", 542, typeof(byte), 1, false, "res-desert-rescue-bbush", false); AddOption(vars.manualOptions, "res-city-gun-course-play-for-fun", 543, typeof(byte), 1, false, "res-city-gun-course-play-for-fun", false); AddOption(vars.manualOptions, "res-city-jetboard-bbush", 544, typeof(byte), 1, false, "res-city-jetboard-bbush", false); AddOption(vars.manualOptions, "res-desert-bbush-destroy-interceptors", 545, typeof(byte), 1, false, "res-desert-bbush-destroy-interceptors", false); AddOption(vars.manualOptions, "arena-fight-1-throne", 546, typeof(byte), 1, false, "arena-fight-1-throne", false); AddOption(vars.manualOptions, "nest-eggs-tunnel", 547, typeof(byte), 1, false, "nest-eggs-tunnel", false); AddOption(vars.manualOptions, "int-temple-climb", 548, typeof(byte), 1, false, "int-temple-climb", false); AddOption(vars.manualOptions, "int-temple-defend", 549, typeof(byte), 1, false, "int-temple-defend", false); AddOption(vars.manualOptions, "palace-ruins-patrol-stadium", 550, typeof(byte), 1, false, "palace-ruins-patrol-stadium", false); AddOption(vars.manualOptions, "int-city-bbush-get-to-26", 551, typeof(byte), 1, false, "int-city-bbush-get-to-26", false); AddOption(vars.manualOptions, "int-city-bbush-get-to-31", 552, typeof(byte), 1, false, "int-city-bbush-get-to-31", false); AddOption(vars.manualOptions, "int-city-bbush-get-to-28", 553, typeof(byte), 1, false, "int-city-bbush-get-to-28", false); AddOption(vars.manualOptions, "desert-final-boss-walker", 554, typeof(byte), 1, false, "desert-final-boss-walker", false); settings.Add("manual_options", false, "Manual Options"); AddToSettings(vars.manualOptions, "manual_options"); vars.optionLists.Add(vars.manualOptions); // __AUTOGENERATED__ END vars.DebugOutput("Finished {startup}", true); } init { vars.DebugOutput("Running {init} looking for `gk.exe`", true); var sw = new Stopwatch(); sw.Start(); var exported_ptr = IntPtr.Zero; vars.foundPointers = false; byte[] marker = Encoding.ASCII.GetBytes("UnLiStEdStRaTs_JaK3" + Char.MinValue); vars.debugTick = 0; // NOTE - the subtraction is a total hack. When we switched to SDL the statically linked binary now has this new `No Access` region of 0x1000 bytes near the end of the first module // This feels like a total hack and is brittle (memory layout can change in the future, sizes can change, new regions can be added). // // 28672 = 0x7000 and this is the size from the end of the first module to before the beginning of this No Access region at the time of writing. // // However, since this is a hack, we should probably be a bit more conservative incase more the region layout changes. // // LiveSplit tries to read the entire region it's given into memory and a partial read is a failure. vars.DebugOutput(String.Format("Scanning First Module - {0}->{1}", modules.First().BaseAddress.ToString("x8"), (modules.First().BaseAddress.ToInt64() + modules.First().ModuleMemorySize - 100000).ToString("x8")), true); exported_ptr = new SignatureScanner(game, modules.First().BaseAddress, modules.First().ModuleMemorySize - 200000).Scan( new SigScanTarget(marker.Length, marker) ); if (exported_ptr == IntPtr.Zero) { vars.DebugOutput("Could not find the AutoSplittingInfo struct, old version of gk.exe? Failing!", true); sw.Reset(); return false; } vars.DebugOutput(String.Format("Found AutoSplittingInfo struct - {0}", exported_ptr.ToString("x8")), true); // The offset to the GOAL struct is stored in a u64 next to the marker! var goal_struct_ptr = new IntPtr(memory.ReadValue(exported_ptr + 4)); while (goal_struct_ptr == IntPtr.Zero) { vars.DebugOutput("Could not find pointer to GOAL struct, game still loading? Retrying in 1000ms...!", true); Thread.Sleep(1000); sw.Reset(); throw new Exception("Could not find pointer to GOAL struct, game still loading? Retrying..."); } Action>> AddMemoryWatchers = (memList, bPtr, options) => { foreach (Dictionary option in options) { var finalOffset = bPtr + (option["offset"]); // Reflection magic to create a watcher targetting the correct type Type memoryWatcherType = typeof(MemoryWatcher<>); Type genericType = memoryWatcherType.MakeGenericType(option["type"]); object instance = Activator.CreateInstance(genericType, finalOffset); genericType.GetProperty("Name").SetValue(instance, option["id"]); memList.Add((MemoryWatcher)instance); if (option["debug"] == true) { memList[option["id"]].Update(game); vars.DebugOutput(String.Format("Debug ({0}) -> ptr [{1}]; val [{2}]", option["id"], finalOffset.ToString("x8"), memList[option["id"]].Current), true); } } }; var watchers = new MemoryWatcherList{ new MemoryWatcher(goal_struct_ptr + 212) { Name = "currentGameHash" } }; // Init current game has in case script is loaded while game is already started watchers["currentGameHash"].Update(game); foreach (List> optionList in vars.optionLists) { AddMemoryWatchers(watchers, goal_struct_ptr, optionList); } AddMemoryWatchers(watchers, goal_struct_ptr, vars.endingConditions); vars.foundPointers = true; vars.watchers = watchers; sw.Stop(); vars.DebugOutput("Script Initialized, Game Compatible.", true); vars.DebugOutput(String.Format("Found the exported struct at {0}", goal_struct_ptr.ToString("x8")), true); vars.DebugOutput(String.Format("It took {0} ms", sw.ElapsedMilliseconds), true); } update { if (!vars.foundPointers) { return false; } vars.watchers.UpdateAll(game); } reset { if (vars.watchers["currentGameHash"].Current != 0 && vars.watchers["currentGameHash"].Current != vars.watchers["currentGameHash"].Old) { vars.DebugOutput("Resetting!", settings["asl_settings_debug"]); vars.DebugOutput(String.Format("Reset -> Old: {0}, Curr: {1}", vars.watchers["currentGameHash"].Old, vars.watchers["currentGameHash"].Current), settings["asl_settings_debug"]); return true; } return false; } start { if (vars.watchers["currentGameHash"].Current != 0 && vars.watchers["currentGameHash"].Current != vars.watchers["currentGameHash"].Old) { vars.DebugOutput("Starting!", settings["asl_settings_debug"]); vars.DebugOutput(String.Format("Start -> Old: {0}, Curr: {1}", vars.watchers["currentGameHash"].Old, vars.watchers["currentGameHash"].Current), settings["asl_settings_debug"]); return true; } return false; } isLoading { // todo return false; } split { var debugThisIter = false; if (vars.debugTick++ % 60 == 0) { debugThisIter = true; } // ALWAYS split if an ending condition is true, so no matter what we exhaust all splits until the end foreach (Dictionary option in vars.endingConditions) { var watcher = vars.watchers[option["id"]]; if (option["debug"] && debugThisIter) { vars.DebugOutput(String.Format("Debug ({0}) -> old [{1}]; current [{2}]; splitVal: [{3}]", option["id"], watcher.Old, watcher.Current, option["splitVal"]), settings["asl_settings_debug"]); } if (settings[option["id"]]) { if (watcher.Current == option["splitVal"]) { return true; } } } Func>, bool> InspectValues = (list) => { foreach (Dictionary option in list) { var watcher = vars.watchers[option["id"]]; if (option["debug"] && debugThisIter) { vars.DebugOutput(String.Format("Debug ({0}) -> old [{1}]; current [{2}]; splitVal: [{3}]", option["id"], watcher.Old, watcher.Current, option["splitVal"]), settings["asl_settings_debug"]); } if (settings[option["id"]]) { // if we don't care about the amount, split on any change if (option["splitVal"] == null && watcher.Current != watcher.Old) { return true; } // Else, make sure we've hit that goal amount else if (option["splitVal"] != null && watcher.Current != watcher.Old && watcher.Current == option["splitVal"]) { return true; } } } return false; }; foreach (List> optionList in vars.optionLists) { if (InspectValues(optionList)) { vars.DebugOutput("Splitting!", settings["asl_settings_debug"]); return true; } } }