Releases: drohack/alttl-archipelago
Release list
0.4.1 - drawers hold their contents, the run's stars on the complete screen, a retry panel while solutions remain
0.4.0 seeds: finish them on 0.4.0, or regenerate. Nothing in the item or
location tables changed, but the mod refuses a seed made by a different apworld
version, as it has since 0.3.3.
Install
Three files, and they carry the same version on purpose. See
docs/installation.md.
ALTTLArchipelago-0.4.1.zip- the mod. Extract into the game folder. You
need BepInEx 6 for Unity IL2CPP
installed first - it is not included.alttl.apworld- only whoever generates the seed needs it. Goes in
Archipelago'scustom_worlds/. Requires Archipelago 0.6.7 or newer.A Little to the Left.yaml- your settings. Edit the name and hand it to
whoever generates.
What a player will notice
- A drawer no longer unlocks what sits inside it. Holding Drawer used to
free every object in a drawer, even ones another group locks: in Paper Plane
Supplies the knife pieces, blades and pencils moved without Containers, and
the knife case turned grey the moment a handle went in. They now stay locked
until their own ability arrives. That is 28 groups in 9 levels (Paper Plane
Supplies, Tool Drawer and Bathroom Drawer in the base game), and every one
already needed that ability in the logic. - The stars on the level-complete screen are the run's. They were always
empty on generated puzzles; they now fill with the solutions you have found,
the same as a card's hover stars. - The retry panel shows while a level still has solutions to find. A puzzle
with several solutions stops on the restart / menu / next panel until you have
found them all. Every other puzzle goes on to your next one - a generated one
straight away, one built with a panel through it, the arrow pressed for you.
Verified
The DLC release gate ran against the first build of this release: 27 of 28
checks passed and all 15 puzzles were beaten. The one failure, the pause
menu's Exit after a puzzle built with a panel went straight on, is fixed here
(below). After the fix, the gate's arrow session ran on its own against these
exact files and passed both of its checks: the arrow opened the run's next
puzzle, and Exit reached the title. The base gate was not re-run for this
release.
Checked by hand in game on a test seed: holding Drawer but not Containers,
Paper Plane Supplies' knife pieces, blades and pencils were grey and would not
move while both cases stayed free, and granting Containers freed them at once;
Pencils (Randomized) showed one of two stars filled and stopped on the panel,
whose arrow opened the next run puzzle; Pencils with both solutions in went
straight on; Seed Pods, one solution, went on through its panel's arrow, and
the pause menu's Exit worked afterwards - the first version sent it down the
game's own straight-on route, after which Exit did nothing, which the DLC gate
caught. Core 365 tests, apworld 193 and the harness scheduler pass.
Full detail in the CHANGELOG.
This project was built with AI assistance.
0.4.0 - both DLCs, and a Skip that works on every puzzle
0.3.4 seeds need regenerating. The tables grew from 432 locations to 822
and from 18 items to 19, and location ids moved: parts the game solves the
moment a level opens, or never, stopped being checks, and several levels'
checks were corrected by play. The mod refuses a seed made by a different
apworld version, as it has since 0.3.3.
A yaml with puzzle_count below 10 no longer generates. The minimum rose
from 8 to 10, two full packs of 5. A 0.3.4 yaml otherwise still works; the new
options default to both DLCs off.
Install
Three files, and they carry the same version on purpose. See
docs/installation.md.
ALTTLArchipelago-0.4.0.zip- the mod. Extract into the game folder. You
need BepInEx 6 for Unity IL2CPP
installed first - it is not included.alttl.apworld- only whoever generates the seed needs it. Goes in
Archipelago'scustom_worlds/. Requires Archipelago 0.6.7 or newer.A Little to the Left.yaml- your settings. Edit the name and hand it to
whoever generates.
What a player will notice
- Both DLCs, each behind its own toggle and off by default:
cupboards_and_drawers(25 puzzles) andseeing_stars(37), weighed by
cupboards_weightandstars_weight(default 10) beside the other weights.
You need the DLC you turn on. The five Seeing Stars puzzles the game locks
behind a star total are opened by the mod, and a new ability, Distributing,
gates DLC2's Pizza. - Ability locks really lock. In 0.3.4 some greyed-out objects could still
be played - stickers and coins among them, enough to finish a puzzle holding
nothing - and a level's locks landed up to a second after it opened. A
locked object can no longer be moved, the locks are in place the moment a
level opens, and an ability that arrives mid-puzzle frees its objects at
once. A lock no longer makes Radial Dance Party unwinnable. - A check you finish without the item it needs is held back, and sent on a
later visit to that puzzle once you have the item. Beating a puzzle and a
Skip always pay out. - A Skip works on every puzzle. Where the game's own skip does nothing -
the generated puzzles, inside a run, where 0.3.4 spent the Skip for nothing -
the mod clears the puzzle itself, sends every check on it and takes you back
to the level select. A Skip is spent once, and only when it did something;
one pressed on a puzzle with nothing left to find is refused. - Checks that asked for too little. Some checks asked for less than their
puzzle needs, so a seed could put a needed item where you could not yet reach
it: Tupperware Nesting's lids ended a run that way, and Fruit Stickers could
not be peeled holding Tidying alone. A requirement is never loosened
without a hand test behind it. - The hover stars on a card are the run's own: empty on a new seed, one
lit for each solution you complete, all of them after a Skip. - Cards read red, red/green, green or a star, and the dark veil over a
locked card is gone. A locked card and a beaten one with nothing reachable
are the same red square; hover for the stars, or read the beaten count in
the corner. - Playing offline shows what online shows - the same cards, stars and
goal count. - Starting a new seed no longer resets your resolution setting.
What changed underneath
Requirements proven, not guessed. Every part that asked for less than its
level was audited, and every guarded level was played once with the locks off
while a recorder logged when each group became movable. 65 levels are now
proven by play; the results are apworld/alttl/data/proven-requirements.json
and the edges in levels.json. Nothing unproven can hold progression.
Every level measured alone. All 173 levels were booted and forced one at a
time, and skipped one at a time, into fixtures/forceability.jsonl; the
release gate plans each run on paper from it before it plays, and stops the
moment the game disagrees.
The gate itself. It keeps the log of every session, warns when it sends a
solve into a paused game (it caught a cat trap's reset holding events for
about 8 seconds, released by the game itself), buys a Skip on any level and
stops if one does nothing.
Known limits
- After a DLC puzzle the game still opens that DLC's own level select for a
moment before the mod swaps in the run's track. Once, after DLC1 Boss, both
stayed on screen and clicks went nowhere. What causes it is not known; if
you see it,BepInEx/LogOutput.logfrom that session helps.
Verified
Both release gates on this exact code: the DLC gate 28/28 and the base gate
28/28, all 15 puzzles beaten in each. These files were rebuilt from the tag and
differ from the gated build only in line endings and the commit id stamped into
the DLLs. Core 357 tests, apworld 193, the harness scheduler 210 with 88 of 88
mutations caught, the fill stress over 25 seeds and 1000 seeds at the new
10-puzzle floor, and CI green on main before this was published.
Full detail in the CHANGELOG.
This project was built with AI assistance.
0.3.4 - the documentation audit, and the refactor it deferred
Seeds from 0.3.3 still work. Location ids did not move - verified by
building both id tables and comparing them, 18 items and 432 locations,
byte-identical. Nothing needs regenerating.
Install
Three files, and they carry the same version on purpose. See
docs/installation.md.
ALTTLArchipelago-0.3.4.zip- the mod. Extract into the game folder. You
need BepInEx 6 for Unity IL2CPP
installed first - it is not included, and the setup guide used to say it was.alttl.apworld- only whoever generates the seed needs it. Goes in
Archipelago'scustom_worlds/. Requires Archipelago 0.6.7 or newer.A Little to the Left.yaml- your settings. Edit the name and hand it to
whoever generates.
What a player will notice
Very little, and that is deliberate - this release is mostly about the project
being honest with itself. The one visible fix: the connection pane could print
Reconnecting, attempt 4 of 0 on a stock install, because the version of that
string with a guard was fixed and its twin was not.
The documentation, though, was lying in ways that cost people time. The setup
guide Archipelago serves for this game had opened with "This randomizer is
not finished ... there is nothing to connect with yet" since four days before
the first release. It also said the mod release includes BepInEx - it does not
- and then never told you to install BepInEx at all, so following it exactly
produced a mod that could not load, which is the exact symptom its own
troubleshooting section describes. All of that is corrected.
What changed underneath
The audit. Four surviving copies of a pack behaviour removed in 0.3.2,
twenty-five doc comments stranded on the wrong member, three source comments
citing line ranges that had drifted to unrelated content, and a pile of dead
code including two C# reimplementations of logic that ships in Python and had
since diverged from it.
Nothing in the repo had ever validated a single .md file, and Archipelago's
own compliance suite only checks the tutorial file exists, never what is in it.
So a wrong document passed CI, passed compliance, and passed the release gate.
tools/check-docs.py runs in CI now, and each of its four checks was proved to
fail on a deliberately broken tree before being trusted.
The refactor. The Core csproj had recorded for two weeks that four
Unity-free files were stranded in the plugin with no tests, and that two of
five bugs in an earlier audit were in exactly that code. Two had moved; two had
not. The run state and the guard a login has to pass are in Core now, tested
in CI - 273 tests to 303.
Two files that were several files got split: Badges.cs (seven unrelated HUD
overlays under a doc describing one) and DevTools' Plugin.cs (a plugin plus
seventy commands). Both as partial classes, verified line-for-line, no caller
edited. Reading the second found two commands that could never run - one of
them the one the docs described.
Verified
Release gate 23/23 against these exact files, Core 303, apworld 114,
check-game-facts.py PASS on a dump taken with the mod parked out of plugins,
and CI green on all eight jobs before this was published.
Full detail in the CHANGELOG.
This project was built with AI assistance.
v0.3.3 - A Little To The Left Archipelago
A maintenance release. droha asked for an audit after a packaging bug turned
up in 0.3.2 - "can you do a full audit that we're not missing/half
implementing other things like this?" - and this is what it found.
Seeds from 0.3.2 still work. Location ids did not move; the tables are
byte-identical. Nothing needs regenerating.
Which file do you need?
| File | Who needs it |
|---|---|
ALTTLArchipelago-0.3.3.zip |
every player of this game |
A Little to the Left.yaml |
every player of this game |
alttl.apworld |
only whoever GENERATES the multiworld |
The mod and the apworld carry the same version and are meant to be used
together. The mod now checks that when it connects, and refuses a pair that
disagrees - see below.
Installing
- BepInEx 6 for Unity IL2CPP, x64 - the bleeding-edge builds, not BepInEx
5. Extract into the game folder, launch once, and quit. That first run
generates the interop assemblies the mod needs. - Extract
ALTTLArchipelago-0.3.3.zipinto the same game folder. The files
land inBepInEx/plugins/ALTTLArchipelago/. - Launch. The main menu gains an Archipelago entry - open it, enter the
address, port and your slot name, and press Connect.
Hosting: put alttl.apworld in your Archipelago installation's
custom_worlds/ folder. Requires Archipelago 0.6.7 or later.
A run finished offline now reports its goal
The worst thing the audit found, and a regression introduced by 0.3.2's own
credits change. Reporting the goal requires the credits to have been PLAYED,
and that fact lived only in memory - discarded on every reconnect and every
relaunch.
So: finish your run offline, play the credits, reconnect. The goal was never
sent, and the multiworld waited forever on a slot that had genuinely finished.
Nothing logged it. If that happened to you, this build fixes it and the goal
will be sent the next time you connect.
The mod refuses a seed built by a different apworld
Location ids move between releases, so a 0.3.1 mod playing a 0.3.2 seed sent
the wrong checks under the right names and said nothing at all. The seed now
carries the version that made it, and the mod says so plainly instead of
playing a subtly wrong game.
A seed generated before this release cannot say which version made it. Those
are allowed with a warning rather than refused.
The apworld's manifest is readable again
Archipelago could not read the manifest inside alttl.apworld in 0.3.0, 0.3.1
or 0.3.2. It logged an error and carried on, so everything appeared to work -
but the minimum_ap_version we declared was never actually enforced,
and a player on too old an Archipelago got no warning at all.
Also
!hintandexclude_locationsunderstand groups now -Abilities,
Traps, and one per puzzle. Excluding a puzzle you dislike no longer means
listing every solution and part of it by hand.- A run whose settings you changed - volume, resolution - keeps them when you
go back to the campaign. That was already true; a release check wrongly read
it as the mod damaging your campaign save. - Star-goal runs stopped saying "beaten". The toast read "Puzzle beaten (3/20
starred)". - The game page no longer claims packs widen as you go, that every hint page
gets an item, or that the credits card needs only the puzzle count. - Two settings that are read once at startup now say so in their own help
text.
Everything, with the measurements behind it:
CHANGELOG.md.
What was tested
The release gate cleans the install to vanilla, installs these exact assets,
generates a seed and plays it through: 23 of 23 checks, 8 of 8 puzzles
beaten, goal reported and acknowledged by the server. Plus 280 Core unit
tests and 112 apworld tests.
The offline-goal fix was proved separately in a real game: finish the run,
kill the server, play the credits offline, bring the server back, watch the
goal arrive.
Two of the gate's eight puzzles are still finished with Skip items rather than
solved, because the harness cannot drive a phased level's real drag path. Both
of those levels were beaten BY HAND for 0.3.2, holding only the abilities
their tables declare, and both completed.
v0.3.2 - A Little To The Left Archipelago
droha's 79-puzzle playtest, and the backlog it produced. An audit of the win
condition, the cat trap, the level select, and the harness that tests all of
it.
Seeds from 0.3.1 will not work with this build. Location ids moved.
Which file do you need?
| File | Who needs it |
|---|---|
ALTTLArchipelago-0.3.2.zip |
every player of this game |
A Little to the Left.yaml |
every player of this game |
alttl.apworld |
only whoever GENERATES the multiworld |
The mod and the apworld carry the same version and are meant to be used
together. A mismatch is not detected at runtime, so do not mix versions.
Installing
- BepInEx 6 for Unity IL2CPP, x64 - the bleeding-edge builds, not BepInEx
5. Extract into the game folder, launch once, and quit. That first run
generates the interop assemblies the mod needs, and takes longer than usual. - Extract
ALTTLArchipelago-0.3.2.zipinto the same game folder. The files
land inBepInEx/plugins/ALTTLArchipelago/. - Launch. The main menu gains an Archipelago entry - open it, enter the
address, port and your slot name, and press Connect.
Hosting: put alttl.apworld in your Archipelago installation's
custom_worlds/ folder. Requires Archipelago 0.6.7 or later.
Full detail, including uninstalling and troubleshooting, is in
docs/installation.md.
The credits have to be played, not just unlocked
The goal used to fire the instant the Credits ITEM arrived. droha: "i beat the
level that had the credits unlock... That instant it said i completed the
game. i didn't have to go out and play the credits at all."
The run now ends when you play the credits, with no fallback. The card also
gets a completion row and a divider before it, so it reads as the end of the
track instead of an unidentifiable greyed hand-print.
The cat trap no longer freezes the game
The trap could land inside a level transition and take the game down with it.
It holds itself while a level is loading now and spends on the next safe tick,
so a trap that arrives mid-load costs you the knock-over, not the session.
The background trap also stopped repainting every tick.
Which mechanics you hold, at a glance
The level select carries all twelve abilities as a strip - dim is one you have
not found, lit is one you hold - using the game's own art rather than anything
drawn for the mod. Beside it, a counter saying how far along the goal you are.
The credits can be gated on STARS
A new goal option. Star the levels rather than merely beating them, with its
own levels_to_star count. A Skip still grants every location on the slot, so
a skipped level counts as starred - skip_count is a shortcut to a star goal
at full strength, deliberately.
Packs are all the same size
The free opening was pinned while the packs widened past it, so a default run
opened 4 cards and then handed out 6 at a time. Every block matches now, bar
the remainder. puzzle_count 79 to 70, pack_size 4 to 5.
Every mechanic is in the run
The coverage reserve protected only the four mechanics no generator can make.
True at full length, false on a short run - at 20 puzzles, Rotating was absent
from four seeds in eight. It takes one of every mechanic first now.
It is also capped at half the run, which 0.3.2 needed: uncapped, an 8-puzzle
seed gave every slot to a different mechanic and deadlocked at 2 of 8, waiting
on abilities it could never reach.
Also
Fridge (Something Eggstra)advertised four locations and only ever paid
two. It has one, the Solution. 435 locations to 432.- The Furniture ability is now called Drawer.
- The level select stopped saying "Chapter N".
- Toasts stopped throwing messages away, and the connection pane's mouse no
longer sticks. - Settings are shared between the campaign and a run, and the window opens at
the size you chose. - The keyboard stopped driving the game from other windows.
Pannablesis scenery and is no longer reported as a table mismatch.
Everything, with the measurements behind it:
CHANGELOG.md.
What was tested
The release gate cleans the install to vanilla, installs these exact assets,
generates a seed and plays it through: 23 of 23 checks, 8 of 8 puzzles
beaten, goal reported and acknowledged by the server. Plus 271 Core unit
tests and 111 apworld tests.
Two of those eight puzzles were finished with Skip items rather than solved,
because the harness cannot drive a phased level's real drag path. The gate now
asserts which levels those may be and that none of them was still
ability-gated at the time, so a Skip can never quietly cover for a gating bug.
v0.3.1 - A Little To The Left Archipelago
Fixes from droha's first full 79-puzzle playthrough of 0.3.0, plus an audit of
every puzzle type in the game.
Seeds from 0.3.0 will not work with this build. The item table changed.
Which file do you need?
| File | Who needs it |
|---|---|
ALTTLArchipelago-0.3.1.zip |
every player of this game |
A Little to the Left.yaml |
every player of this game |
alttl.apworld |
only whoever GENERATES the multiworld |
The mod and the apworld carry the same version and are meant to be used
together. A mismatch is not detected at runtime, so do not mix versions.
Installing
- BepInEx 6 for Unity IL2CPP, x64 - the bleeding-edge builds, not BepInEx
5. Extract into the game folder, launch once, and quit. That first run
generates the interop assemblies the mod needs, and takes longer than usual. - Extract
ALTTLArchipelago-0.3.1.zipinto the same game folder. The files
land inBepInEx/plugins/ALTTLArchipelago/. - Launch. The main menu gains an Archipelago entry - open it, enter the
address, port and your slot name, and press Connect.
Hosting: put alttl.apworld in your Archipelago installation's
custom_worlds/ folder. Requires Archipelago 0.6.7 or later.
Full detail, including uninstalling and troubleshooting, is in
docs/installation.md.
The main campaign is playable
57 of the game's 69 base puzzles could never appear in a seed. Not at any
settings. pool.py built its source weights from generators and archives only,
and the slot filler assigns by source - so a source with no weight is a source
that never appears. A campaign puzzle had exactly one door, the
mechanic-coverage reserve, and only the twelve that teach a gap ability fit
through it.
The default split is now 80 generator / 10 archive / 10 campaign, all
changeable in the yaml with the new base_weight. This adds 112 locations that
already existed in the table, so no location id moves.
The audit, and three of my own claims retracted
droha, after the third playtest patched by hand: "go through every single
puzzle type, every iteration, figure out which puzzles have dependencies on
abilities and which ones have mini solutions."
The level table had been built from a runtime sweep that boots a puzzle and
looks once, which is blind to anything a level reveals as you solve it. It is
now read from what the game DECLARES - PhasedLevel.phases,
TupperwareNesting.GetPhaseControllers(), RadialDanceParty.dances,
Drawer.UnlockOnSolvedControllers, LevelObject.dependenciesPlacedFirst.
- Radial Dance Party has ten controllers, not zero. It reveals its rings
one at a time. It had been listed as having no puzzle content twice, across
two investigations. - TupperwareNesting has six, not two.
- Every phase pays now, not just the first.
- The daily pool is 36 levels, not 6. The sweep that produced 6 was run
with the mod still loaded, which forces those flags false.
111 levels, 435 locations.
Fixed from the playthrough
- A clicked card launched the wrong layout. Play was right; every card
click was wrong. The seed prefix fell back to the active level interface,
which is null by the time a card click arrives, so generator puzzles built
themselves from no seed. Invisible on hand-made levels, which is most of
them. - The next-level arrow now goes somewhere doable, rather than to the next
card whether or not your abilities can do anything there. - A run can no longer land on the Daily Tidy page. 36 levels could route
there. - One controller's ability lock no longer dims another's objects. Five
levels share objects between controllers, and the last one processed won. - Solution progress survives a reconnect. Ordinals were rebuilt in memory
and lost on quit, so a solved puzzle came back showing work to do. - Answered prompts stay answered across seeds. Every new seed looked like a
fresh install and asked again. - The level select veils cards you cannot play yet, colour-codes the
overview strip, says whether the run is connected, and stops popping its
decorations in a second late.
Items
Level Background and Menu Background are now one item, Background Change
Trap. It recolours the puzzle backdrop, the pause screen and - new - the
level select track. It is called a trap because the colour is chosen by how
many you hold rather than by what is on screen, so pieces can end up hard to
pick out against their own background.
This is the change that moves the item ids.
Known limits
- An ability lock cannot gate a group whose solution is reached by moving
another group's objects. TupperwareTower's tower check fires without
Stacking, and its two mechanism controllers are marked permanently
unearnable rather than pretending otherwise. - Two levels carry no puzzle controller at all, so their checks are free.
Full detail in
CHANGELOG.md.
v0.3.0 - A Little To The Left Archipelago
The first release: A Little To The Left as an Archipelago multiworld.
Which file do you need?
| File | Who needs it |
|---|---|
ALTTLArchipelago-0.3.0.zip |
every player of this game |
A Little to the Left.yaml |
every player of this game |
alttl.apworld |
only whoever GENERATES the multiworld |
The mod and the apworld carry the same version and are meant to be used
together. A mismatch is not detected at runtime, so do not mix versions.
Installing
- BepInEx 6 for Unity IL2CPP, x64 - the bleeding-edge builds, not BepInEx
5. Extract into the game folder, launch once, and quit. That first run
generates the interop assemblies the mod needs, and takes longer than usual. - Extract
ALTTLArchipelago-0.3.0.zipinto the same game folder. The files
land inBepInEx/plugins/ALTTLArchipelago/. - Launch. The main menu gains an Archipelago entry - open it, enter the
address, port and your slot name, and press Connect.
Hosting: put alttl.apworld in your Archipelago installation's
custom_worlds/ folder. Requires Archipelago 0.6.7 or later.
Full detail, including uninstalling and troubleshooting, is in
docs/installation.md.
What a run is
The seed replaces the campaign on the level select. Progressive Puzzle
Packs reveal puzzles in widening groups; ability locks dim the objects
for mechanics you have not unlocked, so a puzzle can be partly solved and come
back to later. Checks are each puzzle's distinct solutions. The goal is
beating a configurable number of puzzles, which unlocks the credits.
Also in the pool: Skips for a puzzle you are stuck on, Hint Pages that
let you erase a notepad page, Cat Traps that knock your work over, and
Level and Menu Backgrounds that recolour the game.
Your campaign save is never touched. A run is written to its own
save_ap_<slot>_<seed> file, and the campaign is not opened at all while a
session is active - so a crash or an alt-F4 cannot leak a randomized run into
your own progress.
It keeps playing with the server down. No server at launch resumes the
last run from a local cache; checks earned offline are queued and sent on the
next connection. A mid-session drop keeps playing too. Retries are unlimited
by default, backing off to a minute, and stop on Cancel.
Known gaps
- DLC2 Seeing Stars is not supported. It was not owned when the content
was surveyed. - A level that once loaded empty and has never reproduced. A watchdog logs
LEVEL LOADED EMPTYif it happens again - please report it if you see it. - Leaving an offline run for the vanilla campaign means turning
AutoConnect
off in the Archipelago dialog and relaunching. There is no in-session route.
Verification
The apworld here is the one CI built from this commit and tested. The release
was installed the way a player installs it and played to the credits against a
real MultiServer: 15 of 15 checks, 8 of 8 puzzles, the server confirming
droha (Team #1) has completed their goal. Detail in
docs/verification-log.md.
The mod zip is built locally rather than by CI, and always will be: it links
against interop assemblies derived from the game, which a public runner cannot
have and which are never redistributed.
sha256
a5452204dec3f80396d8be69341d2ab33a8fd363547898283b177b21734d0265 ALTTLArchipelago-0.3.0.zip
91c29ce527a4c5879ecdeb7356f343e13a9570ad48906f9fc5ce080786b69fdb alttl.apworld
91cdf90da8b224e4b9069d5597a9310ffdbe106ff600d01ea77ab803488c3cd9 A Little to the Left.yaml