Skip to content

Instantly share code, notes, and snippets.

@wRadion
Last active May 1, 2025 13:27
Show Gist options
  • Save wRadion/1be7714969681aa70fd75767a55dd7d9 to your computer and use it in GitHub Desktop.
Save wRadion/1be7714969681aa70fd75767a55dd7d9 to your computer and use it in GitHub Desktop.
Blue Prince autosplitter/load remover
/**
* 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