Projects
I’ve created a lot of things to do with SMS speedrunning. You can use these links to browse live leaderboards, historic data, linked essays and source code.
IL Leaderboard (2023)
After a couple years’ experience with the 2021 IL leaderboard, I rewrote it from scratch to make it much faster, more reliable, robust and extensible. The engine synthesises data from several source sheets (or imports JSON data), validates it, merges it down and calculates statistics, then converts it into a display sheet and JSON data for a viewer web app to read. It’s a fully self-contained leaderboard.
It is an accurate leaderboard, made in response to the SMS community’s movement into censorship.
Censorship and Post-Truth
There were several concerning developments in 2022–23. Firstly, the Zoomer Iconoclasm movement led to top RTA player JJsrl pretending he had Any% world record when he didn’t. This was partly motivated by personal revenge, but largely enabled by the ambient culture of woke victim-protection crusading (which later years, of course, revealed to be a bunch of hot air from American liberals who don’t actually care about other people).
Secondly, the Toburrist Bingo Riot of January 2022 attempted to coerce the IL moderators into deleting (not just anonymising) runs, off the rationale that a person has absolute rights to control every instance of a historical event to do with em being mentioned or documented. It achieved little more than hounding an IL mod out of the community.
Thirdly, the Saulnier Doctrine split the community by inciting a cancellation based on a made-up abuser accusation, to effect the supremacy of the Bingo community and cover up its history of bullying and malicious rumour-mongering.
Among these waves of post-truth, censorships and arbitrary bans, the accurate leaderboard movement was born. Read about the ideological underpinnings in the manifesto.
Engine
- Engine Sheet: Featuring a dashboard, an “Add” sheet for run overrides, and a verification interface sheet and cache. The live version has sheets for user email addresses/form submissions as well, so I link to a template here.
- Engine Code: The Google Apps Script code attached to the engine sheet.
Input
- Submissions Sheet: A source sheet that users can edit. The live engine also reads in the older community IL sheet and merges the two.
- Submissions Form: A form that allows users to submit to the submissions sheet via Google accounts without editing it, and thus without requiring any mod intervention to register players / give them edit access.
Output Tables
- Table: The destination display table for the combined data.
- RTA Strats: A manually-managed sheet for RTA-strat ILs, with its own autonomous statistics script.
- Future ILs: A source sheet for users to submit ILs that aren’t read by the engine / included in the meta yet, as part of the 20xx new meta draft proposal.
- IL WR History 2022–23: A manually-managed sheet with world records recorded from the engine’s verification sheet for the entirety of these two years.
Output Data
- API Sheet: A sheet that output JSON data is written to.
- API: An endpoint to which the API Sheet’s script (part of the engine scripts) serves the API Sheet’s JSON data.
- Excel Analysis Tool: A tool used to analyse an IL output table offline. These can’t be opened in Google Sheets and must be downloaded and opened in Excel.
- Original Data Archive: A repository collecting old copies of live sheets, Excel analysis tools, and JSON data.
- Processed Data Archive: A repository of JSON data that the Viewer App’s scripts generate from the Original Data Archive’s data. This is just the Viewer App code’s history branch’s data folder.
- IL History Charts: Some charts tracking the progression of the IL leaderboards over the years.
Viewer App
- Live App: A web app to browse the current IL leaderboard; it loads the JSON data from the API.
- History App: The Live App adapted to load historic data from the Processed Data Archive.
- App Code: The HTML/CSS/JS code for the Viewer App. master branch: Live App; history branch; History App; future branch: has some proposed patches to handle the 20xx new meta draft proposal.
Video Archives
- Medal Archive: Has videos archived using the engine’s scripts and yt-dlp – top-3 videos are found here.
- Player Archive: As above – videos of players who’ve deleted their videos or are at risk of doing so are here.
SM64
Some scrappy ports of the above to SM64 XCams.
RTA Leaderboard
This is another accurate leaderboard (see the previous section for an explanation of the relevant history) made to patch the Speedrun.com leaderboards, and as a start towards eventually replacing them. It tracks Any% (No ACE) and 120 Shines, including deleted and unsubmitted runs.
- RTA Leaderboard: A single self-contained sheet, with an attached script, history tracker and retime lab. The source code can be seen by making a copy of the sheet and viewing its script.
- FFmpeg Retime Lab: A direct link to the downloadable retime lab; see also the video demonstrating and explaining the retiming procedure.
IL Leaderboard (2021)
The 2021 IL leaderboard engine was a rewrite of the older SMS community one and ran at the location of the original IL sheet from Jan 2021 to Oct 2022 as the attached script project.
I was the sole author of all but the _obsolete
folder and the Bolder...Segs.js
files, i.e. my code was used for all the sheets with “ILs” in their name but not “Segments”.
- Engine Code: The Google Apps Script code attached to the original IL sheet.
- Backend Sheet: The backend sheet used for caching updates to the main sheet (the 2023 IL Leaderboard doesn’t need such a cache).
- Retime Log: A sheet used to track retimes of runs.
- Verification Tool: A sheet used to track verification of runs.
Any% Timing Model (2023)
This models an Any% run from its contained gameplay (IL) segments, abstracting away loads, cutscenes and constant animations. The goal was to analyse a run into these building blocks, derive averages and constants from them, then encode these into a calculator which, when provided with the original gameplay segment timings, sums to the original full run.
- Model (PAL): The full model and analysis process.
- IL↔RTA Converter: The resulting calculator.
- Loads Sheets: A collection of load data of different runs, made with the model’s template.
- ILs Sheets: A template sheet for gameplay segment timings.
Any% Timing Model (2021)
This older model is just a top-down analysis of a sample run done on Swiss (native load/lag conditions) with an in-game-timer mod, based around my Wii. It also converts between gameplay segments (ILs) and real-time segments.
Autosplitters
I made two autosplitters and a blueprint for a third.
-
Shine-Get Autosplitter
A visual autosplitter targetting the standard shine-get frame used for splits in full-game runs. This isn’t a readily-usable tool, rather a report into a method for creating a bespoke tool. -
QFT Autosplitter
A memory autosplitter usable with the QFT timer on Dolphin that, coupled with stage loader, allows Fast IWs, Fast Any etc. to be done on cumulative IL timing. -
Elektrobank/Piku
A blueprint for a visual autosplitter to fully replace LiveSplit and AutoSplit – parsing encoded videos frame-by-frame, using computer vision to generate signals of events in the video, and automatically interpreting non-linear flowcharts of events into segment timings. This succeeds an earlier sketch called Veep.
Streams Bot
A bot that posts messages or assigns roles (on Discord) to indicate players who are currently streaming (on Twitch), in service on the SMS Discord since March 2020, ongoing as of Dec 2023.
Misc
- Any% World Segment Calculator
A spreadsheet that calculates world segments (and golds) for every attempt (from a splits file) by summing level segments. This has been superseded by therun.gg’s Gold Explorer Merge tool.