LiveSplit Scripting

LiveSplit Auto Splitters (ASLs)

Automated timers, memory watchdogs, and frame-accurate split triggers for speedrunners

A collection of custom Auto Splitter (.asl) scripts developed for LiveSplit. By directly scanning target process memory, game engines (Unreal, Unity), and emulators (AppleWin, DOSBox-X), these scripts eliminate human error, provide sub-frame split accuracy, and calculate precise In-Game Time (IGT).

Explore Auto Splitter Scripts

Unreal Engine · Comprehensive Category Logic

Raji: An Ancient Epic

File: raji.asl

Download .asl
Categories: Any% NMG, All Orbs NMG Engine: Unreal Engine 4 Triggers: Splits, Cutscenes, Orbs

Features & Implementation Details

  • Advanced Category Split Trees: Automatically splits on chapter completion, major boss encounters (Ghor, Rangda, Mahabalasura), and checkpoints.
  • All Orbs NMG Support: Scans orb counter state in memory and fires individual subsplits when collecting orbs across ruins.
  • Timer Setup Tip: In the current build, start is triggered manually. Pro-tip: Bind the same key for starting LiveSplit and launching the game from the title screen menu for 0.00s alignment.
Script Configuration Snippet C# / ASL
state("Raji-Win64-Shipping")
{
    // Auto-splitter scans player location, game state flags, and current orb counters
    // Supports custom configuration checkboxes in LiveSplit settings menu
}
AppleWin Emulator · Exact 12 FPS Frame-Clock IGT

Prince of Persia (Apple II)

File: PrinceOfPersiaApple][.asl

Download .asl
Platform: AppleWin 1.30.3.0 Timing: Frame-accurate IGT (Ticks / 12.0) End Trigger: Princess Room (0xFF)

Features & Implementation Details

  • Automated Start: Automatically starts the timer the exact tick Level 1 begins (current.Level == 1 && current.Ticks == 0).
  • True 12 Hz Apple II Clock: Reads emulator frame ticks directly from memory and converts to accurate Game Time: current.Ticks / 12.0.
  • Precise Splits: Fires split triggers immediately when Prince exits level doors (levels 1 through 13) and when Level 14 EndGame byte turns to 0xFF.
  • Auto-Reset: Detects menu resets via memory flags Reset1, Reset2, and Reset3.
AppleWin Memory State Block ASL
state("AppleWin")
{
    byte Level   : "AppleWin.exe", 0x1F5498, 0x031C; // Level 1-14 changes
    ushort Ticks : "AppleWin.exe", 0x1F5498, 0x0306; // Ticks one per frame
    byte EndGame : "AppleWin.exe", 0x1F5498, 0xE14A; // 255 at Princess room
}
Unity Engine · asl-help Integration

Cell Machine / Game Inside a Game

Files: cell.asl & game_inside_a_game.asl

Download cell.asl Download game_inside_a_game.asl
Engine: Unity Mono Dependency: Components/asl-help Triggers: Auto Start & Level Victory Splits

Features & Implementation Details

  • Unity Scene Hook: Hooks Unity's SceneManager and monitors transition from Title to Game to auto-start.
  • Grid Victory Detection: Reads GridManager.levelWon and GameData.level to split each time a cell puzzle is solved.
  • Game Inside a Game: Companion script (game_inside_a_game.asl) included for nested in-game puzzle speedruns.
  • Startup Note: On a fresh game launch, load into a level first once so Mono classes populate in memory, then return to the main menu before starting your speedrun attempt.
Mono Hook & Level Split ASL
split
{
    return !old.levelWon && current.levelWon && vars.CompletedLevels.Add(current.level);
}
DOSBox-X 0.83.8 · Savestate Practice & Strat Timing

DOSBox-X 0.83.8 IGT

File: DOSBox_0.83.8_IGT.asl

Download .asl
Platform: DOSBox-X 0.83.8 Target: Classic DOS In-Game Timer Use Case: Savestate Practice & Route Optimization

Features & Implementation Details

  • Practice in True IGT: Because standard DOSBox does not support savestates, DOSBox-X is preferred for practice. This script reads the game's remaining minutes and frame seconds directly from DOSBox-X memory.
  • Frame-Accurate Conversion: Accurately calculates elapsed game frames ((60 * 720) - adjustedFramesLeft) / 12.0 into seconds.
  • Strat Comparisons: Compare room strats and tricks in exact game time down to the tick!
DOS Timer Math ASL
gameTime
{
    int minutesLeft = current.MinutesLeft - 1;
    int totalFramesLeft = (minutesLeft * 720) + current.FrameSeconds;
    int elapsedFrames = 60 * 720 - totalFramesLeft;
    return TimeSpan.FromSeconds(elapsedFrames / 12.0);
}

How to Install in LiveSplit

Step 1

Download the Script

Download the desired .asl file from above or copy the raw URL from the repository.

Step 2

Open Layout Editor

In LiveSplit, right-click anywhere → click Edit Layout... → click the + button → Control → Scriptable Auto Splitter.

Step 3

Point to Script

Double-click Scriptable Auto Splitter in your layout list, click Browse... and select your downloaded .asl file.

Step 4

Compare Against Game Time

Right-click LiveSplit → Compare Against → choose Game Time if the script provides IGT (e.g. PoP Apple II or DOSBox-X).

Have a bug or need a custom split?

If you encounter an issue or want custom category split conditions added, reach out on Discord or open an issue on GitHub: