- Rust 85.7%
- RenderScript 13.7%
- Python 0.6%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github | ||
| crates | ||
| docs | ||
| tools | ||
| vendor/fromsoftware-rs | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CONTRIBUTING.md | ||
| MIT-LICENSE | ||
| README.md | ||
| RELEASE-CONTINGENCY-TARNISHED.md | ||
| rust-toolchain.toml | ||
| rustfmt.toml | ||
| SECURITY.md | ||
From Software Archipelago Clients
A shared monorepo for Archipelago clients for From Software games. The clients share infrastructure but ship independently. Three games are supported today:
Build trust and vulnerability-reporting guidance is in SECURITY.md.
- Dark Souls III —
crates/ds3-archipelago. See the Dark Souls III setup guide. - Sekiro —
crates/sdt-archipelago. - Elden Ring —
crates/eldenring-archipelagoplus its pure-logic crates (see below).
Layout
| Crate | What it is |
|---|---|
crates/ds3-archipelago |
Dark Souls III client DLL |
crates/sdt-archipelago |
Sekiro client DLL |
crates/eldenring-archipelago |
Elden Ring client DLL (live-game hooks) |
crates/er-logic |
Pure, host-tested decision logic for the ER client |
crates/er-codec |
Encoding helpers shared by the ER crates |
crates/er-semver |
Version-band parsing/ordering for the ER connect gate |
crates/shared |
Infrastructure shared across the game clients |
Elden Ring
The Elden Ring client is eldenring-archipelago, a hooks DLL loaded into the
live game by ModEngine3 (me3). It pairs with the eldenring.apworld from the
main 4laric/er-archipelago repo — the apworld generates the seed, the DLL
plays it.
It is a pure-runtime client: nothing is baked into game files ahead of time. On connect it reads the seed's slot data from the Archipelago server and verifies a contract hash (client and apworld ship separately, so mismatched pairs are the norm to detect, not an edge case). From there everything happens live in the running game:
- check detection — location checks are detected as you pick them up and sent to the server;
- item grants — received items are granted into the live save;
- graces — start/bundle graces are lit as they are unlocked;
- region locks — regions are sealed until you receive their Region Lock item. Runs start from Roundtable Hold, and entering a still-locked region warps you back there;
- lock hints — you can spend progression-surface checks to reveal where a Region Lock is (see below).
The Stormveil Lock covers Castleward Tunnel and the approach to Margit inside Stormveil. Surrounding Stormhill still requires Limgrave access. Updating the client applies this tunnel rule to existing seeds without a reroll.
Lock hints
Archipelago prices a hint at a percentage of your own location count, and an all-region Elden Ring seed carries about 4879 locations — so the default 10% is 487 points, roughly a tenth of the entire seed, for one hint. Elden Ring is priced out of Archipelago's hints by arithmetic, not by a host's setting.
So the client re-denominates the host's own percentage over the ~158-location
progression surface — the only locations this world's own progression can
occupy, shown with a * in the tracker. At the Archipelago default that is
16 surface checks per hint instead of 487, and it still tracks the host's
hint_cost: a room at 5% pays less here too, and a room that made hints free
gets these free.
Your balance is on the overlay menu bar (Lock hints: 23/16); clicking it opens
the tracker. There you can either:
- Hint next lock — reveals the next lock you can actually reach: the one whose region is still sealed but whose item is already sitting somewhere open. You are not told which region that is until you buy it, which is the point — the chain order is a product of the fill, so guessing a lock by name means paying to find out you guessed wrong.
- hint lock on a specific
[locked]region header, if you would rather aim.
Either way this publishes a real Archipelago hint, visible to the whole room
in the Hints tab. It is never a private reveal: a hint nobody else can see is
indistinguishable from cheating. It also never spends your Archipelago hint
points — !hint still shows the full total afterwards — and it can only ever
target your own world's Region Lock items. If a lock spilled into someone
else's world the client says so and points you at !hint, which is the only
tool for that case.
Overlay hotkeys
| Key | Toggles |
|---|---|
F5 |
The client overlay — main window, settings, dev console. |
F6 |
The item tracker window. |
Both are also on the overlay's menu bar (Hide (F5), Tracker (F6)), because a
hotkey you can only learn from a README is one you cannot find once you have
already pressed it.
They are function keys on purpose: the overlay's say box is a live text field whenever the overlay has focus, so a letter hotkey would fight it.
Two things F5 does not do. It does not hide grant notices — those toasts are the only feedback for items the game itself cannot announce, such as flask upgrades, so hiding them would make a working feature look broken. And it does not stop the mod: the client's logic runs off its own recurring task, not the render loop, so a hidden overlay still reconciles, grants items and reports checks. F5 is inert while disconnected, so the connect form can never be hidden away.
Streaming the overlay
OBS Game Capture can miss the client overlay even though it is visible in game. In the Game Capture source properties, enable Capture third-party overlays. If the overlay is still absent, start Elden Ring and the client first, then restart OBS or remove and recreate the Game Capture source so OBS hooks the already-running game.
If Game Capture remains unreliable, use Display Capture. It captures the final desktop image and therefore includes the overlay. This only affects what OBS records; it does not indicate a problem with checks, item delivery, or the client connection.
All decision logic lives in er-logic, which is pure (no game, Windows, or
socket dependencies) and host-tested: cargo test -p er-logic runs anywhere,
including against a slot-data fixture generated by the apworld's pytest suite,
so the two sides are tested against the same data. The runtime state engine is
a reconciler that converges live game state onto the server-declared desired
state — see docs/ARCHITECTURE.md.
Contributing
See CONTRIBUTING.md for building, testing, and running a local client, and docs/ARCHITECTURE.md for how the Elden Ring client works.
Other FromSoft Archipelago Clients
This isn't the only Archipelago mod for From Software games! Here are others that we know of:
License
MIT — see MIT-LICENSE.