// The Lord of the Rings: The Two Towers Autosplitter // For Dolphin & Retroarch - requires emu-helper-v3 // Created by NickRPGreen state("LiveSplit") {} startup { vars.T = new ExpandoObject(); // Container for variables not desired in the ASL VAR Viewer var T = vars.T; // Quick-access to container //Creates a persistent instance of the GameCube class (for Dolphin and Retroarch) Assembly.Load(File.ReadAllBytes("Components/emu-help-v3")).CreateInstance("GCN"); T.MenuType = vars.Helper.Make(0x801C6a8E); // See T.menus T.State = vars.Helper.Make(0x801CF6BE); // 0=No Value, 1=Loading/Cutscene, 2=Game, 3=Quit Level 4=?? T.Ending = vars.Helper.Make(0x801CF136); // 0=Gameplay, 1=Level End Cutscene, 5=Dead T.IsMenu = vars.Helper.Make(0x801C6A9A); // 0=Menu, 6=Not Menu T.Cutscene = vars.Helper.Make(0x804B35A2); // 0=Not Cutscene, 1=Cutscene T.MenuProgress = vars.Helper.Make(0x801C6AB6); // See T.levelSelect T.Level = vars.Helper.Make(0x801CF6DA); // See below T.LevelMenu = vars.Helper.Make(0x801C6AA6); // Level number on level select screen, used to ensure you only split if starting the correct level T.Health = vars.Helper.Make(0x8019284E); // Player health, prevent skips when dead T.Armor = vars.Helper.Make(0x80192A06); // Player armor, separate from health T.Character = vars.Helper.Make(0x801C6AAE); // Character Select Screen: 0=Aragorn, 1=Legolas, 2=Gimli, 3=Isildur T.subSplit = 0; T.undoSplit = 0; T.currentLevel = 0; T.start = false; T.timerModel = new TimerModel {CurrentState = timer}; // Menus T.menus = new Dictionary(){ {0, "Unknown"}, {1, "Level Select"}, {2, "Credits"}, {3, "Load Game"}, {4, "Main Menu"}, {5, "Options"}, {6, "Gameplay"}, {7, "Save Game"}, {8, "Opening Credits"}, {9, "Score Screen"}, {10, "Upgrades"}, {11, "Artwork"} }; T.levelSelect = new Dictionary(){ {0, "Save Dialog"}, {1, "Level Select"}, {2, "Character Select"}, {3, "Continue"}, {4, "Back"} }; T.characters = new Dictionary(){ {0, "Aragorn"}, {1, "Legolas"}, {2, "Gimli"}, {3, "Isildur"} }; T.levelNames = new List {"Prologue","Weathertop","Gates of Moria","Balin's Tomb","Amon Hen","Fangorn Forest","Plains of Rohan","Westfold","Gap of Rohan","Deeping Wall","Breached Wall","Hornburg Courtyard"}; T.levelNumbers = new List {17792,17808,17824,17840,17856,17872,17888,17896,17904,17920,17936,17952}; T.levels = new Dictionary>(){ {"Prologue", new List {"Kill Them All","Shield Orcs Arrive","Volcano erupts","Sauron Attacks"}}, {"Weathertop", new List {"Back Foul Thing","Help! They're Everywhere!","We Shall Find You","Nazgul Flee"}}, {"Gates of Moria", new List {"This Land Has Changed","Quickly this way","My Cousin, Balin","Watcher in the Water","Door of Durin"}}, {"Balin's Tomb", new List {"Goblin Horde","Cave Troll Melee","Cave Troll Ranged","Cave Troll Defeated"}}, {"Amon Hen", new List {"We Must Defend Him","Find the Halfling!","Fire","Frodo Hides","Bridge","Frodo Escapes","Enter Lurtz","Lurtz Fight","Death of Boromir"}}, {"Fangorn Forest", new List {"Split Up","Forest Troll 1","Camp Pit","Forest Troll 2","Forest Troll 3 & 4", "The White Wizard"}}, {"Plains of Rohan", new List {"Arrival","Gandalf Blast","Through the Fire","Save the Couple","Still Have Work To Do"}}, {"Westfold", new List {"Strange explosives","Gate","Lake","Kaboom!"}}, {"Gap of Rohan", new List {"Wargs","Boss","Boss Defeated"}}, {"Deeping Wall", new List {"Ladders","Archer Attack","Catapult Attack","Elves FTW"}}, {"Breached Wall", new List {"Close the gate","Archers","Troll","Catapult","Compare Kills"}}, {"Hornburg Courtyard", new List {"Protect the Gate","Help Friend","Uruk-Hai","Trolls Spawn","Trolls Defeated"}} }; settings.Add("settings",true,"Settings"); settings.Add("undo",true,"Undo current level splits on death/menu","settings"); settings.Add("correct",true,"Prevent split if starting the wrong next level","settings"); settings.Add("falseAragorn",true,"Prevent start if Aragorn is selected","settings"); settings.Add("falseStart",false,"Allow splitter to start on any new level","settings"); settings.SetToolTip("falseStart","Leave unchecked to only start on Prologue/Gates of Moria"); settings.Add("splits",true,"Splits"); settings.SetToolTip("splits","Split upon starting ticked level, or reaching ticked cutscene. Final split when defeating trolls always splits whether ticked or not."); for (int i = 0; i 0) current.Health = T.Health.Current + " HP + " + T.Armor.Current + " AR"; else current.Health = T.Health.Current + " HP"; // Undo splits if restarting level after death, or restarting a level if (T.Ending.Current == 0 && T.Ending.Old == 5 || T.State.Changed && T.State.Current == 3 && settings["undo"]) { // Undo one less split if dying on Fangorn Forest, as there is a checkpoint at the first subsplit if (T.Level.Current == 17872 && T.subSplit > 1){ for(int i = 0; i