This is a simple LiveSplit ASL script for Unreal Tournament (1999) speedrunning. So far, it only works with the PC version 469e - Release of the game. You can download the latest release version of the game on the OldUnreal's website, or download the latest community patch on the OldUnreal's GitHub page.
Note
If you're not running the latest release version of the game, the autosplitter will prompt you to update your game.
Tip
Make sure you have installed the latest version of LiveSplit.
Simply download the ut99-autosplitter.asl file.
After that, right click your splits and select Edit Layout... > (+) > Control > Scriptable Auto splitter. Then double click the Scriptable Auto splitter component, select Browse and choose the previously downloaded file. If no option appear, it means the script initialization has failed. Make sure you have the latest version of LiveSplit installed.
Note
Some features won't properly work in practice sessions, as the autosplitter is tailored for ladder mode.
By default, the autosplitter will auto-start the timer at the beginning of any level (right after spawning in the level). It can also auto-start at the beginning of a specific level, which can be specified in the autosplitter's settings.
By default, the autosplitter will auto-split the timer at the end of any level, only if the player is victorious. It can also auto-split at the end of a specific level, which can be specified in the autosplitter's settings.
By default, if the 'Reset' checkbox is checked, the autosplitter will auto-reset the timer at the beginning of any level (when the "Waiting for ready players" screen is active). This is only useful if you are attempting a speedrun on a single level. However, it can also auto-reset at the beginning of a specific level, which can be specified in the autosplitter's settings.
The autosplitter is able to compute the total time spent in any level. You will no longer have to manually add up all of the in-game times after the completion of a run!
If the corresponding setting is enabled, the Game Time timing method from LiveSplit will return the LRT time, which is basically RTA but with pauses during loading times.
Caution
Be aware that the Unreal Tournament (1999)'s speedrun.com leaderboard will not accept submissions with LRT instead of RTA for now. RTA is still the main method of timing on the leaderboard.
Double clicking the Scriptable Auto splitter component in your layout editor will bring the settings window. If no option appear, it means the script initialization has failed. Make sure you have the latest version of LiveSplit installed. By default, the script will:
- auto-start and auto-reset at the beginning of the ITV Oblivion level
- auto-split at the end of every level if you are victorious
This works well with the Full Game category and the DM category, the two most popular categories on speedrun.com. Read below if you want to attempt other categories.
Caution
If no checkboxes are checked for specific levels, but you still have the Start or Reset option checked, the timer will start/reset automatically at the start of ANY level.
If you have no splits and just want to start and end the timer according to the category you are running, I recommend the following settings:
- check the Auto-start at the start of a specific level and the Auto-reset at the start of a specific level and select the first level of your run (either ITV Oblivion, Condemned, Niven, Frigate or Phobos). If you are attempting a single level run, leave these options unchecked
- check the Auto-split at the end of a specific level option and select the last level of your run (either The Peak Monastery, Metal Dream, November Sub Pen, Orbital Station #12, Operation Overlord or HyperBlast). If you are attempting a single level run, leave this option unchecked
If you are attempting a Full Game (Standard) run and want to split at the end of each level, you are already set! This is the default script behaviour. But just in case, I recommend the following settings:
- check the Auto-start at the start of a specific level and the Auto-reset at the start of a specific level and select ITV Oblivion
- leave the Auto-split at the end of a specific level option unchecked
If you are attempting a Full Game (Standard) run and want to split at the end of each gamemode ladder, I recommend the following settings:
- check the Auto-start at the start of a specific level and the Auto-reset at the start of a specific level and select ITV Oblivion
- check the Auto-split at the end of a specific level option and select The Peak Monastery, Metal Dream, November Sub Pen, Operation Overlord and HyperBlast
You can also select Fractal Reactor, Cryptic and Eternal Caves if you want to split after unlocking a specific gamemode ladder.
If you are attempting a Full Game (GOTY) run and want to split at the end of each level, you are already set! This is the default script behaviour. But just in case, I recommend the following settings:
- check the Auto-start at the start of a specific level and the Auto-reset at the start of a specific level and select ITV Oblivion
- leave the Auto-split at the end of a specific level option unchecked
If you are attempting a Full Game (GOTY) run and want to split at the end of each gamemode ladder, I recommend the following settings:
- check the Auto-start at the start of a specific level and the Auto-reset at the start of a specific level and select ITV Oblivion
- check the Auto-split at the end of a specific level option and select The Peak Monastery, Metal Dream, Orbital Station #12, Operation Overlord and HyperBlast
You can also select Fractal Reactor, Cryptic and Eternal Caves if you want to split after unlocking a specific gamemode ladder.
If you are attempting a gamemode ladder run and want to split at the end of each level, I recommend the following settings:
- check the Auto-start at the start of a specific level and the Auto-reset at the start of a specific level and select the first level of your run (either ITV Oblivion, Condemned, Niven, Frigate or Phobos)
- leave the Auto-split at the end of a specific level option unchecked
If you are attempting a single level run, I recommend the following settings:
- uncheck the Auto-start at the start of a specific level and the Auto-reset at the start of a specific level options
- leave the Auto-split at the end of a specific level option unchecked
To display the in-game time, simply add a Timer (Edit Layout... > (+) > Timer > Timer), then double click the newly added Timer and change the Timing Method to Game Time.
For extra challenge, you can also check the No death challenge option. This will auto-reset the timer if you ever die during your run.
You can also split on very flag capture by checking the Split after every flag capture on CTF maps option.
Some variables are made available in the script so you can display them in your splits, just as extra information. To do this, you'll need to install the ASL Var Viewer LiveSplit component.
After that, add the component to your layout. Right click your splits and select Edit Layout... > (+) > Information > ASL Var Viewer. Then double click the ASL Var Viewer component to open the component's settings. Under the Value category, you'll find a Value Container field.
Under Current state, you will find:
- localizedLevelName (the name of the current map, in your game's language)
- localizedGamemodeName (the name of the current gamemode, in your game's language)
- airControl (player's air control value in percentage (%); will be 1 if under the AntiGrav boots effect; previously used as an anti-cheat experimental feature)
- jumpZ (player's jump height value; default is 325, or 357,5 if in Hardcore mode; will be 975 under the AntiGrav boots effect; previously used as an anti-cheat experimental feature)
Under Variables, you will find:
- numberOfDeaths (total deaths of the player during the run)
- gameStyleGlitchStatus (simple message explaining the reason if and why the game style glitch is being used)
- humanPlayerScore (player's score or player's team's score, depending on the current gamemode; rounded to be more humanly readable)
- scorePerMin (player's score or player's team's score per minute, depending on the current gamemode; rounded to be more humanly readable)
- estimatedLevelInGameTime (level in-game time prediction based on the player's current pace; updates regurarly depending on score and elapsed time)
The last three variables will only update after each frag in DM, after each point earned in DOM or after each flag capture in CTF. These are not updated in AS maps.
You will also have a multitude of other variables, which are being used by script. Play with the settings a bit to see if you find something interesting!
If you have any trouble running the autosplitter properly, simply open an issue on the project's GitHub page, or send me a message on Discord. You can either add me (username codem) or ping me in the Unreal Speedrunning Discord server.
Also, if you wish to update the script so it can work for other versions, feel free to contact me or create a pull request. I'll be happy to share my knowledge and Cheat Engine table.
- liveth, /u/Envian, Driver and ISO2768mK for their autosplitters (Quake III Arena, UT2k4 and Horizon Forbidden West)
- Stephen Chapman for his Cheat Engine tutorial playlist
- Slipyx for exporting UT99 UnrealScript sources
- href404 and zackan for their help beta testing the script and their continuous support
- the Unreal speedrunning community, go checkout their Discord server!