state("BloonsTD6") { int ticks: "GameAssembly.dll", 0x04A86AA8, 0x388, 0xB8, 0x20, 0xD0, 0x28, 0x38, 0x10; int round: "GameAssembly.dll", 0x0495FBF0, 0x80, 0xB0, 0xB8, 0x10, 0x30, 0x100, 0x70; int speed: "GameAssembly.dll", 0x048EC6B8, 0x78, 0x48, 0x90, 0x50, 0x40, 0xB8, 0x1A0; } startup { // This asl will always split on the last round of a difficulty. Just make sure NOT to pause. settings.Add("per_round", false, "Split on each round"); settings.Add("multi_level", false, "Continue between maps? (Forces manual resets)"); } init { vars.game = 0.0; vars.loadingStuff = false; vars.failSafe = 0; } update { double tickRate = 180.0; if(current.ticks > 0 && current.ticks > old.ticks) { double newTicks = current.ticks - old.ticks; double secondsToAdd = newTicks / tickRate; vars.game += secondsToAdd; } if(current.round == 0 && (current.speed != 1 || current.speed != 0) && vars.failSafe == 1) { vars.failSafe = 0; } } gameTime { if(current.ticks == 0) { return null; } return TimeSpan.FromSeconds(vars.game); } start { if(old.ticks == 0 && current.ticks > 0) { vars.game = 0.0; return true; } else if((current.speed == 1 || current.speed == 0) && (old.speed == 256 || old.speed == 257)) { vars.game = 0.0; return true; } } isLoading { if(current.ticks == 0 && current.speed == old.speed && current.speed != 1 && current.speed != 0) { vars.loadingStuff = true; return true; } else if(settings["multi_level"] && (current.round == 40 || current.round == 60 || current.round == 80 || current.round == 100) && (current.speed == 256 || current.speed == 257)) { vars.loadingStuff = true; return true; } else if(settings["multi_level"] && current.round == 0) { vars.loadingStuff = true; return true; } else if(settings["multi_level"] && (current.speed != 1 || current.speed != 0)) vars.loadingStuff = true; return true; vars.loadingStuff = false; return false; } reset { if(settings["multi_level"]) return false; else if(current.ticks == 0 && old.ticks > 0) return true; else if (current.round == 0) return true; } split { if(settings["per_round"]) { if(current.round == old.round + 1) return true; } if(settings["multi_level"]) if(old.round != 1 && current.round == 1) return true; if(current.ticks != 0 && current.ticks == old.ticks && (current.round == 40 || current.round == 60 || current.round == 80 || current.round == 100) && vars.failSafe != 1) { vars.failSafe = 1; return true; } else if((current.round == 40 || current.round == 60 || current.round == 80 || current.round == 100) && (current.speed == 256 || current.speed == 257) && vars.failSafe != 1) { vars.failSafe = 1; return true; } }