This is a community fork of seluce/Layer8Problem with an integrated Archipelago multiworld client. Used with the author's permission (modifications allowed with attribution).
🎮 Play: https://ap-layer8problem.netlify.app
📦 Original game: https://github.com/seluce/Layer8Problem · Steam
👤 Original developer: seluce
🔌 AP integration: TheZockerBrain069
Layer8Problem is an IT-support simulator by seluce. You play first-line tech support: every "ticket" is a real conversation with a user whose computer just won't. Pick the right answer, keep affection with your team up, survive the day — and don't get fired.
The name comes from the IT joke: "The problem is on Layer 8" — i.e. the user.
Genre: visual novel × management × dark workplace humor. Every IT professional will cry tears of joy during this game — or because they've already lived this exact situation.
🇩🇪 German (original) · 🇬🇧 English
Both languages ship in this fork. Pick one with the DE / EN buttons on the Archipelago connect screen; the choice is remembered and applied on reload. English is machine-translated and human-corrected — if you spot a German leftover, please open an issue.
Layer8Problem joins your multiworld as a regular AP game. You earn checks by playing normally, and items the randomizer sends you appear in your in-game inventory. The client is built into the web build — nothing to install.
| Game name (YAML) | Layer8Problem |
| Locations (190 per slot) | 24 achievements + 1 day survived + 18 affection tiers + 18 negative affection tiers + 30 item finds + 99 sidequest chains |
| Items (190 per slot) | 9 legendary + 18 progressive affection + 18 progressive negative affection + 18 normal + filler |
| Smaller slot | extra_locations: false drops the last two pools and gives you the v0.8.0 layout: 61 locations / 61 items |
| Goal (YAML) | legendary_set (default) · all_achievements |
| Days | Monday (hard) · Wednesday (normal) · Friday (easy) — one per slot, and it is the difficulty |
| DeathLink | single master toggle in the YAML; fires on termination, final warning, letting off steam, rage quit |
Only the Survived <Day> location for your slot's day is registered — the
other two days are locked in-game, so registering them would produce
unbeatable seeds.
Item finds fire the first time an item lands in your archive. Sidequest chains fire the first time you resolve any step of a chain — one check per chain, so finishing a long chain does not flood the server.
Layer8Problem:
goal: legendary_set # legendary_set | all_achievements
starting_day: wednesday # friday | wednesday | monday
deathlink: false
extra_locations: true # false = 61-check v0.8.0 layoutThat is the whole option set. The deathlink_termination /
deathlink_warning / deathlink_steam / deathlink_rage_quit /
deathlink_filter keys from v0.5.x were removed in v0.6.0 and now break
generation — delete them from old YAMLs.
- Open https://ap-layer8problem.netlify.app
- The Archipelago Connection screen blocks the game until you connect. Use the DE / EN buttons to switch language.
- Enter your host, port, slot name, optional password.
- Click Connect & Play — the game starts once the hooks report green. (Pure single-player? Click "Play Offline" to skip AP entirely.)
- Click the small AP pill in the top-right corner during play to disconnect, reconnect, or change slots.
Your host / port / slot are remembered in localStorage. Your password is
never stored. DeathLink is controlled by the YAML, not by the client.
The .apworld is published with every
GitHub release
as layer8problem.apworld. Drop it into your Archipelago custom_worlds/
folder and Layer8Problem shows up as a selectable game.
An .apworld is a plain zip — rename or unzip it if you want to read the
Python source, the setup guide, or the world changelog:
unzip layer8problem.apworld -d /tmp/apwEveryone who generates a seed needs layer8problem.apworld in
custom_worlds/. Players do not — the browser client is all they need.
- archipelago.gg — upload the generated
AP_*.zipunder Host Game. This works for custom worlds: the room only needs the datapackage that generation baked into the multidata, not the world's Python code. The room's web tracker stays generic, which is what the PopTracker pack is for. - Locally —
ArchipelagoServer.exe(orpython MultiServer.py) with the.archipelagofile. Default port38281; forward it or use a tunnel (playit.gg, Tailscale) if friends connect from outside your network.
Enter the address in the connect screen without a scheme — the client picks
ws:// or wss:// itself.
If archipelago.gg answers with Internal Server Error on upload, the seed was generated with an apworld older than v0.9.1. Those declared a client version (
0.9.0) that is not a real Archipelago release, and the host rejects it. Regenerate with v0.9.1 or newer.
| path | contents |
|---|---|
ap/ |
the in-browser AP client: ap_client.js, the stable ID map ap_data.js, language bootstrap ap_lang.js, English UI strings |
tools/ |
consistency checks, see below |
assets/data/ |
German game data · assets/data/en/ English |
engine.js, assets/engine/ |
the original game engine (untouched by this fork) |
The client and the apworld keep two copies of the same ID map, and every past hotfix came from those drifting apart. Two Node scripts (no dependencies) verify them:
unzip layer8problem.apworld -d /tmp/apw
node tools/check_ids.mjs /tmp/apw/layer8problem
node tools/check_reachability.mjs /tmp/apw/layer8problemcheck_ids.mjs— base offset, block offsets, list lengths, reserved ID gaps, a full ID round-trip for every location and item, and both version axes:required_client_versionvs the client'sAP_PROTO_VERSION(must be a real Archipelago release), andslot_data["version"]vsMOD_VERSION.check_reachability.mjs— allstarting_day×goalcombinations: withextra_locationsboth on and off — 190 or 61 locations registered, no unplayable day, pool balances, every affection tier's progressive requirement covered, goal satisfiable, filler share sane.
Both also run in CI (.github/workflows/ap-checks.yml) when an unpacked
apworld/layer8problem/ folder is present in the tree.
| version | what's coming |
|---|---|
| v1.0.0 | full playthrough tested, submission to the official Archipelago world index |
Shipped versions are documented in the world changelog inside the
.apworld (layer8problem/CHANGELOG.md) and in ap/CHANGELOG.md.
changelog.md in the repo root is the original game's changelog by seluce.
Source code: same license as the original seluce/Layer8Problem
repository. All credit for the game itself goes to seluce. This fork only
adds the ap/ module, the English data set, and integration glue.