state("Melatonin") { } state("Melatonin_Demo") { } startup { Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity"); settings.Add("start", true, "Automatically Start Timer when Starting Tutorial"); settings.Add("remix", true, "Automatically Split on Mashup Completion"); settings.Add("normal", true, "Automatically Split on Scored Completion"); settings.Add("hard", true, "Automatically Split on Hard Mode Completion"); settings.Add("achieve", false, "Automatically Split on Honor Roll and Creator Achievements"); settings.Add("two", false, "Only Split on Two+ Star Completions"); settings.Add("three", false, "Only Split on Three Star Completions"); settings.Add("perfect", false, "Only Split on Perfect Completions"); } init { vars.isDemo = game.ProcessName == "Melatonin_Demo"; vars.Helper.TryLoad = (Func)(mono => { var sm = mono["SaveManager"]; var pd = mono["playerData"]; var bd = mono["Builder"]; vars.Helper["isLoadWaiting"] = mono.Make("SceneMonitor", "mgr", "isLoadWaiting"); vars.Helper["gameModeQueued"] = mono.Make("Dream", "gameModeQueued"); vars.Helper["cn"] = mono.Make("SaveManager", "playerData", "cn"); vars.Helper["scores"] = vars.Helper.MakeSpan(42, sm.Static + sm["playerData"], pd["fd"]); if (!vars.isDemo) { vars.Helper["achieves"] = vars.Helper.MakeSpan(2, sm.Static + sm["playerData"], pd["isTp"]); } return true; }); } start { return settings["start"] && current.cn == -1 && old.gameModeQueued != 5 && current.gameModeQueued == 5; } split { int thresh = settings["perfect"] ? 4 : settings["three"] ? 3 : settings["two"] ? 2 : 1; for (int i=0; i < 42; ++i) { bool enabled = i % 2 == 1 ? settings["hard"] : i % 10 == 8 || i == 40 ? settings["remix"] : settings["normal"]; if (enabled && old.scores[i] < thresh && current.scores[i] >= thresh) return true; } if (!vars.isDemo) { for (int i=0; i < 2; ++i) { if (settings["achieve"] && !old.achieves[i] && current.achieves[i]) return true; } } return false; } isLoading { return current.isLoadWaiting; }