state("Cavern of Dreams"){ } startup { Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity"); vars.Helper.GameName = "Cavern of Dreams"; vars.Helper.LoadSceneManager = true; dynamic[,] _settings = { { "Splits", true, "Splits", null }, { "SkillAttack", true, "Gain Tail Attack", "Splits" }, { "SkillHover", true, "Gain Hover", "Splits" }, { "SkillDive", true, "Gain Dive", "Splits" }, { "SkillProjectile", true, "Gain Projectile", "Splits" }, { "FlyUpLoop", true, "Ending Split - Fly Up Loop", "Splits" }, { "AreaSplits", true, "Split on Area Change", "Splits" }, { "SaveQuitSplit", true, "TEMPORARY - Save and Quit Split", null }, }; vars.Helper.Settings.Create(_settings); vars.Helper.AlertGameTime(); } init { // Delay counter (in frames) after loading ends vars.areaDelayFrames = 0; vars.Helper.TryLoad = (Func)(mono => { vars.Helper["cutsceneAnim"] = mono.MakeString("GlobalHub", "Instance", "cutsceneAnim"); vars.Helper["areaCurrent"] = mono.Make("GlobalHub", "Instance", "areaCurrent"); return true; }); } start { return old.activeScene != "Game" && current.activeScene == "Game"; } update { if(!String.IsNullOrWhiteSpace(vars.Helper.Scenes.Active.Name)) current.activeScene = vars.Helper.Scenes.Active.Name; if(!String.IsNullOrWhiteSpace(vars.Helper.Scenes.Loaded[0].Name)) current.loadingScene = vars.Helper.Scenes.Loaded[0].Name; // Detect loading end: isLoading changed from true → false bool wasLoading = (old.activeScene == "MainMenu"); bool isNowLoading = (current.activeScene == "MainMenu"); // If timer was paused (loading) and now resumed: if (wasLoading && !isNowLoading) { // Start 0.5s delay = ~30 frames vars.areaDelayFrames = 30; } // Count down delay if (vars.areaDelayFrames > 0) vars.areaDelayFrames--; } split { // ability unlock splits if (old.cutsceneAnim != current.cutsceneAnim && ((settings["SkillAttack"] && current.cutsceneAnim == "SkillAttack") || (settings["SkillHover"] && current.cutsceneAnim == "SkillHover") || (settings["SkillDive"] && current.cutsceneAnim == "SkillDive") || (settings["SkillProjectile"] && current.cutsceneAnim == "SkillProjectile"))) return true; // ending split if (old.cutsceneAnim != current.cutsceneAnim && current.cutsceneAnim == "FlyUpLoop") return true; // save + quit split if (settings["SaveQuitSplit"] && old.activeScene == "Game" && current.activeScene == "MainMenu") return true; // area change splits (disabled during loading & delay) if (settings["AreaSplits"] && old.areaCurrent != current.areaCurrent && vars.areaDelayFrames == 0 && current.activeScene == "Game") return true; } isLoading { if (current.activeScene == "MainMenu") return true; else return false; }