Skip to content

Core: Add a ruff.toml to the root directory#5259

Merged
NewSoupVi merged 17 commits intoArchipelagoMW:mainfrom
NewSoupVi:ruff_main_directory
Oct 24, 2025
Merged

Core: Add a ruff.toml to the root directory#5259
NewSoupVi merged 17 commits intoArchipelagoMW:mainfrom
NewSoupVi:ruff_main_directory

Conversation

@NewSoupVi
Copy link
Member

Makes it easier for world devs to start using ruff, which I consider a good thing.

This is what I use for Witness. We could talk about each one of these individually, if we really want

@github-actions github-actions bot added affects: core Issues/PRs that touch core and may need additional validation. waiting-on: peer-review Issue/PR has not been reviewed by enough people yet. labels Jul 30, 2025
@NewSoupVi NewSoupVi added the is: enhancement Issues requesting new features or pull requests implementing new features. label Jul 30, 2025
ruff.toml Outdated
line-length = 120

[lint]
select = ["C", "E", "F", "R", "W", "I", "N", "Q", "UP", "RUF", "ISC", "T20"]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Never used ruff before, but it's a shame it uses such cryptic abbreviations for its lints (unlike the linters I'm used to). Could we have comments explaining what all of these are?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've tried going down that comment route before. It wasn't good.

If you have a good editor, you can just install this extension https://github.com/Jannchie/ruff-ignore-explainer
Then it shows you the more clear names without having to maintain the comments.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -0,0 +1,9 @@
line-length = 120
target-version = "py310"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to exclude all worlds? We can add extend-exclude = ["worlds"] to add it. If we want to include some limited set of rules for worlds we should be able to stick another ruff.toml in that dir and it'll override the settings.

Copy link
Member Author

@NewSoupVi NewSoupVi Jul 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My main intention behind this is so that new world devs have one less step for running ruff on their code :) So that's not really what I want

Copy link
Member Author

@NewSoupVi NewSoupVi Jul 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Like previously, on new game PRs, I would comment something like:

"Here's something you can do to make me like your world more immediately

  1. pip install ruff
  2. Put this ruff.toml file in your directory
  3. run ruff check --fix worlds/yourworld"

With this merged, I would be able to skip including that 2nd step, arguably the most annoying one

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could maybe also add a pinned ruff version to a requirements-dev.txt too (this is definitely non-blocking for this PR)

Comment on lines 6 to 9
ignore = [
"C901", # Author disagrees with limiting branch complexity
"PLC0415", # In AP, we consider local imports totally fine & necessary
]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These should be added to ignore:

"B011",  # No one should ever do what the documentation for this rule says you should do. `AssertionError` should never be used for any necessary control flow, so it should always be removed in optimized mode.
"N806",  # This doesn't allow local constants, which are useful.
"N818",  # The places we have that break this are not bad, and bad exception names are not a big problem.
"PLC1802",  # This is against a clear and good pattern. It allows the type checker to keep you safer (from accidental evaluating something as bool that you didn't intend).
"PLC1901",  # ruff docs say it's a high false positive - and even if it weren't, many people have talked about how Python is confusing with this, so we should not enforce it.
"PLE1141",  # This is a linter trying to do the job of a type checker. It doesn't do well (it gets false positives) - type checker does it much better.
"UP015",  # explicit is better than implicit - This rule is against making the code more clear.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you! I'll have a look at these and decide whether I agree with you >:) Lol

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess I'll give my opinions on some of these.

  • B0011: I agree that raise AssertionError is a strange suggestion, although I think at least most current uses of assert False are a bit strange as well and should probably raise an actual exception. +0 to ignoring.
  • N806: I think that lowercase is fine for this case. Apparently part of the justification is that opposed to proper module-level constants, function locals will be reconstructed upon each call (even with possibly different values) so they're not really constants rather than just being Final. -1 for ignoring.
  • PLC1802: I think this is a pretty weird half-explicit case, and I'd prefer either if container or if really desired, if len(container) == 0 over it. -1 for ignoring.
  • PLC1901: I'd probably prefer not to use this, but less so than PLC1802, plus the false positive issue so +1 for ignoring.
  • UP015: The extraneous t and U mode removals here are good for sure. Probably the only questionable one is explicit plain 'r', but I still feel like read by default is clear and probably doesn't need to be added explicitly. -0 for ignoring.

Copy link
Member Author

@NewSoupVi NewSoupVi Jul 31, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason we use assert False is that we have the release build configued to remove / ignore asserts, so that we can use assert as a "development-only Exception". This is important to us for performance

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I massively disagree with ignoring PLC1802 as well. PLC1802 looks like it could've been written by me. Lol

Copy link
Member Author

@NewSoupVi NewSoupVi Aug 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, I've changed my mind on PLC1802

if some_list and if len(some_list) == 0 are literally just not the same code. I feel very very strongly that usually you should be using the former, but I don't agree with having rules that straight up change the way the code acts. I will add it to the ignore list

Copy link
Collaborator

@duckboycool duckboycool Aug 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a way to have the rule but mark the fix as unsafe? If you choose to change it from if len(container) to if len(container) != 0 instead, then the only way this should be able to break things is with some cursed overload of __len__.

Co-authored-by: Doug Hoskisson <[email protected]>
nonperforming added a commit to nonperforming/Archipelago that referenced this pull request Sep 15, 2025
Using the configuration in ArchipelagoMW#5259
nonperforming added a commit to nonperforming/Archipelago that referenced this pull request Sep 15, 2025
Using the configuration in ArchipelagoMW#5259
nonperforming added a commit to nonperforming/Archipelago that referenced this pull request Sep 15, 2025
Using the configuration in ArchipelagoMW#5259
Copy link
Member

@black-sliver black-sliver left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see anything wrong with this (until we enforce it).

@NewSoupVi NewSoupVi merged commit 643f61e into ArchipelagoMW:main Oct 24, 2025
10 checks passed
@github-actions github-actions bot removed the waiting-on: peer-review Issue/PR has not been reviewed by enough people yet. label Oct 24, 2025
Ars-Ignis added a commit to Ars-Ignis/Archipelago that referenced this pull request Oct 26, 2025
commit 4b0306102d803359b2ed4c7dab71db330f3a23c9
Author: NewSoupVi <[email protected]>
Date:   Sun Oct 26 11:40:21 2025 +0100

    WebHost: Pin Flask-Compress to 1.18 for all versions of Python (#5590)

    * WebHost: Pin Flask-Compress to 1.18 for all versions of Python

    * oop

commit 3f139f2efbde0527879aac0255707741742d3bc4
Author: LiquidCat64 <[email protected]>
Date:   Sun Oct 26 04:39:14 2025 -0600

    CV64: Fix Explosive DeathLink not working with Increase Shimmy Speed on #5523

commit 41a62a1a9ec9e111ca8535a482ecdd2f9d12cea7
Author: Subsourian <[email protected]>
Date:   Sun Oct 26 03:54:17 2025 -0400

    SC2: added MindHawk to credits (#5549)

commit 8837e617e4f65cd810485ee8c2b9517191fbc533
Author: black-sliver <[email protected]>
Date:   Sat Oct 25 20:19:38 2025 +0000

    WebHost, Multiple Worlds: fix images not showing in guides (#5576)

    * Multiple: resize FR RA network commands screenshot

    This is now more in line with the text (and the english version).

    * Multiple: optimize EN RA network commands screenshot

    The URL has changed, so it's a good time to optimize.

    * WebHost, Worlds: fix retroarch images not showing

    Implements a src/url replacement for relative paths.
    Moves the RA screenshots to worlds/generic since they are shared.
    Also now uses the FR version in ffmq.
    Also fixes the formatting that resultet in the list breaking.
    Also moves imports in render_markdown.

    Guides now also properly render on Github.

    * Factorio: optimize screenshots

    The URL has changed, so it's a good time to optimize.

    * Factorio: change guide screenshots to use relative URL

    * Test: markdown: fix tests on Windows

    We also can't use delete=True, delete_on_close=False
    because that's not supported in Py3.11.

    * Test: markdown: fix typo

    I hope that's it now. *sigh*

    * Landstalker: fix doc images not showing

    Change to relative img urls.

    * Landstalker: optimize doc PNGs

    The URL has changed, so it's a good time to optimize.

commit 2bf410f2855fa8fdb8d9b47208d1863b54006638
Author: black-sliver <[email protected]>
Date:   Sat Oct 25 16:49:05 2025 +0000

    CI: update appimagetool to 2025-10-19 (#5578)

    Beware: this has a bug, but it does not impact our CI.

commit 04fe43d53a4ebe9a97f3d432d988bb0092735385
Author: NewSoupVi <[email protected]>
Date:   Sat Oct 25 15:34:59 2025 +0200

    kvui: Fix audio being completely non-functional on Linux (#5588)

    * kvui: Fix audio on Linux

    * Update kvui.py

commit 643f61e7f4c6e1ace30c8bae747afb28c6ffb617
Author: NewSoupVi <[email protected]>
Date:   Sat Oct 25 00:19:42 2025 +0200

    Core: Add a ruff.toml to the root directory (#5259)

    * Add a ruff.toml to the root directory

    * spell out C901

    * Add target version

    * Add some more of the suggested rules

    * ignore PLC0415

    * TC is bad

    * ignore B0011

    * ignore N818

    * Ignore some more rules

    * Add PLC1802 to ignore list

    * Update ruff.toml

    Co-authored-by: Doug Hoskisson <[email protected]>

    * oops

    * R to RET and RSC

    * oops

    * Py311

    * Update ruff.toml

    ---------

    Co-authored-by: Doug Hoskisson <[email protected]>

commit 6b91ffecf1ed2b212a062d5bdf275a2708dcbfbc
Author: black-sliver <[email protected]>
Date:   Thu Oct 23 22:55:10 2025 +0000

    WebHost: add missing docutils requirement ... (#5583)

    ... and update it to latest.
    This is being used in WebHostLib.options directly.
    A recent change bumped our required version, so this is actually a fix.

commit 4f7f092b9b5d47caff9d1fdbc72b3d36d23788f4
Author: black-sliver <[email protected]>
Date:   Thu Oct 23 22:54:27 2025 +0000

    setup: check if the sign host is on a local network (#5501)

    Could have a really bad timeout if it goes through default route and packet is dropped.

commit df3c6b79806da9fb6c3876f6fc4e02da44b3955f
Author: gaithern <[email protected]>
Date:   Thu Oct 23 16:01:02 2025 -0500

    KH1: Add specified encoding to file output from Client to avoid crashes with non ASCII characters (#5584)

    * Fix Slot 2 Level Checks description

    * Fix encoding issue

commit 19839399e507038ebf967dd3b6f838ad00f37ccb
Author: threeandthreee <[email protected]>
Date:   Thu Oct 23 16:11:41 2025 -0400

    LADX: stealing logic option (#3965)

    * implement StealingInLogic option

    * fix ladxr setting

    * adjust docs

    * option to disable stealing

    * indicate disabled stealing with shopkeeper dialog

    * merge upstream/main

    * Revert "merge upstream/main"

    This reverts commit c91d2d6b292d95cf93b091121f56c94b55ac8fd0.

    * fix

    * stealing in patch

    * logic reorder and fix

    sword to front for readability, but also can_farm condition was missing

commit 4847be98d2e655bd4ced7dcd7d12336a95b0f46b
Author: CookieCat <[email protected]>
Date:   Wed Oct 22 23:30:46 2025 -0400

    AHIT: Fix death link timestamps being incorrect (#5404)

commit 3105320038a6cbeb0b443a09a8338da31e574deb
Author: black-sliver <[email protected]>
Date:   Tue Oct 21 23:52:44 2025 +0000

    Test: check fields in world source manifest (#5558)

    * Test: check game in world manifest

    * Update test/general/test_world_manifest.py

    Co-authored-by: Duck <[email protected]>

    * Test: rework finding expected manifest location

    * Test: fix doc comment

    * Test: fix wrong custom_worlds path in test_world_manifest

    Also simplifies the way we find ./worlds/.

    * Test: make test_world_manifest easier to extend

    * Test: check world_version in world manifest

    according to docs/apworld specification.md

    * Test: check no container version in source world manifest

    according what was added to docs/apworld specification.md in PR 5509

    * Test: better assertion messages in test_world_manifest.py

    * Test: fix wording in world source manifest

    ---------

    Co-authored-by: Duck <[email protected]>

commit e8c8b0dbc59c59d19bceb09c0f6b877a8d96bd04
Author: Silvris <[email protected]>
Date:   Tue Oct 21 12:10:39 2025 -0500

    MM2: fix Proteus reading #5575

commit c199775c488b716b7974cc6d1082a40923a9936a
Author: Duck <[email protected]>
Date:   Mon Oct 20 13:48:17 2025 -0600

    Pokemon RB: Fix likely unintended concatenation #5566

commit d2bf7fdaf71c40d24312b757364030cf7e96692b
Author: Duck <[email protected]>
Date:   Mon Oct 20 13:47:49 2025 -0600

    AHiT: Fix likely unintended concatenation #5565

commit 621ec274c3634cfc9af6b9902bc89ee451a7cafa
Author: Duck <[email protected]>
Date:   Mon Oct 20 13:47:16 2025 -0600

    Yugioh: Fix likely unintended concatenations (#5567)

    * Fix likely unintended concatenations

    * Yeah that makes sense why I thought there were more here

commit 7cd73e27109988b85cb019025e130bbccf65138e
Author: NewSoupVi <[email protected]>
Date:   Mon Oct 20 17:40:32 2025 +0200

    WebHost: Fix generate argparse with --config-override + add autogen unit tests so we can test that (#5541)

    * Fix webhost argparse with extra args

    * accidentally added line

    * WebHost: fix some typing

    B64 url conversion is used in test/hosting,
    so it felt appropriate to include this here.

    * Test: Hosting: also test autogen

    * Test: Hosting: simplify stop_* and leave a note about Windows compat

    * Test: Hosting: fix formatting error

    * Test: Hosting: add limitted Windows support

    There are actually some differences with MP on Windows
    that make it impossible to run this in CI.

    ---------

    Co-authored-by: black-sliver <[email protected]>

commit 708df4d1e2e4f41acb95b158bc4e4e4a23739828
Author: NewSoupVi <[email protected]>
Date:   Mon Oct 20 17:06:07 2025 +0200

    WebHost: Fix flask-compress to 1.18 for Python 3.11 (to get CI to pass again) (#5573)

    From Discord:

    Well, flask-compress updated and now our 3.11 CI is failing

    Why? They switched to a lib called backports.zstd
    And 3.11 pkg_resources can't handle that.

    pip finds it. But in our ModuleUpdate.py, we first pkg_resources.require packages, and this fails. I can't reproduce this locally yet, but in CI, it seems like even though backports.zstd is installed, it still fails on it and prompts installing it over and over in every unit test
    Now what do we do :KEKW:
    Black Sliver suggested pinning flask-compress for 3.11
    But I would just like to point out that this means we can't unpin it until we drop 3.11
    the real thing is we probably need to move away from pkg_resources? lol
    since it's been deprecated literally since the oldest version we support

commit 914a534a3b11cf2ddb0a25a8023b6207299b34bf
Author: black-sliver <[email protected]>
Date:   Mon Oct 20 07:16:29 2025 +0000

    WebHost: fix gen timeout/exception resource handling (#5540)

    * WebHost: reset Generator proc title on error

    * WebHost: fix shutting down autogen

    This is still not perfect but solves some of the issues.

    * WebHost: properly propagate JOB_TIME

    * WebHost: handle autogen shutdown

commit 11d18db4520910bf62a789328f437dcc702094d4
Author: NewSoupVi <[email protected]>
Date:   Sun Oct 19 09:05:34 2025 +0200

    Docs: APWorld documentation, make a distinction between APWorld and .apworld (#5509)

    * APWorld docs: Make a distinction between APWorld and .apworld

    * Update apworld specification.md

    * Update apworld specification.md

    * Be more anal about the launcher component

    * Update apworld specification.md

    * Update apworld specification.md

commit 00acfe63d4e7128589be56c3480deece326f689b
Author: Nicholas Saylor <[email protected]>
Date:   Sat Oct 18 21:40:25 2025 -0400

    WebHost: Update publish_parts parameters (#5544)

    old name is deprecated and new name allows both writer instance or alias/name.

commit 2ac9ab53371917fff5534accf552173f36de025a
Author: Fafale <[email protected]>
Date:   Sat Oct 18 22:36:35 2025 -0300

    Docs: add warning about BepInEx to HK translated setup guides (#5554)

    * Update HK pt-br setup to add warning about BepInEx

    * Update HK spanish setup guide to add warning about BepInEx

commit 2569c9e53177accbddb35f58eb14a9c3a6c524bc
Author: Benny D <[email protected]>
Date:   Sat Oct 18 19:30:24 2025 -0600

    DLC Quest: Enable multi-classification items (#5552)

    * implement prog trap item (thanks stardew)

    * oops that's wrong

    * okay this is right

commit 946f22722602bfdbf9a345bc24bbb77bf6a01e9c
Author: Rosalie <[email protected]>
Date:   Fri Oct 17 10:44:11 2025 -0400

    [FF1] Added Deep Dungeon locations to locations.json so they exist in the datapackage (#5392)

    * Added DD locations to locations.json so they exist in the datapackage.

    * Update worlds/ff1/data/locations.json

    Co-authored-by: Exempt-Medic <[email protected]>

    * Update worlds/ff1/data/locations.json

    Forgot trailing commas aren't allowed in JSON.

    Co-authored-by: qwint <[email protected]>

    ---------

    Co-authored-by: Exempt-Medic <[email protected]>
    Co-authored-by: qwint <[email protected]>

commit 7ead8fdf49572d862a2f309fb0285d5ec645ec00
Author: Carter Hesterman <[email protected]>
Date:   Fri Oct 17 08:35:44 2025 -0600

    Civ 6: Add era requirements for boosts and update boost prereqs (#5296)

    * Resolve #5136

    * Resolves #5210

commit f5f554cb3dd89a96b44209f5eb0bbd4a0b30d45d
Author: Rosalie <[email protected]>
Date:   Fri Oct 17 10:34:10 2025 -0400

    [FF1] Client fix and improvement (#5390)

    * FF1 Client fixes.

    * Strip leading/trailing spaces from rom-stored player name.

    * FF1R encodes the name as utf-8, as it happens.

    * UTF-8 is four bytes per character, so we need 64 bytes for the name, not 16.

commit 3f2942c599e153693a910a6834809d96201f1a01
Author: Alchav <[email protected]>
Date:   Fri Oct 17 10:32:58 2025 -0400

    Super Mario Land 2: Logic fixes #5258

    Co-authored-by: alchav <[email protected]>

commit da519e7f73a811d7b1396a03f028670a6b782d35
Author: Snarky <[email protected]>
Date:   Fri Oct 17 16:30:05 2025 +0200

    SC2: fix incorrect preset option (#5551)

    * SC2: fix incorrect preset option

    * SC2: fix incorrect evil logic preset option

    ---------

    Co-authored-by: Snarky <[email protected]>

commit 0718ada6827e14749edfde09b5f16bf34dce5c4d
Author: Duck <[email protected]>
Date:   Thu Oct 16 19:20:34 2025 -0600

    Core: Allow PlandoItems to be pickled (#5335)

    * Add Options.PlandoItem

    * Remove worlds.generic.PlandoItem handling

    * Add plando pickling test

    * Revert old PlandoItem cleanup

    * Deprecate old PlandoItem

    * Change to warning message

    * Use deprecated decorator

commit f756919dd934e233502f8af95fc533fd3812cae6
Author: Duck <[email protected]>
Date:   Thu Oct 16 15:58:12 2025 -0600

    CI: Add worlds manifests to build action trigger (#5555)

    Co-authored-by: NewSoupVi <[email protected]>
    Co-authored-by: black-sliver <[email protected]>

commit 406b905dc89383868ff7337eaeddfef25d23bd39
Author: Jérémie Bolduc <[email protected]>
Date:   Thu Oct 16 16:23:23 2025 -0400

    Stardew Valley: Add archipelago.json (#5535)

    * add apworld manifest

    * add world version

commit 91439e0fb08e5de99ce4abeaec8577242136811e
Author: JaredWeakStrike <[email protected]>
Date:   Thu Oct 16 14:25:11 2025 -0400

    KH2: Manifest eletric boogaloo  (#5556)

    * manifest file

    * x y z for world version

    * Update archipelago.json

commit 03bd59bff6a01a4eec7f1862319e72904c13deb8
Author: RoobyRoo <[email protected]>
Date:   Thu Oct 16 03:48:04 2025 -0600

    Ocarina of Time: Create manifest (#5536)

    * Create archipelago.json

    * Sure, let's call it 7.0.0

    * Update archipelago.json

    ---------

    Co-authored-by: NewSoupVi <[email protected]>

commit cf02e1a1aac6d6531e373ecb35a70382ebba7393
Author: BlastSlimey <[email protected]>
Date:   Wed Oct 15 23:41:15 2025 +0200

    shapez: Fix floating layers logic error #5263

commit f6d696ea62a2099e3f1635ed593ca488bcdc37ec
Author: JaredWeakStrike <[email protected]>
Date:   Wed Oct 15 17:40:21 2025 -0400

    KH2: Manifest File (#5553)

    * manifest file

    * x y z for world version

commit 123acdef2351829a31bac086e05a36a7b580939e
Author: BadMagic100 <[email protected]>
Date:   Wed Oct 15 04:35:00 2025 -0700

    Docs: warn HK users not to use BepInEx #5550

commit 28c7a214dc4ad6e2b376a9afcbbb5fe8dee20e18
Author: Nicholas Saylor <[email protected]>
Date:   Tue Oct 14 19:09:05 2025 -0400

    Core: Use Better Practices Accessing Manifests (#5543)

    * Close manifest files

    * Name explicit encoding

commit bdae7cd42c975cb37f88471782b79eb5d62047b2
Author: NewSoupVi <[email protected]>
Date:   Tue Oct 14 20:44:01 2025 +0200

    MultiServer: Fix hinting multi-copy items bleeding found status (#5547)

    * fix hinting multi-copy items bleeding found status

    * reword

commit fc404d0cf7c55a1878e25ddf1ad77653723ea396
Author: Silvris <[email protected]>
Date:   Tue Oct 14 02:27:41 2025 -0500

    MM2: fix Heat Man always being invulnerable to Atomic Fire #5546

commit 5ce71db048d4d70b96cce204a3c9d5b044795b7f
Author: threeandthreee <[email protected]>
Date:   Mon Oct 13 13:32:49 2025 -0400

    LADX: use start_inventory_from_pool (#4641)

commit aff98a5b78cd9a83150e537b3aa3b85add736492
Author: NewSoupVi <[email protected]>
Date:   Mon Oct 13 18:55:44 2025 +0200

    CommonClient: Fix manually connecting to a url when the username or password has a space in it (#5528)

    * CommonClient: Fix manually connecting to a url when the username or password has a space in it

    * Update CommonClient.py

    * Update CommonClient.py

commit 30cedb13f36321719c7a27fc891f1b400083a65c
Author: Exempt-Medic <[email protected]>
Date:   Mon Oct 13 12:32:53 2025 -0400

    Core: Limit ItemLink Name to 16 Characters (#4318)

commit 0c1ecf72971c158315b65ada38c24fb67977d707
Author: Seldom <[email protected]>
Date:   Mon Oct 13 09:06:25 2025 -0700

    Terraria: Remove `/apstart` from docs (#5537)

commit 5390561b589283de31c4a80ac4b7c34dc72ee46b
Author: black-sliver <[email protected]>
Date:   Sun Oct 12 19:46:16 2025 +0000

    MultiServer: Fix breaking weakrefs for SetNotify (#5539)

commit bb457b0f735f060f97ef60389b3fbdd3d592798e
Author: threeandthreee <[email protected]>
Date:   Sat Oct 11 05:16:47 2025 -0400

    SNI Client: fix that it isnt using host.yaml settings (#5533)

commit 6276ccf415f6d78a1ffe75a68dceb4efaeccde62
Author: threeandthreee <[email protected]>
Date:   Fri Oct 10 11:56:15 2025 -0400

    LADX: move client out of root (#4226)

    * init

    * Revert "init"

    This reverts commit bba6b7a306b512dc77bc04acb166f83134827f98.

    * put it back but clean

    * pass args

    * windows stuff

    * delete old exe

    this seems like it?

    * use marin icon in launcher

    * use LauncherComponents.launch

commit d3588a057c4a5ba317fa4ecbc3a47e990fef426d
Author: Mysteryem <[email protected]>
Date:   Fri Oct 10 16:19:52 2025 +0100

    Tests: gc.freeze() by default in the test\benchmark\locations.py (#5055)

    Without `gc.freeze()` and `gc.unfreeze()` afterward, the `gc.collect()`
    call within each benchmark often takes much longer than all 100_000
    iterations of the location access rule, making it difficult to benchmark
    all but the slowest of access rules.

    This change enables using `gc.freeze()` by default.

commit 30ce74d6d543ebe61af3b12f2ad0f47fbde913bc
Author: Katelyn Gigante <[email protected]>
Date:   Sat Oct 11 00:02:56 2025 +1100

    core: Add host.yaml setting to make !countdown configurable (#5465)

    * core:  Add host.yaml setting to make !countdown configurable

    * Store /option changes to countdown_mode in save file

    * Wording changes in host.yaml

    * Use .get

    * Fix validation for /option command

commit ff59b8633558e4f08f85d880118b2c36c64c2bfb
Author: NewSoupVi <[email protected]>
Date:   Thu Oct 9 20:23:21 2025 +0200

    Docs: More apworld manifest documentation (#5477)

    * Expand apworld specification manifest part

    * clarity

    * expand example

    * clarify

    * correct

    * Correct

    * elaborate on what version is

    * Add where the apworlds are output

    * authors & update versions

    * Update apworld specification.md

    * Update apworld specification.md

    * Update apworld specification.md

    * Update apworld specification.md

commit e355d200630cfaa9d82cfb99597a8f1d1c58b746
Author: NewSoupVi <[email protected]>
Date:   Wed Oct 8 07:22:14 2025 +0200

    WebHost: Don't show e.__cause__ on the generation error page #5521

commit 28ea2444a4f6e7b0d94d969ea56f2cbdb331cf04
Author: Fabian Dill <[email protected]>
Date:   Wed Oct 8 06:34:00 2025 +0200

    kvui: re-enable settings menu (#4823)

commit e907980ff058a8a7ed1b4a1fb977ce9e6c573402
Author: black-sliver <[email protected]>
Date:   Wed Oct 8 00:22:34 2025 +0000

    MultiServer: slight optimizations (#5527)

    * Core: optimize MultiServer.Client

    * Core: optimize websocket compression settings

commit 5a933a160afeeb0e4bb3bde6aa575bffb2d464ce
Author: Snarky <[email protected]>
Date:   Tue Oct 7 17:25:08 2025 +0200

    SC2: Add option presets (#5436)

    * SC2: Add option presets

    * SC2: Address reviews

    * SC2: Fix import

    * SC2: Update key mode

    * SC2: Update renamed option

    * sc2: PR comment; switching from __dataclass_fields__ to dataclasses.fields()

    * sc2: Changing quote style to match AP standard

    * sc2: PR comments; Switching to Starcraft2.type_hints

    ---------

    Co-authored-by: Snarky <[email protected]>
    Co-authored-by: MatthewMarinets <[email protected]>

commit c7978bcc12564f0b141f94371572d75bdfc2e93a
Author: Duck <[email protected]>
Date:   Sun Oct 5 20:48:42 2025 -0600

    Docs: Add info about custom worlds (#5510)

    * Cleaning up (#4)

    Cleanup

    * Added new paragraph for new games

    * Update worlds/generic/docs/setup_en.md

    Proofier-comitting

    Co-authored-by: Exempt-Medic <[email protected]>

    * Added a mention in the header of the games page to refer to this guide if needed.

    * Small tweaks

    * Added mention regarding alternate version of worlds

    * Update WebHostLib/templates/supportedGames.html

    Co-authored-by: Exempt-Medic <[email protected]>

    * Update worlds/generic/docs/setup_en.md

    Co-authored-by: Exempt-Medic <[email protected]>

    * Edits for comments

    * Slight alternate versions rewording

    * Edit subheadings

    * Adjust link text

    * Replace alternate versions section and reword first

    ---------

    Co-authored-by: Danaël V <[email protected]>
    Co-authored-by: Rever <[email protected]>
    Co-authored-by: Exempt-Medic <[email protected]>

commit 5c7a84748b0257c8b0be390b36ca836ed231a9a8
Author: Duck <[email protected]>
Date:   Sun Oct 5 20:38:38 2025 -0600

    WebHost: Handle blank values for OptionCounters #5517

commit 8dc9719b9927b67a223686e19187e1dd88732634
Author: Duck <[email protected]>
Date:   Sun Oct 5 17:56:09 2025 -0600

    Core: Cleanup unneeded use of `Version`/`tuplize_version` (#5519)

    * Remove weird version uses

    * Restore version var

    * Unrestore version var

commit 60617c682e5ac5fe0d02600b585a248a126661b9
Author: black-sliver <[email protected]>
Date:   Sun Oct 5 19:05:52 2025 +0000

    WebHost: fix log fetching extra characters when there is non-ascii (#5515)

commit fd879408f3e419677f23697a1be550cc173e4cb4
Author: massimilianodelliubaldini <[email protected]>
Date:   Sun Oct 5 09:38:57 2025 -0400

    WebHost: Improve user friendliness of generation failure webpage (#4964)

    * Improve user friendliness of generation failure webpage.

    * Add details to other render for seedError.html.

    * Refactor css to avoid !important tags.

    * Update WebHostLib/static/styles/themes/ocean-island.css

    Co-authored-by: qwint <[email protected]>

    * Update WebHostLib/generate.py

    Co-authored-by: qwint <[email protected]>

    * use f words

    * small refactor

    * Update WebHostLib/generate.py

    Co-authored-by: qwint <[email protected]>

    * Fix whitespace.

    * Update one new use of seedError template for pickling errors.

    ---------

    Co-authored-by: qwint <[email protected]>

commit 8decde03704e779cb5e3ae70b96984f099bc4b65
Author: Mysteryem <[email protected]>
Date:   Sun Oct 5 14:07:12 2025 +0100

    Core: Don't waste swaps by swapping two copies of the same item (#5516)

    There is a limit to the number of times an item can be swapped to
    prevent swapping going on potentially forever. Swapping an item with a
    copy of itself is assumed to be a pointless swap, and was wasting
    possible swaps in cases where there were multiple copies of an item
    being placed.

    This swapping behaviour was noticed from debugging solo LADX generations
    that was wasting swaps by swapping copies of the same item.

    This patch adds a check that if the placed_item and item_to_place are
    equal, then the location is skipped and no attempt to swap is made.

    If worlds do intend to have seemingly equal items to actually have
    different logical behaviour, those worlds should override __eq__ on
    their Item subclasses so that the item instances are not considered
    equal.

    Generally, fill_restrictive should only be used with progression items,
    so it is assumed that swapping won't have to deal with multiple copies
    of an item where some copies are progression and some are not. This is
    relevant because Item.__eq__ only compares .name and .player.

commit adb5a7d632f3b61d4ee005baec31aa2ed2a4a841
Author: PoryGone <[email protected]>
Date:   Sun Oct 5 00:47:01 2025 -0400

    SA2B, DKC3, SMW, Celeste 64, Celeste (Open World): Manifest manifests

commit f07fea2771c2fe5092570e9da417c163fe6f87bc
Author: Jérémie Bolduc <[email protected]>
Date:   Sat Oct 4 23:39:30 2025 -0400

    CommonClient: Move command marker to last_autofillable_command (#4907)

    * handle autocomplete command when press question

    * fix test

    * add docstring to get_input_text_from_response

    * fix line lenght

commit a2460b7fe717f1dd41f8449dfa26015190d3f2c7
Author: James White <[email protected]>
Date:   Sun Oct 5 04:33:52 2025 +0100

    Pokemon RB: Add client tracking for tracker relevant events (#5495)

    * Pokemon RB: Add client tracking for tracker relevant events

    * Pokemon RB: Use list for tracker events

    * Pokemon RB: Use correct bill event

    * Pokemon RB: Add champion event tracking

commit f8f30f41b76435c20040087fbd23d9e0ea2c14e7
Author: Katelyn Gigante <[email protected]>
Date:   Sun Oct 5 14:30:52 2025 +1100

    Launcher: Newly installed custom worlds are not relative #4989

    Co-authored-by: NewSoupVi <[email protected]>

commit 60070c2f1e467728023b33a829fe19e3ccb558fd
Author: Benny D <[email protected]>
Date:   Sat Oct 4 21:13:04 2025 -0600

    PyCharm: add a run config for the new apworld builder workflow  (#5489)

    * add Build APWorld PyCharm run config

    * change casing of the argument

    * Update Build APWorld.run.xml

    ---------

    Co-authored-by: NewSoupVi <[email protected]>

commit 3eb25a59dcfd959ef9f1b6a8c787624fefe7a465
Author: Louis M <[email protected]>
Date:   Sat Oct 4 23:08:34 2025 -0400

    Aquaria: Updating documentation to add latest clients informations (#5438)

    * Updating Aquaria documentation to add latest clients informations

    * Typo in the permission explanation

commit 1cbc5d66492fb60a47c93170f75880f6528a9a39
Author: Branden Wood <[email protected]>
Date:   Sat Oct 4 23:08:15 2025 -0400

    Short Hike: improve setup guide docs #5470

commit bdef410eb2d12bcbc7562cbd37fa5b6c2e54a1db
Author: DJ-lennart <[email protected]>
Date:   Sun Oct 5 05:07:11 2025 +0200

    Civilization VI: Update for the setup instructions #5286

commit ec9145e61d97e8e482c5b048352fcd9d0f90ab25
Author: Duck <[email protected]>
Date:   Sat Oct 4 21:04:02 2025 -0600

    Region: Use Mapping type for adding locations/exits #5354

commit a547c8dd7d9ad66501410ca3f77df72634a9cc77
Author: Duck <[email protected]>
Date:   Sat Oct 4 21:02:26 2025 -0600

    Core: Add location count field for world to spoiler log (#5440)

    * Add location count

    * Only count non-events

    * Add total count

commit 7996fd8d19930734aec17e86b349e6a47d424352
Author: PinkSwitch <[email protected]>
Date:   Sat Oct 4 22:01:56 2025 -0500

    Core: Update start inventory description to mention item quantities (#5460)

    * SNIClient: new SnesReader interface

    * fix Python 3.8 compatibility
    `bisect_right`

    * move to worlds
    because we don't have good separation importable modules and entry points

    * `read` gives object that contains data

    * remove python 3.10 implementation and update typing

    * remove obsolete comment

    * freeze _MemRead and assert type of get parameter

    * some optimization in `SnesData.get`

    * pass context to `read` so that we can have a static instance of `SnesReader`

    * add docstring to `SnesReader`

    * remove unused import

    * break big reads into chunks

    * some minor improvements

    - `dataclass` instead of `NamedTuple` for `Read`
    - comprehension in `SnesData.__init__`
    - `slots` for dataclasses

    * Change descriptions

    * Fix sni client?

    ---------

    Co-authored-by: beauxq <[email protected]>
    Co-authored-by: Doug Hoskisson <[email protected]>

commit 7a652518a328e5ba57a60162855d6e5870f92428
Author: Scipio Wright <[email protected]>
Date:   Sat Oct 4 22:59:52 2025 -0400

    [Website docs] Update wording of "adding a game to archipelago" section

commit ae4426af08fda82b01be11e4f62c2ef1cb4da46a
Author: Duck <[email protected]>
Date:   Sat Oct 4 20:46:26 2025 -0600

    Core: Pad version string in world printout #5511

commit 91e97b68d402e595459c72c2202b8816a4a49e04
Author: black-sliver <[email protected]>
Date:   Sun Oct 5 01:49:56 2025 +0000

    Webhost: eagerly free resources in customserver (#5512)

    * Unref some locals that would live long for no reason.
    * Limit scope of db_session in init_save.

commit 6a08064a520fb4a1a1f9d83fe0280c22e8c3d95b
Author: NewSoupVi <[email protected]>
Date:   Sat Oct 4 03:04:23 2025 +0200

    Core: Assert that if an apworld manifest file exists, it has a game field (#5478)

    * Assert that if an apworld manifest file exists, it has a game field

    * god damnit

    * Update worlds/LauncherComponents.py

    Co-authored-by: Fabian Dill <[email protected]>

    * Update setup.py

    Co-authored-by: Fabian Dill <[email protected]>

    ---------

    Co-authored-by: Fabian Dill <[email protected]>

commit 83cfb803a79cc9538c518459541dbb0294c31baa
Author: Kaito Sinclaire <[email protected]>
Date:   Thu Oct 2 17:05:29 2025 -0700

    SMZ3: Fix forced fill behaviors (GT junk fill, initial Super/PB front fill) (#5361)

    * SMZ3: Make GT fill behave like upstream SMZ3 multiworld GT fill

    This means: All items local, 50% guaranteed filler, followed by possible
    useful items, never progression.

    * Fix item links

    * SMZ3: Ensure in all cases, we remove the right item from the pool

    Previously front fill would cause erratic errors on frozen, with the
    cause immediately revealed by, on source, tripping the assert that was
    added in #5109

    * SMZ3: Truly, *properly* fix GT junk fill

    After hours of diving deep into the upstream SMZ3 randomizer, it finally
    behaves identically to how it does there

commit 6d7abb3780e48677c28b648fdc1e84dd9676d878
Author: qwint <[email protected]>
Date:   Thu Oct 2 18:56:11 2025 -0500

    Webhost: Ignore Invalid Worlds in Webhost (#5433)

    * filter world types at top of webhost so worlds that aren't loadable in webhost are "uninstalled"

    * mark invalid worlds, show error if any, then filter to exclude them

commit 50f6cf04f691d4dd70737bac47221a093387ba50
Author: Silvris <[email protected]>
Date:   Thu Oct 2 02:36:33 2025 -0500

    Core: "Build APWorlds" cleanup (#5507)

    * allow filtered build, subprocess

    * component description

    * correct name

    * move back to running directly

commit b162095f89139d71e703a0d535645b2fb2a32cd7
Author: qwint <[email protected]>
Date:   Wed Oct 1 14:54:41 2025 -0500

    Launcher: Rework apworld install popup #5508

commit 33b485c0c3021175de6958042e821ab72ee92cb8
Author: Silvris <[email protected]>
Date:   Tue Sep 30 19:47:08 2025 -0500

    Core: expose world version to world classes and yaml (#5484)

    * support version on new manifest

    * apply world version from manifest

    * Update Generate.py

    * docs

    * reduce mm2 version again

    * wrong version

    * validate game in world_types

    * Update Generate.py

    * let unknown game fall through to later exception

    * hide real world version behind property

    * named tuple is immutable

    * write minimum world version to template yaml, fix gen edge cases

    * punctuation

    * check for world version in autoworldregister

    * missed one

    ---------

    Co-authored-by: NewSoupVi <[email protected]>

commit 4893ac3e512a0ea28741e6619eb49d28525ab36f
Author: Ziktofel <[email protected]>
Date:   Wed Oct 1 02:40:30 2025 +0200

    SC2: Fix Terran global upgrades present even if no Terran build missions are rolled (#5452)

    * Fix Terran global upgrades present even if no Terran build missions are rolled

    * Code cleanup

commit 76b0197462a6335a22f28ef61d3bc34693cf9a5c
Author: Phaneros <[email protected]>
Date:   Tue Sep 30 13:18:42 2025 -0700

    SC2: any_unit and item parent bugfixes (#5480)

    * sc2: Fixing a Reaver item being classified as a scout item

    * sc2: any_units now requires any AA in the first 5 units
    * Fixing Shoot the Messenger not requiring AA in a hard rule
    * Fixing any_unit zerg still allowing unupgraded mercs

    * sc2: Fixed an issue where terran was requiring zerg anti-air in any_units

commit 6a63de2f0f5e46335c3a03712e24fb77e193c270
Author: Scipio Wright <[email protected]>
Date:   Tue Sep 30 15:39:41 2025 -0400

    TUNIC: Fuse and Bell Shuffle (#5420)

    * Making the fix better (thanks medic)

    * Make it actually return false if it gets to the backup lists and fails them

    * Fix stuff after merge

    * Add outlet regions, create new regions as needed for them

    * Put together part of decoupled and direction pairs

    * make direction pairs work

    * Make decoupled work

    * Make fixed shop work again

    * Fix a few minor bugs

    * Fix a few minor bugs

    * Fix plando

    * god i love programming

    * Reorder portal list

    * Update portal sorter for variable shops

    * Add missing parameter

    * Some cleanup of prints and functions

    * Fix typo

    * it's aliiiiiive

    * Make seed groups not sync decoupled

    * Add test with full-shop plando

    * Fix bug with vanilla portals

    * Handle plando connections and direction pair errors

    * Update plando checking for decoupled

    * Fix typo

    * Fix exception text to be shorter

    * Add some more comments

    * Add todo note

    * Remove unused safety thing

    * Remove extra plando connections definition in options

    * Make seed groups in decoupled with overlapping but not fully overlapped plando connections interact nicely without messing with what the entrances look like in the spoiler log

    * Fix weird edge case that is technically user error

    * Add note to fixed shop

    * Fix parsing shop names in UT

    * Remove debug print

    * Actually make UT work

    * multiworld. to world.

    * Fix typo from merge

    * Make it so the shops show up in the entrance hints

    * Fix bug in ladder storage rules

    * Remove blank line

    * # Conflicts:
    #	worlds/tunic/__init__.py
    #	worlds/tunic/er_data.py
    #	worlds/tunic/er_rules.py
    #	worlds/tunic/er_scripts.py
    #	worlds/tunic/rules.py
    #	worlds/tunic/test/test_access.py

    * Fix issues after merge

    * Update plando connections stuff in docs

    * Make early bushes only contain grass

    * Fix library mistake

    * Backport changes to grass rando (#20)

    * Backport changes to grass rando

    * add_rule instead of set_rule for the special cases, add special cases for back of swamp laurels area cause I should've made a new region for the swamp upper entrance

    * Remove item name group for grass

    * Update grass rando option descriptions

    - Also ignore grass fill for single player games

    * Ignore grass fill option for solo rando

    * Update er_rules.py

    * Fix pre fill issue

    * Remove duplicate option

    * Add excluded grass locations back

    * Hide grass fill option from simple ui options page

    * Check for start with sword before setting grass rules

    * Update worlds/tunic/options.py

    Co-authored-by: Scipio Wright <[email protected]>

    * has_stick -> has_melee

    * has_stick -> has_melee

    * Add a failsafe for direction pairing

    * Fix playthrough crash bug

    * Remove init from logicmixin

    * Updates per code review (thanks hesto)

    * has_stick to has_melee in newer update

    * has_stick to has_melee in newer update

    * Exclude grass from get_filler_item_name

    - non-grass rando games were accidentally seeing grass items get shuffled in as filler, which is funny but probably shouldn't happen

    * Update worlds/tunic/__init__.py

    Co-authored-by: Scipio Wright <[email protected]>

    * Apply suggestions from code review

    Co-authored-by: Exempt-Medic <[email protected]>
    Co-authored-by: Scipio Wright <[email protected]>

    * change the rest of grass_fill to local_fill

    * Filter out grass from filler_items

    * remove -> discard

    * Update worlds/tunic/__init__.py

    Co-authored-by: Exempt-Medic <[email protected]>

    * Starting out

    * Rules for breakable regions

    * # Conflicts:
    #	worlds/tunic/__init__.py
    #	worlds/tunic/combat_logic.py
    #	worlds/tunic/er_data.py
    #	worlds/tunic/er_rules.py
    #	worlds/tunic/er_scripts.py

    * Cleanup more stuff after merge

    * Revert "Cleanup more stuff after merge"

    This reverts commit a6ee9a93da8f2fcc4413de6df6927b246017889d.

    * Revert "# Conflicts:"

    This reverts commit c74ccd74a45b6ad6b9abe6e339d115a0c98baf30.

    * Cleanup more stuff after merge

    * change has_stick to has_melee

    * Update grass list with combat logic regions

    * More fixes from combat logic merge

    * Fix some dumb stuff (#21)

    * Reorganize pre fill for grass

    * make the rest of it work, it's pr ready, boom

    * Make it work in not pot shuffle

    * Merge grass rando

    * multiworld -> world get_location, use has_any

    * Swap out region for West Garden Before Terry grass

    * Adjust west garden rules to add west combat region

    * Adjust grass regions for south checkpoint grass

    * Adjust grass regions for after terry grass

    * Adjust grass regions for west combat grass

    * Adjust grass regions for dagger house grass

    * Adjust grass regions for south checkpoint grass, adjust regions and rules for some related locations

    * Finish the remainder of the west garden grass, reformat ruined atoll a little

    * More hex quest updates

    - Implement page ability shuffle for hex quest
    - Fix keys behind bosses if hex goal is less than 3
    - Added check to fix conflicting hex quest options
    - Add option to slot data

    * Change option comparison

    * Change option checking and fix some stuff

    - also keep prayer first on low hex counts

    * Update option defaulting

    * Update option checking

    * Fix option assignment again

    * Merge in hex hunt

    * Merge in changes

    * Clean up imports

    * Add ability type to UT stuff

    * merge it all

    * Make local fill work across pot and grass (to be adjusted later)

    * Make separate pools for the grass and non-grass fills

    * Fix id overlap

    * Update option description

    * Fix default

    * Reorder localfill option desc

    * Load the purgatory ones in

    * Adjustments after merge

    * Fully remove logicrules

    * Fix UT support with fixed shop option

    * Add breakable shuffle to the ut stuff

    * Make it load in a specific number of locations

    * Add Silent's spoiler log ability thing

    * Fix for groups

    * Fix for groups

    * Fix typo

    * Fix hex quest UT support

    * Use .get

    * UT fixes, classification fixes

    * Rename some locations

    * Adjust guard house names

    * Adjust guard house names

    * Rework create_item

    * Fix for plando connections

    * Rename, add new breakables

    * Rename more stuff

    * Time to rename them again

    * Fix issue with fixed shop + decoupled

    * Put in an exception to catch that error in the future

    * Update create_item to match main

    * Update spoiler log lines for hex abilities

    * Burn the signs down

    * Bring over the combat logic fix

    * Merge in combat logic fix

    * Silly static method thing

    * Move a few areas to before well instead of east forest

    * Add an all_random hidden option for dev stuff

    * Port over changes from main

    * Fix west courtyard pot regions

    * Remove debug prints

    * Fix fortress courtyard and beneath the fortress loc groups again

    * Add exception handling to deal with duplicate apworlds

    * Fix typo

    * More missing loc group conversions

    * Initial fuse shuffle stuff

    * Fix gun missing from combat_items, add new for combat logic cache, very slight refactor of check_combat_reqs to let it do the changeover in a less complicated fashion, fix area being a boss area rather than non-boss area for a check

    * Add fuse shuffle logic

    * reorder atoll statue rule

    * Update traversal reqs

    * Remove fuse shuffle from temple door

    * Combine rules and option checking

    * Add bell shuffle; fix fuse location groups

    * Fix portal rules not requiring prayer

    * Merge the grass laurels exit grass PR

    * Merge in fortress bridge PR

    * Do a little clean up

    * Fix a regression

    * Update after merge

    * Some more stuff

    * More Silent changes

    * Update more info section in game info page

    * Fix rules for atoll and swamp fuses

    * Precollect cathedral fuse in ER

    * actually just make the fuse useful instead of progression

    * Add it to the swamp and cath rules too

    * Fix cath fuse name

    * Minor fixes and edits

    * Some UT stuff

    * Fix a couple more groups

    * Move a bunch of UT stuff to its own file

    * Fix up a couple UT things

    * Couple minor ER fixes

    * Formatting change

    * UT poptracker stuff enabled since it's optional in one of the releases

    * Add author string to world class

    * Adjust local fill option name

    * Update ut_stuff to match the PR

    * Add exception handling for UT with old apworld

    * Fix missing tracker_world

    * Remove extra entrance from cath main -> elevator

    Entry <-> Elev exists,
    Entry <-> Main exists
    So no connection is needed between Main and Elev

    * Fix so that decoupled doesn't incorrectly use get_portal_info and get_paired_portal

    * Fix so that decoupled doesn't incorrectly use get_portal_info and get_paired_portal

    * Update for breakables poptracker

    * Backup and warnings instead

    * Update typing

    * Delete old regions and rules, move stuff to logic_helpers and constants

    * Delete now much less useful tests

    * Fix breakables map tracking

    * Add more comments to init

    * Add todo to grass.py

    * Fix up tests

    * Fully remove fixed_shop

    * Finish hard deprecating FixedShop

    * Fix zig skip showing up in decoupled fixed shop

    * Make local_fill show up on the website

    * Merge with main

    * Fixes after merge

    * More fixes after merge

    * oh right that's why it was there, circular imports

    * Swap {} to ()

    * Add fuse and bell shuffle to seed groups since they're logically significant for entrance pairing

    ---------

    Co-authored-by: silent-destroyer <[email protected]>
    Co-authored-by: Silent <[email protected]>
    Co-authored-by: Exempt-Medic <[email protected]>

commit e6fb7d9c6a08a5cf481b34e61f9a0c216c7cae0d
Author: NewSoupVi <[email protected]>
Date:   Tue Sep 30 20:23:33 2025 +0200

    Core: Add an "options" arg to setup_multiworld so that non-default options can be set in it #5414

commit 0882c0fa9724f418636478341112c4bb829a01cc
Author: Fabian Dill <[email protected]>
Date:   Tue Sep 30 19:27:43 2025 +0200

    Core: only store persistent changes if there are changes (#5311)

commit f26fcc0edab7c63f684104e46322e9732084e134
Author: threeandthreee <[email protected]>
Date:   Tue Sep 30 12:47:17 2025 -0400

    LADX: use generic slot name for slots 101+ (#5208)

    * init

    * we already had the generic name, just use it

    * cap hints at 101

    * nevermind, the name is just baked in here

commit 50c9d056c9ab1097d658714176d5f835634661c7
Author: Goblin God <[email protected]>
Date:   Tue Sep 30 11:40:20 2025 -0500

    KH1: Fix a small error in option descriptions #5445

commit 5cec3f45f593e7a006fa18a6c6ffd756acdda776
Author: threeandthreee <[email protected]>
Date:   Tue Sep 30 12:39:53 2025 -0400

    LADX: reorganize options page (#4851)

    * init

    * merge upstream/main

    * improve option tooltips, clean up file a bit

    * ladx feels like more of an ocean game

    * one more

    * more cleanup

    * some reorg

    * Apply suggestions from code review

    Co-authored-by: Scipio Wright <[email protected]>

    * clean up accidental newlines

    * rewording

    * dont do the ohko alias

    ---------

    Co-authored-by: Scipio Wright <[email protected]>

commit 448f214cdbc08e46798506debf299020b401d94e
Author: Katelyn Gigante <[email protected]>
Date:   Wed Oct 1 02:39:04 2025 +1000

    core:  Option to skip "unused" item links (#4608)

    * core:  Option to skip "unused" item links

    * Update worlds/generic/docs/advanced_settings_en.md

    Co-authored-by: Exempt-Medic <[email protected]>

    * Update BaseClasses.py

    Co-authored-by: Scipio Wright <[email protected]>

    ---------

    Co-authored-by: Exempt-Medic <[email protected]>
    Co-authored-by: Scipio Wright <[email protected]>

commit 49f2d30587db2d09c2ad2f20283b917a60858733
Author: Phaneros <[email protected]>
Date:   Tue Sep 30 09:36:41 2025 -0700

    Sc2: [performance] change default options (#5424)

    * sc2: Changing default campaign options to something more performative and desirable for new players

    * sc2: Fixing broken test that was missed in roundup

    * SC2: Update tests for new defaults

    * SC2: Fix incomplete test

    * sc2: Updating description for enabled campaigns to mention which are free to play

    * sc2: PR comments; Updating additional unit tests that were affected by a default change

    * sc2: Adding a comment to the Enabled Campaigns option to list all the valid campaign names

    * sc2: Adding quotes wrapping sample values in enabled_campaigns comment to aid copy-pasting

    ---------

    Co-authored-by: Salzkorn <[email protected]>

commit 897d5ab0893c685ef7773eb98eb5da638e090875
Author: Ziktofel <[email protected]>
Date:   Tue Sep 30 18:35:26 2025 +0200

    SC2: Fix Conviction logic for Grant Story Tech (#5419)

    * Fix Conviction logic for Grant Story Tech

    - Kinetic Blast and Crushing Grip is available for the mission if story tech is granted

    * Review updates

commit 92ff0ddba8ae300fe9164ee13b37d6a0d531db7a
Author: Phaneros <[email protected]>
Date:   Tue Sep 30 09:34:26 2025 -0700

    SC2: Launcher bugfixes after content merge (#5409)

    * sc2: Fixing Launcher.py launch not properly handling command-line arguments

    * sc2: Fixing some old option names in webhost

    * sc2: Switching to common client url parameter handling

commit 1d2ad1f9c92b6ff3b1a1ddf8c9c16a8d3b28269b
Author: Duck <[email protected]>
Date:   Tue Sep 30 10:32:50 2025 -0600

    Docs: More type annotation changes (#5301)

    * Update docs annotations

    * Update settings recommendation

    * Remove Dict in comment

commit 516ebc53ce32f38aaeb6c51dd4c5702e908c969f
Author: threeandthreee <[email protected]>
Date:   Tue Sep 30 12:31:49 2025 -0400

    LADX: fix local lvl 2 sword on the beach turning into a lvl 0 shield #5334

    https://github.com/daid/LADXR/commit/e3e49b16d6af03818d6820e14db8f2ba7f0a424d

commit a30b43821f939ec860a1cb165796a3fa7447b429
Author: Silvris <[email protected]>
Date:   Tue Sep 30 11:30:26 2025 -0500

    KDL3, MM2: set goal condition before generate basic (#5382)

    * move goal kdl3

    * mm2

    * missed the singular important line

commit d9955d624b03bbc2db958995eee9f69cba3847a3
Author: gaithern <[email protected]>
Date:   Mon Sep 29 22:10:29 2025 -0500

    KH1: Fix Slot 2 Level Checks description #5451

commit 5345937966764c86e64fcff0bd5b5fd732ef9505
Author: NewSoupVi <[email protected]>
Date:   Tue Sep 30 04:45:59 2025 +0200

    The Witness: Remove two things from slot_data that nothing uses anymore #5502

commit 580370c3a04adfb017d75d364f0beb460584197b
Author: massimilianodelliubaldini <[email protected]>
Date:   Mon Sep 29 22:43:59 2025 -0400

    Jak and Daxter: close Power Cell loophole in trades test #5493

commit c30a5b206e8c3ad34380ad44eee03bdd94be9c90
Author: Scipio Wright <[email protected]>
Date:   Mon Sep 29 22:12:19 2025 -0400

    Noita: Add archipelago.json (#5483)

    * Add archipelago.json

    * Add authors

    * make it a list

commit 053f876e8478753a0bfe0dd4c83127ecdfdb330a
Author: Bryce Wilson <[email protected]>
Date:   Mon Sep 29 19:10:45 2025 -0700

    Pokemon Emerald: Add manifest (#5487)

commit ab2097960d183fcebc9028bf24a515cab412ca21
Author: massimilianodelliubaldini <[email protected]>
Date:   Mon Sep 29 21:54:32 2025 -0400

    Jak and Daxter: Add manifest #5492

commit 2f23dc72f9f7e585822c1934164c73daa5670390
Author: Justus Lind <[email protected]>
Date:   Tue Sep 30 11:54:14 2025 +1000

    Muse Dash: Update song list to Legendary Voyage, Mystic Treasure. Add manifest. (#5498)

    * Legendary Voyage, Mystic Treasure Update

    * Add manifest

    * Correct Manifest version.

    * Fix file encoding

commit f9083d930774848c8dc44fe92f663249a2b161fe
Author: Felix R <[email protected]>
Date:   Mon Sep 29 22:53:47 2025 -0300

    bumpstik: Create manifest (#5496)

commit 25baa578500c91f4c50b0beb280d057760886070
Author: Felix R <[email protected]>
Date:   Mon Sep 29 22:53:31 2025 -0300

    meritous: Create manifest (#5497)

commit 47b2242c3c05dea6534ea80bddc31d66a59d7417
Author: Scipio Wright <[email protected]>
Date:   Mon Sep 29 21:53:10 2025 -0400

    TUNIC: Add archipelago.json (#5482)

    * add archipelago.json

    * newline

    * Add authors

    * Make it a list

commit 6099869c59224d8c3660cc4020e61658e8177957
Author: Fabian Dill <[email protected]>
Date:   Tue Sep 30 01:52:12 2025 +0200

    Core: new cx_freeze (#5316)

commit 1d861d1d063b19a3e5ce64c8176a4420f69667a3
Author: palex00 <[email protected]>
Date:   Sun Sep 28 23:18:06 2025 +0200

    Pokémon RB: Update Slot Data (#5494)

commit d1624679eedb62789e7e7bf86d8803fd53f83f8f
Author: Bryce Wilson <[email protected]>
Date:   Sun Sep 28 12:39:18 2025 -0700

    Pokemon Emerald: Set all abilities to Cacophony if all are blacklisted (#5488)

commit 12998bf6f4049ccb5f720bac4f24de3030e7dd0a
Author: Bryce Wilson <[email protected]>
Date:   Sat Sep 27 07:54:03 2025 -0700

    Pokemon Emerald: Fix missing fanfare address (#5490)

commit 24394561bd37c82b24d47d3f92924d089e32358d
Author: NewSoupVi <[email protected]>
Date:   Thu Sep 25 05:10:23 2025 +0200

    Core: Bump Container Version to 7, and make APWorldContainer use 7 as the compatible_version #5479

commit 4ae87edf371869d43e18b04999d8915852456d5e
Author: Fabian Dill <[email protected]>
Date:   Wed Sep 24 23:25:46 2025 +0200

    Core: apworld manifest launcher component (#5340)

    adds a launcher component that builds all apworlds on top of #4516
    ---------

    Co-authored-by: Doug Hoskisson <[email protected]>
    Co-authored-by: qwint <[email protected]>
    Co-authored-by: Exempt-Medic <[email protected]>

commit 4525bae8796f5374c31c9c7265c92494a4e57abe
Author: Etsuna <[email protected]>
Date:   Wed Sep 24 20:08:14 2025 +0200

    Webhost: add total player location counts to tracker API (#5441)

commit dc270303a941eab3e5b60ed1ec025b4545a6f826
Author: Fabian Dill <[email protected]>
Date:   Wed Sep 24 17:33:44 2025 +0200

    Core: improve formatting on /help command (#5381)

commit a99da85a22ac925cefdf7ef7e5de3ece6d28e671
Author: Fabian Dill <[email protected]>
Date:   Wed Sep 24 02:39:19 2025 +0200

    Core: APWorld manifest (#4516)

    Adds support for a manifest file (archipelago.json) inside an .apworld file. It tells AP the game, minimum core version (optional field), maximum core version (optional field), its own version (used to determine which file to prefer to load only currently)
    The file itself is marked as required starting with core 0.7.0, prior, just a warning is printed, with error trace.

    Co-authored-by: Doug Hoskisson <[email protected]>
    Co-authored-by: qwint <[email protected]>
    Co-authored-by: Exempt-Medic <[email protected]>
    Co-authored-by: NewSoupVi <[email protected]>

commit e256abfdfb7935827c1a77132481ea1273f6b822
Author: CaitSith2 <[email protected]>
Date:   Sun Sep 21 18:07:33 2025 -0700

    Factorio: Allow to reconnect a timed out RCON client connection. (#5421)

commit fb9011da637985f511f15bf0f77824089144b5f3
Author: Fabian Dill <[email protected]>
Date:   Mon Sep 22 00:25:12 2025 +0200

    WebHost: revamp /api/*tracker/ (#5388)

commit 68187ba25fae8fa5ac448d2cc5eae8932e37a961
Author: Fabian Dill <[email protected]>
Date:   Mon Sep 22 00:17:10 2025 +0200

    WebHost: remove team argument from tracker arguments where it's irrelevant (#5272)

commit 6c45c8d606fdf771141807aad553b0953f8f2180
Author: Fabian Dill <[email protected]>
Date:   Sun Sep 21 19:23:29 2025 +0200

    Core: make countdown a "admin" only command (#5463)

commit 9e96cece569c4fa9f0485a499c1d5862f1e10b0b
Author: threeandthreee <[email protected]>
Date:   Sun Sep 21 12:59:40 2025 -0400

    LADX: Fix quickswap #5399

commit 1bd44e1e35bc45af61370323d79997369e49e007
Author: agilbert1412 <[email protected]>
Date:   Sun Sep 21 12:58:15 2025 -0400

    Stardew Valley: Fixed Traveling merchant flaky test (#5434)

    * - Made the traveling cart test not be flaky due to worlds caching

    # Conflicts:
    #	worlds/stardew_valley/rules.py

    * - Made the traveling merchant test less flaky

    # Conflicts:
    #	worlds/stardew_valley/test/rules/TestTravelingMerchant.py

commit 7badc3e745f3b50f1dd6d6d4619a16d373574331
Author: Phaneros <[email protected]>
Date:   Sun Sep 21 09:54:22 2025 -0700

    SC2: Logic bugfixes (#5461)

    * sc2: Fixing always-true rules in locations.py; fixed two over-constrained rules that put vanilla out-of-logic

    * sc2: Minor min2() optimization in rules.py

    * sc2: Fixing a Shatter the Sky logic bug where w/a upgrades were checked too many times and for the wrong units

commit 3af1e92813261639e484406bbd289b2b0ba07000
Author: Scipio Wright <[email protected]>
Date:   Sun Sep 21 12:47:11 2025 -0400

    TUNIC: Update name of a chest in the UT poptracker map integration #5462

commit 73718bbd618651d1f75da8382944173cc6295448
Author: Fabian Dill <[email protected]>
Date:   Fri Sep 19 03:52:31 2025 +0200

    Core: make APContainer seek archipelago.json (#5261)

commit 8f2b4a961f5c956ee5aa58aad01df919371fcb42
Author: Sunny Bat <[email protected]>
Date:   Tue Sep 16 10:26:06 2025 -0700

    Raft: Add Zipline Tool requirement to Engine controls blueprint #5455

commit 9fdeecd9965b188e712f7ef4024a709d9836a79b
Author: JaredWeakStrike <[email protected]>
Date:   Sun Sep 14 20:08:57 2025 -0400

    KH2: Remove top level client script (#5446)

    * initial commit

    * remove kh2client.exe from setup

commit 174d89c81f0a6e7115f78f8ddbf8af33762e062b
Author: Adrian Priestley <[email protected]>
Date:   Sun Sep 14 09:54:53 2025 -0230

    feat(workflow): Implement new Github workflow for building and pushing container images (#5242)

    * fix(workflows): Update Docker workflow tag pattern
    - Change tag pattern from "v*" to "*.*.*" for better version matching
    - Add new semver pattern type for major version

    * squash! fix(workflows): Update Docker workflow tag pattern - Change tag pattern from "v*" to "*.*.*" for better version matching - Add new semver pattern type for major version

    * Update docker.yml

    * Update docker.yml

    * Update docker.yml

    * fix(docker): Correct copy command to use recursive flag for EnemizerCLI
    - Changed 'cp' to 'cp -r' to properly copy EnemizerCLI directory

    * fixup! Update docker.yml

    * fix(docker): Correct copy command to use recursive flag for EnemizerCLI
    - Changed 'cp' to 'cp -r' to properly copy EnemizerCLI directory

    * chore(workflow): Update Docker workflow to support multiple platforms
    - Removed matrix strategy for platform selection
    - Set platforms directly in the Docker Buildx step

    * docs(deployment): Update container deployment documentation
    - Specify minimum versions for Docker and Podman
    - Add requirement for Docker Buildx plugin

    * fix(workflows): Exclude specific paths from Docker build triggers
    - Prevent unnecessary builds for documentation and deployment files

    * feat(ci): Update Docker workflow for multi-architecture builds
    - Added new build job for ARM64 architecture support
    - Created a multi-arch manifest to manage image variants
    - Improved Docker Buildx setup and push steps for both architectures

    * fixup! feat(ci): Update Docker workflow for multi-architecture builds - Added new build job for ARM64 architecture support - Created a multi-arch manifest to manage image variants - Improved Docker Buildx setup and push steps for both architectures

    * fixup! feat(ci): Update Docker workflow for multi-architecture builds - Added new build job for ARM64 architecture support - Created a multi-arch manifest to manage image variants - Improved Docker Buildx setup and push steps for both architectures

    * fixup! feat(ci): Update Docker workflow for multi-architecture builds - Added new build job for ARM64 architecture support - Created a multi-arch manifest to manage image variants - Improved Docker Buildx setup and push steps for both architectures

    * fix(workflow): Cleanup temporary image tags

    * fixup! fix(workflow): Cleanup temporary image tags

    * fixup! fix(workflow): Cleanup temporary image tags

    * fixup! fix(workflow): Cleanup temporary image tags

    * fix(workflow): Apply scoped build cache to eliminate race condition
    between jobs.

    * fixup! fix(workflow): Apply scoped build cache to eliminate race condition between jobs.

    * Remove branch wildcard

    * Test comment

    * Revert wildcard removal

    * Remove `pr` event

    * Revert `pr` event removal

    * fixup! Revert `pr` event removal

    * Update docker.yml

    * Update docker.yml

    * Update docker.yml

    * feat(workflows): Add docker workflow to compute final tags
    - Introduce a step to compute final tags based on GitHub ref type
    - Ensure 'latest' tag is set for version tags

    * chore(workflow): Enable manual dispatch for Docker workflow
    - Add workflow_dispatch event trigger to allow manual runs

    * fix(workflows): Update Docker workflow to handle tag outputs correctly
    - Use readarray to handle tags as an array
    - Prevent duplicate latest tags in the tags list
    - Set multiline output for tags in GitHub Actions

    * Update docker.yml

    Use new `is_not_default_branch` condition

    * Update docker.yml

    Allow "v" prefix for semver git tags qualifying for `latest` image tag

    * Update docker.yml

    Tighten up `tags` push pattern mirroring that of `release` workflow.

    * Merge branch 'ArchipelagoMW:main' into main

    * Update docker.yml

    * Merge branch 'ArchipelagoMW:main' into docker_wf

    * Update docker.yml

    Use new `is_not_default_branch` condition

    * Update docker.yml

    Allow "v" prefix for semver git tags qualifying for `latest` image tag

    * Update docker.yml

    Tighten up `tags` push pattern mirroring that of `release` workflow.

    * ci(docker): refactor multi-arch build to use matrix strategy
    - Consolidate separate amd64 and arm64 jobs into a single build job
    - Introduce matrix for platform, runner, suffix, and cache-scope
    - Generalize tag computation and build steps with matrix variables

    * fixup! ci(docker): refactor multi-arch build to use matrix strategy - Consolidate separate amd64 and arm64 jobs into a single build job - Introduce matrix for platform, runner, suffix, and cache-scope - Generalize tag computation and build steps with matrix variables

commit 71de33d7ddc00780f8af864c96b31d97bf61f788
Author: Duck <[email protected]>
Date:   Sat Sep 13 18:02:03 2025 -0600

    CI: Fix peer review tag on undrafting a PR (#5282)

    * Move ready for review condition out of non-draft check

    * Remove condition on labeler

    * Revert condition

commit 9c00eb91d6eeb822ae565ab5a1dd86882d60e857
Author: Fabian Dill <[email protected]>
Date:   Sun Sep 14 02:01:41 2025 +0200

    WebHost: fix Internal Server Error if parallel access to /room/* happens (#5444)

commit 597583577a3207f6a4ad2afd9165778a010d9070
Author: NewSoupVi <[email protected]>
Date:   Sat Sep 13 16:07:13 2025 +0200

    KH1: Remove top level script & remove script_name from its component (#5443)

commit 4e085894d2b177fdd34eccbcde70df804fc89842
Author: Salzkorn <[email protected]>
Date:   Fri Sep 12 23:48:29 2025 +0200

    SC2: Region access rule speedups (#5426)

commit 76a8b0d582b61e4457af0c54a06700528b8e9065
Author: Yaranorgoth <[email protected]>
Date:   Fri Sep 12 23:32:42 2025 +0200

    CCCharles: Bug fix for cyclic connections of Entrances with the ignored rules by the logic (#5442)

    * Add cccharles world to AP

    > The logic has been tested, the game can be completed
    > The logic is simple and it does not take into account options
    ! The documentations are a work in progress

    * Update documentations

    > Redacted French and English Setup Guides
    > Redacted French and English Game Pages

    * Handling PR#5287 remarks

    > Revert unexpected changes on .run\Archipelago Unittests.run.xml (base Archipelago file)
    > Fixed typo "querty" -> "qwerty" in fr and eng Game Pages
    > Adding "Game page in other languages" section to eng Game Page documentation
    > Improved Steam path in fr and eng Setup Guides

    * Handled PR remarks + fixes

    > Added get_filler_item_name() to remove warnings
    > Fixed irrelevant links for documentations
    > Used the Player Options page instead of the default YAML on GitHub
    > Reworded all locations to make them simple and clear
    > Split some locations that can be linked with an entrance rule
    > Reworked all options
    > Updated regions according to locations
    > Replaced unnecessary rules by rules on entrances

    * Empty Options.py

    Only the base options are handled yet, "work in progress" features removed.

    * Handled PR remark

    > Fixed specific UT name

    * Handled PR remarks

    > UT updated by replacing depreciated features

    * Add start_inventory_from_pool as option

    This start_inventory_from_pool option is like regular start inventory but it takes items from the pool and replaces them with fillers

    Co-authored-by: Scipio Wright <[email protected]>

    * Handled PR remarks

    > Mainly fixed editorial and minor issu…
Crazycolbster pushed a commit to Crazycolbster/Archipelago that referenced this pull request Nov 18, 2025
* Add a ruff.toml to the root directory

* spell out C901

* Add target version

* Add some more of the suggested rules

* ignore PLC0415

* TC is bad

* ignore B0011

* ignore N818

* Ignore some more rules

* Add PLC1802 to ignore list

* Update ruff.toml

Co-authored-by: Doug Hoskisson <[email protected]>

* oops

* R to RET and RSC

* oops

* Py311

* Update ruff.toml

---------

Co-authored-by: Doug Hoskisson <[email protected]>
Ars-Ignis added a commit to Ars-Ignis/Archipelago that referenced this pull request Nov 25, 2025
commit 4b0306102d803359b2ed4c7dab71db330f3a23c9
Author: NewSoupVi <[email protected]>
Date:   Sun Oct 26 11:40:21 2025 +0100

    WebHost: Pin Flask-Compress to 1.18 for all versions of Python (#5590)

    * WebHost: Pin Flask-Compress to 1.18 for all versions of Python

    * oop

commit 3f139f2efbde0527879aac0255707741742d3bc4
Author: LiquidCat64 <[email protected]>
Date:   Sun Oct 26 04:39:14 2025 -0600

    CV64: Fix Explosive DeathLink not working with Increase Shimmy Speed on #5523

commit 41a62a1a9ec9e111ca8535a482ecdd2f9d12cea7
Author: Subsourian <[email protected]>
Date:   Sun Oct 26 03:54:17 2025 -0400

    SC2: added MindHawk to credits (#5549)

commit 8837e617e4f65cd810485ee8c2b9517191fbc533
Author: black-sliver <[email protected]>
Date:   Sat Oct 25 20:19:38 2025 +0000

    WebHost, Multiple Worlds: fix images not showing in guides (#5576)

    * Multiple: resize FR RA network commands screenshot

    This is now more in line with the text (and the english version).

    * Multiple: optimize EN RA network commands screenshot

    The URL has changed, so it's a good time to optimize.

    * WebHost, Worlds: fix retroarch images not showing

    Implements a src/url replacement for relative paths.
    Moves the RA screenshots to worlds/generic since they are shared.
    Also now uses the FR version in ffmq.
    Also fixes the formatting that resultet in the list breaking.
    Also moves imports in render_markdown.

    Guides now also properly render on Github.

    * Factorio: optimize screenshots

    The URL has changed, so it's a good time to optimize.

    * Factorio: change guide screenshots to use relative URL

    * Test: markdown: fix tests on Windows

    We also can't use delete=True, delete_on_close=False
    because that's not supported in Py3.11.

    * Test: markdown: fix typo

    I hope that's it now. *sigh*

    * Landstalker: fix doc images not showing

    Change to relative img urls.

    * Landstalker: optimize doc PNGs

    The URL has changed, so it's a good time to optimize.

commit 2bf410f2855fa8fdb8d9b47208d1863b54006638
Author: black-sliver <[email protected]>
Date:   Sat Oct 25 16:49:05 2025 +0000

    CI: update appimagetool to 2025-10-19 (#5578)

    Beware: this has a bug, but it does not impact our CI.

commit 04fe43d53a4ebe9a97f3d432d988bb0092735385
Author: NewSoupVi <[email protected]>
Date:   Sat Oct 25 15:34:59 2025 +0200

    kvui: Fix audio being completely non-functional on Linux (#5588)

    * kvui: Fix audio on Linux

    * Update kvui.py

commit 643f61e7f4c6e1ace30c8bae747afb28c6ffb617
Author: NewSoupVi <[email protected]>
Date:   Sat Oct 25 00:19:42 2025 +0200

    Core: Add a ruff.toml to the root directory (#5259)

    * Add a ruff.toml to the root directory

    * spell out C901

    * Add target version

    * Add some more of the suggested rules

    * ignore PLC0415

    * TC is bad

    * ignore B0011

    * ignore N818

    * Ignore some more rules

    * Add PLC1802 to ignore list

    * Update ruff.toml

    Co-authored-by: Doug Hoskisson <[email protected]>

    * oops

    * R to RET and RSC

    * oops

    * Py311

    * Update ruff.toml

    ---------

    Co-authored-by: Doug Hoskisson <[email protected]>

commit 6b91ffecf1ed2b212a062d5bdf275a2708dcbfbc
Author: black-sliver <[email protected]>
Date:   Thu Oct 23 22:55:10 2025 +0000

    WebHost: add missing docutils requirement ... (#5583)

    ... and update it to latest.
    This is being used in WebHostLib.options directly.
    A recent change bumped our required version, so this is actually a fix.

commit 4f7f092b9b5d47caff9d1fdbc72b3d36d23788f4
Author: black-sliver <[email protected]>
Date:   Thu Oct 23 22:54:27 2025 +0000

    setup: check if the sign host is on a local network (#5501)

    Could have a really bad timeout if it goes through default route and packet is dropped.

commit df3c6b79806da9fb6c3876f6fc4e02da44b3955f
Author: gaithern <[email protected]>
Date:   Thu Oct 23 16:01:02 2025 -0500

    KH1: Add specified encoding to file output from Client to avoid crashes with non ASCII characters (#5584)

    * Fix Slot 2 Level Checks description

    * Fix encoding issue

commit 19839399e507038ebf967dd3b6f838ad00f37ccb
Author: threeandthreee <[email protected]>
Date:   Thu Oct 23 16:11:41 2025 -0400

    LADX: stealing logic option (#3965)

    * implement StealingInLogic option

    * fix ladxr setting

    * adjust docs

    * option to disable stealing

    * indicate disabled stealing with shopkeeper dialog

    * merge upstream/main

    * Revert "merge upstream/main"

    This reverts commit c91d2d6b292d95cf93b091121f56c94b55ac8fd0.

    * fix

    * stealing in patch

    * logic reorder and fix

    sword to front for readability, but also can_farm condition was missing

commit 4847be98d2e655bd4ced7dcd7d12336a95b0f46b
Author: CookieCat <[email protected]>
Date:   Wed Oct 22 23:30:46 2025 -0400

    AHIT: Fix death link timestamps being incorrect (#5404)

commit 3105320038a6cbeb0b443a09a8338da31e574deb
Author: black-sliver <[email protected]>
Date:   Tue Oct 21 23:52:44 2025 +0000

    Test: check fields in world source manifest (#5558)

    * Test: check game in world manifest

    * Update test/general/test_world_manifest.py

    Co-authored-by: Duck <[email protected]>

    * Test: rework finding expected manifest location

    * Test: fix doc comment

    * Test: fix wrong custom_worlds path in test_world_manifest

    Also simplifies the way we find ./worlds/.

    * Test: make test_world_manifest easier to extend

    * Test: check world_version in world manifest

    according to docs/apworld specification.md

    * Test: check no container version in source world manifest

    according what was added to docs/apworld specification.md in PR 5509

    * Test: better assertion messages in test_world_manifest.py

    * Test: fix wording in world source manifest

    ---------

    Co-authored-by: Duck <[email protected]>

commit e8c8b0dbc59c59d19bceb09c0f6b877a8d96bd04
Author: Silvris <[email protected]>
Date:   Tue Oct 21 12:10:39 2025 -0500

    MM2: fix Proteus reading #5575

commit c199775c488b716b7974cc6d1082a40923a9936a
Author: Duck <[email protected]>
Date:   Mon Oct 20 13:48:17 2025 -0600

    Pokemon RB: Fix likely unintended concatenation #5566

commit d2bf7fdaf71c40d24312b757364030cf7e96692b
Author: Duck <[email protected]>
Date:   Mon Oct 20 13:47:49 2025 -0600

    AHiT: Fix likely unintended concatenation #5565

commit 621ec274c3634cfc9af6b9902bc89ee451a7cafa
Author: Duck <[email protected]>
Date:   Mon Oct 20 13:47:16 2025 -0600

    Yugioh: Fix likely unintended concatenations (#5567)

    * Fix likely unintended concatenations

    * Yeah that makes sense why I thought there were more here

commit 7cd73e27109988b85cb019025e130bbccf65138e
Author: NewSoupVi <[email protected]>
Date:   Mon Oct 20 17:40:32 2025 +0200

    WebHost: Fix generate argparse with --config-override + add autogen unit tests so we can test that (#5541)

    * Fix webhost argparse with extra args

    * accidentally added line

    * WebHost: fix some typing

    B64 url conversion is used in test/hosting,
    so it felt appropriate to include this here.

    * Test: Hosting: also test autogen

    * Test: Hosting: simplify stop_* and leave a note about Windows compat

    * Test: Hosting: fix formatting error

    * Test: Hosting: add limitted Windows support

    There are actually some differences with MP on Windows
    that make it impossible to run this in CI.

    ---------

    Co-authored-by: black-sliver <[email protected]>

commit 708df4d1e2e4f41acb95b158bc4e4e4a23739828
Author: NewSoupVi <[email protected]>
Date:   Mon Oct 20 17:06:07 2025 +0200

    WebHost: Fix flask-compress to 1.18 for Python 3.11 (to get CI to pass again) (#5573)

    From Discord:

    Well, flask-compress updated and now our 3.11 CI is failing

    Why? They switched to a lib called backports.zstd
    And 3.11 pkg_resources can't handle that.

    pip finds it. But in our ModuleUpdate.py, we first pkg_resources.require packages, and this fails. I can't reproduce this locally yet, but in CI, it seems like even though backports.zstd is installed, it still fails on it and prompts installing it over and over in every unit test
    Now what do we do :KEKW:
    Black Sliver suggested pinning flask-compress for 3.11
    But I would just like to point out that this means we can't unpin it until we drop 3.11
    the real thing is we probably need to move away from pkg_resources? lol
    since it's been deprecated literally since the oldest version we support

commit 914a534a3b11cf2ddb0a25a8023b6207299b34bf
Author: black-sliver <[email protected]>
Date:   Mon Oct 20 07:16:29 2025 +0000

    WebHost: fix gen timeout/exception resource handling (#5540)

    * WebHost: reset Generator proc title on error

    * WebHost: fix shutting down autogen

    This is still not perfect but solves some of the issues.

    * WebHost: properly propagate JOB_TIME

    * WebHost: handle autogen shutdown

commit 11d18db4520910bf62a789328f437dcc702094d4
Author: NewSoupVi <[email protected]>
Date:   Sun Oct 19 09:05:34 2025 +0200

    Docs: APWorld documentation, make a distinction between APWorld and .apworld (#5509)

    * APWorld docs: Make a distinction between APWorld and .apworld

    * Update apworld specification.md

    * Update apworld specification.md

    * Be more anal about the launcher component

    * Update apworld specification.md

    * Update apworld specification.md

commit 00acfe63d4e7128589be56c3480deece326f689b
Author: Nicholas Saylor <[email protected]>
Date:   Sat Oct 18 21:40:25 2025 -0400

    WebHost: Update publish_parts parameters (#5544)

    old name is deprecated and new name allows both writer instance or alias/name.

commit 2ac9ab53371917fff5534accf552173f36de025a
Author: Fafale <[email protected]>
Date:   Sat Oct 18 22:36:35 2025 -0300

    Docs: add warning about BepInEx to HK translated setup guides (#5554)

    * Update HK pt-br setup to add warning about BepInEx

    * Update HK spanish setup guide to add warning about BepInEx

commit 2569c9e53177accbddb35f58eb14a9c3a6c524bc
Author: Benny D <[email protected]>
Date:   Sat Oct 18 19:30:24 2025 -0600

    DLC Quest: Enable multi-classification items (#5552)

    * implement prog trap item (thanks stardew)

    * oops that's wrong

    * okay this is right

commit 946f22722602bfdbf9a345bc24bbb77bf6a01e9c
Author: Rosalie <[email protected]>
Date:   Fri Oct 17 10:44:11 2025 -0400

    [FF1] Added Deep Dungeon locations to locations.json so they exist in the datapackage (#5392)

    * Added DD locations to locations.json so they exist in the datapackage.

    * Update worlds/ff1/data/locations.json

    Co-authored-by: Exempt-Medic <[email protected]>

    * Update worlds/ff1/data/locations.json

    Forgot trailing commas aren't allowed in JSON.

    Co-authored-by: qwint <[email protected]>

    ---------

    Co-authored-by: Exempt-Medic <[email protected]>
    Co-authored-by: qwint <[email protected]>

commit 7ead8fdf49572d862a2f309fb0285d5ec645ec00
Author: Carter Hesterman <[email protected]>
Date:   Fri Oct 17 08:35:44 2025 -0600

    Civ 6: Add era requirements for boosts and update boost prereqs (#5296)

    * Resolve #5136

    * Resolves #5210

commit f5f554cb3dd89a96b44209f5eb0bbd4a0b30d45d
Author: Rosalie <[email protected]>
Date:   Fri Oct 17 10:34:10 2025 -0400

    [FF1] Client fix and improvement (#5390)

    * FF1 Client fixes.

    * Strip leading/trailing spaces from rom-stored player name.

    * FF1R encodes the name as utf-8, as it happens.

    * UTF-8 is four bytes per character, so we need 64 bytes for the name, not 16.

commit 3f2942c599e153693a910a6834809d96201f1a01
Author: Alchav <[email protected]>
Date:   Fri Oct 17 10:32:58 2025 -0400

    Super Mario Land 2: Logic fixes #5258

    Co-authored-by: alchav <[email protected]>

commit da519e7f73a811d7b1396a03f028670a6b782d35
Author: Snarky <[email protected]>
Date:   Fri Oct 17 16:30:05 2025 +0200

    SC2: fix incorrect preset option (#5551)

    * SC2: fix incorrect preset option

    * SC2: fix incorrect evil logic preset option

    ---------

    Co-authored-by: Snarky <[email protected]>

commit 0718ada6827e14749edfde09b5f16bf34dce5c4d
Author: Duck <[email protected]>
Date:   Thu Oct 16 19:20:34 2025 -0600

    Core: Allow PlandoItems to be pickled (#5335)

    * Add Options.PlandoItem

    * Remove worlds.generic.PlandoItem handling

    * Add plando pickling test

    * Revert old PlandoItem cleanup

    * Deprecate old PlandoItem

    * Change to warning message

    * Use deprecated decorator

commit f756919dd934e233502f8af95fc533fd3812cae6
Author: Duck <[email protected]>
Date:   Thu Oct 16 15:58:12 2025 -0600

    CI: Add worlds manifests to build action trigger (#5555)

    Co-authored-by: NewSoupVi <[email protected]>
    Co-authored-by: black-sliver <[email protected]>

commit 406b905dc89383868ff7337eaeddfef25d23bd39
Author: Jérémie Bolduc <[email protected]>
Date:   Thu Oct 16 16:23:23 2025 -0400

    Stardew Valley: Add archipelago.json (#5535)

    * add apworld manifest

    * add world version

commit 91439e0fb08e5de99ce4abeaec8577242136811e
Author: JaredWeakStrike <[email protected]>
Date:   Thu Oct 16 14:25:11 2025 -0400

    KH2: Manifest eletric boogaloo  (#5556)

    * manifest file

    * x y z for world version

    * Update archipelago.json

commit 03bd59bff6a01a4eec7f1862319e72904c13deb8
Author: RoobyRoo <[email protected]>
Date:   Thu Oct 16 03:48:04 2025 -0600

    Ocarina of Time: Create manifest (#5536)

    * Create archipelago.json

    * Sure, let's call it 7.0.0

    * Update archipelago.json

    ---------

    Co-authored-by: NewSoupVi <[email protected]>

commit cf02e1a1aac6d6531e373ecb35a70382ebba7393
Author: BlastSlimey <[email protected]>
Date:   Wed Oct 15 23:41:15 2025 +0200

    shapez: Fix floating layers logic error #5263

commit f6d696ea62a2099e3f1635ed593ca488bcdc37ec
Author: JaredWeakStrike <[email protected]>
Date:   Wed Oct 15 17:40:21 2025 -0400

    KH2: Manifest File (#5553)

    * manifest file

    * x y z for world version

commit 123acdef2351829a31bac086e05a36a7b580939e
Author: BadMagic100 <[email protected]>
Date:   Wed Oct 15 04:35:00 2025 -0700

    Docs: warn HK users not to use BepInEx #5550

commit 28c7a214dc4ad6e2b376a9afcbbb5fe8dee20e18
Author: Nicholas Saylor <[email protected]>
Date:   Tue Oct 14 19:09:05 2025 -0400

    Core: Use Better Practices Accessing Manifests (#5543)

    * Close manifest files

    * Name explicit encoding

commit bdae7cd42c975cb37f88471782b79eb5d62047b2
Author: NewSoupVi <[email protected]>
Date:   Tue Oct 14 20:44:01 2025 +0200

    MultiServer: Fix hinting multi-copy items bleeding found status (#5547)

    * fix hinting multi-copy items bleeding found status

    * reword

commit fc404d0cf7c55a1878e25ddf1ad77653723ea396
Author: Silvris <[email protected]>
Date:   Tue Oct 14 02:27:41 2025 -0500

    MM2: fix Heat Man always being invulnerable to Atomic Fire #5546

commit 5ce71db048d4d70b96cce204a3c9d5b044795b7f
Author: threeandthreee <[email protected]>
Date:   Mon Oct 13 13:32:49 2025 -0400

    LADX: use start_inventory_from_pool (#4641)

commit aff98a5b78cd9a83150e537b3aa3b85add736492
Author: NewSoupVi <[email protected]>
Date:   Mon Oct 13 18:55:44 2025 +0200

    CommonClient: Fix manually connecting to a url when the username or password has a space in it (#5528)

    * CommonClient: Fix manually connecting to a url when the username or password has a space in it

    * Update CommonClient.py

    * Update CommonClient.py

commit 30cedb13f36321719c7a27fc891f1b400083a65c
Author: Exempt-Medic <[email protected]>
Date:   Mon Oct 13 12:32:53 2025 -0400

    Core: Limit ItemLink Name to 16 Characters (#4318)

commit 0c1ecf72971c158315b65ada38c24fb67977d707
Author: Seldom <[email protected]>
Date:   Mon Oct 13 09:06:25 2025 -0700

    Terraria: Remove `/apstart` from docs (#5537)

commit 5390561b589283de31c4a80ac4b7c34dc72ee46b
Author: black-sliver <[email protected]>
Date:   Sun Oct 12 19:46:16 2025 +0000

    MultiServer: Fix breaking weakrefs for SetNotify (#5539)

commit bb457b0f735f060f97ef60389b3fbdd3d592798e
Author: threeandthreee <[email protected]>
Date:   Sat Oct 11 05:16:47 2025 -0400

    SNI Client: fix that it isnt using host.yaml settings (#5533)

commit 6276ccf415f6d78a1ffe75a68dceb4efaeccde62
Author: threeandthreee <[email protected]>
Date:   Fri Oct 10 11:56:15 2025 -0400

    LADX: move client out of root (#4226)

    * init

    * Revert "init"

    This reverts commit bba6b7a306b512dc77bc04acb166f83134827f98.

    * put it back but clean

    * pass args

    * windows stuff

    * delete old exe

    this seems like it?

    * use marin icon in launcher

    * use LauncherComponents.launch

commit d3588a057c4a5ba317fa4ecbc3a47e990fef426d
Author: Mysteryem <[email protected]>
Date:   Fri Oct 10 16:19:52 2025 +0100

    Tests: gc.freeze() by default in the test\benchmark\locations.py (#5055)

    Without `gc.freeze()` and `gc.unfreeze()` afterward, the `gc.collect()`
    call within each benchmark often takes much longer than all 100_000
    iterations of the location access rule, making it difficult to benchmark
    all but the slowest of access rules.

    This change enables using `gc.freeze()` by default.

commit 30ce74d6d543ebe61af3b12f2ad0f47fbde913bc
Author: Katelyn Gigante <[email protected]>
Date:   Sat Oct 11 00:02:56 2025 +1100

    core: Add host.yaml setting to make !countdown configurable (#5465)

    * core:  Add host.yaml setting to make !countdown configurable

    * Store /option changes to countdown_mode in save file

    * Wording changes in host.yaml

    * Use .get

    * Fix validation for /option command

commit ff59b8633558e4f08f85d880118b2c36c64c2bfb
Author: NewSoupVi <[email protected]>
Date:   Thu Oct 9 20:23:21 2025 +0200

    Docs: More apworld manifest documentation (#5477)

    * Expand apworld specification manifest part

    * clarity

    * expand example

    * clarify

    * correct

    * Correct

    * elaborate on what version is

    * Add where the apworlds are output

    * authors & update versions

    * Update apworld specification.md

    * Update apworld specification.md

    * Update apworld specification.md

    * Update apworld specification.md

commit e355d200630cfaa9d82cfb99597a8f1d1c58b746
Author: NewSoupVi <[email protected]>
Date:   Wed Oct 8 07:22:14 2025 +0200

    WebHost: Don't show e.__cause__ on the generation error page #5521

commit 28ea2444a4f6e7b0d94d969ea56f2cbdb331cf04
Author: Fabian Dill <[email protected]>
Date:   Wed Oct 8 06:34:00 2025 +0200

    kvui: re-enable settings menu (#4823)

commit e907980ff058a8a7ed1b4a1fb977ce9e6c573402
Author: black-sliver <[email protected]>
Date:   Wed Oct 8 00:22:34 2025 +0000

    MultiServer: slight optimizations (#5527)

    * Core: optimize MultiServer.Client

    * Core: optimize websocket compression settings

commit 5a933a160afeeb0e4bb3bde6aa575bffb2d464ce
Author: Snarky <[email protected]>
Date:   Tue Oct 7 17:25:08 2025 +0200

    SC2: Add option presets (#5436)

    * SC2: Add option presets

    * SC2: Address reviews

    * SC2: Fix import

    * SC2: Update key mode

    * SC2: Update renamed option

    * sc2: PR comment; switching from __dataclass_fields__ to dataclasses.fields()

    * sc2: Changing quote style to match AP standard

    * sc2: PR comments; Switching to Starcraft2.type_hints

    ---------

    Co-authored-by: Snarky <[email protected]>
    Co-authored-by: MatthewMarinets <[email protected]>

commit c7978bcc12564f0b141f94371572d75bdfc2e93a
Author: Duck <[email protected]>
Date:   Sun Oct 5 20:48:42 2025 -0600

    Docs: Add info about custom worlds (#5510)

    * Cleaning up (#4)

    Cleanup

    * Added new paragraph for new games

    * Update worlds/generic/docs/setup_en.md

    Proofier-comitting

    Co-authored-by: Exempt-Medic <[email protected]>

    * Added a mention in the header of the games page to refer to this guide if needed.

    * Small tweaks

    * Added mention regarding alternate version of worlds

    * Update WebHostLib/templates/supportedGames.html

    Co-authored-by: Exempt-Medic <[email protected]>

    * Update worlds/generic/docs/setup_en.md

    Co-authored-by: Exempt-Medic <[email protected]>

    * Edits for comments

    * Slight alternate versions rewording

    * Edit subheadings

    * Adjust link text

    * Replace alternate versions section and reword first

    ---------

    Co-authored-by: Danaël V <[email protected]>
    Co-authored-by: Rever <[email protected]>
    Co-authored-by: Exempt-Medic <[email protected]>

commit 5c7a84748b0257c8b0be390b36ca836ed231a9a8
Author: Duck <[email protected]>
Date:   Sun Oct 5 20:38:38 2025 -0600

    WebHost: Handle blank values for OptionCounters #5517

commit 8dc9719b9927b67a223686e19187e1dd88732634
Author: Duck <[email protected]>
Date:   Sun Oct 5 17:56:09 2025 -0600

    Core: Cleanup unneeded use of `Version`/`tuplize_version` (#5519)

    * Remove weird version uses

    * Restore version var

    * Unrestore version var

commit 60617c682e5ac5fe0d02600b585a248a126661b9
Author: black-sliver <[email protected]>
Date:   Sun Oct 5 19:05:52 2025 +0000

    WebHost: fix log fetching extra characters when there is non-ascii (#5515)

commit fd879408f3e419677f23697a1be550cc173e4cb4
Author: massimilianodelliubaldini <[email protected]>
Date:   Sun Oct 5 09:38:57 2025 -0400

    WebHost: Improve user friendliness of generation failure webpage (#4964)

    * Improve user friendliness of generation failure webpage.

    * Add details to other render for seedError.html.

    * Refactor css to avoid !important tags.

    * Update WebHostLib/static/styles/themes/ocean-island.css

    Co-authored-by: qwint <[email protected]>

    * Update WebHostLib/generate.py

    Co-authored-by: qwint <[email protected]>

    * use f words

    * small refactor

    * Update WebHostLib/generate.py

    Co-authored-by: qwint <[email protected]>

    * Fix whitespace.

    * Update one new use of seedError template for pickling errors.

    ---------

    Co-authored-by: qwint <[email protected]>

commit 8decde03704e779cb5e3ae70b96984f099bc4b65
Author: Mysteryem <[email protected]>
Date:   Sun Oct 5 14:07:12 2025 +0100

    Core: Don't waste swaps by swapping two copies of the same item (#5516)

    There is a limit to the number of times an item can be swapped to
    prevent swapping going on potentially forever. Swapping an item with a
    copy of itself is assumed to be a pointless swap, and was wasting
    possible swaps in cases where there were multiple copies of an item
    being placed.

    This swapping behaviour was noticed from debugging solo LADX generations
    that was wasting swaps by swapping copies of the same item.

    This patch adds a check that if the placed_item and item_to_place are
    equal, then the location is skipped and no attempt to swap is made.

    If worlds do intend to have seemingly equal items to actually have
    different logical behaviour, those worlds should override __eq__ on
    their Item subclasses so that the item instances are not considered
    equal.

    Generally, fill_restrictive should only be used with progression items,
    so it is assumed that swapping won't have to deal with multiple copies
    of an item where some copies are progression and some are not. This is
    relevant because Item.__eq__ only compares .name and .player.

commit adb5a7d632f3b61d4ee005baec31aa2ed2a4a841
Author: PoryGone <[email protected]>
Date:   Sun Oct 5 00:47:01 2025 -0400

    SA2B, DKC3, SMW, Celeste 64, Celeste (Open World): Manifest manifests

commit f07fea2771c2fe5092570e9da417c163fe6f87bc
Author: Jérémie Bolduc <[email protected]>
Date:   Sat Oct 4 23:39:30 2025 -0400

    CommonClient: Move command marker to last_autofillable_command (#4907)

    * handle autocomplete command when press question

    * fix test

    * add docstring to get_input_text_from_response

    * fix line lenght

commit a2460b7fe717f1dd41f8449dfa26015190d3f2c7
Author: James White <[email protected]>
Date:   Sun Oct 5 04:33:52 2025 +0100

    Pokemon RB: Add client tracking for tracker relevant events (#5495)

    * Pokemon RB: Add client tracking for tracker relevant events

    * Pokemon RB: Use list for tracker events

    * Pokemon RB: Use correct bill event

    * Pokemon RB: Add champion event tracking

commit f8f30f41b76435c20040087fbd23d9e0ea2c14e7
Author: Katelyn Gigante <[email protected]>
Date:   Sun Oct 5 14:30:52 2025 +1100

    Launcher: Newly installed custom worlds are not relative #4989

    Co-authored-by: NewSoupVi <[email protected]>

commit 60070c2f1e467728023b33a829fe19e3ccb558fd
Author: Benny D <[email protected]>
Date:   Sat Oct 4 21:13:04 2025 -0600

    PyCharm: add a run config for the new apworld builder workflow  (#5489)

    * add Build APWorld PyCharm run config

    * change casing of the argument

    * Update Build APWorld.run.xml

    ---------

    Co-authored-by: NewSoupVi <[email protected]>

commit 3eb25a59dcfd959ef9f1b6a8c787624fefe7a465
Author: Louis M <[email protected]>
Date:   Sat Oct 4 23:08:34 2025 -0400

    Aquaria: Updating documentation to add latest clients informations (#5438)

    * Updating Aquaria documentation to add latest clients informations

    * Typo in the permission explanation

commit 1cbc5d66492fb60a47c93170f75880f6528a9a39
Author: Branden Wood <[email protected]>
Date:   Sat Oct 4 23:08:15 2025 -0400

    Short Hike: improve setup guide docs #5470

commit bdef410eb2d12bcbc7562cbd37fa5b6c2e54a1db
Author: DJ-lennart <[email protected]>
Date:   Sun Oct 5 05:07:11 2025 +0200

    Civilization VI: Update for the setup instructions #5286

commit ec9145e61d97e8e482c5b048352fcd9d0f90ab25
Author: Duck <[email protected]>
Date:   Sat Oct 4 21:04:02 2025 -0600

    Region: Use Mapping type for adding locations/exits #5354

commit a547c8dd7d9ad66501410ca3f77df72634a9cc77
Author: Duck <[email protected]>
Date:   Sat Oct 4 21:02:26 2025 -0600

    Core: Add location count field for world to spoiler log (#5440)

    * Add location count

    * Only count non-events

    * Add total count

commit 7996fd8d19930734aec17e86b349e6a47d424352
Author: PinkSwitch <[email protected]>
Date:   Sat Oct 4 22:01:56 2025 -0500

    Core: Update start inventory description to mention item quantities (#5460)

    * SNIClient: new SnesReader interface

    * fix Python 3.8 compatibility
    `bisect_right`

    * move to worlds
    because we don't have good separation importable modules and entry points

    * `read` gives object that contains data

    * remove python 3.10 implementation and update typing

    * remove obsolete comment

    * freeze _MemRead and assert type of get parameter

    * some optimization in `SnesData.get`

    * pass context to `read` so that we can have a static instance of `SnesReader`

    * add docstring to `SnesReader`

    * remove unused import

    * break big reads into chunks

    * some minor improvements

    - `dataclass` instead of `NamedTuple` for `Read`
    - comprehension in `SnesData.__init__`
    - `slots` for dataclasses

    * Change descriptions

    * Fix sni client?

    ---------

    Co-authored-by: beauxq <[email protected]>
    Co-authored-by: Doug Hoskisson <[email protected]>

commit 7a652518a328e5ba57a60162855d6e5870f92428
Author: Scipio Wright <[email protected]>
Date:   Sat Oct 4 22:59:52 2025 -0400

    [Website docs] Update wording of "adding a game to archipelago" section

commit ae4426af08fda82b01be11e4f62c2ef1cb4da46a
Author: Duck <[email protected]>
Date:   Sat Oct 4 20:46:26 2025 -0600

    Core: Pad version string in world printout #5511

commit 91e97b68d402e595459c72c2202b8816a4a49e04
Author: black-sliver <[email protected]>
Date:   Sun Oct 5 01:49:56 2025 +0000

    Webhost: eagerly free resources in customserver (#5512)

    * Unref some locals that would live long for no reason.
    * Limit scope of db_session in init_save.

commit 6a08064a520fb4a1a1f9d83fe0280c22e8c3d95b
Author: NewSoupVi <[email protected]>
Date:   Sat Oct 4 03:04:23 2025 +0200

    Core: Assert that if an apworld manifest file exists, it has a game field (#5478)

    * Assert that if an apworld manifest file exists, it has a game field

    * god damnit

    * Update worlds/LauncherComponents.py

    Co-authored-by: Fabian Dill <[email protected]>

    * Update setup.py

    Co-authored-by: Fabian Dill <[email protected]>

    ---------

    Co-authored-by: Fabian Dill <[email protected]>

commit 83cfb803a79cc9538c518459541dbb0294c31baa
Author: Kaito Sinclaire <[email protected]>
Date:   Thu Oct 2 17:05:29 2025 -0700

    SMZ3: Fix forced fill behaviors (GT junk fill, initial Super/PB front fill) (#5361)

    * SMZ3: Make GT fill behave like upstream SMZ3 multiworld GT fill

    This means: All items local, 50% guaranteed filler, followed by possible
    useful items, never progression.

    * Fix item links

    * SMZ3: Ensure in all cases, we remove the right item from the pool

    Previously front fill would cause erratic errors on frozen, with the
    cause immediately revealed by, on source, tripping the assert that was
    added in #5109

    * SMZ3: Truly, *properly* fix GT junk fill

    After hours of diving deep into the upstream SMZ3 randomizer, it finally
    behaves identically to how it does there

commit 6d7abb3780e48677c28b648fdc1e84dd9676d878
Author: qwint <[email protected]>
Date:   Thu Oct 2 18:56:11 2025 -0500

    Webhost: Ignore Invalid Worlds in Webhost (#5433)

    * filter world types at top of webhost so worlds that aren't loadable in webhost are "uninstalled"

    * mark invalid worlds, show error if any, then filter to exclude them

commit 50f6cf04f691d4dd70737bac47221a093387ba50
Author: Silvris <[email protected]>
Date:   Thu Oct 2 02:36:33 2025 -0500

    Core: "Build APWorlds" cleanup (#5507)

    * allow filtered build, subprocess

    * component description

    * correct name

    * move back to running directly

commit b162095f89139d71e703a0d535645b2fb2a32cd7
Author: qwint <[email protected]>
Date:   Wed Oct 1 14:54:41 2025 -0500

    Launcher: Rework apworld install popup #5508

commit 33b485c0c3021175de6958042e821ab72ee92cb8
Author: Silvris <[email protected]>
Date:   Tue Sep 30 19:47:08 2025 -0500

    Core: expose world version to world classes and yaml (#5484)

    * support version on new manifest

    * apply world version from manifest

    * Update Generate.py

    * docs

    * reduce mm2 version again

    * wrong version

    * validate game in world_types

    * Update Generate.py

    * let unknown game fall through to later exception

    * hide real world version behind property

    * named tuple is immutable

    * write minimum world version to template yaml, fix gen edge cases

    * punctuation

    * check for world version in autoworldregister

    * missed one

    ---------

    Co-authored-by: NewSoupVi <[email protected]>

commit 4893ac3e512a0ea28741e6619eb49d28525ab36f
Author: Ziktofel <[email protected]>
Date:   Wed Oct 1 02:40:30 2025 +0200

    SC2: Fix Terran global upgrades present even if no Terran build missions are rolled (#5452)

    * Fix Terran global upgrades present even if no Terran build missions are rolled

    * Code cleanup

commit 76b0197462a6335a22f28ef61d3bc34693cf9a5c
Author: Phaneros <[email protected]>
Date:   Tue Sep 30 13:18:42 2025 -0700

    SC2: any_unit and item parent bugfixes (#5480)

    * sc2: Fixing a Reaver item being classified as a scout item

    * sc2: any_units now requires any AA in the first 5 units
    * Fixing Shoot the Messenger not requiring AA in a hard rule
    * Fixing any_unit zerg still allowing unupgraded mercs

    * sc2: Fixed an issue where terran was requiring zerg anti-air in any_units

commit 6a63de2f0f5e46335c3a03712e24fb77e193c270
Author: Scipio Wright <[email protected]>
Date:   Tue Sep 30 15:39:41 2025 -0400

    TUNIC: Fuse and Bell Shuffle (#5420)

    * Making the fix better (thanks medic)

    * Make it actually return false if it gets to the backup lists and fails them

    * Fix stuff after merge

    * Add outlet regions, create new regions as needed for them

    * Put together part of decoupled and direction pairs

    * make direction pairs work

    * Make decoupled work

    * Make fixed shop work again

    * Fix a few minor bugs

    * Fix a few minor bugs

    * Fix plando

    * god i love programming

    * Reorder portal list

    * Update portal sorter for variable shops

    * Add missing parameter

    * Some cleanup of prints and functions

    * Fix typo

    * it's aliiiiiive

    * Make seed groups not sync decoupled

    * Add test with full-shop plando

    * Fix bug with vanilla portals

    * Handle plando connections and direction pair errors

    * Update plando checking for decoupled

    * Fix typo

    * Fix exception text to be shorter

    * Add some more comments

    * Add todo note

    * Remove unused safety thing

    * Remove extra plando connections definition in options

    * Make seed groups in decoupled with overlapping but not fully overlapped plando connections interact nicely without messing with what the entrances look like in the spoiler log

    * Fix weird edge case that is technically user error

    * Add note to fixed shop

    * Fix parsing shop names in UT

    * Remove debug print

    * Actually make UT work

    * multiworld. to world.

    * Fix typo from merge

    * Make it so the shops show up in the entrance hints

    * Fix bug in ladder storage rules

    * Remove blank line

    * # Conflicts:
    #	worlds/tunic/__init__.py
    #	worlds/tunic/er_data.py
    #	worlds/tunic/er_rules.py
    #	worlds/tunic/er_scripts.py
    #	worlds/tunic/rules.py
    #	worlds/tunic/test/test_access.py

    * Fix issues after merge

    * Update plando connections stuff in docs

    * Make early bushes only contain grass

    * Fix library mistake

    * Backport changes to grass rando (#20)

    * Backport changes to grass rando

    * add_rule instead of set_rule for the special cases, add special cases for back of swamp laurels area cause I should've made a new region for the swamp upper entrance

    * Remove item name group for grass

    * Update grass rando option descriptions

    - Also ignore grass fill for single player games

    * Ignore grass fill option for solo rando

    * Update er_rules.py

    * Fix pre fill issue

    * Remove duplicate option

    * Add excluded grass locations back

    * Hide grass fill option from simple ui options page

    * Check for start with sword before setting grass rules

    * Update worlds/tunic/options.py

    Co-authored-by: Scipio Wright <[email protected]>

    * has_stick -> has_melee

    * has_stick -> has_melee

    * Add a failsafe for direction pairing

    * Fix playthrough crash bug

    * Remove init from logicmixin

    * Updates per code review (thanks hesto)

    * has_stick to has_melee in newer update

    * has_stick to has_melee in newer update

    * Exclude grass from get_filler_item_name

    - non-grass rando games were accidentally seeing grass items get shuffled in as filler, which is funny but probably shouldn't happen

    * Update worlds/tunic/__init__.py

    Co-authored-by: Scipio Wright <[email protected]>

    * Apply suggestions from code review

    Co-authored-by: Exempt-Medic <[email protected]>
    Co-authored-by: Scipio Wright <[email protected]>

    * change the rest of grass_fill to local_fill

    * Filter out grass from filler_items

    * remove -> discard

    * Update worlds/tunic/__init__.py

    Co-authored-by: Exempt-Medic <[email protected]>

    * Starting out

    * Rules for breakable regions

    * # Conflicts:
    #	worlds/tunic/__init__.py
    #	worlds/tunic/combat_logic.py
    #	worlds/tunic/er_data.py
    #	worlds/tunic/er_rules.py
    #	worlds/tunic/er_scripts.py

    * Cleanup more stuff after merge

    * Revert "Cleanup more stuff after merge"

    This reverts commit a6ee9a93da8f2fcc4413de6df6927b246017889d.

    * Revert "# Conflicts:"

    This reverts commit c74ccd74a45b6ad6b9abe6e339d115a0c98baf30.

    * Cleanup more stuff after merge

    * change has_stick to has_melee

    * Update grass list with combat logic regions

    * More fixes from combat logic merge

    * Fix some dumb stuff (#21)

    * Reorganize pre fill for grass

    * make the rest of it work, it's pr ready, boom

    * Make it work in not pot shuffle

    * Merge grass rando

    * multiworld -> world get_location, use has_any

    * Swap out region for West Garden Before Terry grass

    * Adjust west garden rules to add west combat region

    * Adjust grass regions for south checkpoint grass

    * Adjust grass regions for after terry grass

    * Adjust grass regions for west combat grass

    * Adjust grass regions for dagger house grass

    * Adjust grass regions for south checkpoint grass, adjust regions and rules for some related locations

    * Finish the remainder of the west garden grass, reformat ruined atoll a little

    * More hex quest updates

    - Implement page ability shuffle for hex quest
    - Fix keys behind bosses if hex goal is less than 3
    - Added check to fix conflicting hex quest options
    - Add option to slot data

    * Change option comparison

    * Change option checking and fix some stuff

    - also keep prayer first on low hex counts

    * Update option defaulting

    * Update option checking

    * Fix option assignment again

    * Merge in hex hunt

    * Merge in changes

    * Clean up imports

    * Add ability type to UT stuff

    * merge it all

    * Make local fill work across pot and grass (to be adjusted later)

    * Make separate pools for the grass and non-grass fills

    * Fix id overlap

    * Update option description

    * Fix default

    * Reorder localfill option desc

    * Load the purgatory ones in

    * Adjustments after merge

    * Fully remove logicrules

    * Fix UT support with fixed shop option

    * Add breakable shuffle to the ut stuff

    * Make it load in a specific number of locations

    * Add Silent's spoiler log ability thing

    * Fix for groups

    * Fix for groups

    * Fix typo

    * Fix hex quest UT support

    * Use .get

    * UT fixes, classification fixes

    * Rename some locations

    * Adjust guard house names

    * Adjust guard house names

    * Rework create_item

    * Fix for plando connections

    * Rename, add new breakables

    * Rename more stuff

    * Time to rename them again

    * Fix issue with fixed shop + decoupled

    * Put in an exception to catch that error in the future

    * Update create_item to match main

    * Update spoiler log lines for hex abilities

    * Burn the signs down

    * Bring over the combat logic fix

    * Merge in combat logic fix

    * Silly static method thing

    * Move a few areas to before well instead of east forest

    * Add an all_random hidden option for dev stuff

    * Port over changes from main

    * Fix west courtyard pot regions

    * Remove debug prints

    * Fix fortress courtyard and beneath the fortress loc groups again

    * Add exception handling to deal with duplicate apworlds

    * Fix typo

    * More missing loc group conversions

    * Initial fuse shuffle stuff

    * Fix gun missing from combat_items, add new for combat logic cache, very slight refactor of check_combat_reqs to let it do the changeover in a less complicated fashion, fix area being a boss area rather than non-boss area for a check

    * Add fuse shuffle logic

    * reorder atoll statue rule

    * Update traversal reqs

    * Remove fuse shuffle from temple door

    * Combine rules and option checking

    * Add bell shuffle; fix fuse location groups

    * Fix portal rules not requiring prayer

    * Merge the grass laurels exit grass PR

    * Merge in fortress bridge PR

    * Do a little clean up

    * Fix a regression

    * Update after merge

    * Some more stuff

    * More Silent changes

    * Update more info section in game info page

    * Fix rules for atoll and swamp fuses

    * Precollect cathedral fuse in ER

    * actually just make the fuse useful instead of progression

    * Add it to the swamp and cath rules too

    * Fix cath fuse name

    * Minor fixes and edits

    * Some UT stuff

    * Fix a couple more groups

    * Move a bunch of UT stuff to its own file

    * Fix up a couple UT things

    * Couple minor ER fixes

    * Formatting change

    * UT poptracker stuff enabled since it's optional in one of the releases

    * Add author string to world class

    * Adjust local fill option name

    * Update ut_stuff to match the PR

    * Add exception handling for UT with old apworld

    * Fix missing tracker_world

    * Remove extra entrance from cath main -> elevator

    Entry <-> Elev exists,
    Entry <-> Main exists
    So no connection is needed between Main and Elev

    * Fix so that decoupled doesn't incorrectly use get_portal_info and get_paired_portal

    * Fix so that decoupled doesn't incorrectly use get_portal_info and get_paired_portal

    * Update for breakables poptracker

    * Backup and warnings instead

    * Update typing

    * Delete old regions and rules, move stuff to logic_helpers and constants

    * Delete now much less useful tests

    * Fix breakables map tracking

    * Add more comments to init

    * Add todo to grass.py

    * Fix up tests

    * Fully remove fixed_shop

    * Finish hard deprecating FixedShop

    * Fix zig skip showing up in decoupled fixed shop

    * Make local_fill show up on the website

    * Merge with main

    * Fixes after merge

    * More fixes after merge

    * oh right that's why it was there, circular imports

    * Swap {} to ()

    * Add fuse and bell shuffle to seed groups since they're logically significant for entrance pairing

    ---------

    Co-authored-by: silent-destroyer <[email protected]>
    Co-authored-by: Silent <[email protected]>
    Co-authored-by: Exempt-Medic <[email protected]>

commit e6fb7d9c6a08a5cf481b34e61f9a0c216c7cae0d
Author: NewSoupVi <[email protected]>
Date:   Tue Sep 30 20:23:33 2025 +0200

    Core: Add an "options" arg to setup_multiworld so that non-default options can be set in it #5414

commit 0882c0fa9724f418636478341112c4bb829a01cc
Author: Fabian Dill <[email protected]>
Date:   Tue Sep 30 19:27:43 2025 +0200

    Core: only store persistent changes if there are changes (#5311)

commit f26fcc0edab7c63f684104e46322e9732084e134
Author: threeandthreee <[email protected]>
Date:   Tue Sep 30 12:47:17 2025 -0400

    LADX: use generic slot name for slots 101+ (#5208)

    * init

    * we already had the generic name, just use it

    * cap hints at 101

    * nevermind, the name is just baked in here

commit 50c9d056c9ab1097d658714176d5f835634661c7
Author: Goblin God <[email protected]>
Date:   Tue Sep 30 11:40:20 2025 -0500

    KH1: Fix a small error in option descriptions #5445

commit 5cec3f45f593e7a006fa18a6c6ffd756acdda776
Author: threeandthreee <[email protected]>
Date:   Tue Sep 30 12:39:53 2025 -0400

    LADX: reorganize options page (#4851)

    * init

    * merge upstream/main

    * improve option tooltips, clean up file a bit

    * ladx feels like more of an ocean game

    * one more

    * more cleanup

    * some reorg

    * Apply suggestions from code review

    Co-authored-by: Scipio Wright <[email protected]>

    * clean up accidental newlines

    * rewording

    * dont do the ohko alias

    ---------

    Co-authored-by: Scipio Wright <[email protected]>

commit 448f214cdbc08e46798506debf299020b401d94e
Author: Katelyn Gigante <[email protected]>
Date:   Wed Oct 1 02:39:04 2025 +1000

    core:  Option to skip "unused" item links (#4608)

    * core:  Option to skip "unused" item links

    * Update worlds/generic/docs/advanced_settings_en.md

    Co-authored-by: Exempt-Medic <[email protected]>

    * Update BaseClasses.py

    Co-authored-by: Scipio Wright <[email protected]>

    ---------

    Co-authored-by: Exempt-Medic <[email protected]>
    Co-authored-by: Scipio Wright <[email protected]>

commit 49f2d30587db2d09c2ad2f20283b917a60858733
Author: Phaneros <[email protected]>
Date:   Tue Sep 30 09:36:41 2025 -0700

    Sc2: [performance] change default options (#5424)

    * sc2: Changing default campaign options to something more performative and desirable for new players

    * sc2: Fixing broken test that was missed in roundup

    * SC2: Update tests for new defaults

    * SC2: Fix incomplete test

    * sc2: Updating description for enabled campaigns to mention which are free to play

    * sc2: PR comments; Updating additional unit tests that were affected by a default change

    * sc2: Adding a comment to the Enabled Campaigns option to list all the valid campaign names

    * sc2: Adding quotes wrapping sample values in enabled_campaigns comment to aid copy-pasting

    ---------

    Co-authored-by: Salzkorn <[email protected]>

commit 897d5ab0893c685ef7773eb98eb5da638e090875
Author: Ziktofel <[email protected]>
Date:   Tue Sep 30 18:35:26 2025 +0200

    SC2: Fix Conviction logic for Grant Story Tech (#5419)

    * Fix Conviction logic for Grant Story Tech

    - Kinetic Blast and Crushing Grip is available for the mission if story tech is granted

    * Review updates

commit 92ff0ddba8ae300fe9164ee13b37d6a0d531db7a
Author: Phaneros <[email protected]>
Date:   Tue Sep 30 09:34:26 2025 -0700

    SC2: Launcher bugfixes after content merge (#5409)

    * sc2: Fixing Launcher.py launch not properly handling command-line arguments

    * sc2: Fixing some old option names in webhost

    * sc2: Switching to common client url parameter handling

commit 1d2ad1f9c92b6ff3b1a1ddf8c9c16a8d3b28269b
Author: Duck <[email protected]>
Date:   Tue Sep 30 10:32:50 2025 -0600

    Docs: More type annotation changes (#5301)

    * Update docs annotations

    * Update settings recommendation

    * Remove Dict in comment

commit 516ebc53ce32f38aaeb6c51dd4c5702e908c969f
Author: threeandthreee <[email protected]>
Date:   Tue Sep 30 12:31:49 2025 -0400

    LADX: fix local lvl 2 sword on the beach turning into a lvl 0 shield #5334

    https://github.com/daid/LADXR/commit/e3e49b16d6af03818d6820e14db8f2ba7f0a424d

commit a30b43821f939ec860a1cb165796a3fa7447b429
Author: Silvris <[email protected]>
Date:   Tue Sep 30 11:30:26 2025 -0500

    KDL3, MM2: set goal condition before generate basic (#5382)

    * move goal kdl3

    * mm2

    * missed the singular important line

commit d9955d624b03bbc2db958995eee9f69cba3847a3
Author: gaithern <[email protected]>
Date:   Mon Sep 29 22:10:29 2025 -0500

    KH1: Fix Slot 2 Level Checks description #5451

commit 5345937966764c86e64fcff0bd5b5fd732ef9505
Author: NewSoupVi <[email protected]>
Date:   Tue Sep 30 04:45:59 2025 +0200

    The Witness: Remove two things from slot_data that nothing uses anymore #5502

commit 580370c3a04adfb017d75d364f0beb460584197b
Author: massimilianodelliubaldini <[email protected]>
Date:   Mon Sep 29 22:43:59 2025 -0400

    Jak and Daxter: close Power Cell loophole in trades test #5493

commit c30a5b206e8c3ad34380ad44eee03bdd94be9c90
Author: Scipio Wright <[email protected]>
Date:   Mon Sep 29 22:12:19 2025 -0400

    Noita: Add archipelago.json (#5483)

    * Add archipelago.json

    * Add authors

    * make it a list

commit 053f876e8478753a0bfe0dd4c83127ecdfdb330a
Author: Bryce Wilson <[email protected]>
Date:   Mon Sep 29 19:10:45 2025 -0700

    Pokemon Emerald: Add manifest (#5487)

commit ab2097960d183fcebc9028bf24a515cab412ca21
Author: massimilianodelliubaldini <[email protected]>
Date:   Mon Sep 29 21:54:32 2025 -0400

    Jak and Daxter: Add manifest #5492

commit 2f23dc72f9f7e585822c1934164c73daa5670390
Author: Justus Lind <[email protected]>
Date:   Tue Sep 30 11:54:14 2025 +1000

    Muse Dash: Update song list to Legendary Voyage, Mystic Treasure. Add manifest. (#5498)

    * Legendary Voyage, Mystic Treasure Update

    * Add manifest

    * Correct Manifest version.

    * Fix file encoding

commit f9083d930774848c8dc44fe92f663249a2b161fe
Author: Felix R <[email protected]>
Date:   Mon Sep 29 22:53:47 2025 -0300

    bumpstik: Create manifest (#5496)

commit 25baa578500c91f4c50b0beb280d057760886070
Author: Felix R <[email protected]>
Date:   Mon Sep 29 22:53:31 2025 -0300

    meritous: Create manifest (#5497)

commit 47b2242c3c05dea6534ea80bddc31d66a59d7417
Author: Scipio Wright <[email protected]>
Date:   Mon Sep 29 21:53:10 2025 -0400

    TUNIC: Add archipelago.json (#5482)

    * add archipelago.json

    * newline

    * Add authors

    * Make it a list

commit 6099869c59224d8c3660cc4020e61658e8177957
Author: Fabian Dill <[email protected]>
Date:   Tue Sep 30 01:52:12 2025 +0200

    Core: new cx_freeze (#5316)

commit 1d861d1d063b19a3e5ce64c8176a4420f69667a3
Author: palex00 <[email protected]>
Date:   Sun Sep 28 23:18:06 2025 +0200

    Pokémon RB: Update Slot Data (#5494)

commit d1624679eedb62789e7e7bf86d8803fd53f83f8f
Author: Bryce Wilson <[email protected]>
Date:   Sun Sep 28 12:39:18 2025 -0700

    Pokemon Emerald: Set all abilities to Cacophony if all are blacklisted (#5488)

commit 12998bf6f4049ccb5f720bac4f24de3030e7dd0a
Author: Bryce Wilson <[email protected]>
Date:   Sat Sep 27 07:54:03 2025 -0700

    Pokemon Emerald: Fix missing fanfare address (#5490)

commit 24394561bd37c82b24d47d3f92924d089e32358d
Author: NewSoupVi <[email protected]>
Date:   Thu Sep 25 05:10:23 2025 +0200

    Core: Bump Container Version to 7, and make APWorldContainer use 7 as the compatible_version #5479

commit 4ae87edf371869d43e18b04999d8915852456d5e
Author: Fabian Dill <[email protected]>
Date:   Wed Sep 24 23:25:46 2025 +0200

    Core: apworld manifest launcher component (#5340)

    adds a launcher component that builds all apworlds on top of #4516
    ---------

    Co-authored-by: Doug Hoskisson <[email protected]>
    Co-authored-by: qwint <[email protected]>
    Co-authored-by: Exempt-Medic <[email protected]>

commit 4525bae8796f5374c31c9c7265c92494a4e57abe
Author: Etsuna <[email protected]>
Date:   Wed Sep 24 20:08:14 2025 +0200

    Webhost: add total player location counts to tracker API (#5441)

commit dc270303a941eab3e5b60ed1ec025b4545a6f826
Author: Fabian Dill <[email protected]>
Date:   Wed Sep 24 17:33:44 2025 +0200

    Core: improve formatting on /help command (#5381)

commit a99da85a22ac925cefdf7ef7e5de3ece6d28e671
Author: Fabian Dill <[email protected]>
Date:   Wed Sep 24 02:39:19 2025 +0200

    Core: APWorld manifest (#4516)

    Adds support for a manifest file (archipelago.json) inside an .apworld file. It tells AP the game, minimum core version (optional field), maximum core version (optional field), its own version (used to determine which file to prefer to load only currently)
    The file itself is marked as required starting with core 0.7.0, prior, just a warning is printed, with error trace.

    Co-authored-by: Doug Hoskisson <[email protected]>
    Co-authored-by: qwint <[email protected]>
    Co-authored-by: Exempt-Medic <[email protected]>
    Co-authored-by: NewSoupVi <[email protected]>

commit e256abfdfb7935827c1a77132481ea1273f6b822
Author: CaitSith2 <[email protected]>
Date:   Sun Sep 21 18:07:33 2025 -0700

    Factorio: Allow to reconnect a timed out RCON client connection. (#5421)

commit fb9011da637985f511f15bf0f77824089144b5f3
Author: Fabian Dill <[email protected]>
Date:   Mon Sep 22 00:25:12 2025 +0200

    WebHost: revamp /api/*tracker/ (#5388)

commit 68187ba25fae8fa5ac448d2cc5eae8932e37a961
Author: Fabian Dill <[email protected]>
Date:   Mon Sep 22 00:17:10 2025 +0200

    WebHost: remove team argument from tracker arguments where it's irrelevant (#5272)

commit 6c45c8d606fdf771141807aad553b0953f8f2180
Author: Fabian Dill <[email protected]>
Date:   Sun Sep 21 19:23:29 2025 +0200

    Core: make countdown a "admin" only command (#5463)

commit 9e96cece569c4fa9f0485a499c1d5862f1e10b0b
Author: threeandthreee <[email protected]>
Date:   Sun Sep 21 12:59:40 2025 -0400

    LADX: Fix quickswap #5399

commit 1bd44e1e35bc45af61370323d79997369e49e007
Author: agilbert1412 <[email protected]>
Date:   Sun Sep 21 12:58:15 2025 -0400

    Stardew Valley: Fixed Traveling merchant flaky test (#5434)

    * - Made the traveling cart test not be flaky due to worlds caching

    # Conflicts:
    #	worlds/stardew_valley/rules.py

    * - Made the traveling merchant test less flaky

    # Conflicts:
    #	worlds/stardew_valley/test/rules/TestTravelingMerchant.py

commit 7badc3e745f3b50f1dd6d6d4619a16d373574331
Author: Phaneros <[email protected]>
Date:   Sun Sep 21 09:54:22 2025 -0700

    SC2: Logic bugfixes (#5461)

    * sc2: Fixing always-true rules in locations.py; fixed two over-constrained rules that put vanilla out-of-logic

    * sc2: Minor min2() optimization in rules.py

    * sc2: Fixing a Shatter the Sky logic bug where w/a upgrades were checked too many times and for the wrong units

commit 3af1e92813261639e484406bbd289b2b0ba07000
Author: Scipio Wright <[email protected]>
Date:   Sun Sep 21 12:47:11 2025 -0400

    TUNIC: Update name of a chest in the UT poptracker map integration #5462

commit 73718bbd618651d1f75da8382944173cc6295448
Author: Fabian Dill <[email protected]>
Date:   Fri Sep 19 03:52:31 2025 +0200

    Core: make APContainer seek archipelago.json (#5261)

commit 8f2b4a961f5c956ee5aa58aad01df919371fcb42
Author: Sunny Bat <[email protected]>
Date:   Tue Sep 16 10:26:06 2025 -0700

    Raft: Add Zipline Tool requirement to Engine controls blueprint #5455

commit 9fdeecd9965b188e712f7ef4024a709d9836a79b
Author: JaredWeakStrike <[email protected]>
Date:   Sun Sep 14 20:08:57 2025 -0400

    KH2: Remove top level client script (#5446)

    * initial commit

    * remove kh2client.exe from setup

commit 174d89c81f0a6e7115f78f8ddbf8af33762e062b
Author: Adrian Priestley <[email protected]>
Date:   Sun Sep 14 09:54:53 2025 -0230

    feat(workflow): Implement new Github workflow for building and pushing container images (#5242)

    * fix(workflows): Update Docker workflow tag pattern
    - Change tag pattern from "v*" to "*.*.*" for better version matching
    - Add new semver pattern type for major version

    * squash! fix(workflows): Update Docker workflow tag pattern - Change tag pattern from "v*" to "*.*.*" for better version matching - Add new semver pattern type for major version

    * Update docker.yml

    * Update docker.yml

    * Update docker.yml

    * fix(docker): Correct copy command to use recursive flag for EnemizerCLI
    - Changed 'cp' to 'cp -r' to properly copy EnemizerCLI directory

    * fixup! Update docker.yml

    * fix(docker): Correct copy command to use recursive flag for EnemizerCLI
    - Changed 'cp' to 'cp -r' to properly copy EnemizerCLI directory

    * chore(workflow): Update Docker workflow to support multiple platforms
    - Removed matrix strategy for platform selection
    - Set platforms directly in the Docker Buildx step

    * docs(deployment): Update container deployment documentation
    - Specify minimum versions for Docker and Podman
    - Add requirement for Docker Buildx plugin

    * fix(workflows): Exclude specific paths from Docker build triggers
    - Prevent unnecessary builds for documentation and deployment files

    * feat(ci): Update Docker workflow for multi-architecture builds
    - Added new build job for ARM64 architecture support
    - Created a multi-arch manifest to manage image variants
    - Improved Docker Buildx setup and push steps for both architectures

    * fixup! feat(ci): Update Docker workflow for multi-architecture builds - Added new build job for ARM64 architecture support - Created a multi-arch manifest to manage image variants - Improved Docker Buildx setup and push steps for both architectures

    * fixup! feat(ci): Update Docker workflow for multi-architecture builds - Added new build job for ARM64 architecture support - Created a multi-arch manifest to manage image variants - Improved Docker Buildx setup and push steps for both architectures

    * fixup! feat(ci): Update Docker workflow for multi-architecture builds - Added new build job for ARM64 architecture support - Created a multi-arch manifest to manage image variants - Improved Docker Buildx setup and push steps for both architectures

    * fix(workflow): Cleanup temporary image tags

    * fixup! fix(workflow): Cleanup temporary image tags

    * fixup! fix(workflow): Cleanup temporary image tags

    * fixup! fix(workflow): Cleanup temporary image tags

    * fix(workflow): Apply scoped build cache to eliminate race condition
    between jobs.

    * fixup! fix(workflow): Apply scoped build cache to eliminate race condition between jobs.

    * Remove branch wildcard

    * Test comment

    * Revert wildcard removal

    * Remove `pr` event

    * Revert `pr` event removal

    * fixup! Revert `pr` event removal

    * Update docker.yml

    * Update docker.yml

    * Update docker.yml

    * feat(workflows): Add docker workflow to compute final tags
    - Introduce a step to compute final tags based on GitHub ref type
    - Ensure 'latest' tag is set for version tags

    * chore(workflow): Enable manual dispatch for Docker workflow
    - Add workflow_dispatch event trigger to allow manual runs

    * fix(workflows): Update Docker workflow to handle tag outputs correctly
    - Use readarray to handle tags as an array
    - Prevent duplicate latest tags in the tags list
    - Set multiline output for tags in GitHub Actions

    * Update docker.yml

    Use new `is_not_default_branch` condition

    * Update docker.yml

    Allow "v" prefix for semver git tags qualifying for `latest` image tag

    * Update docker.yml

    Tighten up `tags` push pattern mirroring that of `release` workflow.

    * Merge branch 'ArchipelagoMW:main' into main

    * Update docker.yml

    * Merge branch 'ArchipelagoMW:main' into docker_wf

    * Update docker.yml

    Use new `is_not_default_branch` condition

    * Update docker.yml

    Allow "v" prefix for semver git tags qualifying for `latest` image tag

    * Update docker.yml

    Tighten up `tags` push pattern mirroring that of `release` workflow.

    * ci(docker): refactor multi-arch build to use matrix strategy
    - Consolidate separate amd64 and arm64 jobs into a single build job
    - Introduce matrix for platform, runner, suffix, and cache-scope
    - Generalize tag computation and build steps with matrix variables

    * fixup! ci(docker): refactor multi-arch build to use matrix strategy - Consolidate separate amd64 and arm64 jobs into a single build job - Introduce matrix for platform, runner, suffix, and cache-scope - Generalize tag computation and build steps with matrix variables

commit 71de33d7ddc00780f8af864c96b31d97bf61f788
Author: Duck <[email protected]>
Date:   Sat Sep 13 18:02:03 2025 -0600

    CI: Fix peer review tag on undrafting a PR (#5282)

    * Move ready for review condition out of non-draft check

    * Remove condition on labeler

    * Revert condition

commit 9c00eb91d6eeb822ae565ab5a1dd86882d60e857
Author: Fabian Dill <[email protected]>
Date:   Sun Sep 14 02:01:41 2025 +0200

    WebHost: fix Internal Server Error if parallel access to /room/* happens (#5444)

commit 597583577a3207f6a4ad2afd9165778a010d9070
Author: NewSoupVi <[email protected]>
Date:   Sat Sep 13 16:07:13 2025 +0200

    KH1: Remove top level script & remove script_name from its component (#5443)

commit 4e085894d2b177fdd34eccbcde70df804fc89842
Author: Salzkorn <[email protected]>
Date:   Fri Sep 12 23:48:29 2025 +0200

    SC2: Region access rule speedups (#5426)

commit 76a8b0d582b61e4457af0c54a06700528b8e9065
Author: Yaranorgoth <[email protected]>
Date:   Fri Sep 12 23:32:42 2025 +0200

    CCCharles: Bug fix for cyclic connections of Entrances with the ignored rules by the logic (#5442)

    * Add cccharles world to AP

    > The logic has been tested, the game can be completed
    > The logic is simple and it does not take into account options
    ! The documentations are a work in progress

    * Update documentations

    > Redacted French and English Setup Guides
    > Redacted French and English Game Pages

    * Handling PR#5287 remarks

    > Revert unexpected changes on .run\Archipelago Unittests.run.xml (base Archipelago file)
    > Fixed typo "querty" -> "qwerty" in fr and eng Game Pages
    > Adding "Game page in other languages" section to eng Game Page documentation
    > Improved Steam path in fr and eng Setup Guides

    * Handled PR remarks + fixes

    > Added get_filler_item_name() to remove warnings
    > Fixed irrelevant links for documentations
    > Used the Player Options page instead of the default YAML on GitHub
    > Reworded all locations to make them simple and clear
    > Split some locations that can be linked with an entrance rule
    > Reworked all options
    > Updated regions according to locations
    > Replaced unnecessary rules by rules on entrances

    * Empty Options.py

    Only the base options are handled yet, "work in progress" features removed.

    * Handled PR remark

    > Fixed specific UT name

    * Handled PR remarks

    > UT updated by replacing depreciated features

    * Add start_inventory_from_pool as option

    This start_inventory_from_pool option is like regular start inventory but it takes items from the pool and replaces them with fillers

    Co-authored-by: Scipio Wright <[email protected]>

    * Handled PR remarks

    > Mainly fixed editorial and minor issu…
eternalcode0 pushed a commit to eternalcode0/Archipelago that referenced this pull request Dec 20, 2025
* Add a ruff.toml to the root directory

* spell out C901

* Add target version

* Add some more of the suggested rules

* ignore PLC0415

* TC is bad

* ignore B0011

* ignore N818

* Ignore some more rules

* Add PLC1802 to ignore list

* Update ruff.toml

Co-authored-by: Doug Hoskisson <[email protected]>

* oops

* R to RET and RSC

* oops

* Py311

* Update ruff.toml

---------

Co-authored-by: Doug Hoskisson <[email protected]>
eternalcode0 pushed a commit to eternalcode0/Archipelago that referenced this pull request Dec 21, 2025
* Add a ruff.toml to the root directory

* spell out C901

* Add target version

* Add some more of the suggested rules

* ignore PLC0415

* TC is bad

* ignore B0011

* ignore N818

* Ignore some more rules

* Add PLC1802 to ignore list

* Update ruff.toml

Co-authored-by: Doug Hoskisson <[email protected]>

* oops

* R to RET and RSC

* oops

* Py311

* Update ruff.toml

---------

Co-authored-by: Doug Hoskisson <[email protected]>
BlackSoulKnight added a commit to BlackSoulKnight/Tevi_Archipelago that referenced this pull request Jan 9, 2026
* SC2: fix incorrect preset option (ArchipelagoMW#5551)

* SC2: fix incorrect preset option

* SC2: fix incorrect evil logic preset option

---------

Co-authored-by: Snarky <[email protected]>

* Super Mario Land 2: Logic fixes ArchipelagoMW#5258

Co-authored-by: alchav <[email protected]>

* [FF1] Client fix and improvement (ArchipelagoMW#5390)

* FF1 Client fixes.

* Strip leading/trailing spaces from rom-stored player name.

* FF1R encodes the name as utf-8, as it happens.

* UTF-8 is four bytes per character, so we need 64 bytes for the name, not 16.

* Civ 6: Add era requirements for boosts and update boost prereqs (ArchipelagoMW#5296)

* Resolve ArchipelagoMW#5136

* Resolves ArchipelagoMW#5210

* [FF1] Added Deep Dungeon locations to locations.json so they exist in the datapackage (ArchipelagoMW#5392)

* Added DD locations to locations.json so they exist in the datapackage.

* Update worlds/ff1/data/locations.json

Co-authored-by: Exempt-Medic <[email protected]>

* Update worlds/ff1/data/locations.json

Forgot trailing commas aren't allowed in JSON.

Co-authored-by: qwint <[email protected]>

---------

Co-authored-by: Exempt-Medic <[email protected]>
Co-authored-by: qwint <[email protected]>

* DLC Quest: Enable multi-classification items (ArchipelagoMW#5552)

* implement prog trap item (thanks stardew)

* oops that's wrong

* okay this is right

* Docs: add warning about BepInEx to HK translated setup guides (ArchipelagoMW#5554)

* Update HK pt-br setup to add warning about BepInEx

* Update HK spanish setup guide to add warning about BepInEx

* WebHost: Update publish_parts parameters (ArchipelagoMW#5544)

old name is deprecated and new name allows both writer instance or alias/name.

* Docs: APWorld documentation, make a distinction between APWorld and .apworld (ArchipelagoMW#5509)

* APWorld docs: Make a distinction between APWorld and .apworld

* Update apworld specification.md

* Update apworld specification.md

* Be more anal about the launcher component

* Update apworld specification.md

* Update apworld specification.md

* WebHost: fix gen timeout/exception resource handling (ArchipelagoMW#5540)

* WebHost: reset Generator proc title on error

* WebHost: fix shutting down autogen

This is still not perfect but solves some of the issues.

* WebHost: properly propagate JOB_TIME

* WebHost: handle autogen shutdown

* WebHost: Fix flask-compress to 1.18 for Python 3.11 (to get CI to pass again) (ArchipelagoMW#5573)

From Discord:

Well, flask-compress updated and now our 3.11 CI is failing

Why? They switched to a lib called backports.zstd
And 3.11 pkg_resources can't handle that.

pip finds it. But in our ModuleUpdate.py, we first pkg_resources.require packages, and this fails. I can't reproduce this locally yet, but in CI, it seems like even though backports.zstd is installed, it still fails on it and prompts installing it over and over in every unit test
Now what do we do :KEKW:
Black Sliver suggested pinning flask-compress for 3.11
But I would just like to point out that this means we can't unpin it until we drop 3.11
the real thing is we probably need to move away from pkg_resources? lol 
since it's been deprecated literally since the oldest version we support

* WebHost: Fix generate argparse with --config-override + add autogen unit tests so we can test that (ArchipelagoMW#5541)

* Fix webhost argparse with extra args

* accidentally added line

* WebHost: fix some typing

B64 url conversion is used in test/hosting,
so it felt appropriate to include this here.

* Test: Hosting: also test autogen

* Test: Hosting: simplify stop_* and leave a note about Windows compat

* Test: Hosting: fix formatting error

* Test: Hosting: add limitted Windows support

There are actually some differences with MP on Windows
that make it impossible to run this in CI.

---------

Co-authored-by: black-sliver <[email protected]>

* Yugioh: Fix likely unintended concatenations (ArchipelagoMW#5567)

* Fix likely unintended concatenations

* Yeah that makes sense why I thought there were more here

* AHiT: Fix likely unintended concatenation ArchipelagoMW#5565

* Pokemon RB: Fix likely unintended concatenation ArchipelagoMW#5566

* MM2: fix Proteus reading ArchipelagoMW#5575

* Test: check fields in world source manifest (ArchipelagoMW#5558)

* Test: check game in world manifest

* Update test/general/test_world_manifest.py

Co-authored-by: Duck <[email protected]>

* Test: rework finding expected manifest location

* Test: fix doc comment

* Test: fix wrong custom_worlds path in test_world_manifest

Also simplifies the way we find ./worlds/.

* Test: make test_world_manifest easier to extend

* Test: check world_version in world manifest

according to docs/apworld specification.md

* Test: check no container version in source world manifest

according what was added to docs/apworld specification.md in PR 5509

* Test: better assertion messages in test_world_manifest.py

* Test: fix wording in world source manifest

---------

Co-authored-by: Duck <[email protected]>

* AHIT: Fix death link timestamps being incorrect (ArchipelagoMW#5404)

* LADX: stealing logic option (ArchipelagoMW#3965)

* implement StealingInLogic option

* fix ladxr setting

* adjust docs

* option to disable stealing

* indicate disabled stealing with shopkeeper dialog

* merge upstream/main

* Revert "merge upstream/main"

This reverts commit c91d2d6.

* fix

* stealing in patch

* logic reorder and fix

sword to front for readability, but also can_farm condition was missing

* KH1: Add specified encoding to file output from Client to avoid crashes with non ASCII characters (ArchipelagoMW#5584)

* Fix Slot 2 Level Checks description

* Fix encoding issue

* setup: check if the sign host is on a local network (ArchipelagoMW#5501)

Could have a really bad timeout if it goes through default route and packet is dropped.

* WebHost: add missing docutils requirement ... (ArchipelagoMW#5583)

... and update it to latest.
This is being used in WebHostLib.options directly.
A recent change bumped our required version, so this is actually a fix.

* Core: Add a ruff.toml to the root directory (ArchipelagoMW#5259)

* Add a ruff.toml to the root directory

* spell out C901

* Add target version

* Add some more of the suggested rules

* ignore PLC0415

* TC is bad

* ignore B0011

* ignore N818

* Ignore some more rules

* Add PLC1802 to ignore list

* Update ruff.toml

Co-authored-by: Doug Hoskisson <[email protected]>

* oops

* R to RET and RSC

* oops

* Py311

* Update ruff.toml

---------

Co-authored-by: Doug Hoskisson <[email protected]>

* kvui: Fix audio being completely non-functional on Linux (ArchipelagoMW#5588)

* kvui: Fix audio on Linux

* Update kvui.py

* CI: update appimagetool to 2025-10-19 (ArchipelagoMW#5578)

Beware: this has a bug, but it does not impact our CI.

* WebHost, Multiple Worlds: fix images not showing in guides (ArchipelagoMW#5576)

* Multiple: resize FR RA network commands screenshot

This is now more in line with the text (and the english version).

* Multiple: optimize EN RA network commands screenshot

The URL has changed, so it's a good time to optimize.

* WebHost, Worlds: fix retroarch images not showing

Implements a src/url replacement for relative paths.
Moves the RA screenshots to worlds/generic since they are shared.
Also now uses the FR version in ffmq.
Also fixes the formatting that resultet in the list breaking.
Also moves imports in render_markdown.

Guides now also properly render on Github.

* Factorio: optimize screenshots

The URL has changed, so it's a good time to optimize.

* Factorio: change guide screenshots to use relative URL

* Test: markdown: fix tests on Windows

We also can't use delete=True, delete_on_close=False
because that's not supported in Py3.11.

* Test: markdown: fix typo

I hope that's it now. *sigh*

* Landstalker: fix doc images not showing

Change to relative img urls.

* Landstalker: optimize doc PNGs

The URL has changed, so it's a good time to optimize.

* SC2: added MindHawk to credits (ArchipelagoMW#5549)

* CV64: Fix Explosive DeathLink not working with Increase Shimmy Speed on ArchipelagoMW#5523

* WebHost: Pin Flask-Compress to 1.18 for all versions of Python (ArchipelagoMW#5590)

* WebHost: Pin Flask-Compress to 1.18 for all versions of Python

* oop

* CI: use rehosted appimage runtime and appimagetool (ArchipelagoMW#5595)

This fixes the problem of CI randomly breaking when upstream pushes
updates and allows better reproducibility of builds.

* CVCotM: Fix determinism with Halve DSS Cards Placed (ArchipelagoMW#5601)

* chore(documentation): Update deployment example config (ArchipelagoMW#5476)

- Include flag and notice regarding asset rights in example config

* [Docs] Update docs/network protocol.md/NetworkVersion to include class field (ArchipelagoMW#5377)

* update docs NetworkVersion

* added in non-common-client version clarification

* Update docs/network protocol.md

Co-authored-by: Duck <[email protected]>

---------

Co-authored-by: Duck <[email protected]>

* CCCharles: Fix editorial issues in documentations (ArchipelagoMW#5611)

* Fix editorial issues from Setup Guides

* Fix editorial issues in documentations

* Fix extra typos in documentations

* CI: downgrade pytest to 8.4.2 (ArchipelagoMW#5613)

Also move ci requirements to separate file for easier handling.

* Core: Allows Meta.yaml to add triggers to individual yaml's categories. (ArchipelagoMW#3556)

* Initial commit

* Shifted added code to the appropriate indentation.
Re-wrote for statement in proper python style.

* Update Generate.py

Co-authored-by: qwint <[email protected]>

* change to an elif to avoid unnecessary nesting

---------

Co-authored-by: qwint <[email protected]>
Co-authored-by: Benny D <[email protected]>

* Core: add export_datapackage tool (ArchipelagoMW#5609)

* Core: Bump version from 0.6.4 to 0.6.5 (ArchipelagoMW#5607)

* Game Docs: Fix main setup guide links (ArchipelagoMW#5603)

* SC2 Tracker: Fix bundled Protoss W/A upgrade display (ArchipelagoMW#5612)

* Launcher: add skip_open_folder arg to Generate Template Options (ArchipelagoMW#5302)

* fix(workflows): Update branch filter in Docker workflow (ArchipelagoMW#5616)

* fix(workflows): Update branch filter in Docker workflow
- Change branch filter from wildcard to 'main'
- Ensures that the workflow only triggers on the main branch

* Jak 1: Remove PAL-only instructions, no longer needed. (ArchipelagoMW#5598)

* SC2: Remove dependency on s2clientprotocol and update protobuf version (ArchipelagoMW#5474)

* SoE: add apworld manifest (ArchipelagoMW#5557)

* SoE: add APWorld manifest

* SoE: small typing fixes

* SC2: make worlds._sc2common.bot.proto a regular package (ArchipelagoMW#5626)

This is currently required for import reasons
and has a test that fails without it.

* Choo Choo Charles: Raise InvalidItemError instead of bare Exception (ArchipelagoMW#5429)

* Core: don't use union type just to reuse a name (ArchipelagoMW#5246)

This is the "followup PR" to address these comments:
ArchipelagoMW#5071 (comment)

It's better to have a different name for different representations of the data, so that someone reading the code doesn't need to wonder whether it has gone through the transformation or not.

* CI: update pytest to 9.0.1 (ArchipelagoMW#5637)

* Docs: Add troubleshooting section to kh1_en.md, typo fix in kh1/Options.py (ArchipelagoMW#5615)

* kh1 docs update

* small grammar

* suggested fix

client is die (sadge)

* h2/h3 -> ##/###

* oops that's my bad

* Core: Deprecate Utils.get_options by July 31st, 2025 (ArchipelagoMW#4811)

* 0.4.4 lol

* Pycharm pls

* Violet pls

* Remove OptionsType

---------

Co-authored-by: black-sliver <[email protected]>

* Core: Fix ArchipelagoMW#5605 - Trigger values being shared by weights.yaml slots (ArchipelagoMW#5636)

The "+" and "-" trigger operations modify sets/lists in-place, but
triggers could set a value to the same set/list for multiple slots using
weights.yaml.

This fix deep-copies all values set from new (trigger) weights to ensure
that the values do not get shared across multiple slots.

* SC2: Allowing unexcluded_items to affect items excluded by vanilla_items_only (ArchipelagoMW#5520)

* SC2: Move race_swap pick_one functionality to mission picking (ArchipelagoMW#5538)

* LADX: create manifest (ArchipelagoMW#5563)

* SC2: Add Manifest (ArchipelagoMW#5559)

* SC2: Fixing a gap in the ascendant upgrades in the tracker (ArchipelagoMW#5570)

* Pokémon R/B: Specify encounter types for Dexsanity hint data (ArchipelagoMW#5574)

* Wargroove 1: added archipelago.json (ArchipelagoMW#5591)

* SC2: Adjusting and slightly simplifying mission difficulty pool adjustment configuration (ArchipelagoMW#5587)

* CV64: Fix not having Clocktower Key3 when placed in a start_inventory (ArchipelagoMW#5596)

* SC2: Fix custom mission order if used in weights.yaml (ArchipelagoMW#5604)

* CV64: Fix not having Clocktower Key3 when placed in a start_inventory (ArchipelagoMW#5592)

* SC2: Fix the goal mission tooltip depending on goal missions' status (ArchipelagoMW#5577)

* Factorio: Add no-enemies mode to worldgen schema (ArchipelagoMW#5542)

* Core: add a local yaml creator GUI (ArchipelagoMW#4900)

Adds a GUI for the creation of simple yamls (no weighting) locally.

* Core: add random range and additional random descriptions to template yaml (ArchipelagoMW#5586)

* Muse Dash: Update Song list to Medium5 Echoes (ArchipelagoMW#5597)

* Landstalker: Add manifest file (ArchipelagoMW#5629)

* The Witness: Add archipelago.json (ArchipelagoMW#5481)

* Add archipelago.json to witness

* Update archipelago.json

* Core: Only error in playthrough generation if game is not beatable (ArchipelagoMW#5430)

* Core: Only error in playthrough generation if game is not beatable

The current flow of accessibility works like this:

```
if fulfills_accessibility fails:
    if multiworld can be beaten:
        log a warning
    else:
        raise Exception

if playthrough is enabled:
    if any progression items are not reachable:
        raise Exception
```

This means that if you do a generation where the game is beatable but some full players' items are not reachable, it doesn't crash on accessibility check, but then crashes on playthrough. This means that **whether it crashes depends on whether you have playthrough enabled or not**.

Imo, erroring on something accessibility-related is outside of the scope of create_playthrough. Create_playthrough only needs to care about whether it can fulfill its own goal - Building a minimal playthrough to everyone's victory.
The actual accessibility check should take care of the accessibility.

* Reword

* Simplify sentence

* The Witness: Fix CreateHints spoiling vague hints (ArchipelagoMW#5359)

* Encode non-local vague hints as negative player number

* comments

* also bump req client version

* WebHost: Validation for webworld themes (ArchipelagoMW#5083)

* Celeste (Open World): fix tutorial link on game page (ArchipelagoMW#5627)

* Doc: Update Mac instructions to instruct the user to make a frozen bundle (ArchipelagoMW#5614)

* LttP: logic fixes and missing bombs (ArchipelagoMW#5645)

3 logic issues:
* ArchipelagoMW#3046 made it so that prizes were included in LttP's pre_fill items. It accounted for it in regular pre_fill, but missed stage_pre_fill.
* LttP defines a maximum number of heart pieces and heart containers logically within each difficulty. Item condensing did not account for this, and could reduce the number of heart pieces below the required amount logically. Notably, this makes some combination of settings much harder to generate, so another solution may end up ideal.
* Current logic rules do not properly account for the case of standard start and enemizer, requiring a large amount of items logically within a short number of locations. However, the behavior of Enemizer in this situation is well-defined, as the guards during the standard starting sequence are not changed. Thus the required items can be safely minimized.

* Factorio: Add connection change filtering functionality (ArchipelagoMW#4997)

* Yacht Dice: Add archipelago.json manifest ArchipelagoMW#5658

* Core: Better error message for invalid range values (ArchipelagoMW#4038)

* TWW: Fix client sending duplicate magic meter (ArchipelagoMW#5664)

* SC2: Fix missing brackets in Zerg The Host logic (ArchipelagoMW#5657)

* SC2: Fix missing brackets in Zerg The Host logic

* Allow usage of SoA any race LotV and add additional brackets

* SC2: Migrate external resources from user repos to sc2 organization (ArchipelagoMW#5653)

* LADX: switch to asyncio.get_running_loop() (ArchipelagoMW#5666)

* APQuest: Implement New Game (ArchipelagoMW#5393)

* APQuest

* Add confetti cannon

* ID change on enemy drop

* nevermind

* Write the apworld

* Actually implement hard mode

* split everything into multiple files

* Push out webworld into a file

* Comment

* Enemy health graphics

* more ruff rules

* graphics :)

* heal player when receiving health upgrade

* the dumbest client of all time

* Fix typo

* You can kinda play it now! Now we just need to render the game... :)))

* fix kvui imports again

* It's playable. Kind of

* oops

* Sounds and stuff

* exceptions for audio

* player sprite stuff

* Not attack without sword

* Make sure it plays correctly

* Collect behavior

* ruff

* don't need to clear checked_locations, but do need to still clear finished_game

* Connect calls disconnect, so this is not necessary

* more seemless reconnection

* Ok now I think it's correct

* Bgm

* Bgm

* minor adjustment

* More refactoring of graphics and sound

* add graphics

* Item column

* Fix enemies not regaining their health

* oops

* oops

* oops

* 6 health final boss on hard mode

* boss_6.png

* Display APQuest items correctly

* auto switch tabs

* some mypy stuff

* Intro song

* Confetti Cannon

* a bit more confetti work

* launcher component

* Graphics change

* graphics and cleanup

* fix apworld

* comment out horse and cat for now

* add docs

* copypasta

* ruff made my comment look unhinged

* Move that comment

* Fix typing and don't import kvui in nogui

* lmao that already exists I don't need to do it myself

* Must've just copied this from somewhere

* order change

* Add unit tests

* Notes about the client

* oops

* another intro song case

* Write WebWorld and setup guides

* Yes description provided

* thing

* how to play

* Music and Volume

* Add cat and horse player sprites

* updates

* Add hammer and breakable wall

* TODO

* replace wav with ogg

* Codeowners and readme

* finish unit tests

* lint

* Todid

* Update worlds/apquest/client/ap_quest_client.py

Co-authored-by: Duck <[email protected]>

* Update worlds/apquest/client/custom_views.py

Co-authored-by: Duck <[email protected]>

* Filler pattern

* __future__ annotations

* twebhost

* Allow wasd and arrow keys

* correct wording

* oops

* just say the website

* append instead of +=

* qwint is onto my favoritism

* kitty alias

* Add a comment about preplaced items for assertAccessDependency

* Use classvar_matrix instead of MultiworldTestBase

* actually remove multiworld stuff from those tests

* missed one more

* Refactor a bit more

* Fix getting of the user path

* Actually explain components

* Meh

* Be a bit clearer about what's what

* oops

* More comments in the regions.py file

* Nevermind

* clarify regions further

* I use too many brackets

* Ok I'm done fr

* simplify wording

* missing .

* Add precollected example

* add note about precollected advancements

* missing s

* APQuest sound rework

* Volume slider

* I forgot I made this

* a

* fix volume of jingles

* Add math trap to game (only works in play_in_console mode so far)

* Math trap in apworld and client side

* Fix background during math trap

* fix leading 0

* Sound and further ui improvements for Math Trap

* fix music bug

* rename apquest subfolder to game

* Move comment to where it belongs

* Clear up language around components (hopefully)

* Clear up what CommonClient is

* Reword some more

* Mention Archipelago (the program) explicitly

* Update worlds/apquest/docs/en_APQuest.md

Co-authored-by: Ixrec <[email protected]>

* Explain a bit more why you would use classvar matrix

* reword the assert raises stuff

* the volume slider thing is no longer true

* german game page

* Be more clear about why we're overriding Item and Location

* default item classification

* logically considered -> relevant to logic ()

* Update worlds/apquest/items.py

Co-authored-by: Ixrec <[email protected]>

* a word on the ambiguity of the word 'filler'

* more rewording

* amount -> number

* stress the necessity of appending to the multiworld itempool

* Update worlds/apquest/locations.py

Co-authored-by: Ixrec <[email protected]>

* get_location_names_with_ids

* slight rewording of the new helper method

* add some words about creating known location+item pairs

* Add some more words to worlds/apqeust/options.py

* more words in options.py

* 120 chars (thanks Ixrec >:((( LOL)

* Less confusing wording about rules, hopefully?

* victory -> completion

* remove the immediate creation of the hammer rule on the option region entrance

* access rule performance

* Make all imports module-level in world.py

* formatting

* get rid of noqa RUF012 (and also disable the rule in my local ruff.toml

* move comment for docstring closer to docstring in another place

* advancement????

* Missing function type annotations

* pass mypy again (I don't love this one but all the alternatives are equally bad)

* subclass instead of override

* I forgor to remove these

* Get rid of classvar_matrix and instead talk about some other stuff

* protect people a bit from the assertAccessDependency nonsense

* reword a bit more

* word

* More accessdependency text

* More accessdependency text

* More accessdependency text

* More accessdependency text

* oops

* this is supposed to be absolute

* Add some links to docs

* that's called game now

* Add an archipelago.json and explain what it means

* new line who dis

* reorganize a bit

* ignore instead of skip

* Update archipelago.json

* She new on my line till I

* Update archipelago.json

* add controls tab

* new ruff rule? idk

* WHOOPS

* Pack graphics into fewer files

* annoying ruff format thing

* Cleanup + mypy

* relative import

* Update worlds/apquest/client/custom_views.py

Co-authored-by: Fabian Dill <[email protected]>

* Update generate_math_problem.py

* Update worlds/apquest/game/player.py

Co-authored-by: Fabian Dill <[email protected]>

---------

Co-authored-by: Duck <[email protected]>
Co-authored-by: Ixrec <[email protected]>
Co-authored-by: Fabian Dill <[email protected]>

* Core: Add a bunch of validation to AutoPatchRegister (ArchipelagoMW#5431)

* Add a bunch of validation to AutoPatchRegister

* slightly change it

* lmao

* Tests: Move world dependencies in tests to APQuest ArchipelagoMW#5668

* LADX: Give better feedback during patching (ArchipelagoMW#5401)

* SC2: Fix bugs and issues around excluded/unexcluded (ArchipelagoMW#5644)

* Core: updates of requirements (ArchipelagoMW#5672)

* Core: Fix typo in docstring for hint_points in commonclient (ArchipelagoMW#5673)

* APQuest: Fix import of Protocol from bokeh instead of typing (ArchipelagoMW#5674)

* APQuest: Fix import of Protocol from bokeh instead of typing

* bump world version

* Docs: Improve the documentation for priority locations to mention de-prioritized (ArchipelagoMW#5631)

* Update the descriptions for priority and exclude locations to be more clear.

* Revision on priority

* Moved my change over to the documentation instead of the generated yaml comment.

* update per vi feedback

* Trying a 2 sentence approach

* more details!

* Update options api.md

* Update options api.md

* PyCharm: fix the apworld builder run config (ArchipelagoMW#5678)

* fix the apworld builder pycharm runner

* Update Build APWorld.run.xml

---------

Co-authored-by: NewSoupVi <[email protected]>

* Tests: Move hosting test to APQuest ArchipelagoMW#5671

* ALttP/Factorio: Add spaces in concatenated strings (ArchipelagoMW#5564)

* Add them

* Revert "Add them"

This reverts commit 82be861.

* Re-add ALttP/Factorio

* SC2: logic fixes minor bugs (ArchipelagoMW#5660)

* Pulsars no longer count as basic anti-air for protoss.
  * This is in response to player feedback that they were just too weak DPS-wise
* Haven's Fall (P) logic loosened slightly.
  * Void rays are now a one-unit solution to the rule
  * Scouts are now considered a one-unit solution to the rule
  * Two-unit solutions are now considered standard rather than advanced
  * Caladrius is now listed as an anti-muta unit for the two-unit solutions
  * This was discussed in the #SC2-dev channel.
    * Snarky did some testing and found that void rays were barely any worse than destroyers at handling mutas, and destroyers are already listed as a one-unit solution.
    * Snarky also found that scouts could mostly solo the mission at low skill level
    * Note that this rule only applies to the "beating the infestations" part of the mission; there are additional requirements for beating it, including a competent comp.
* The Host (T) now also can use SoA abilities if SoA presence is set to `any_race_lotv`, not just `everywhere`

* LADX: catch exception after closing magpie ArchipelagoMW#5687

* TLOZ: Add space in concatenated string ArchipelagoMW#5690

* CV64/CVCotM: Add spaces in concatenated strings (ArchipelagoMW#5691)

* Possible space removal

* Add spaces

* Missed one

* Revert removals, use newline

* Jak and Daxter: Add space in concatenated string ArchipelagoMW#5692

* KH1: Add space in concatenated string ArchipelagoMW#5693

* MLSS: Add space in concatenated string ArchipelagoMW#5694

* Wargroove: Add space in concatenated string ArchipelagoMW#5696

* Core: Add spaces in concatenated strings ArchipelagoMW#5697

* Civ6: Fix issue with names including civ-breaking characters (ArchipelagoMW#5204)

* DS3: Update/Fix Excluded Locations Logging (ArchipelagoMW#5220)

* DS3: Fix Excluded Locations in Spoiler Log

* Update __init__.py

* update wording

* Comment out failing code

* CVCotM: Add a client safeguard in case the player doesn't have Dash Boots ArchipelagoMW#5500

* Jak and Daxter: Second attempt at fixing trade tests. ArchipelagoMW#5599

* ALTTP: Fix setting `Beat Agahnim 1` event twice (ArchipelagoMW#5617)

alttp was setting the `Beat Agahnim 1` event onto the `Agahnim 1` location twice.

I was debugging a multiworld generation issue with various custom worlds, where, for debugging purposes, I changed `multiworld.push_item` to make it crash like `location.place_locked_item` when the location was already filled, which also identified this minor issue in alttp.

* TUNIC: Fix fuse rule in lower zig ArchipelagoMW#5621

* shapez: Fix logic bug with vanilla shapes and floating layers ArchipelagoMW#5623

* [FFMQ] Bugfix: Fix missing logic rule for Frozen Fields > Aquaria access

* sc2: Item group fixes and new item groups (ArchipelagoMW#5679)

* sc2: Fixing missing buildings in Terran buildings group; adding sc1 and melee unit groups

* sc2: Removing out-of-place comment

* SC2: Update Infested Banshee description to be more clear when the Burrow is unlocked ArchipelagoMW#5685

* Timespinner: Exclude Removed Location from Web Tracker (ArchipelagoMW#5701)

* Docs: fix name of "Build APWorlds" component (ArchipelagoMW#5703)

* SNIClient: new `SnesReader` interface (ArchipelagoMW#5155)

* SNIClient: new SnesReader interface

* fix Python 3.8 compatibility
`bisect_right`

* move to worlds
because we don't have good separation importable modules and entry points

* `read` gives object that contains data

* remove python 3.10 implementation and update typing

* remove obsolete comment

* freeze _MemRead and assert type of get parameter

* some optimization in `SnesData.get`

* pass context to `read` so that we can have a static instance of `SnesReader`

* add docstring to `SnesReader`

* remove unused import

* break big reads into chunks

* some minor improvements

- `dataclass` instead of `NamedTuple` for `Read`
- comprehension in `SnesData.__init__`
- `slots` for dataclasses

* update chunk size to 2048

* OptionCreator: pre-RC1 fixes (ArchipelagoMW#5680)

* fix str default on text choice

* fix range with default random

* forgot module update

* handle namedrange default special

* handle option group of options we should not render

* Update OptionsCreator.py

* Update OptionsCreator.py

* grammar

* weights: Fixing negatives and zeroes disappearing from option dicts updated by triggers (ArchipelagoMW#5677)

* CI: update appimage runtime to fix problems with sleep (ArchipelagoMW#5706)

also updates appimagetool.
Old tool should be compatible, but there are 2 bug fixes in it.

* WebHost/Game Guides: Change links to stay on current instance (ArchipelagoMW#5699)

* Remove absolute links to archipelago.gg

* Fix other link issues

* Docs: update apsudoku docs / add links to web build (ArchipelagoMW#5720)

* WebHost: add played game to static tracker (ArchipelagoMW#5731)

* sc2: Fixing typos in item descriptions (ArchipelagoMW#5739)

* Launcher: Add workaround for kivy bug for linux touchpad devices (ArchipelagoMW#5737)

* add code to fix touchpad on linux, courtesy of Snu of the kivy community

* Launcher: Update workaround to follow styleguide

* Docs: Add 'silasary' to Mac tutorial contributors (ArchipelagoMW#5745)

* SC2: Fix Kerrigan logic for active spells (ArchipelagoMW#5746)

* Launcher: fix shortcuts on the AppImage (ArchipelagoMW#5726)

* fix appimage executable reference

* adjust working dir

* use argv0 instead of appimage directly

* set noexe on frozen

* Tests: test that every option in a preset is visible in either simple or complex UI (ArchipelagoMW#5750)

* Core: Bump version from 0.6.5 to 0.6.6 (ArchipelagoMW#5753)

* WebHost: increase form upload limit (ArchipelagoMW#5756)

* OptionsCreator:  Respect World.hidden flag (ArchipelagoMW#5754)

* APQuest: Fix ValueError on typing numbers/backspace ArchipelagoMW#5757

* TLOZ: Add manifest file (ArchipelagoMW#5755)

* Added manifest file.

* Update archipelago.json

---------

Co-authored-by: NewSoupVi <[email protected]>

* SC2: New maintainership (ArchipelagoMW#5752)

I (Ziktofel) stepped down but will remain as a mentor

* Factorio: Craftsanity (ArchipelagoMW#5529)

* TUNIC: Make UT care about hex goal amount ArchipelagoMW#5762

* TUNIC: Update world version to 4.2.7 ArchipelagoMW#5761

* TUNIC: Update wording on Mask and Lantern option descriptions ArchipelagoMW#5760

* Satisfactory: Add New Game (ArchipelagoMW#5190)

* Added Satisfactory to latest master

* Fixed hard drive from containing the mam + incremented default value for harddrive progression

* Apply cherry pick of 3076259

* Apply cherry pick of 6114a55

* Clarify Point goal behavior (Jarno458/SatisfactoryArchipelagoMod#98)

* Update Setup guide and info page

* Add links to Gifting and Energy Link compatible games. Add info on Hard Drive behavior

* Fix typos

* Update hard drive behavior description

* Hopefully fixed the mam from getting placed behind harddrives

* Add 1 "Bundle: Solid Biofuel" to default starting items (for later chainsaw usage or early power gen)

* Add info/warning about save setup failure bug

* Add notes about dedicated server setup

* Fixes: `TypeError: 'set' object is not subscriptable`

random.choice does not work over set objects, cast to a list to allow 'trap_selection_override'

* progrees i think

* Fixed some bugs

* Progress commmit incase my pc crashes

* progress i think as test passed

* I guess test pass, game still unbeatable tho

* its generating

* Some refactorings

* Fixed generation with different elevator tiers

* Remove debug statement

* Fix this link.

* Implemented abstract base classes + some fixes

* Implemented many many new options

* Yay more stuff

* Fixed renaming of filters

* Added 1.1 stuffs

* Added options groups and presets

* Fixes after variable renmame

* Added recipy groups for easyer hinting

* Implemented random Tier 0

* Updated slot_data

* Latest update for 1.1

* Applied cheaper building costs of assembler and foundry

* Implemented exploration cost in slot_data

* Fixed exposing option type

* Add goal time estimates

* Trap info

* Added support for Universal Tracker
Put more things in the never exclude pool for a more familiar gameplay

* Added iron ore to build hub

* Added Dark Matter Crystals

* Added Single Dark Matter Crystals

* Fixed typo in options preset

* Update setup directions and info

* Options formatting fixes, lower minimum ExplorationCollectableCount, add new Explorer starting inventory items preset

* Fixed incorrect description on the options

* Reduce Portable Miner and Reinforced Iron Plate quantities in "Skip Tutorial Inspired" starting preset

* Fixed options pickling error

* Reworked logic to no longer include Single: items as filler
Reworked logic for more performance
Reworked logic to always put useful equipment in pool

* Fixed Itemlinks
Removed space elevator parts from fillers
Removed more AWESOME shop purchaseables from minimal item pool
Added all equipment to minimal item pool
Removed non fissile and fertile uranium from minimal item pool
Removed portal from minimal item pool
Removed Ionized fuel from minimal item pool
Removed recipes for Hoverpack and Turbo Rifle Ammo from minimal item pool
Lowered the chance for rolling steel on randomized starter recipes

* Fixed hub milestone item leaking to into wrong milestones

* Fixed unlock cost of geothermal generator

* Fixed itemlinks again

* Add troubleshooting note about hoverpacks

* Add starting inventory bundle delivery info

* Added hint generation at generation time
Harddrive locations now go from 1-100 rather then 0-99

* Update __init__.py

Fixed mistake

* Cleaned docs to be better suited to get verified

* Update CODEOWNERS

Added Satisfactory

* Update README.md

Added Satisfactory

* Restructure and expand setup page to instruct both players and hosts

* Add terms entry for Archipelago mod

* Fixed generation of traps

* Added Robb as code owner

* Restore tests to original state

* Apply suggestions from code review

Co-authored-by: Copilot <[email protected]>

* Fix additional typos from code review

* Implemented fix for itterating enum flags on python 3.10

* Update en_Satisfactory.md

* Update setup_en.md

* Apply suggestions from code review

Co-authored-by: Scipio Wright <[email protected]>

* more world > multiworld

* Clarify universal tracker behavior

* Fix typos

* Info on smart hinting system

* Move list of additional mods to a page on the mod GitHub

* Restore revamped setup guide that other commits  overwrote
Originally from be26511, d8bd1aa

* Removed bundle of ficsit coupons from the from the item pool
added estimated completion times to space elevator option description

* Apply suggestions from code review

Co-authored-by: Scipio Wright <[email protected]>

* Wording

* Fix typo

* Update with changes from ToBeVerified branch

* Update note about gameplay options

* Update note about gameplay options

* Improved universal tracker handling

* Improved universal tracker + modernized code a bit

* Fixed bugs that where re-introduced

* Added Recipe: Excited Photonic Matter

* Removed python 3.9 workaround

* Fixed

* Apply suggestions from code review

Co-authored-by: Scipio Wright <[email protected]>

* Streamlined handle craftable logic by using itterable rather then tuple
Removed dict.keys as the dict itzelf already enumerates over keys

* Updated option description

* Fixed typing

* More info on goal completion conditions

* More info on goal completion conditions (093fe38)

* Apply suggestions from code review

Co-authored-by: Silvris <[email protected]>

* Implemented review results

* PEP8 stuff

* More PEP8

* Rename ElevatorTier->ElevatorPhase and related for clarity and consistency.
Untested

* speedups part1

* speedsups on part rules

* Fix formatting

* fix `Elevator Tier #` string literals missed in rename

* Remove unused/duplicate imports + organize imports, `== None` to `is None`

* Fixed after merge

* Updated values + removed TODO

* PEPed up the code

* Small refactorings

* Updated name slot data to phase

* Fix hint creation

* Clarify wording of elevator goal

* Review result

* Fixed minor typo in option

* Update option time estimates

---------

Co-authored-by: Rob B <[email protected]>
Co-authored-by: ProverbialPennance <[email protected]>
Co-authored-by: Joe Amenta <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Scipio Wright <[email protected]>
Co-authored-by: Silvris <[email protected]>
Co-authored-by: NewSoupVi <[email protected]>

* EarthBound: Implement New Game (ArchipelagoMW#5159)

* Add the world

* doc update

* docs

* Fix Blast/Missile not clearing Reflect

* Update worlds/earthbound/__init__.py

Co-authored-by: Duck <[email protected]>

* Update worlds/earthbound/__init__.py

remove unused import

Co-authored-by: Duck <[email protected]>

* Update worlds/earthbound/__init__.py

Co-authored-by: Duck <[email protected]>

* Update worlds/earthbound/modules/dungeon_er.py

make bool optional

Co-authored-by: Duck <[email protected]>

* Update worlds/earthbound/modules/boss_shuffle.py

typing update

Co-authored-by: Duck <[email protected]>

* Update worlds/earthbound/modules/boss_shuffle.py

Co-authored-by: Duck <[email protected]>

* Filter events out of item name to id

* we call it a glorp

* Update worlds/earthbound/Regions.py

Co-authored-by: Duck <[email protected]>

* Update worlds/earthbound/__init__.py

Co-authored-by: Duck <[email protected]>

* Update worlds/earthbound/Items.py

Co-authored-by: Duck <[email protected]>

* Update worlds/earthbound/Regions.py

Co-authored-by: Duck <[email protected]>

* Fix missing optional import

* hint stuff

* -Fix Apple Kid text being wrong
-Fix Slimy Pile text being wrong

* -Fix some sprite corruption if PSI was used when an enemy loaded another enemy
-Fixed a visible artifact tile during some cutscenes

* Update ver

* Update docs

* Fix some money scripting issues

* Add argument to PSI fakeout attack

* Updated monkey caves shop description

* Remove closing markdown from doc

* Add new flavors

* Make flavors actually work

* Update platforms

* Fix common gear getting duplicated

* Split region initialization

* Condense checks for start inventory + some other junk

* Fix some item groups - change receiver phone to warp pad

* wow that one was really bad :glorp:

* blah

* Fix cutoff option text

* switch start inventory concatenation to itertools

* Fix sky runner scripting bug - added some new comm suggestions

* Fix crash when generating with spoiler_only

* Fix happy-happy teleport not unlocking after beating carpainter

* Hint man hints can now use CreateHint packets to create hints in other games

* Adjust some filler rarity

* Update world to use CreateHints and deprecate old method

* Fix epilogue skip being offset

* Rearrange a couple regions

* Fix tendapants getting deleted in battle

* update doc

* i got scared and forgot i had multiple none checks and am worried about this triggering but tested and it works

* Fix mostly typing errors from silvris

* More type checks

* More typing

* Typema

* Type

* Fix enemy levels overwriting music

* Fix gihugic blunder

* Fix Lumine Hall enabling OSS

* del world

* Rel 4.2.7

* Remove some debug logs

* Fix vanilla bug with weird ambush detection

* Fix Starman Junior having an unscaled Freeze

* Change shop scaling

* Fix shops using the wrong thankful script

* Update some bosses in boss shuffle

* Loc group adjustment

* Update some boss shuffle stuff | Fix Enemizer attacks getting overwritten by Shuffle data | Fix flunkies not updating and still being used with enemizer

* Get rid of some debug stuff

* Get boss shuffle running, dont merge

* Fix json and get boss shuffle no plando back up

* Fix Magicant Boost not initializing to Ness if party count = 4

* Fix belch shop using wrong logic

* Don't re-send goal status

* EBitem

* remove :

* idk if this is whatvi wanted

* All client messagesnow only send when relevant instead of constantly

* Patch up the rest of boss plando

* Fix Giygas being not excluded from enemizer

* Fix epilogue again

* adjust the sphere scaling name

* add the things

* Fix Ness being placed onto monotoli when monotoli was in sea of eden

* Fix prefill properly

* Fix boss shuffle on vanilla slots.

* rename this, apparently

* Update archipelago.json

---------

Co-authored-by: Duck <[email protected]>
Co-authored-by: NewSoupVi <[email protected]>

* Yugioh: Add space in concatenated string (ArchipelagoMW#5695)

* Add spaces

* Revert wrong one

* Add right one

* Core: Add datapackage exports to gitignore (ArchipelagoMW#5719)

* Gitignore and description

* Update description

* Celeste Open World: speedup module load (ArchipelagoMW#5448)

* speedup world load

* those 3 weren't in-fact needed

* MultiServer: Safe DataStorage .pop (ArchipelagoMW#5060)

* Make datastorage .pop not throw on missing key or index

* Reworked to use logic rather than exception catching

* Satisfactory/Timespinner: Added Manifesto (ArchipelagoMW#5764)

* Added Manifesto

* Update archipelago.json

* Update archipelago.json

* Update archipelago.json

---------

Co-authored-by: Jarno <[email protected]>
Co-authored-by: NewSoupVi <[email protected]>

* Satisfactory: Fix nondeterministic creation of trap filler items (ArchipelagoMW#5766)

The `trap_selection_override` option is an `OptionSet` subclass, so its `.value` is a `set`.

Sets have nondeterministic iteration order (the iteration order depends on the hashes of the objects within the set, which can change depending on the random hashseed of the Python process).

This `.enabled_traps` is used in `Items.get_filler_item_name()` with `random.choice(self.enabled_traps)`, which is called as part of creating the item pool in `Items.build_item_pool()` (for clarity, this `random` is the world's `Random` instance passed as an argument, so no problems there). So, with `self.enabled_traps` being in a nondeterministic order, the picked trap to add to the item pool through `random.choice(self.enabled_traps)` would be nondeterministic.

Sorting the `trap_selection_override.value` before converting to a `tuple` ensures that the names in `.enabled_traps` are always in a deterministic order.

This issue was identified by merging the main branch into the PR branch for ArchipelagoMW#4410 and seeing Satisfactory fail the tests for hash-determinism. With this fix applied, the tests in that PR pass.

* Yoshi's Island - Fix some small logic issues that were reported, add json file (ArchipelagoMW#5742)

* Fix Piece of Luigi not goaling until reset

* Update .gitignore

* fix logic thing that one guy said

* fix platform being missing from chomp rock zone rules

* add json file

* added the wrong one

* remove extraneous lnk

* Update archipelago.json

---------

Co-authored-by: NewSoupVi <[email protected]>

* KH2: Fix placing single items onto multiple locations in pre_fill (ArchipelagoMW#5619)

`goofy_pre_fill` and `donald_pre_fill` would pick a random `Item` from a
`list[Item]` and then use `list.remove()` to remove the picked `Item`,
but the lists (at least `donald_weapon_abilities`) could contain
multiple items with the same name, so `list.remove()` could remove a
different `Item` to the picked `Item`, allowing an `Item` in the list to
be picked and placed more than once.

This happens because `Item.__eq__` only compares the item's `.name` and
`.player`, and `list.remove()` compares by equality, meaning it can
remove a different, but equal, instance from the list.

This results in `old_location.item` not being cleared, so
`old_location.item` and `new_location.item` would refer to the same
item.

* Core: Process all player files before reporting errors (ArchipelagoMW#4039)

* Process all player files before reporting errors

Full tracebacks will still be in the console and in the logs, but this creates a relatively compact summary at the bottom.

* Include full typename in output

* Update module access and address style comments

* Annotate variables

* multi-errors: Revert to while loop

* Core: Handle each roll in its own try-catch

* multi-errors: Updated style and comments

* Undo accidental index change

* multi-errors: fix last remaining ref to erargs

* Docs: explicitly document why 2^53-1 is the max size, not ^31 or ^63 (ArchipelagoMW#5717)

* explicitly document why 2^53-1 is the max size, not ^31 or ^63

* explicitly recommend 32-bit ids

* make description correct by explicitly mentioning and linking to a description of 'safe'

* Paint: Add manifest (ArchipelagoMW#5778)

* Paint: Implement New Game

* Add docstring

* Remove unnecessary self.multiworld references

* Implement start_inventory_from_pool

* Convert logic to use LogicMixin

* Add location_exists_with_options function to deduplicate code

* Simplify starting tool creation

* Add Paint to supported games list

* Increment version to 0.4.1

* Update docs to include color selection features

* Fix world attribute definitions

* Fix linting errors

* De-duplicate lists of traps

* Move LogicMixin to __init__.py

* 0.5.0 features - adjustable canvas size increment, updated similarity metric

* Fix OptionError formatting

* Create OptionError when generating single-player game with error-prone settings

* Increment version to 0.5.1

* Update CODEOWNERS

* Update documentation for 0.5.2 client changes

* Simplify region creation

* Add comments describing logic

* Remove unnecessary f-strings

* Remove unused import

* Refactor rules to location class

* Remove unnecessary self.multiworld references

* Update logic to correctly match client-side item caps

* Paint: Add manifest

---------

Co-authored-by: Fabian Dill <[email protected]>

* APQuest: Fix import shadowing issue (ArchipelagoMW#5769)

* Fix import shadowing issue

* another comment

* Core: allow abstract world classes (ArchipelagoMW#5468)

* Docs: Make image path in contributing absolute (ArchipelagoMW#5790)

* Core: Make .apworlds importable using importlib (without force-importing them first) (ArchipelagoMW#5734)

* Make apworlds importable in general

* move it to a probably more appropriate place?

* oops

* PyCharm: Fix name of apworld builder run config (ArchipelagoMW#5824)

* rename the apworld builder run config

* Update Build APWorlds.run.xml

---------

Co-authored-by: NewSoupVi <[email protected]>

---------

Co-authored-by: Snarky <[email protected]>
Co-authored-by: Snarky <[email protected]>
Co-authored-by: Alchav <[email protected]>
Co-authored-by: alchav <[email protected]>
Co-authored-by: Rosalie <[email protected]>
Co-authored-by: Carter Hesterman <[email protected]>
Co-authored-by: Exempt-Medic <[email protected]>
Co-authored-by: qwint <[email protected]>
Co-authored-by: Benny D <[email protected]>
Co-authored-by: Fafale <[email protected]>
Co-authored-by: Nicholas Saylor <[email protected]>
Co-authored-by: NewSoupVi <[email protected]>
Co-authored-by: black-sliver <[email protected]>
Co-authored-by: Duck <[email protected]>
Co-authored-by: Silvris <[email protected]>
Co-authored-by: CookieCat <[email protected]>
Co-authored-by: threeandthreee <[email protected]>
Co-authored-by: gaithern <[email protected]>
Co-authored-by: Doug Hoskisson <[email protected]>
Co-authored-by: Subsourian <[email protected]>
Co-authored-by: LiquidCat64 <[email protected]>
Co-authored-by: Adrian Priestley <[email protected]>
Co-authored-by: Jacob Lewis <[email protected]>
Co-authored-by: Yaranorgoth <[email protected]>
Co-authored-by: Vertraic <[email protected]>
Co-authored-by: Fabian Dill <[email protected]>
Co-authored-by: Ziktofel <[email protected]>
Co-authored-by: Gurglemurgle <[email protected]>
Co-authored-by: massimilianodelliubaldini <[email protected]>
Co-authored-by: GreenestBeen <[email protected]>
Co-authored-by: Omnises Nihilis <[email protected]>
Co-authored-by: Mysteryem <[email protected]>
Co-authored-by: Phaneros <[email protected]>
Co-authored-by: Salzkorn <[email protected]>
Co-authored-by: Snowflav_ <[email protected]>
Co-authored-by: Fly Hyping <[email protected]>
Co-authored-by: Katelyn Gigante <[email protected]>
Co-authored-by: Justus Lind <[email protected]>
Co-authored-by: Dinopony <[email protected]>
Co-authored-by: josephwhite <[email protected]>
Co-authored-by: Andres <[email protected]>
Co-authored-by: Spineraks <[email protected]>
Co-authored-by: Benjamin S Wolf <[email protected]>
Co-authored-by: Jonathan Tan <[email protected]>
Co-authored-by: Ixrec <[email protected]>
Co-authored-by: Emerassi <[email protected]>
Co-authored-by: Scipio Wright <[email protected]>
Co-authored-by: BlastSlimey <[email protected]>
Co-authored-by: wildham <[email protected]>
Co-authored-by: Colin <[email protected]>
Co-authored-by: Emily <[email protected]>
Co-authored-by: BeeFox-sys <[email protected]>
Co-authored-by: Silent <[email protected]>
Co-authored-by: Jarno <[email protected]>
Co-authored-by: Rob B <[email protected]>
Co-authored-by: ProverbialPennance <[email protected]>
Co-authored-by: Joe Amenta <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: PinkSwitch <[email protected]>
Co-authored-by: Jarno <[email protected]>
Co-authored-by: MarioManTAW <[email protected]>
Co-authored-by: Ian Robinson <[email protected]>
nonperforming added a commit to nonperforming/Archipelago that referenced this pull request Feb 10, 2026
Using the configuration in ArchipelagoMW#5259
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

affects: core Issues/PRs that touch core and may need additional validation. is: enhancement Issues requesting new features or pull requests implementing new features.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants