* 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>
* 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>
* 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>
* 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
- 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.
* 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
* 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
* - 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
* - 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
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.