Skip to content

Latest commit

 

History

31 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

APLobbyGen

A local-first front end for running Archipelago multiworlds on Windows: keep the roster on your own machine, generate from it with no network involved, and host the resulting seed locally or publish it to archipelago.gg.

Standard library only - no pip install, no virtualenv. If you have Python and an Archipelago install, you have everything.

Why it exists

Most tooling around a multiworld treats a remote lobby as the source of truth. That means every generation re-scrapes someone else's server, the roster evaporates between runs, and nothing works offline. Here the local lobby owns the roster; a remote room is one way to put configs into it, not the thing that defines it.

Generation touches the network exactly never.

What it does

  • A durable lobby. Player configs live in lobby/, with a manifest, content history for superseded versions, and per-player include / sit-out so a roster survives between seeds instead of being rebuilt each time.
  • Import from anywhere. An Ionium lobby room, a folder, a zip, or individual .yaml files. Re-importing an unchanged config is a no-op; a changed one updates in place and keeps the previous version.
  • Preflight that tells you the truth. Every player's game is resolved against the .apworld files actually installed, so you learn about a missing world before generating, not after. Worlds that ship a client are flagged: every player needs the byte-identical file.
  • Dropped settings are a failure, not a footnote. When a config asks for an option the installed world does not have, Archipelago drops it silently and generates a seed that looks fine while a player quietly does not get the game they configured. That exits non-zero here unless you waive it.
  • A run lock. Every generation records what it was built from - world files, hashes, versions, sources - beside the seed, so a run stays explicable months later.
  • Where to get things. Two upstreams matter per game and they are different questions: the .apworld the generator needs, and the client or mod the player installs to actually play. Both are tracked as links with the evidence they were read from, the games in your lobby are checked before the rest of the catalogue, and nothing is ever downloaded automatically - GitHub release layouts vary too much per project for that to be safe.
  • One chosen seed, visibly. The seed being hosted or published is picked from a list of every run on disk, shown by name, date and size, and both destinations use that one choice rather than each resolving its own idea of "the latest".
  • A tracker, launched for you. The local tracker bridge can be started against the seed being hosted, with its slots read from that run's lock rather than typed - so it cannot end up watching a slot the running room does not contain. Worlds whose compiled modules target a different Python are reported before launch, because the dashboard would otherwise just show an empty reachability panel.
  • Edit any game's settings as a form. Archipelago generates a documented template for every installed world, so the app reads that and builds the editor from it - toggles, ranges with their real bounds, and lists to pick from, with each option's own documentation. No game is special-cased, which matters when 84 of them are installed.
  • Local hosting. Start the Archipelago server on this machine against the selected seed, with the server console right there. Nothing is uploaded.
  • Publishing, when you want it. Uploading to archipelago.gg is a separate, deliberate step that hands back the links rather than opening a room for you.
  • Light and dark. Follows the Windows setting by default, with its own window icon so it is findable in a crowded taskbar.

Requirements

  • Windows (the app shells out to ArchipelagoGenerate.exe and ArchipelagoServer.exe, and uses os.startfile)
  • Python 3.10 or newer, with tkinter - the standard python.org installer has it
  • An Archipelago install, by default C:\ProgramData\Archipelago

Getting started

Make a desktop shortcut with the app's own icon, then launch it from there:

python make_shortcut.py --start-menu

Or run the window directly:

python aplobby_gui.py

The shortcut runs aplobby.pyw under pythonw.exe, so there is no console window behind it. That also means a startup failure has nowhere to print, so the launcher writes one to crash.log and shows it in a dialog rather than vanishing.

Or drive it from the command line:

python aplobby.py import folder path\to\configs   add configs to the lobby
python aplobby.py list                            show the roster
python aplobby.py generate                        build a seed, no network
python aplobby.py seeds                           list seeds you can host
python aplobby.py host                            host a seed on this machine
python links.py --lobby-first                     upstreams, your games first
python links.py --missing                         clients nobody has investigated
python links.py --resources                       base ROMs you supply yourself

generate exits 0 on success, 1 if preflight failed, 2 if generation failed, 3 if an import source was unreachable, and 4 if the seed generated but a config had settings silently dropped.

Hosting locally

python aplobby.py host --port 38281

The server binds every interface, so other machines on your network can join at the address it prints. Patch files are not served: a player on another machine still needs their own file out of the seed zip.

Stopping is a clean /exit rather than a kill, because that is what flushes the save file.

Tests

Six suites, all offline except the one that deliberately hosts on loopback:

python selftest_lobby.py     the store: identity, history, crash recovery
python selftest_sources.py   the importers, with the network stubbed
python selftest_gui.py       drives the real window with nobody watching
python selftest_serve.py     really starts a server, really connects to it
python selftest_links.py     the upstream pointers and their four-state client map
python selftest_options.py   option templates, the settings form, config rewriting

They assert rather than print, so a silent pass is a real pass.

Your data stays yours

lobby/, runs/, every .yaml and every seed are gitignored. Player configs carry real names; spoilers are the whole playthrough. Nothing in this repository contains either.

Contributing

Changes are welcome as pull requests. Please read LICENSE first: this is source-available rather than open source, and it asks that modifications come back here instead of being published as a separate version. Fork, branch, open a PR - that path is explicitly permitted.

If a change you need is not accepted, ask; a narrower permission can be granted in writing.

Licence

See LICENSE. In short: run it freely for Archipelago multiworlds, share it unmodified, send changes back as pull requests. Not affiliated with or endorsed by the Archipelago project.

About

Local-first Archipelago multiworld generator and local server host for Windows. Standard library only.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages