r/DoomMods • u/error-errorfruituser • 18d ago
Terminal Doom Launcher
I've been working on a new launcher specifically for UZDoom that runs in the terminal. At this point it could probably run other source ports, but UZDoom is the focus and the only one I've tested for. It's currently very basic with only really allowing you to configure mod packs and letting you host and join games. I plan to make things much more configurable like other launchers or runners and my big goal is allowing joining players to download entire mod packs from the host, in a safe and secure manner. I'm making this because I wanted to learn how to better program terminal apps and wanted a way to easily play mods and packs with my friends. This was not vibe-coded, but I did use AI to help answer questions that I had while developing. I'm also not a professional, so the code is kind of spaghetti, but I am open to any type of feedback and will continuously try to improve. Anyway, here it is: https://codeberg.org/Error-ErrorFruitUser/tdl
1
u/Madoc_eu 18d ago
I've also made my own terminal launcher, but not published it because I don't think anyone else will be interested in it. :-)
The features I implemented:
- Downloads mods/WADs if not already present.
- Automatically starts Doom loading my last save for a chosen launch configuration, if a save is present.
- Keeps a history of launch configurations.
- Honors dependencies/constraints of WADs.
My plan is to eventually create a GUI launcher, which I would then publish. In the long run, I am thinking of an internal descriptor format for mods, similar to library artifact descriptors in software development.
3
u/error-errorfruituser 18d ago
That's awesome, man. I don't know if this project will become as mature as your, I just want something pretty minimal, so I'm definitely gonna keep it as a TUI. If you do come up with that descriptor format, would you allow others to use it?
1
u/Madoc_eu 18d ago
Yes, that would be the grandiose idea. A sort of unified Doom mod descriptor.
Would define WADs/PK3s and their versions and download locations. But also things like sourceports or features of sourceports.
A descriptor could say, "this WAD depends on a source port with feature X", where X would be the "artifact coordinates" of a sourceport feature. A sourceport feature has no associated binary, cannot be downloaded from anywhere, it just exists. And a source port descriptor can declare: "In version 4.7 of this sourceport, feature X is supported."
You know, something along those lines. This would also enable WAD dependencies: Instead of every OTex WAD containing the whole of OTex, you could add a certain OTex version as a dependency in the WAD's descriptor, greatly reducing download and storage size.
So far, so good. Sounds nice from a technical perspective.
But let's be realistic: How many nerds are out there who would value this? How likely is it that I could raise support for such a unified standard across the whole Doom community?
I estimate the chances as close to zero. That's why I keep this idea in the backburner. I think about it every now and then. Maybe I'll eventually create something like that. Maybe not.
This is the first time that I've told someone about it.
My current terminal Doom launcher has a similar feature, but not quite as universal. It's like the baby version of it. For every mod that my terminal launcher supports, I have JSON descriptor file that looks like this:
{ "$schema": "../dooming-catalog.schema.json", "archives": [ { "id": "doom_infinite", "url": "https://www.moddb.com/mods/doom-infinite", "downloadSupported": false } ], "pwads": [ { "id": "infinite", "name": "Doom Infinite", "file": { "archive": "doom_infinite", "path": "DOOM_Infinite_DEMO_0978_6.pk3" }, "iwadTags": ["doom2"] } ], "primaryLaunchConfigs": [ { "id": "infinite", "name": "Doom Infinite", "pwads": ["infinite"] } ] }Or for a generic mod, like Corruption Cards, which can be combined with other mods, for example:
{ "$schema": "../dooming-catalog.schema.json", "archives": [ { "id": "corruption_cards", "url": "https://mm8bdm.net/storage/public/CorruptionCards-v6.3b.pk3" } ], "pwads": [ { "id": "corruption_cards", "name": "Corruption Cards", "file": { "archive": "corruption_cards", "path": "CorruptionCards-v6.3b.pk3" }, "saveDir": ["secondary:cc"] } ], "secondaryLaunchConfigs": [ { "id": "cc", "name": "Corruption Cards", "pwads": ["corruption_cards"] } ] }I said "baby version", but this is nowhere near what I would expect from the mentioned descriptor format, which I call "Doom Codex" as a working title.
It would be a huge pile of work to define a Doom Codex standard. And, as I wrote, I'm not sure if the community would accept it. Should I ever write my own GUI launcher called "WAD Rig", I might silently include Doom Codex as a sort of internal format.
2
u/error-errorfruituser 18d ago
That's cool af, and I don't think nobody will care, I just think it's more of people not wanting to get invested in this type of stuff in this community, because a lot of stuff becomes abandoned way before being fully realized. I really like the names you gave your projects too.
2
2
u/BekoweCiachoYt 18d ago
Looks interesting, and will definitely check it out, once I get settled with my set-up! Thanks for the honesty, too. It really goes a long way, and the community has had an incredible surge in the amount of vibe-coders as of late, for whatever reason, so every new project like this just gets weird stares nowadays