Last active
May 1, 2025 13:27
-
-
Save wRadion/1be7714969681aa70fd75767a55dd7d9 to your computer and use it in GitHub Desktop.
Blue Prince autosplitter/load remover
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Blue Prince autosplitter/load remover | |
* v1.0 by wRadion | |
*/ | |
state("BLUE PRINCE") | |
{ | |
} | |
startup | |
{ | |
Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity"); | |
vars.Helper.LoadSceneManager = true; | |
settings.Add("antechamber", false, "Split when entering Antechamber"); | |
} | |
init | |
{ | |
vars.Helper.TryLoad = (Func<dynamic, bool>)(mono => | |
{ | |
var stats = mono["StatsLogger"]; | |
vars.Helper["Timer"] = vars.Helper.Make<float>(stats.Static + 0x0, 0xB0); // Active._recordTimer | |
vars.Helper["RoomId"] = vars.Helper.Make<int>(stats.Static + 0x0, 0x70); // Active._lastRoomID | |
vars.Helper["EventCount"] = vars.Helper.Make<int>(stats.Static + 0x0, 0xB8, 0x30, 0x28); // Active._currentRecordingDay.DayEvents._totalEventCount | |
return true; | |
}); | |
vars.baseTimer = 0.00f; | |
vars.canStart = false; | |
vars.canReset = false; | |
} | |
start | |
{ | |
// Start when IGT is starting (and Mount Holly Estate scene was loaded beforehand = vars.canStart) | |
if (current.Timer != old.Timer && current.Timer > 0 && vars.canStart) { | |
vars.baseTimer = 0.0f; | |
vars.canStart = false; | |
return true; | |
} | |
} | |
reset | |
{ | |
// Reset when Main Menu scene is active (and was loaded beforehand = vars.canReset) | |
if (current.activeScene != old.activeScene && current.activeScene == null && vars.canReset) { | |
vars.baseTimer = 0.0f; | |
vars.canReset = false; | |
return true; | |
} | |
} | |
isLoading | |
{ | |
// Not necessary with gameTime defined, but keep the timer "steady" | |
return (current.Timer == old.Timer); | |
} | |
gameTime | |
{ | |
return TimeSpan.FromSeconds(vars.baseTimer + current.Timer); | |
} | |
split | |
{ | |
// Save and accumulate last day timer (multi-days runs) | |
if (old.Timer > current.Timer && current.Timer == 0) | |
vars.baseTimer += old.Timer; | |
// Split when entering Antechamber | |
if (settings["antechamber"] && current.RoomId != old.RoomId && current.RoomId == 45) | |
return true; | |
// Split on clicking Room 46 door | |
if ((current.RoomId == 45 || current.RoomId == 46) && (current.EventCount - old.EventCount >= 3)) | |
return true; | |
} | |
update | |
{ | |
// Get the current active scene | |
if (vars.Helper.Scenes.Active != null) | |
current.activeScene = vars.Helper.Scenes.Active.Name; | |
// Get the scene that's loading | |
if (vars.Helper.Scenes.Loaded.Count > 0) | |
current.loadingScene = vars.Helper.Scenes.Loaded[0].Name; | |
// Know when to start or reset (when loading a specific scene) | |
if (old.loadingScene != current.loadingScene) { | |
if (current.loadingScene == "Mount Holly Estate") | |
vars.canStart = true; | |
if (current.loadingScene == null) | |
vars.canReset = true; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment