In the course of my RoN modding adventures, I decided to make a broad-scope “tech demo” style mod, showcasing some of the moddable aspects of RoN that I felt were being underutilisied – and hopefully learning a few things in the process.
After trying to mod a few things that I feel have been vastly undermodded, I ran into.. some problems. After much frustrating troubleshooting and testing, I realised this was due a limitation of RoN’s mod manager.
I then got to work on how to get around it.
A couple week ago I looked into why there were no thumbnails on the Steam Workshop for Rise of Nations, which lead down the path of being probably the first person to ever figure out how to add a thumbnail to their RoN Workshop mod. Since then I got more than a little engrossed with modding, particularly seeing as this discovery made me realise how many aspects of RoN modding were not being tapped into by other modders, despite a reasonable number of mods having been released – both on and off the Steam Workshop.
One of the things included in Fall of Nations (my creatively named “tech demo” mod) is a modded menu, including modded graphics and music.
It turns out the mod manager has absolutely no clue how to treat files that modify this screen, and will partially load the files even if the mod that the files come from is disabled.
This, understandably, causes issues if you ever want to not have the mod running. The problem is particularly bad for me, the mod creator, as it’s not possible to unsubscribe from one of your own mods unless you delete it entirely.
I think the reason this hasn’t come up before as a known issue is that nobody thought of modding the main menu (seems unlikely) – or just thought it wasn’t possible (vaguely plausible!).
One of my first ideas to solve this was to add files to a downloaded workshop mod after-the-fact. As in, a user downloads the mod, then you tell them to (for example) copy some files into a folder in the existing mod download.
This doesn’t work; the new files don’t appear to load at all. I guess each mod has a list of what it’s supposed to include.
My next thought was seeing if the files are actually ID-hashed or anything. If there’s literally only a list of the files, then I can, for example, include a dummy sound.xml file in the right location and then tell the user to replace it with the real sound.xml file.
This unfortunately also doesn’t work. Having worked on this whole process both for a few hours before bed, then on waking up for a few more hours, the part as to why it didn’t is a bit of a blur, but it definitively did not work in my test. I think it may have been because Workshop files appeared to have a lower load priority than “local” files when the game started up (causing the local files to always take precedence for operations that occur as soon as the game loads – like menus). Not 100% sure.
One of my attempts also caused the game to internally merge the contents of multiple files (which I have no idea how you accidentally code something to do), because I definitely ended up having that somewhere along the way.1
In any case the thing that I eventually turned to was “repackaging” the mod files – a fancy way of saying I nested everything within an extra folder. I tested this relatively thoroughly and it worked flawlessly. It does unfortunately introduce additional effort on the part of the user, but given all available options I think it was the best (working) one available.
Here’s a brief rundown of how modern RoN modding works when not using the “drop-down menu” system (which is slightly different to the below):
Mods basically map over original files by mirroring the folder structure of the game’s files.
This system which Skybox introduced is basically an extension of the modding system originally introduced by Big Huge back in the day, and I believe this is the underlying reason why the updated system comes with the limitation I’ve run into. The old modding system was never designed to be loading mods until a game commenced – the new system is built on top of that and so inherits some issues about when and how files should be loaded if they’re not being loaded only when games commence.
In any case, by removing this direct translation of modded files onto original files, the modded files can be included natively in the Steam Workshop without having them run amok even when disabled in the mod manager.
This is what I’ve now swapped to using for Fall of Nations, and what I’ll need to do for any other mods that change similar files going forward.
To make the mod actually work, the user just copies the mod’s files into the local \mods\ folder (breaking the staggering and reverting to the structure of the previous diagram) and the mod will automatically be detected from the new location as a local mod and its files will be loaded when the game starts. A convenient aspect of this is that the name of the Safeguard Layer is changed to the mod’s workshopID when it goes to the Steam Workshop, so the user just sees the name of the mod itself as the folder that needs to be copied, hopefully making the process more intuitive for them to follow along with.
Maybe as I continue on this modding adventure I’ll figure something else out that’s more elegant, requiring less user intervention after subscribing to the mod – but for now I’m content with this.
- If you told the game to load a single, modded xml file, it would load that one, and combine it with the unmodded one, and maybe even throw in other copies of the files it could find in the process. In my case this was supposed to be one file that explicitly specced 4 menu animations and NO OTHERS – I was instead shown 12, and only 3 or 4 of them actually had graphics files loaded. I have NO IDEA how that happens.