RedeeMOD
- 10 Devlogs
- 58 Total hours
A cross-platform (Windows/Linux) modding platform for games! It was primarily built for Unreal Tournament game series, but can be easily expanded to support any game imaginable!
A cross-platform (Windows/Linux) modding platform for games! It was primarily built for Unreal Tournament game series, but can be easily expanded to support any game imaginable!
Feedback
Hey DoMax,
Awesome project! I'd love to see what you make in the future! (also, sorry to keep you waiting)
For any other questions, DM @Andrew or create a ticket in Slack—#ask-the-shipwrights.
Shipwright walkthrough
Feedback
Hi there, this project is really cool, however, your readme must include the following things:
- what your project is & what it does
- a little bit about how you made it
- how to download & run it
Add these things to your readme, resubmit, and you should be good!
For any questions, DM @sl4shed on Slack or drop a message in #ask-the-shipwrights!
Shipwright walkthrough
Feedback
Hi, this looks like a really useful project however i couldnt get a mod working for unreal tournament 99, maybe i just dont know how its supposed to work?
for context this is the mod i tried to install: https://www.moddb.com/mods/food-fight
i dont really know how modding usually goes for ut99 so maybe this is an issue on my part. feel free to DM @sl4shed on Slack if u want to figure this out
For any other questions, drop a message in #ask-the-shipwrights!
Shipwright walkthrough
Feedback
hi, cool project!! unfortunately, we are unable to accept your project at this time because it has a heavily vibecoded readme and releases description which you need to rewrite yourself. please do not use ai assistance for writing READMEs, releases, or devlogs.
Shipwright walkthrough
How (and why) I implemented tests in RedeeMOD
My dad is a high profile developer, and many new things I try are influenced by him. While I always liked setting up CI/CD pipelines and other automations, one thing my projects lacked was testing.
Turns out, many tech jobs require knowledge about tests, because they guarantee several things:
So, after considering these benefits, I started reading how tests are implemented.
There are 3 main types of tests:
First thing any testable software should have is clear dependency injection.
Dependency injection is a pattern where you don’t call dependencies directly, but pass them externally. I opted for implementing method argument injection that I could later use in tests.
Why is DI required? Well, during testing, the external environments must be mocked and created virtually to test different use cases (things like sys.* calls and more). Luckily, RedeeMOD already had a nice and semi-testable architecture where very few things needed to be changed.
Writing tests is a tedious and rather boring process, because all the edge cases must be defined. Don’t hate me for this, but I handed over writing tests to AI. My arguments for why AI is appropriate for this are:
While one could argue that Test-Driven Development exists, after trying it out I can confidently say that I’m not a fan of TDD.
However, giving very broad instructions, like “Make me tests for this project” usually doesn’t go well, because AI can’t retain project philosophy and tests what doesn’t need to be tested (things that don’t contain logic, thus can’t really fail).
RedeeMOD currently has a test suite based on pytest with integration and unit tests written.
With tests, instead of clicking around (and often forgetting) every edge case manually, you can offload it to a machine that does hundreds of calculations extremely fast. Not only is it a well-regarded pattern within the developer community, but also helps with coding efficiency and guards from failed refactors.
Thought RedeeMOD would only be available for niche titles? Not exactly!
Most people would probably agree with me that Quake 3 Arena was the best entry of the series for multiplayer games.
After seeing just how many Quake 3 mods there are (some even being standalone games) I had to implement an adapter for it with support for both standalone games and mods!
I resorted to the IOQuake 3 engine support due to its extra capabilities and being the modern choice for most, so original Id Tech 3 might not work.
IOQuake 3 inherits cvar support (and adds more!) from Id Tech 3 engine. Utilizing com_basegame, i could bypass Quake 3 Arena file presence for standalone games.
The new adapter follows an interesting edge-case detection logic:
default.cfg file somewhere within its .pk3 files, it’s considered standalone. Other games are required to have genuine Quake 3 Arena present, about what RedeeMOD will warn.baseq3 and missionpack directories. This adapter handles warning users against such restriction.All mods I tested worked fine. If you find one that does not, kindly report it on GitHub issues 😄
No doubt, the amount of testing that was required to get this working is absurd, and definitely it was the most challenging adapter of all.
Feedback
Hey there,
sadly I have to reject your project because your project banner does not show your project in action. Additionally, please re-work your README. It seems like quite some AI was used there. Please change this and resubmit!
If you have any questions, feel free to ask in #ask-the-shipwrights on Slack!
Shipwright walkthrough
Feedback
Hey there,
You seem to have used AI to write some parts of your readme. Please rewrite those parts yourself, as we would like to see how you worked on the project!
For any other questions, drop a message in #ask-the-shipwrights on Slack!
Shipwright walkthrough
Maitenance pre-ship revealed 3 more bugs that I couldn’t live with…
Actually, very counter-intuitive!
... if it is too long. In some rare instances however it failed and set a boundary on window size instead of truncating. However, it’s not an issue anymore!I ran into an issue that got me confused - I couldn’t launch a game. I panicked, thought that my launcher was broken again, and only then did I realise that the game wasn’t installed!
Launcher did not notify me and I got frustrated. Since I want the UX to be flawless, the best decision was to make a pop-up in case of a critical error.
I gotta say - the ship is finally truly 100% ready!
Here’s what the final 1.0.0 release of RedeeMOD brings:
I built RedeeMOD not only as an app to manage Unreal Tournament games exclusively (though at first, that was the plan), but also as a framework to create more games in the future compatible with RedeeMOD!
I recently wrote a Contribution guide that lets anyone create adapters and expand RedeeMOD by following a detailed guide!
Also, as a standard practice, GitHub actions were added to help with releases. Both Windows and Linux builds work perfectly, but are unsigned, so Windows might throw Smart Screen or Smart App Control warnings. These are safe to ignore, and if they bother you too much, you can always resort to launching RedeeMOD directly through Python!
The code is formatted with Black formatter. It’s way easier to format the code using a tool than doing so manually.
Also, I found some bugs that weren’t immediately noticeable. Things like:
TypeError)They are now fully fixed. Some inconsistencies between files have also been resolved.
This latest build now features logos to feel more professional. User interface has been updated with more detailed card subtitles, so the app is easier to navigate.
Overall, RedeeMOD is in its stable form for the first time ever. Now it’s just the matter of whether more adapters will be created for other games by the community!
Well, the mod management is very simple - adding, removing and enabling/disabling a mod probably doesn’t sound like the most sophisticated mod manager on the earth, but I am planning to later add a pop up that lets users customize the mods even further, like adding custom launch options, paths, even image customization, but that will require more time and I feel confident enough that the current feature set is good for the first ship.
For more info on RedeeMOD, visit its GitHub repository!
So, after a LOT of trial and error, and MANY wrong paths taken, Unreal Tournament 2004 adapter is functioning!
UT2004 differs from UT99 in many different areas, even its modding system:
My plan was to replicate what I was doing with UT99 - building a custom mod at runtime that would bundle every enabled mod together.
Since this game is quite old, so are its development sources. I resorted to the best source there is - proven to work mods.
Bad Mod errorCommunity tab (which defeats the point of my launcher)Since I wanted to use the modern -mod flag, I had to make my own mod, which needs such files to function:
\r\n line)I’m thankful to whatever or whoever made me as patient as I am, because DefUser being absolutely empty causing a segfault or files requiring CRLF even in Linux was very unexpected, and required hours of investigation.
On top of said implementation, backend framework also needed changes to ensure stability and flexibility. New methods returning more data to the game adapters were added, as well as improvements in attribute names and path handling.
After testing with some edge cases, I found bugs that got resolved shortly after.
Windows, as of now, works flawlessly, but I’ll be performing more tests when I distribute a full build.
Yes! I wanted to implement logos since the day 1 of starting this project. Surprisingly, that was one of the easiest modifications to date.
Screen state tracking was also improved to provide no visual bugs after adding, removing, selecting and deselecting added material.
Again, yes. All the intended functionality is verified to be working, and you can already try it out for yourself!
Running python -m frontend.app from the project’s root will open up this GUI for you to play around! Over the next few days I’ll finish making all the necessary branding, README and ensure licensing is correct. Then I’ll push a final devlog and make a ship.
Thank you for everyone following RedeeMOD’s journey. Keep rocking, and make the world truly Unreal!
After taking a look at the previous design I thought it looked quite ugly and inconsistent when some cards have center-aligned elements and others don’t. This update fixes these issues!
Yes and no. While the primary purpose of this devlog IS to describe subtle interface change, under the hood many quality of development improvements hide as I’m trying to implement and fiddle with Unreal Tournament 2004 game adapter, which required a more streamlined API of adapter creation rather than what was previously developed.
So, this devlog has hours logged from both a fully developed interface and half-developed new game adapter implementation. Stardance was warning me about getting close to 10h limit, so I must post this before diving deeper into Unreal Tournament 2004, which has way more twisted stuff within its modding system.
Stay tuned and wish me luck!
Expanding on the design I like, I decided to add some improvements.
All these things:
I could ship the current version, but there are exactly 3 things stopping me from doing so.
I need to:
Following a design language similar to Unreal Engine 5, I was able to make a functional UI, that can launch the game with selected mods!
The UI is written with PySide6, which allows for Qt6 API to be used on Python, giving a modern development workflow, with customizable stylesheets and cross-platform capabilities.
I want to rewrite the launcher a bit to support more games in the future and be more architecturally correct, at the same time feeling more premium both from the user-facing app, and the source code too.
With the installation discovery done, I can finally focus on the real provisioning and frontend.
Utilizing common installation paths of Unreal Tournament, I could build a simple config.json file that has all this information for Windows and Linux.
Then, I wrote a simple json parser, and methods to use as a simple interface for the frontend.
The current source tree has this functionality implemented:
I will try and build a user-facing application that does exactly 3 things:
Maybe something more will come to my mind as time passes.
As a kid, I used to play Unreal Tournament ’99 with my dad. I always thought that game is genius - how it encompasses the soul of classic arena shooters yet still being fun to play!
You’ve most likely heard of Unreal Engine. The reason it got this name is due to Epic Games’ first major game - Unreal!
While at first it acted as a competitor to Quake I and II style games with its campaign against various creatures, in a year turned to compete with upcoming genre of Arena Shooters, specifically Quake 3, focusing entirely on multiplayer.
While the game itself was awesome not only the way it was written (with an interpreted UScript language, which lets pure UScript mods run on every platform, as well as GPU utilization), and Epic even released the last installment’s source code available to read with promises of development based on what the community wants, quickly realized the harsh reality of Arena Shooters losing market share and turned to developing Fortnite, finally shutting down official server support on 24th of January, 2023.
Despite cancellation of the whole series, community has stepped in and is still keeping up with modern games!
Epic Games even allowed the Unreal and Unreal Tournament (original as well as 2004 version) ecosystem be maintained by a group called OldUnreal, while the latest game is available on UT4Ever, a self-hosted group of volunteers, who have rewritten Epic’s servers. And, guess what, all of this is available for free!
I am always looking at ways to modularize the software I use for maximum customization. Currently the mods follow a drag-over logic, which mixes mod files with original game’s files, rendering the original, pure and unmodified version unplayable if you ever want it back.
After researching how modding architecture of Unreal Tournament ’99 works, I was able to prepare a plan on how to implement a mod loader, and started to work on it! So stay tuned, and join the Unreal Tournament community!