The Colorful currently, in logic, does not expect you to solve the achievement panel until all of the doors are opened. This is not enforced by the client in complex door shuffle. It is also not typical of how achievements in Lingo usually work, and it ended up this way because of the fact that The Colorful is, uniquely, not a countdown panel. This change modifies logic so that solving each panel within The Colorful is required in order to access the achievement, rather than opening all of the doors. This will be accompanied by a change to the client that will turn the achievement panel into a countdown.
Bizhawk's "hard reset" option fills RAM with 0x55s. This causes game completion to be erroneously flagged, and likely many erroneous location checks with it. This fix checks for 0x55 and will not proceed to process anything if present.
* SoE: fix typing for tests
* SoE: explicitly export pyevermizer
To support loading the module from source (rather than module) we import
pyevermizer from `__init__.py` in other files. This has been an implicit export
and `mypy --strict` disables implicit exports, so we export it explicitly now.
* SoE: fix style in patch.py
* SoE: remove unused imports
* SoE: fix format mistakes
* SoE: cleaner typing in SoEOptions.flags
as suggested by beauxq
* Tests: add a test for worlds to only modify the itempool in `create_items`
* extend test multiworld setup instead of a new function
* cleanup the test a bit
* put more strict wording in `create_items` docstring
* list of shame
* Don't call `set_rules` before testing
* remove ChecksFinder from the list of shame
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Update en_Tunic.md
* Change emphasis a bit
* Move the "haven't played before" section up
* settings -> options
* Update worlds/tunic/docs/en_Tunic.md
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update setup as well with settings -> options and some recent changes to the in-game settings
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* SoE: new file naming
also fixes test base deprecation
* SoE: use options_dataclass
* SoE: moar typing
* SoE: no more multiworld.random
* SoE: replace LogicMixin by SoEPlayerLogic object
* SoE: add test that rocket parts always exist
* SoE: Even moar typing
* SoE: can haz apworld now
* SoE: pep up test naming
* SoE: use self.options for trap chances
* SoE: remove unused import with outdated comment
* SoE: move flag and trap extraction to dataclass
as suggested by beauxq
* SoE: test trap option parsing and item generation
Office elevator logic was written as
can reach Underground Tunnels OR can reach Office AND have Key for Office Elevator
Meaning that key for office elevator was not required if Underground Tunnels could be reached when it should be.
Changed to
(can reach Underground Tunnels OR can reach Office) AND have Key for Office Elevator
- Adds all the songs from the Touhou Mugakudan -Ⅲ- update.
- Increases the upper limit of additional songs to 508 due to there being 512 songs now.
- Finally fixes umpopoff. As it was the only song that had less than 3 difficulties but also didn't have proper difficulty values
Makes the client make sure the player has the correct amount of stat increase instead of letting the goa mod (apcompanion) do it
abilities: checks the slot where abilities could dupe unless that slot is being used for an actual abiliity given to the player
Fixes rule logic for location 'puzzle solved three floor elevator'. Missing a parenthesis caused only the key requirement to be checked for the blue maze region.
* Noita: Add note about allowable slot names
* Update character list
* Update init to raise an exception if a yaml has bad characters
* Slightly adjust exception message
It was brought up that if you attempt to non_local any of the starting weapons, there is still a chance for it to get chosen as your starting weapon if you are on a StartingPosition value lower than very_dangerous. This fix will attempt to build the starting weapons list accounting for non_local items, but if all possible weapons have been set to non_local, force one of them to be your starting weapon anyway since the player is still expecting a starting weapon in their world if they have chosen one of the lower StartingPosition values.
* Pokemon Emerald: Change "settings" to "options" in docs
* Pokemon Emerald: Fix two more usages of "setting" instead of "option"
* Pokemon Emerald: Minor rephrase in docs
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
There was a bug in non-expanded item pool where due to the base patch changes to accommodate more items in dungeons, some items were transformed into glitch items that removed bombs (this also happened in expanded item pool, but the item placement would overwrite the results of this bug so it didn't appear as frequently). Being a Zelda game, losing bombs is bad. This PR fixes the base patch process to avoid this bug, by properly carrying the value of a variable through a procedure.
Only attempt to place badges in badge locations if they are empty. Return unplaced badges to the item pool if fewer than 8 locations are being filled.
This should fix errors that occur when items are placed into badge locations via plando, or whatever other worlds may do.
The static class with the "disable forced good item" field is gone. Now, certain tests that want to check for specific access progression can run a method that removes the forced good item and adds it back to the pool. Tests that don't care about this will collect the forced good item like normal. This should prevent the intermittent fill failures on complex doors unit tests, since the forced good item should provide enough locations to fill in.
The most serious issue this PR addresses is that entrances that use doors without items (a small subset of doors when door shuffle is on, but *every* door when door shuffle is off, which is the default) underestimate the requirements needed to use that entrance. The logic would calculate the panels needed to open the door, but would neglect to keep track of the rooms those panels were in, meaning that doors would be considered openable if you had the colors needed to solve a panel that's in a room you have no access to.
Another issue is that, previously, logic would always consider the "ANOTHER TRY" panel accessible for the purposes of the LEVEL 2 panel hunt. This could result in seeds where the player is expected to have exactly the correct number of solves to reach LEVEL 2, but in reality is short by one because ANOTHER TRY itself is not revealed until the panel hunt is complete. This change marks ANOTHER TRY as non-counting, because even though it is technically a counting panel in-game, it can never contribute to the LEVEL 2 panel hunt. This issue could also apply to THE MASTER, since it is the only other counting panel with special access rules, although it is much less likely. This change adds special handling for counting THE MASTER. These issues were possible to manifest whenever the LEVEL 2 panel hunt was enabled, which it is by default.
Smaller logic issues also fixed in this PR:
* The Orange Tower Basement MASTERY panel was marked as requiring the mastery doors to be opened, when it was actually possible to get it without them by using a painting to get into the room.
* The Pilgrim Room painting item was incorrectly being marked as a filler item, despite it being progression.
* There has been another update to the game that adds connections between areas that were previously not connected. These changes were additive, which is why they are not critical.
* The panel stacks in the rhyme room now require both colours on each panel.
Fixes an issue where the Silph Co 6F hostage check becomes unavailable if Giovanni has been defeated on 11F. This is due to the NPC having separate scripts depending on whether Giovanni was defeated. The code for the check has been moved to before the branch.
Changes the finished_game to new variable so now it only checks the game's memory and if it has sent the finished flag before
Fixed ag2 not requiring 1 of each black magic
Fix hitlist if you exclude summon level 7 and have summon levels option turned off
As discovered by this bug report https://discord.com/channels/731205301247803413/1182522267687731220 it's currently possible to accidentally have the starting weapon of a player overwritten by a triforce fragment if TriforceLocations is set to dungeons and StartingPosition is set to dangerous. This fix makes sure to remove the location of a placed starting weapon if said location is in a dungeon from the pool of possible locations that triforce fragments can be placed in this circumstance.
Two items on Route 120 are on the other side of a pond but were considered accessible in logic without Surf.
Creates a new separate region for these two items and adds a rule for being able to Surf to get to this region. Also adds the items to the existing surf test.
Basically, the function for "checking entrances both ways" only checked one way. This resulted in unreachable locations.
This affects Expert seeds with (non-remote doors and specific types of EP Shuffle), as well as seeds with non-remote doors + specific types of disabled panels + specific types of EP Shuffle.
Also includes two changes that makes spoiler logs nicer (not creating unnecessary events).
`colorama` has type stubs when it didn't before
`ZillionDeltaPatch.hash` annotated type could be `None` but md5s doesn't allow `None`
type of `CollectionState.prog_items` changed
`WorldTestBase` moved
all of the following are related to this issue:
https://github.com/python/typing/discussions/1486
CommonContext for `command_processor` (is invalid without specifying immutable - but I don't need it anyway)
ZillionWorld options and settings (is invalid without specifying immutable - but I do need it)