You are browsing as a guest. Sign up (or log in) to start making projects!

RedeeMOD

  • 8 Devlogs
  • 38 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!

Ship #1 Pending review

Modding (some) games has never been easier!

I present to you - RedeeMOD, a mod launcher that lets anyone mod games with ease!

RedeeMOD was first created for modding Unreal Tournament games, but due to its expandable nature, anyone who knows Python can write a little script and expand RedeeMOD’s game selection for any game imaginable!

What are its core features?

Glad you asked! Here’s what you get out of the box:

  • Automatic game discovery - RedeeMOD finds your game installations all by itself!
  • A real mod library - every game gets its own mod collection. Add mods once and toggle them whenever you like
  • Custom path overrides - is your game installed somewhere weird? Just point at it and carry on
  • Cross-platform frontend - built with Python and PySide6 (Qt6), so it runs natively on both Windows and Linux! (macOS should also work, but I can’t test that - I own no apple gear)

And here’s my favorite part: mods never mess up the vanilla game!

Which games are supported?

As of today:

  • Unreal Tournament ’99 - mods are loaded through automatic INI patching
  • Unreal Tournament 2004 - mods are stitched together into a package and loaded using the game’s own -mod mechanism

Both games are available to download from OldUnreal page, FOR FREE!

What about other games? Can I add them myself?

Absolutely! This is where RedeeMOD shines - every game is just an adapter. It knows three things about a game:

  • What’s it called
  • Where it might live
  • How to launch it with mods

I even prepared a guide just for that!

If a game can be modded without wrecking its installation, an adapter can be written for it.

Cool! How do I get it?

Head over to the Releases page and grab the app!

Or if you want to Redeem the source:

git clone https://github.com/domasles/redeemod.git
cd redeemod
pip install -e .  # Omit -e flag if you are not planning to edit the source files later. Leaving it is recommended though
redeemod

How to use it?

  1. Download Unreal Tournament ’99 or Unreal Tournament 2004 from OldUnreal
  2. Open the game, configure your settings, and ONLY THEN add the game to RedeeMOD
  3. Download any mod you like. My recommendations:
  4. Add it to your games’ Mod Library
  5. Enable the mods you feel like playing today
  6. Launch the game and enjoy!

Honesty is the most important thing

A few things to know before diving in:

  • Windows’ Smart App Control might block the unsigned executable. You can either disable it or build the app yourself.
  • On Linux, case-sensitive filenames occasionally bite older mods - usually fixable with some renames.
  • Unreal Tournament 2004 was designed to load one mod at a time, so stacking several can lead to conflicts. In practice? It mostly just works.
  • Some mods might not work properly because:
    a. They require some GUI classes RedeeMOD can’t handle yet
    b. They are straight up broken

Try it, break it, tell me everything

I made RedeeMOD out of the frustration that some games don’t have ways of loading mods while leaving the base intact. If it happened to you before, and RedeeMOD helped, I can feel proud.

Found a bug, got an idea, or want to see your favorite game in the lineup? Mind you - contributions are very welcome!

  • 8 devlogs
  • 38h
Try project → See source code →
Open comments for this post

3h 53m 55s logged

Pre-ship devlog!

Maitenance pre-ship revealed 3 more bugs that I couldn’t live with…

Bugs? What bugs?

Actually, very counter-intuitive!

  1. UT99-specific: Turns out, when Unreal Tournament ’99 reads configuration and finds duplicate filenames in different directories, FIRST ENTRY DEFINED WINS, which, from coding perspective, is very unusual! Usually, if you define a variable, it can be redefined later. UT99 does not work like that, so I made the mods override any system files if they do override any.
    I noticed this by trying to load one of my favorite mods ever - the HD pack, which overrides system textures. Glad this bug got noticed!
  2. UT2004 skins not working: Some skin mods would not work due to the correct files not being imported on game runtime. By adding an extra file extension to the list of import files, I was able to fix this!
  3. Label truncation fails: Previously I had implemented an ElidedLabel that truncates a string and replaces the ending with ... 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!

Error handling is better now

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!

0
0
5
Open comments for this post

10h 38m logged

Code, break, fix, repeat!

Here’s what the final 1.0.0 release of RedeeMOD brings:

Fully tested and documented!

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!

Changes in code

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:

  • An uninitialized variable being still required in code (produces a TypeError)
  • Image painting events overriding each other
  • Much more

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!

Does RedeeMOD lack something?

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!

0
0
4
Open comments for this post

4h 20m 51s logged

Finally, it feels complete!

What I’ve been through and why do I feel relieved

So, after a LOT of trial and error, and MANY wrong paths taken, Unreal Tournament 2004 adapter is functioning!

Why it took so much effort for such a simple thing

UT2004 differs from UT99 in many different areas, even its modding system:

  • It now has a dedicated -mod flag instead of using an overriden .ini file
  • Every mod has its own mandatory structure, and UT2004 doesn’t like multiple mods loaded
  • Mods can load diffs of system .ini files

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.

My top 3 problems with UT2004, ranked:

  1. Using empty files or ones that are with LF line endings instead of CRLF produces either a segfault or a Bad Mod error
  2. UT2004 creates a LOT of mod-specific runtime files, and they need to be cleared to be regenerated (I hate caching, as going through them all is difficult)
  3. I couldn’t get mods with heavy custom GUI usage to work, unless they’re being launched standalone, using UT2004 Community 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:

  • ModDir/UT2K4Mod.ini (Name and description)
  • ModDir/System/Default (Diffs of what to add/remove)
  • ModDir/System/DefUser (Can be left empty, but requires at least one \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.

Bugs are always present…

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.

What’s that, some new GUI?

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.

Finally shipping, finally stable?

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!

0
0
9
Open comments for this post

8h 18m 35s logged

UI tweaks!

This looks better in my opinion

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!

You really spent so many hours on simple UI tweaks?

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!

0
0
15
Open comments for this post

4h 34m 39s logged

A fresh look

Expanding on the design I like, I decided to add some improvements.

What improvements exactly?

All these things:

  1. The launcher now supports adding multiple games (even though currently the only game supported is Unreal Tournament ’99 (more to come))
  2. A sidebar was introduced for better UX
  3. A more user-friendly card design was expanded to become the main component interface relies on
  4. Backend experienced a bit of an overhaul too to support game/mod branching
  5. Safeguards were implemented to disallow adding multiple copies of the same mod OR directories that do NOT contain Unreal mod content
  6. Config is now stored in local paths for saving/loading added material
  7. Library tab disappears if no games are detected

Wow! This is really awesome! Is it ready to be shipped?

I could ship the current version, but there are exactly 3 things stopping me from doing so.
I need to:

  1. Verify functionality on Windows (so it doesn’t become another Linux-only project of mine)
  2. Add verification for game paths and prompt user to enter location for both executable and config (if applicable/not found)
  3. Add Unreal Tournament 2004 functionality to leverage multiple game selection and see if it works (as well as possibly other games of the franchise, like Unreal and maybe even Unreal Tournament 2014)
0
0
16
Open comments for this post

4h 16m 33s logged

Interface update

A functional UI demo has just been made!

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.

What’s next?

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.

0
0
7
Open comments for this post

1h 10m 25s logged

Discovery - done!

With the installation discovery done, I can finally focus on the real provisioning and frontend.

How does it work?

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.

What else currently exists?

The current source tree has this functionality implemented:

  • Filesystem utils for finding and sanitizing paths (required by Unreal Engine to load paths relative to the executable)
  • .ini file editor (because Unreal Engine operates on .ini files for configuration, one of which allows for custom file discovery. Editing it allows injecting custom mod files)

Next plans?

I will try and build a user-facing application that does exactly 3 things:

  1. It discovers the installation directory (so the frontend can also act as a launcher)
  2. It lets you add folders with mod files
  3. It lets you load one or more mods (and the base game) by constructing a .ini file on the go

Maybe something more will come to my mind as time passes.

0
0
8
Open comments for this post

40m 28s logged

Never more excited!

What am I building now?

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!

What is this Unreal Tournament?

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.

Never heard of it. Why?

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.

So can I still play it anyhow?

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!

What RedeeMOD aims to provide

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!

0
0
1

Delete project?

Are you sure you want to permanently delete this project? This action cannot be undone.

All devlogs, followers, and associated data will be removed.

Followers

Loading…