[0.3.1] Archipelago Multiworld Randomizer support for GZDoom!

Projects that alter game functions but do not include new maps belong here.
Forum rules
The Projects forums are only for projects. If you are asking questions about a project, either find that project's thread, or start a thread in the General section instead.

Got a cool project idea but nothing else? Put it in the project ideas thread instead!

Projects for any Doom-based engine (especially 3DGE) are perfectly acceptable here too.

Please read the full rules for more details.
Post Reply
User avatar
ToxicFrog
Posts: 240
Joined: Thu Oct 05, 2017 10:09 am
Preferred Pronouns: She/Her
Operating System Version (Optional): NixOS
Contact:

[0.3.1] Archipelago Multiworld Randomizer support for GZDoom!

Post by ToxicFrog »

What is it?
A way to join Archipelago games using GZDoom!

If you're not familiar with Archipelago already: it's a way to play co-op sessions where each player is playing a different game. Each game contains some items needed by other players (that's the "multiworld" part), placed randomly so it's different each time (and that's the "randomizer"). Archipelago is not the only multiworld randomizer out there, but it's probably the biggest.

In singleplayer, this gives you a game where you play levels out of order and find keys and weapons where you least expect. In multiplayer you can end up finding Link's hookshot and Samus's super missiles in MAP01 and getting a BFG in the mail from Celes halfway through your third map (which is Tricks & Traps).

AP has had support for vanilla Doom, Doom 2, and Heretic for a while; this project brings a similar feature set to GZDoom, opening the world of GZDoom mods to Archipelago -- along with support for a variety of different IWADs and PWADs. Keys, weapons, backpacks, and powerups are randomized, along with access tokens and fullmaps for the levels; your goal is to complete every level.
Spoiler: Video Demonstration
What's in the box?
  • Builtin support for Doom 1+2, Final Doom, Heretic, FreeDoom 1+2, and Chex Quest (and a few PWADs)
  • Works with singleplayer, sync multiplayer, and async multiplayer Archipelago games
  • Compatibility with a wide variety of cosmetic and gameplay mods
  • A built in scanner to make it easy to generate basic randomizer logic for new megawads
  • An autotuner that automatically improves the logic for next time as you play
Links & Stuff
You can view the README here; this contains links to the latest release & development versions, and also links to detailed documentation on how to use this (and how to generate your own logic files for new PWADs).
Proydoha
Posts: 84
Joined: Thu Jan 21, 2016 2:25 am

Re: [0.3.1] Archipelago Multiworld Randomizer support for GZDoom!

Post by Proydoha »

Curious: how do you get information in and out of GZDoom?

Previously I've used -stdout to get information out of GZD and feed it into screen readers but no idea how to pass information back into GZD.

Can this technology be used to revive Twitchy Doom? Previously it relied on GZD reading loaded files over and over again but that expolit was fixed.
User avatar
ToxicFrog
Posts: 240
Joined: Thu Oct 05, 2017 10:09 am
Preferred Pronouns: She/Her
Operating System Version (Optional): NixOS
Contact:

Re: [0.3.1] Archipelago Multiworld Randomizer support for GZDoom!

Post by ToxicFrog »

Out of gzdoom: I tail the logfile.
Into gzdoom: I repeatedly reload a file on disk. That still works, it just has a bunch of restrictions -- the file has to be in a directory (not inside a wad, zip, or pk3), you have to pass the directory to -file rather than the file itself, and you cannot make it larger than the size it was when gzdoom started up.

Is this a filthy hack? Yes. But gzdoom doesn't have any sort of official IPC mechanism to let you, e.g., send and receive netevents from outside the game, so we do what we must.

I think the least bad way would be to use the netplay protocol, and have the AP bridge connect to GZD that way and send/receive netevents. But the GZD netplay protocol doesn't seem to be formally documented anywhere, the only thing that implements it is GZD itself, and there doesn't seem to be a spectator mode so the bridge would have to pretend to be an actual player, albeit one that just stands at spawn and does nothing. I would like to rewrite it to use that at some point, I just didn't feel up to combing through 5k lines of C++ to figure out how it works this winter.

In the meantime, if you want to use the protocol for something, go nuts -- it's MIT licensed, documentation of the wire format is in docs/protocol.md, sending and receiving code is in IPC.py and IPC.zs.
Post Reply

Return to “Gameplay Mods”