state("SQUEAKY SQUAD") { } startup { refreshRate = 30; var liveSplitDir = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location); Assembly.Load(File.ReadAllBytes(Path.Combine(liveSplitDir, "Components", "asl-help"))).CreateInstance("Unity"); vars.Helper.LoadSceneManager = true; vars.PrefsPath = @"Software\DefaultCompany\SQUEAKY SQUAD"; vars.PrefsKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(vars.PrefsPath); settings.Add("start", true, "Start : entrée dans le niveau"); settings.Add("final", true, "Final split : boss final mort"); settings.Add("reset", true, "Reset : quick retry ou menu -> hub"); settings.Add("loadRemoval", true, "Load removal"); vars.FindKey = (Func)(prefix => { try { if (vars.PrefsKey == null) vars.PrefsKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(vars.PrefsPath); if (vars.PrefsKey == null) return ""; foreach (string name in vars.PrefsKey.GetValueNames()) { if (name == prefix || name.StartsWith(prefix + "_")) return name; } } catch {} return ""; }); vars.retry1Key = vars.FindKey("retry1"); vars.retry2Key = vars.FindKey("retry2"); vars.retry3Key = vars.FindKey("retry3"); vars.hub1Key = vars.FindKey("hub1"); vars.hub2Key = vars.FindKey("hub2"); vars.hub3Key = vars.FindKey("hub3"); vars.crookOnKey = vars.FindKey("crook_on"); vars.ReadInt = (Func)(name => { try { if (String.IsNullOrEmpty(name)) return -999; if (vars.PrefsKey == null) vars.PrefsKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(vars.PrefsPath); if (vars.PrefsKey == null) return -999; object value = vars.PrefsKey.GetValue(name); if (value == null) return -999; int result; if (int.TryParse(value.ToString(), out result)) return result; } catch {} return -999; }); } init { current.scene = ""; current.retry1 = -999; current.retry2 = -999; current.retry3 = -999; current.hub1 = -999; current.hub2 = -999; current.hub3 = -999; current.crookOn = -999; vars.finished = false; // Niveau actuellement détecté. // Quick retry garde ce niveau. // Retour hub/menu l'efface. vars.currentLevel = ""; } update { string scene = current.scene; try { scene = vars.Helper.Scenes.Active.Name ?? scene; } catch {} current.scene = scene; current.retry1 = vars.ReadInt(vars.retry1Key); current.retry2 = vars.ReadInt(vars.retry2Key); current.retry3 = vars.ReadInt(vars.retry3Key); current.hub1 = vars.ReadInt(vars.hub1Key); current.hub2 = vars.ReadInt(vars.hub2Key); current.hub3 = vars.ReadInt(vars.hub3Key); current.crookOn = vars.ReadInt(vars.crookOnKey); } start { if (!settings["start"]) return false; bool startRun = old.scene == "transition_niveaux" && ( current.scene == "warful warehouse" || current.scene == "Ship_deck" || current.scene == "Deep_docks" || current.scene == "Squeaky_ducts" ); if (startRun) { vars.currentLevel = current.scene; vars.finished = false; return true; } return false; } split { if (!settings["final"]) return false; if (vars.finished) return false; bool finalBossDead = old.crookOn == 0 && current.crookOn == 1; if (finalBossDead) { vars.finished = true; return true; } return false; } reset { if (!settings["reset"]) return false; bool quickRetry = (old.retry1 == 0 && current.retry1 == 1) || (old.retry2 == 0 && current.retry2 == 1) || (old.retry3 == 0 && current.retry3 == 1); bool hubCounterIncreased = (old.hub1 >= 0 && current.hub1 > old.hub1) || (old.hub2 >= 0 && current.hub2 > old.hub2) || (old.hub3 >= 0 && current.hub3 > old.hub3); bool menuToHub = hubCounterIncreased && ( old.scene == "Title_screen" || current.scene == "loading_screen" ); if (quickRetry) { // Quick retry = même niveau, donc on garde vars.currentLevel. vars.finished = false; return true; } if (menuToHub) { // Retour hub/menu = le joueur peut choisir un autre niveau. vars.currentLevel = ""; vars.finished = false; return true; } return false; } isLoading { if (!settings["loadRemoval"]) return false; return current.scene == "loading_screen" || current.scene == "transition_niveaux"; }