state("PaperKlay") { } startup { Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity"); vars.Helper.GameName = "PaperKlay"; vars.Helper.LoadSceneManager = true; vars.Helper.StartFileLogger("PaperKlayASL.log"); vars.WorldTransitionCutscenes = new string[] { "Cutscene_FlyToSnow", "Cutscene_BossTower", "Cutscene_FlyToTower" }; settings.Add("split_world", true, "Split on world complete"); } init { vars.Helper.TryLoad = (Func)(mono => { var saveManager = mono["SaveManager"]; vars.Helper["gameTime"] = saveManager.Make("instance", "gameplayTimer"); var bossShip = mono["BossShip"]; vars.Helper["bossHealth"] = bossShip.Make("instance", "curHealth"); return true; }); } update { if (!string.IsNullOrEmpty(vars.Helper.Scenes.Active.Name)) { current.scene = vars.Helper.Scenes.Active.Name; } if (current.bossHealth != old.bossHealth) { vars.Log("boss health: " + current.bossHealth); } if (current.scene != old.scene) { vars.Log("scene: " + current.scene); } } start { return old.gameTime == 0.0 && current.gameTime != 0.0; } gameTime { return TimeSpan.FromSeconds(current.gameTime); } isLoading { return current.gameTime == old.gameTime; } reset { return current.scene != old.scene && current.scene == "MainMenu"; } split { if (current.scene != old.scene) { // World transition if (((string[])vars.WorldTransitionCutscenes).Contains((string)current.scene)) { return settings["split_world"]; } } // Boss defeated if (current.scene == "Level_Tower_Boss" && current.bossHealth == 0 && old.bossHealth != 0) { return true; } }