UltraAchievements Revamped banner

UltraAchievements Revamped

9 devlogs
24h 38m 42s

Updated Project: A rewrite of an Ultrakill mod I made in 2022 (and then 2024 with a revamped version). Old versions are just completely broken on current version of the game so I remade it from scratch… a third time

This project uses AI

Claude Code was used to review and identify issues in the codebase. All code was written by me.

Demo Repository

Loading README...

Glitchy

Shipped this project!

Hours: 24.65
Cookies: 🍪 706
Multiplier: 23.85 cookies/hr

Third time around I’m rewriting this mod. I’m happy with the codebase this time though, and since the game is a lot more stable it shouldn’t require any more rewrites in the future. I’m particularly proud about how easy it is to use the Core/Library, it’s so simple to use and still has enough features.

Glitchy

I spent a nice long time getting a really good README working. I tried to detail pretty much everything you would ever do with this codebase, whether it be building from source or making mods using the Core. I also made a trailer video, pretty basic but I think it does the job of explaining what the mod does at a very basic level. It’s attached below for those who don’t want to go to YouTube to view it.

0
Glitchy

I finished up another batch of achievements, 7 more this time making the total 15. I tried to not do basic progression achievements since I find them boring, achievements should encourage you to explore the game and try different things instead of making you do something you were probably going to do anyways. After finishing up the batch I also used claude code once again to go through the code and review it, allowing me to catch a few edge cases here and there

Attachment
0
Glitchy

So at this point I’m working only only on the mod, not the core since that’s complete. I created 8 achievements, and I am really happy I put the work into making it easy to make achievements. It’s literally one scriptable object in Unity and a bit of code per achievement once you’ve done the boilerplate. Of course testing and debugging when I make a mistake still takes a bit of time, and unity builds feeling slow is also annoying. Eventually I’ll make icons for the achievements, but for now they have none (as seen in the screenshot below).

Attachment
0
Glitchy

I did a bit of code cleanup and finalizing the core so I can move on to the actual mod. For example, I added a method for creating Achievement Info purely through code, for people who don’t want to deal with the Unity Editor.

Core

A decent bit of time went into standardizing error messages and making code a bit more clear and consistent across the codebase. To do this part a bit more efficiently I asked Claude Code to do code review only, it made absolutely no edits to the codebase. I only used it as a tool to identify flaws in the codebase.

Unity

I made exactly one change to unity this time around, I made it so the icon for achievements which haven’t been completed is a question mark, as seen in the attachment below.

Attachment
0
Glitchy

We have a working menu!! This took a while since creating unity UI is always a bit of a pain, even if it’s mostly copying over existing assets and modifying them. The way I’ve decided to handle it is having 6 pages of 4 achievement providing mods, since I think a scrolling menu here would look out of place. On the other hand each mod can have as many achievements as it would like since that’s a scrolling menu. Accessing it is as simple as clicking the smile icon in the top right, though that might conflict with other mods.

Core

On the code side I did a bit of refactoring and codebase cleaning and created the AchievementPanel class which handles the achievement menu seen in the preview.

Unity

When it comes to the unity project I had to redo a few objects since the refactoring changed namespaces which breaks Unity stuff (never again) and I obviously finished up the menu.

1

Comments

Glitchy
Glitchy 11 days ago

Ignore the clipping of the title, realistically no mod name should be so long that it clips (hopefully)

Glitchy

I really only did 2 main things. I updated the build pipeline to support building multiple mods in the same pipeline, and I started working on the in-game UI for seeing your achievements. It’s semi-complete in the unity editor, but I’m going to have to hook it up to AchievementManager for it to work in-game.

Attachment
0
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.

1

Comments

Glitchy
Glitchy about 1 month ago

The build pipeline is now under licensed under MIT License at https://github.com/CultOfJakito/UltrakillTemplateProject

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