Repository navigation
core: If a user specifies --no-gui, don't show GUI messageboxes - #5514
Conversation
| from NetUtils import (Endpoint, decode, NetworkItem, encode, JSONtoTextParser, ClientStatus, Permission, NetworkSlot, | ||
| RawJSONtoTextParser, add_json_text, add_json_location, add_json_item, JSONTypes, HintStatus, SlotType) | ||
| from Utils import Version, stream_input, async_start | ||
| from Utils import gui_enabled, Version, stream_input, async_start |
There was a problem hiding this comment.
I think your changes are sensible, but I'm a bit confused about this original Treble stuff.
Imo, there are two possibilities:
- This should be
from Utils import gui_enabled as gui_enabled - Clients are "meant" to switch over to
from Utils import gui_enabled, in which case this should get an API Updates ping
Reason: Relying on implicit reexporting is bad™️ (It fails mypy, for example, i.e. this change would implicitly make mypy-compliant worlds fail mypy without their knowledge)
I would like us to be clear about what the intent is here
There was a problem hiding this comment.
Yep, 100% agree with that.
My gut prefers the second option?
benny-dreamly
left a comment
There was a problem hiding this comment.
code LGTM, did not have the time to test, as today happens to be a holiday when I'm reviewing this
NewSoupVi
left a comment
There was a problem hiding this comment.
Merging when I have time to do an api updates ping or similar for the gui_enabled change
|
Do we want this for 0.6.7? I ran into something that could have used this that shouldn't (have to) import CommonClient. |
|
@NewSoupVi mentioned on discord that they were going to merge it when they had the time to do an API Updates Ping |
|
setting to waiting on core review, it's not technically correct if vi is waiting for something else to merge it, but it at least represents that this is not waiting for peer review and is instead waiting on core action |
* CVCotM: Fix determinism with Halve DSS Cards Placed (#5601)
* chore(documentation): Update deployment example config (#5476)
- Include flag and notice regarding asset rights in example config
* [Docs] Update docs/network protocol.md/NetworkVersion to include class field (#5377)
* update docs NetworkVersion
* added in non-common-client version clarification
* Update docs/network protocol.md
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
---------
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* CCCharles: Fix editorial issues in documentations (#5611)
* Fix editorial issues from Setup Guides
* Fix editorial issues in documentations
* Fix extra typos in documentations
* CI: downgrade pytest to 8.4.2 (#5613)
Also move ci requirements to separate file for easier handling.
* Core: Allows Meta.yaml to add triggers to individual yaml's categories. (#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 <qwint.42@gmail.com>
* change to an elif to avoid unnecessary nesting
---------
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: Benny D <78334662+benny-dreamly@users.noreply.github.com>
* Core: add export_datapackage tool (#5609)
* Core: Bump version from 0.6.4 to 0.6.5 (#5607)
* Game Docs: Fix main setup guide links (#5603)
* SC2 Tracker: Fix bundled Protoss W/A upgrade display (#5612)
* Launcher: add skip_open_folder arg to Generate Template Options (#5302)
* fix(workflows): Update branch filter in Docker workflow (#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. (#5598)
* SC2: Remove dependency on s2clientprotocol and update protobuf version (#5474)
* SoE: add apworld manifest (#5557)
* SoE: add APWorld manifest
* SoE: small typing fixes
* SC2: make worlds._sc2common.bot.proto a regular package (#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 (#5429)
* Core: don't use union type just to reuse a name (#5246)
This is the "followup PR" to address these comments:
https://github.com/ArchipelagoMW/Archipelago/pull/5071#discussion_r2117417408
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 (#5637)
* Docs: Add troubleshooting section to kh1_en.md, typo fix in kh1/Options.py (#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 (#4811)
* 0.4.4 lol
* Pycharm pls
* Violet pls
* Remove OptionsType
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Core: Fix #5605 - Trigger values being shared by weights.yaml slots (#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 (#5520)
* SC2: Move race_swap pick_one functionality to mission picking (#5538)
* LADX: create manifest (#5563)
* SC2: Add Manifest (#5559)
* SC2: Fixing a gap in the ascendant upgrades in the tracker (#5570)
* Pokémon R/B: Specify encounter types for Dexsanity hint data (#5574)
* Wargroove 1: added archipelago.json (#5591)
* SC2: Adjusting and slightly simplifying mission difficulty pool adjustment configuration (#5587)
* CV64: Fix not having Clocktower Key3 when placed in a start_inventory (#5596)
* SC2: Fix custom mission order if used in weights.yaml (#5604)
* CV64: Fix not having Clocktower Key3 when placed in a start_inventory (#5592)
* SC2: Fix the goal mission tooltip depending on goal missions' status (#5577)
* Factorio: Add no-enemies mode to worldgen schema (#5542)
* Core: add a local yaml creator GUI (#4900)
Adds a GUI for the creation of simple yamls (no weighting) locally.
* Core: add random range and additional random descriptions to template yaml (#5586)
* Muse Dash: Update Song list to Medium5 Echoes (#5597)
* Landstalker: Add manifest file (#5629)
* The Witness: Add archipelago.json (#5481)
* Add archipelago.json to witness
* Update archipelago.json
* Core: Only error in playthrough generation if game is not beatable (#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 (#5359)
* Encode non-local vague hints as negative player number
* comments
* also bump req client version
* WebHost: Validation for webworld themes (#5083)
* Celeste (Open World): fix tutorial link on game page (#5627)
* Doc: Update Mac instructions to instruct the user to make a frozen bundle (#5614)
* LttP: logic fixes and missing bombs (#5645)
3 logic issues:
* #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 (#4997)
* Yacht Dice: Add archipelago.json manifest #5658
* Core: Better error message for invalid range values (#4038)
* TWW: Fix client sending duplicate magic meter (#5664)
* SC2: Fix missing brackets in Zerg The Host logic (#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 (#5653)
* LADX: switch to asyncio.get_running_loop() (#5666)
* APQuest: Implement New Game (#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 <31627079+duckboycool@users.noreply.github.com>
* Update worlds/apquest/client/custom_views.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* 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 <ericrhitchcock@gmail.com>
* 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 <ericrhitchcock@gmail.com>
* 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 <ericrhitchcock@gmail.com>
* 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 <Berserker66@users.noreply.github.com>
* Update generate_math_problem.py
* Update worlds/apquest/game/player.py
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
---------
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Core: Add a bunch of validation to AutoPatchRegister (#5431)
* Add a bunch of validation to AutoPatchRegister
* slightly change it
* lmao
* Tests: Move world dependencies in tests to APQuest #5668
* LADX: Give better feedback during patching (#5401)
* SC2: Fix bugs and issues around excluded/unexcluded (#5644)
* Core: updates of requirements (#5672)
* Core: Fix typo in docstring for hint_points in commonclient (#5673)
* APQuest: Fix import of Protocol from bokeh instead of typing (#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 (#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 (#5678)
* fix the apworld builder pycharm runner
* Update Build APWorld.run.xml
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Tests: Move hosting test to APQuest #5671
* ALttP/Factorio: Add spaces in concatenated strings (#5564)
* Add them
* Revert "Add them"
This reverts commit 82be86191faa70d1ce097c61fc8556e03da1a72e.
* Re-add ALttP/Factorio
* SC2: logic fixes minor bugs (#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 #5687
* TLOZ: Add space in concatenated string #5690
* CV64/CVCotM: Add spaces in concatenated strings (#5691)
* Possible space removal
* Add spaces
* Missed one
* Revert removals, use newline
* Jak and Daxter: Add space in concatenated string #5692
* KH1: Add space in concatenated string #5693
* MLSS: Add space in concatenated string #5694
* Wargroove: Add space in concatenated string #5696
* Core: Add spaces in concatenated strings #5697
* Civ6: Fix issue with names including civ-breaking characters (#5204)
* DS3: Update/Fix Excluded Locations Logging (#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 #5500
* Jak and Daxter: Second attempt at fixing trade tests. #5599
* ALTTP: Fix setting `Beat Agahnim 1` event twice (#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 #5621
* shapez: Fix logic bug with vanilla shapes and floating layers #5623
* [FFMQ] Bugfix: Fix missing logic rule for Frozen Fields > Aquaria access
* sc2: Item group fixes and new item groups (#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 #5685
* Timespinner: Exclude Removed Location from Web Tracker (#5701)
* Docs: fix name of "Build APWorlds" component (#5703)
* SNIClient: new `SnesReader` interface (#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 (#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 (#5677)
* CI: update appimage runtime to fix problems with sleep (#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 (#5699)
* Remove absolute links to archipelago.gg
* Fix other link issues
* Docs: update apsudoku docs / add links to web build (#5720)
* WebHost: add played game to static tracker (#5731)
* sc2: Fixing typos in item descriptions (#5739)
* Launcher: Add workaround for kivy bug for linux touchpad devices (#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 (#5745)
* SC2: Fix Kerrigan logic for active spells (#5746)
* Launcher: fix shortcuts on the AppImage (#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 (#5750)
* Core: Bump version from 0.6.5 to 0.6.6 (#5753)
* WebHost: increase form upload limit (#5756)
* OptionsCreator: Respect World.hidden flag (#5754)
* APQuest: Fix ValueError on typing numbers/backspace #5757
* TLOZ: Add manifest file (#5755)
* Added manifest file.
* Update archipelago.json
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* SC2: New maintainership (#5752)
I (Ziktofel) stepped down but will remain as a mentor
* Factorio: Craftsanity (#5529)
* TUNIC: Make UT care about hex goal amount #5762
* TUNIC: Update world version to 4.2.7 #5761
* TUNIC: Update wording on Mask and Lantern option descriptions #5760
* Satisfactory: Add New Game (#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 (https://github.com/Jarno458/SatisfactoryArchipelagoMod/issues/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 <175728472+Copilot@users.noreply.github.com>
* 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 <scipiowright@gmail.com>
* 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 be2651120542214602872bd67798d26dcd237f5f, d8bd1aaf04e6424b74294a4ee4d195c9ae6107ab
* 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 <scipiowright@gmail.com>
* 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 <scipiowright@gmail.com>
* 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 (093fe38b6e5c15370bb8b5c8a4eceb16d7df716f)
* Apply suggestions from code review
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
* 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 <computerguy440+gh@gmail.com>
Co-authored-by: ProverbialPennance <36955346+ProverbialPennance@users.noreply.github.com>
Co-authored-by: Joe Amenta <airbreather@linux.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* EarthBound: Implement New Game (#5159)
* Add the world
* doc update
* docs
* Fix Blast/Missile not clearing Reflect
* Update worlds/earthbound/__init__.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/__init__.py
remove unused import
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/__init__.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/modules/dungeon_er.py
make bool optional
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/modules/boss_shuffle.py
typing update
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/modules/boss_shuffle.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Filter events out of item name to id
* we call it a glorp
* Update worlds/earthbound/Regions.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/__init__.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/Items.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/Regions.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* 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 <31627079+duckboycool@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Yugioh: Add space in concatenated string (#5695)
* Add spaces
* Revert wrong one
* Add right one
* Core: Add datapackage exports to gitignore (#5719)
* Gitignore and description
* Update description
* Celeste Open World: speedup module load (#5448)
* speedup world load
* those 3 weren't in-fact needed
* MultiServer: Safe DataStorage .pop (#5060)
* Make datastorage .pop not throw on missing key or index
* Reworked to use logic rather than exception catching
* Satisfactory/Timespinner: Added Manifesto (#5764)
* Added Manifesto
* Update archipelago.json
* Update archipelago.json
* Update archipelago.json
---------
Co-authored-by: Jarno <jarno.westhof@gmail.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Satisfactory: Fix nondeterministic creation of trap filler items (#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 https://github.com/ArchipelagoMW/Archipelago/pull/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 (#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 <57900059+NewSoupVi@users.noreply.github.com>
* KH2: Fix placing single items onto multiple locations in pre_fill (#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 (#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 (#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 (#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 <Berserker66@users.noreply.github.com>
* APQuest: Fix import shadowing issue (#5769)
* Fix import shadowing issue
* another comment
* Core: allow abstract world classes (#5468)
* Docs: Make image path in contributing absolute (#5790)
* Core: Make .apworlds importable using importlib (without force-importing them first) (#5734)
* Make apworlds importable in general
* move it to a probably more appropriate place?
* oops
* PyCharm: Fix name of apworld builder run config (#5824)
* rename the apworld builder run config
* Update Build APWorlds.run.xml
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Multiserver: remove dead code (#5831)
* Core: replace the eval in OptionsCreator.py (#5828)
* Satisfactory: Fix typo in GoalSelection possible values description comment (#5826)
* WebHost: Fix world sorting in /tutorial/ (#5785)
* customserver: don't set last_activity that will be overwritten later (#5844)
* Factorio: fix inverted condition in victory requirements (#5647)
* The Messenger: Fix lambda capture issue in add_closed_portal_reqs (#5816)
* Super Mario Land 2: Fix Goal Logic (#5781)
* TUNIC: Fix region for the grass by the West Garden portal (#5784)
* Core: Change image link to relative (#5802)
* Shapez: Change image links to relative (#5803)
* Noita: Fix filling Shop Item locations without updating item.location (#5840)
In single-player multiworlds with small item pools, Noita was manually
placing some items into Shop Item locations, but was only setting
location.item, and not also setting item.location so that the item and
location refer to one another.
This has been fixed by using the MultiWorld.push_item() helper method to
place the items instead of manually placing the items.
* Core: Add `.apignore` format to not include files in APWorld Builder (#5779)
* Timespinner: Align Lantern Logic (#5562)
* FFMQ: Update link to upstream rando (#5838)
* SC2: fix supreme logic hole (#5768)
* sc2: Fixing a discrepancy between slot data and logic
where story tech would not be granted for supreme if zerg was not a selected race.
* sc2: Fixed an issue where Kinetic Blast was not listed as a vanilla Kerrigan ability
* sc2: Fixing some functions that could force Kerrigan items into the pool when playing Kerriganless
* sc2: excluding zerg excludes hots for vanilla-like mission order
* Preprocessing options
* Moving general empty selection handling to option preprocessing
* Adding a unit test for empty race/campaign selection
* sc2: Properly handling non-raceswapped campaigns when excluding campaigns based on race exclusions
* sc2: Adding an explicit error message if a user excludes all missions in a way with no obvious resolution
* Core: fix bug with missing help text (#5632)
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* APQuest: Explain game_name and supports_uri more in components.py (#5759)
* APQuest: Explain game_name and supports_uri more in components.py
Hopefully this can lead to more games implementing support for the "click on slot name -> everything launches automatically" functionality.
* Update components.py
* Update components.py
* LADX: no pickle (#5849)
* Core: Bump version from 0.6.6 to 0.6.7 (#5851)
* Docs: add dev FAQ for 'should I start with the APWorld or the client?' (#5716)
* Docs: add dev FAQ for 'should I start with the APWorld or the client?'
* fix indentation of bullet point wrapped lines
* use %20 for spaces in links
* link to adding games.md and add #ap-modding-help to adding games.md
* make APQuest a link
* also linkify 'run a local server'
* reword the 'judging client is easier' point to reflect a broader range of first-timers
* move the 'not 100%' point into the introductory sentences, and tweak related wording
* correct link
* Docs: define and explain the trade-off of "local" vs "remote" items (#5718)
* first draft
* second draft
* fix indentation of bullet point wrapped lines
* move quote
* explicitly discuss all three item handling flags, since the start inventory one is easily forgotten
* rewrite to avoid a 'debate between two camps' framing
* tweak the wording to allow for the possibility that some games can 'just' do both local and remote items without exposing this detail to the player
* relative links
* Docs: explicitly document why get_filler_item_name may return non-IC.filler items, despite its name (#5747)
* Docs: explicitly document why get_filler_item_name may return non-IC.filler items, despite its name
* reword
* apply Scipio's rewordings
* Update worlds/AutoWorld.py
Co-authored-by: qwint <qwint.42@gmail.com>
* any
---------
Co-authored-by: qwint <qwint.42@gmail.com>
* Docs: Show that Data is optional for bounces #5794
* Core: Add Pymem to requirements.txt (#5855)
As to not break custom worlds when Jak & Daxter moves from PyMem to PyMemoryEditor
* Super Mario 64: Add painting passability as items (#5294)
* LADX: fix improved additional warps (#5858)
* ModuleUpdate: Add explicit error when above max supported version (#5868)
* Update messages and check
* Make "official" error message show up for 3.14
* Core: Give clearer error message for invalid .apworld zip (#5871)
* Update messages and check
* Make "official" error message show up for 3.14
* Add zip error handling
* Small cleanups
* KH2: Deathlink and ingame item popups (#5206)
---------
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: Delilah <lindsaydiane@gmail.com>
* Doc: WebHost: update readme and style guide (#4853)
* Doc: WebHost living standard
* Docs: update style guide for HTML, CSS and JS
* Unblame phar
* Too many words
* The better choice
* More rules
* Removed too much
* Docs: add recommendations for script defer and async
* Docs: Explain building a single world with Build APWorlds component (#5879)
* Doc: Reword required python version for AP (#5822)
Many many people have read this and then installed 3.14, so it clearly needs rewording.
* FFMQ: Fix Collect/Remove Asymmetry (#5253)
* TLOZ: Move completion condition to be before set_rules is complete (#5391)
* AHIT: Add option to shuffle Battle of the Birds director tokens and time bonus pickups (#5400)
* [WebHost Docs] Updated and clarified new tracker endpoitns and misc fixes. (#5475)
* Adding json/python to codeblocks to make it pretty, fixed spelling mistakes, swapped uuids for suuids in the examples, and expanded on /tracker and /static_tracker, and /slot_data_tracker giving the details of the API calls endpoints
* Add in API Cacheing timers and related text blurb
* updated for merged edit to /static_tracker
* Removed timer from /datapackage/checksum
* Docs (DS3): Fix the documentation for the Simple Early Bosses option (#5856)
* Docs (DS3): Fix the documentation for the Simple Early Bosses option
This option changed in the client a while ago, but we forgot to update
the server.
* Update Options.py
* Docs: KH1 more troubleshooting and clearer nomenclature (#5872)
* updated kh1 docs
* second pass
* tweak
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com>
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com>
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com>
* semicolon
---------
Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com>
* Fix, OptionsCreator: export options on Linux (#5774)
* Core/Utils: Use correct env for save_filename from AppImage
* OptionsCreator: run export on a separate thread
Running a blocking call from kivy misbehaves on Linux.
This also changes '*.yaml' to '.yaml' for Utils.save_filename,
which is the correct way to call it.
* Core/Utils: destroy Tk root after save/open_filename
This allows using those functions from multiple threads.
Note that pure Tk apps should not use those functions from Utils.
* OptionsCreator: show snack when save_filename fails
* OptionsCreator: disable window while exporting
* OptionsCreator: fixing typing of added stuff
* Core: Fix some typing errors (#4995)
* Fix some type errors in Generate and Options
* Add type parameter to new hint and fix whitespace errors
* Update identifier style
* Jak and Daxter: Replace Pymem, Add Linux Support (#5850)
* Replace pymem with PyMemoryEditor (nonworking)
* Add back pymem for faster windows address searching.
* Replace other uses of pymem, parameterize executable names.
* Updated to add linux and potential MacOS support to launching gk and … (#84)
* Updated to add linux and potential MacOS support to launching gk and goalc. Still needs tested on MacOS.
* Switched to using x-terminal-emulator instead of trying to find gnome-terminal or konsole
Made argument building for suprocessing goalc easier to read
Fixed OS X support to use osascript instead of attempting to run Terminal directly
* Changed Terminal usage to use Archipelago's Launh utility, which handles terminal launching for me for both linux and OS X
* Added try/except to re-connect the memory process. The process file/id changes over time on linux, and this works to re-connect without needing to restart
* Removed Unsetting env var in favor of reporting to the source authors
* Putting PyMemoryEditor local. (#85)
* Putting PyMemoryEditor local
---------
Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com>
* Fixing minor problems (#87)
* Refactor away circular launcher import.
* Push latest PyMemoryEditor scan utility (#91)
Co-authored-by: Louis M <Louis M>
* Remove Pymem, rely solely on PyMemoryEditor. Add konsole support.
* Jak 1: Remove vendored copy of PME, update imports, requirements, and manifest.
* Jak 1: Prevent server connect until game is properly setup.
* Jak 1: reduce REPL/Compiler confusion, small updates to setup guide.
* Write hack for Konsole on AppImage to avoid OpenSSL error.
* Refactor LD_LIBRARY_PATH hack.
* Update worlds/jakanddaxter/agents/memory_reader.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/jakanddaxter/agents/memory_reader.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: Morgan <morgan07kelley@gmail.com>
Co-authored-by: Louis M <prog@tioui.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Docs: add spanish language for MLSS (#5172)
* Docs: add spanish language for SM64
* Docs: add spanish language for MLSS
* Update worlds/mlss/docs/setup_es.md
Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com>
* Update worlds/mlss/docs/es_Mario & Luigi Superstar Saga.md
Co-authored-by: RoobyRoo <thegreenrobby@gmail.com>
---------
Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com>
Co-authored-by: RoobyRoo <thegreenrobby@gmail.com>
* Docs, SM64: Remove outdated FAQ item (#5887)
It is no longer possible to connect to a multiworld game on a version of the client with this bug, as all versions with this bug report AP v0.3.5 or less
* TWW: Support launcher command line arguments (#5806)
* Support launcher command line arguments
* Use `launch` instead of `launch_subprocess`
* Remove old runner code
* Satisfactory: Update Universal Tracker Method for FinalElevatorPhase Option (#5812)
* MLSS: Add Manifest + Minor Bugfixes (#5728)
* Remove outdated header change for ROM verification
* Update Connections to be compatible with python ver. 3.8
* Update inno_setup.iss
* Update inno_setup.iss
* Merge branch 'main' of https://github.com/jamesbrq/ArchipelagoMainMLSS
* Add Manifest + Minor Bugfixes
* Even further safeguards for Oho Oasis Temples
* Update basepatch.bsdiff
* KH2: Add a new "CasualBounties" Setting (#4877)
* KH2: casual bounties option
* Casual Bounty: Adjust level bounty logic to correspond with max level check setting
* Bugfix: We have one less possible bounty with corresponding level bounty logic
* Casual Bounty: Move option to better spot
* Bugfix: Prevent possible .remove() crash
* Revert "Bugfix: We have one less possible bounty with corresponding level bounty logic"
This reverts commit 3c929e00db910a176d9d882b6cc08494417177d2.
* Bugfix: Typo in conditional
* Casual Bounties: Remove Scar, add MCP
I knew I was missing one second visit fight and Scar shouldn't be there he's a first visit
* Casual Bounties: Add some clarity to the CasualBounty setting
* Docs: Update docs to reflect new CasualBounty setting
* KH2: Add bounty locations as location groups
Feedback on this needed, trying to do this to make it work with the code above the additions made it so the game generated 1 less item than locations, despite linking properly
It does function as intended though
* KH2: Update docs
* KH2: Add SuperBosses, Cups, AtlanticaToggle and SummonLevelLocationToggle to slot data (#5708)
* Add SuperBosses, Cups and AtlanticaToggle
* Add SummonLevelLocationToggle
* Core: Add SDL_MOUSE_FOCUS_CLICKTHROUGH=1 environment variable to kvui (#5804)
This variable should fix the 'double click' required when trying to interact with buttons on an unfocused window
* SC2: Bump protobuf from 6.31.1 to 6.33.5 in /worlds/_sc2common (#5890)
Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 6.31.1 to 6.33.5.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Commits](https://github.com/protocolbuffers/protobuf/commits)
---
updated-dependencies:
- dependency-name: protobuf
dependency-version: 6.33.5
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Core, Tests: allow Archipelago items in all worlds (#5893)
* Core: Add rule builder (#5048)
* initial commit of rules engine
* implement most of the stuff
* add docs and fill out rest of the functionality
* add in explain functions
* dedupe items and add more docs
* pr feedback and optimization updates
* Self is not in typing on 3.10
* fix test
* Update docs/rule builder.md
Co-authored-by: BadMagic100 <dempsey.sean@outlook.com>
* pr feedback
* love it when CI gives me different results than local
* add composition with bitwise and and or
* strongly typed option filtering
* skip resolving location parent region
* update docs
* update typing and add decorator
* add string explains
* move simplify code to world
* add wrapper rule
* I may need to abandon the generic typing
* missing space for faris
* fix hashing for resolved rules
* thank u typing extensions ilu
* remove bad cacheable check
* add decorator to assign hash and rule name
* more type crimes...
* region access rules are now cached
* break compatibility so new features work
* update docs
* replace decorators with __init_subclass__
* ok now the frozen dataclass is automatic
* one more type fix for the road
* small fixes and caching tests
* play nicer with tests
* ok actually fix the tests
* add item_mapping for faris
* add more state helpers as rules
* fix has from list rules
* fix can reach location caching and add set completion condition
* fix can reach entrance caching
* implement HasGroup and HasGroupUnique
* add more tests and fix some bugs
* Add name arg to create_entrance
Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com>
* fix json dumping option filters
* restructure and test serialization
* add prop to disable caching
* switch to __call__ and revert access_rule changes
* update docs and make edge cases match
* ruff has lured me into a false sense of security
* also unused
* fix disabling caching
* move filter function to filter class
* add more docs
* tests for explain functions
* Update docs/rule builder.md
Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com>
* chore: Strip out uses of TYPE_CHECKING as much as possible
* chore: add empty webworld for test
* chore: optimize rule evaluations
* remove getattr from hot code paths
* testing new cache flags
* only clear cache for rules cached as false in collect
* update test for new behaviour
* do not have rules inherit from each other
* update docs on caching
* fix name of attribute
* make explain messages more colorful
* fix issue with combining rules with different options
* add convenience functions for filtering
* use an operator with higher precedence
* name conflicts less with optionfilter
* move simplify and instance caching code
* update docs
* kill resolve_rule
* kill true_rule and false_rule
* move helpers to base classes
* update docs
* I really should finish all of my
* fix test
* rename mixin
* fix typos
* refactor rule builder into folder for better imports
* update docs
* do not dupe collectionrule
* docs review feedback
* missed a file
* remove rule_caching_enabled from base World
* update docs on caching
* shuffle around some docs
* use option instead of option.value
* add in operator and more testing
* rm World = object
* test fixes
* move cache to logic mixin
* keep test rule builder world out of global registry
* todone
* call register_dependencies automatically
* move register deps call to call_single
* add filtered_resolution
* allow bool opts on filters
* fix serialization tests
* allow reverse operations
---------
Co-authored-by: BadMagic100 <dempsey.sean@outlook.com>
Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com>
* Core: Throw OptionError for option type Toggle in certain scenarios (#5874)
* Throw OptionError for option type Toggle in certain scenarios
* Adding missing space to Options.py
Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com>
---------
Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com>
* Utils: Improvements to visualize_regions for debugging GER usage (#4685)
* Improvements to visualize_regions for debugging GER usage
- allow the user to pass in a dict[int, int] to visualize_regions that maps Entrance.randomization_group to a color in RGB form. This allows for better visualization of which dangling entrances should match, or which matching groups are not being correctly respected.
- do full region visualization for unreached regions, so that entrances that could connect to new regions can be visualized.
- visualize unconnected entrances on regions, in addition to connected and unconnected exits, so that available ER targets can be visualized as well
* Add detail_disconnected_regions parameter to visualize_regions
* Rename detail_disconnected_regions to detail_other_regions for consistency
* Add auto_assign_colors param to visualize_regions
* Make auto assignment of entrance colors deterministic
* Assume show_other_regions is true if detail_other_regions is true
* Remove unused random import
* whitespace adjustments
* Move overflow check to prevent potential infinite loop
It wasn't exactly likely, as the user would have had to manually define all 4096 colors and then need an additional color on top of that, but accounting for that kind of nonsense is easy enough in this case.
* positive condition
---------
Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com>
* APQuest: Improve the auto-generated .gitignore for data/sounds (#5670)
I didn't quite think this through: In this specific case, you want the gitignore to also ignore itself, since it itself is an auto-generated file.
* Webhost: Fix defaults for NamedRange and TextChoice (#5139)
* TUNIC: Depriority for some items (#5589)
* Stardew Valley: 7.x.x - The Jojapocalypse Update (#5432)
Major Content update for Stardew Valley
### Features
- New BundleRandomization Value: Meme Bundles - Over 100 custom bundles, designed to be jokes, references, trolls, etc
- New Setting: Bundles Per Room modifier
- New Setting: Backpack Size
- New Setting: Secretsanity - Checks for triggering easter eggs and secrets
- New Setting: Moviesanity - Checks for watching movies and sharing snacks with Villagers
- New Setting: Eatsanity - Checks for eating items
- New Setting: Hatsanity - Checks for wearing Hats
- New Setting: Start Without - Allows you to select any combination of various "starting" items, that you will actually not start with. Notably, tools, backpack slots, Day5 unlocks, etc.
- New Setting: Allowed Filler Items - Allows you to customize the filler items you'll get
- New Setting: Endgame Locations - Checks for various expensive endgame tasks and purchases
- New Shipsanity value: Crops and Fish
- New Settings: Jojapocalypse and settings to customize it
- Bundle Plando: Replaced with BundleWhitelist and BundleBlacklist, for more customization freedom
- Added a couple of Host.yaml settings to help hosts allow or ban specific difficult settings that could cause problems if the people don't know what they are signing up for.
Plus a truckload of improvements on the mod side, not seen in this PR.
### Removed features
- Integration for Stardew Valley Expanded. It is simply disabled, the code is all still there, but I'm extremely tired of providing tech support for it, plus Stardew Valley 1.7 was announced and that will break it again, so I'm done. When a maintainer steps up, it can be re-enabled.
* CommonClient: actually close the UI on /exit (#5860)
* Aquaria: Adding a lots of options and one check (#4414)
First, there is one check that has been added. The location is "Sitting on the throne before the cathedral with the crest on it" and the item is the "Opening of the Cathedral door". In Vanilla, sitting on the crested throne open the door to the cathedral.
Now for the options added:
- infinite_hot_soup: Make the game impossible to run out of hot soup once you got it as an item.
- open_body_tongue: The body level (the ending level) is blocked by a big tongue. This option remove the tongue without having to go to the Sunken City (where it is normally removed)
- maximum_ingredient_amount: In the Vanilla game, the ingredients and dishes count is limited to 8. This option make this count configurable.
- skip_final_boss_3rd_form: The final boss has 5 forms. The 3rd one is long and not really challenging. So, this option is used to skip this form.
- save_healing: Normally, the save points heal the player. There is also beds in the game that can heal the player. This option removed the healing from the save point and forced the player to heal using beds (or healing monsters or healing items)
- no_progression_(whatever): Make this "whatever" (generally regions) exempt of progression items. Note that this is not using the exclusion-feature of AP, as these locations may still contain 'Useful' items. It is only guaranteed that no 'Progression' and 'Progression_Skip_Balancing'-items will appear in these regions. This option does not remove locations. I did not exclude or completely remove the regions because I don't have enough location to put every useful item in the game.
There is also 2 new goals:
- Four gods: The goal is obtained when the player beat the four gods (this is something like half the game). Useful to have quicker runs
- Gods and Creator: Like the Four Gods run, but when the four gods are obtained, that open a transportation turtle to the final boss (the Creator) and the player have to beat the final boss to obtain the goal.
Note that for the 2 new goals, all locations from the last 4 areas (Abyss, Frozen Veil, Sunken City and The Body) are completely removed (not just excluded).
* Launcher: generate templates for option presets (#5062)
* Doc: running from source and building on Linux (#5881)
* CI: make the comment in 'Build' more verbose
* Doc: add Linux running from source and build instructions
* Doc: fix name in running from source on Linux
* Update docs/running from source.md
Co-authored-by: qwint <qwint.42@gmail.com>
---------
Co-authored-by: qwint <qwint.42@gmail.com>
* core: If a user specifies --no-gui, don't show GUI messageboxes (#5514)
* move `gui_enabled` to Utils
* docstring
* If a user specified no-gui, don't use GUI messageboxes
---------
Co-authored-by: alwaysintreble <mmmcheese158@gmail.com>
* Launcher: run init_logging before importing from worlds (#5402)
* WebHost: Better document config loading fallback (#5948)
* change functionality to follow comment
* revert code change and explicitly document intent
* Celeste (Open World): v1.0.7 Logic Fixes (#5827)
### Logic Fixes:
- Old Site A
- Logic now allows for going backwards from the `Awake` checkpoint
- Golden Ridge A
- `Golden Strawberry` now requires `Moving Platforms` as it should
- Mirror Temple A
- `Room b-01c Strawberry` and `Room b-10 Strawberry` no longer erroneously require `Red Boosters`
- `Golden Strawberry` now requires `Dash Refills` as it should
- Reflection A
- Logic now allows for going backwards from the `Reflection` checkpoint
- Reflection B
- Logic now allows for going backwards from the `Reflection` checkpoint
- Farewell
- `Power Source Key 2` now logically requires `Dash Switches` and `Double Dash Refills` as it should
* Rule Builder: Make region.connect and add_event support rule builder (#5933)
* make region.connect and add_event support rule builder
* fix test
* oops fix
* update tests and typing
* rm unused
* Options: support "random" and variations for OptionSet with defined valid_keys (#4418)
* seemingly works? needs testing
* attempt docs update
* move to verify resolution (keep?)
* account for no valid keys and "random" being passed
* Update advanced_settings_en.md
* Update Options.py
Co-authored-by: qwint <qwint.42@gmail.com>
* Update Options.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* unify random handling between range and set
* Update Options.py
* Update Options.py
* Update Options.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* super is weird
* fix item/location
* remove groups from options
* unittest
* pep8
* Update Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update Options.py
---------
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Core: Add missing args to rule builder inits (#5912)
* add filtered_resolution to inits
* update from_dict calls too
* Saving Princess: Fix each slot sharing the same `music_table` (#5952)
`music_table` was initialized on the `SavingPrincessWorld` *class*, so
was being shared by each Saving Princess slot in the multiworld.
This has been fixed by initializing the `music_table` attribute on each
`SavingPrincessWorld` *instance* in `generate_early()` instead.
* HK: Fix cached filler item names persisting between generations (#5950)
HK's `get_filler_item_name` was writing lists into a ClassVar[dict] on
the `HKWorld` class. This dict would not be cleaned out between
generations on the same process, leaving behind cached data from
previous generations.
I confirmed the issue when running single-slot generations on a local
webhost, where `self.cached_filler_items` could be already populated
during `HKWorld.__init__()`.
This has been fixed by putting an individual cache list on each HKWorld
instance, instead of a shared cached on the class.
* Factorio: Update Download Image in guides (#5953)
* Docs: Replace the 'true filler' weasel words in adding games.md's mention of get_filler_item_name() (#5958)
* replace the 'true filler' weasel words with a clear term defined by the linked method's docstring
* Update docs/adding games.md
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Core: Better scaling explicit indirect conditions (#4582)
* Core: Better scaling explicit indirect conditions
When the number of connections to retry was large and `queue` was large
`new_entrance not in queue` would get slow.
For the average supported world, the difference this change makes is
negligible.
For a game like Bla…
* Added ability to define custom port ranges the WebHost will use for game servers, instead of pure random. * - Added better fallback to default port range when a custom range fails - Updated config to be clearer * Added ability to define custom port ranges the WebHost will use for game servers, instead of pure random. * - Added better fallback to default port range when a custom range fails - Updated config to be clearer * Updated soft-fail message * Removed dead import from customserver.py * Update requirements.txt Settings requirements to main core branch * Jak and Daxter: Replace Pymem, Add Linux Support (ArchipelagoMW#5850) * Replace pymem with PyMemoryEditor (nonworking) * Add back pymem for faster windows address searching. * Replace other uses of pymem, parameterize executable names. * Updated to add linux and potential MacOS support to launching gk and … (#84) * Updated to add linux and potential MacOS support to launching gk and goalc. Still needs tested on MacOS. * Switched to using x-terminal-emulator instead of trying to find gnome-terminal or konsole Made argument building for suprocessing goalc easier to read Fixed OS X support to use osascript instead of attempting to run Terminal directly * Changed Terminal usage to use Archipelago's Launh utility, which handles terminal launching for me for both linux and OS X * Added try/except to re-connect the memory process. The process file/id changes over time on linux, and this works to re-connect without needing to restart * Removed Unsetting env var in favor of reporting to the source authors * Putting PyMemoryEditor local. (#85) * Putting PyMemoryEditor local --------- Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com> * Fixing minor problems (#87) * Refactor away circular launcher import. * Push latest PyMemoryEditor scan utility (#91) Co-authored-by: Louis M <Louis M> * Remove Pymem, rely solely on PyMemoryEditor. Add konsole support. * Jak 1: Remove vendored copy of PME, update imports, requirements, and manifest. * Jak 1: Prevent server connect until game is properly setup. * Jak 1: reduce REPL/Compiler confusion, small updates to setup guide. * Write hack for Konsole on AppImage to avoid OpenSSL error. * Refactor LD_LIBRARY_PATH hack. * Update worlds/jakanddaxter/agents/memory_reader.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update worlds/jakanddaxter/agents/memory_reader.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: Morgan <morgan07kelley@gmail.com> Co-authored-by: Louis M <prog@tioui.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: add spanish language for MLSS (ArchipelagoMW#5172) * Docs: add spanish language for SM64 * Docs: add spanish language for MLSS * Update worlds/mlss/docs/setup_es.md Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> * Update worlds/mlss/docs/es_Mario & Luigi Superstar Saga.md Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> --------- Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> * Docs, SM64: Remove outdated FAQ item (ArchipelagoMW#5887) It is no longer possible to connect to a multiworld game on a version of the client with this bug, as all versions with this bug report AP v0.3.5 or less * TWW: Support launcher command line arguments (ArchipelagoMW#5806) * Support launcher command line arguments * Use `launch` instead of `launch_subprocess` * Remove old runner code * Satisfactory: Update Universal Tracker Method for FinalElevatorPhase Option (ArchipelagoMW#5812) * MLSS: Add Manifest + Minor Bugfixes (ArchipelagoMW#5728) * Remove outdated header change for ROM verification * Update Connections to be compatible with python ver. 3.8 * Update inno_setup.iss * Update inno_setup.iss * Merge branch 'main' of https://github.com/jamesbrq/ArchipelagoMainMLSS * Add Manifest + Minor Bugfixes * Even further safeguards for Oho Oasis Temples * Update basepatch.bsdiff * KH2: Add a new "CasualBounties" Setting (ArchipelagoMW#4877) * KH2: casual bounties option * Casual Bounty: Adjust level bounty logic to correspond with max level check setting * Bugfix: We have one less possible bounty with corresponding level bounty logic * Casual Bounty: Move option to better spot * Bugfix: Prevent possible .remove() crash * Revert "Bugfix: We have one less possible bounty with corresponding level bounty logic" This reverts commit 3c929e0. * Bugfix: Typo in conditional * Casual Bounties: Remove Scar, add MCP I knew I was missing one second visit fight and Scar shouldn't be there he's a first visit * Casual Bounties: Add some clarity to the CasualBounty setting * Docs: Update docs to reflect new CasualBounty setting * KH2: Add bounty locations as location groups Feedback on this needed, trying to do this to make it work with the code above the additions made it so the game generated 1 less item than locations, despite linking properly It does function as intended though * KH2: Update docs * KH2: Add SuperBosses, Cups, AtlanticaToggle and SummonLevelLocationToggle to slot data (ArchipelagoMW#5708) * Add SuperBosses, Cups and AtlanticaToggle * Add SummonLevelLocationToggle * Core: Add SDL_MOUSE_FOCUS_CLICKTHROUGH=1 environment variable to kvui (ArchipelagoMW#5804) This variable should fix the 'double click' required when trying to interact with buttons on an unfocused window * SC2: Bump protobuf from 6.31.1 to 6.33.5 in /worlds/_sc2common (ArchipelagoMW#5890) Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 6.31.1 to 6.33.5. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Commits](https://github.com/protocolbuffers/protobuf/commits) --- updated-dependencies: - dependency-name: protobuf dependency-version: 6.33.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Core, Tests: allow Archipelago items in all worlds (ArchipelagoMW#5893) * Core: Add rule builder (ArchipelagoMW#5048) * initial commit of rules engine * implement most of the stuff * add docs and fill out rest of the functionality * add in explain functions * dedupe items and add more docs * pr feedback and optimization updates * Self is not in typing on 3.10 * fix test * Update docs/rule builder.md Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> * pr feedback * love it when CI gives me different results than local * add composition with bitwise and and or * strongly typed option filtering * skip resolving location parent region * update docs * update typing and add decorator * add string explains * move simplify code to world * add wrapper rule * I may need to abandon the generic typing * missing space for faris * fix hashing for resolved rules * thank u typing extensions ilu * remove bad cacheable check * add decorator to assign hash and rule name * more type crimes... * region access rules are now cached * break compatibility so new features work * update docs * replace decorators with __init_subclass__ * ok now the frozen dataclass is automatic * one more type fix for the road * small fixes and caching tests * play nicer with tests * ok actually fix the tests * add item_mapping for faris * add more state helpers as rules * fix has from list rules * fix can reach location caching and add set completion condition * fix can reach entrance caching * implement HasGroup and HasGroupUnique * add more tests and fix some bugs * Add name arg to create_entrance Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * fix json dumping option filters * restructure and test serialization * add prop to disable caching * switch to __call__ and revert access_rule changes * update docs and make edge cases match * ruff has lured me into a false sense of security * also unused * fix disabling caching * move filter function to filter class * add more docs * tests for explain functions * Update docs/rule builder.md Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * chore: Strip out uses of TYPE_CHECKING as much as possible * chore: add empty webworld for test * chore: optimize rule evaluations * remove getattr from hot code paths * testing new cache flags * only clear cache for rules cached as false in collect * update test for new behaviour * do not have rules inherit from each other * update docs on caching * fix name of attribute * make explain messages more colorful * fix issue with combining rules with different options * add convenience functions for filtering * use an operator with higher precedence * name conflicts less with optionfilter * move simplify and instance caching code * update docs * kill resolve_rule * kill true_rule and false_rule * move helpers to base classes * update docs * I really should finish all of my * fix test * rename mixin * fix typos * refactor rule builder into folder for better imports * update docs * do not dupe collectionrule * docs review feedback * missed a file * remove rule_caching_enabled from base World * update docs on caching * shuffle around some docs * use option instead of option.value * add in operator and more testing * rm World = object * test fixes * move cache to logic mixin * keep test rule builder world out of global registry * todone * call register_dependencies automatically * move register deps call to call_single * add filtered_resolution * allow bool opts on filters * fix serialization tests * allow reverse operations --------- Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * Core: Throw OptionError for option type Toggle in certain scenarios (ArchipelagoMW#5874) * Throw OptionError for option type Toggle in certain scenarios * Adding missing space to Options.py Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> --------- Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> * Utils: Improvements to visualize_regions for debugging GER usage (ArchipelagoMW#4685) * Improvements to visualize_regions for debugging GER usage - allow the user to pass in a dict[int, int] to visualize_regions that maps Entrance.randomization_group to a color in RGB form. This allows for better visualization of which dangling entrances should match, or which matching groups are not being correctly respected. - do full region visualization for unreached regions, so that entrances that could connect to new regions can be visualized. - visualize unconnected entrances on regions, in addition to connected and unconnected exits, so that available ER targets can be visualized as well * Add detail_disconnected_regions parameter to visualize_regions * Rename detail_disconnected_regions to detail_other_regions for consistency * Add auto_assign_colors param to visualize_regions * Make auto assignment of entrance colors deterministic * Assume show_other_regions is true if detail_other_regions is true * Remove unused random import * whitespace adjustments * Move overflow check to prevent potential infinite loop It wasn't exactly likely, as the user would have had to manually define all 4096 colors and then need an additional color on top of that, but accounting for that kind of nonsense is easy enough in this case. * positive condition --------- Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com> * APQuest: Improve the auto-generated .gitignore for data/sounds (ArchipelagoMW#5670) I didn't quite think this through: In this specific case, you want the gitignore to also ignore itself, since it itself is an auto-generated file. * Webhost: Fix defaults for NamedRange and TextChoice (ArchipelagoMW#5139) * TUNIC: Depriority for some items (ArchipelagoMW#5589) * Stardew Valley: 7.x.x - The Jojapocalypse Update (ArchipelagoMW#5432) Major Content update for Stardew Valley ### Features - New BundleRandomization Value: Meme Bundles - Over 100 custom bundles, designed to be jokes, references, trolls, etc - New Setting: Bundles Per Room modifier - New Setting: Backpack Size - New Setting: Secretsanity - Checks for triggering easter eggs and secrets - New Setting: Moviesanity - Checks for watching movies and sharing snacks with Villagers - New Setting: Eatsanity - Checks for eating items - New Setting: Hatsanity - Checks for wearing Hats - New Setting: Start Without - Allows you to select any combination of various "starting" items, that you will actually not start with. Notably, tools, backpack slots, Day5 unlocks, etc. - New Setting: Allowed Filler Items - Allows you to customize the filler items you'll get - New Setting: Endgame Locations - Checks for various expensive endgame tasks and purchases - New Shipsanity value: Crops and Fish - New Settings: Jojapocalypse and settings to customize it - Bundle Plando: Replaced with BundleWhitelist and BundleBlacklist, for more customization freedom - Added a couple of Host.yaml settings to help hosts allow or ban specific difficult settings that could cause problems if the people don't know what they are signing up for. Plus a truckload of improvements on the mod side, not seen in this PR. ### Removed features - Integration for Stardew Valley Expanded. It is simply disabled, the code is all still there, but I'm extremely tired of providing tech support for it, plus Stardew Valley 1.7 was announced and that will break it again, so I'm done. When a maintainer steps up, it can be re-enabled. * CommonClient: actually close the UI on /exit (ArchipelagoMW#5860) * Aquaria: Adding a lots of options and one check (ArchipelagoMW#4414) First, there is one check that has been added. The location is "Sitting on the throne before the cathedral with the crest on it" and the item is the "Opening of the Cathedral door". In Vanilla, sitting on the crested throne open the door to the cathedral. Now for the options added: - infinite_hot_soup: Make the game impossible to run out of hot soup once you got it as an item. - open_body_tongue: The body level (the ending level) is blocked by a big tongue. This option remove the tongue without having to go to the Sunken City (where it is normally removed) - maximum_ingredient_amount: In the Vanilla game, the ingredients and dishes count is limited to 8. This option make this count configurable. - skip_final_boss_3rd_form: The final boss has 5 forms. The 3rd one is long and not really challenging. So, this option is used to skip this form. - save_healing: Normally, the save points heal the player. There is also beds in the game that can heal the player. This option removed the healing from the save point and forced the player to heal using beds (or healing monsters or healing items) - no_progression_(whatever): Make this "whatever" (generally regions) exempt of progression items. Note that this is not using the exclusion-feature of AP, as these locations may still contain 'Useful' items. It is only guaranteed that no 'Progression' and 'Progression_Skip_Balancing'-items will appear in these regions. This option does not remove locations. I did not exclude or completely remove the regions because I don't have enough location to put every useful item in the game. There is also 2 new goals: - Four gods: The goal is obtained when the player beat the four gods (this is something like half the game). Useful to have quicker runs - Gods and Creator: Like the Four Gods run, but when the four gods are obtained, that open a transportation turtle to the final boss (the Creator) and the player have to beat the final boss to obtain the goal. Note that for the 2 new goals, all locations from the last 4 areas (Abyss, Frozen Veil, Sunken City and The Body) are completely removed (not just excluded). * Launcher: generate templates for option presets (ArchipelagoMW#5062) * Doc: running from source and building on Linux (ArchipelagoMW#5881) * CI: make the comment in 'Build' more verbose * Doc: add Linux running from source and build instructions * Doc: fix name in running from source on Linux * Update docs/running from source.md Co-authored-by: qwint <qwint.42@gmail.com> --------- Co-authored-by: qwint <qwint.42@gmail.com> * core: If a user specifies --no-gui, don't show GUI messageboxes (ArchipelagoMW#5514) * move `gui_enabled` to Utils * docstring * If a user specified no-gui, don't use GUI messageboxes --------- Co-authored-by: alwaysintreble <mmmcheese158@gmail.com> * Launcher: run init_logging before importing from worlds (ArchipelagoMW#5402) * WebHost: Better document config loading fallback (ArchipelagoMW#5948) * change functionality to follow comment * revert code change and explicitly document intent * Celeste (Open World): v1.0.7 Logic Fixes (ArchipelagoMW#5827) ### Logic Fixes: - Old Site A - Logic now allows for going backwards from the `Awake` checkpoint - Golden Ridge A - `Golden Strawberry` now requires `Moving Platforms` as it should - Mirror Temple A - `Room b-01c Strawberry` and `Room b-10 Strawberry` no longer erroneously require `Red Boosters` - `Golden Strawberry` now requires `Dash Refills` as it should - Reflection A - Logic now allows for going backwards from the `Reflection` checkpoint - Reflection B - Logic now allows for going backwards from the `Reflection` checkpoint - Farewell - `Power Source Key 2` now logically requires `Dash Switches` and `Double Dash Refills` as it should * Rule Builder: Make region.connect and add_event support rule builder (ArchipelagoMW#5933) * make region.connect and add_event support rule builder * fix test * oops fix * update tests and typing * rm unused * Options: support "random" and variations for OptionSet with defined valid_keys (ArchipelagoMW#4418) * seemingly works? needs testing * attempt docs update * move to verify resolution (keep?) * account for no valid keys and "random" being passed * Update advanced_settings_en.md * Update Options.py Co-authored-by: qwint <qwint.42@gmail.com> * Update Options.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * unify random handling between range and set * Update Options.py * Update Options.py * Update Options.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * super is weird * fix item/location * remove groups from options * unittest * pep8 * Update Options.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Update Options.py --------- Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Core: Add missing args to rule builder inits (ArchipelagoMW#5912) * add filtered_resolution to inits * update from_dict calls too * Saving Princess: Fix each slot sharing the same `music_table` (ArchipelagoMW#5952) `music_table` was initialized on the `SavingPrincessWorld` *class*, so was being shared by each Saving Princess slot in the multiworld. This has been fixed by initializing the `music_table` attribute on each `SavingPrincessWorld` *instance* in `generate_early()` instead. * HK: Fix cached filler item names persisting between generations (ArchipelagoMW#5950) HK's `get_filler_item_name` was writing lists into a ClassVar[dict] on the `HKWorld` class. This dict would not be cleaned out between generations on the same process, leaving behind cached data from previous generations. I confirmed the issue when running single-slot generations on a local webhost, where `self.cached_filler_items` could be already populated during `HKWorld.__init__()`. This has been fixed by putting an individual cache list on each HKWorld instance, instead of a shared cached on the class. * Factorio: Update Download Image in guides (ArchipelagoMW#5953) * Docs: Replace the 'true filler' weasel words in adding games.md's mention of get_filler_item_name() (ArchipelagoMW#5958) * replace the 'true filler' weasel words with a clear term defined by the linked method's docstring * Update docs/adding games.md Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Core: Better scaling explicit indirect conditions (ArchipelagoMW#4582) * Core: Better scaling explicit indirect conditions When the number of connections to retry was large and `queue` was large `new_entrance not in queue` would get slow. For the average supported world, the difference this change makes is negligible. For a game like Blasphemous, with a lot of explicit indirect conditions, generation of 10 template Blasphemous yamls with `--skip_output --seed 1` and progression balancing disabled went from 19.0s to 17.9s (5.9% reduction in generation duration). * Create a new variable for the new set created from the intersection * WebHost: memory leak fixes (ArchipelagoMW#5966) * ALTTP: remove `world: MultiWorld` and typing (ArchipelagoMW#5974) * WebHost: Add CORS headers to API Endpoints (ArchipelagoMW#5777) * Return new state man (Vi's note: I have chosen not to change this title) (ArchipelagoMW#5978) * The Messenger: minor maintenance (ArchipelagoMW#5965) * CI: upgrade InnoSetup to 6.7.0 (ArchipelagoMW#5979) * MultiServer: don't keep multidata alive for race_mode (ArchipelagoMW#5980) * MultiServer, customserver: move data package handling Create a new class that handles conversion worlds+embedded -> context data. Create a derived class that uses static_server_data+pony instead. There is also a not very efficient feature to deduplicate strings (may need perf testing). By moving code around, we can simplify a lot of the world loading. Where code lines were touched, some typing and some reformatting was added. The back compat for GetDataPackage without games was finally dropped. This was done as a cleanup because the refactoring touched those lines anyway. Also reworked the per-context dicts and the RoomInfo to hopefully be more efficient by ignoring unused games. (Generating the list of used games was required for the new code anyway.) Side effect of the MultiServer cache: we now load worlds lazily (but still all at once) and don't modify the games package in place. If needed we create copies. This almost gets us to the point where MultiServer doesn't need worlds - it still needs them for the forbidden items. There is a bonus optimization that deduplicates strings in name_groups that may have bad performance and may need some perf testing if we run into issues. * MultiServer: fix string deduplication in data package cache * MultiServer, customserver: minor formatting fixes * MultiServer: fix data package cache for missing checksum case * MultiServer: improve string deduplication in games package cache * customserver: handle missing checksum in datapackage cache * customserver: typing cleanup in games package cache * Test, MultiServer, customser: add tests for games package cache * Test, MultiServer: reorder imports Hopefully this fixes the random test failures with pytest-xdist * customserver: make WebHost import lazy in games package cache and fix test * customserver: games package cache: fix py3.11 compat * MultiServer, customserver: cache: typing improvements * customserver: cache: reformat * Fix(undertale): prevent massive bounce msg spam for position updates (ArchipelagoMW#5990) * fix(undertale): prevent massive bounce msg spam for position updates * make sure player is removed on leaving / timing out * do not check for tags: online, as bounce evaluation is or'd * Core: use typing_extensions `deprecated` (ArchipelagoMW#5989) * Test: move customserver tests to not interfere with webhost * Undertale: Use check_locations helper to avoid redundant sends (ArchipelagoMW#5993) * Core: allow async def functions as commands (ArchipelagoMW#5859) * Core: introduce finalize_multiworld and pre_output stages (ArchipelagoMW#5700) Co-authored-by: Ishigh1 <bonjour940@yahoo.fr> Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * MultiServer: graceful shutdown for ctrl+c and sigterm (ArchipelagoMW#5996) * OptionCreator: 0.6.6 reported issues (ArchipelagoMW#5949) * fix what reviewers said and add some improvements * remove unused argument * try fixing test with try * use yaml lists instead of string for config * fix value type bug on ephemeral type * reuse sockets with websockets api instead of opening and closing them * add used ports cache and filter used ports when looking for ports * fix port randomizer * Apply suggestions from code review Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * fix some reviews * use weights for random port and remove more-itertools * MultiServer, customserver: cache: rename module * fix net_connections not working on macOS * MultiServer: fix Windows compatibility (ArchipelagoMW#6010) * rename variables and functions * lazy init `get_used_ports` * change `game_ports` to be `tuple` * fix last_used_ports not being updated locally * fix random choices and move game_port conversion into tuple * Apply suggestions from code review Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * use a named tuple on parse_game_ports * only use ranges * do it the duck way * this should check all usable ports before failing * fix while loop * add return type to weighted random * Docs: Better document state.locations_checked (ArchipelagoMW#6018) * Update WebHostLib/customserver.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * simplify tuple conversion check * add tests * reformat file and change `create_random_port_socket` test * add more test cases for parse_game_ports * MM2: Fix /request command help (ArchipelagoMW#5805) * MLSS: Fix client auto-connect bug + Client cleanup (ArchipelagoMW#5895) * FF1: Added manifest (ArchipelagoMW#5911) * OoT: change setup-guides to have 2.10 be the minimum version recommended (ArchipelagoMW#5799) * Pokemon Emerald: Fix rare fuzzer errors (ArchipelagoMW#5914) * Shivers: Adds Manifest File (ArchipelagoMW#5918) * OOT: UTC deprecation warning fix (ArchipelagoMW#5983) * Saving Princess: add manifest (ArchipelagoMW#6008) * Lingo: Add archipelago.json (ArchipelagoMW#6017) * Mega Man 3: Implement new game (ArchipelagoMW#5237) * Stardew Valley: morel doesn't spawn in fall secret woods (ArchipelagoMW#6003) * try to prevent busy-looping on create random port socket when doing test * simplify parse game port tests to one assertListEqual * make the range lesser for port test * reduce range on macOS * Docs: Don't serve non-static files in example_nginx.conf (ArchipelagoMW#5971) * Docs: Don't serve non-static files in example_nginx.conf `try_files` will serve the file as long as it exists, which means I could `GET /autolauncher.py` and be served the file. * Use root instead of alias, add route for favicon * Update deploy/example_nginx.conf * Apply suggestions from code review Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update WebHostLib/customserver.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Lingo: Fix logic for Near Eight Painting (ArchipelagoMW#6014) * Apply suggestions from code review Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * remove unused import * Update WebHostLib/customserver.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * use generator expressions * The Messenger: Universal Tracker support (ArchipelagoMW#5344) * Test: Defaults for Options test (ArchipelagoMW#5428) * Muse Dash: Adds 3 new music packs plus fixes being able to roll songs without a legal way to obtain them (ArchipelagoMW#5698) * Fix missing } in example_nginx.conf (ArchipelagoMW#6027) * Pokemon Emerald: Dexsanity Encounter Type Option (ArchipelagoMW#6016) --------- Co-authored-by: Bryce Wilson <gyroscope15@gmail.com> * Dark Souls 3: Update location descriptions for Red Tearstone Ring and Hood of Prayer (ArchipelagoMW#5602) RTSR's description was incorrect and Hood of Prayer was missing its description * TUNIC: Refactor entrance hint generation (ArchipelagoMW#5620) * Refactor hint generation * Remove debug print * Early out per qwint's comment * WebHost: Update UTC datetime usage (timezone-naive) (ArchipelagoMW#4906) * Saving Princess: Security fixes for issues detected by Bandit (ArchipelagoMW#6013) * Saving Princess: absolute paths on suprocess.run * Saving Princess: more error handling for downloads * Saving Princess: rework launch_command setting Apparently subprocess.Popen requires a list for args instead of a string everywhere but in Windows, so the change was preventing the game from running on Linux. Additionally, the game is now launched using absolute paths. * Saving Princess: prevent bandit warnings * Saving Princess: remove unnecessary compare_digest * Saving Princess: fix Linux paths by using which * Saving Princess: rename launch command setting Previously, launch_command held a string. Now it holds a list of strings. Additionally, the defaults have changed. To prevent the wrong type from being used, the setting has been renamed, effectively abandoning the original launch_command setting. * Saving Princess: fix Linux default command return type Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: Add references to running from source (ArchipelagoMW#6022) * Docs: Update plando_en.md with item group example (ArchipelagoMW#6024) * Update plando_en.md with item group example Added example YAML block for item placement using an item group, including recommendation of use of `true` value with item groups to avoid unintended behaviors, with an example of the same. Adjustments more than welcome! * Made clarifying revision to description of Generator handling of item groups Clarified the behavior of the Generator regarding item creation when item groups are used in plando. * Tests: fix race in test hosting shutdown (ArchipelagoMW#5987) * WebHost: add stats show cli command (ArchipelagoMW#5995) Usage: flask -A "WebHost:get_app()" stats show Currently only shows sum and top10 biggest games packages. * LttP: add manifest (ArchipelagoMW#6005) * RoR2: Seekers of the Storm (SOTS) DLC Support (ArchipelagoMW#5569) * Core: Make Generic ER only consider the current world in isolation (ArchipelagoMW#4680) * DS3: Use remaining_fill instead of custom fill (ArchipelagoMW#4397) --------- Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com> * Docs: Reword 'could be generated from json' to avoid encouraging slow world loads (ArchipelagoMW#5960) * Mark WebHost as beta --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Lexipherous <jasonnlelong@gmail.com> Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com> Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com> Co-authored-by: Morgan <morgan07kelley@gmail.com> Co-authored-by: Louis M <prog@tioui.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> Co-authored-by: GreenMarco <71452195+GreenMarco@users.noreply.github.com> Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> Co-authored-by: soopercool101 <soopercoolstages@gmail.com> Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com> Co-authored-by: mechanicset <22198918+mechanicset@users.noreply.github.com> Co-authored-by: jamesbrq <jamesbrq@gmail.com> Co-authored-by: PIEisFANTASTIC <49802408+PIEisFANTASTIC@users.noreply.github.com> Co-authored-by: James White <james_white_d@hotmail.com> Co-authored-by: ScorelessPine <scorelesspine@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ian Robinson <drtchops@users.noreply.github.com> Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> Co-authored-by: earthor1 <earthor1@gmail.com> Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> Co-authored-by: CodeGorilla <just.a.smith@att.net> Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com> Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Co-authored-by: josephwhite <22449090+josephwhite@users.noreply.github.com> Co-authored-by: Scipio Wright <scipiowright@gmail.com> Co-authored-by: agilbert1412 <alexgilbert@yahoo.com> Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com> Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: alwaysintreble <mmmcheese158@gmail.com> Co-authored-by: PoryGone <98504756+PoryGone@users.noreply.github.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com> Co-authored-by: BroOtti <35010852+BroOtti@users.noreply.github.com> Co-authored-by: Ixrec <ericrhitchcock@gmail.com> Co-authored-by: DrAwesome4333 <22409322+DrAwesome4333@users.noreply.github.com> Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> Co-authored-by: Chris W <trezc0@gmx.de> Co-authored-by: Ishigh1 <bonjour940@yahoo.fr> Co-authored-by: Uriel <imurx@proton.me> Co-authored-by: Suyooo <chrspangler@gmx.de> Co-authored-by: Rosalie <61372066+Rosalie-A@users.noreply.github.com> Co-authored-by: StripesOO7 <54711792+StripesOO7@users.noreply.github.com> Co-authored-by: Bryce Wilson <gyroscope15@gmail.com> Co-authored-by: GodlFire <46984098+GodlFire@users.noreply.github.com> Co-authored-by: LeonarthCG <33758848+LeonarthCG@users.noreply.github.com> Co-authored-by: Star Rauchenberger <fefferburbia@gmail.com> Co-authored-by: Noa Aarts <itepastra@gmail.com> Co-authored-by: Remy Jette <remy@remyjette.com> Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com> Co-authored-by: Justus Lind <DeamonHunter@users.noreply.github.com> Co-authored-by: Goo-Dang <pado879@gmail.com> Co-authored-by: Matthew Wells <91291346+richarm4@users.noreply.github.com> Co-authored-by: Gryphonlady <gryphonlady1@gmail.com> Co-authored-by: Rjosephson <ryandj67@hotmail.com>
* 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 <57900059+NewSoupVi@users.noreply.github.com> * Multiserver: remove dead code (ArchipelagoMW#5831) * Core: replace the eval in OptionsCreator.py (ArchipelagoMW#5828) * Satisfactory: Fix typo in GoalSelection possible values description comment (ArchipelagoMW#5826) * WebHost: Fix world sorting in /tutorial/ (ArchipelagoMW#5785) * customserver: don't set last_activity that will be overwritten later (ArchipelagoMW#5844) * Factorio: fix inverted condition in victory requirements (ArchipelagoMW#5647) * The Messenger: Fix lambda capture issue in add_closed_portal_reqs (ArchipelagoMW#5816) * Super Mario Land 2: Fix Goal Logic (ArchipelagoMW#5781) * TUNIC: Fix region for the grass by the West Garden portal (ArchipelagoMW#5784) * Core: Change image link to relative (ArchipelagoMW#5802) * Shapez: Change image links to relative (ArchipelagoMW#5803) * Noita: Fix filling Shop Item locations without updating item.location (ArchipelagoMW#5840) In single-player multiworlds with small item pools, Noita was manually placing some items into Shop Item locations, but was only setting location.item, and not also setting item.location so that the item and location refer to one another. This has been fixed by using the MultiWorld.push_item() helper method to place the items instead of manually placing the items. * Core: Add `.apignore` format to not include files in APWorld Builder (ArchipelagoMW#5779) * Timespinner: Align Lantern Logic (ArchipelagoMW#5562) * FFMQ: Update link to upstream rando (ArchipelagoMW#5838) * SC2: fix supreme logic hole (ArchipelagoMW#5768) * sc2: Fixing a discrepancy between slot data and logic where story tech would not be granted for supreme if zerg was not a selected race. * sc2: Fixed an issue where Kinetic Blast was not listed as a vanilla Kerrigan ability * sc2: Fixing some functions that could force Kerrigan items into the pool when playing Kerriganless * sc2: excluding zerg excludes hots for vanilla-like mission order * Preprocessing options * Moving general empty selection handling to option preprocessing * Adding a unit test for empty race/campaign selection * sc2: Properly handling non-raceswapped campaigns when excluding campaigns based on race exclusions * sc2: Adding an explicit error message if a user excludes all missions in a way with no obvious resolution * Core: fix bug with missing help text (ArchipelagoMW#5632) Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * APQuest: Explain game_name and supports_uri more in components.py (ArchipelagoMW#5759) * APQuest: Explain game_name and supports_uri more in components.py Hopefully this can lead to more games implementing support for the "click on slot name -> everything launches automatically" functionality. * Update components.py * Update components.py * LADX: no pickle (ArchipelagoMW#5849) * Core: Bump version from 0.6.6 to 0.6.7 (ArchipelagoMW#5851) * Docs: add dev FAQ for 'should I start with the APWorld or the client?' (ArchipelagoMW#5716) * Docs: add dev FAQ for 'should I start with the APWorld or the client?' * fix indentation of bullet point wrapped lines * use %20 for spaces in links * link to adding games.md and add #ap-modding-help to adding games.md * make APQuest a link * also linkify 'run a local server' * reword the 'judging client is easier' point to reflect a broader range of first-timers * move the 'not 100%' point into the introductory sentences, and tweak related wording * correct link * Docs: define and explain the trade-off of "local" vs "remote" items (ArchipelagoMW#5718) * first draft * second draft * fix indentation of bullet point wrapped lines * move quote * explicitly discuss all three item handling flags, since the start inventory one is easily forgotten * rewrite to avoid a 'debate between two camps' framing * tweak the wording to allow for the possibility that some games can 'just' do both local and remote items without exposing this detail to the player * relative links * Docs: explicitly document why get_filler_item_name may return non-IC.filler items, despite its name (ArchipelagoMW#5747) * Docs: explicitly document why get_filler_item_name may return non-IC.filler items, despite its name * reword * apply Scipio's rewordings * Update worlds/AutoWorld.py Co-authored-by: qwint <qwint.42@gmail.com> * any --------- Co-authored-by: qwint <qwint.42@gmail.com> * Docs: Show that Data is optional for bounces ArchipelagoMW#5794 * Core: Add Pymem to requirements.txt (ArchipelagoMW#5855) As to not break custom worlds when Jak & Daxter moves from PyMem to PyMemoryEditor * Super Mario 64: Add painting passability as items (ArchipelagoMW#5294) * LADX: fix improved additional warps (ArchipelagoMW#5858) * ModuleUpdate: Add explicit error when above max supported version (ArchipelagoMW#5868) * Update messages and check * Make "official" error message show up for 3.14 * Core: Give clearer error message for invalid .apworld zip (ArchipelagoMW#5871) * Update messages and check * Make "official" error message show up for 3.14 * Add zip error handling * Small cleanups * KH2: Deathlink and ingame item popups (ArchipelagoMW#5206) --------- Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: Delilah <lindsaydiane@gmail.com> * Doc: WebHost: update readme and style guide (ArchipelagoMW#4853) * Doc: WebHost living standard * Docs: update style guide for HTML, CSS and JS * Unblame phar * Too many words * The better choice * More rules * Removed too much * Docs: add recommendations for script defer and async * Docs: Explain building a single world with Build APWorlds component (ArchipelagoMW#5879) * Doc: Reword required python version for AP (ArchipelagoMW#5822) Many many people have read this and then installed 3.14, so it clearly needs rewording. * FFMQ: Fix Collect/Remove Asymmetry (ArchipelagoMW#5253) * TLOZ: Move completion condition to be before set_rules is complete (ArchipelagoMW#5391) * AHIT: Add option to shuffle Battle of the Birds director tokens and time bonus pickups (ArchipelagoMW#5400) * [WebHost Docs] Updated and clarified new tracker endpoitns and misc fixes. (ArchipelagoMW#5475) * Adding json/python to codeblocks to make it pretty, fixed spelling mistakes, swapped uuids for suuids in the examples, and expanded on /tracker and /static_tracker, and /slot_data_tracker giving the details of the API calls endpoints * Add in API Cacheing timers and related text blurb * updated for merged edit to /static_tracker * Removed timer from /datapackage/checksum * Docs (DS3): Fix the documentation for the Simple Early Bosses option (ArchipelagoMW#5856) * Docs (DS3): Fix the documentation for the Simple Early Bosses option This option changed in the client a while ago, but we forgot to update the server. * Update Options.py * Docs: KH1 more troubleshooting and clearer nomenclature (ArchipelagoMW#5872) * updated kh1 docs * second pass * tweak * Update worlds/kh1/docs/kh1_en.md Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com> * Update worlds/kh1/docs/kh1_en.md Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com> * Update worlds/kh1/docs/kh1_en.md Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com> * semicolon --------- Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com> * Fix, OptionsCreator: export options on Linux (ArchipelagoMW#5774) * Core/Utils: Use correct env for save_filename from AppImage * OptionsCreator: run export on a separate thread Running a blocking call from kivy misbehaves on Linux. This also changes '*.yaml' to '.yaml' for Utils.save_filename, which is the correct way to call it. * Core/Utils: destroy Tk root after save/open_filename This allows using those functions from multiple threads. Note that pure Tk apps should not use those functions from Utils. * OptionsCreator: show snack when save_filename fails * OptionsCreator: disable window while exporting * OptionsCreator: fixing typing of added stuff * Core: Fix some typing errors (ArchipelagoMW#4995) * Fix some type errors in Generate and Options * Add type parameter to new hint and fix whitespace errors * Update identifier style * Jak and Daxter: Replace Pymem, Add Linux Support (ArchipelagoMW#5850) * Replace pymem with PyMemoryEditor (nonworking) * Add back pymem for faster windows address searching. * Replace other uses of pymem, parameterize executable names. * Updated to add linux and potential MacOS support to launching gk and … (ArchipelagoMW#84) * Updated to add linux and potential MacOS support to launching gk and goalc. Still needs tested on MacOS. * Switched to using x-terminal-emulator instead of trying to find gnome-terminal or konsole Made argument building for suprocessing goalc easier to read Fixed OS X support to use osascript instead of attempting to run Terminal directly * Changed Terminal usage to use Archipelago's Launh utility, which handles terminal launching for me for both linux and OS X * Added try/except to re-connect the memory process. The process file/id changes over time on linux, and this works to re-connect without needing to restart * Removed Unsetting env var in favor of reporting to the source authors * Putting PyMemoryEditor local. (ArchipelagoMW#85) * Putting PyMemoryEditor local --------- Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com> * Fixing minor problems (ArchipelagoMW#87) * Refactor away circular launcher import. * Push latest PyMemoryEditor scan utility (ArchipelagoMW#91) Co-authored-by: Louis M <Louis M> * Remove Pymem, rely solely on PyMemoryEditor. Add konsole support. * Jak 1: Remove vendored copy of PME, update imports, requirements, and manifest. * Jak 1: Prevent server connect until game is properly setup. * Jak 1: reduce REPL/Compiler confusion, small updates to setup guide. * Write hack for Konsole on AppImage to avoid OpenSSL error. * Refactor LD_LIBRARY_PATH hack. * Update worlds/jakanddaxter/agents/memory_reader.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update worlds/jakanddaxter/agents/memory_reader.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: Morgan <morgan07kelley@gmail.com> Co-authored-by: Louis M <prog@tioui.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: add spanish language for MLSS (ArchipelagoMW#5172) * Docs: add spanish language for SM64 * Docs: add spanish language for MLSS * Update worlds/mlss/docs/setup_es.md Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> * Update worlds/mlss/docs/es_Mario & Luigi Superstar Saga.md Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> --------- Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> * Docs, SM64: Remove outdated FAQ item (ArchipelagoMW#5887) It is no longer possible to connect to a multiworld game on a version of the client with this bug, as all versions with this bug report AP v0.3.5 or less * TWW: Support launcher command line arguments (ArchipelagoMW#5806) * Support launcher command line arguments * Use `launch` instead of `launch_subprocess` * Remove old runner code * Satisfactory: Update Universal Tracker Method for FinalElevatorPhase Option (ArchipelagoMW#5812) * MLSS: Add Manifest + Minor Bugfixes (ArchipelagoMW#5728) * Remove outdated header change for ROM verification * Update Connections to be compatible with python ver. 3.8 * Update inno_setup.iss * Update inno_setup.iss * Merge branch 'main' of https://github.com/jamesbrq/ArchipelagoMainMLSS * Add Manifest + Minor Bugfixes * Even further safeguards for Oho Oasis Temples * Update basepatch.bsdiff * KH2: Add a new "CasualBounties" Setting (ArchipelagoMW#4877) * KH2: casual bounties option * Casual Bounty: Adjust level bounty logic to correspond with max level check setting * Bugfix: We have one less possible bounty with corresponding level bounty logic * Casual Bounty: Move option to better spot * Bugfix: Prevent possible .remove() crash * Revert "Bugfix: We have one less possible bounty with corresponding level bounty logic" This reverts commit 3c929e0. * Bugfix: Typo in conditional * Casual Bounties: Remove Scar, add MCP I knew I was missing one second visit fight and Scar shouldn't be there he's a first visit * Casual Bounties: Add some clarity to the CasualBounty setting * Docs: Update docs to reflect new CasualBounty setting * KH2: Add bounty locations as location groups Feedback on this needed, trying to do this to make it work with the code above the additions made it so the game generated 1 less item than locations, despite linking properly It does function as intended though * KH2: Update docs * KH2: Add SuperBosses, Cups, AtlanticaToggle and SummonLevelLocationToggle to slot data (ArchipelagoMW#5708) * Add SuperBosses, Cups and AtlanticaToggle * Add SummonLevelLocationToggle * Core: Add SDL_MOUSE_FOCUS_CLICKTHROUGH=1 environment variable to kvui (ArchipelagoMW#5804) This variable should fix the 'double click' required when trying to interact with buttons on an unfocused window * SC2: Bump protobuf from 6.31.1 to 6.33.5 in /worlds/_sc2common (ArchipelagoMW#5890) Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 6.31.1 to 6.33.5. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Commits](https://github.com/protocolbuffers/protobuf/commits) --- updated-dependencies: - dependency-name: protobuf dependency-version: 6.33.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Core, Tests: allow Archipelago items in all worlds (ArchipelagoMW#5893) * Core: Add rule builder (ArchipelagoMW#5048) * initial commit of rules engine * implement most of the stuff * add docs and fill out rest of the functionality * add in explain functions * dedupe items and add more docs * pr feedback and optimization updates * Self is not in typing on 3.10 * fix test * Update docs/rule builder.md Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> * pr feedback * love it when CI gives me different results than local * add composition with bitwise and and or * strongly typed option filtering * skip resolving location parent region * update docs * update typing and add decorator * add string explains * move simplify code to world * add wrapper rule * I may need to abandon the generic typing * missing space for faris * fix hashing for resolved rules * thank u typing extensions ilu * remove bad cacheable check * add decorator to assign hash and rule name * more type crimes... * region access rules are now cached * break compatibility so new features work * update docs * replace decorators with __init_subclass__ * ok now the frozen dataclass is automatic * one more type fix for the road * small fixes and caching tests * play nicer with tests * ok actually fix the tests * add item_mapping for faris * add more state helpers as rules * fix has from list rules * fix can reach location caching and add set completion condition * fix can reach entrance caching * implement HasGroup and HasGroupUnique * add more tests and fix some bugs * Add name arg to create_entrance Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * fix json dumping option filters * restructure and test serialization * add prop to disable caching * switch to __call__ and revert access_rule changes * update docs and make edge cases match * ruff has lured me into a false sense of security * also unused * fix disabling caching * move filter function to filter class * add more docs * tests for explain functions * Update docs/rule builder.md Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * chore: Strip out uses of TYPE_CHECKING as much as possible * chore: add empty webworld for test * chore: optimize rule evaluations * remove getattr from hot code paths * testing new cache flags * only clear cache for rules cached as false in collect * update test for new behaviour * do not have rules inherit from each other * update docs on caching * fix name of attribute * make explain messages more colorful * fix issue with combining rules with different options * add convenience functions for filtering * use an operator with higher precedence * name conflicts less with optionfilter * move simplify and instance caching code * update docs * kill resolve_rule * kill true_rule and false_rule * move helpers to base classes * update docs * I really should finish all of my * fix test * rename mixin * fix typos * refactor rule builder into folder for better imports * update docs * do not dupe collectionrule * docs review feedback * missed a file * remove rule_caching_enabled from base World * update docs on caching * shuffle around some docs * use option instead of option.value * add in operator and more testing * rm World = object * test fixes * move cache to logic mixin * keep test rule builder world out of global registry * todone * call register_dependencies automatically * move register deps call to call_single * add filtered_resolution * allow bool opts on filters * fix serialization tests * allow reverse operations --------- Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * Core: Throw OptionError for option type Toggle in certain scenarios (ArchipelagoMW#5874) * Throw OptionError for option type Toggle in certain scenarios * Adding missing space to Options.py Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> --------- Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> * Utils: Improvements to visualize_regions for debugging GER usage (ArchipelagoMW#4685) * Improvements to visualize_regions for debugging GER usage - allow the user to pass in a dict[int, int] to visualize_regions that maps Entrance.randomization_group to a color in RGB form. This allows for better visualization of which dangling entrances should match, or which matching groups are not being correctly respected. - do full region visualization for unreached regions, so that entrances that could connect to new regions can be visualized. - visualize unconnected entrances on regions, in addition to connected and unconnected exits, so that available ER targets can be visualized as well * Add detail_disconnected_regions parameter to visualize_regions * Rename detail_disconnected_regions to detail_other_regions for consistency * Add auto_assign_colors param to visualize_regions * Make auto assignment of entrance colors deterministic * Assume show_other_regions is true if detail_other_regions is true * Remove unused random import * whitespace adjustments * Move overflow check to prevent potential infinite loop It wasn't exactly likely, as the user would have had to manually define all 4096 colors and then need an additional color on top of that, but accounting for that kind of nonsense is easy enough in this case. * positive condition --------- Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com> * APQuest: Improve the auto-generated .gitignore for data/sounds (ArchipelagoMW#5670) I didn't quite think this through: In this specific case, you want the gitignore to also ignore itself, since it itself is an auto-generated file. * Webhost: Fix defaults for NamedRange and TextChoice (ArchipelagoMW#5139) * TUNIC: Depriority for some items (ArchipelagoMW#5589) * Stardew Valley: 7.x.x - The Jojapocalypse Update (ArchipelagoMW#5432) Major Content update for Stardew Valley ### Features - New BundleRandomization Value: Meme Bundles - Over 100 custom bundles, designed to be jokes, references, trolls, etc - New Setting: Bundles Per Room modifier - New Setting: Backpack Size - New Setting: Secretsanity - Checks for triggering easter eggs and secrets - New Setting: Moviesanity - Checks for watching movies and sharing snacks with Villagers - New Setting: Eatsanity - Checks for eating items - New Setting: Hatsanity - Checks for wearing Hats - New Setting: Start Without - Allows you to select any combination of various "starting" items, that you will actually not start with. Notably, tools, backpack slots, Day5 unlocks, etc. - New Setting: Allowed Filler Items - Allows you to customize the filler items you'll get - New Setting: Endgame Locations - Checks for various expensive endgame tasks and purchases - New Shipsanity value: Crops and Fish - New Settings: Jojapocalypse and settings to customize it - Bundle Plando: Replaced with BundleWhitelist and BundleBlacklist, for more customization freedom - Added a couple of Host.yaml settings to help hosts allow or ban specific difficult settings that could cause problems if the people don't know what they are signing up for. Plus a truckload of improvements on the mod side, not seen in this PR. ### Removed features - Integration for Stardew Valley Expanded. It is simply disabled, the code is all still there, but I'm extremely tired of providing tech support for it, plus Stardew Valley 1.7 was announced and that will break it again, so I'm done. When a maintainer steps up, it can be re-enabled. * CommonClient: actually close the UI on /exit (ArchipelagoMW#5860) * Aquaria: Adding a lots of options and one check (ArchipelagoMW#4414) First, there is one check that has been added. The location is "Sitting on the throne before the cathedral with the crest on it" and the item is the "Opening of the Cathedral door". In Vanilla, sitting on the crested throne open the door to the cathedral. Now for the options added: - infinite_hot_soup: Make the game impossible to run out of hot soup once you got it as an item. - open_body_tongue: The body level (the ending level) is blocked by a big tongue. This option remove the tongue without having to go to the Sunken City (where it is normally removed) - maximum_ingredient_amount: In the Vanilla game, the ingredients and dishes count is limited to 8. This option make this count configurable. - skip_final_boss_3rd_form: The final boss has 5 forms. The 3rd one is long and not really challenging. So, this option is used to skip this form. - save_healing: Normally, the save points heal the player. There is also beds in the game that can heal the player. This option removed the healing from the save point and forced the player to heal using beds (or healing monsters or healing items) - no_progression_(whatever): Make this "whatever" (generally regions) exempt of progression items. Note that this is not using the exclusion-feature of AP, as these locations may still contain 'Useful' items. It is only guaranteed that no 'Progression' and 'Progression_Skip_Balancing'-items will appear in these regions. This option does not remove locations. I did not exclude or completely remove the regions because I don't have enough location to put every useful item in the game. There is also 2 new goals: - Four gods: The goal is obtained when the player beat the four gods (this is something like half the game). Useful to have quicker runs - Gods and Creator: Like the Four Gods run, but when the four gods are obtained, that open a transportation turtle to the final boss (the Creator) and the player have to beat the final boss to obtain the goal. Note that for the 2 new goals, all locations from the last 4 areas (Abyss, Frozen Veil, Sunken City and The Body) are completely removed (not just excluded). * Launcher: generate templates for option presets (ArchipelagoMW#5062) * Doc: running from source and building on Linux (ArchipelagoMW#5881) * CI: make the comment in 'Build' more verbose * Doc: add Linux running from source and build instructions * Doc: fix name in running from source on Linux * Update docs/running from source.md Co-authored-by: qwint <qwint.42@gmail.com> --------- Co-authored-by: qwint <qwint.42@gmail.com> * core: If a user specifies --no-gui, don't show GUI messageboxes (ArchipelagoMW#5514) * move `gui_enabled` to Utils * docstring * If a user specified no-gui, don't use GUI messageboxes --------- Co-authored-by: alwaysintreble <mmmcheese158@gmail.com> * Launcher: run init_logging before importing from worlds (ArchipelagoMW#5402) * WebHost: Better document config loading fallback (ArchipelagoMW#5948) * change functionality to follow comment * revert code change and explicitly document intent * Celeste (Open World): v1.0.7 Logic Fixes (ArchipelagoMW#5827) ### Logic Fixes: - Old Site A - Logic now allows for going backwards from the `Awake` checkpoint - Golden Ridge A - `Golden Strawberry` now requires `Moving Platforms` as it should - Mirror Temple A - `Room b-01c Strawberry` and `Room b-10 Strawberry` no longer erroneously require `Red Boosters` - `Golden Strawberry` now requires `Dash Refills` as it should - Reflection A - Logic now allows for going backwards from the `Reflection` checkpoint - Reflection B - Logic now allows for going backwards from the `Reflection` checkpoint - Farewell - `Power Source Key 2` now logically requires `Dash Switches` and `Double Dash Refills` as it should * Rule Builder: Make region.connect and add_event support rule builder (ArchipelagoMW#5933) * make region.connect and add_event support rule builder * fix test * oops fix * update tests and typing * rm unused * Options: support "random" and variations for OptionSet with defined valid_keys (ArchipelagoMW#4418) * seemingly works? needs testing * attempt docs update * move to verify resolution (keep?) * account for no valid keys and "random" being passed * Update advanced_settings_en.md * Update Options.py Co-authored-by: qwint <qwint.42@gmail.com> * Update Options.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * unify random handling between range and set * Update Options.py * Update Options.py * Update Options.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * super is weird * fix item/location * remove groups from options * unittest * pep8 * Update Options.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Update Options.py --------- Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Core: Add missing args to rule builder inits (ArchipelagoMW#5912) * add filtered_resolution to inits * update from_dict calls too * Saving Princess: Fix each slot sharing the same `music_table` (ArchipelagoMW#5952) `music_table` was initialized on the `SavingPrincessWorld` *class*, so was being shared by each Saving Princess slot in the multiworld. This has been fixed by initializing the `music_table` attribute on each `SavingPrincessWorld` *instance* in `generate_early()` instead. * HK: Fix cached filler item names persisting between generations (ArchipelagoMW#5950) HK's `get_filler_item_name` was writing lists into a ClassVar[dict] on the `HKWorld` class. This dict would not be cleaned out between generations on the same process, leaving behind cached data from previous generations. I confirmed the issue when running single-slot generations on a local webhost, where `self.cached_filler_items` could be already populated during `HKWorld.__init__()`. This has been fixed by putting an individual cache list on each HKWorld instance, instead of a shared cached on the class. * Factorio: Update Download Image in guides (ArchipelagoMW#5953) * Docs: Replace the 'true filler' weasel words in adding games.md's mention of get_filler_item_name() (ArchipelagoMW#5958) * replace the 'true filler' weasel words with a clear term defined by the linked method's docstring * Update docs/adding games.md Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Core: Better scaling explicit indirect conditions (ArchipelagoMW#4582) * Core: Better scaling explicit indirect conditions When the number of connections to retry was large and `queue` was large `new_entrance not in queue` would get slow. For the average supported world, the difference this change makes is negligible. For a game like Blasphemous, with a lot of explicit indirect conditions, generation of 10 template Blasphemous yamls with `--skip_output --seed 1` and progression balancing disabled went from 19.0s to 17.9s (5.9% reduction in generation duration). * Create a new variable for the new set created from the intersection * WebHost: memory leak fixes (ArchipelagoMW#5966) * ALTTP: remove `world: MultiWorld` and typing (ArchipelagoMW#5974) * WebHost: Add CORS headers to API Endpoints (ArchipelagoMW#5777) * Return new state man (Vi's note: I have chosen not to change this title) (ArchipelagoMW#5978) * The Messenger: minor maintenance (ArchipelagoMW#5965) * CI: upgrade InnoSetup to 6.7.0 (ArchipelagoMW#5979) * MultiServer: don't keep multidata alive for race_mode (ArchipelagoMW#5980) * Fix(undertale): prevent massive bounce msg spam for position updates (ArchipelagoMW#5990) * fix(undertale): prevent massive bounce msg spam for position updates * make sure player is removed on leaving / timing out * do not check for tags: online, as bounce evaluation is or'd * Core: use typing_extensions `deprecated` (ArchipelagoMW#5989) * Undertale: Use check_locations helper to avoid redundant sends (ArchipelagoMW#5993) * Core: allow async def functions as commands (ArchipelagoMW#5859) * Core: introduce finalize_multiworld and pre_output stages (ArchipelagoMW#5700) Co-authored-by: Ishigh1 <bonjour940@yahoo.fr> Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * MultiServer: graceful shutdown for ctrl+c and sigterm (ArchipelagoMW#5996) * OptionCreator: 0.6.6 reported issues (ArchipelagoMW#5949) * MultiServer: fix Windows compatibility (ArchipelagoMW#6010) * Docs: Better document state.locations_checked (ArchipelagoMW#6018) * MM2: Fix /request command help (ArchipelagoMW#5805) * MLSS: Fix client auto-connect bug + Client cleanup (ArchipelagoMW#5895) * FF1: Added manifest (ArchipelagoMW#5911) * OoT: change setup-guides to have 2.10 be the minimum version recommended (ArchipelagoMW#5799) * Pokemon Emerald: Fix rare fuzzer errors (ArchipelagoMW#5914) * Shivers: Adds Manifest File (ArchipelagoMW#5918) * OOT: UTC deprecation warning fix (ArchipelagoMW#5983) * Saving Princess: add manifest (ArchipelagoMW#6008) * Lingo: Add archipelago.json (ArchipelagoMW#6017) * Mega Man 3: Implement new game (ArchipelagoMW#5237) * Stardew Valley: morel doesn't spawn in fall secret woods (ArchipelagoMW#6003) * Docs: Don't serve non-static files in example_nginx.conf (ArchipelagoMW#5971) * Docs: Don't serve non-static files in example_nginx.conf `try_files` will serve the file as long as it exists, which means I could `GET /autolauncher.py` and be served the file. * Use root instead of alias, add route for favicon * Update deploy/example_nginx.conf * Lingo: Fix logic for Near Eight Painting (ArchipelagoMW#6014) * The Messenger: Universal Tracker support (ArchipelagoMW#5344) * Test: Defaults for Options test (ArchipelagoMW#5428) * Muse Dash: Adds 3 new music packs plus fixes being able to roll songs without a legal way to obtain them (ArchipelagoMW#5698) * Fix missing } in example_nginx.conf (ArchipelagoMW#6027) * Pokemon Emerald: Dexsanity Encounter Type Option (ArchipelagoMW#6016) --------- Co-authored-by: Bryce Wilson <gyroscope15@gmail.com> * Dark Souls 3: Update location descriptions for Red Tearstone Ring and Hood of Prayer (ArchipelagoMW#5602) RTSR's description was incorrect and Hood of Prayer was missing its description * TUNIC: Refactor entrance hint generation (ArchipelagoMW#5620) * Refactor hint generation * Remove debug print * Early out per qwint's comment * WebHost: Update UTC datetime usage (timezone-naive) (ArchipelagoMW#4906) * Saving Princess: Security fixes for issues detected by Bandit (ArchipelagoMW#6013) * Saving Princess: absolute paths on suprocess.run * Saving Princess: more error handling for downloads * Saving Princess: rework launch_command setting Apparently subprocess.Popen requires a list for args instead of a string everywhere but in Windows, so the change was preventing the game from running on Linux. Additionally, the game is now launched using absolute paths. * Saving Princess: prevent bandit warnings * Saving Princess: remove unnecessary compare_digest * Saving Princess: fix Linux paths by using which * Saving Princess: rename launch command setting Previously, launch_command held a string. Now it holds a list of strings. Additionally, the defaults have changed. To prevent the wrong type from being used, the setting has been renamed, effectively abandoning the original launch_command setting. * Saving Princess: fix Linux default command return type Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: Add references to running from source (ArchipelagoMW#6022) * Docs: Update plando_en.md with item group example (ArchipelagoMW#6024) * Update plando_en.md with item group example Added example YAML block for item placement using an item group, including recommendation of use of `true` value with item groups to avoid unintended behaviors, with an example of the same. Adjustments more than welcome! * Made clarifying revision to description of Generator handling of item groups Clarified the behavior of the Generator regarding item creation when item groups are used in plando. * Tests: fix race in test hosting shutdown (ArchipelagoMW#5987) * WebHost: add stats show cli command (ArchipelagoMW#5995) Usage: flask -A "WebHost:get_app()" stats show Currently only shows sum and top10 biggest games packages. * LttP: add manifest (ArchipelagoMW#6005) * RoR2: Seekers of the Storm (SOTS) DLC Support (ArchipelagoMW#5569) * Core: Make Generic ER only consider the current world in isolation (ArchipelagoMW#4680) * DS3: Use remaining_fill instead of custom fill (ArchipelagoMW#4397) --------- Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com> * Docs: Reword 'could be generated from json' to avoid encouraging slow world loads (ArchipelagoMW#5960) * KH2: Fix nondeterministic generation when CasualBounties is enabled (ArchipelagoMW#5967) When CasualBounties was enabled, the location names in `exclusion_table["HitlistCasual"]` would be iterated into `self.random_super_boss_list` in `generate_early`, but `exclusion_table["HitlistCasual"]` was a `set`, so its iteration order would vary on each generation, even with same seed. Random location names would be picked from `self.random_super_boss_list` to place Bounty items at, so different locations could be picked on each generation with the same seed. `exclusion_table["Hitlist"]` is similar and was already a `list`, avoiding the issue of nondeterministic iteration order, so `exclusion_table["HitlistCasual"]` has been changed to a `list` to match. * Fixed some JSON typing issues that prevented these files from loading. * Removing these files, as they are no longer necessary. * Re-worked init a bit to load all json tables as a class var, then create the various other required class vars included location/item groupings. * Creating the first option, which only has one setting currently of default gamemode. * Created a name tuple, which may house multiple different requirement paths we can take, including gold, xp, etc. Only considers items for now. Created a requirement build function that applies currently to regions in more things are added to requirement named tuple in the future. * Default Forager webworld that is setup based on the type of game it is (grassFlowers). * Core: Update .gitignore to include an exe setup.py downloads (ArchipelagoMW#6031) * CommonClient: Add explicit message for connection timeout (ArchipelagoMW#5842) * Change timeout and add timeout-specific message * Revert open_timeout * Webhost: port reuse fix & configurable max room timeout (ArchipelagoMW#6033) * WebHost: make autolauncher max room timeout configurable * WebHost: launch rooms with assigned port first * Fix required progression for items to create the required amount of progression tools. * Add the required level to goal as an instance var we can call/update later. Added the options data class and object to ForagerWorld as well. * Create new rules file, move logical rules to be in that file for entrances/locations. Updated Regions/Init accordingly. * Left some more TODO's to fill in when im not sleepy. * Created LevelGroup enum for various level groups. Added those to the regions to be created and created their region_access requirements. * Items now have the classification on the item directly, allowing easier builds of item types. * Updated item names/id get functions to reflect new items.json * Updated item names/id get functions to reflect new items.json * Updated load tables to return the proper output. * Opted to store item_class_sets in a dict * Removed old lands.json and updated itemslands to only include land grounds/smaller lands within those groups. * Update forager regions to use new islands name. * Correctly output values from load_tables and introduce new item_class_sets. * Updating all locations to be made. Made Locations.json include the regions they need to be created in. * Added Locations to have a list of required items as well. * Added a can_make_royal function. * Updated can_make_royal * Added can_make_cosmic_steel. * Added can_make_nuclear Created logic for tools * Removed progressive item requirements, as the items made will be independent of the items in game. * For locations, get the id only from the loc_id map. * Correctly get Location Levels. * Correctly get Location Levels. * Level, not Levels... * Pass the right values from enum. * Ensure locations are actually added in their games properly. Added ForagerLocation which was removed at some point... :( * Re-add menu region now that everything works as intended. * Moved Forager Item creation to its own file. * Game str not set correctly. * ensure lands are connected properly. correctly call set_rules. * Make enums without the .name property * Factorio: only show fluid boxes on assembling machine 1 when the selected recipe needs fluids (ArchipelagoMW#5412) * Loop through and create only the required of level counts per the player's settings. Once the required level is made, make a victory event item and break the loop. * Avoid making Seals and Relics for now. * Add the completion condition. * V1 of location logic, may not be appplying right as playthrough is empty. * Ensure V1 of useful items are created as well. * Updated Progressive Books to be required in level regions. Void Steel requires 6 progressive swords. Left comments about match case names to remind us without having to open regions.py. * Removed Basic Backpack * Grab only the tools and fix an access rule on SecondGroup. * Ensure Location rules are probably being added. * Force rods to be useful for now * Add a backup of items that have the original designed classification. Added a filter in json_tables to not load "backup_" files. * Forced a bunch of skills to be filler instead of Progression. * Required a few more skills to be required for a few regions. * Core: other resources guide (ArchipelagoMW#6043) Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com> * Removed Cooking as progression item. Forces Combat and Industry for Desert * Create items with their proper itemclassification. * Collapsed some of the rules onto the region definition directly. * Ensure that level locations are always being created. * Adjusting some skills where they would most likely be required. * Fixed entrances being created in the correct order and the items_required rule adding the player argument correctly. * Opened up Grass/Desert Regions again to avoid forcing early items (as some locations can still allow you to get things without much work. * Removed Geology as hard required. Pushed it to useful instead. * Ensure other types of filler are picked. * Shovels do not require farming. * Leather does not require combat, but void will. * Added Industry to several required bottled locations. * Industry forced to be an early item * Shovel, Bow, and Wallet are now useful. * Split Clothing and Steel into two separate checks. * Introduce Royal Clothing region. * Locations properly added to Royal Clothing. Plastic properly added to require royal clothing not royal steel. * Create region Royal Clothing * Rule Builder: Fix count resolution when Oring HasAnyCount (ArchipelagoMW#6048) * Added events to assert an order of when upgrades can be made. * More items set to useful/filler. * Removed un-necessary items for Void Steel, as previous region required them. * the S in Craftsmanship is important * Fixed forager rules to properly require the right sets of items. Created a debug function to prevent various sets of items that may be required but for now, passes various scenarios in testing so it was removed. * Fixed create_item to properly search and return the item as expected. Added UT support in preparation for some testing. * Fix filler items to properly be created. * Add RequiredLevel as an option. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Benny D <78334662+benny-dreamly@users.noreply.github.com> Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Co-authored-by: James White <james_white_d@hotmail.com> Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com> Co-authored-by: Rob B <computerguy440+gh@gmail.com> Co-authored-by: Remy Jette <remy@remyjette.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> Co-authored-by: lepideble <147614625+lepideble@users.noreply.github.com> Co-authored-by: Scrungip <95324612+Scrungip@users.noreply.github.com> Co-authored-by: Scipio Wright <scipiowright@gmail.com> Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> Co-authored-by: Colin <32756996+TriumphantBass@users.noreply.github.com> Co-authored-by: wildham <64616385+wildham0@users.noreply.github.com> Co-authored-by: Phaneros <31861583+MatthewMarinets@users.noreply.github.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com> Co-authored-by: Ixrec <ericrhitchcock@gmail.com> Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com> Co-authored-by: Will Morrow <duh102@duh102.org> Co-authored-by: threeandthreee <a.l.nordstrom@gmail.com> Co-authored-by: JaredWeakStrike <96694163+JaredWeakStrike@users.noreply.github.com> Co-authored-by: Delilah <lindsaydiane@gmail.com> Co-authored-by: PlatanoBailando <13842799+cjmang@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> Co-authored-by: Rosalie <61372066+Rosalie-A@users.noreply.github.com> Co-authored-by: CookieCat <81494827+CookieCat45@users.noreply.github.com> Co-authored-by: Jacob Lewis <JacobMLewis@Live.com> Co-authored-by: Natalie Weizenbaum <nex342@gmail.com> Co-authored-by: Omnises Nihilis <OmnisGamers@gmail.com> Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com> Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com> Co-authored-by: Morgan <morgan07kelley@gmail.com> Co-authored-by: Louis M <prog@tioui.com> Co-authored-by: GreenMarco <71452195+GreenMarco@users.noreply.github.com> Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> Co-authored-by: soopercool101 <soopercoolstages@gmail.com> Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com> Co-authored-by: mechanicset <22198918+mechanicset@users.noreply.github.com> Co-authored-by: jamesbrq <jamesbrq@gmail.com> Co-authored-by: PIEisFANTASTIC <49802408+PIEisFANTASTIC@users.noreply.github.com> Co-authored-by: ScorelessPine <scorelesspine@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ian Robinson <drtchops@users.noreply.github.com> Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> Co-authored-by: earthor1 <earthor1@gmail.com> Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> Co-authored-by: CodeGorilla <just.a.smith@att.net> Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com> Co-authored-by: josephwhite <22449090+josephwhite@users.noreply.github.com> Co-authored-by: agilbert1412 <alexgilbert@yahoo.com> Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com> Co-authored-by: alwaysintreble <mmmcheese158@gmail.com> Co-authored-by: PoryGone <98504756+PoryGone@users.noreply.github.com> Co-authored-by: BroOtti <35010852+BroOtti@users.noreply.github.com> Co-authored-by: DrAwesome4333 <22409322+DrAwesome4333@users.noreply.github.com> Co-authored-by: Chris W <trezc0@gmx.de> Co-authored-by: Ishigh1 <bonjour940@yahoo.fr> Co-authored-by: Suyooo <chrspangler@gmx.de> Co-authored-by: StripesOO7 <54711792+StripesOO7@users.noreply.github.com> Co-authored-by: Bryce Wilson <gyroscope15@gmail.com> Co-authored-by: GodlFire <46984098+GodlFire@users.noreply.github.com> Co-authored-by: LeonarthCG <33758848+LeonarthCG@users.noreply.github.com> Co-authored-by: Star Rauchenberger <fefferburbia@gmail.com> Co-authored-by: Noa Aarts <itepastra@gmail.com> Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com> Co-authored-by: Justus Lind <DeamonHunter@users.noreply.github.com> Co-authored-by: Goo-Dang <pado879@gmail.com> Co-authored-by: Matthew Wells <91291346+richarm4@users.noreply.github.com> Co-authored-by: Gryphonlady <gryphonlady1@gmail.com> Co-authored-by: Rjosephson <ryandj67@hotmail.com> Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com>
* Jak and Daxter: Replace Pymem, Add Linux Support (#5850) * Replace pymem with PyMemoryEditor (nonworking) * Add back pymem for faster windows address searching. * Replace other uses of pymem, parameterize executable names. * Updated to add linux and potential MacOS support to launching gk and … (#84) * Updated to add linux and potential MacOS support to launching gk and goalc. Still needs tested on MacOS. * Switched to using x-terminal-emulator instead of trying to find gnome-terminal or konsole Made argument building for suprocessing goalc easier to read Fixed OS X support to use osascript instead of attempting to run Terminal directly * Changed Terminal usage to use Archipelago's Launh utility, which handles terminal launching for me for both linux and OS X * Added try/except to re-connect the memory process. The process file/id changes over time on linux, and this works to re-connect without needing to restart * Removed Unsetting env var in favor of reporting to the source authors * Putting PyMemoryEditor local. (#85) * Putting PyMemoryEditor local --------- Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com> * Fixing minor problems (#87) * Refactor away circular launcher import. * Push latest PyMemoryEditor scan utility (#91) Co-authored-by: Louis M <Louis M> * Remove Pymem, rely solely on PyMemoryEditor. Add konsole support. * Jak 1: Remove vendored copy of PME, update imports, requirements, and manifest. * Jak 1: Prevent server connect until game is properly setup. * Jak 1: reduce REPL/Compiler confusion, small updates to setup guide. * Write hack for Konsole on AppImage to avoid OpenSSL error. * Refactor LD_LIBRARY_PATH hack. * Update worlds/jakanddaxter/agents/memory_reader.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update worlds/jakanddaxter/agents/memory_reader.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: Morgan <morgan07kelley@gmail.com> Co-authored-by: Louis M <prog@tioui.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: add spanish language for MLSS (#5172) * Docs: add spanish language for SM64 * Docs: add spanish language for MLSS * Update worlds/mlss/docs/setup_es.md Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> * Update worlds/mlss/docs/es_Mario & Luigi Superstar Saga.md Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> --------- Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> * Docs, SM64: Remove outdated FAQ item (#5887) It is no longer possible to connect to a multiworld game on a version of the client with this bug, as all versions with this bug report AP v0.3.5 or less * TWW: Support launcher command line arguments (#5806) * Support launcher command line arguments * Use `launch` instead of `launch_subprocess` * Remove old runner code * Satisfactory: Update Universal Tracker Method for FinalElevatorPhase Option (#5812) * MLSS: Add Manifest + Minor Bugfixes (#5728) * Remove outdated header change for ROM verification * Update Connections to be compatible with python ver. 3.8 * Update inno_setup.iss * Update inno_setup.iss * Merge branch 'main' of https://github.com/jamesbrq/ArchipelagoMainMLSS * Add Manifest + Minor Bugfixes * Even further safeguards for Oho Oasis Temples * Update basepatch.bsdiff * KH2: Add a new "CasualBounties" Setting (#4877) * KH2: casual bounties option * Casual Bounty: Adjust level bounty logic to correspond with max level check setting * Bugfix: We have one less possible bounty with corresponding level bounty logic * Casual Bounty: Move option to better spot * Bugfix: Prevent possible .remove() crash * Revert "Bugfix: We have one less possible bounty with corresponding level bounty logic" This reverts commit 3c929e00db910a176d9d882b6cc08494417177d2. * Bugfix: Typo in conditional * Casual Bounties: Remove Scar, add MCP I knew I was missing one second visit fight and Scar shouldn't be there he's a first visit * Casual Bounties: Add some clarity to the CasualBounty setting * Docs: Update docs to reflect new CasualBounty setting * KH2: Add bounty locations as location groups Feedback on this needed, trying to do this to make it work with the code above the additions made it so the game generated 1 less item than locations, despite linking properly It does function as intended though * KH2: Update docs * KH2: Add SuperBosses, Cups, AtlanticaToggle and SummonLevelLocationToggle to slot data (#5708) * Add SuperBosses, Cups and AtlanticaToggle * Add SummonLevelLocationToggle * Core: Add SDL_MOUSE_FOCUS_CLICKTHROUGH=1 environment variable to kvui (#5804) This variable should fix the 'double click' required when trying to interact with buttons on an unfocused window * SC2: Bump protobuf from 6.31.1 to 6.33.5 in /worlds/_sc2common (#5890) Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 6.31.1 to 6.33.5. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Commits](https://github.com/protocolbuffers/protobuf/commits) --- updated-dependencies: - dependency-name: protobuf dependency-version: 6.33.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Core, Tests: allow Archipelago items in all worlds (#5893) * Core: Add rule builder (#5048) * initial commit of rules engine * implement most of the stuff * add docs and fill out rest of the functionality * add in explain functions * dedupe items and add more docs * pr feedback and optimization updates * Self is not in typing on 3.10 * fix test * Update docs/rule builder.md Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> * pr feedback * love it when CI gives me different results than local * add composition with bitwise and and or * strongly typed option filtering * skip resolving location parent region * update docs * update typing and add decorator * add string explains * move simplify code to world * add wrapper rule * I may need to abandon the generic typing * missing space for faris * fix hashing for resolved rules * thank u typing extensions ilu * remove bad cacheable check * add decorator to assign hash and rule name * more type crimes... * region access rules are now cached * break compatibility so new features work * update docs * replace decorators with __init_subclass__ * ok now the frozen dataclass is automatic * one more type fix for the road * small fixes and caching tests * play nicer with tests * ok actually fix the tests * add item_mapping for faris * add more state helpers as rules * fix has from list rules * fix can reach location caching and add set completion condition * fix can reach entrance caching * implement HasGroup and HasGroupUnique * add more tests and fix some bugs * Add name arg to create_entrance Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * fix json dumping option filters * restructure and test serialization * add prop to disable caching * switch to __call__ and revert access_rule changes * update docs and make edge cases match * ruff has lured me into a false sense of security * also unused * fix disabling caching * move filter function to filter class * add more docs * tests for explain functions * Update docs/rule builder.md Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * chore: Strip out uses of TYPE_CHECKING as much as possible * chore: add empty webworld for test * chore: optimize rule evaluations * remove getattr from hot code paths * testing new cache flags * only clear cache for rules cached as false in collect * update test for new behaviour * do not have rules inherit from each other * update docs on caching * fix name of attribute * make explain messages more colorful * fix issue with combining rules with different options * add convenience functions for filtering * use an operator with higher precedence * name conflicts less with optionfilter * move simplify and instance caching code * update docs * kill resolve_rule * kill true_rule and false_rule * move helpers to base classes * update docs * I really should finish all of my * fix test * rename mixin * fix typos * refactor rule builder into folder for better imports * update docs * do not dupe collectionrule * docs review feedback * missed a file * remove rule_caching_enabled from base World * update docs on caching * shuffle around some docs * use option instead of option.value * add in operator and more testing * rm World = object * test fixes * move cache to logic mixin * keep test rule builder world out of global registry * todone * call register_dependencies automatically * move register deps call to call_single * add filtered_resolution * allow bool opts on filters * fix serialization tests * allow reverse operations --------- Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * Core: Throw OptionError for option type Toggle in certain scenarios (#5874) * Throw OptionError for option type Toggle in certain scenarios * Adding missing space to Options.py Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> --------- Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> * Utils: Improvements to visualize_regions for debugging GER usage (#4685) * Improvements to visualize_regions for debugging GER usage - allow the user to pass in a dict[int, int] to visualize_regions that maps Entrance.randomization_group to a color in RGB form. This allows for better visualization of which dangling entrances should match, or which matching groups are not being correctly respected. - do full region visualization for unreached regions, so that entrances that could connect to new regions can be visualized. - visualize unconnected entrances on regions, in addition to connected and unconnected exits, so that available ER targets can be visualized as well * Add detail_disconnected_regions parameter to visualize_regions * Rename detail_disconnected_regions to detail_other_regions for consistency * Add auto_assign_colors param to visualize_regions * Make auto assignment of entrance colors deterministic * Assume show_other_regions is true if detail_other_regions is true * Remove unused random import * whitespace adjustments * Move overflow check to prevent potential infinite loop It wasn't exactly likely, as the user would have had to manually define all 4096 colors and then need an additional color on top of that, but accounting for that kind of nonsense is easy enough in this case. * positive condition --------- Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com> * APQuest: Improve the auto-generated .gitignore for data/sounds (#5670) I didn't quite think this through: In this specific case, you want the gitignore to also ignore itself, since it itself is an auto-generated file. * Webhost: Fix defaults for NamedRange and TextChoice (#5139) * TUNIC: Depriority for some items (#5589) * Stardew Valley: 7.x.x - The Jojapocalypse Update (#5432) Major Content update for Stardew Valley ### Features - New BundleRandomization Value: Meme Bundles - Over 100 custom bundles, designed to be jokes, references, trolls, etc - New Setting: Bundles Per Room modifier - New Setting: Backpack Size - New Setting: Secretsanity - Checks for triggering easter eggs and secrets - New Setting: Moviesanity - Checks for watching movies and sharing snacks with Villagers - New Setting: Eatsanity - Checks for eating items - New Setting: Hatsanity - Checks for wearing Hats - New Setting: Start Without - Allows you to select any combination of various "starting" items, that you will actually not start with. Notably, tools, backpack slots, Day5 unlocks, etc. - New Setting: Allowed Filler Items - Allows you to customize the filler items you'll get - New Setting: Endgame Locations - Checks for various expensive endgame tasks and purchases - New Shipsanity value: Crops and Fish - New Settings: Jojapocalypse and settings to customize it - Bundle Plando: Replaced with BundleWhitelist and BundleBlacklist, for more customization freedom - Added a couple of Host.yaml settings to help hosts allow or ban specific difficult settings that could cause problems if the people don't know what they are signing up for. Plus a truckload of improvements on the mod side, not seen in this PR. ### Removed features - Integration for Stardew Valley Expanded. It is simply disabled, the code is all still there, but I'm extremely tired of providing tech support for it, plus Stardew Valley 1.7 was announced and that will break it again, so I'm done. When a maintainer steps up, it can be re-enabled. * CommonClient: actually close the UI on /exit (#5860) * Aquaria: Adding a lots of options and one check (#4414) First, there is one check that has been added. The location is "Sitting on the throne before the cathedral with the crest on it" and the item is the "Opening of the Cathedral door". In Vanilla, sitting on the crested throne open the door to the cathedral. Now for the options added: - infinite_hot_soup: Make the game impossible to run out of hot soup once you got it as an item. - open_body_tongue: The body level (the ending level) is blocked by a big tongue. This option remove the tongue without having to go to the Sunken City (where it is normally removed) - maximum_ingredient_amount: In the Vanilla game, the ingredients and dishes count is limited to 8. This option make this count configurable. - skip_final_boss_3rd_form: The final boss has 5 forms. The 3rd one is long and not really challenging. So, this option is used to skip this form. - save_healing: Normally, the save points heal the player. There is also beds in the game that can heal the player. This option removed the healing from the save point and forced the player to heal using beds (or healing monsters or healing items) - no_progression_(whatever): Make this "whatever" (generally regions) exempt of progression items. Note that this is not using the exclusion-feature of AP, as these locations may still contain 'Useful' items. It is only guaranteed that no 'Progression' and 'Progression_Skip_Balancing'-items will appear in these regions. This option does not remove locations. I did not exclude or completely remove the regions because I don't have enough location to put every useful item in the game. There is also 2 new goals: - Four gods: The goal is obtained when the player beat the four gods (this is something like half the game). Useful to have quicker runs - Gods and Creator: Like the Four Gods run, but when the four gods are obtained, that open a transportation turtle to the final boss (the Creator) and the player have to beat the final boss to obtain the goal. Note that for the 2 new goals, all locations from the last 4 areas (Abyss, Frozen Veil, Sunken City and The Body) are completely removed (not just excluded). * Launcher: generate templates for option presets (#5062) * Doc: running from source and building on Linux (#5881) * CI: make the comment in 'Build' more verbose * Doc: add Linux running from source and build instructions * Doc: fix name in running from source on Linux * Update docs/running from source.md Co-authored-by: qwint <qwint.42@gmail.com> --------- Co-authored-by: qwint <qwint.42@gmail.com> * core: If a user specifies --no-gui, don't show GUI messageboxes (#5514) * move `gui_enabled` to Utils * docstring * If a user specified no-gui, don't use GUI messageboxes --------- Co-authored-by: alwaysintreble <mmmcheese158@gmail.com> * Launcher: run init_logging before importing from worlds (#5402) * WebHost: Better document config loading fallback (#5948) * change functionality to follow comment * revert code change and explicitly document intent * Celeste (Open World): v1.0.7 Logic Fixes (#5827) ### Logic Fixes: - Old Site A - Logic now allows for going backwards from the `Awake` checkpoint - Golden Ridge A - `Golden Strawberry` now requires `Moving Platforms` as it should - Mirror Temple A - `Room b-01c Strawberry` and `Room b-10 Strawberry` no longer erroneously require `Red Boosters` - `Golden Strawberry` now requires `Dash Refills` as it should - Reflection A - Logic now allows for going backwards from the `Reflection` checkpoint - Reflection B - Logic now allows for going backwards from the `Reflection` checkpoint - Farewell - `Power Source Key 2` now logically requires `Dash Switches` and `Double Dash Refills` as it should * Rule Builder: Make region.connect and add_event support rule builder (#5933) * make region.connect and add_event support rule builder * fix test * oops fix * update tests and typing * rm unused * Options: support "random" and variations for OptionSet with defined valid_keys (#4418) * seemingly works? needs testing * attempt docs update * move to verify resolution (keep?) * account for no valid keys and "random" being passed * Update advanced_settings_en.md * Update Options.py Co-authored-by: qwint <qwint.42@gmail.com> * Update Options.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * unify random handling between range and set * Update Options.py * Update Options.py * Update Options.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * super is weird * fix item/location * remove groups from options * unittest * pep8 * Update Options.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Update Options.py --------- Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Core: Add missing args to rule builder inits (#5912) * add filtered_resolution to inits * update from_dict calls too * Saving Princess: Fix each slot sharing the same `music_table` (#5952) `music_table` was initialized on the `SavingPrincessWorld` *class*, so was being shared by each Saving Princess slot in the multiworld. This has been fixed by initializing the `music_table` attribute on each `SavingPrincessWorld` *instance* in `generate_early()` instead. * HK: Fix cached filler item names persisting between generations (#5950) HK's `get_filler_item_name` was writing lists into a ClassVar[dict] on the `HKWorld` class. This dict would not be cleaned out between generations on the same process, leaving behind cached data from previous generations. I confirmed the issue when running single-slot generations on a local webhost, where `self.cached_filler_items` could be already populated during `HKWorld.__init__()`. This has been fixed by putting an individual cache list on each HKWorld instance, instead of a shared cached on the class. * Factorio: Update Download Image in guides (#5953) * Docs: Replace the 'true filler' weasel words in adding games.md's mention of get_filler_item_name() (#5958) * replace the 'true filler' weasel words with a clear term defined by the linked method's docstring * Update docs/adding games.md Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Core: Better scaling explicit indirect conditions (#4582) * Core: Better scaling explicit indirect conditions When the number of connections to retry was large and `queue` was large `new_entrance not in queue` would get slow. For the average supported world, the difference this change makes is negligible. For a game like Blasphemous, with a lot of explicit indirect conditions, generation of 10 template Blasphemous yamls with `--skip_output --seed 1` and progression balancing disabled went from 19.0s to 17.9s (5.9% reduction in generation duration). * Create a new variable for the new set created from the intersection * WebHost: memory leak fixes (#5966) * ALTTP: remove `world: MultiWorld` and typing (#5974) * WebHost: Add CORS headers to API Endpoints (#5777) * Return new state man (Vi's note: I have chosen not to change this title) (#5978) * The Messenger: minor maintenance (#5965) * CI: upgrade InnoSetup to 6.7.0 (#5979) * MultiServer: don't keep multidata alive for race_mode (#5980) * Fix(undertale): prevent massive bounce msg spam for position updates (#5990) * fix(undertale): prevent massive bounce msg spam for position updates * make sure player is removed on leaving / timing out * do not check for tags: online, as bounce evaluation is or'd * Core: use typing_extensions `deprecated` (#5989) * Undertale: Use check_locations helper to avoid redundant sends (#5993) * Core: allow async def functions as commands (#5859) * Core: introduce finalize_multiworld and pre_output stages (#5700) Co-authored-by: Ishigh1 <bonjour940@yahoo.fr> Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * MultiServer: graceful shutdown for ctrl+c and sigterm (#5996) * OptionCreator: 0.6.6 reported issues (#5949) * MultiServer: fix Windows compatibility (#6010) * Docs: Better document state.locations_checked (#6018) * MM2: Fix /request command help (#5805) * MLSS: Fix client auto-connect bug + Client cleanup (#5895) * FF1: Added manifest (#5911) * OoT: change setup-guides to have 2.10 be the minimum version recommended (#5799) * Pokemon Emerald: Fix rare fuzzer errors (#5914) * Shivers: Adds Manifest File (#5918) * OOT: UTC deprecation warning fix (#5983) * Saving Princess: add manifest (#6008) * Lingo: Add archipelago.json (#6017) * Mega Man 3: Implement new game (#5237) * Stardew Valley: morel doesn't spawn in fall secret woods (#6003) * Docs: Don't serve non-static files in example_nginx.conf (#5971) * Docs: Don't serve non-static files in example_nginx.conf `try_files` will serve the file as long as it exists, which means I could `GET /autolauncher.py` and be served the file. * Use root instead of alias, add route for favicon * Update deploy/example_nginx.conf * Lingo: Fix logic for Near Eight Painting (#6014) * The Messenger: Universal Tracker support (#5344) * Test: Defaults for Options test (#5428) * Muse Dash: Adds 3 new music packs plus fixes being able to roll songs without a legal way to obtain them (#5698) * Fix missing } in example_nginx.conf (#6027) * Pokemon Emerald: Dexsanity Encounter Type Option (#6016) --------- Co-authored-by: Bryce Wilson <gyroscope15@gmail.com> * Dark Souls 3: Update location descriptions for Red Tearstone Ring and Hood of Prayer (#5602) RTSR's description was incorrect and Hood of Prayer was missing its description * TUNIC: Refactor entrance hint generation (#5620) * Refactor hint generation * Remove debug print * Early out per qwint's comment * WebHost: Update UTC datetime usage (timezone-naive) (#4906) * Saving Princess: Security fixes for issues detected by Bandit (#6013) * Saving Princess: absolute paths on suprocess.run * Saving Princess: more error handling for downloads * Saving Princess: rework launch_command setting Apparently subprocess.Popen requires a list for args instead of a string everywhere but in Windows, so the change was preventing the game from running on Linux. Additionally, the game is now launched using absolute paths. * Saving Princess: prevent bandit warnings * Saving Princess: remove unnecessary compare_digest * Saving Princess: fix Linux paths by using which * Saving Princess: rename launch command setting Previously, launch_command held a string. Now it holds a list of strings. Additionally, the defaults have changed. To prevent the wrong type from being used, the setting has been renamed, effectively abandoning the original launch_command setting. * Saving Princess: fix Linux default command return type Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: Add references to running from source (#6022) * Docs: Update plando_en.md with item group example (#6024) * Update plando_en.md with item group example Added example YAML block for item placement using an item group, including recommendation of use of `true` value with item groups to avoid unintended behaviors, with an example of the same. Adjustments more than welcome! * Made clarifying revision to description of Generator handling of item groups Clarified the behavior of the Generator regarding item creation when item groups are used in plando. * Tests: fix race in test hosting shutdown (#5987) * WebHost: add stats show cli command (#5995) Usage: flask -A "WebHost:get_app()" stats show Currently only shows sum and top10 biggest games packages. * LttP: add manifest (#6005) * RoR2: Seekers of the Storm (SOTS) DLC Support (#5569) * Core: Make Generic ER only consider the current world in isolation (#4680) * DS3: Use remaining_fill instead of custom fill (#4397) --------- Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com> * Docs: Reword 'could be generated from json' to avoid encouraging slow world loads (#5960) * Update ffx-rc to AP 0.6.7-RC1 (#111) * Added ability to define custom port ranges the WebHost will use for game servers, instead of pure random. * - Added better fallback to default port range when a custom range fails - Updated config to be clearer * Added ability to define custom port ranges the WebHost will use for game servers, instead of pure random. * - Added better fallback to default port range when a custom range fails - Updated config to be clearer * Updated soft-fail message * Removed dead import from customserver.py * Update requirements.txt Settings requirements to main core branch * Jak and Daxter: Replace Pymem, Add Linux Support (#5850) * Replace pymem with PyMemoryEditor (nonworking) * Add back pymem for faster windows address searching. * Replace other uses of pymem, parameterize executable names. * Updated to add linux and potential MacOS support to launching gk and … (#84) * Updated to add linux and potential MacOS support to launching gk and goalc. Still needs tested on MacOS. * Switched to using x-terminal-emulator instead of trying to find gnome-terminal or konsole Made argument building for suprocessing goalc easier to read Fixed OS X support to use osascript instead of attempting to run Terminal directly * Changed Terminal usage to use Archipelago's Launh utility, which handles terminal launching for me for both linux and OS X * Added try/except to re-connect the memory process. The process file/id changes over time on linux, and this works to re-connect without needing to restart * Removed Unsetting env var in favor of reporting to the source authors * Putting PyMemoryEditor local. (#85) * Putting PyMemoryEditor local --------- Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com> * Fixing minor problems (#87) * Refactor away circular launcher import. * Push latest PyMemoryEditor scan utility (#91) Co-authored-by: Louis M <Louis M> * Remove Pymem, rely solely on PyMemoryEditor. Add konsole support. * Jak 1: Remove vendored copy of PME, update imports, requirements, and manifest. * Jak 1: Prevent server connect until game is properly setup. * Jak 1: reduce REPL/Compiler confusion, small updates to setup guide. * Write hack for Konsole on AppImage to avoid OpenSSL error. * Refactor LD_LIBRARY_PATH hack. * Update worlds/jakanddaxter/agents/memory_reader.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update worlds/jakanddaxter/agents/memory_reader.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: Morgan <morgan07kelley@gmail.com> Co-authored-by: Louis M <prog@tioui.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: add spanish language for MLSS (#5172) * Docs: add spanish language for SM64 * Docs: add spanish language for MLSS * Update worlds/mlss/docs/setup_es.md Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> * Update worlds/mlss/docs/es_Mario & Luigi Superstar Saga.md Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> --------- Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> * Docs, SM64: Remove outdated FAQ item (#5887) It is no longer possible to connect to a multiworld game on a version of the client with this bug, as all versions with this bug report AP v0.3.5 or less * TWW: Support launcher command line arguments (#5806) * Support launcher command line arguments * Use `launch` instead of `launch_subprocess` * Remove old runner code * Satisfactory: Update Universal Tracker Method for FinalElevatorPhase Option (#5812) * MLSS: Add Manifest + Minor Bugfixes (#5728) * Remove outdated header change for ROM verification * Update Connections to be compatible with python ver. 3.8 * Update inno_setup.iss * Update inno_setup.iss * Merge branch 'main' of https://github.com/jamesbrq/ArchipelagoMainMLSS * Add Manifest + Minor Bugfixes * Even further safeguards for Oho Oasis Temples * Update basepatch.bsdiff * KH2: Add a new "CasualBounties" Setting (#4877) * KH2: casual bounties option * Casual Bounty: Adjust level bounty logic to correspond with max level check setting * Bugfix: We have one less possible bounty with corresponding level bounty logic * Casual Bounty: Move option to better spot * Bugfix: Prevent possible .remove() crash * Revert "Bugfix: We have one less possible bounty with corresponding level bounty logic" This reverts commit 3c929e00db910a176d9d882b6cc08494417177d2. * Bugfix: Typo in conditional * Casual Bounties: Remove Scar, add MCP I knew I was missing one second visit fight and Scar shouldn't be there he's a first visit * Casual Bounties: Add some clarity to the CasualBounty setting * Docs: Update docs to reflect new CasualBounty setting * KH2: Add bounty locations as location groups Feedback on this needed, trying to do this to make it work with the code above the additions made it so the game generated 1 less item than locations, despite linking properly It does function as intended though * KH2: Update docs * KH2: Add SuperBosses, Cups, AtlanticaToggle and SummonLevelLocationToggle to slot data (#5708) * Add SuperBosses, Cups and AtlanticaToggle * Add SummonLevelLocationToggle * Core: Add SDL_MOUSE_FOCUS_CLICKTHROUGH=1 environment variable to kvui (#5804) This variable should fix the 'double click' required when trying to interact with buttons on an unfocused window * SC2: Bump protobuf from 6.31.1 to 6.33.5 in /worlds/_sc2common (#5890) Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 6.31.1 to 6.33.5. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Commits](https://github.com/protocolbuffers/protobuf/commits) --- updated-dependencies: - dependency-name: protobuf dependency-version: 6.33.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Core, Tests: allow Archipelago items in all worlds (#5893) * Core: Add rule builder (#5048) * initial commit of rules engine * implement most of the stuff * add docs and fill out rest of the functionality * add in explain functions * dedupe items and add more docs * pr feedback and optimization updates * Self is not in typing on 3.10 * fix test * Update docs/rule builder.md Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> * pr feedback * love it when CI gives me different results than local * add composition with bitwise and and or * strongly typed option filtering * skip resolving location parent region * update docs * update typing and add decorator * add string explains * move simplify code to world * add wrapper rule * I may need to abandon the generic typing * missing space for faris * fix hashing for resolved rules * thank u typing extensions ilu * remove bad cacheable check * add decorator to assign hash and rule name * more type crimes... * region access rules are now cached * break compatibility so new features work * update docs * replace decorators with __init_subclass__ * ok now the frozen dataclass is automatic * one more type fix for the road * small fixes and caching tests * play nicer with tests * ok actually fix the tests * add item_mapping for faris * add more state helpers as rules * fix has from list rules * fix can reach location caching and add set completion condition * fix can reach entrance caching * implement HasGroup and HasGroupUnique * add more tests and fix some bugs * Add name arg to create_entrance Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * fix json dumping option filters * restructure and test serialization * add prop to disable caching * switch to __call__ and revert access_rule changes * update docs and make edge cases match * ruff has lured me into a false sense of security * also unused * fix disabling caching * move filter function to filter class * add more docs * tests for explain functions * Update docs/rule builder.md Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * chore: Strip out uses of TYPE_CHECKING as much as possible * chore: add empty webworld for test * chore: optimize rule evaluations * remove getattr from hot code paths * testing new cache flags * only clear cache for rules cached as false in collect * update test for new behaviour * do not have rules inherit from each other * update docs on caching * fix name of attribute * make explain messages more colorful * fix issue with combining rules with different options * add convenience functions for filtering * use an operator with higher precedence * name conflicts less with optionfilter * move simplify and instance caching code * update docs * kill resolve_rule * kill true_rule and false_rule * move helpers to base classes * update docs * I really should finish all of my * fix test * rename mixin * fix typos * refactor rule builder into folder for better imports * update docs * do not dupe collectionrule * docs review feedback * missed a file * remove rule_caching_enabled from base World * update docs on caching * shuffle around some docs * use option instead of option.value * add in operator and more testing * rm World = object * test fixes * move cache to logic mixin * keep test rule builder world out of global registry * todone * call register_dependencies automatically * move register deps call to call_single * add filtered_resolution * allow bool opts on filters * fix serialization tests * allow reverse operations --------- Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * Core: Throw OptionError for option type Toggle in certain scenarios (#5874) * Throw OptionError for option type Toggle in certain scenarios * Adding missing space to Options.py Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> --------- Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> * Utils: Improvements to visualize_regions for debugging GER usage (#4685) * Improvements to visualize_regions for debugging GER usage - allow the user to pass in a dict[int, int] to visualize_regions that maps Entrance.randomization_group to a color in RGB form. This allows for better visualization of which dangling entrances should match, or which matching groups are not being correctly respected. - do full region visualization for unreached regions, so that entrances that could connect to new regions can be visualized. - visualize unconnected entrances on regions, in addition to connected and unconnected exits, so that available ER targets can be visualized as well * Add detail_disconnected_regions parameter to visualize_regions * Rename detail_disconnected_regions to detail_other_regions for consistency * Add auto_assign_colors param to visualize_regions * Make auto assignment of entrance colors deterministic * Assume show_other_regions is true if detail_other_regions is true * Remove unused random import * whitespace adjustments * Move overflow check to prevent potential infinite loop It wasn't exactly likely, as the user would have had to manually define all 4096 colors and then need an additional color on top of that, but accounting for that kind of nonsense is easy enough in this case. * positive condition --------- Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com> * APQuest: Improve the auto-generated .gitignore for data/sounds (#5670) I didn't quite think this through: In this specific case, you want the gitignore to also ignore itself, since it itself is an auto-generated file. * Webhost: Fix defaults for NamedRange and TextChoice (#5139) * TUNIC: Depriority for some items (#5589) * Stardew Valley: 7.x.x - The Jojapocalypse Update (#5432) Major Content update for Stardew Valley ### Features - New BundleRandomization Value: Meme Bundles - Over 100 custom bundles, designed to be jokes, references, trolls, etc - New Setting: Bundles Per Room modifier - New Setting: Backpack Size - New Setting: Secretsanity - Checks for triggering easter eggs and secrets - New Setting: Moviesanity - Checks for watching movies and sharing snacks with Villagers - New Setting: Eatsanity - Checks for eating items - New Setting: Hatsanity - Checks for wearing Hats - New Setting: Start Without - Allows you to select any combination of various "starting" items, that you will actually not start with. Notably, tools, backpack slots, Day5 unlocks, etc. - New Setting: Allowed Filler Items - Allows you to customize the filler items you'll get - New Setting: Endgame Locations - Checks for various expensive endgame tasks and purchases - New Shipsanity value: Crops and Fish - New Settings: Jojapocalypse and settings to customize it - Bundle Plando: Replaced with BundleWhitelist and BundleBlacklist, for more customization freedom - Added a couple of Host.yaml settings to help hosts allow or ban specific difficult settings that could cause problems if the people don't know what they are signing up for. Plus a truckload of improvements on the mod side, not seen in this PR. ### Removed features - Integration for Stardew Valley Expanded. It is simply disabled, the code is all still there, but I'm extremely tired of providing tech support for it, plus Stardew Valley 1.7 was announced and that will break it again, so I'm done. When a maintainer steps up, it can be re-enabled. * CommonClient: actually close the UI on /exit (#5860) * Aquaria: Adding a lots of options and one check (#4414) First, there is one check that has been added. The location is "Sitting on the throne before the cathedral with the crest on it" and the item is the "Opening of the Cathedral door". In Vanilla, sitting on the crested throne open the door to the cathedral. Now for the options added: - infinite_hot_soup: Make the game impossible to run out of hot soup once you got it as an item. - open_body_tongue: The body level (the ending level) is blocked by a big tongue. This option remove the tongue without having to go to the Sunken City (where it is normally removed) - maximum_ingredient_amount: In the Vanilla game, the ingredients and dishes count is limited to 8. This option make this count configurable. - skip_final_boss_3rd_form: The final boss has 5 forms. The 3rd one is long and not really challenging. So, this option is used to skip this form. - save_healing: Normally, the save points heal the player. There is also beds in the game that can heal the player. This option removed the healing from the save point and forced the player to heal using beds (or healing monsters or healing items) - no_progression_(whatever): Make this "whatever" (generally regions) exempt of progression items. Note that this is not using the exclusion-feature of AP, as these locations may still contain 'Useful' items. It is only guaranteed that no 'Progression' and 'Progression_Skip_Balancing'-items will appear in these regions. This option does not remove locations. I did not exclude or completely remove the regions because I don't have enough location to put every useful item in the game. There is also 2 new goals: - Four gods: The goal is obtained when the player beat the four gods (this is something like half the game). Useful to have quicker runs - Gods and Creator: Like the Four Gods run, but when the four gods are obtained, that open a transportation turtle to the final boss (the Creator) and the player have to beat the final boss to obtain the goal. Note that for the 2 new goals, all locations from the last 4 areas (Abyss, Frozen Veil, Sunken City and The Body) are completely removed (not just excluded). * Launcher: generate templates for option presets (#5062) * Doc: running from source and building on Linux (#5881) * CI: make the comment in 'Build' more verbose * Doc: add Linux running from source and build instructions * Doc: fix name in running from source on Linux * Update docs/running from source.md Co-authored-by: qwint <qwint.42@gmail.com> --------- Co-authored-by: qwint <qwint.42@gmail.com> * core: If a user specifies --no-gui, don't show GUI messageboxes (#5514) * move `gui_enabled` to Utils * docstring * If a user specified no-gui, don't use GUI messageboxes --------- Co-authored-by: alwaysintreble <mmmcheese158@gmail.com> * Launcher: run init_logging before importing from worlds (#5402) * WebHost: Better document config loading fallback (#5948) * change functionality to follow comment * revert code change and explicitly document intent * Celeste (Open World): v1.0.7 Logic Fixes (#5827) ### Logic Fixes: - Old Site A - Logic now allows for going backwards from the `Awake` checkpoint - Golden Ridge A - `Golden Strawberry` now requires `Moving Platforms` as it should - Mirror Temple A - `Room b-01c Strawberry` and `Room b-10 Strawberry` no longer erroneously require `Red Boosters` - `Golden Strawberry` now requires `Dash Refills` as it should - Reflection A - Logic now allows for going backwards from the `Reflection` checkpoint - Reflection B - Logic now allows for going backwards from the `Reflection` checkpoint - Farewell - `Power Source Key 2` now logically requires `Dash Switches` and `Double Dash Refills` as it should * Rule Builder: Make region.connect and add_event support rule builder (#5933) * make region.connect and add_event support rule builder * fix test * oops fix * update tests and typing * rm unused * Options: support "random" and variations for OptionSet with defined valid_keys (#4418) * seemingly works? needs testing * attempt docs update * move to verify resolution (keep?) * account for no valid keys and "random" being passed * Update advanced_settings_en.md * Update Options.py Co-authored-by: qwint <qwint.42@gmail.com> * Update Options.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * unify random handling between range and set * Update Options.py * Update Options.py * Update Options.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * super is weird * fix item/location * remove groups from options * unittest * pep8 * Update Options.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Update Options.py --------- Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Core: Add missing args to rule builder inits (#5912) * add filtered_resolution to inits * update from_dict calls too * Saving Princess: Fix each slot sharing the same `music_table` (#5952) `music_table` was initialized on the `SavingPrincessWorld` *class*, so was being shared by each Saving Princess slot in the multiworld. This has been fixed by initializing the `music_table` attribute on each `SavingPrincessWorld` *instance* in `generate_early()` instead. * HK: Fix cached filler item names persisting between generations (#5950) HK's `get_filler_item_name` was writing lists into a ClassVar[dict] on the `HKWorld` class. This dict would not be cleaned out between generations on the same process, leaving behind cached data from previous generations. I confirmed the issue when running single-slot generations on a local webhost, where `self.cached_filler_items` could be already populated during `HKWorld.__init__()`. This has been fixed by putting an individual cache list on each HKWorld instance, instead of a shared cached on the class. * Factorio: Update Download Image in guides (#5953) * Docs: Replace the 'true filler' weasel words in adding games.md's mention of get_filler_item_name() (#5958) * replace the 'true filler' weasel words with a clear term defined by the linked method's docstring * Update docs/adding games.md Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Core: Better scaling explicit indirect conditions (#4582) * Core: Better scaling explicit indirect conditions When the number of connections to retry was large and `queue` was large `new_entrance not in queue` would get slow. For the average supported world, the difference this change makes is negligible. For a game like Blasphemous, with a lot of explicit indirect conditions, generation of 10 template Blasphemous yamls with `--skip_output --seed 1` and progression balancing disabled went from 19.0s to 17.9s (5.9% reduction in generation duration). * Create a new variable for the new set created from the intersection * WebHost: memory leak fixes (#5966) * ALTTP: remove `world: MultiWorld` and typing (#5974) * WebHost: Add CORS headers to API Endpoints (#5777) * Return new state man (Vi's note: I have chosen not to change this title) (#5978) * The Messenger: minor maintenance (#5965) * CI: upgrade InnoSetup to 6.7.0 (#5979) * MultiServer: don't keep multidata alive for race_mode (#5980) * MultiServer, customserver: move data package handling Create a new class that handles conversion worlds+embedded -> context data. Create a derived class that uses static_server_data+pony instead. There is also a not very efficient feature to deduplicate strings (may need perf testing). By moving code around, we can simplify a lot of the world loading. Where code lines were touched, some typing and some reformatting was added. The back compat for GetDataPackage without games was finally dropped. This was done as a cleanup because the refactoring touched those lines anyway. Also reworked the per-context dicts and the RoomInfo to hopefully be more efficient by ignoring unused games. (Generating the list of used games was required for the new code anyway.) Side effect of the MultiServer cache: we now load worlds lazily (but still all at once) and don't modify the games package in place. If needed we create copies. This almost gets us to the point where MultiServer doesn't need worlds - it still needs them for the forbidden items. There is a bonus optimization that deduplicates strings in name_groups that may have bad performance and may need some perf testing if we run into issues. * MultiServer: fix string deduplication in data package cache * MultiServer, customserver: minor formatting fixes * MultiServer: fix data package cache for missing checksum case * MultiServer: improve string deduplication in games package cache * customserver: handle missing checksum in datapackage cache * customserver: typing cleanup in games package cache * Test, MultiServer, customser: add tests for games package cache * Test, MultiServer: reorder imports Hopefully this fixes the random test failures with pytest-xdist * customserver: make WebHost import lazy in games package cache and fix test * customserver: games package cache: fix py3.11 compat * MultiServer, customserver: cache: typing improvements * customserver: cache: reformat * Fix(undertale): prevent massive bounce msg spam for position updates (#5990) * fix(undertale): prevent massive bounce msg spam for position updates * make sure player is removed on leaving / timing out * do not check for tags: online, as bounce evaluation is or'd * Core: use typing_extensions `deprecated` (#5989) * Test: move customserver tests to not interfere with webhost * Undertale: Use check_locations helper to avoid redundant sends (#5993) * Core: allow async def functions as commands (#5859) * Core: introduce finalize_multiworld and pre_output stages (#5700) Co-authored-by: Ishigh1 <bonjour940@yahoo.fr> Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * MultiServer: graceful shutdown for ctrl+c and sigterm (#5996) * OptionCreator: 0.6.6 reported issues (#5949) * fix what reviewers said and add some improvements * remove unused argument * try fixing test with try * use yaml lists instead of string for config * fix value type bug on ephemeral type * reuse sockets with websockets api instead of opening and closing them * add used ports cache and filter used ports when looking for ports * fix port randomizer * Apply suggestions from code review Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * fix some reviews * use weights for random port and remove more-itertools * MultiServer, customserver: cache: rename module * fix net_connections not working on macOS * MultiServer: fix Windows compatibility (#6010) * rename variables and functions * lazy init `get_used_ports` * change `game_ports` to be `tuple` * fix last_used_ports not being updated locally * fix random choices and move game_port conversion into tuple * Apply suggestions from code review Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * use a named tuple on parse_game_ports * only use ranges * do it the duck way * this should check all usable ports before failing * fix while loop * add return type to weighted random * Docs: Better document state.locations_checked (#6018) * Update WebHostLib/customserver.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * simplify tuple conversion check * add tests * reformat file and change `create_random_port_socket` test * add more test cases for parse_game_ports * MM2: Fix /request command help (#5805) * MLSS: Fix client auto-connect bug + Client cleanup (#5895) * FF1: Added manifest (#5911) * OoT: change setup-guides to have 2.10 be the minimum version recommended (#5799) * Pokemon Emerald: Fix rare fuzzer errors (#5914) * Shivers: Adds Manifest File (#5918) * OOT: UTC deprecation warning fix (#5983) * Saving Princess: add manifest (#6008) * Lingo: Add archipelago.json (#6017) * Mega Man 3: Implement new game (#5237) * Stardew Valley: morel doesn't spawn in fall secret woods (#6003) * try to prevent busy-looping on create random port socket when doing test * simplify parse game port tests to one assertListEqual * make the range lesser for port test * reduce range on macOS * Docs: Don't serve non-static files in example_nginx.conf (#5971) * Docs: Don't serve non-static files in example_nginx.conf `try_files` will serve the file as long as it exists, which means I could `GET /autolauncher.py` and be served the file. * Use root instead of alias, add route for favicon * Update deploy/example_nginx.conf * Apply suggestions from code review Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update WebHostLib/customserver.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Lingo: Fix logic for Near Eight Painting (#6014) * Apply suggestions from code review Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * remove unused import * Update WebHostLib/customserver.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * use generator expressions * The Messenger: Universal Tracker support (#5344) * Test: Defaults for Options test (#5428) * Muse Dash: Adds 3 new music packs plus fixes being able to roll songs without a legal way to obtain them (#5698) * Fix missing } in example_nginx.conf (#6027) * Pokemon Emerald: Dexsanity Encounter Type Option (#6016) --------- Co-authored-by: Bryce Wilson <gyroscope15@gmail.com> * Dark Souls 3: Update location descriptions for Red Tearstone Ring and Hood of Prayer (#5602) RTSR's description was incorrect and Hood of Prayer was missing its description * TUNIC: Refactor entrance hint generation (#5620) * Refactor hint generation * Remove debug print * Early out per qwint's comment * WebHost: Update UTC datetime usage (timezone-naive) (#4906) * Saving Princess: Security fixes for issues detected by Bandit (#6013) * Saving Princess: absolute paths on suprocess.run * Saving Princess: more error handling for downloads * Saving Princess: rework launch_command setting Apparently subprocess.Popen requires a list for args instead of a string everywhere but in Windows, so the change was preventing the game from running on Linux. Additionally, the game is now launched using absolute paths. * Saving Princess: prevent bandit warnings * Saving Princess: remove unnecessary compare_digest * Saving Princess: fix Linux paths by using which * Saving Princess: rename launch command setting Previously, launch_command held a string. Now it holds a list of strings. Additionally, the defaults have changed. To prevent the wrong type from being used, the setting has been renamed, effectively abandoning the original launch_command setting. * Saving Princess: fix Linux default command return type Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: Add references to running from source (#6022) * Docs: Update plando_en.md with item group example (#6024) * Update plando_en.md with item group example Added example YAML block for item placement using an item group, including recommendation of use of `true` value with item groups to avoid unintended behaviors, with an example of the same. Adjustments more than welcome! * Made clarifying revision to description of Generator handling of item groups Clarified the behavior of the Generator regarding item creation when item groups are used in plando. * Tests: fix race in test hosting shutdown (#5987) * WebHost: add stats show cli command (#5995) Usage: flask -A "WebHost:get_app()" stats show Currently only shows sum and top10 biggest games packages. * LttP: add manifest (#6005) * RoR2: Seekers of the Storm (SOTS) DLC Support (#5569) * Core: Make Generic ER only consider the current world in isolation (#4680) * DS3: Use remaining_fill instead of custom fill (#4397) --------- Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com> * Docs: Reword 'could be generated from json' to avoid encouraging slow world loads (#5960) * Mark WebHost as beta --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Lexipherous <jasonnlelong@gmail.com> Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com> Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com> Co-authored-by: Morgan <morgan07kelley@gmail.com> Co-authored-by: Louis M <prog@tioui.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> Co-authored-by: GreenMarco <71452195+GreenMarco@users.noreply.github.com> Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> Co-authored-by: soopercool101 <soopercoolstages@gmail.com> Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com> Co-authored-by: mechanicset <22198918+mechanicset@users.noreply.github.com> Co-authored-by: jamesbrq <jamesbrq@gmail.com> Co-authored-by: PIEisFANTASTIC <49802408+PIEisFANTASTIC@users.noreply.github.com> Co-authored-by: James White <james_white_d@hotmail.com> Co-authored-by: ScorelessPine <scorelesspine@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ian Robinson <drtchops@users.noreply.github.com> Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> Co-authored-by: earthor1 <earthor1@gmail.com> Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> Co-authored-by: CodeGorilla <just.a.smith@att.net> Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com> Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Co-authored-by: josephwhite <22449090+josephwhite@users.noreply.github.com> Co-authored-by: Scipio Wright <scipiowright@gmail.com> Co-authored-by: agilbert1412 <alexgilbert@yahoo.com> Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com> Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: alwaysintreble <mmmcheese158@gmail.com> Co-authored-by: PoryGone <98504756+PoryGone@users.noreply.github.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com> Co-authored-by: BroOtti <35010852+BroOtti@users.noreply.github.com> Co-authored-by: Ixrec <ericrhitchcock@gmail.com> Co-authored-by: DrAwesome4333 <22409322+DrAwesome4333@users.noreply.github.com> Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> Co-authored-by: Chris W <trezc0@gmx.de> Co-authored-by: Ishigh1 <bonjour940@yahoo.fr> Co-authored-by: Uriel <imurx@proton.me> Co-authored-by: Suyooo <chrspangler@gmx.de> Co-authored-by: Rosalie <61372066+Rosalie-A@users.noreply.github.com> Co-authored-by: StripesOO7 <54711792+StripesOO7@users.noreply.github.com> Co-authored-by: Bryce Wilson <gyroscope15@gmail.com> Co-authored-by: GodlFire <46984098+GodlFire@users.noreply.github.com> Co-authored-by: LeonarthCG <33758848+LeonarthCG@users.noreply.github.com> Co-authored-by: Star Rauchenberger <fefferburbia@gmail.com> Co-authored-by: Noa Aarts <itepastra@gmail.com> Co-authored-by: Remy Jette <remy@remyjette.com> Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com> Co-authored-by: Justus Lind <DeamonHunter@users.noreply.github.com> Co-authored-by: Goo-Dang <pado879@gmail.com> Co-authored-by: Matthew Wells <91291346+richarm4@users.noreply.github.com> Co-authored-by: Gryphonlady <gryphonlady1@gmail.com> Co-authored-by: Rjosephson <ryandj67@hotmail.com> * Rule Builder Refactor (#113) * Flips 3 & 5 chest exclusions (#118) * Overdrive Items & Locations (#114) * Overdrives from RuleBuilders * Tidus early overdrive access * Jupiter Sigil Rule * Wakka rules * Valefor overdrive ID * Valefor item * Change offsets * slot data & UT * Granular Tidus Overdrive Options * Define custom `.Resolved` subclasses for `CanReachMinimumRegions` & `CanReachMinimumLocations` * Rename character specific overdrive locations & items * Update Rules to match new location names * Fix Swordplay rules * Swordplay logic changed from 5 -> 3 overdrives per combat region * Overdrive Modes option * Wakka is Slots, not Reels * Slots rules name * Version increment v0.7.0 * Update ffx-rc to AP core v0.6.7 (#125) * KH2: Fix nondeterministic generation when CasualBounties is enabled (#5967) When CasualBounties was enabled, the location names in `exclusion_table["HitlistCasual"]` would be iterated into `self.random_super_boss_list` in `generate_early`, but `exclusion_table["HitlistCasual"]` was a `set`, so its iteration order would vary on each generation, even with same seed. Random location names would be picked from `self.random_super_boss_list` to place Bounty items at, so different locations could be picked on each generation with the same seed. `exclusion_table["Hitlist"]` is similar and was already a `list`, avoiding the issue of nondeterministic iteration order, so `exclusion_table["HitlistCasual"]` has been changed to a `list` to match. * Core: Update .gitignore to include an exe setup.py downloads (#6031) * CommonClient: Add explicit message for connection timeout (#5842) * Change timeout and add timeout-specific message * Revert open_timeout * Webhost: port reuse fix & configurable max room timeout (#6033) * WebHost: make autolauncher max room timeout configurable * WebHost: launch rooms with assigned port first * Factorio: only show fluid boxes on assembling machine 1 when the selected recipe needs fluids (#5412) * Core: other resources guide (#6043) Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com> * Rule Builder: Fix count resolution when Oring HasAnyCount (#6048) * Muse Dash: Add support for Wuthering Waves Pioneer Podcast and Ay-Aye Horse (#6071) * sc2: Fixing random fill errors in unit tests (#6045) * Core: Make Generate.main only init logging on __main__ (#6069) * setup.py: add rule_builder.cached_world to included list (#6070) * Clients: remove datapackage from persistent_storage ... (#6074) ... next time it gets written to. This makes loading peristent_storage faster in the future. * Core, Webhost: update and pin dependency versions (#6075) * Launcher: Add konsole to terminal list and rework launch dialog (#5684) * Make component launching indicate if no terminal window, add konsole * Attempt to spell better and remove whitespace * Update terminal priority * Make helper for clearing LD_LIBRARY_PATH * Add handling to linux launch * Hopefully fix setter * Apply suggestions from code review Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: update macOS setup instructions for more specificity on Python version (#6078) * Pokemon Emerald: Fix Latios KeyError (#6056) * Muse Dash: Fix nondeterministic generation with include_songs (#6040) The include_songs option is an OptionSet, whose value is a set, but was being iterated to produce self.included_songs. Sets are unordered and may have a different iteration order each time a python process is run. This meant that the order of the elements in self.included_songs could differ even when generating with a fixed seed. This caused nondeterministic generation with the same seed because create_song_pool() deterministically randomly picks songs from self.included_songs, which could be in a different order each time, so different songs could be picked. * Messenger: Require Wingsuit to traverse Dark Cave (#6059) * Stardew valley: Four small fixes (#6055) * - Fixed the Dr Seuss Bundle asking for tigerseye (mineral) instead of tiger trout (fish) * - Made blue grass starter more consistent * - Fragments of the past does not rely on ginger island * - Removed legacy hard coded strange bun recipe that messed with chefsanity logic * Stardew Valley: trimmed lucky purple shorts need gold to make (#6034) The current logic only requires the shorts and a sewing machine, but a gold bar is also necessary * Stardew Valley: Fixed an issue where some specific option combinations could create more items than locations (#6012) * - Improved the dynamic locations count algorithm to take into account the nature of various heavy settings in both directions * - Fixes from Code Review * - We're only testing for sunday locations, might as well only take sunday locations in the list to test * - One more slight optimization * - Added consideration for bundles per room in filler locations counting * - Registered some more IDs to handle items up to 10 * Super Mario Land 2: Fix Space Zone 2 Logic (#6025) * Satisfactory: bug fix in __init__.py (#5930) Solved indentation error to return to intended functionality * lufia2ac: update CollectionRule import (#5936) * WebHost: Remove space before comma separators in tutorial authors (#5999) * Remove space before comma * Factorio authors update * Simplify template * APQuest: Various fixes (#6079) * Import Buffer from typing_extensions instead of collections.abc for 3.11 compat * always re-set sound volumes before playing * fix game window scaling if parent is vertical * make default volume lower * Satisfactory: Fixed buildings missing from goal check (#5772) * Aquaria: Fixing bug where Urchin Costume is…
* Landstalker: Add manifest file (#5629)
* The Witness: Add archipelago.json (#5481)
* Add archipelago.json to witness
* Update archipelago.json
* Core: Only error in playthrough generation if game is not beatable (#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 (#5359)
* Encode non-local vague hints as negative player number
* comments
* also bump req client version
* WebHost: Validation for webworld themes (#5083)
* Celeste (Open World): fix tutorial link on game page (#5627)
* Doc: Update Mac instructions to instruct the user to make a frozen bundle (#5614)
* LttP: logic fixes and missing bombs (#5645)
3 logic issues:
* #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 (#4997)
* Yacht Dice: Add archipelago.json manifest #5658
* Core: Better error message for invalid range values (#4038)
* TWW: Fix client sending duplicate magic meter (#5664)
* SC2: Fix missing brackets in Zerg The Host logic (#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 (#5653)
* LADX: switch to asyncio.get_running_loop() (#5666)
* APQuest: Implement New Game (#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 <31627079+duckboycool@users.noreply.github.com>
* Update worlds/apquest/client/custom_views.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* 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 <ericrhitchcock@gmail.com>
* 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 <ericrhitchcock@gmail.com>
* 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 <ericrhitchcock@gmail.com>
* 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 <Berserker66@users.noreply.github.com>
* Update generate_math_problem.py
* Update worlds/apquest/game/player.py
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
---------
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Core: Add a bunch of validation to AutoPatchRegister (#5431)
* Add a bunch of validation to AutoPatchRegister
* slightly change it
* lmao
* Tests: Move world dependencies in tests to APQuest #5668
* LADX: Give better feedback during patching (#5401)
* SC2: Fix bugs and issues around excluded/unexcluded (#5644)
* Core: updates of requirements (#5672)
* Core: Fix typo in docstring for hint_points in commonclient (#5673)
* APQuest: Fix import of Protocol from bokeh instead of typing (#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 (#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 (#5678)
* fix the apworld builder pycharm runner
* Update Build APWorld.run.xml
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Tests: Move hosting test to APQuest #5671
* ALttP/Factorio: Add spaces in concatenated strings (#5564)
* Add them
* Revert "Add them"
This reverts commit 82be86191faa70d1ce097c61fc8556e03da1a72e.
* Re-add ALttP/Factorio
* SC2: logic fixes minor bugs (#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 #5687
* TLOZ: Add space in concatenated string #5690
* CV64/CVCotM: Add spaces in concatenated strings (#5691)
* Possible space removal
* Add spaces
* Missed one
* Revert removals, use newline
* Jak and Daxter: Add space in concatenated string #5692
* KH1: Add space in concatenated string #5693
* MLSS: Add space in concatenated string #5694
* Wargroove: Add space in concatenated string #5696
* Core: Add spaces in concatenated strings #5697
* Civ6: Fix issue with names including civ-breaking characters (#5204)
* DS3: Update/Fix Excluded Locations Logging (#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 #5500
* Jak and Daxter: Second attempt at fixing trade tests. #5599
* ALTTP: Fix setting `Beat Agahnim 1` event twice (#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 #5621
* shapez: Fix logic bug with vanilla shapes and floating layers #5623
* [FFMQ] Bugfix: Fix missing logic rule for Frozen Fields > Aquaria access
* sc2: Item group fixes and new item groups (#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 #5685
* Timespinner: Exclude Removed Location from Web Tracker (#5701)
* Docs: fix name of "Build APWorlds" component (#5703)
* SNIClient: new `SnesReader` interface (#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 (#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 (#5677)
* CI: update appimage runtime to fix problems with sleep (#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 (#5699)
* Remove absolute links to archipelago.gg
* Fix other link issues
* Docs: update apsudoku docs / add links to web build (#5720)
* WebHost: add played game to static tracker (#5731)
* sc2: Fixing typos in item descriptions (#5739)
* Launcher: Add workaround for kivy bug for linux touchpad devices (#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 (#5745)
* SC2: Fix Kerrigan logic for active spells (#5746)
* Launcher: fix shortcuts on the AppImage (#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 (#5750)
* Core: Bump version from 0.6.5 to 0.6.6 (#5753)
* WebHost: increase form upload limit (#5756)
* OptionsCreator: Respect World.hidden flag (#5754)
* APQuest: Fix ValueError on typing numbers/backspace #5757
* TLOZ: Add manifest file (#5755)
* Added manifest file.
* Update archipelago.json
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* SC2: New maintainership (#5752)
I (Ziktofel) stepped down but will remain as a mentor
* Factorio: Craftsanity (#5529)
* TUNIC: Make UT care about hex goal amount #5762
* TUNIC: Update world version to 4.2.7 #5761
* TUNIC: Update wording on Mask and Lantern option descriptions #5760
* Satisfactory: Add New Game (#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 (https://github.com/Jarno458/SatisfactoryArchipelagoMod/issues/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 <175728472+Copilot@users.noreply.github.com>
* 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 <scipiowright@gmail.com>
* 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 be2651120542214602872bd67798d26dcd237f5f, d8bd1aaf04e6424b74294a4ee4d195c9ae6107ab
* 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 <scipiowright@gmail.com>
* 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 <scipiowright@gmail.com>
* 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 (093fe38b6e5c15370bb8b5c8a4eceb16d7df716f)
* Apply suggestions from code review
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
* 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 <computerguy440+gh@gmail.com>
Co-authored-by: ProverbialPennance <36955346+ProverbialPennance@users.noreply.github.com>
Co-authored-by: Joe Amenta <airbreather@linux.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* EarthBound: Implement New Game (#5159)
* Add the world
* doc update
* docs
* Fix Blast/Missile not clearing Reflect
* Update worlds/earthbound/__init__.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/__init__.py
remove unused import
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/__init__.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/modules/dungeon_er.py
make bool optional
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/modules/boss_shuffle.py
typing update
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/modules/boss_shuffle.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Filter events out of item name to id
* we call it a glorp
* Update worlds/earthbound/Regions.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/__init__.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/Items.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* Update worlds/earthbound/Regions.py
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* 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 <31627079+duckboycool@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Yugioh: Add space in concatenated string (#5695)
* Add spaces
* Revert wrong one
* Add right one
* Core: Add datapackage exports to gitignore (#5719)
* Gitignore and description
* Update description
* Celeste Open World: speedup module load (#5448)
* speedup world load
* those 3 weren't in-fact needed
* MultiServer: Safe DataStorage .pop (#5060)
* Make datastorage .pop not throw on missing key or index
* Reworked to use logic rather than exception catching
* Satisfactory/Timespinner: Added Manifesto (#5764)
* Added Manifesto
* Update archipelago.json
* Update archipelago.json
* Update archipelago.json
---------
Co-authored-by: Jarno <jarno.westhof@gmail.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Satisfactory: Fix nondeterministic creation of trap filler items (#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 https://github.com/ArchipelagoMW/Archipelago/pull/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 (#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 <57900059+NewSoupVi@users.noreply.github.com>
* KH2: Fix placing single items onto multiple locations in pre_fill (#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 (#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 (#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 (#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 <Berserker66@users.noreply.github.com>
* APQuest: Fix import shadowing issue (#5769)
* Fix import shadowing issue
* another comment
* Core: allow abstract world classes (#5468)
* Docs: Make image path in contributing absolute (#5790)
* Core: Make .apworlds importable using importlib (without force-importing them first) (#5734)
* Make apworlds importable in general
* move it to a probably more appropriate place?
* oops
* PyCharm: Fix name of apworld builder run config (#5824)
* rename the apworld builder run config
* Update Build APWorlds.run.xml
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Multiserver: remove dead code (#5831)
* Core: replace the eval in OptionsCreator.py (#5828)
* Satisfactory: Fix typo in GoalSelection possible values description comment (#5826)
* WebHost: Fix world sorting in /tutorial/ (#5785)
* customserver: don't set last_activity that will be overwritten later (#5844)
* Factorio: fix inverted condition in victory requirements (#5647)
* The Messenger: Fix lambda capture issue in add_closed_portal_reqs (#5816)
* Super Mario Land 2: Fix Goal Logic (#5781)
* TUNIC: Fix region for the grass by the West Garden portal (#5784)
* Core: Change image link to relative (#5802)
* Shapez: Change image links to relative (#5803)
* Noita: Fix filling Shop Item locations without updating item.location (#5840)
In single-player multiworlds with small item pools, Noita was manually
placing some items into Shop Item locations, but was only setting
location.item, and not also setting item.location so that the item and
location refer to one another.
This has been fixed by using the MultiWorld.push_item() helper method to
place the items instead of manually placing the items.
* Core: Add `.apignore` format to not include files in APWorld Builder (#5779)
* Timespinner: Align Lantern Logic (#5562)
* FFMQ: Update link to upstream rando (#5838)
* SC2: fix supreme logic hole (#5768)
* sc2: Fixing a discrepancy between slot data and logic
where story tech would not be granted for supreme if zerg was not a selected race.
* sc2: Fixed an issue where Kinetic Blast was not listed as a vanilla Kerrigan ability
* sc2: Fixing some functions that could force Kerrigan items into the pool when playing Kerriganless
* sc2: excluding zerg excludes hots for vanilla-like mission order
* Preprocessing options
* Moving general empty selection handling to option preprocessing
* Adding a unit test for empty race/campaign selection
* sc2: Properly handling non-raceswapped campaigns when excluding campaigns based on race exclusions
* sc2: Adding an explicit error message if a user excludes all missions in a way with no obvious resolution
* Core: fix bug with missing help text (#5632)
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* APQuest: Explain game_name and supports_uri more in components.py (#5759)
* APQuest: Explain game_name and supports_uri more in components.py
Hopefully this can lead to more games implementing support for the "click on slot name -> everything launches automatically" functionality.
* Update components.py
* Update components.py
* LADX: no pickle (#5849)
* Core: Bump version from 0.6.6 to 0.6.7 (#5851)
* Docs: add dev FAQ for 'should I start with the APWorld or the client?' (#5716)
* Docs: add dev FAQ for 'should I start with the APWorld or the client?'
* fix indentation of bullet point wrapped lines
* use %20 for spaces in links
* link to adding games.md and add #ap-modding-help to adding games.md
* make APQuest a link
* also linkify 'run a local server'
* reword the 'judging client is easier' point to reflect a broader range of first-timers
* move the 'not 100%' point into the introductory sentences, and tweak related wording
* correct link
* Docs: define and explain the trade-off of "local" vs "remote" items (#5718)
* first draft
* second draft
* fix indentation of bullet point wrapped lines
* move quote
* explicitly discuss all three item handling flags, since the start inventory one is easily forgotten
* rewrite to avoid a 'debate between two camps' framing
* tweak the wording to allow for the possibility that some games can 'just' do both local and remote items without exposing this detail to the player
* relative links
* Docs: explicitly document why get_filler_item_name may return non-IC.filler items, despite its name (#5747)
* Docs: explicitly document why get_filler_item_name may return non-IC.filler items, despite its name
* reword
* apply Scipio's rewordings
* Update worlds/AutoWorld.py
Co-authored-by: qwint <qwint.42@gmail.com>
* any
---------
Co-authored-by: qwint <qwint.42@gmail.com>
* Docs: Show that Data is optional for bounces #5794
* Core: Add Pymem to requirements.txt (#5855)
As to not break custom worlds when Jak & Daxter moves from PyMem to PyMemoryEditor
* Super Mario 64: Add painting passability as items (#5294)
* LADX: fix improved additional warps (#5858)
* ModuleUpdate: Add explicit error when above max supported version (#5868)
* Update messages and check
* Make "official" error message show up for 3.14
* Core: Give clearer error message for invalid .apworld zip (#5871)
* Update messages and check
* Make "official" error message show up for 3.14
* Add zip error handling
* Small cleanups
* KH2: Deathlink and ingame item popups (#5206)
---------
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: Delilah <lindsaydiane@gmail.com>
* Doc: WebHost: update readme and style guide (#4853)
* Doc: WebHost living standard
* Docs: update style guide for HTML, CSS and JS
* Unblame phar
* Too many words
* The better choice
* More rules
* Removed too much
* Docs: add recommendations for script defer and async
* Docs: Explain building a single world with Build APWorlds component (#5879)
* Doc: Reword required python version for AP (#5822)
Many many people have read this and then installed 3.14, so it clearly needs rewording.
* FFMQ: Fix Collect/Remove Asymmetry (#5253)
* TLOZ: Move completion condition to be before set_rules is complete (#5391)
* AHIT: Add option to shuffle Battle of the Birds director tokens and time bonus pickups (#5400)
* [WebHost Docs] Updated and clarified new tracker endpoitns and misc fixes. (#5475)
* Adding json/python to codeblocks to make it pretty, fixed spelling mistakes, swapped uuids for suuids in the examples, and expanded on /tracker and /static_tracker, and /slot_data_tracker giving the details of the API calls endpoints
* Add in API Cacheing timers and related text blurb
* updated for merged edit to /static_tracker
* Removed timer from /datapackage/checksum
* Docs (DS3): Fix the documentation for the Simple Early Bosses option (#5856)
* Docs (DS3): Fix the documentation for the Simple Early Bosses option
This option changed in the client a while ago, but we forgot to update
the server.
* Update Options.py
* Docs: KH1 more troubleshooting and clearer nomenclature (#5872)
* updated kh1 docs
* second pass
* tweak
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com>
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com>
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com>
* semicolon
---------
Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com>
* Fix, OptionsCreator: export options on Linux (#5774)
* Core/Utils: Use correct env for save_filename from AppImage
* OptionsCreator: run export on a separate thread
Running a blocking call from kivy misbehaves on Linux.
This also changes '*.yaml' to '.yaml' for Utils.save_filename,
which is the correct way to call it.
* Core/Utils: destroy Tk root after save/open_filename
This allows using those functions from multiple threads.
Note that pure Tk apps should not use those functions from Utils.
* OptionsCreator: show snack when save_filename fails
* OptionsCreator: disable window while exporting
* OptionsCreator: fixing typing of added stuff
* Core: Fix some typing errors (#4995)
* Fix some type errors in Generate and Options
* Add type parameter to new hint and fix whitespace errors
* Update identifier style
* Jak and Daxter: Replace Pymem, Add Linux Support (#5850)
* Replace pymem with PyMemoryEditor (nonworking)
* Add back pymem for faster windows address searching.
* Replace other uses of pymem, parameterize executable names.
* Updated to add linux and potential MacOS support to launching gk and … (#84)
* Updated to add linux and potential MacOS support to launching gk and goalc. Still needs tested on MacOS.
* Switched to using x-terminal-emulator instead of trying to find gnome-terminal or konsole
Made argument building for suprocessing goalc easier to read
Fixed OS X support to use osascript instead of attempting to run Terminal directly
* Changed Terminal usage to use Archipelago's Launh utility, which handles terminal launching for me for both linux and OS X
* Added try/except to re-connect the memory process. The process file/id changes over time on linux, and this works to re-connect without needing to restart
* Removed Unsetting env var in favor of reporting to the source authors
* Putting PyMemoryEditor local. (#85)
* Putting PyMemoryEditor local
---------
Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com>
* Fixing minor problems (#87)
* Refactor away circular launcher import.
* Push latest PyMemoryEditor scan utility (#91)
Co-authored-by: Louis M <Louis M>
* Remove Pymem, rely solely on PyMemoryEditor. Add konsole support.
* Jak 1: Remove vendored copy of PME, update imports, requirements, and manifest.
* Jak 1: Prevent server connect until game is properly setup.
* Jak 1: reduce REPL/Compiler confusion, small updates to setup guide.
* Write hack for Konsole on AppImage to avoid OpenSSL error.
* Refactor LD_LIBRARY_PATH hack.
* Update worlds/jakanddaxter/agents/memory_reader.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/jakanddaxter/agents/memory_reader.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: Morgan <morgan07kelley@gmail.com>
Co-authored-by: Louis M <prog@tioui.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Docs: add spanish language for MLSS (#5172)
* Docs: add spanish language for SM64
* Docs: add spanish language for MLSS
* Update worlds/mlss/docs/setup_es.md
Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com>
* Update worlds/mlss/docs/es_Mario & Luigi Superstar Saga.md
Co-authored-by: RoobyRoo <thegreenrobby@gmail.com>
---------
Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com>
Co-authored-by: RoobyRoo <thegreenrobby@gmail.com>
* Docs, SM64: Remove outdated FAQ item (#5887)
It is no longer possible to connect to a multiworld game on a version of the client with this bug, as all versions with this bug report AP v0.3.5 or less
* TWW: Support launcher command line arguments (#5806)
* Support launcher command line arguments
* Use `launch` instead of `launch_subprocess`
* Remove old runner code
* Satisfactory: Update Universal Tracker Method for FinalElevatorPhase Option (#5812)
* MLSS: Add Manifest + Minor Bugfixes (#5728)
* Remove outdated header change for ROM verification
* Update Connections to be compatible with python ver. 3.8
* Update inno_setup.iss
* Update inno_setup.iss
* Merge branch 'main' of https://github.com/jamesbrq/ArchipelagoMainMLSS
* Add Manifest + Minor Bugfixes
* Even further safeguards for Oho Oasis Temples
* Update basepatch.bsdiff
* KH2: Add a new "CasualBounties" Setting (#4877)
* KH2: casual bounties option
* Casual Bounty: Adjust level bounty logic to correspond with max level check setting
* Bugfix: We have one less possible bounty with corresponding level bounty logic
* Casual Bounty: Move option to better spot
* Bugfix: Prevent possible .remove() crash
* Revert "Bugfix: We have one less possible bounty with corresponding level bounty logic"
This reverts commit 3c929e00db910a176d9d882b6cc08494417177d2.
* Bugfix: Typo in conditional
* Casual Bounties: Remove Scar, add MCP
I knew I was missing one second visit fight and Scar shouldn't be there he's a first visit
* Casual Bounties: Add some clarity to the CasualBounty setting
* Docs: Update docs to reflect new CasualBounty setting
* KH2: Add bounty locations as location groups
Feedback on this needed, trying to do this to make it work with the code above the additions made it so the game generated 1 less item than locations, despite linking properly
It does function as intended though
* KH2: Update docs
* KH2: Add SuperBosses, Cups, AtlanticaToggle and SummonLevelLocationToggle to slot data (#5708)
* Add SuperBosses, Cups and AtlanticaToggle
* Add SummonLevelLocationToggle
* Core: Add SDL_MOUSE_FOCUS_CLICKTHROUGH=1 environment variable to kvui (#5804)
This variable should fix the 'double click' required when trying to interact with buttons on an unfocused window
* SC2: Bump protobuf from 6.31.1 to 6.33.5 in /worlds/_sc2common (#5890)
Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 6.31.1 to 6.33.5.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Commits](https://github.com/protocolbuffers/protobuf/commits)
---
updated-dependencies:
- dependency-name: protobuf
dependency-version: 6.33.5
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Core, Tests: allow Archipelago items in all worlds (#5893)
* Core: Add rule builder (#5048)
* initial commit of rules engine
* implement most of the stuff
* add docs and fill out rest of the functionality
* add in explain functions
* dedupe items and add more docs
* pr feedback and optimization updates
* Self is not in typing on 3.10
* fix test
* Update docs/rule builder.md
Co-authored-by: BadMagic100 <dempsey.sean@outlook.com>
* pr feedback
* love it when CI gives me different results than local
* add composition with bitwise and and or
* strongly typed option filtering
* skip resolving location parent region
* update docs
* update typing and add decorator
* add string explains
* move simplify code to world
* add wrapper rule
* I may need to abandon the generic typing
* missing space for faris
* fix hashing for resolved rules
* thank u typing extensions ilu
* remove bad cacheable check
* add decorator to assign hash and rule name
* more type crimes...
* region access rules are now cached
* break compatibility so new features work
* update docs
* replace decorators with __init_subclass__
* ok now the frozen dataclass is automatic
* one more type fix for the road
* small fixes and caching tests
* play nicer with tests
* ok actually fix the tests
* add item_mapping for faris
* add more state helpers as rules
* fix has from list rules
* fix can reach location caching and add set completion condition
* fix can reach entrance caching
* implement HasGroup and HasGroupUnique
* add more tests and fix some bugs
* Add name arg to create_entrance
Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com>
* fix json dumping option filters
* restructure and test serialization
* add prop to disable caching
* switch to __call__ and revert access_rule changes
* update docs and make edge cases match
* ruff has lured me into a false sense of security
* also unused
* fix disabling caching
* move filter function to filter class
* add more docs
* tests for explain functions
* Update docs/rule builder.md
Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com>
* chore: Strip out uses of TYPE_CHECKING as much as possible
* chore: add empty webworld for test
* chore: optimize rule evaluations
* remove getattr from hot code paths
* testing new cache flags
* only clear cache for rules cached as false in collect
* update test for new behaviour
* do not have rules inherit from each other
* update docs on caching
* fix name of attribute
* make explain messages more colorful
* fix issue with combining rules with different options
* add convenience functions for filtering
* use an operator with higher precedence
* name conflicts less with optionfilter
* move simplify and instance caching code
* update docs
* kill resolve_rule
* kill true_rule and false_rule
* move helpers to base classes
* update docs
* I really should finish all of my
* fix test
* rename mixin
* fix typos
* refactor rule builder into folder for better imports
* update docs
* do not dupe collectionrule
* docs review feedback
* missed a file
* remove rule_caching_enabled from base World
* update docs on caching
* shuffle around some docs
* use option instead of option.value
* add in operator and more testing
* rm World = object
* test fixes
* move cache to logic mixin
* keep test rule builder world out of global registry
* todone
* call register_dependencies automatically
* move register deps call to call_single
* add filtered_resolution
* allow bool opts on filters
* fix serialization tests
* allow reverse operations
---------
Co-authored-by: BadMagic100 <dempsey.sean@outlook.com>
Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com>
* Core: Throw OptionError for option type Toggle in certain scenarios (#5874)
* Throw OptionError for option type Toggle in certain scenarios
* Adding missing space to Options.py
Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com>
---------
Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com>
* Utils: Improvements to visualize_regions for debugging GER usage (#4685)
* Improvements to visualize_regions for debugging GER usage
- allow the user to pass in a dict[int, int] to visualize_regions that maps Entrance.randomization_group to a color in RGB form. This allows for better visualization of which dangling entrances should match, or which matching groups are not being correctly respected.
- do full region visualization for unreached regions, so that entrances that could connect to new regions can be visualized.
- visualize unconnected entrances on regions, in addition to connected and unconnected exits, so that available ER targets can be visualized as well
* Add detail_disconnected_regions parameter to visualize_regions
* Rename detail_disconnected_regions to detail_other_regions for consistency
* Add auto_assign_colors param to visualize_regions
* Make auto assignment of entrance colors deterministic
* Assume show_other_regions is true if detail_other_regions is true
* Remove unused random import
* whitespace adjustments
* Move overflow check to prevent potential infinite loop
It wasn't exactly likely, as the user would have had to manually define all 4096 colors and then need an additional color on top of that, but accounting for that kind of nonsense is easy enough in this case.
* positive condition
---------
Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com>
* APQuest: Improve the auto-generated .gitignore for data/sounds (#5670)
I didn't quite think this through: In this specific case, you want the gitignore to also ignore itself, since it itself is an auto-generated file.
* Webhost: Fix defaults for NamedRange and TextChoice (#5139)
* TUNIC: Depriority for some items (#5589)
* Stardew Valley: 7.x.x - The Jojapocalypse Update (#5432)
Major Content update for Stardew Valley
### Features
- New BundleRandomization Value: Meme Bundles - Over 100 custom bundles, designed to be jokes, references, trolls, etc
- New Setting: Bundles Per Room modifier
- New Setting: Backpack Size
- New Setting: Secretsanity - Checks for triggering easter eggs and secrets
- New Setting: Moviesanity - Checks for watching movies and sharing snacks with Villagers
- New Setting: Eatsanity - Checks for eating items
- New Setting: Hatsanity - Checks for wearing Hats
- New Setting: Start Without - Allows you to select any combination of various "starting" items, that you will actually not start with. Notably, tools, backpack slots, Day5 unlocks, etc.
- New Setting: Allowed Filler Items - Allows you to customize the filler items you'll get
- New Setting: Endgame Locations - Checks for various expensive endgame tasks and purchases
- New Shipsanity value: Crops and Fish
- New Settings: Jojapocalypse and settings to customize it
- Bundle Plando: Replaced with BundleWhitelist and BundleBlacklist, for more customization freedom
- Added a couple of Host.yaml settings to help hosts allow or ban specific difficult settings that could cause problems if the people don't know what they are signing up for.
Plus a truckload of improvements on the mod side, not seen in this PR.
### Removed features
- Integration for Stardew Valley Expanded. It is simply disabled, the code is all still there, but I'm extremely tired of providing tech support for it, plus Stardew Valley 1.7 was announced and that will break it again, so I'm done. When a maintainer steps up, it can be re-enabled.
* CommonClient: actually close the UI on /exit (#5860)
* Aquaria: Adding a lots of options and one check (#4414)
First, there is one check that has been added. The location is "Sitting on the throne before the cathedral with the crest on it" and the item is the "Opening of the Cathedral door". In Vanilla, sitting on the crested throne open the door to the cathedral.
Now for the options added:
- infinite_hot_soup: Make the game impossible to run out of hot soup once you got it as an item.
- open_body_tongue: The body level (the ending level) is blocked by a big tongue. This option remove the tongue without having to go to the Sunken City (where it is normally removed)
- maximum_ingredient_amount: In the Vanilla game, the ingredients and dishes count is limited to 8. This option make this count configurable.
- skip_final_boss_3rd_form: The final boss has 5 forms. The 3rd one is long and not really challenging. So, this option is used to skip this form.
- save_healing: Normally, the save points heal the player. There is also beds in the game that can heal the player. This option removed the healing from the save point and forced the player to heal using beds (or healing monsters or healing items)
- no_progression_(whatever): Make this "whatever" (generally regions) exempt of progression items. Note that this is not using the exclusion-feature of AP, as these locations may still contain 'Useful' items. It is only guaranteed that no 'Progression' and 'Progression_Skip_Balancing'-items will appear in these regions. This option does not remove locations. I did not exclude or completely remove the regions because I don't have enough location to put every useful item in the game.
There is also 2 new goals:
- Four gods: The goal is obtained when the player beat the four gods (this is something like half the game). Useful to have quicker runs
- Gods and Creator: Like the Four Gods run, but when the four gods are obtained, that open a transportation turtle to the final boss (the Creator) and the player have to beat the final boss to obtain the goal.
Note that for the 2 new goals, all locations from the last 4 areas (Abyss, Frozen Veil, Sunken City and The Body) are completely removed (not just excluded).
* Launcher: generate templates for option presets (#5062)
* Doc: running from source and building on Linux (#5881)
* CI: make the comment in 'Build' more verbose
* Doc: add Linux running from source and build instructions
* Doc: fix name in running from source on Linux
* Update docs/running from source.md
Co-authored-by: qwint <qwint.42@gmail.com>
---------
Co-authored-by: qwint <qwint.42@gmail.com>
* core: If a user specifies --no-gui, don't show GUI messageboxes (#5514)
* move `gui_enabled` to Utils
* docstring
* If a user specified no-gui, don't use GUI messageboxes
---------
Co-authored-by: alwaysintreble <mmmcheese158@gmail.com>
* Launcher: run init_logging before importing from worlds (#5402)
* WebHost: Better document config loading fallback (#5948)
* change functionality to follow comment
* revert code change and explicitly document intent
* Celeste (Open World): v1.0.7 Logic Fixes (#5827)
### Logic Fixes:
- Old Site A
- Logic now allows for going backwards from the `Awake` checkpoint
- Golden Ridge A
- `Golden Strawberry` now requires `Moving Platforms` as it should
- Mirror Temple A
- `Room b-01c Strawberry` and `Room b-10 Strawberry` no longer erroneously require `Red Boosters`
- `Golden Strawberry` now requires `Dash Refills` as it should
- Reflection A
- Logic now allows for going backwards from the `Reflection` checkpoint
- Reflection B
- Logic now allows for going backwards from the `Reflection` checkpoint
- Farewell
- `Power Source Key 2` now logically requires `Dash Switches` and `Double Dash Refills` as it should
* Rule Builder: Make region.connect and add_event support rule builder (#5933)
* make region.connect and add_event support rule builder
* fix test
* oops fix
* update tests and typing
* rm unused
* Options: support "random" and variations for OptionSet with defined valid_keys (#4418)
* seemingly works? needs testing
* attempt docs update
* move to verify resolution (keep?)
* account for no valid keys and "random" being passed
* Update advanced_settings_en.md
* Update Options.py
Co-authored-by: qwint <qwint.42@gmail.com>
* Update Options.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* unify random handling between range and set
* Update Options.py
* Update Options.py
* Update Options.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* super is weird
* fix item/location
* remove groups from options
* unittest
* pep8
* Update Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update Options.py
---------
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Core: Add missing args to rule builder inits (#5912)
* add filtered_resolution to inits
* update from_dict calls too
* Saving Princess: Fix each slot sharing the same `music_table` (#5952)
`music_table` was initialized on the `SavingPrincessWorld` *class*, so
was being shared by each Saving Princess slot in the multiworld.
This has been fixed by initializing the `music_table` attribute on each
`SavingPrincessWorld` *instance* in `generate_early()` instead.
* HK: Fix cached filler item names persisting between generations (#5950)
HK's `get_filler_item_name` was writing lists into a ClassVar[dict] on
the `HKWorld` class. This dict would not be cleaned out between
generations on the same process, leaving behind cached data from
previous generations.
I confirmed the issue when running single-slot generations on a local
webhost, where `self.cached_filler_items` could be already populated
during `HKWorld.__init__()`.
This has been fixed by putting an individual cache list on each HKWorld
instance, instead of a shared cached on the class.
* Factorio: Update Download Image in guides (#5953)
* Docs: Replace the 'true filler' weasel words in adding games.md's mention of get_filler_item_name() (#5958)
* replace the 'true filler' weasel words with a clear term defined by the linked method's docstring
* Update docs/adding games.md
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Core: Better scaling explicit indirect conditions (#4582)
* Core: Better scaling explicit indirect conditions
When the number of connections to retry was large and `queue` was large
`new_entrance not in queue` would get slow.
For the average supported world, the difference this change makes is
negligible.
For a game like Blasphemous, with a lot of explicit indirect conditions,
generation of 10 template Blasphemous yamls with
`--skip_output --seed 1` and progression balancing disabled went from
19.0s to 17.9s (5.9% reduction in generation duration).
* Create a new variable for the new set created from the intersection
* WebHost: memory leak fixes (#5966)
* ALTTP: remove `world: MultiWorld` and typing (#5974)
* WebHost: Add CORS headers to API Endpoints (#5777)
* Return new state man (Vi's note: I have chosen not to change this title) (#5978)
* The Messenger: minor maintenance (#5965)
* CI: upgrade InnoSetup to 6.7.0 (#5979)
* MultiServer: don't keep multidata alive for race_mode (#5980)
* Fix(undertale): prevent massive bounce msg spam for position updates (#5990)
* fix(undertale): prevent massive bounce msg spam for position updates
* make sure player is removed on leaving / timing out
* do not check for tags: online, as bounce evaluation is or'd
* Core: use typing_extensions `deprecated` (#5989)
* Undertale: Use check_locations helper to avoid redundant sends (#5993)
* Core: allow async def functions as commands (#5859)
* Core: introduce finalize_multiworld and pre_output stages (#5700)
Co-authored-by: Ishigh1 <bonjour940@yahoo.fr>
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* MultiServer: graceful shutdown for ctrl+c and sigterm (#5996)
* OptionCreator: 0.6.6 reported issues (#5949)
* MultiServer: fix Windows compatibility (#6010)
* Docs: Better document state.locations_checked (#6018)
* MM2: Fix /request command help (#5805)
* MLSS: Fix client auto-connect bug + Client cleanup (#5895)
* FF1: Added manifest (#5911)
* OoT: change setup-guides to have 2.10 be the minimum version recommended (#5799)
* Pokemon Emerald: Fix rare fuzzer errors (#5914)
* Shivers: Adds Manifest File (#5918)
* OOT: UTC deprecation warning fix (#5983)
* Saving Princess: add manifest (#6008)
* Lingo: Add archipelago.json (#6017)
* Mega Man 3: Implement new game (#5237)
* Stardew Valley: morel doesn't spawn in fall secret woods (#6003)
* Docs: Don't serve non-static files in example_nginx.conf (#5971)
* Docs: Don't serve non-static files in example_nginx.conf
`try_files` will serve the file as long as it exists, which means I could `GET /autolauncher.py` and be served the file.
* Use root instead of alias, add route for favicon
* Update deploy/example_nginx.conf
* Lingo: Fix logic for Near Eight Painting (#6014)
* The Messenger: Universal Tracker support (#5344)
* Test: Defaults for Options test (#5428)
* Muse Dash: Adds 3 new music packs plus fixes being able to roll songs without a legal way to obtain them (#5698)
* Fix missing } in example_nginx.conf (#6027)
* Pokemon Emerald: Dexsanity Encounter Type Option (#6016)
---------
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* Dark Souls 3: Update location descriptions for Red Tearstone Ring and Hood of Prayer (#5602)
RTSR's description was incorrect and Hood of Prayer was missing its description
* TUNIC: Refactor entrance hint generation (#5620)
* Refactor hint generation
* Remove debug print
* Early out per qwint's comment
* WebHost: Update UTC datetime usage (timezone-naive) (#4906)
* Saving Princess: Security fixes for issues detected by Bandit (#6013)
* Saving Princess: absolute paths on suprocess.run
* Saving Princess: more error handling for downloads
* Saving Princess: rework launch_command setting
Apparently subprocess.Popen requires a list for args instead of a string everywhere but in Windows, so the change was preventing the game from running on Linux. Additionally, the game is now launched using absolute paths.
* Saving Princess: prevent bandit warnings
* Saving Princess: remove unnecessary compare_digest
* Saving Princess: fix Linux paths by using which
* Saving Princess: rename launch command setting
Previously, launch_command held a string. Now it holds a list of strings. Additionally, the defaults have changed.
To prevent the wrong type from being used, the setting has been renamed, effectively abandoning the original launch_command setting.
* Saving Princess: fix Linux default command return type
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Docs: Add references to running from source (#6022)
* Docs: Update plando_en.md with item group example (#6024)
* Update plando_en.md with item group example
Added example YAML block for…
…ipelagoMW#5514) * move `gui_enabled` to Utils * docstring * If a user specified no-gui, don't use GUI messageboxes --------- Co-authored-by: alwaysintreble <mmmcheese158@gmail.com>
…ipelagoMW#5514) * move `gui_enabled` to Utils * docstring * If a user specified no-gui, don't use GUI messageboxes --------- Co-authored-by: alwaysintreble <mmmcheese158@gmail.com>
…ipelagoMW#5514) * move `gui_enabled` to Utils * docstring * If a user specified no-gui, don't use GUI messageboxes --------- Co-authored-by: alwaysintreble <mmmcheese158@gmail.com>
…e archipelago version (#5) * Yoshi's Island - Fix some small logic issues that were reported, add json file (#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 <57900059+NewSoupVi@users.noreply.github.com> * KH2: Fix placing single items onto multiple locations in pre_fill (#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 (#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 (#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 (#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 <Berserker66@users.noreply.github.com> * APQuest: Fix import shadowing issue (#5769) * Fix import shadowing issue * another comment * Core: allow abstract world classes (#5468) * Docs: Make image path in contributing absolute (#5790) * Core: Make .apworlds importable using importlib (without force-importing them first) (#5734) * Make apworlds importable in general * move it to a probably more appropriate place? * oops * PyCharm: Fix name of apworld builder run config (#5824) * rename the apworld builder run config * Update Build APWorlds.run.xml --------- Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> * Multiserver: remove dead code (#5831) * Core: replace the eval in OptionsCreator.py (#5828) * Satisfactory: Fix typo in GoalSelection possible values description comment (#5826) * WebHost: Fix world sorting in /tutorial/ (#5785) * customserver: don't set last_activity that will be overwritten later (#5844) * Factorio: fix inverted condition in victory requirements (#5647) * The Messenger: Fix lambda capture issue in add_closed_portal_reqs (#5816) * Super Mario Land 2: Fix Goal Logic (#5781) * TUNIC: Fix region for the grass by the West Garden portal (#5784) * Core: Change image link to relative (#5802) * Shapez: Change image links to relative (#5803) * Noita: Fix filling Shop Item locations without updating item.location (#5840) In single-player multiworlds with small item pools, Noita was manually placing some items into Shop Item locations, but was only setting location.item, and not also setting item.location so that the item and location refer to one another. This has been fixed by using the MultiWorld.push_item() helper method to place the items instead of manually placing the items. * Core: Add `.apignore` format to not include files in APWorld Builder (#5779) * Timespinner: Align Lantern Logic (#5562) * FFMQ: Update link to upstream rando (#5838) * SC2: fix supreme logic hole (#5768) * sc2: Fixing a discrepancy between slot data and logic where story tech would not be granted for supreme if zerg was not a selected race. * sc2: Fixed an issue where Kinetic Blast was not listed as a vanilla Kerrigan ability * sc2: Fixing some functions that could force Kerrigan items into the pool when playing Kerriganless * sc2: excluding zerg excludes hots for vanilla-like mission order * Preprocessing options * Moving general empty selection handling to option preprocessing * Adding a unit test for empty race/campaign selection * sc2: Properly handling non-raceswapped campaigns when excluding campaigns based on race exclusions * sc2: Adding an explicit error message if a user excludes all missions in a way with no obvious resolution * Core: fix bug with missing help text (#5632) Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * APQuest: Explain game_name and supports_uri more in components.py (#5759) * APQuest: Explain game_name and supports_uri more in components.py Hopefully this can lead to more games implementing support for the "click on slot name -> everything launches automatically" functionality. * Update components.py * Update components.py * LADX: no pickle (#5849) * Core: Bump version from 0.6.6 to 0.6.7 (#5851) * Docs: add dev FAQ for 'should I start with the APWorld or the client?' (#5716) * Docs: add dev FAQ for 'should I start with the APWorld or the client?' * fix indentation of bullet point wrapped lines * use %20 for spaces in links * link to adding games.md and add #ap-modding-help to adding games.md * make APQuest a link * also linkify 'run a local server' * reword the 'judging client is easier' point to reflect a broader range of first-timers * move the 'not 100%' point into the introductory sentences, and tweak related wording * correct link * Docs: define and explain the trade-off of "local" vs "remote" items (#5718) * first draft * second draft * fix indentation of bullet point wrapped lines * move quote * explicitly discuss all three item handling flags, since the start inventory one is easily forgotten * rewrite to avoid a 'debate between two camps' framing * tweak the wording to allow for the possibility that some games can 'just' do both local and remote items without exposing this detail to the player * relative links * Docs: explicitly document why get_filler_item_name may return non-IC.filler items, despite its name (#5747) * Docs: explicitly document why get_filler_item_name may return non-IC.filler items, despite its name * reword * apply Scipio's rewordings * Update worlds/AutoWorld.py Co-authored-by: qwint <qwint.42@gmail.com> * any --------- Co-authored-by: qwint <qwint.42@gmail.com> * Docs: Show that Data is optional for bounces #5794 * Core: Add Pymem to requirements.txt (#5855) As to not break custom worlds when Jak & Daxter moves from PyMem to PyMemoryEditor * Super Mario 64: Add painting passability as items (#5294) * LADX: fix improved additional warps (#5858) * ModuleUpdate: Add explicit error when above max supported version (#5868) * Update messages and check * Make "official" error message show up for 3.14 * Core: Give clearer error message for invalid .apworld zip (#5871) * Update messages and check * Make "official" error message show up for 3.14 * Add zip error handling * Small cleanups * KH2: Deathlink and ingame item popups (#5206) --------- Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: Delilah <lindsaydiane@gmail.com> * Doc: WebHost: update readme and style guide (#4853) * Doc: WebHost living standard * Docs: update style guide for HTML, CSS and JS * Unblame phar * Too many words * The better choice * More rules * Removed too much * Docs: add recommendations for script defer and async * Docs: Explain building a single world with Build APWorlds component (#5879) * Doc: Reword required python version for AP (#5822) Many many people have read this and then installed 3.14, so it clearly needs rewording. * FFMQ: Fix Collect/Remove Asymmetry (#5253) * TLOZ: Move completion condition to be before set_rules is complete (#5391) * AHIT: Add option to shuffle Battle of the Birds director tokens and time bonus pickups (#5400) * [WebHost Docs] Updated and clarified new tracker endpoitns and misc fixes. (#5475) * Adding json/python to codeblocks to make it pretty, fixed spelling mistakes, swapped uuids for suuids in the examples, and expanded on /tracker and /static_tracker, and /slot_data_tracker giving the details of the API calls endpoints * Add in API Cacheing timers and related text blurb * updated for merged edit to /static_tracker * Removed timer from /datapackage/checksum * Docs (DS3): Fix the documentation for the Simple Early Bosses option (#5856) * Docs (DS3): Fix the documentation for the Simple Early Bosses option This option changed in the client a while ago, but we forgot to update the server. * Update Options.py * Docs: KH1 more troubleshooting and clearer nomenclature (#5872) * updated kh1 docs * second pass * tweak * Update worlds/kh1/docs/kh1_en.md Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com> * Update worlds/kh1/docs/kh1_en.md Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com> * Update worlds/kh1/docs/kh1_en.md Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com> * semicolon --------- Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com> * Fix, OptionsCreator: export options on Linux (#5774) * Core/Utils: Use correct env for save_filename from AppImage * OptionsCreator: run export on a separate thread Running a blocking call from kivy misbehaves on Linux. This also changes '*.yaml' to '.yaml' for Utils.save_filename, which is the correct way to call it. * Core/Utils: destroy Tk root after save/open_filename This allows using those functions from multiple threads. Note that pure Tk apps should not use those functions from Utils. * OptionsCreator: show snack when save_filename fails * OptionsCreator: disable window while exporting * OptionsCreator: fixing typing of added stuff * Core: Fix some typing errors (#4995) * Fix some type errors in Generate and Options * Add type parameter to new hint and fix whitespace errors * Update identifier style * Jak and Daxter: Replace Pymem, Add Linux Support (#5850) * Replace pymem with PyMemoryEditor (nonworking) * Add back pymem for faster windows address searching. * Replace other uses of pymem, parameterize executable names. * Updated to add linux and potential MacOS support to launching gk and … (#84) * Updated to add linux and potential MacOS support to launching gk and goalc. Still needs tested on MacOS. * Switched to using x-terminal-emulator instead of trying to find gnome-terminal or konsole Made argument building for suprocessing goalc easier to read Fixed OS X support to use osascript instead of attempting to run Terminal directly * Changed Terminal usage to use Archipelago's Launh utility, which handles terminal launching for me for both linux and OS X * Added try/except to re-connect the memory process. The process file/id changes over time on linux, and this works to re-connect without needing to restart * Removed Unsetting env var in favor of reporting to the source authors * Putting PyMemoryEditor local. (#85) * Putting PyMemoryEditor local --------- Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com> * Fixing minor problems (#87) * Refactor away circular launcher import. * Push latest PyMemoryEditor scan utility (#91) Co-authored-by: Louis M <Louis M> * Remove Pymem, rely solely on PyMemoryEditor. Add konsole support. * Jak 1: Remove vendored copy of PME, update imports, requirements, and manifest. * Jak 1: Prevent server connect until game is properly setup. * Jak 1: reduce REPL/Compiler confusion, small updates to setup guide. * Write hack for Konsole on AppImage to avoid OpenSSL error. * Refactor LD_LIBRARY_PATH hack. * Update worlds/jakanddaxter/agents/memory_reader.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update worlds/jakanddaxter/agents/memory_reader.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: Morgan <morgan07kelley@gmail.com> Co-authored-by: Louis M <prog@tioui.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: add spanish language for MLSS (#5172) * Docs: add spanish language for SM64 * Docs: add spanish language for MLSS * Update worlds/mlss/docs/setup_es.md Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> * Update worlds/mlss/docs/es_Mario & Luigi Superstar Saga.md Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> --------- Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> * Docs, SM64: Remove outdated FAQ item (#5887) It is no longer possible to connect to a multiworld game on a version of the client with this bug, as all versions with this bug report AP v0.3.5 or less * TWW: Support launcher command line arguments (#5806) * Support launcher command line arguments * Use `launch` instead of `launch_subprocess` * Remove old runner code * Satisfactory: Update Universal Tracker Method for FinalElevatorPhase Option (#5812) * MLSS: Add Manifest + Minor Bugfixes (#5728) * Remove outdated header change for ROM verification * Update Connections to be compatible with python ver. 3.8 * Update inno_setup.iss * Update inno_setup.iss * Merge branch 'main' of https://github.com/jamesbrq/ArchipelagoMainMLSS * Add Manifest + Minor Bugfixes * Even further safeguards for Oho Oasis Temples * Update basepatch.bsdiff * KH2: Add a new "CasualBounties" Setting (#4877) * KH2: casual bounties option * Casual Bounty: Adjust level bounty logic to correspond with max level check setting * Bugfix: We have one less possible bounty with corresponding level bounty logic * Casual Bounty: Move option to better spot * Bugfix: Prevent possible .remove() crash * Revert "Bugfix: We have one less possible bounty with corresponding level bounty logic" This reverts commit 3c929e00db910a176d9d882b6cc08494417177d2. * Bugfix: Typo in conditional * Casual Bounties: Remove Scar, add MCP I knew I was missing one second visit fight and Scar shouldn't be there he's a first visit * Casual Bounties: Add some clarity to the CasualBounty setting * Docs: Update docs to reflect new CasualBounty setting * KH2: Add bounty locations as location groups Feedback on this needed, trying to do this to make it work with the code above the additions made it so the game generated 1 less item than locations, despite linking properly It does function as intended though * KH2: Update docs * KH2: Add SuperBosses, Cups, AtlanticaToggle and SummonLevelLocationToggle to slot data (#5708) * Add SuperBosses, Cups and AtlanticaToggle * Add SummonLevelLocationToggle * Core: Add SDL_MOUSE_FOCUS_CLICKTHROUGH=1 environment variable to kvui (#5804) This variable should fix the 'double click' required when trying to interact with buttons on an unfocused window * SC2: Bump protobuf from 6.31.1 to 6.33.5 in /worlds/_sc2common (#5890) Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 6.31.1 to 6.33.5. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Commits](https://github.com/protocolbuffers/protobuf/commits) --- updated-dependencies: - dependency-name: protobuf dependency-version: 6.33.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Core, Tests: allow Archipelago items in all worlds (#5893) * Core: Add rule builder (#5048) * initial commit of rules engine * implement most of the stuff * add docs and fill out rest of the functionality * add in explain functions * dedupe items and add more docs * pr feedback and optimization updates * Self is not in typing on 3.10 * fix test * Update docs/rule builder.md Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> * pr feedback * love it when CI gives me different results than local * add composition with bitwise and and or * strongly typed option filtering * skip resolving location parent region * update docs * update typing and add decorator * add string explains * move simplify code to world * add wrapper rule * I may need to abandon the generic typing * missing space for faris * fix hashing for resolved rules * thank u typing extensions ilu * remove bad cacheable check * add decorator to assign hash and rule name * more type crimes... * region access rules are now cached * break compatibility so new features work * update docs * replace decorators with __init_subclass__ * ok now the frozen dataclass is automatic * one more type fix for the road * small fixes and caching tests * play nicer with tests * ok actually fix the tests * add item_mapping for faris * add more state helpers as rules * fix has from list rules * fix can reach location caching and add set completion condition * fix can reach entrance caching * implement HasGroup and HasGroupUnique * add more tests and fix some bugs * Add name arg to create_entrance Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * fix json dumping option filters * restructure and test serialization * add prop to disable caching * switch to __call__ and revert access_rule changes * update docs and make edge cases match * ruff has lured me into a false sense of security * also unused * fix disabling caching * move filter function to filter class * add more docs * tests for explain functions * Update docs/rule builder.md Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * chore: Strip out uses of TYPE_CHECKING as much as possible * chore: add empty webworld for test * chore: optimize rule evaluations * remove getattr from hot code paths * testing new cache flags * only clear cache for rules cached as false in collect * update test for new behaviour * do not have rules inherit from each other * update docs on caching * fix name of attribute * make explain messages more colorful * fix issue with combining rules with different options * add convenience functions for filtering * use an operator with higher precedence * name conflicts less with optionfilter * move simplify and instance caching code * update docs * kill resolve_rule * kill true_rule and false_rule * move helpers to base classes * update docs * I really should finish all of my * fix test * rename mixin * fix typos * refactor rule builder into folder for better imports * update docs * do not dupe collectionrule * docs review feedback * missed a file * remove rule_caching_enabled from base World * update docs on caching * shuffle around some docs * use option instead of option.value * add in operator and more testing * rm World = object * test fixes * move cache to logic mixin * keep test rule builder world out of global registry * todone * call register_dependencies automatically * move register deps call to call_single * add filtered_resolution * allow bool opts on filters * fix serialization tests * allow reverse operations --------- Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> * Core: Throw OptionError for option type Toggle in certain scenarios (#5874) * Throw OptionError for option type Toggle in certain scenarios * Adding missing space to Options.py Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> --------- Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> * Utils: Improvements to visualize_regions for debugging GER usage (#4685) * Improvements to visualize_regions for debugging GER usage - allow the user to pass in a dict[int, int] to visualize_regions that maps Entrance.randomization_group to a color in RGB form. This allows for better visualization of which dangling entrances should match, or which matching groups are not being correctly respected. - do full region visualization for unreached regions, so that entrances that could connect to new regions can be visualized. - visualize unconnected entrances on regions, in addition to connected and unconnected exits, so that available ER targets can be visualized as well * Add detail_disconnected_regions parameter to visualize_regions * Rename detail_disconnected_regions to detail_other_regions for consistency * Add auto_assign_colors param to visualize_regions * Make auto assignment of entrance colors deterministic * Assume show_other_regions is true if detail_other_regions is true * Remove unused random import * whitespace adjustments * Move overflow check to prevent potential infinite loop It wasn't exactly likely, as the user would have had to manually define all 4096 colors and then need an additional color on top of that, but accounting for that kind of nonsense is easy enough in this case. * positive condition --------- Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com> * APQuest: Improve the auto-generated .gitignore for data/sounds (#5670) I didn't quite think this through: In this specific case, you want the gitignore to also ignore itself, since it itself is an auto-generated file. * Webhost: Fix defaults for NamedRange and TextChoice (#5139) * TUNIC: Depriority for some items (#5589) * Stardew Valley: 7.x.x - The Jojapocalypse Update (#5432) Major Content update for Stardew Valley ### Features - New BundleRandomization Value: Meme Bundles - Over 100 custom bundles, designed to be jokes, references, trolls, etc - New Setting: Bundles Per Room modifier - New Setting: Backpack Size - New Setting: Secretsanity - Checks for triggering easter eggs and secrets - New Setting: Moviesanity - Checks for watching movies and sharing snacks with Villagers - New Setting: Eatsanity - Checks for eating items - New Setting: Hatsanity - Checks for wearing Hats - New Setting: Start Without - Allows you to select any combination of various "starting" items, that you will actually not start with. Notably, tools, backpack slots, Day5 unlocks, etc. - New Setting: Allowed Filler Items - Allows you to customize the filler items you'll get - New Setting: Endgame Locations - Checks for various expensive endgame tasks and purchases - New Shipsanity value: Crops and Fish - New Settings: Jojapocalypse and settings to customize it - Bundle Plando: Replaced with BundleWhitelist and BundleBlacklist, for more customization freedom - Added a couple of Host.yaml settings to help hosts allow or ban specific difficult settings that could cause problems if the people don't know what they are signing up for. Plus a truckload of improvements on the mod side, not seen in this PR. ### Removed features - Integration for Stardew Valley Expanded. It is simply disabled, the code is all still there, but I'm extremely tired of providing tech support for it, plus Stardew Valley 1.7 was announced and that will break it again, so I'm done. When a maintainer steps up, it can be re-enabled. * CommonClient: actually close the UI on /exit (#5860) * Aquaria: Adding a lots of options and one check (#4414) First, there is one check that has been added. The location is "Sitting on the throne before the cathedral with the crest on it" and the item is the "Opening of the Cathedral door". In Vanilla, sitting on the crested throne open the door to the cathedral. Now for the options added: - infinite_hot_soup: Make the game impossible to run out of hot soup once you got it as an item. - open_body_tongue: The body level (the ending level) is blocked by a big tongue. This option remove the tongue without having to go to the Sunken City (where it is normally removed) - maximum_ingredient_amount: In the Vanilla game, the ingredients and dishes count is limited to 8. This option make this count configurable. - skip_final_boss_3rd_form: The final boss has 5 forms. The 3rd one is long and not really challenging. So, this option is used to skip this form. - save_healing: Normally, the save points heal the player. There is also beds in the game that can heal the player. This option removed the healing from the save point and forced the player to heal using beds (or healing monsters or healing items) - no_progression_(whatever): Make this "whatever" (generally regions) exempt of progression items. Note that this is not using the exclusion-feature of AP, as these locations may still contain 'Useful' items. It is only guaranteed that no 'Progression' and 'Progression_Skip_Balancing'-items will appear in these regions. This option does not remove locations. I did not exclude or completely remove the regions because I don't have enough location to put every useful item in the game. There is also 2 new goals: - Four gods: The goal is obtained when the player beat the four gods (this is something like half the game). Useful to have quicker runs - Gods and Creator: Like the Four Gods run, but when the four gods are obtained, that open a transportation turtle to the final boss (the Creator) and the player have to beat the final boss to obtain the goal. Note that for the 2 new goals, all locations from the last 4 areas (Abyss, Frozen Veil, Sunken City and The Body) are completely removed (not just excluded). * Launcher: generate templates for option presets (#5062) * Doc: running from source and building on Linux (#5881) * CI: make the comment in 'Build' more verbose * Doc: add Linux running from source and build instructions * Doc: fix name in running from source on Linux * Update docs/running from source.md Co-authored-by: qwint <qwint.42@gmail.com> --------- Co-authored-by: qwint <qwint.42@gmail.com> * core: If a user specifies --no-gui, don't show GUI messageboxes (#5514) * move `gui_enabled` to Utils * docstring * If a user specified no-gui, don't use GUI messageboxes --------- Co-authored-by: alwaysintreble <mmmcheese158@gmail.com> * Launcher: run init_logging before importing from worlds (#5402) * WebHost: Better document config loading fallback (#5948) * change functionality to follow comment * revert code change and explicitly document intent * Celeste (Open World): v1.0.7 Logic Fixes (#5827) ### Logic Fixes: - Old Site A - Logic now allows for going backwards from the `Awake` checkpoint - Golden Ridge A - `Golden Strawberry` now requires `Moving Platforms` as it should - Mirror Temple A - `Room b-01c Strawberry` and `Room b-10 Strawberry` no longer erroneously require `Red Boosters` - `Golden Strawberry` now requires `Dash Refills` as it should - Reflection A - Logic now allows for going backwards from the `Reflection` checkpoint - Reflection B - Logic now allows for going backwards from the `Reflection` checkpoint - Farewell - `Power Source Key 2` now logically requires `Dash Switches` and `Double Dash Refills` as it should * Rule Builder: Make region.connect and add_event support rule builder (#5933) * make region.connect and add_event support rule builder * fix test * oops fix * update tests and typing * rm unused * Options: support "random" and variations for OptionSet with defined valid_keys (#4418) * seemingly works? needs testing * attempt docs update * move to verify resolution (keep?) * account for no valid keys and "random" being passed * Update advanced_settings_en.md * Update Options.py Co-authored-by: qwint <qwint.42@gmail.com> * Update Options.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * unify random handling between range and set * Update Options.py * Update Options.py * Update Options.py Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> * super is weird * fix item/location * remove groups from options * unittest * pep8 * Update Options.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Update Options.py --------- Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Core: Add missing args to rule builder inits (#5912) * add filtered_resolution to inits * update from_dict calls too * Saving Princess: Fix each slot sharing the same `music_table` (#5952) `music_table` was initialized on the `SavingPrincessWorld` *class*, so was being shared by each Saving Princess slot in the multiworld. This has been fixed by initializing the `music_table` attribute on each `SavingPrincessWorld` *instance* in `generate_early()` instead. * HK: Fix cached filler item names persisting between generations (#5950) HK's `get_filler_item_name` was writing lists into a ClassVar[dict] on the `HKWorld` class. This dict would not be cleaned out between generations on the same process, leaving behind cached data from previous generations. I confirmed the issue when running single-slot generations on a local webhost, where `self.cached_filler_items` could be already populated during `HKWorld.__init__()`. This has been fixed by putting an individual cache list on each HKWorld instance, instead of a shared cached on the class. * Factorio: Update Download Image in guides (#5953) * Docs: Replace the 'true filler' weasel words in adding games.md's mention of get_filler_item_name() (#5958) * replace the 'true filler' weasel words with a clear term defined by the linked method's docstring * Update docs/adding games.md Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Core: Better scaling explicit indirect conditions (#4582) * Core: Better scaling explicit indirect conditions When the number of connections to retry was large and `queue` was large `new_entrance not in queue` would get slow. For the average supported world, the difference this change makes is negligible. For a game like Blasphemous, with a lot of explicit indirect conditions, generation of 10 template Blasphemous yamls with `--skip_output --seed 1` and progression balancing disabled went from 19.0s to 17.9s (5.9% reduction in generation duration). * Create a new variable for the new set created from the intersection * WebHost: memory leak fixes (#5966) * ALTTP: remove `world: MultiWorld` and typing (#5974) * WebHost: Add CORS headers to API Endpoints (#5777) * Return new state man (Vi's note: I have chosen not to change this title) (#5978) * The Messenger: minor maintenance (#5965) * CI: upgrade InnoSetup to 6.7.0 (#5979) * MultiServer: don't keep multidata alive for race_mode (#5980) * Fix(undertale): prevent massive bounce msg spam for position updates (#5990) * fix(undertale): prevent massive bounce msg spam for position updates * make sure player is removed on leaving / timing out * do not check for tags: online, as bounce evaluation is or'd * Core: use typing_extensions `deprecated` (#5989) * Undertale: Use check_locations helper to avoid redundant sends (#5993) * Core: allow async def functions as commands (#5859) * Core: introduce finalize_multiworld and pre_output stages (#5700) Co-authored-by: Ishigh1 <bonjour940@yahoo.fr> Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * MultiServer: graceful shutdown for ctrl+c and sigterm (#5996) * OptionCreator: 0.6.6 reported issues (#5949) * MultiServer: fix Windows compatibility (#6010) * Docs: Better document state.locations_checked (#6018) * MM2: Fix /request command help (#5805) * MLSS: Fix client auto-connect bug + Client cleanup (#5895) * FF1: Added manifest (#5911) * OoT: change setup-guides to have 2.10 be the minimum version recommended (#5799) * Pokemon Emerald: Fix rare fuzzer errors (#5914) * Shivers: Adds Manifest File (#5918) * OOT: UTC deprecation warning fix (#5983) * Saving Princess: add manifest (#6008) * Lingo: Add archipelago.json (#6017) * Mega Man 3: Implement new game (#5237) * Stardew Valley: morel doesn't spawn in fall secret woods (#6003) * Docs: Don't serve non-static files in example_nginx.conf (#5971) * Docs: Don't serve non-static files in example_nginx.conf `try_files` will serve the file as long as it exists, which means I could `GET /autolauncher.py` and be served the file. * Use root instead of alias, add route for favicon * Update deploy/example_nginx.conf * Lingo: Fix logic for Near Eight Painting (#6014) * The Messenger: Universal Tracker support (#5344) * Test: Defaults for Options test (#5428) * Muse Dash: Adds 3 new music packs plus fixes being able to roll songs without a legal way to obtain them (#5698) * Fix missing } in example_nginx.conf (#6027) * Pokemon Emerald: Dexsanity Encounter Type Option (#6016) --------- Co-authored-by: Bryce Wilson <gyroscope15@gmail.com> * Dark Souls 3: Update location descriptions for Red Tearstone Ring and Hood of Prayer (#5602) RTSR's description was incorrect and Hood of Prayer was missing its description * TUNIC: Refactor entrance hint generation (#5620) * Refactor hint generation * Remove debug print * Early out per qwint's comment * WebHost: Update UTC datetime usage (timezone-naive) (#4906) * Saving Princess: Security fixes for issues detected by Bandit (#6013) * Saving Princess: absolute paths on suprocess.run * Saving Princess: more error handling for downloads * Saving Princess: rework launch_command setting Apparently subprocess.Popen requires a list for args instead of a string everywhere but in Windows, so the change was preventing the game from running on Linux. Additionally, the game is now launched using absolute paths. * Saving Princess: prevent bandit warnings * Saving Princess: remove unnecessary compare_digest * Saving Princess: fix Linux paths by using which * Saving Princess: rename launch command setting Previously, launch_command held a string. Now it holds a list of strings. Additionally, the defaults have changed. To prevent the wrong type from being used, the setting has been renamed, effectively abandoning the original launch_command setting. * Saving Princess: fix Linux default command return type Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: Add references to running from source (#6022) * Docs: Update plando_en.md with item group example (#6024) * Update plando_en.md with item group example Added example YAML block for item placement using an item group, including recommendation of use of `true` value with item groups to avoid unintended behaviors, with an example of the same. Adjustments more than welcome! * Made clarifying revision to description of Generator handling of item groups Clarified the behavior of the Generator regarding item creation when item groups are used in plando. * Tests: fix race in test hosting shutdown (#5987) * WebHost: add stats show cli command (#5995) Usage: flask -A "WebHost:get_app()" stats show Currently only shows sum and top10 biggest games packages. * LttP: add manifest (#6005) * RoR2: Seekers of the Storm (SOTS) DLC Support (#5569) * Core: Make Generic ER only consider the current world in isolation (#4680) * DS3: Use remaining_fill instead of custom fill (#4397) --------- Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com> * Docs: Reword 'could be generated from json' to avoid encouraging slow world loads (#5960) * KH2: Fix nondeterministic generation when CasualBounties is enabled (#5967) When CasualBounties was enabled, the location names in `exclusion_table["HitlistCasual"]` would be iterated into `self.random_super_boss_list` in `generate_early`, but `exclusion_table["HitlistCasual"]` was a `set`, so its iteration order would vary on each generation, even with same seed. Random location names would be picked from `self.random_super_boss_list` to place Bounty items at, so different locations could be picked on each generation with the same seed. `exclusion_table["Hitlist"]` is similar and was already a `list`, avoiding the issue of nondeterministic iteration order, so `exclusion_table["HitlistCasual"]` has been changed to a `list` to match. * Core: Update .gitignore to include an exe setup.py downloads (#6031) * CommonClient: Add explicit message for connection timeout (#5842) * Change timeout and add timeout-specific message * Revert open_timeout * Webhost: port reuse fix & configurable max room timeout (#6033) * WebHost: make autolauncher max room timeout configurable * WebHost: launch rooms with assigned port first * Factorio: only show fluid boxes on assembling machine 1 when the selected recipe needs fluids (#5412) * Core: other resources guide (#6043) Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com> * Rule Builder: Fix count resolution when Oring HasAnyCount (#6048) * Muse Dash: Add support for Wuthering Waves Pioneer Podcast and Ay-Aye Horse (#6071) * sc2: Fixing random fill errors in unit tests (#6045) * Core: Make Generate.main only init logging on __main__ (#6069) * setup.py: add rule_builder.cached_world to included list (#6070) * Clients: remove datapackage from persistent_storage ... (#6074) ... next time it gets written to. This makes loading peristent_storage faster in the future. * Core, Webhost: update and pin dependency versions (#6075) * Launcher: Add konsole to terminal list and rework launch dialog (#5684) * Make component launching indicate if no terminal window, add konsole * Attempt to spell better and remove whitespace * Update terminal priority * Make helper for clearing LD_LIBRARY_PATH * Add handling to linux launch * Hopefully fix setter * Apply suggestions from code review Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Docs: update macOS setup instructions for more specificity on Python version (#6078) * Pokemon Emerald: Fix Latios KeyError (#6056) * Muse Dash: Fix nondeterministic generation with include_songs (#6040) The include_songs option is an OptionSet, whose value is a set, but was being iterated to produce self.included_songs. Sets are unordered and may have a different iteration order each time a python process is run. This meant that the order of the elements in self.included_songs could differ even when generating with a fixed seed. This caused nondeterministic generation with the same seed because create_song_pool() deterministically randomly picks songs from self.included_songs, which could be in a different order each time, so different songs could be picked. * Messenger: Require Wingsuit to traverse Dark Cave (#6059) * Stardew valley: Four small fixes (#6055) * - Fixed the Dr Seuss Bundle asking for tigerseye (mineral) instead of tiger trout (fish) * - Made blue grass starter more consistent * - Fragments of the past does not rely on ginger island * - Removed legacy hard coded strange bun recipe that messed with chefsanity logic * Stardew Valley: trimmed lucky purple shorts need gold to make (#6034) The current logic only requires the shorts and a sewing machine, but a gold bar is also necessary * Stardew Valley: Fixed an issue where some specific option combinations could create more items than locations (#6012) * - Improved the dynamic locations count algorithm to take into account the nature of various heavy settings in both directions * - Fixes from Code Review * - We're only testing for sunday locations, might as well only take sunday locations in the list to test * - One more slight optimization * - Added consideration for bundles per room in filler locations counting * - Registered some more IDs to handle items up to 10 * Super Mario Land 2: Fix Space Zone 2 Logic (#6025) * Satisfactory: bug fix in __init__.py (#5930) Solved indentation error to return to intended functionality * lufia2ac: update CollectionRule import (#5936) * WebHost: Remove space before comma separators in tutorial authors (#5999) * Remove space before comma * Factorio authors update * Simplify template * APQuest: Various fixes (#6079) * Import Buffer from typing_extensions instead of collections.abc for 3.11 compat * always re-set sound volumes before playing * fix game window scaling if parent is vertical * make default volume lower * Satisfactory: Fixed buildings missing from goal check (#5772) * Aquaria: Fixing bug where Urchin Costume is not a progression damaging item (#5998) * Options Creator: bind free text set_value to text instead of on_text_validate (#5915) * SMW: Prevent receiving your own traps while aliased (#5763) * Rule Builder: Add field resolvers (#5919) * CI: set permissions, update and pin actions, CodeQL for actions (#6073) * CI: reduce default permissions to minimum * CI: update pin actions Most of them. CodeQL and action-gh-release is untouched for now. Immutable actions and actions/* are pinned to version, other actions are pinned to hash. * CI: make use of archive: false in upload-artifact also set compression level and error behavior for scan-build upload. * CI: update codeql and enable scanning actions * The Witness: (Unbeatable seed) Ensure Desert Laser Redirection is required when the box is rotated (#5889) * Unbeatable seed: 11 lasers + redirect when the box is rotated * naming * APQuest: Tap to move (#6082) * Tap to move * inputs * cleanup * oops * MM3: Bump world version (#6088) * Pokemon Emerald: Bump version (#6083) * APQuest: Fix focus issues (#6090) * My best attempt at fixing focus issues on Android * didn't mean to remove that * APQuest: Add Link to Poptracker Pack to Setup Guide (#6089) * Update setup_en.md * Update setup_de.md * WebHost: Fix hosting with invalid worlds installed (#5648) * APWorld Builder: Add option to skip opening output folder (#5847) * Stardew Valley: 0.6.7 Day 1 fixes (#6098) - The Shane and Sebastian Portrait filler items werent tagged properly. - The Beach Farm adds one secretsanity check, so it needs to be in the allsanity preset - The Allsanity preset is renamed to "Maxsanity" to encourage better defined terminology and Allsanity means something else - The "All Random" preset has been removed entirely. It has been the cause of too many beginner footguns over the years. People can still achieve the effect manually, but at least they'll have to try a little bit to ruin their own experience. * Various Worlds: purge `world: MultiWorld` (#5973) * Bomb Rush Cyberfunk: Fix logic requirement increasing after collecting item (#6105) * WebHost: 2025 to 2026 (#6094) * DKC3: Delete DKC3 (#6097) * Docs: fix misinformation in tests.md (#6125) * Factorio: Improve English instructions (#5306) * WebHost: Fix: strict suuid converter (#6130) * WebHost: disallow '=' and whitespace in SUUID and append the correct number of '=' This makes Room IDs unambiguous and avoids breaking if b64decode ever becomes strict. * Tests, WebHost: add SUUID tests * Tests, WebHost: add edge cases to SUUID tests * HK: add manifest (#6057) * Core: Remove worlds.generic.PlandoItem (#6035) * Test: add test for unpickling NetUtils enums (#5326) * Test: add test for unpickling NetUtils enums This verifies that Utils.ByValue either works or is not required, and once we drop ByValue, this validates that future Python versions do not break our Enums again. * Test: NetUtils enum switch to more direct pickle.dumps It's probably better to use the direct interface in case restricted_dumps does some funky stuff in the future. Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Test: NetUtils enum fix import for change --------- Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * APQuest: Switch to Rule Builder (#5906) * CachedRuleBuilderWorld * CachedRuleBuilderWorld * APQuest Rule Builder finished * Added comment Add a rule to check if the player has a Sword to destroy bushes. * Bump version + typo fix * Update worlds/apquest/rules.py Co-authored-by: Ian Robinson <drtchops@users.noreply.github.com> * Address Tchops' review comments --------- Co-authored-by: Ian Robinson <drtchops@users.noreply.github.com> * Options: Add more Option unit tests, add generic Option.__eq__, make cull_zeroes available to all OptionCounters #5905 * The Witness: Make "Early Good Item" an OptionSet allowing Symbols, Doors and Obelisk Keys (#3804) * New solution to that plando issue * better * Another warning * better comment * Best of both worlds I guess? * oops * Smarter code reuse * better comment * oop * lint * mypy * player_name * add unit test * oh * Rebrand time baby * This fits on one line * oop * Update worlds/witness/__init__.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * mypy * Reorganize some doors according to medic's suggestions * This should make it much faster (Thanks Medic) * Town Doors works because of Church being a check always, Church Entry feels really bad tho * Only add Desert Entry if there are no control panels stopping you * No overlap here, so why is it a set * Idk everything's kinda good without symbol shuffle * Just make sure, I guess * This makes way more sense doesn't it * Oh, this is probably important * oop * loc * oops 2 * ruff * that was already in there * Change the door picking a bit further * some renaming * slight wording change * Fix * Move it all to a new file * ruff * mypy * . * Make sure we're only adding as many tutorial checks as necessary * ruff * These checks aren't necessary, as the final list gets culled to only existing items anyway. It saves CPU cycles, but this is nicer for future compatibility * Special handling for caves shortcuts * 120 chars * Update worlds/witness/place_early_item.py Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Clean up Windmill & Theater cases * Make early_symbol_item removed instead * Add early_good_item to presets * replace double None checks with casts * That doesn't exist anymore * Mypy thing * Update the doors again a bit * Pycharm pls * ruff * forgot one * oop * Is it finally right? * Update options.py * Fix with new Panel Keys * Hopefully fix crash when one of the types runs out when the others haven't yet * oops * Medic suggestion * unused import * Update place_early_item.py * Update __init__.py * Update __init__.py * Update options.py * Add possible types to option desc * Make that include all Tutorial (Inside) checks * Update __init__.py * Update test_early_good_item.py * Update test_early_good_item.py * Slight cleanup * fix no tutorial locations being picked up by tutorial location size check --------- Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * APQuest: Fix Easy Mode boss having too much health to beat (#6146) * Change the boss' health to 2 in easy mode, adjust boss graphics to reflect this behavior * graphics formatting * The Witness: More control over progressive symbols (#3961) * More control over progressive symbols! * Cleanup crew * lol * Make it configurable how second stage items act on their own * only let independent symbols work if they're not progressive * revert defaults * Better description * comment for reviewers * A complicated docstring for a complicated function * More accurate * This probably works more generically * Actually, this would cause other issues anyway, so no need to make this generic yet * :/ * oops * Change the system to use collect/remove override so that plando and start inventory work correctly * Vi stop doing that thing challenge * Make SecondStateSymbolsActIndependently an OptionSet * jank * oop * this is why we make unit tests I guess * More unit tests * More unit tests * Add note about the absence of Rotated Shapers from the independent symbols optionset * More verbose description * More verbose description * slight reword * Ruff ruff :3 I am a good puppy <3 * Remove invis dots * oops * Remove some unused symbols * display name * linecounting -> discard * Make all progressive chains always work * Unfortunately, this optimisation is now unsafe with plando :( * oops * This is now a possible optimisation * optimise optimise optimise * optimise optimise optimise * fix * ruff * oh * fixed frfr * mypy * Clean up the tests a bit * oop * I actually like this better now, so I'm doing it as default * Put stuff on the actual item class for faster collect/remove * giga oops * Make proguseful work * None item left beef * unnecessary change * formatting * add proguseful test to progressive symbols tests * add proguseful test to progressive symbols tests * clean up collect/remove a bit more * giga lmfao * Put stuff in option groups * Add the new symbol items to hint system * bump req client version * fix soft conflict in unit tests * fix more merge errors * CI: update softprops/action-gh-release to v3.0.0 (#6162) The update will be required once GH drops support for Node 20. Also enables new options the action has now. * Factorio: move communication savegame to user dir (#5646) * Rule Builder: Fix rule hash collisions (#6169) * fix rule hash collisions * just let the dict do the work * Generate: Added "quantity" option for player yamls to use multiple times a single yaml (#4948) * Added option for player yamls. * Extended documentation * Minimized value extraction. * Added allow_quantity option to host.yaml * Added option for player yamls. * Extended documentation * Minimized value extraction. * Added allow_quantity option to host.yaml * Update settings.py Co-authored-by: qwint <qwint.42@gmail.com> * Update Generate.py Co-authored-by: qwint <qwint.42@gmail.com> * Added allow_quantity as application argument. * Quantity > 1, allow_quantity = false -> error instead of silent 1 * Added check for quantity <= 0; reverted settings import change * Update Generate.py --------- Co-authored-by: qwint <qwint.42@gmail.com> Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> * MMBN3: Add spaces in concatenated string#5689 * lufia2ac/docs: fix some errors (#5618) Co-authored-by: Ludwig <80899010+wordfcuk@users.noreply.github.com> * SML2: Send logic affecting randomiser options as slot_data (#5751) * Send logic affecting randomiser options as slot_data * SML2 - Universal Tracker support * Remove debug logs * Only check generation_is_fake once --------- Co-authored-by: alchav <alchav@jalchavware.com> * Docs: added an italian translation of the setup guide for Muse Dash (#5834) * Create setup_it.md Created an italian translation of the setup for muse dash. I could not find direct references to translating a setup so I am assuming this is the correct way to submit a translation. While I am a native in italian and I would consider myself fluent in english, I am not a translator so mistakes could have been made. * Update __init__.py * sm64ex: Recommend Flatpak for Linux users (#5897) * Pokemon RB: Fix mutating global item_groups in get_filler_item_name() (#5947) The `banned_items` variable was the `"Unique"`list within the `item_groups` global. `get_filler_item_name()` could then mutate `banned_items` through `banned_items.append("Poke Doll")` and `banned_items += item_groups["Vending Machine Drinks"]`, causing the contents of the `item_groups` global to be mutated. This has been fixed by making `banned_items` a shallow copy of `item_groups["Unique"]`. * Docs: Add a warning to world api.md#events that you want StatusUpdate, not events, for actually sending the goal (#5957) * AHIT: Update FAQ in setup guide (#5975) * Docs: Mention APQuest as a reference (#6000) The APQuest implementation of an APWorld is incredibly useful and should really have a mention here. * Docs: Make RB OptionFilter docs clearer (#6028) * add more docs for option filters * reword the whole things * style guide * LADX: doc update (#6050) * update gfxmod doc * romless generation * Update setup_en.md Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> --------- Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> * Jak1: yamlless UT support (#6066) * KH2: Update setup_en.md (#6129) * Docs: Rule Builder Filtered Example Fix (#6152) * MultiServer: update help doc on auto_shutdown#5917 * Docs: Rewrite get_filler_item_name's docstring to avoid implying it's for filling all unfilled locations #5956 * The Messenger: Add missing rules for Key of Strength#6124 * The Messenger: Add missing indirect conditions (#6101) * Docs: Add missing space to plando doc #6060 * Terraria: fix failing to generate with Calamity enabled and full accessibility on Mechanical Bosses goal #5787 * Undertale: Handle zero arg /auto_patch (#5130) * add ebf5 button, world launches without crashing this is pretty messy and a text client doesn't actually launch, but hey at least the world isn't crashing on start up now. though honestly if the reason i wasn't getting a text client to open wasn't because the world was instantly crashing, i might undo the world changes. i don't really want to touch the world right now, i just wanna get a text client opening. * Muse Dash: Update to DASH AND SHOOT (#6163) * ALttP: Fix starting mail and shield equipment from start inventory (#6154) * WebHost: Add deletion of old content to cleanup function (#6119) --------- Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Options: make template generation log the failing world if one fails (#6176) * Launcher: display window for failed world loads if any (#6058) * Options: Remove the "" from the start inventory examples (#6165) --------- Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com> * Super Mario 64: Basic testing (#4335) --------- Co-authored-by: Yussur Mustafa Oraji <N00byKing@hotmail.de> Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> * Blasphemous: Increase logic performance (#4585) --------- Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * WebHost: Fix adding weighted text options (#5116) * Docs: Added new documentation for DS3's enemy randomization (random_enemy_preset) (#5738) --------- Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com> * Rule Builder: Implement AtLeast (#6085) --------- Co-authored-by: Ian Robinson <ianronrobinson@gmail.com> * Pokemon Emerald: Switch to rule builder (#5923) * Core: Make manifest accessible as a world attribute (#6122) * WebHost: Add authors to supported games page (#6123) * CommonClient: Make hint cost (shown in server label) update (#6149) * A Link to the Past: We Have Enemizer at Home (#6153) * Muse Dash: Convert to Rule Builder (#6166) --------- Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com> * EBF5 client can now be launched * KH2: fix ice cream double counting for logic (#6068) * Factorio: Remove the need to have two separate installs (#4221) * Settings: validate FilePath hash on use (#5854) * Stardew Valley: Bypass CollectionState overhead by just calling prog_items (#6065) * SM64: Change power star item classification to be deprioritized (#6191) * The Messenger: Fix portal shuffle logic not using unlocked portals (#6194) * Core: reset log level when using pyximport (#6212) * EBF5: remove for loops inside class def, very small client changes i made these changes a while ago but im commiting them now because i have to get TCP communication implemented next before i can really continue and i want that stuff to be in their own commits * remove whitespace ruff complained about * ebf5: add incomplete async socket, minor cleanup the async socket is gonna need more changes to actually function as part of the ebf5 client * ebf5: integrate AsyncSocket into the client and add polished connect/disconnect ebf5 commands * ebf5: delete test cmd and comment unimplemented cmd * ebf5: improve wording slightly * ebf5: fix `Task` leak/memory leak * ebf5: microscopic text changes * ebf5: bandaid fix for using the client on windows there's probably a better way to do this but this bandaid fix works fine and I'm running out of time. also the logging thing is unrelated --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: PinkSwitch <52474902+PinkSwitch@users.noreply.github.com> Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com> Co-authored-by: Benjamin S Wolf <jokeserver@gmail.com> Co-authored-by: Ixrec <ericrhitchcock@gmail.com> Co-authored-by: MarioManTAW <mariomantaw@gmail.com> Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com> Co-authored-by: Ian Robinson <drtchops@users.noreply.github.com> Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> Co-authored-by: Benny D <78334662+benny-dreamly@users.noreply.github.com> Co-authored-by: James White <james_white_d@hotmail.com> Co-authored-by: Rob B <computerguy440+gh@gmail.com> Co-authored-by: Remy Jette <remy@remyjette.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> Co-authored-by: lepideble <147614625+lepideble@users.noreply.github.com> Co-authored-by: Scrungip <95324612+Scrungip@users.noreply.github.com> Co-authored-by: Scipio Wright <scipiowright@gmail.com> Co-authored-by: Colin <32756996+TriumphantBass@users.noreply.github.com> Co-authored-by: wildham <64616385+wildham0@users.noreply.github.com> Co-authored-by: Phaneros <31861583+MatthewMarinets@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: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com> Co-authored-by: Will Morrow <duh102@duh102.org> Co-authored-by: threeandthreee <a.l.nordstrom@gmail.com> Co-authored-by: JaredWeakStrike <96694163+JaredWeakStrike@users.noreply.github.com> Co-authored-by: Delilah <lindsaydiane@gmail.com> Co-authored-by: PlatanoBailando <13842799+cjmang@users.noreply.github.com> Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> Co-authored-by: Rosalie <61372066+Rosalie-A@users.noreply.github.com> Co-authored-by: CookieCat <81494827+CookieCat45@users.noreply.github.com> Co-authored-by: Jacob Lewis <JacobMLewis@Live.com> Co-authored-by: Natalie Weizenbaum <nex342@gmail.com> Co-authored-by: Omnises Nihilis <OmnisGamers@gmail.com> Co-authored-by: Flit <8645405+FlitPix@users.noreply.github.com> Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com> Co-authored-by: Morgan <morgan07kelley@gmail.com> Co-authored-by: Louis M <prog@tioui.com> Co-authored-by: GreenMarco <71452195+GreenMarco@users.noreply.github.com> Co-authored-by: PantoUwUr <99690102+PantoUwUr@users.noreply.github.com> Co-authored-by: RoobyRoo <thegreenrobby@gmail.com> Co-authored-by: soopercool101 <soopercoolstages@gmail.com> Co-authored-by: Jonathan Tan <tanjo3@users.noreply.github.com> Co-authored-by: mechanicset <22198918+mechanicset@users.noreply.github.com> Co-authored-by: jamesbrq <jamesbrq@gmail.com> Co-authored-by: PIEisFANTASTIC <49802408+PIEisFANTASTIC@users.noreply.github.com> Co-authored-by: ScorelessPine <scorelesspine@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: BadMagic100 <dempsey.sean@outlook.com> Co-authored-by: roseasromeo <11944660+roseasromeo@users.noreply.github.com> Co-authored-by: earthor1 <earthor1@gmail.com> Co-authored-by: Katelyn Gigante <clockwork.singularity@gmail.com> Co-authored-by: CodeGorilla <just.a.smith@att.net> Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com> Co-authored-by: josephwhite <22449090+josephwhite@users.noreply.github.com> Co-authored-by: agilbert1412 <alexgilbert@yahoo.com> Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com> Co-authored-by: alwaysintreble <mmmcheese158@gmail.com> Co-authored-by: PoryGone <98504756+PoryGone@users.noreply.github.com> Co-authored-by: BroOtti <35010852+BroOtti@users.noreply.github.com> Co-authored-by: DrAwesome4333 <22409322+DrAwesome4333@users.noreply.github.com> Co-authored-by: Chris W <trezc0@gmx.de> Co-authored-by: Ishigh1 <bonjour940@yahoo.fr> Co-authored-by: Suyooo <chrspangler@gmx.de> Co-authored-by: StripesOO7 <54711792+StripesOO7@users.noreply.github.com> Co-authored-by: Bryce Wilson <gyroscope15@gmail.com> Co-authored-by: GodlFire <46984098+GodlFire@users.noreply.github.com> Co-authored-by: LeonarthCG <33758848+LeonarthCG@users.noreply.github.com> Co-authored-by: Star Rauchenberger <fefferburbia@gmail.com> Co-authored-by: Noa Aarts <itepastra@gmail.com> Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com> Co-authored-by: Justus Lind <DeamonHunter@users.noreply.github.com> Co-authored-by: Goo-Dang <pado879@gmail.com> Co-authored-by: Matthew Wells <91291346+richarm4@users.noreply.github.com> Co-authored-by: Gryphonlady <gryphonlady1@gmail.com> Co-authored-by: Rjosephson <ryandj67@hotmail.com> Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com> Co-authored-by: Sebastian <127998064+SebaCape@users.noreply.github.com> Co-authored-by: Noa Aarts <noa@voorwaarts.nl> Co-authored-by: Alchav <59858495+Alchav@users.noreply.github.com> Co-authored-by: XxDERProjectxX <114278502+XxDERProjectxX@users.noreply.github.com> Co-authored-by: el-u <109771707+el-u@users.noreply.github.com> Co-authored-by: Jarno <jarnowesthof@gmail.com> Co-authored-by: EdricY <EdricY@users.noreply.github.com> Co-authored-by: palex00 <32203971+palex00@users.noreply.github.com> Co-authored-by: Trevor L <80716066+TRPG0@users.noreply.github.com> Co-authored-by: williamronn <wille.ronn@gmail.com> Co-authored-by: sudo-nano <63484662+sudo-nano@users.noreply.github.com> Co-authored-by: Mrks <68022469+mrkssr@users.noreply.github.com> Co-authored-by: Ludwig <80899010+wordfcuk@users.noreply.github.com> Co-authored-by: Oshroth <Oshroth@users.noreply.github.com> Co-authored-by: alchav <alchav@jalchavware.com> Co-authored-by: UCSA <moro.matteorosario@gmail.com> Co-authored-by: Yussur Mustafa Oraji <N00byKing@hotmail.de> Co-authored-by: Sophira <github@theblob.org> Co-authored-by: River Buizel <4911928+rocket0634@users.noreply.github.com> Co-authored-by: Sophia Caspe <avi.caspe@gmail.com> Co-authored-by: Seldom <38388947+Seldom-SE@users.noreply.github.com> Co-authored-by: Christina <123173340+Paperkoopa@users.noreply.github.com> Co-authored-by: Ian Robinson <ianronrobinson@gmail.com> Co-authored-by: Will Morrow <duh102@gmail.com>
What is this fixing or adding?
Utils.messagebox is called directly from various places within core code. This means that if an individual client wants to use those functions while in nogui mode, it will end up popping a GUI messagebox (or worse, crashing with "ModuleNotFoundError: No module named 'tkinter'").
This PR is based on alwaysintreble's work in #4925 and adds a
gui_enabledcheck toUtils.messagebox, falling back to aLoggingcall if the user specified--nogui.How was this tested?
python .\Launcher.py worldman -- --update-all --nogui. This loops throughLauncherComponents.install_apworldwhich attempts to show a messagebox per install.python .\Launcher.py "BizHawk Client" -- corrupt_patch.apemerald --nogui(A hand-mangled Emerald patch), which calls Utils.messagebox if it fails to patch the game.If this makes graphical changes, please attach screenshots.