UltraAchievements banner

UltraAchievements

3 devlogs
6h 28m 42s

This is the second rewrite of an ULTRAKILL mod I made. The first version was released in 2022 and the second in 2024. All the previous code is broken due to game updates so I decided to start from scratch in a new branch. As you may infer from the…

This is the second rewrite of an ULTRAKILL mod I made. The first version was released in 2022 and the second in 2024. All the previous code is broken due to game updates so I decided to start from scratch in a new branch. As you may infer from the name, the mod adds various achievements to ULTRAKILL since the game currently has none.

Repository

Loading README...

Glitchy

The main thing I did this time was set up the achievement pop up, which is what appears to let you know you’ve gotten an achievement. This required setting up both the Unity Project and adding a few things to the Core.
Unity Project
First I setup some key things like the Addressable Build Pipeline (Which I took with permission from https://github.com/wafflethings/WafflesWeapons/) and basic editor scripts (like a script to create an AchievementInfo). Then I had to actually create the pop up. To do this I took one of the existing UI elements in ULTRAKILL and modified it. I then created a test achievement using the previously mentioned editor script,
Core Changes
In the Core I started off with some basic refactoring and error handling improvements. Then all that was really left to get the pop up working was code to load the assets, and a script which determines the behavior of the popup
Attachment
The clip below shows a bit of gameplay I recorded showcasing what the popup looks like. For now it’s wired up to a key press but once I move on to the main Mod, ingame events can trigger the pop up instead.

0
Glitchy

I created the basics for the achievement system under the ‘Core’ C# project. The basics comprise of AchievementInfo classes and an AchievementManager
AchievementInfo
An AchievementInfo is a Unity Scriptable Object which stores basic information about your achievement, such as it’s display name and whether or not it has been completed. It can be inherited to create custom achievement types, such as ‘ProgressiveAchievementInfo’ which is an achievement which you can make progress towards (eg. 5/9 bosses killed).
AchievementManager
The achievement manager is what does most of the heavy lifting. It stores all registered achievements and saves/loads completion info from a binary file (achievements.dat). It is also what mod developers will use to mark achievements as complete, as the achievement manager will spawn a UI element based on the achievement info (not implemented yet).

Attachment
0
Glitchy

I’ve initialized a Unity project and a C# solution for the project. The Unity project is generated by Vanity Reprised, a tool which creates a Unity project in which ULTRAKILL assets can be modified and exported. The C# solution has 2 projects: A ‘Core’ which will have all the code which developers can interact with to add their own achievements. and a ‘Mod’ which has the achievements which I will create for ULTRAKILL.

The screenshot below shows the both DLLs being loaded by Bepinex (a mod loader).

Attachment
0