This allows for example, making a blueprint of your rocket silo with requester chests specifying a request for the 2-8 rocket part ingredients needed to build the rocket.
* Initial implementation of Generic ER
* Move ERType to Entrance.Type, fix typing imports
* updates based on testing (read: flailing)
* Updates from feedback
* Various bug fixes in ERCollectionState
* Use deque instead of queue.Queue
* Allow partial entrances in collection state earlier, doc improvements
* Prevent early loops in region graph, improve reusability of ER stage code
* Typos, grammar, PEP8, and style "fixes"
* use RuntimeError instead of bare Exceptions
* return tuples from connect since it's slightly faster for our purposes
* move the shuffle to the beginning of find_pairing
* do er_state placements within pairing lookups to remove code duplication
* requested adjustments
* Add some temporary performance logging
* Use CollectionState to track available exits and placed regions
* Add a method to automatically disconnect entrances in a coupled-compliant way
Update docs and cleanup todos
* Make find_placeable_exits deterministic by sorting blocked_connections set
* Move EntranceType out of Entrance
* Handle minimal accessibility, autodetect regions, and improvements to disconnect
* Add on_connect callback to react to succeeded entrance placements
* Relax island-prevention constraints after a successful run on minimal accessibility; better error message on failure
* First set of unit tests for generic ER
* Change on_connect to send lists, add unit tests for EntranceLookup
* Fix duplicated location names in tests
* Update tests after merge
* Address review feedback, start docs with diagrams
* Fix rendering of hidden nodes in ER doc
* Move most docstring content into a docs article
* Clarify when randomize_entrances can be called safely
* Address review feedback
* Apply suggestions from code review
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Docs on ERPlacementState, add coupled/uncoupled handling to deadend detection
* Documentation clarifications
* Update groups to allow any hashable
* Restrict groups from hashable to int
* Implement speculative sweeping in stage 1, address misc review comments
* Clean unused imports in BaseClasses.py
* Restrictive region/speculative sweep test
* sweep_for_events->advancement
* Remove redundant __str__
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Allow partial entrances in auto indirect condition sweep
* Treat regions needed for logic as non-dead-end regardless of if they have exits, flip order of stage 3 and 4 to ensure there are enough exits for the dead ends
* Typing fixes suggested by mypy
* Remove erroneous newline
Not sure why the merge conflict editor is different and worse than the normal editor. Crazy
* Use modern typing for ER
* Enforce the use of explicit indirect conditions
* Improve doc on required indirect conditions
---------
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: alwaysintreble <mmmcheese158@gmail.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
The data from `WORLD_PATHS_JSON` is supposed to be constant logic data
shared by all Landstalker worlds, but `add_path_requirements()` was
modifying this data such that after adding a `Lantern` requirement for a
dark region, subsequent Landstalker worlds to have their logic set could
also be affected by this `Lantern` requirement and previous Landstalker
worlds without damage boosting logic could also be affected by this
`Lantern` requirement because they could all be using the same list
instances. This issue would only occur for paths that have
`"requiredItems"` because all paths without required items would create
a new empty list, avoiding the problem.
The items in `data["itemsPlacedWhenCrossing"]` were also getting added
once for each Landstalker player, but there are no paths that have both
`"itemsPlacedWhenCrossing"` and `"requiredItems"`, so all such cases
would start from a new empty list of required items and avoid modifying
`WORLD_PATHS_JSON`.
* add hint_status JSONMessagePart handling
* add docs for hint_status JSONMessagePart
* fix link ordering
* Rename hint_status type in docs
Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com>
* Remove redundant explanation of hint_status field
Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com>
* Fix formatting on hint status docs again
Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com>
---------
Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com>
* Worked locally before that so this is a lot of work . So, initial push
* Changes in init with better create_regions (Thanks to Phar on discord). Add a rule for victory. Change the regions list to remove menu in the destination.
* Added tests for location rules and changed rule locations to lists instead of sets
* Fixed game var in InscryptionLocation
* Fixed location access by using the same system from The Messenger
* Remove unuse rules in init and add region rules. Add all the act 2 locations and items.
* Add locations rule for the left of the bridge in act 2
* Added test for bridge requirement and added a dash to locationfor clarity
* Added more act 2 rules and removed completion rule
* Created docs for website, added Salmon Card item, marked multiple items as "progression", renamed tomb checks, added more location rules, re-added completion rule
* Renamed tower bath check to "Tentacle", added monocle as requirement for some checks, adjusted setup doc a bit
* Added tentacle to monocle test
* Added forest burrow chest rule
* Switch the two clock location because the id was swapped and screwed with the logic
* Added Ancient Obol rule and adjusted docs
* Added act 3 locations/items/rules/tests
* Added drone & battery to trader rules
* Fixed tutorial docs, added more act 3 rules, renamed holo pelt locations
* Add an option for the optional death card feature
* Added well check and quill item, added rules and tests
* Renamed Gems module and Gems drone
* Added slot data options
* Added rule for act 3 middle pelt
* Added option for randomize ability and uptade the randomize deck option to fit the new setup
* Added randomize ability in slot data
* Added more requirements for mycologists boss since it's pretty much an impossible fight early on
* Finished the french translation of the installation guide
* Changed the french title in the guide
* Added goal option and tests associated to it + fixed goal requirement missing quill
* Added goal option to docs and removed references to the now discarded API mod. Fixed some french translations.
* Added ourobot item + renamed some goal settings
* Fixed locations and items for act 1 goal
* Added skip tutorial option. Cleanup and rename of some options. Added tower requirement for Mycologist Key check. Fixed missing comma in act 2 locations oopsies.
* Added missing rules for Extra Battery, Nano Armor and Goobert's painting
* Added act 1 deathlink behaviour and epitaph pieces randomization options + made pieces progressive + adjusted docs
* Fixed some docs typos
* Added act 3 clock rule. Paintings 2, 3 and Goobert's painting can no longer contain progression items.
* New options system and fixed act 1 goal option breaking
* Added skip epilogue and painting checks balancing options. Renamed randomize abilities to randomize sigils. Fixed generation issue with epitaph pieces randomization. Goobert's painting no longer forces filler. Removed traps option for now. Reworded some option descriptions.
* Attempting type fix for python 3.8
* Attempting type fix for python 3.8 again
* Added starting only option for randomize deck
* Fixed arbitrary rule error
* Import fix attempt
* Migrated to DeathLinkMixin instead of creating a custom DeathLink option, cleaned up imports, renamed Death Link related options to include "death_link" instead of "deathlink", replaced numeral values for option checking into class attributes for readability, slight optimization to tower rule, fixed typo in codes option description.
* Added bug report page to web class, condensed pelt rules to one function, added items/locations count in game docs and adjusted some sections
* Added Inscryption to CODEOWNERS
* Implemented a bunch of suggestions: Better handling of painting option, options as dict for slot data, remove redundant auto_display_name, use of has_all, better goal tests, demote skink card to filler if goal is act 1 and force filler on paintings
* Makes clover plant and squirrel head progression items if paintings are balanced + fixed other issues
* filler items, start inventory from pool, '->"
* Fix bleeding issue
* Copy the list instead
* Fixed bleeding using proper deep copy
* Remove unnecessary for loops in tests
* Add defaults to choice options
---------
Co-authored-by: Benjamin Gregoire <benjamingregoire@outlook.com>
Co-authored-by: Exempt-Medic <ExemptMedic@Gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* open mabe option
swaps east mabe rocks for bushes
* add open mabe to slot data
* use upstream overworld option
Instead of a standalone option, use upstream's "overworld" option, which we don't use yet but it leaves better space for the future
* use ladxr_setting for consistency
* newline
* enable some upstream settings
* flashing just disabled, no setting
* just enable fast text
* noflash and textmode as hidden options
* typo
* drop whitespace changes
* add hard mode to slot data
* textmode adjustments
fast text default (fixing mistake)
remove no text option (its buggy)
* unhide options
* Update worlds/ladx/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* adjustments
* Also indents plando_connections properly
* Adding apostrophe quotes around item, location, entrance/exit and boss names to make errors more readable
* Update plando_en.md
* Fixing test in Lufia II
When running Generate.py, uncaught exceptions are logged once to a file and twice to the console due to keeping the original excepthook. We can avoid this by filtering the file log out of the stream handler.
The `REGION_DEWFORD_TOWN/MAIN -> REGION_ROUTE109/BEACH` and
`REGION_ROUTE109/BEACH -> REGION_DEWFORD_TOWN/MAIN` entrances require
access to the
`REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN -> REGION_DEWFORD_TOWN/MAIN`
entrance in their access rules, so require indirect conditions for the
parent_region of the entrance: `REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN`.
* synonyms to new file, many added
* handle singular rupee
* remove redundant map and compass entries
* automatic pluralization
* add guardian acorn and piece of power
* move phrases to ItemIconGuessing.py
* organize, comment
* fix tab spacing
* fix
* add tunic and noita synonyms
* remove triangle instrument synonym
* reorganize, add some matches
* add tunic lucky up
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/ladx/ItemIconGuessing.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* handle camelCase and single rupee
* add indicate_progression option
Adds alternative system for foreign item icons that simply indicates whether or not the item is a progression item.
* improve splitting
drops some more characters, and also dont bother with rejoined stuff in name_cache because our splitting is better
* the witness stuff
* forbid more
* remove boost and surge
* Update worlds/ladx/ItemIconGuessing.py
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* match by game name
look at the name of the foreign game and only use game-specific entries for that game
* show message for all key drops
* updates from async test
* vi suggestions
* Adding FNAFW suggestions from @lolz1190 (#40)
* Adding FNAFW suggestions from @lolz1190
* missing comma
---------
Co-authored-by: threeandthreee <a.l.nordstrom@gmail.com>
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: palex00 <32203971+palex00@users.noreply.github.com>
* Docs: Dev FAQ - About indirect conditions
I wrote up a big effortpost about indirect conditions for nex on the [DS3 3.0 PR](https://github.com/ArchipelagoMW/Archipelago/pull/3128#discussion_r1693843193).
The version I'm [PRing to the world API document](https://github.com/ArchipelagoMW/Archipelago/pull/3552) is very brief and unnuanced, because I'd rather people use too many indirect conditions than too few.
But that might leave some devs wanting to know more.
I think that comment on nex's DS3 PR is probably the best detailed explanation for indirect conditions that exists currently.
So I think it's good if it exists somewhere. And the FAQ doc seems like the best place right now, because I don't want to write an entirely new doc at the moment.
* Actually copy in the text
* Update docs/apworld_dev_faq.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: qwint <qwint.42@gmail.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: qwint <qwint.42@gmail.com>
* Update apworld_dev_faq.md
* Update docs/apworld_dev_faq.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update apworld_dev_faq.md
* Update docs/apworld_dev_faq.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update apworld_dev_faq.md
* Update docs/apworld_dev_faq.md
Co-authored-by: qwint <qwint.42@gmail.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: qwint <qwint.42@gmail.com>
* fix the last couple of wording issues I have with the indirect condition section to apworld dev faq doc
* I didn't like that wording
* Apply suggestions from code review
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Apply suggestions from code review
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update docs/apworld_dev_faq.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update docs/apworld_dev_faq.md
* Update docs/apworld_dev_faq.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Add panel hunt plando option
* Keys are strs
* oops
* better message
* ,
* this doesn ot need to be here
* don't replace pre picked panels
* Update options.py
* rebase error
* rebase error
* oops
* Mypy
* ruff
* another rebase error
* actually this is a stupid change too
* bring over that change™️
* Update entity_hunt.py
* Update entity_hunt.py
* Update entity_hunt.py
Generation on Python 3.12 would print SyntaxWarnings due to invalid '\d'
escape sequences added in #3832.
Use raw strings to avoid `\` being used to escape characters.
* sm64ex: Rework logic for 100 Coins
* sm64ex: 100 Coins Vanilla Option
* sm64ex: Avoiding raw int comparisons for 100 coin option
* sm64ex: Change 100 coin option from toggle to choice
* sm64ex: use snake_case for 100 coin option
* just use "vanilla" for option comparison (exempt-medic feedback)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* sm64ex: remove vanilla 100 coins from item pool to remove overfilling stars
* yeah
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Remove range condition (35 is the min for total stars)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Add the cotm package with working seed playthrough generation.
* Add the proper event flag IDs for the Item codes.
* Oooops. Put the world completion condition in!
* Adjust the game name and abbreviations.
* Implement more settings.
* Account for too many start_inventory_from_pool cards with Halve DSS Cards Placed.
* Working (albeit very sloooooooooooow) ROM patching.
* Screw you, bsdiff! AP Procedure Patch for life!
* Nuke stage_assert_generate as the ROM is no longer needed for that.
* Working item writing and position adjusting.
* Fix the magic item graphics in Locations wherein they can be fixed.
* Enable sub-weapon shuffle
* Get the seed display working.
* Get the enemy item drop randomization working. Phew!
* Enemy drop rando and seed display fixes.
* Functional Countdown + Early Double setting
* Working multiworld (yay!)
* Fix item links and demo shenanigans.
* Add Wii U VC hash and a docs section explaining the rereleases.
* Change all client read/writes to EWRAM instead of Combined WRAM.
* Custom text insertion foundations.
* Working text converter and word wrap detector.
* More refinements to the text wrap system.
* Well and truly working sent/received messages.
* Add DeathLink and Battle Arena goal options.
* Add tracker stuff, unittests, all locations countdown, presets.
* Add to README, CODEOWNERS, and inno_setup
* Add to README, CODEOWNERS, and inno_setup
* Address some suggestions/problems.
* Switch the Items and Locations to using dataclasses.
* Add note about the alternate classes to the Game Page.
* Oooops, typo!
* Touch up the Options descriptions.
* Fix Battle Arena flag being detected incorrectly on connection and name the locked location/item pairs better.
* Implement option groups
* Swap the Lizard-man Locations into their correct Regions.
* Local start inventory, better DeathLink message handling, handle receiving over 255 of an item.
* Update the PopTracker pack links to no longer point to the Releases page.
* Add Skip Dialogues option.
* Update the presets for the accessibility rework.
* Swap the choices in the accessibility preset options.
* Uhhhhhhh...just see the apworld v4 changelog for this one.
* Ooops, typo!
* .
* Bunch of small stuff
* Correctly change "Fake" to "Breakable" in this comment.
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Make can_touch_water one line.
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Make broke_iron_maidens one line.
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Fix majors countdown and make can_open_ceremonial_door one line.
* Make the Trap AP Item less obvious.
* Add Progression + Useful stuff, patcher handling for incompatible versions, and fix some mypy stuff.
* Better option groups.
* Change Early Double to Early Escape Item.
* Update DeathLink description and ditch the Menu region.
* Fix the Start Broken choice for Iron Maiden Behavior
* Remove the forced option change with Arena goal + required All Bosses and Arena.
* Update the Game Page with the removal of the forced option combination change.
* Fix client potential to send packets nonstop.
* More review addressing.
* Fix the new select_drop code.
* Fix the new select_drop code for REAL this time.
* Send another LocationScout if we send Location checks without having the Location info.
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Exempt-Medic <ExemptMedic@Gmail.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Add more panels that should be panels
* Make it so the caves panel items don't exist in early caves
* Remove unused import
* oops
* Remove Jungle to Monastery Garden from usefulification list
* Add a basic test
* ruff
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>