ULTRASTATS
Stat tracking, stat viewing, performance analysis, and run logging for ULTRAKILL. (UPDATE ID: FEATHER)
By AtomSmasher
CHANGELOG
Changelog
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.