//Made by Coltaho 2/7/2025 state("Brave Escape"){} startup { print("--[Autosplitter] Starting up!"); settings.Add("scriptsection", true, "---Script Options---"); settings.Add("debug", false, "Print Debug Info", "scriptsection"); settings.Add("infosection", true, "---Info---"); settings.Add("info", true, "Brave Escape AutoSplitter v1.1 by Coltaho", "infosection"); settings.Add("info1", true, "- Website : https://github.com/Coltaho/Autosplitters", "infosection"); } init { print("--[Autosplitter] Setting init variables!"); vars.myBaseAddress = IntPtr.Zero; vars.watchersInitialized = false; vars.tokenSource = new CancellationTokenSource(); vars.initializeWatchers = (Func<bool>)(() => { vars.watchers = new MemoryWatcherList() { new MemoryWatcher<int>(vars.myBaseAddress + 0) { Name = "magicnumber" }, new MemoryWatcher<int>(vars.myBaseAddress + 4) { Name = "caveindex" }, new MemoryWatcher<int>(vars.myBaseAddress + 8) { Name = "levelindex" }, new MemoryWatcher<long>(vars.myBaseAddress + 24) { Name = "totaltime" }, new MemoryWatcher<byte>(vars.myBaseAddress + 32) { Name = "iscompletable" }, new MemoryWatcher<byte>(vars.myBaseAddress + 35) { Name = "inmenu" }, new MemoryWatcher<byte>(vars.myBaseAddress + 37) { Name = "iscompleted" } }; vars.watchersInitialized = true; print("--[Autosplitter] Watchers Initialized!"); return true; }); vars.threadScan = new Thread(() => { print("--[Autosplitter] Starting Thread Scan..."); while(!vars.tokenSource.IsCancellationRequested) { print("--[Autosplitter] Scanning memory"); vars.scanTarget = new SigScanTarget(0, "D8 25 8D 57 ?? ?? ?? ??"); foreach (var page in game.MemoryPages()) { var scanner = new SignatureScanner(game, page.BaseAddress, (int)page.RegionSize); vars.myBaseAddress = scanner.Scan(vars.scanTarget); if (vars.myBaseAddress != IntPtr.Zero) { print("--Magic Number Address: " + ((long)vars.myBaseAddress).ToString("X")); vars.initializeWatchers(); break; } } if(vars.watchersInitialized) { break; } print("--[Autosplitter] Couldn't find Magic Number! Game is still starting or an update broke things!"); Thread.Sleep(2000); } print("--[Autosplitter] Exited Thread Scan"); }); vars.threadScan.Start(); vars.mystring = ""; vars.paststring = ""; } update { if(!vars.watchersInitialized) { return false; } vars.watchers.UpdateAll(game); if (vars.watchers["magicnumber"].Changed && vars.watchers["magicnumber"].Current != 1468868056) { print("--[Autosplitter] Magic Number incorrect! Address Changed! - Should have been resolved, breaking now!"); vars.watchersInitialized = false; } if (settings["debug"]) { vars.mystring = "--[Autosplitter] MagicNumber: " + vars.watchers["magicnumber"].Current + " | CaveIndex: " + vars.watchers["caveindex"].Current + " | LevelIndex: " + vars.watchers["levelindex"].Current + " | iscompletable: " + vars.watchers["iscompletable"].Current + " | iscompleted: " + vars.watchers["iscompleted"].Current; if (vars.paststring != vars.mystring) { print(vars.mystring); vars.paststring = vars.mystring; } } } start { if (vars.watchers["caveindex"].Current == 0 && vars.watchers["levelindex"].Old == 0 && vars.watchers["levelindex"].Current == 1) { print("--[Autosplitter] Go!"); return true; } } reset { if (vars.watchers["inmenu"].Current == 1) { print("--[Autosplitter] Reset!"); return true; } } split { if (vars.watchers["iscompletable"].Current == 1 && vars.watchers["iscompleted"].Old == 0 && vars.watchers["iscompleted"].Current == 1) { print("--[Autosplitter] Split!"); return true; } } isLoading { return true; } gameTime { return TimeSpan.FromTicks(vars.watchers["totaltime"].Current); } exit { vars.tokenSource.Cancel(); } shutdown { vars.tokenSource.Cancel(); }