by OpenRAC contributors · v1.0.2 · 100 downloads
Splits a LiveSplit timer at every planet by talking to LiveSplit's own server, so a speedrunner does not have to touch the timer.
Splits a LiveSplit timer as the player goes from planet to planet in Ratchet & Clank, for OpenRAC's native port (PAL and NTSC-U discs): the mod talks to LiveSplit's own server and splits at every planet, so a speedrunner does not have to touch the timer.
With the mod off, the game is the PlayStation 2 game.
https://github.com/OpenRAC/rac1-mods), switch it on, choose its settings and start the game.| Setting | Default | |
|---|---|---|
| Split | When a planet is reached | When a planet is reached: the split is taken when the planet's level is loaded, so the flight to it and its loading are in the segment before. When a planet is left: the split is taken when the game goes back to the galaxy map, so they are in the segment after |
| Start | At the first planet | At the first planet: the mod resets LiveSplit's timer and starts it when the run's first planet is loaded. By hand: the mod never resets or starts the timer; start it yourself, before the first split |
| Game time | on | Sends the game's own time (its ticks) to LiveSplit, for the Game Time timing method. With the timer started by hand, the time is counted from the first planet, not from the moment you start the timer |
| Server port | 27500 | The port LiveSplit's server listens on (its Settings) |
| Protocol | Ask the server | Ask the server: the mod tries the TCP server and, when that is not there, the WebSocket one. TCP and WebSocket pick one |
| Trace | off | For bug reports: a line in the game's log for every planet reached and left |
Start LiveSplit's server before the game: the mod keeps the commands it is given while the server is not there and sends them when it comes, but a timer that starts late is a timer that starts late.
Starting over. When the player enters a planet the run has already been to, the run begins again: the mod resets the timer and starts it, and the splits go on from there. That is what happens when the player goes back to the title and begins a new game, or loads a save: the way a run is reset. It also happens when the player goes back to a planet he has already been to in the same run, which is a mistake rather than a reset: the timer starts again from there.
Dying does not split. The game loads a level's gameplay again when Ratchet dies, which is not a new planet: the mod keeps the planet it last saw, and the timer runs on.
The game plays nineteen levels, one a planet, and every route goes through all of them: the planets' coordinates are what the run is after. Your splits file should have one segment a planet, named as the game names them:
| Level | Planet | Level | Planet | |
|---|---|---|---|---|
| 0 | Veldin | 10 | Orxon | |
| 1 | Novalis | 11 | Pokitaru | |
| 2 | Aridia | 12 | Hoven | |
| 3 | Kerwan | 13 | Gemlik Base | |
| 4 | Eudora | 14 | Oltanis | |
| 5 | Rilgar | 15 | Quartu | |
| 6 | Blarg Station | 16 | Kalebo III | |
| 7 | Umbris | 17 | Drek's Fleet | |
| 8 | Batalia | 18 | Veldin (final) | |
| 9 | Gaspar |
The names are the game's own; the last planet is Veldin again, where Drek's robot is.
The mod splits at every planet, whatever the category: Any %, 100 % and All Gold Bolts all go through the nineteen planets, and the segments are the same.
For modders and the curious. The parts:
| File | |
|---|---|
| src/live_splits.cpp | the mod: the settings, the hook, the tick |
| src/splits.cpp | the state machine: the game's levels in, LiveSplit's commands out |
| src/client.cpp | the connection to LiveSplit's server, on a thread of its own |
| src/levels.hpp | the planets' names |
What the game is read through. Two things, and nothing else:
Level_LoadGameplay (the hook point rac1.level.load_gameplay): the level's gameplay file
is loaded, so the planet is reached. The game loads it again when Ratchet dies, which is not a
new planet: the mod keeps the planet it last saw.openrac_api.loaded_level): none means the game is in the
galaxy map, so the planet before it was left.Nothing of the game is changed, and no hook point of the game's is replaced.
The commands. The mod sends LiveSplit the ones its server knows: reset, starttimer,
split and setgametime (the game's own time, for the Game Time timing method). It speaks the
server's own line protocol, over TCP or over a WebSocket: the mod asks the server which one it is
when the setting says so, and the answer tells it.
The thread. The socket is a thread of its own: the game's thread only puts the commands in a queue and reads what the client knows of the connection, and never waits for the network. The client never calls into the port.
ctest --test-dir build -R live_splits
An OpenRAC whose port has the Level_LoadGameplay hook point (the behaviour catalogue's, in
every OpenRAC of 2026-10-21 and later). An older one refuses the mod with the reason.
live-splitsNothing: it works on its own.
Built by the build workflow from 892c17401da544daf7efa229b5e672f892e2fe46, against the OpenRAC mod SDK 1.10.1.
Install: paste this repository's address in the OpenRAC launcher's Mods tab, or add a .zip there.
Built by the build workflow from 43f9c26b15074ccbf8db99851c93954e26cda211, against the OpenRAC mod SDK 1.3.0.
Install: paste this repository's address in the OpenRAC launcher's Mods tab, or add a .zip there.
Built by the build workflow from 04bb17e95718619219e4753af77ffc45a5b55515, against the OpenRAC mod SDK 1.3.0.
Install: paste this repository's address in the OpenRAC launcher's Mods tab, or add a .zip there.
Live splits · v1.0.2 · ⚠
Comments
No comments yet. Tried it? Say how it went.
Comment on GitHub