ULTRASTATS
Stat tracking, stat viewing, performance analysis, and run logging for ULTRAKILL. (UPDATE ID: FEATHER)
By AtomSmasher
CHANGELOG
Changelog
v0.1.4
- Fixed a bug where ULTRASTATS couldn't init the database.
- Implemented much more powerful capture system capable of capturing secret level runs, and knowing how the scene changes, what sources to read from, etc. This smarter and more reliable and powerful capture will allow for partial run tracking which should allow for full-game%, layer%, and angry-bundle% to be tracked in the next update.
- Compressed and optimized database using variable packing:
dwanks. And other optimizations to the database.
v0.1.3
- Improved filters window greatly by organizing stuff better, and swapping from from dropdowns with 3 options to tri state buttons.
- Added new filter window tri state buttons for all sorts of things.
- Added +FORCERADIANCE and +FORCESAND tracking when enabled in the console.
- Now runs where you take 0 damage will have have an orange 0 for the entry in the deaths column.
- Runs with +FORCERADIANCE, and/or +FORCESAND will have the date of the run be colorful depending on the buffs used.
- Moved all of the dlls for SQLite onto a dependancy mod.
v0.1.2
- Added
Delete Runbutton that appears when you right click the Run ID on the chart in the stats tab. - Added rank colors to the filter window rank filter.
- Added +FORCERADIANCE and +FORCESAND tracking and filtering to custom levels in the ULTRAKILL /// REPRISE bundle (I'm a big fan).
- Added the option to sort custom bundles list in the filter window by last updated or last played as well as alphabetically.
v0.1.1
- Added the
Total time:line to the analysis window, this is the amount of time you spent on every run. - Removed
Stored version(s):from the analysis window since custom level version storage is no longer supported in the new database format. - Improved look of the chart in the STATS tab.
- Fixed the analysis and filter windows to now darken the entire screen behind it.
v0.1.0
- Run logging now uses data from the StatsManager (tab stats display) as a backup if data from FinalRank (level end screen) is unusable. This should ensure that run logging is far more reliable.
- Moved from storing data in a complicated filestructure with many folders and subfolders to storing data in a SQLite database. Using a SQLite is far faster, more flexible, and in the long term is much smaller when it comes to filesize.
- Added migration from the old
.jsonlfilestructure to the new SQLite database. Old files are not deleted automatically. - Added filters, better sorting, and analysis support built around the new SQLite database.
- Added compatibility flags for FENTOKILL and Nemesis campaign runs.
- Added PluginConfigurator options to show or hide the FENTOKILL and Nemesis flags in the filters window.
- Added startup popups for new users and for users who still have both the old filestructure and the new database.
- Improved custom difficulty support and added special save slot names for modded save files like Masquerade Divinity and STRAYMODE.
- Removed points earned from being tracked (points can be calculated from a run's style/wave and flags, so logging p earned is redundant).
v0.0.15
- Further improved the queue-save system to ensure no runs slip through the cracks.
- Added compatability with custom difficulties, including BananasDifficulty, BillionDifficulty, SavageDifficulty, and ULTRAPAIN.
- Added an analysis window to the stats tab, allowing users to view stat averages, standard deviations, and best values, among other things.
- Won Mod of the Month for March 2026! Changed the mod's icon to incorporate MotM purple and improve the icon's background.
- Fixed the "X" button's font so now it uses VCR OCD Mono.
- Contained "rogue" AI... I hope...
v0.0.14
- Added flagging for Cybergrind runs.
- Returns filepath display back into the status section of the stats tab, this time called "Source" and only displays the filepath starting from the ULTRASTATS data folder.
- Added ID coloring in the stats tab based on whether or not the level challenge was completed that run. Runs with completed challenges will display ID as a gold color. (non-Cybergrind only)
- Added Rank coloring for run flags, so when a run used cheats the rank will display as a white underscore on a green background. With major assists the rank will display as blue on white. (non-Cybergrind only)
- Added ID coloring for run flags for cybergrind stats.
v0.0.13
- No longer the name of player's user folder in the stats tab.
- Image folder be compatable using r2modman, so now the icon and the easter egg should work properly.
v0.0.12
- Added rank based font coloring in the stats viewer. So values will be colored according to the rank of that value.
v0.0.11
- Added PluginConfigurator preferences for the main menu button corner, default ULTRASTATS tab, default STATS difficulty, and STATS ID sort order.
- Added tabs to the ULTRASTATS main menu UI, currently there are tabs for INFO, STATS, and PLOTS.
- Added new ways to close the ULTRASTATS main menu UI, including a top-right “X” button and the ESC key.
- Added an in-game stats viewer in the STATS tab that reads saved ULTRASTATS files and converts stored values like Unix timestamps and run times into human-readable formats.
- Added more readable STATS tab labels for difficulties, campaign layers, and custom bundle/level names.
- Changed queued runs to save immediately after queueing when endscreen discards are disabled, reducing the chance of bad pending-state behavior if the player spam clicks through the endscreen.
- Changed campaign and custom run capture to wait for complete endscreen data before queueing or saving, preventing incomplete run data from being logged when the endscreen is spam clicked.
- Changed the main menu button icon to a less obnoxious version.
- Changed the main menu button and all other buttons to ones that look identical or near identical to ULTRAKILL's official UI buttons.
- Added an easter egg...
v0.0.10
- Added a button in the main menu that gives info about ULTRASTATS as a project.
- Fixed an issue where if Angry Level loader wasn't installed the other two loggers wouldn't work properly
v0.0.9
- Improved long-term performance by moving everything possible off the main thread.
- Reduced the chance of logging systems hurting game performance.
v0.0.8
- Added async file saving.
- Added support for custom level data saving through Angry Level Loader.
v0.0.7
- Added a queue system for run logging.
- Run data is now collected on the end screen, queued, printed to the BepInEx terminal, and appended to the
.jsonlfile when the scene changes. - Added an option to use the Delete key to discard a queued run instead of appending it to the
.jsonl.
v0.0.6
- Removed the difficulty clamp to improve compatibility with custom difficulties.
- Added a configurable filepath for the ULTRASTATS data folder.
- Added PluginConfigurator options to disable Cybergrind logging or Campaign logging entirely.