* Town Pet the Dog
* Add shuffle dog to options presets
* I cri evritim
* I guess it's as good a time as any
* :(
* fix the soft conflict
* add all the shuffle dog options to some of the unit tests bc why not
* Laser Panels are just 'General' now, I'm pretty sure
* Could I really call it allsanity?
* Add panel hunt options
* Make sure all panels are either solvable or disabled in panel hunt
* Pick huntable panels
* Discards in disable non randomized
* Set up panel hunt requirement
* Panel hunt functional
* Make it so an event can have multiple names
* Panel hunt with events
* Add hunt entities to slot data
* ruff
* add to hint data, no client sneding yet
* encode panel hunt amount in compact hint data
* Remove print statement
* my b
* consistent
* meh
* additions for lcient
* Nah
* Victory panels ineligible for panel hunt
* Panel Hunt Postgame option
* cleanup
* Add data generation file
* pull out set
* always disable gate ep in panel hunt
* Disallow certain challenge panels from being panel hunt panels
* Make panelhuntpostgame its own function, so it can be called even if normal postgame is enabled
* disallow PP resets from panel hunt
* Disable challenge timer and elevetor start respectively in disable hunt postgame
* Fix panelhunt postgame
* lol
* When you test that the bug is fixed but not that the non-bug is not unfixed
* Prevent Obelisks from being panel hunt panels
* Make picking panels for panel hunt a bit more sophisticated, if less random
* Better function maybe ig
* Ok maybe that was a bit too much
* Give advanced players some control over panel hunt
* lint
* correct the logic for amount to pick
* decided the jingle thing was dumb, I'll figure sth out client side. Same area discouragement is now a configurable factor, and the logic has been significantly rewritten
* comment
* Make the option visible
* Safety
* Change assert slightly
* We do a little logging
* number tweak & we do a lil logging
* we do a little more logging
* Ruff
* Panel Hunt Option Group
* Idk how that got here
* Update worlds/witness/options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/witness/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* remove merge error
* Update worlds/witness/player_logic.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* True
* Don't have underwater sliding bridge when you have above water sliding bridge
* These are not actually connected lol
* get rid of unnecessary variable
* Refactor compact hint function again
* lint
* Pull out Entity Hunt Picking into its own class, split it into many functions. Kept a lot of the comments tho
* forgot to actually add the new file
* some more refactoring & docstrings
* consistent naming
* flip elif change
* Comment about naming
* Make static eligible panels a constant I can refer back to
* slight formatting change
* pull out options-based eligibility into its own function
* better text and stuff
* lint
* this is not necessary
* capitalisation
* Fix same area discouragement 0
* Simplify data file generation
* Simplify data file generation
* prevent div 0
* Add Vault Boxes -> Vault Panels to replacements
* Update options.py
* Update worlds/witness/entity_hunt.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update entity_hunt.py
* Fix some events not working
* assert
* remove now unused function
* lint
* Lasers Activate, Lasers don't Solve
* lint
* oops
* mypy
* lint
* Add simple panel hunt unit test
* Add Panel Hunt Tests
* Add more Panel Hunt Tests
* Disallow Box Short for normal panel hunt
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Make witness apworld mostly pass mypy
* Fix all remaining mypy errors except the core ones
* I'm a goofy stupid poopoo head
* Two more fixes
* ruff after merge
* Mypy for new stuff
* Oops
* Stricter ruff rules (that I already comply with :3)
* Deprecated ruff thing
* wait no i lied
* lol super nevermind
* I can actually be slightly more specific
* lint
* Trap weights
* Slightly change the way the option works
* Wording one more time
* Non optional to bring in line with Ixrec's implementation
* Be clear that it's not an absolute amount, but a weight
* E x c l a m a t i o n p o i n t
* Update worlds/witness/items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Wait I can just do this now lol
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
This new type of "area hint" will instead give you general information about one of the named geographical areas in your world.
Example:
```
There are 4 progression items in the "Quarry" region.
Of them, 2 are for other players.
Also, one of them is a laser for this world.
```
This also renames some of the locations in the game to better fit into an "area", such as the "River Obelisk" being renamed to the "Mountainside Obelisk".
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Two things have been happening.
**Incorrect Events**
Spoiler logs containing events that just straight up have an incorrect name and shouldn't be there. E.g. "Symmetry Island Yellow 3 solved - Monastery Laser Activation" when playing Laser Shuffle where this event should not exist, because Laser Activations are governed by the Laser items.
Now to be clear - There are no logic issues with it. The event will be in the spoiler log, but it won't actually be used in the way that its name suggests.
Basically, every panel in the game has exactly one event name. If the panel is referenced by another panel, it will reference the event instead. So, the Symmetry Laser Panel location will reference Symmetry Island Yellow 3, and an event is created for Symmetry Island Yellow 3. The only problem is the **name**: The canonical name for the event is related to "Symmetry Island Yellow 3" is "Monastery Laser Activation", because that's another thing that panel does sometimes.
From now on, event names are tied to both the panel referencing and the panel being referenced. Only once the referincing panel actually references the dependent panel (during the dependency reduction process in generate_early), is the event actually created.
This also removes some spoiler log clutter where unused events were just in the location list.
**Item classifications**
When playing shuffle_doors, there are a lot of doors in the game that are logically useless depending on settings. When that happens, they should get downgraded from progression to useful. The previous system for this was jank and terrible. Now there is a better system for it, and many items have been added to it. :)
* Refactor postgame code to be more readable
* Change all references to options to strings
* oops
* Fix some outdated code related to yaml-disabled EPs
* Small fixes to short/longbox stuff (thanks Medic)
* comment
* fix duplicate
* Removed triplicate lmfao
* Better comment
* added another 'unfun' postgame consideration
* comment
* more option strings
* oops
* Remove an unnecessary comparison
* another string missed
* Another was missed
* This would create a really bad merge error
All Pressure Plates puzzles are now always locations.
This makes a line where a Pressure Plates location gets added and a different one cause incorrect behavior.
Changes:
* Hints should feel a lot less same-y now ("Priority hints" are no longer always hints in disguise)
* Keep Hedge Mazes 1-3 and Pressure Plates 1-3 are added as locations in all settings
* Desert Final Room Hexagonal & Desert Final Room Bent 3 are added as locations
* Entries in exclude_locations that are referring to panels are now sent through slot data. This means they can be pre-skipped on the client side.
Fixes:
* Logic error in the Stoneworks that led to more restrictive seeds than necessary
* Logic error for Theater Flowers EP that led to more restrictive seeds than necessary
* Fixed crash in plando when "item" is a dict with weights
* Spoiler log locations were in random order per region, now they are consistent
* Fully functional DeathLink implementation. But it's always on right now :D
* Death Link options. Last commit: All entity names being sent through slot_data
* Tutorial Gate Close logic fix
* Improved option tooltip wording
* Fixed shuffle_postgame: false not excluding some locations
* Link to latest stable client rather than full releases page
* Make all Keep Pressure Plates logically required for the Laser Panel
* Added more Tutorial checks
* Added the remaining two Shipwreck Boat EPs to the exclude list for normal
* Improved itempool filling system, added warning if usefuls had to be eaten
* Moved creation of said warning string to utils
* Fixed logic bug causing broken seeds on Mountain Floor 2
* Hints system change
* Expert Logic Fix
* Fixed typo
* Better wording
* Added missing games to junk hints
* Made sure Entrance names are unique
* Fixed missing Obelisk Side
* Disable Non Randomized + EP Shuffle fix
* Fixed disable_non_randomized precompleted EPs being 'disabled' instead of 'precompleted'
* Fixed if/elif error
* Tutorial Gate Open local symbol item becomes local_early_item in expert instead
* Bump required client version. There is a beta client that sends 0.3.9.
* Removed print statement, oops
* Fixed itempool manipulation in pre_fill
* Replaced string concats with fstrings
* Improved make_warning_string function signature
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Improved performance on removing multiple items from multiworld itempool
* Comment
* Fixed errors with the code
* Made removal from itempool not fail unit test for multiple references
* Moved all item creation to create_items, got rid of itempool modifying system
* Colored Squares is no longer a good item, that's outdated
* Removed double if
* React to from_pool: false by removing a junk item
* Fixed warning if only Fnc Brain was removed
* Make use of string truthiness instead
* Made reading of plandoed items safer
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
## New Features:
- EP Shuffle (Individual or Obelisk Sides, with varying difficulty levels)
- Ability to play without Puzzle Randomization (I.e. vanilla + AP layer)
- Pet the Dog to get a Puzzle Skip :) (No, really.)
## Changes:
- Starting inventory behavior improved (Consider starting items like doors and lasers logically even if they aren't part of the mode)
- Audio Log hint system improved (On low hint counts, you will no longer get the same locations hinted every time, i.e. always hints are shuffled)
## Fixes:
- Many fixes to symbol requirements
- Fixes to "shuffle_postgame" (What checks are evaluated as "postgame" in specific modes)
- Logically irrelevant doors are now "useful" instead of "progression"
Fixes to postgame detection for "shuffle_postgame"
Renamed many locations to be symbol-independent ("Outside Tutorial Dots Introduction" becomes "Outside Tutorial Shed Row"). This is to set up future alternate modes, like Sigma Expert, which use completely different symbols.
Renamed most door items to be shorter, more consistent, and less... stupid. ("Bunker Bunker Entry Door" -> "Bunker Entry")
Removed "shuffle_uncommon"
Many logic fixes
* Fixed disable_non_randomized and other bugs
* Slight performance & code sensibility increase
* Added River Shortcut to Garden as a disabled check in disable_non_randomized
* Changed no progression items exception to a warning
* Added a list of disabled panels to slot_data for disable_non_randomized, so the client can automatically disable the right panels in the future
* Made no progression exception conditional on playercount
New options:
Shuffle Doors: Many doors in the game will open on their own upon receiving an item ("key").
Variant - Shuffle Door/Control Panels: Many panels in the game that open doors or control devices in the world will be off until receiving their respective item ("key").
Shuffle Lasers: Lasers no longer activate by solving the laser panel, instead you will get an item that activates the laser.
Shuffle Symbols: Now that there is something else to shuffle (doors / door panels), you can turn off Symbol Rando.
Shuffle Postgame (replaces "Shuffle Hard"): The randomizer will now determine by your settings which panels are in the "postgame" - Meaning they can only be accessed after you can complete your win condition anyway.
New option: "Early Secret Area" (Opens a door to the Challenge Area from the start of the game)
New option: Victory Conditions "Mountaintop Box Short" and "Mountaintop Box Long"
New options: Number of Lasers of Mountain, Number of Lasers for Challenge
New option & item: Add some number of "Puzzle Skips", which let you skip one puzzle in the game
Many logic fixes