Skip to content

Conversation

@alwaysintreble
Copy link
Collaborator

What is this fixing or adding?

hard deprecates per_slot_random so it can be removed later

How was this tested?

wasn't

@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 May 23, 2024
@ThePhar
Copy link
Contributor

ThePhar commented May 23, 2024

image

image

image

@Exempt-Medic Exempt-Medic added the is: maintenance Regular updates to requirements and utilities that do not fix bugs or change/add features. label May 23, 2024
@ScipioWright ScipioWright added the waiting-on: author Issue/PR is waiting for feedback or changes from its author. label May 23, 2024
@alwaysintreble
Copy link
Collaborator Author

image

image

image

that means it's working

@ThePhar
Copy link
Contributor

ThePhar commented May 24, 2024

It would be nice for us to come up with a deadline for this hard deprecation.

@Silvris
Copy link
Collaborator

Silvris commented Jun 8, 2024

Maybe alongside #3284 ? Would make sense to clump together the breaking changes.

@Exempt-Medic
Copy link
Contributor

This has conflicts btw. Almost every use will be gone after the ALttP options update

Copy link
Contributor

@nicholassaylor nicholassaylor left a comment

Choose a reason for hiding this comment

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

#4134 removes the per_slot_randoms in ALTTP and after it gets merged, this test should pass

@Exempt-Medic
Copy link
Contributor

Exempt-Medic commented Nov 27, 2024

OoT uses it once as well, I... think?

multiworld.per_slot_randoms = {1: random}

@nicholassaylor
Copy link
Contributor

I believe that #4898 is the last instance of per_slot_randoms in the codebase

@black-sliver black-sliver merged commit 754e0a0 into ArchipelagoMW:main Jul 31, 2025
16 checks passed
benny-dreamly added a commit to Simsipelago/Archipelago that referenced this pull request Aug 12, 2025
* Core: Fix a playthrough crash when a world uses "placement based logic" (#3915)

* Fix playthrough

* oops

* oops 2

* I don't like this

* that should do it

* Update BaseClasses.py

Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>

* Update BaseClasses.py

---------

Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>

* Launcher: skip launcher gui when opening webhost list with no game handlers (#4888)

* calc relevant components before opening the launcher app so it can be skipped for text client only uri launches

* generically passthrough the url arg

* Apply suggestions from code review

Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>

* flip if not else

* Update Launcher.py

* pluralize

---------

Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>

* The Messenger: more generous portal validation (#5011)

* The Messenger: more generous portal validation

* remove the while and just go for 20 attempts. hopefully that's enough

* Stardew Valley: Replace current naive entrance rando with GER (#4624)

* Stardew Valley: Added moss to statue of blessings recipe (#5038)

* BizHawkClient: Fix script to list all cores instead of explicit mapping (#5033)

* TWW: Only add Filler for Excluded Locations Which are Progress Locations (#4993)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Lingo: Fix The Bearer's Pilgrimage Logic (#5005)

* Raft: Implement get_filler_item_name and refactor filler item code a bit (#4782)

* refactor filler item creation for Raft, implement get_filler_item_name

* wrong indent

* Update worlds/raft/__init__.py

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

---------

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* SDV: Fixed Region for two Parrot Locations (#5042)

* CV64: Allow Holding Z to Use the Regular Shimmy Speed (#4730)

* Add the shimmy modifier hack.

* Update the Increase Shimmy Speed option description.

---------

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Core: Add descriptions to Components (#4849)

* Add descriptions to components

* Adhere to style guide

* Tweak BHC wording

* Trim Open Patch description

* Update text client description for consistency

Co-authored-by: Scipio Wright <scipiowright@gmail.com>

* Remove newlines

---------

Co-authored-by: Scipio Wright <scipiowright@gmail.com>

* Update OOT Guides (#5041)

* Update OOT Guides

* Minor update per review

* TWW: Update patch class (#5046)

* Webhost: update Flask to 3.1.1 (#5052)

* CVCotM: Add Nerf Roc Wing to Slot Data and HoD Max Ups to `other_game_item_appearances` (#5051)

* Timespinner: Fix Logic (#4803)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* TWW: Remove unnecessary items from slot data (#5045)

* Timespinner: Fix Logic Error with Risky Warp to Emperor's Tower and Lab Access (#4784)

Co-authored-by: sgrunt <sgrunt1987@gmail.com>

* Timespinner: Fix Connection Logic from Maw Cave Entrance to Maw (#4831)

Co-authored-by: sgrunt <sgrunt1987@gmail.com>

* Jak and Daxter: Post-merge Polish (#5031)

- Cleans up a few missed references in the setup guide.
- Refactors Options class to use metaclass and decorators to enforce friendly limits on multiple levels.    
  - Templates generated from the website, even ones with `random` should not fail generation because the website will only allow values inside the friendly limits. 
  - _Uploaded_ yamls to the website with `random`, should also now respect friendly limits without the need for `random-range` shenanigans.
  - _Uploaded_ yamls to the website, or yamls that are used to generate locally, that have hard-defined values outside the friendly limits, will be clamped/dragged/massaged into those limits (with logged warnings).
- Removed an early completion goal that was playing havoc with fill. Not enough people seem to use this goal, so its loss will not be mourned.

* Stardew Valley: Fix Wizard Tower and Entrance Randomizer Softlocks (#4631)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Core and Various Worlds: define patch_file_ending to APPlayerContainer (#5058)

* move to playercontainer

* moves patch_file_ending handling to APPlayerContainer and updates the worlds using it to define their extensions

* give oot a patch_file_ending as well

* WebHost: Use expected APPlayerContainer manifest location directly when ingesting them #4754

* DLCQuest: Add missing indirect conditions (#5074)

The `Behind Rocks` and `Pickaxe Hard Cave` Entrances require being able
to reach the `Cut Content` region, but no indirect conditions were being
registered for this region.

The `set_lfod_self_obtained_items_rules` function was also using a
`world` parameter that was actually expecting a `MultiWorld` instance,
so I have renamed it for clarity and updated the function to use
`world.get_entrance()` rather than `multiworld.get_entrance()`.

Much of the rest of the file passes `MultiWorld` instances to `world`
parameters, but fixing all of these is out of the scope of the changes
in this patch, so has not been included.

* Plando Items: Fix count with empty locations/location #5040

* DKC3: Add missing indirect conditions (#5073)

A couple of Entrance access rules were checking for being able to reach
a Location, but a Location first checks for being able to reach its
parent Region, so it needs to be registered that access to that parent
Region can give access to the Entrance.

* SoE: remove outdated info from guide (#5064)

The client does not depend on Animation Frame anymore, so it can be backgrounded.

* Launcher/Utils: reset LD_LIBRARY_PATH for system EXEs (#5022)

* TUNIC: Fix decoupled ER + ladder storage making invalid entrances #5075

* Factorio: revamp args parsing and passing (#5036)

* DS3: Fix Non-Crow Itemlinking and Mark Aldrich Ruby and Twin Dragon Greatshield As Missable (#4510)

* Fix Branch (Not Crow)

* Oops

* Mark Aldrich Ruby as missable

* Expand comment

* Short circuit

* Mark Twin Dragon Greatshield as missable

* Add missable cause

* Timespinner: Fix Castle Ramparts Region Connection #5082

Co-authored-by: ehseezed <Ehseezed@users.noreply.github.com>

* Timespinner: Fixed generation error because of timezone locking (#5084)

* Fixed generation error because of timezone locking

* Refactored logic + prevent excluding warps when unchained keys in on

* shapez: Remove preset unittests #5086

* Launcher: Fix Cli Components when installed to a directory with a space (#5091)

* KH2: Give warning when client has cached locations (#5000)

* a

* disconnect when connect to wrong slot

* connection to the wrong seed fix

* seed_name is always none

* CI: Add GH_REPO environment variable to labeler (#5081)

* KH2: Raise Exception for Misusing DonaldGoofyStatsanity Option (#4710)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* fix saving princess's use of subprocess helpers (#5103)

* LTTP/SDV: use .name when appropriate in subtests (#5107)

* SA2B: Logic Fixes (#5095)

- Fixed King Boom Boo being able to appear in multiple boss gates
- `Final Rush - 16 Animals (Expert)` no longer requires `Sonic - Bounce Bracelet`
- `Dry Lagoon - 5 (Standard)` now requires `Rouge - Pick Nails`
- `Sand Ocean - Extra Life Box 2 (Standard/Hard/Expert)` no longer requires `Eggman - Jet Engine`
- `Security Hall - 8 Animals (Expert)` no longer requires `Rouge - Pick Nails`
- `Sky Rail - Item Box 8 (Standard)` now requires `Shadow - Air Shoes` and `Shadow - Mystic Melody`
- `Cosmic Wall - Chao Key 1 (Standard/Hard/Expert)` no longer requires `Eggman - Mystic Melody`
- `Cannon's Core - Pipe 2 (Expert)` no longer requires `Tails - Booster`
- `Cannon's Core - Gold Beetle` no longer requires `Tails - Booster` nor `Knuckles - Hammer Gloves`

* Item Plando: Fix `count` value (#5101)

* Stardew Valley: Fix 3 Logic Issues (#5094)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* ALTTP: Fix take_any leaving a placed item in the multiworld itempool #5108

* Aquaria: Fixing open waters urns not breakable with nature forms logic bug (#5072)

* Fixing open waters urns not breakable with nature forms logic bug

* Using list in comprehension only when useful

* Replacing damaging items by a constant

* Removing comprehension list creating from lambda

* Shivers: Fix get_pre_fill_items (#5113)

* Plando Items: Fix Location Groups Unfolding (#5099)

* DS3: Apply Rules to Non-Randomized Locations (#5106)

* Plando Items: Better Warning for Nonexisting Worlds (#5112)

* AdventureClient: Replace Utils.get_settings with settings.get_settings #5043

* Core: Docstring typo on Region.add_exits (#5089)

* doc typo

* Update BaseClasses.py

* Remove Minecraft (#4672)

* Remove Minecraft

* remove minecraft

* remove minecraft

* elif -> if

---------

Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>

* MMBN3: Fixes Generation Errors and General UX Smoothing (#5077)

Co-authored-by: qwint <qwint.42@gmail.com>

* Make sure ladx removes the same copy of the starting item from the itempool that it's placing (#5110)

* DS3: Link to the Appropriate .NET Runtime for Proton (#5093)

* shapez: Change Links to Shapesanity Cheat Sheet (#5047)

* Docs: Rework the "Events" Section of `world api.md` (#5012)

Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Minecraft Removal Cleanup (#5118)

* Docs: Update Plando Guide and Make it More User Friendly (#4858)

* Make plando guide more user friendly.

* Apply suggestions from code review

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Further updates for review.

* Clear search box when filtering by type.

* Forget previous commit name - more code review updates to doc.

* Move link to yaml tutorial.

* Replace STS example with Pokemon RB.

* Use non-key item examples in RB.

* Rooby's code review updates.

* Update worlds/generic/docs/plando_en.md

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Update worlds/generic/docs/plando_en.md

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Address some more feedback.

* Make Factorio example more accurate.

* Exempt's code review updates (round 4)

* Exempt's code review updates (round 4 + 1)

* Update worlds/generic/docs/plando_en.md

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Update worlds/generic/docs/plando_en.md

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Update worlds/generic/docs/plando_en.md

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Update worlds/generic/docs/plando_en.md

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

---------

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* KDL3: update to gifting protocol 3 and update settings usage (#4814)

* gift version 3

* update settings usage

* that really has just been broken this entire time

* remove unnecessary print

* Update client.py

* fix random flavor handling

* fix incorrect sender/receiver

---------

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Kivy: swap from the tab carousel to navigation bar  (#4930)

* implement tabs as NavigationBar

* update the underline bar with the screen manager

* remove some unneeded kv

* remove the underline in favor of a full tab highlight

* fix insert transitions

* use on_release instead of on_press

* minor cleanup

* add remove_client_tab and add a caller to the NavigationBar for back compat

* unused imports

* Update kvui.py

---------

Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>

* core: Don't attempt to write to the inside of an OSX App Bundle (#4380)

* core: Frozen OSX should also use Home Directory

* Use Application Support instead of homedir

* Suggested changes

* Pokémon RB: Use new link for a new tracker (#5122)

* Update setup_en.md

* Update setup_es.md

* Pokemon RB: Client: Send bounce messages with current map ID (#5121)

* Civilization VI: Updated setup and info pages (#5123)

* Update setup_en.md

Updated setup instructions for Civilization VI in Archipelago

* Update en_Civilization VI.md

Updated info page for Civilization VI in Archipelago

* Update setup_en.md

* CVCotM: Fix Advance Collection ROM (#5132)

* TWW: Update Preset S7 to S8 (#5138)

* Wargroove: Fix Communication Thread (#5125)

* TWW: Fix Swords in Swordless Mode (#5137)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* SDV: Add "Desert Transportation" and "Island Transportation" Item Groups (#5143)

* Update world api.md (#5149)

* Stardew Valley: Fixed luck level requirements for slot machines #5160

# Conflicts:
#	worlds/stardew_valley/data/craftable_data.py

* Docs: 'get_prefill_items' -> 'get_pre_fill_items' (#5167)

* CommonClient: fix extra panels added to `main_area_container` (#5151)

* Core: ensure slot_data and er_hint_info are only base data types (#5144)


---------

Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>

* Core: Take Counter back out of RestrictedUnpickler #5169

* [Jak and Daxter] Auto Detect Install Path after Game Launcher Update #5152

* Factorio: Fix link to world_gen documentation (#5171)

* DLCQ: Fix/Refactor LFoD Start Inventory (#5176)

* CIV 6: Remove Erroneous Boost Prereqs for Computers Boost (#5134)

* Core: Replace Clique with V6 in unit tests (#5181)

* replace Clique with V6 in unit tests

* no hard mode in V6

* modify regex in copy_world to allow : str

* oops

* I see now

* work around all typing

* there actually needs to be something

* Various: Remove Rogue Legacy and Clique (#5177)

* Various: Remove Rogue Legacy and Clique

* Remove Clique from setup.py and revert network diagram.md change.

* Try again.

* Update network diagram.md

---------

Co-authored-by: Zach “Phar” Parks <phar@pharware.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Revert "Core: Take Counter back out of RestrictedUnpickler" (#5184)

* Revert "Core: Take Counter back out of RestrictedUnpickler #5169"

This reverts commit 95e09c8e2a681ecd5666822b04fe7fed3ed9dec1.

* Update Utils.py

* LADX: Update marin.txt (#5178)

* Stardew Valley: Remove Rarecrow Locations from Night Market when Museumsanity is Disabled (#5146)

* TUNIC: Add UT Support for Breakables (#5182)

* TUNIC: Fix missing line for UT stuff #5185

* Muse Dash: Update song list to Rotaeno Update/7th Anniversary (#5066)

* Doc: match statement in style guide (#5187)

* Test: add micro benchmark for match

* Doc: add 'match' to python style guide

* Core: Update UUID handling to be more easily sharable between libraries (#5088)

moves uuid caching to appdata and uuid generation to be a random uuid instead of getnode's hardware address driven identifier and updates docs to point to the shared cache

* Super Metroid: Only Put Relevant Options in `slot_data` (#5192)

* first working single-world randomized SM rom patches

* - SM now displays message when getting an item outside for someone else (fills ROM item table)

This is dependant on modifications done to sm_randomizer_rom project

* First working MultiWorld SM

* some missing things:

- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM

* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)

* - reenabled balancing

* post rebase fixes

* updated SmClient.py

* + added VariaRandomizer LICENSE

* + added sm_randomizer_rom project (which builds sm.ips)

* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning

* properly revert change made to CollectionState and more cleaning

* Fixed multiworld support patch not working with VariaRandomizer's

* missing file commit

* Fixed syntax error in unused code to satisfy Linter

* Revert "Fixed multiworld support patch not working with VariaRandomizer's"

This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.

* many fixes and improovement

- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players

* first working (most of the time) progression generation for SM using VariaRandomizer's rules, items, locations and accessPoint (as regions)

* first working single-world randomized SM rom patches

* - SM now displays message when getting an item outside for someone else (fills ROM item table)

This is dependant on modifications done to sm_randomizer_rom project

* First working MultiWorld SM

* some missing things:

- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM

* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)

* - reenabled balancing

* post rebase fixes

* updated SmClient.py

* + added VariaRandomizer LICENSE

* + added sm_randomizer_rom project (which builds sm.ips)

* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning

* properly revert change made to CollectionState and more cleaning

* Fixed multiworld support patch not working with VariaRandomizer's

* missing file commit

* Fixed syntax error in unused code to satisfy Linter

* Revert "Fixed multiworld support patch not working with VariaRandomizer's"

This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.

* many fixes and improovement

- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players

* Fixed multiworld support patch not working with VariaRandomizer's

Added stage_fill_hook to set morph first in progitempool
Added back VariaRandomizer's standard patches

* + added missing files from variaRandomizer project

* + added missing variaRandomizer files (custom sprites)

+ started integrating VariaRandomizer options (WIP)

* Some fixes for player and server name display

- fixed player name of 16 characters reading too far in SM client
- fixed 12 bytes SM player name limit (now 16)
- fixed server name not being displayed in SM when using server cheat ( now displays RECEIVED FROM ARCHIPELAGO)
- request: temporarly changed default seed names displayed in SM main menu to OWTCH

* Fixed Goal completion not triggering in smClient

* integrated VariaRandomizer's options into AP (WIP)

- startAP is working
- door rando is working
- skillset is working

* - fixed itemsounds.ips crash by always including nofanfare.ips into multiworld.ips (itemsounds is now always applied and "itemsounds" preset must always be "off")

* skillset are now instanced per player instead of being a singleton class

* RomPatches are now instanced per player instead of being a singleton class

* DoorManager is now instanced per player instead of being a singleton class

* - fixed the last bugs that prevented generation of >1 SM world

* fixed crash when no skillset preset is specified in randoPreset (default to "casual")

* maxDifficulty support and itemsounds removal

- added support for maxDifficulty
- removed itemsounds patch as its always applied from multiworld patch for now

* Fixed bad merge

* Post merge adaptation

* fixed player name length fix that got lost with the merge

* fixed generation with other game type than SM

* added default randoPreset json for SM in playerSettings.yaml

* fixed broken SM client following merge

* beautified json skillset presets

* Fixed ArchipelagoSmClient not building

* Fixed conflict between mutliworld patch and beam_doors_plms patch

- doorsColorsRando now working

* SM generation now outputs APBP

- Fixed paths for patches and presets when frozen

* added missing file and fixed multithreading issue

* temporarily set data_version = 0

* more work

- added support for AP starting items
- fixed client crash with gamemode being None
- patch.py "compatible_version" is now 3

* commited missing asm files

fixed start item reserve breaking game (was using bad write offset when patching)

* Nothing item are now handled game-side. the game will now skip displaying a message box for received Nothing item (but the client will still receive it).

fixed crash in SMClient when loosing connection to SNI

* fixed No Energy Item missing its ID

fixed Plando

* merge post fixes

* fixed start item Grapple, XRay and Reserve HUD, as well as graphic beams (except ice palette color)

* fixed freeze in blue brinstar caused by Varia's custom PLM not being filled with proper Multiworld PLM address (altLocsAddresses)

* fixed start item x-ray HUD display

* Fixed start items being sent by the server (is all handled in ROM)

Start items are now not removed from itempool anymore
Nothing Item is now local_items so no player will ever pickup Nothing. Doing so reduces contribution of this world to the Multiworld the more Nothing there is though.
Fixed crash (and possibly passing but broken) at generation where the static list of IPSPatches used by all SM worlds was being modified

* fixed settings that could be applied to any SM players

* fixed auth to server only using player name (now does as ALTTP to authenticate)

* - fixed End Credits broken text

* added non SM item name display

* added all supported SM options in playerSettings.yaml

* fixed locations needing a list of parent regions (now generate a region for each location with one-way exits to each (previously) parent region

did some cleaning (mainly reverts on unnecessary core classes

* minor setting fixes and tweaks

- merged Area and lightArea settings
- made missileQty, superQty and powerBombQty use value from 10 to 90 and divide value by float(10) when generating
- fixed inverted layoutPatch setting

* added option start_inventory_removes_from_pool

fixed option names formatting
fixed lint errors
small code and repo cleanup

* Hopefully fixed ROR2 that could not send any items

* - fixed missing required change to ROR2

* fixed 0 hp when respawning without having ever saved (start items were not updating the save checksum)

* fixed typo with doors_colors_rando

* fixed checksum

* added custom sprites for off-world items (progression or not)

the original AP sprite was made with PierRoulette's SM Item Sprite Utility by ijwu

* - added missing change following upstream merge

- changed patch filename extension from apbp to apm3 so patch can be used with the new client

* added morph placement options: early means local and sphere 1

* fixed failing unit tests

* - fixed broken custom_preset options

* - big cleanup to remove unnecessary or unsupported features

* - more cleanup

* - moved sm_randomizer_rom and all always applied patches into an external project that outputs basepatch.ips

- small cleanup

* - added comment to refer to project for generating basepatch.ips (https://github.com/lordlou/SMBasepatch)

* fixed g4_skip patch that can be not applied if hud is enabled

* - fixed off world sprite that can have broken graphics (restricted to use only first 2 palette)

* - updated basepatch to reflect g4_skip removal

- moved more asm files to SMBasepatch project

* - tourian grey doors at baby metroid are now always flashing (allowing to go back if needed)

* fixed wrong path if using built as exe

* - cleaned exposed maxDifficulty options

- removed always enabled Knows

* Merged LttPClient and SMClient into SNIClient

* added varia_custom Preset Option that fetch a preset (read from a new varia_custom_preset Option) from varia's web service

* small doc precision

* - added death_link support

- fixed broken Goal Completion
- post merge fix

* - removed now useless presets

* - fixed bad internal mapping with maxDiff

- increases maxDiff if only Bosses is preventing beating the game

* - added support for lowercase custom preset sections (knows, settings and controller)

- fixed controller settings not applying to ROM

* - fixed death loop when dying with Door rando, bomb or speed booster as starting items

- varia's backup save should now be usable (automatically enabled when doing door rando)

* -added docstring for generated yaml

* fixed bad merge

* fixed broken infinity max difficulty

* commented debug prints

* adjusted credits to mark progression speed and difficulty as Non Available

* added support for more than 255 players (will print Archipelago for higher player number)

* fixed missing cleanup

* added support for 65535 different player names in ROM

* fixed generations failing when only bosses are unreachable

* - replaced setting maxDiff to infinity with a bool only affecting boss logics if only bosses are left to finish

* fixed failling generations when using 'fun' settings

Accessibility checks are forced to 'items' if restricted locations are used by VARIA following usage of 'fun' settings

* fixed debug logger

* removed unsupported "suits_restriction" option

* fixed generations failing when only bosses are unreachable (using a less intrusive approach for AP)

* - fixed deathlink emptying reserves

- added death_link_survive option that lets player survive when receiving a deathlink if the have non-empty reserves

* - merged death_link and death_link_survive options

* fixed death_link

* added a fallback default starting location instead of failing generation if an invalid one was chosen

* added Nothing and NoEnergy as hint blacklist

added missing NoEnergy as local items and removed it from progression

* reduced slot_data to only what should be needed by PopTracker (for https://github.com/ArchipelagoMW/Archipelago/pull/5039)

* Core: Adds Visual Formatting to Option Group Headers in Template Yamls (#5092)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* CC: Add Assert to Catch Old Datapackage Lookup API (#5131)

* Core: Assert that all the items in the multiworld itempool are actually unplaced at the start of distribute_items_restrictive (#5109)

* Assert at the beginning of distribute items restrictive that no items in the itempool already have locations associated with them

* actual message

* placement

* oops

* Update Fill.py

* Core: Crash on full accessibility if there are unreachable locations (Yes, you read that right) #3787

* Core: Cleanup: Replace direct calling of dunder methods on objects (#4584)

Calling the dunder method has to:
1. Look up the dunder method for that object/class
2. Bind a new method instance to the object instance
3. Call the method with its arguments
4. Run the appropriate operation on the object

Whereas running the appropriate operation on the object from the start
skips straight to step 4.

Region.Register.__getitem__ is called a lot without #4583. In that case,
generation of 10 template Blasphemous yamls with
`--skip_output --seed 1` and progression balancing disabled went from
19.0s to 18.8s (1.3% reduction in generation duration).

From profiling with `timeit`
```py
        def __getitem__(self, index: int) -> Location:
            return self._list[index]
```
appears to be about twice as fast as the old code:
```py
        def __getitem__(self, index: int) -> Location:
            return self._list.__getitem__(index)
```

Besides this, there is not expected to be any noticeable difference in
performance, and there is not expected to be any difference in semantics
with these changes.

Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>

* Core: Cache previous swap states to use as the base state to sweep from (#3859)

The previous swap_state can often be used as the base state to create
the next swap_state. This previous swap_state will already have
collected all items in item_pool and is likely to have checked many
locations, meaning that creating the next swap_state from it instead of
from base_state is faster.

From generating with extra code to raise an exception if more than 2
previous swap states were used, and using A Hat in Time and Pokemon
Red/Blue yamls that often result in lots of swapping in progression
fill, I could not get a single seed go through more than 2 previous swap
states. A few worlds' pre-fills do often use more than 2 previous swap
states, notably LADX which sometimes goes through over 20.

Given a 20 player Pokemon Red/Blue multiworld that usually generates in
around 16 or 17 seconds, but on a specific seed that results in 56
swaps, generation went from about 260 seconds before this patch to about
104 seconds after this patch (generated with a meta.yaml to disable
progression balancing and `python -O Generate.py --skip_output`).

Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>

* Core: Add new ItemClassification "deprioritized" which will not be placed on priority locations (if possible) (#4610)

* Add new deprioritized item flag

* 4 retries

* indent

* .

* style

* I think this is nicer

* Nicer

* remove two lines again that I added unnecessarily

* I think this test makes a bit more sense like this

* Idk how to word this lol

* Add progression_deprioritized_skip_balancing bc why not ig

* More text

* Update Fill.py

* Update Fill.py

* I am the big stupid

* Actually collect the other half of progression items into state when filling without them

* More clarity on the descriptions (hopefully)

* visually separate technical description and use cases

* Actually make the call do what the comments say it does

* Stardew Valley: Add French Guide (#4697)

Co-authored-by: tmarquis <thomas.marquis@cellance.com>

* Core: increment version (#5194)

* Hollow Knight: Explicitly Exclude Palace Items as Filler (#5119)

* Witness: Add French and German Setup Documentation (#2527)

Co-authored-by: Lolo <lowgau@gmail.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Hollow Knight: Add Spanish Language Docs (#5156)

Co-authored-by: qwint <qwint.42@gmail.com>

* Various Games: Improve Custom Death Link Option Description (#4171)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>

* Core: Don't Cache the `get_all_state` Result (#4795)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* TUNIC: Update Tests Per #4982 (#5191)

* The Witness: Add Glass Factory Entry Panel as a location in all options #4695

* Dics: Add Webhost API Documententation (#4887)

* capitialization changes

* ditto

* Revert "ditto"

This reverts commit 17cf596735888e91850954c7306ce0b80d7e453d.

* Revert "capitialization changes"

This reverts commit 6fb86c6568da2c08b5f8e691d4fc810e3ab09a44.

* full revert and full commit

* Update docs/webhost api.md

Co-authored-by: qwint <qwint.42@gmail.com>

* Update docs/webhost api.md

Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>

* Update docs/webhost api.md

Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>

* Update webhost api.md

* Removed in-devolopment API

* Apply standard capitilization and grammar flow

Co-authored-by: Scipio Wright <scipiowright@gmail.com>

* declarative language

* Apply suggestions from code review

Co-authored-by: qwint <qwint.42@gmail.com>

* datapackage_checksum clarification, and /datapackage clairfication

* /dp/checksum clarification

* Detailed responces and /generation breakdown

* Update webhost api.md

* Made output anonomous

* Update docs/webhost api.md

Co-authored-by: qwint <qwint.42@gmail.com>

* Swapped IDs to UUID, and added language around UUID vs SUUID

* Apply suggestions from code review

formatting and grammar

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Condensed paragraphs and waterfalled headders

---------

Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* WebHostLib: Properly Format IDs in API Responses  (#4944)

* update the id formatter to use staticmethods to not fake the unused self arg, and then use the formatter for the user session endpoints

* missed an id (ty treble)

* clean up duplicate code

* Update WebHostLib/__init__.py

Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>

* keep the BaseConverter format

* lol, change all the instances

* revert this

---------

Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>

* Docs: Clean up SUUID Post #4944  (#5196)

* Stardew Valley: Add walnutsanity prefix to locations (#4934)

* AHIT: Fix Test Fail for assert_not_all_options (#5197)

* Options: Assert Not All Option in `Options.as_dict` (#5039)

* Options: forbid worlds just dumping every single option they don't need

* make the equal proper

---------

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Lingo: Fix Painting Gen Failures on Panels Mode Door Shuffle (#5199)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* Docker: Add initial configuration for project (#4419)

* feat(docker): Add initial Docker configuration for project
- Add .dockerignore file to ignore unnecessary files
- Create Dockerfile with basic build and deployment configuration

* feat(docker): Updated Docker configuration for improved security and build efficiency
- Removed sensitive files from .dockerignore
- Moved WORKDIR to /app in Dockerfile
- Added gunicorn==23.0.0 dependency in RUN command
- Created new docker-compose.yml file for service definition

* feat(deployment): Implement containerized deployment configuration

- Add additional environment variables for Python optimization
- Update Dockerfile with new dependencies: eventlet, gevent, tornado
- Create docker-compose.yml and configure services for web and nginx
- Implement example configurations for web host settings and gunicorn
- Establish nginx configuration for reverse proxy
- Remove outdated docker-compose.yml from root directory

* feat(deploy): Introduce Docker Compose configuration for multi-world deployment
- Separate web service into two containers, one for main process and one for gunicorn
- Update container configurations for improved security and maintainability
- Remove unused volumes and network configurations

* docs: Add new documentation for deploying Archipelago using containers
- Document standalone image build and run process
- Include example Docker Compose file for container orchestration
- Provide information on services defined in the `docker-compose.yaml` file
- Mention optional Enemizer feature and Git requirements

* fixup! feat(docker): Updated Docker configuration for improved security and build efficiency - Removed sensitive files from .dockerignore - Moved WORKDIR to /app in Dockerfile - Added gunicorn==23.0.0 dependency in RUN command - Created new docker-compose.yml file for service definition

* feat(deploy): Updated gunicorn configuration example
- Adjusted worker and thread counts
- Switched worker class from sync to gthread
- Changed log level to info
- Added example code snippet for customizing worker count

* fix(deploy): Adjust concurrency settings for self-launch configuration
- Reduce the number of world generators from 8 to 3
- Decrease the number of hosters from 5 to 4

* docs(deploy using containers): Improve readability, fix broken links
- Update links to other documentation pages
- Improve formatting for better readability
- Remove unnecessary sections and files
- Add note about building the image requiring a local copy of ArchipelagoMW source code

* Update deploy/example_config.yaml

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

* Update deploy/example_selflaunch.yaml

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

* Update Dockerfile

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

* Update deploy/example_selflaunch.yaml

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

* fixup! Update Dockerfile

* fix(Dockerfile): Update package installations to use latest versions
- Remove specific version pins for git and libc6-dev
- Ensure compatibility with newer package updates

* feat(ci): Add GitHub Actions workflow for building and publishing Docker images
- Create a new workflow for Docker image build and publish
- Configure triggers for push and pull_request on main branch
- Set up QEMU and Docker Buildx for multi-platform builds
- Implement Docker login for GitHub Container Registry
- Include Docker image metadata extraction and tagging

* feat(healthcheck): Update Dockerfile and docker-compose for health checks
- Add health check for the Webhost service in Dockerfile
- Modify docker-compose to include a placeholder health check for multiworld service
- Standardize comments and remove unnecessary lines

* Revert "feat(ci): Add GitHub Actions workflow for building and publishing Docker images"

This reverts commit 32a51b272627d99ca9796cbfda2e821bfdd95c70.

* feat(docker): Enhance Dockerfile with Cython build stage
- Add Cython builder stage for compiling speedups
- Update package installation and organization for efficiency
- Improve caching by copying requirements before installing
- Add documentation for rootless Podman

* fixup! feat(docker): Enhance Dockerfile with Cython build stage - Add Cython builder stage for compiling speedups - Update package installation and organization for efficiency - Improve caching by copying requirements before installing - Add documentation for rootless Podman

---------

Co-authored-by: Adrian Priestley <apriestley@gmail.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Adrian Priestley <apriestley@bob.localdomain>

* Super Metroid: Improve Option Descriptions and Add Option Groups (#5100)

* SMZ3: Add Yaml Options to Slot Data (#5111)

* Raft: Fix filler_item_types TypeError introduced in #4782 (#5203)

* Dockerfile/Core: Prevent module update during container runtime (#5205)

* fix(env): Prevent module update during requirements processing
- Add environment variable SKIP_REQUIREMENTS_UPDATE check
- Ensure update is skipped if SKIP_REQUIREMENTS_UPDATE is set to true

* squash! fix(env): Prevent module update during requirements processing - Add environment variable SKIP_REQUIREMENTS_UPDATE check - Ensure update is skipped if SKIP_REQUIREMENTS_UPDATE is set to true

* ALttP: Fix `pre_fill` State Sweeping Too Early (#5215)

* OoT: Fix remove not invalidating cached reachability (#5222)

Collecting an item into a CollectionState without sweeping, finding all
reachable locations, removing that item from the state, and then finding
all reachable locations again could result in more locations being
reachable than before the item was initially collected into the
CollectionState.

This issue was present because OoT was not invalidating its reachable
region caches for the different ages when items were removed from the
CollectionState.

To fix the issue, this PR has updated `OOTWorld.remove()` to invalid its
caches, like how `CollectionState.remove()` invalidates the core
Archipelago caches.

* DS3: Edit the setup docs to be more clear (#4618)

* UPDATE: Dark Souls 3 setup docs to be more clear

* UPDATE: DS3 Setup docs to make offline mode more explicit

* UPDATE: Dark Souls 3 setup docs to be more clear

* UPDATE: DS3 Setup docs to make offline mode more explicit

* EDIT: DS3 setup docs to be up to date

* MultiServer: CreateHints command (Allows clients to hint own items in other worlds) (#4317)

* CreateHint command

* Docs

* oops

* forgot an arg

* Update MultiServer.py

* Add documentation on what happens when the hint already exists but with a different status (nothing)

* Early exit if no locations provided

* Add a clarifying comment to the code as well

* change wording a bit

* Paint: Implement New Game (#4955)

* 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

---------

Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>

* Factorio: fix rename of mod file leading to incompatibility with base game (#5219)

* chore(ci): exclude deployment and Docker files from unit test workflow triggers (#5214)

* chore(ci): exclude deployment and Docker files from unit test workflow triggers
- Modify unittests workflow to ignore changes in deploy directory and Docker-related files

* CI: switch to new appimagetool (#5233)

Since this does not have versions anymore, we check the sha256
and require manual intervention if it changed.

TODO: look for a way to do reproducible appimages again.

* setup: Downgrade bundled SNI to 0.0.100 (#5228)

* Muse Dash: Update to Rhythm Master Collab (#5235)

* Rhythm Master Collab

* Deprioritze Music Sheets.

* Oops missed this definition.

* GER: Move EntranceLookup onto ERPlacementState. Improve usefulness of on_connect. (#4904)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* The Wind Waker: Adding French Translation for Guides (#5174)

* Add files via upload

* Delete fr_The Wind Waker.md

* Delete setup_fr.md

* Add files via upload

* Update fr_The Wind Waker.md

* Update fr_The Wind Waker.md

* Update fr_The Wind Waker.md

* Update worlds/tww/docs/fr_The Wind Waker.md

I agree with that okat!

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

Agreed

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

agreed!

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

agreed!

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

agreed!

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

forgot to remove that, ok

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

agreed!

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

Okay!

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

Agreed

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

agreed

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

agreed

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update fr_The Wind Waker.md

* Update worlds/tww/docs/fr_The Wind Waker.md

okay!

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/setup_fr.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update setup_fr.md

* Update setup_fr.md

* Update fr_The Wind Waker.md

Modifying lines

* Update setup_fr.md

Character Limits Update

* Update worlds/tww/docs/setup_fr.md

ok

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update worlds/tww/docs/fr_The Wind Waker.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update en_The Wind Waker.md

* Update worlds/tww/docs/setup_fr.md

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update __init__.py

* Update __init__.py

* Update worlds/tww/__init__.py

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Update __init__.py

---------

Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>

* Options: Add PlandoItems to Item&Loc Option Group (#5201)

* WebHost: Update some typing in WebHostLib (#5069)

* CommonClient: update commands to function without local apworld (#3045)

* BizHawkClient: Add command to pass server messages to emulator (#3039)

* WebHost: list unrecognized games as Other in stats (#5236)

* Core: Speed up CollectionState sweeping (#3812)

* Sweep events per-player to reduce sweep iterations

By finding all accessible locations per player and then collecting the
items from those locations, if any collected items belong to a different
player, then that player may be able to access more locations the next
time all of their accessible locations are found. This reduces the
number of iterations necessary to sweep through and collect from all
accessible locations.

* Also sweep per-player in MultiWorld.can_beat_game

* Deduplicate code by using sweep_for_events in can_beat_game

sweep_for_events has been modified to be able to return a generator and
to be able to change the set of locations that are filtered out. This
way, the same code can be used by both functions.

* Skip checking locations by assuming each world only logically depends on itself

While this assumption almost always holds true, worlds are allowed to
logically depend on other worlds, so the sweep always double checks at
the end by checking the locations of every world before finishing.

* Fix missed update to CollectionState.collect implementation

Collecting items with prevent_sweep=True (previously event=True) no
longer always returns True, so the return value should now be checked.

* Comment and variable name consistency/clarity

accessible/inaccessible -> reachable/unreachable
final sweep iteration -> extra sweep iteration
maybe_final_sweep -> checking_if_finished

* Apply suggestions from code review

Use Iterator in return type hint instead of Iterable to help indicate that the returned value can only be iterated once.

Be consistent in return statements. Because sweep_for_events can return a value now, the conditional branch that has no intended return value should explicitly return None.

Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>

* Update terminology from 'event' to 'advancement'

* Add typing overloads for sweep_for_advancements

This makes it so type-checkers and IDEs can see which calls return
`None` and which calls return `Iterator` so that it doesn't complain
about returning an `Iterator` from `sweep_for_events` or about iterating
through `None` in `can_beat_game`.

Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>

* Update comment for why discard the player after finding their locations

A lack of clarity was brought up in review.

* Update for removed typing import

---------

Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>

* fix(docker): Correct copy command to use recursive flag for EnemizerCLI (#5211)

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

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

* MultiServer: Fix LocationScouts with "only_new" broadcasting hints for found locations over and over (#4482)

* Hints PR number 42069

* Make it explicit

* clarify

* oops

* Port the change to CreateHints

* LADX: fix marin text splitting #5225

* Core: use patch extension register directly (#4375)


Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>

* LADX: generate without rom (#4278)

* LTTP: Add Missing Crystal Switch Logic (#4638)

* Core/Tests: No Locality Changes After `generate_early` (#4481)

* Change timing of locality option locking

* Update world api.md

* Remove whitespace

* Core: Add `restricted_dumps` helper (#5117)

* Add pickling helper that check unpicklability

* Add test condition and generation error handling

* Fix incorrect call and make imports consistent

* Fix newline padding

* Change PicklingError to directly caused by UnpicklingError

Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>

* Revert to `pickle.dumps` for decompressed multidata

* Fix import order

* Restore pickle import in main

* Re-add for multidata in Main

* Remove multisave checks

* Update MultiServer.py

* Update customserver.py

---------

Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>

* Core: MultiData typing (#5071)

* Muse Dash: Adding Option to select Goal Song (#4820)

Co-authored-by: Justus Lind <DeamonHunter@users.noreply.github.com>
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>

* V6: Allow Secret Lab Music to be Randomized (#4643)

* Core: Support inequality operators ("less than") for Choice option string comparisons (#3769)

* add some unit tests to it

* fix

* Update Options.py

Co-authored-by: qwint <qwint.42@gmail.com>

* Update Options.py

---------

Co-authored-by: qwint <qwint.42@gmail.com>

* Ignore .github dir in package test (#5098)

Added comments for ignore code

* Tests: only get `__init__.py` tests from test directories (#5135)

* Core: fix dangerous mutable default in Fill (#5247)

discussed here https://discord.com/channels/731205301247803413/731214280439103580/1327712564213448775

* shapez: Typing Cleanup + Small Docs Rewordings (#5189)

Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* LttP: Remove per_slot_randoms in LttPAdjuster.py (#4898)

* SM: Speed up deepcopy in copy_mixin (#4228)

* Docs: Don't Suggest exclude in create_items (#5256)

* Docs: Remove Settings API Back Compat Section (#5255)

* SMZ3: Fix Junk Item Overflow (#5162)

Removed `self.junkItemsNames = [item.Type.name for item in junkItems]` from `create_items` as that was pulling massive amounts of HeartPieces (because they're in junkItems in upstream) to be added if the start_inventory_from_pool was extensive. Getting more than 20 Heart Containers can lead to OHKO situations.

ETank was also removed as a junk item that can be used as filler in the earlier defined list of junk items that AP allows since you should only have 14 in the pool. It's not a problem to have more per se, but you really shouldn't have 27 of them in the pool, either. Ammo and such is much less of a problem to have crazy amounts of.

* ALTTP/SNIC/BHC: Stop using Utils.get_settings() (#5239)

* LTTP/SNIC/BHC: Stop using Utils.get_settings()

* SNIClient: use Settings.sni_options

* Core: hard deprecate per_slot_randoms (#3382)

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

* Core: Remove Checks for Unsupported Versions (#5067)

* Remove redundant version checks/compatibility

* Change windows7 check

* Edit comments

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

---------

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

* CI: also use new appimage tool in release action

* WebHost: turn module discovery dynamic (#5218)

* Setup: update cert signing process (#5161)

* The Witness: Comply with new test base structure #5265

* Various: Make clients wait a second between connects (#5061)

* TWW: Fix Death Link (#5270)

* Core: Purge Multiworld.option_name (#5050)

* LttP: move more stuff out of core (#5049)


Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>

* LttP: remove sprite download from setup flow & make sprite repo dynamic (#4830)

* The Legend of Zelda: Stepping Down as Maintainer (#5277)

* WebHost: server render remaining markdown using mistune (#5276)

---------

Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

* Subnautica: add empty tanks option (#5271)

* Fix regression on 404 redirects

* Core: Added a leading 0 to classification.as_flag #5291

* TUNIC: Fix zig skip showing up in decoupled + fixed shop #5289

* LADX: Update Docs (#5290)

* convert ladxr section to markdown, other adjustments
make links clickable
crow icon -> open tracker
adjust for removed sprite sheets
some adjustments in ladxr section for differences in the ap version:
we don't have a casual logic
we don't have stealing options

* fix link, and another correction

* FF1: fix client breaking other NES games (#5293)

* Docs: Use / instead of . for the reference to lttp's options.py (#5300)

* Update options api.md

* o -> O

* DS3: Don't Create Disabled Locations (#5292)

* Tests: Handle optional args for `get_all_state` patch (#5297)

* Make `use_cache` optional

* Pass all kwargs

* Core: Sort Unreachable Locations Written to the Spoiler (#5269)

* fix(deps): Lock setuptools version to <81 (#5284)

- Update Dockerfile to specify "setuptools<81"
- Modify ModuleUpdate.py to install setuptools with version constraint

* Settings: warn for broken worlds instead of crashing (#4438)

note: i swear the issue was an importerror but i could only get attributeerrors on the getattr() call, maybe we want to check for both?

* CI: update appimage runtime (#5315)

* WebHost: fix links on sitemap, switch to url_for and add test to prevent future breakage (#5318)

* WebHost: redirect old tutorials to new URL (#5319)

* WebHost: redirect old tutorials to new URL

* WebHost: make comment in tutorial_redirect more accurate

* CV64 and CotM: Correct Archipleago (#5323)

---------

Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Co-authored-by: agilbert1412 <alexgilbert@yahoo.com>
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Star Rauchenberger <fefferburbia@gmail.com>
Co-authored-by: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>
Co-authored-by: FlitPix <8645405+FlitPix@users.noreply.github.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: ScootyPuffJr1 <77215594+ScootyPuffJr1@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Ehseezed <97066152+Ehseezed@users.noreply.github.com>
Co-authored-by: sgrunt <smelenchuk@gmail.com>
Co-authored-by: sgrunt <sgrunt1987@gmail.com>
Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com>
Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
Co-authored-by: ehseezed <Ehseezed@users.noreply.github.com>
Co-authored-by: Jarno <jarnowesthof@gmail.com>
Co-authored-by: BlastSlimey <89539656+BlastSlimey@users.noreply.github.com>
Co-authored-by: JaredWeakStrike <96694163+JaredWeakStrike@users.noreply.github.com>
Co-authored-by: BadMagic100 <dempsey.sean@outlook.com>
Co-authored-by: PoryGone <98504756+PoryGone@users.noreply.github.com>
Co-authored-by: Louis M <prog@tioui.com>
Co-authored-by: JusticePS <5125765+JusticePS@users.noreply.github.com>
Co-authored-by: KonoTyran <Kono.Tyran@gmail.com>
Co-authored-by: digiholic <digikun@gmail.com>
Co-authored-by: Natalie Weizenbaum <nex342@gmail.com>
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com>
Co-authored-by: palex00 <32203971+palex00@users.noreply.github.com>
Co-authored-by: James White <james_white_d@hotmail.com>
Co-authored-by: DJ-lennart <alexander.lt.carlsson@hotmail.com>
Co-authored-by: Fly Hyping <brajcan@hotmail.com>
Co-authored-by: Remy Jette <remy@remyjette.com>
Co-authored-by: axe-y <58866768+axe-y@users.noreply.github.com>
Co-authored-by: Carter Hesterman <hestermancarter@gmail.com>
Co-authored-by: Zach “Phar” Parks <11338376+ThePhar@users.noreply.github.com>
Co-authored-by: Zach “Phar” Parks <phar@pharware.com>
Co-authored-by: Justus Lind <DeamonHunter@users.noreply.github.com>
Co-authored-by: lordlou <87331798+lordlou@users.noreply.github.com>
Co-authored-by: Eindall <marquisthomas4369@gmail.com>
Co-authored-by: tmarquis <thomas.marquis@cellance.com>
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
Co-authored-by: Lolo <lowgau@gmail.com>
Co-authored-by: GreenMarco <71452195+GreenMarco@users.noreply.github.com>
Co-authored-by: SunCat <suncat.game@ya.ru>
Co-authored-by: Jacob Lewis <JacobMLewis@Live.com>
Co-authored-by: CookieCat <81494827+CookieCat45@users.noreply.github.com>
Co-authored-by: Adrian Priestley <47989725+a-priestley@users.noreply.github.com>
Co-authored-by: Adrian Priestley <apriestley@gmail.com>
Co-authored-by: Adrian Priestley <apriestley@bob.localdomain>
Co-authored-by: NoiseCrush <168460988+NoiseCrush@users.noreply.github.com>
Co-authored-by: David Carroll <Dessyreqt@users.noreply.github.com>
Co-authored-by: Flore <drmoonlington@gmail.com>
Co-authored-by: MarioManTAW <mariomantaw@gmail.com>
Co-authored-by: mobby45 <68152858+mobby45@users.noreply.github.com>
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
Co-authored-by: threeandthreee <alex@3and3.dev>
Co-authored-by: Alchav <59858495+Alchav@users.noreply.github.com>
Co-authored-by: Widowmaker-61 <121366307+Turky6192@users.noreply.github.com>
Co-authored-by: Yussur Mustafa Oraji <N00byKing@hotmail.de>
Co-authored-by: JKLeckr <11635283+JKLeckr@users.noreply.github.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Co-authored-by: Solidus Snake <63137482+TheRealSolidusSnake@users.noreply.github.com>
Co-authored-by: josephwhite <22449090+josephwhite@users.noreply.github.com>
Co-authored-by: Wilhelm Schürmann <wimschuermann@googlemail.com>
Co-authored-by: t3hf1gm3nt <59876300+t3hf1gm3nt@users.noreply.github.com>
Co-authored-by: Ishigh1 <bonjour940@yahoo.fr>
xMcacutt pushed a commit to xMcacutt/Archipelago-TyTheTasmanianTiger that referenced this pull request Aug 31, 2025
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
xMcacutt pushed a commit to xMcacutt/Archipelago-TyTheTasmanianTiger that referenced this pull request Aug 31, 2025
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
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: maintenance Regular updates to requirements and utilities that do not fix bugs or change/add features. waiting-on: author Issue/PR is waiting for feedback or changes from its author. waiting-on: peer-review Issue/PR has not been reviewed by enough people yet.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants