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.
* adds a custom KeyError for raising on world.create_item() if the passed in name is invalid
* Update __init__.py
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Add cccharles world to AP
> The logic has been tested, the game can be completed
> The logic is simple and it does not take into account options
! The documentations are a work in progress
* Update documentations
> Redacted French and English Setup Guides
> Redacted French and English Game Pages
* Handling PR#5287 remarks
> Revert unexpected changes on .run\Archipelago Unittests.run.xml (base Archipelago file)
> Fixed typo "querty" -> "qwerty" in fr and eng Game Pages
> Adding "Game page in other languages" section to eng Game Page documentation
> Improved Steam path in fr and eng Setup Guides
* Handled PR remarks + fixes
> Added get_filler_item_name() to remove warnings
> Fixed irrelevant links for documentations
> Used the Player Options page instead of the default YAML on GitHub
> Reworded all locations to make them simple and clear
> Split some locations that can be linked with an entrance rule
> Reworked all options
> Updated regions according to locations
> Replaced unnecessary rules by rules on entrances
* Empty Options.py
Only the base options are handled yet, "work in progress" features removed.
* Handled PR remark
> Fixed specific UT name
* Handled PR remarks
> UT updated by replacing depreciated features
* Add start_inventory_from_pool as option
This start_inventory_from_pool option is like regular start inventory but it takes items from the pool and replaces them with fillers
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Handled PR remarks
> Mainly fixed editorial and minor issues without impact on UT results (still passed)
* Update the guides according to releases
> Updated the depreciated guides because the may to release the Mod has been changed
> Removed the fixed issues from 'Known Issues'
> Add the "Mod Download" section to simplify the others sections.
* Handled PR remark
> base_id reduced to ensure it fits to signed int (32 bits) in case of future AP improvements
* Handled PR remarks
> Set topology_present to False because unnecessary
> Added an exception in case of unknown item instead of using filler classification
> Fixed an issue that caused the "Bug Spray" to be considered as filler
> Reworked the test_claire_breakers() test to ensure the lighthouse mission can only be finished if at least 4 breakers are collected
* Added Choo-Choo Charles to README.md
* CCCharles: Added rules to win
> The victory could be accessed from sphere 1, this is now fixed by adding the following items as requirements:
- Temple Key
- Green Egg
- Blue Egg
- Red Egg
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Restrict Allow Orphan for items to missions that already require that
* Add test for build mission orphan behavior
* Update item lists for Allow Orphan flag
* Update the unit test to clear that BotB is not in the mission list
* Update unit test name
* Make it actually return false if it gets to the backup lists and fails them
* Fix stuff after merge
* Add outlet regions, create new regions as needed for them
* Put together part of decoupled and direction pairs
* make direction pairs work
* Make decoupled work
* Make fixed shop work again
* Fix a few minor bugs
* Fix a few minor bugs
* Fix plando
* god i love programming
* Reorder portal list
* Update portal sorter for variable shops
* Add missing parameter
* Some cleanup of prints and functions
* Fix typo
* it's aliiiiiive
* Make seed groups not sync decoupled
* Add test with full-shop plando
* Fix bug with vanilla portals
* Handle plando connections and direction pair errors
* Update plando checking for decoupled
* Fix typo
* Fix exception text to be shorter
* Add some more comments
* Add todo note
* Remove unused safety thing
* Remove extra plando connections definition in options
* Make seed groups in decoupled with overlapping but not fully overlapped plando connections interact nicely without messing with what the entrances look like in the spoiler log
* Fix weird edge case that is technically user error
* Add note to fixed shop
* Fix parsing shop names in UT
* Remove debug print
* Actually make UT work
* multiworld. to world.
* Fix typo from merge
* Make it so the shops show up in the entrance hints
* Fix bug in ladder storage rules
* Remove blank line
* # Conflicts:
# worlds/tunic/__init__.py
# worlds/tunic/er_data.py
# worlds/tunic/er_rules.py
# worlds/tunic/er_scripts.py
# worlds/tunic/rules.py
# worlds/tunic/test/test_access.py
* Fix issues after merge
* Update plando connections stuff in docs
* Make early bushes only contain grass
* Fix library mistake
* Backport changes to grass rando (#20)
* Backport changes to grass rando
* add_rule instead of set_rule for the special cases, add special cases for back of swamp laurels area cause I should've made a new region for the swamp upper entrance
* Remove item name group for grass
* Update grass rando option descriptions
- Also ignore grass fill for single player games
* Ignore grass fill option for solo rando
* Update er_rules.py
* Fix pre fill issue
* Remove duplicate option
* Add excluded grass locations back
* Hide grass fill option from simple ui options page
* Check for start with sword before setting grass rules
* Update worlds/tunic/options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* has_stick -> has_melee
* has_stick -> has_melee
* Add a failsafe for direction pairing
* Fix playthrough crash bug
* Remove init from logicmixin
* Updates per code review (thanks hesto)
* has_stick to has_melee in newer update
* has_stick to has_melee in newer update
* Exclude grass from get_filler_item_name
- non-grass rando games were accidentally seeing grass items get shuffled in as filler, which is funny but probably shouldn't happen
* Update worlds/tunic/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* change the rest of grass_fill to local_fill
* Filter out grass from filler_items
* remove -> discard
* Update worlds/tunic/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Starting out
* Rules for breakable regions
* # Conflicts:
# worlds/tunic/__init__.py
# worlds/tunic/combat_logic.py
# worlds/tunic/er_data.py
# worlds/tunic/er_rules.py
# worlds/tunic/er_scripts.py
* Cleanup more stuff after merge
* Revert "Cleanup more stuff after merge"
This reverts commit a6ee9a93da.
* Revert "# Conflicts:"
This reverts commit c74ccd74a4.
* Cleanup more stuff after merge
* change has_stick to has_melee
* Update grass list with combat logic regions
* More fixes from combat logic merge
* Fix some dumb stuff (#21)
* Reorganize pre fill for grass
* make the rest of it work, it's pr ready, boom
* Make it work in not pot shuffle
* Merge grass rando
* multiworld -> world get_location, use has_any
* Swap out region for West Garden Before Terry grass
* Adjust west garden rules to add west combat region
* Adjust grass regions for south checkpoint grass
* Adjust grass regions for after terry grass
* Adjust grass regions for west combat grass
* Adjust grass regions for dagger house grass
* Adjust grass regions for south checkpoint grass, adjust regions and rules for some related locations
* Finish the remainder of the west garden grass, reformat ruined atoll a little
* More hex quest updates
- Implement page ability shuffle for hex quest
- Fix keys behind bosses if hex goal is less than 3
- Added check to fix conflicting hex quest options
- Add option to slot data
* Change option comparison
* Change option checking and fix some stuff
- also keep prayer first on low hex counts
* Update option defaulting
* Update option checking
* Fix option assignment again
* Merge in hex hunt
* Merge in changes
* Clean up imports
* Add ability type to UT stuff
* merge it all
* Make local fill work across pot and grass (to be adjusted later)
* Make separate pools for the grass and non-grass fills
* Fix id overlap
* Update option description
* Fix default
* Reorder localfill option desc
* Load the purgatory ones in
* Adjustments after merge
* Fully remove logicrules
* Fix UT support with fixed shop option
* Add breakable shuffle to the ut stuff
* Make it load in a specific number of locations
* Add Silent's spoiler log ability thing
* Fix for groups
* Fix for groups
* Fix typo
* Fix hex quest UT support
* Use .get
* UT fixes, classification fixes
* Rename some locations
* Adjust guard house names
* Adjust guard house names
* Rework create_item
* Fix for plando connections
* Rename, add new breakables
* Rename more stuff
* Time to rename them again
* Fix issue with fixed shop + decoupled
* Put in an exception to catch that error in the future
* Update create_item to match main
* Update spoiler log lines for hex abilities
* Burn the signs down
* Bring over the combat logic fix
* Merge in combat logic fix
* Silly static method thing
* Move a few areas to before well instead of east forest
* Add an all_random hidden option for dev stuff
* Port over changes from main
* Fix west courtyard pot regions
* Remove debug prints
* Fix fortress courtyard and beneath the fortress loc groups again
* Add exception handling to deal with duplicate apworlds
* Fix typo
* More missing loc group conversions
* Initial fuse shuffle stuff
* Fix gun missing from combat_items, add new for combat logic cache, very slight refactor of check_combat_reqs to let it do the changeover in a less complicated fashion, fix area being a boss area rather than non-boss area for a check
* Add fuse shuffle logic
* reorder atoll statue rule
* Update traversal reqs
* Remove fuse shuffle from temple door
* Combine rules and option checking
* Add bell shuffle; fix fuse location groups
* Fix portal rules not requiring prayer
* Merge the grass laurels exit grass PR
* Merge in fortress bridge PR
* Do a little clean up
* Fix a regression
* Update after merge
* Some more stuff
* More Silent changes
* Update more info section in game info page
* Fix rules for atoll and swamp fuses
* Precollect cathedral fuse in ER
* actually just make the fuse useful instead of progression
* Add it to the swamp and cath rules too
* Fix cath fuse name
* Minor fixes and edits
* Some UT stuff
* Fix a couple more groups
* Move a bunch of UT stuff to its own file
* Fix up a couple UT things
* Couple minor ER fixes
* Formatting change
* UT poptracker stuff enabled since it's optional in one of the releases
* Add author string to world class
* Adjust local fill option name
* Update ut_stuff to match the PR
* Add exception handling for UT with old apworld
* Fix missing tracker_world
* Remove extra entrance from cath main -> elevator
Entry <-> Elev exists,
Entry <-> Main exists
So no connection is needed between Main and Elev
* Fix so that decoupled doesn't incorrectly use get_portal_info and get_paired_portal
* Fix so that decoupled doesn't incorrectly use get_portal_info and get_paired_portal
* Update for breakables poptracker
* Backup and warnings instead
* Update typing
* Delete old regions and rules, move stuff to logic_helpers and constants
* Delete now much less useful tests
* Fix breakables map tracking
* Add more comments to init
* Add todo to grass.py
* Fix up tests
* Pull out fuse and bell shuffle
* Pull out fuse and bell shuffle
* Update worlds/tunic/options.py
Co-authored-by: qwint <qwint.42@gmail.com>
* Update worlds/tunic/logic_helpers.py
Co-authored-by: qwint <qwint.42@gmail.com>
* {} -> () in state functions
* {} -> () in state functions
* Change {} -> () in state functions, use constant for gun
* Remove floating constants in er_data
* Finish hard deprecating FixedShop
* Finish hard deprecating FixedShop
* Fix zig skip showing up in decoupled fixed shop
---------
Co-authored-by: silent-destroyer <osilentdestroyer@gmail.com>
Co-authored-by: Silent <110704408+silent-destroyer@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: qwint <qwint.42@gmail.com>
* APWorld Skeleton
* Hair Color Rando and first items
* All interactable items
* Checkpoint Items and Locations
* First pass sample intermediate data
* Bulk of Region/location code
* JSON Data Parser
* New items and Level Item mapping
* Data Parsing fixes and most of 1a data
* 1a complete data and region/location/item creation fixes
* Add Key Location type and ID output
* Add options to slot data
* 1B Level Data
* Added Location logging
* Add Goal Area Options
* 1c Level Data
* Old Site A B C level data
* Key/Binosanity and Hair Length options
* Key Item/Location and Clutter Event handling
* Remove generic 'keys' item
* 3a level data
* 3b and 3c level data
* Chapter 4 level data
* Chapter 5 Logic Data
* Chapter 5 level data
* Trap Support
* Add TrapLink Support
* Chapter 6 A/B/C Level Data
* Add active_levels to slot_data
* Item and Location Name Groups + style cleanups
* Chapter 7 Level Data and Items, Gemsanity option
* Goal Area and victory handling
* Fix slot_data
* Add Core Level Data
* Carsanity
* Farewell Level Data and ID Range Update
* Farewell level data and handling
* Music Shuffle
* Require Cassettes
* Change default trap expiration action to Deaths
* Handle Poetry
* Mod versioning
* Rename folder, general cleanup
* Additional Cleanup
* Handle Farewell Golden Goal when Include Goldens is off
* Better handling of Farewell Golden
* Update Docs
* Beta test bug fixes
* Bump to v1.0.0
* Update Changelog
* Several Logic tweaks
* Update APWorld Version
* Add Celeste (Open World) to README
* Peer review changes
* Logic Fixes:
* Adjust Mirror Temple B Key logic
* Increment APWorld version
* Fix several logic bugs
* Add missing link
* Add Item Name Groups for common alternative item names
* Account for Madeline's post-Celeste hair-dying activities
* Account for ignored member variable and hardcoded color in Celeste codebase
* Add Blue Clouds to the logic of reaching Farewell - intro-02-launch
* Type checking workaround
* Bump version number
* Adjust Setup Guide
* Minor typing fixes
* Logic and PR fixes
* Increment APWorld Version
* Use more world helpers
* Core review
* CODEOWNERS
* Minor logic fix and insert APWorld version into spoiler
* Fix merge error
Feature highlights:
- Adds many content to the SC2 game
- Allows custom mission order
- Adds race-swapped missions for build missions (except Epilogue and NCO)
- Allows War Council Nerfs (Protoss units can get pre - War Council State, alternative units get another custom nerf to match the power level of base units)
- Revamps Predator's upgrade tree (never was considered strategically important)
- Adds some units and upgrades
- Locked and excluded items can specify quantity
- Key mode (if opt-in, missions require keys to be unlocked on top of their regular regular requirements
- Victory caches - Victory locations can grant multiple items to the multiworld instead of one
- The generator is more resilient for generator failures as it validates logic for item excludes
- Fixes the following issues:
- https://github.com/ArchipelagoMW/Archipelago/issues/3531
- https://github.com/ArchipelagoMW/Archipelago/issues/3548
* kinda driven by wanting to test the labeling change in prod but also components are a weird part of the ecosystem and could use more documentation.
* additional text describing launch/launch_subprocess and their use
* Update docs/adding games.md
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
---------
Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com>
* APWorld Skeleton
* Hair Color Rando and first items
* All interactable items
* Checkpoint Items and Locations
* First pass sample intermediate data
* Bulk of Region/location code
* JSON Data Parser
* New items and Level Item mapping
* Data Parsing fixes and most of 1a data
* 1a complete data and region/location/item creation fixes
* Add Key Location type and ID output
* Add options to slot data
* 1B Level Data
* Added Location logging
* Add Goal Area Options
* 1c Level Data
* Old Site A B C level data
* Key/Binosanity and Hair Length options
* Key Item/Location and Clutter Event handling
* Remove generic 'keys' item
* 3a level data
* 3b and 3c level data
* Chapter 4 level data
* Chapter 5 Logic Data
* Chapter 5 level data
* Trap Support
* Add TrapLink Support
* Chapter 6 A/B/C Level Data
* Add active_levels to slot_data
* Item and Location Name Groups + style cleanups
* Chapter 7 Level Data and Items, Gemsanity option
* Goal Area and victory handling
* Fix slot_data
* Add Core Level Data
* Carsanity
* Farewell Level Data and ID Range Update
* Farewell level data and handling
* Music Shuffle
* Require Cassettes
* Change default trap expiration action to Deaths
* Handle Poetry
* Mod versioning
* Rename folder, general cleanup
* Additional Cleanup
* Handle Farewell Golden Goal when Include Goldens is off
* Better handling of Farewell Golden
* Update Docs
* Beta test bug fixes
* Bump to v1.0.0
* Update Changelog
* Several Logic tweaks
* Update APWorld Version
* Add Celeste (Open World) to README
* Peer review changes
* Logic Fixes:
* Adjust Mirror Temple B Key logic
* Increment APWorld version
* Fix several logic bugs
* Add missing link
* Add Item Name Groups for common alternative item names
* Account for Madeline's post-Celeste hair-dying activities
* Account for ignored member variable and hardcoded color in Celeste codebase
* Add Blue Clouds to the logic of reaching Farewell - intro-02-launch
* Type checking workaround
* Bump version number
* Adjust Setup Guide
* Minor typing fixes
* Logic and PR fixes
* Increment APWorld Version
* Use more world helpers
* Core review
* CODEOWNERS
* changes
* cherry pick stuff
* use newly create methods more
* use new assets to ease readability
* remove unneeded assert
* add assert region adapters
* use new asserts yay
* self review
* self review
* review
* replace parrot express with transportation constant
* bullshit commit again
* revert a bunch of off topic changes
* these changes seems to be on topic
* revert some undesired merge changes
* review imports
* use type instead of instance in some options
* properly return super
* review
* change one str to use a constnat
* Ensure that OptionSets and OptionLists get exported to yaml, even if nothing is selected
* forgot ItemSet and LocationSet
* Make it even less likely for there to be overlap
* Updated to remove deprecated call.
* Removed unused argument.
* Removed errant client calls to Utils.get_options, and fixed call in Rom.py that was passing an argument.
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* first working (most of the time) progression generation for SM using VariaRandomizer's rules, items, locations and accessPoint (as regions)
* first working single-world randomized SM rom patches
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* Fixed multiworld support patch not working with VariaRandomizer's
Added stage_fill_hook to set morph first in progitempool
Added back VariaRandomizer's standard patches
* + added missing files from variaRandomizer project
* + added missing variaRandomizer files (custom sprites)
+ started integrating VariaRandomizer options (WIP)
* Some fixes for player and server name display
- fixed player name of 16 characters reading too far in SM client
- fixed 12 bytes SM player name limit (now 16)
- fixed server name not being displayed in SM when using server cheat ( now displays RECEIVED FROM ARCHIPELAGO)
- request: temporarly changed default seed names displayed in SM main menu to OWTCH
* Fixed Goal completion not triggering in smClient
* integrated VariaRandomizer's options into AP (WIP)
- startAP is working
- door rando is working
- skillset is working
* - fixed itemsounds.ips crash by always including nofanfare.ips into multiworld.ips (itemsounds is now always applied and "itemsounds" preset must always be "off")
* skillset are now instanced per player instead of being a singleton class
* RomPatches are now instanced per player instead of being a singleton class
* DoorManager is now instanced per player instead of being a singleton class
* - fixed the last bugs that prevented generation of >1 SM world
* fixed crash when no skillset preset is specified in randoPreset (default to "casual")
* maxDifficulty support and itemsounds removal
- added support for maxDifficulty
- removed itemsounds patch as its always applied from multiworld patch for now
* Fixed bad merge
* Post merge adaptation
* fixed player name length fix that got lost with the merge
* fixed generation with other game type than SM
* added default randoPreset json for SM in playerSettings.yaml
* fixed broken SM client following merge
* beautified json skillset presets
* Fixed ArchipelagoSmClient not building
* Fixed conflict between mutliworld patch and beam_doors_plms patch
- doorsColorsRando now working
* SM generation now outputs APBP
- Fixed paths for patches and presets when frozen
* added missing file and fixed multithreading issue
* temporarily set data_version = 0
* more work
- added support for AP starting items
- fixed client crash with gamemode being None
- patch.py "compatible_version" is now 3
* commited missing asm files
fixed start item reserve breaking game (was using bad write offset when patching)
* Nothing item are now handled game-side. the game will now skip displaying a message box for received Nothing item (but the client will still receive it).
fixed crash in SMClient when loosing connection to SNI
* fixed No Energy Item missing its ID
fixed Plando
* merge post fixes
* fixed start item Grapple, XRay and Reserve HUD, as well as graphic beams (except ice palette color)
* fixed freeze in blue brinstar caused by Varia's custom PLM not being filled with proper Multiworld PLM address (altLocsAddresses)
* fixed start item x-ray HUD display
* Fixed start items being sent by the server (is all handled in ROM)
Start items are now not removed from itempool anymore
Nothing Item is now local_items so no player will ever pickup Nothing. Doing so reduces contribution of this world to the Multiworld the more Nothing there is though.
Fixed crash (and possibly passing but broken) at generation where the static list of IPSPatches used by all SM worlds was being modified
* fixed settings that could be applied to any SM players
* fixed auth to server only using player name (now does as ALTTP to authenticate)
* - fixed End Credits broken text
* added non SM item name display
* added all supported SM options in playerSettings.yaml
* fixed locations needing a list of parent regions (now generate a region for each location with one-way exits to each (previously) parent region
did some cleaning (mainly reverts on unnecessary core classes
* minor setting fixes and tweaks
- merged Area and lightArea settings
- made missileQty, superQty and powerBombQty use value from 10 to 90 and divide value by float(10) when generating
- fixed inverted layoutPatch setting
* added option start_inventory_removes_from_pool
fixed option names formatting
fixed lint errors
small code and repo cleanup
* Hopefully fixed ROR2 that could not send any items
* - fixed missing required change to ROR2
* fixed 0 hp when respawning without having ever saved (start items were not updating the save checksum)
* fixed typo with doors_colors_rando
* fixed checksum
* added custom sprites for off-world items (progression or not)
the original AP sprite was made with PierRoulette's SM Item Sprite Utility by ijwu
* - added missing change following upstream merge
- changed patch filename extension from apbp to apm3 so patch can be used with the new client
* added morph placement options: early means local and sphere 1
* fixed failing unit tests
* - fixed broken custom_preset options
* - big cleanup to remove unnecessary or unsupported features
* - more cleanup
* - moved sm_randomizer_rom and all always applied patches into an external project that outputs basepatch.ips
- small cleanup
* - added comment to refer to project for generating basepatch.ips (https://github.com/lordlou/SMBasepatch)
* fixed g4_skip patch that can be not applied if hud is enabled
* - fixed off world sprite that can have broken graphics (restricted to use only first 2 palette)
* - updated basepatch to reflect g4_skip removal
- moved more asm files to SMBasepatch project
* - tourian grey doors at baby metroid are now always flashing (allowing to go back if needed)
* fixed wrong path if using built as exe
* - cleaned exposed maxDifficulty options
- removed always enabled Knows
* Merged LttPClient and SMClient into SNIClient
* added varia_custom Preset Option that fetch a preset (read from a new varia_custom_preset Option) from varia's web service
* small doc precision
* - added death_link support
- fixed broken Goal Completion
- post merge fix
* - removed now useless presets
* - fixed bad internal mapping with maxDiff
- increases maxDiff if only Bosses is preventing beating the game
* - added support for lowercase custom preset sections (knows, settings and controller)
- fixed controller settings not applying to ROM
* - fixed death loop when dying with Door rando, bomb or speed booster as starting items
- varia's backup save should now be usable (automatically enabled when doing door rando)
* -added docstring for generated yaml
* fixed bad merge
* fixed broken infinity max difficulty
* commented debug prints
* adjusted credits to mark progression speed and difficulty as Non Available
* added support for more than 255 players (will print Archipelago for higher player number)
* fixed missing cleanup
* added support for 65535 different player names in ROM
* fixed generations failing when only bosses are unreachable
* - replaced setting maxDiff to infinity with a bool only affecting boss logics if only bosses are left to finish
* fixed failling generations when using 'fun' settings
Accessibility checks are forced to 'items' if restricted locations are used by VARIA following usage of 'fun' settings
* fixed debug logger
* removed unsupported "suits_restriction" option
* fixed generations failing when only bosses are unreachable (using a less intrusive approach for AP)
* - fixed deathlink emptying reserves
- added death_link_survive option that lets player survive when receiving a deathlink if the have non-empty reserves
* - merged death_link and death_link_survive options
* fixed death_link
* added a fallback default starting location instead of failing generation if an invalid one was chosen
* added Nothing and NoEnergy as hint blacklist
added missing NoEnergy as local items and removed it from progression
* replaced deprecated usage of Utils.get_options with settings.get_settings in SM and SMZ3
* Core: fix freeze support for py3.13+
Loading Utils now patches multiprocessing.freeze_support()
Utils.freeze_support() is now deprecated
* WebHost: use pony fork on py3.13
* CI: test with py3.13
* convert ladxr section to markdown, other adjustments
make links clickable
crow icon -> open tracker
adjust for removed sprite sheets
some adjustments in ladxr section for differences in the ap version:
we don't have a casual logic
we don't have stealing options
* fix link, and another correction
Removed `self.junkItemsNames = [item.Type.name for item in junkItems]` from `create_items` as that was pulling massive amounts of HeartPieces (because they're in junkItems in upstream) to be added if the start_inventory_from_pool was extensive. Getting more than 20 Heart Containers can lead to OHKO situations.
ETank was also removed as a junk item that can be used as filler in the earlier defined list of junk items that AP allows since you should only have 14 in the pool. It's not a problem to have more per se, but you really shouldn't have 27 of them in the pool, either. Ammo and such is much less of a problem to have crazy amounts of.
* fix(docker): Correct copy command to use recursive flag for EnemizerCLI
- Changed 'cp' to 'cp -r' to properly copy EnemizerCLI directory
* docs(deployment): Update container deployment documentation
- Specify minimum versions for Docker and Podman
- Add requirement for Docker Buildx plugin
* Sweep events per-player to reduce sweep iterations
By finding all accessible locations per player and then collecting the
items from those locations, if any collected items belong to a different
player, then that player may be able to access more locations the next
time all of their accessible locations are found. This reduces the
number of iterations necessary to sweep through and collect from all
accessible locations.
* Also sweep per-player in MultiWorld.can_beat_game
* Deduplicate code by using sweep_for_events in can_beat_game
sweep_for_events has been modified to be able to return a generator and
to be able to change the set of locations that are filtered out. This
way, the same code can be used by both functions.
* Skip checking locations by assuming each world only logically depends on itself
While this assumption almost always holds true, worlds are allowed to
logically depend on other worlds, so the sweep always double checks at
the end by checking the locations of every world before finishing.
* Fix missed update to CollectionState.collect implementation
Collecting items with prevent_sweep=True (previously event=True) no
longer always returns True, so the return value should now be checked.
* Comment and variable name consistency/clarity
accessible/inaccessible -> reachable/unreachable
final sweep iteration -> extra sweep iteration
maybe_final_sweep -> checking_if_finished
* Apply suggestions from code review
Use Iterator in return type hint instead of Iterable to help indicate that the returned value can only be iterated once.
Be consistent in return statements. Because sweep_for_events can return a value now, the conditional branch that has no intended return value should explicitly return None.
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Update terminology from 'event' to 'advancement'
* Add typing overloads for sweep_for_advancements
This makes it so type-checkers and IDEs can see which calls return
`None` and which calls return `Iterator` so that it doesn't complain
about returning an `Iterator` from `sweep_for_events` or about iterating
through `None` in `can_beat_game`.
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Update comment for why discard the player after finding their locations
A lack of clarity was brought up in review.
* Update for removed typing import
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Since this does not have versions anymore, we check the sha256
and require manual intervention if it changed.
TODO: look for a way to do reproducible appimages again.
* chore(ci): exclude deployment and Docker files from unit test workflow triggers
- Modify unittests workflow to ignore changes in deploy directory and Docker-related files
* CreateHint command
* Docs
* oops
* forgot an arg
* Update MultiServer.py
* Add documentation on what happens when the hint already exists but with a different status (nothing)
* Early exit if no locations provided
* Add a clarifying comment to the code as well
* change wording a bit
* UPDATE: Dark Souls 3 setup docs to be more clear
* UPDATE: DS3 Setup docs to make offline mode more explicit
* UPDATE: Dark Souls 3 setup docs to be more clear
* UPDATE: DS3 Setup docs to make offline mode more explicit
* EDIT: DS3 setup docs to be up to date
Collecting an item into a CollectionState without sweeping, finding all
reachable locations, removing that item from the state, and then finding
all reachable locations again could result in more locations being
reachable than before the item was initially collected into the
CollectionState.
This issue was present because OoT was not invalidating its reachable
region caches for the different ages when items were removed from the
CollectionState.
To fix the issue, this PR has updated `OOTWorld.remove()` to invalid its
caches, like how `CollectionState.remove()` invalidates the core
Archipelago caches.
* fix(env): Prevent module update during requirements processing
- Add environment variable SKIP_REQUIREMENTS_UPDATE check
- Ensure update is skipped if SKIP_REQUIREMENTS_UPDATE is set to true
* squash! fix(env): Prevent module update during requirements processing - Add environment variable SKIP_REQUIREMENTS_UPDATE check - Ensure update is skipped if SKIP_REQUIREMENTS_UPDATE is set to true
* feat(docker): Add initial Docker configuration for project
- Add .dockerignore file to ignore unnecessary files
- Create Dockerfile with basic build and deployment configuration
* feat(docker): Updated Docker configuration for improved security and build efficiency
- Removed sensitive files from .dockerignore
- Moved WORKDIR to /app in Dockerfile
- Added gunicorn==23.0.0 dependency in RUN command
- Created new docker-compose.yml file for service definition
* feat(deployment): Implement containerized deployment configuration
- Add additional environment variables for Python optimization
- Update Dockerfile with new dependencies: eventlet, gevent, tornado
- Create docker-compose.yml and configure services for web and nginx
- Implement example configurations for web host settings and gunicorn
- Establish nginx configuration for reverse proxy
- Remove outdated docker-compose.yml from root directory
* feat(deploy): Introduce Docker Compose configuration for multi-world deployment
- Separate web service into two containers, one for main process and one for gunicorn
- Update container configurations for improved security and maintainability
- Remove unused volumes and network configurations
* docs: Add new documentation for deploying Archipelago using containers
- Document standalone image build and run process
- Include example Docker Compose file for container orchestration
- Provide information on services defined in the `docker-compose.yaml` file
- Mention optional Enemizer feature and Git requirements
* fixup! feat(docker): Updated Docker configuration for improved security and build efficiency - Removed sensitive files from .dockerignore - Moved WORKDIR to /app in Dockerfile - Added gunicorn==23.0.0 dependency in RUN command - Created new docker-compose.yml file for service definition
* feat(deploy): Updated gunicorn configuration example
- Adjusted worker and thread counts
- Switched worker class from sync to gthread
- Changed log level to info
- Added example code snippet for customizing worker count
* fix(deploy): Adjust concurrency settings for self-launch configuration
- Reduce the number of world generators from 8 to 3
- Decrease the number of hosters from 5 to 4
* docs(deploy using containers): Improve readability, fix broken links
- Update links to other documentation pages
- Improve formatting for better readability
- Remove unnecessary sections and files
- Add note about building the image requiring a local copy of ArchipelagoMW source code
* Update deploy/example_config.yaml
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update deploy/example_selflaunch.yaml
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update Dockerfile
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update deploy/example_selflaunch.yaml
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* fixup! Update Dockerfile
* fix(Dockerfile): Update package installations to use latest versions
- Remove specific version pins for git and libc6-dev
- Ensure compatibility with newer package updates
* feat(ci): Add GitHub Actions workflow for building and publishing Docker images
- Create a new workflow for Docker image build and publish
- Configure triggers for push and pull_request on main branch
- Set up QEMU and Docker Buildx for multi-platform builds
- Implement Docker login for GitHub Container Registry
- Include Docker image metadata extraction and tagging
* feat(healthcheck): Update Dockerfile and docker-compose for health checks
- Add health check for the Webhost service in Dockerfile
- Modify docker-compose to include a placeholder health check for multiworld service
- Standardize comments and remove unnecessary lines
* Revert "feat(ci): Add GitHub Actions workflow for building and publishing Docker images"
This reverts commit 32a51b2726.
* feat(docker): Enhance Dockerfile with Cython build stage
- Add Cython builder stage for compiling speedups
- Update package installation and organization for efficiency
- Improve caching by copying requirements before installing
- Add documentation for rootless Podman
* fixup! feat(docker): Enhance Dockerfile with Cython build stage - Add Cython builder stage for compiling speedups - Update package installation and organization for efficiency - Improve caching by copying requirements before installing - Add documentation for rootless Podman
---------
Co-authored-by: Adrian Priestley <apriestley@gmail.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Adrian Priestley <apriestley@bob.localdomain>
* Options: forbid worlds just dumping every single option they don't need
* make the equal proper
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* update the id formatter to use staticmethods to not fake the unused self arg, and then use the formatter for the user session endpoints
* missed an id (ty treble)
* clean up duplicate code
* Update WebHostLib/__init__.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* keep the BaseConverter format
* lol, change all the instances
* revert this
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Add new deprioritized item flag
* 4 retries
* indent
* .
* style
* I think this is nicer
* Nicer
* remove two lines again that I added unnecessarily
* I think this test makes a bit more sense like this
* Idk how to word this lol
* Add progression_deprioritized_skip_balancing bc why not ig
* More text
* Update Fill.py
* Update Fill.py
* I am the big stupid
* Actually collect the other half of progression items into state when filling without them
* More clarity on the descriptions (hopefully)
* visually separate technical description and use cases
* Actually make the call do what the comments say it does
The previous swap_state can often be used as the base state to create
the next swap_state. This previous swap_state will already have
collected all items in item_pool and is likely to have checked many
locations, meaning that creating the next swap_state from it instead of
from base_state is faster.
From generating with extra code to raise an exception if more than 2
previous swap states were used, and using A Hat in Time and Pokemon
Red/Blue yamls that often result in lots of swapping in progression
fill, I could not get a single seed go through more than 2 previous swap
states. A few worlds' pre-fills do often use more than 2 previous swap
states, notably LADX which sometimes goes through over 20.
Given a 20 player Pokemon Red/Blue multiworld that usually generates in
around 16 or 17 seconds, but on a specific seed that results in 56
swaps, generation went from about 260 seconds before this patch to about
104 seconds after this patch (generated with a meta.yaml to disable
progression balancing and `python -O Generate.py --skip_output`).
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Calling the dunder method has to:
1. Look up the dunder method for that object/class
2. Bind a new method instance to the object instance
3. Call the method with its arguments
4. Run the appropriate operation on the object
Whereas running the appropriate operation on the object from the start
skips straight to step 4.
Region.Register.__getitem__ is called a lot without #4583. In that case,
generation of 10 template Blasphemous yamls with
`--skip_output --seed 1` and progression balancing disabled went from
19.0s to 18.8s (1.3% reduction in generation duration).
From profiling with `timeit`
```py
def __getitem__(self, index: int) -> Location:
return self._list[index]
```
appears to be about twice as fast as the old code:
```py
def __getitem__(self, index: int) -> Location:
return self._list.__getitem__(index)
```
Besides this, there is not expected to be any noticeable difference in
performance, and there is not expected to be any difference in semantics
with these changes.
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Assert at the beginning of distribute items restrictive that no items in the itempool already have locations associated with them
* actual message
* placement
* oops
* Update Fill.py
* first working single-world randomized SM rom patches
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* first working (most of the time) progression generation for SM using VariaRandomizer's rules, items, locations and accessPoint (as regions)
* first working single-world randomized SM rom patches
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* Fixed multiworld support patch not working with VariaRandomizer's
Added stage_fill_hook to set morph first in progitempool
Added back VariaRandomizer's standard patches
* + added missing files from variaRandomizer project
* + added missing variaRandomizer files (custom sprites)
+ started integrating VariaRandomizer options (WIP)
* Some fixes for player and server name display
- fixed player name of 16 characters reading too far in SM client
- fixed 12 bytes SM player name limit (now 16)
- fixed server name not being displayed in SM when using server cheat ( now displays RECEIVED FROM ARCHIPELAGO)
- request: temporarly changed default seed names displayed in SM main menu to OWTCH
* Fixed Goal completion not triggering in smClient
* integrated VariaRandomizer's options into AP (WIP)
- startAP is working
- door rando is working
- skillset is working
* - fixed itemsounds.ips crash by always including nofanfare.ips into multiworld.ips (itemsounds is now always applied and "itemsounds" preset must always be "off")
* skillset are now instanced per player instead of being a singleton class
* RomPatches are now instanced per player instead of being a singleton class
* DoorManager is now instanced per player instead of being a singleton class
* - fixed the last bugs that prevented generation of >1 SM world
* fixed crash when no skillset preset is specified in randoPreset (default to "casual")
* maxDifficulty support and itemsounds removal
- added support for maxDifficulty
- removed itemsounds patch as its always applied from multiworld patch for now
* Fixed bad merge
* Post merge adaptation
* fixed player name length fix that got lost with the merge
* fixed generation with other game type than SM
* added default randoPreset json for SM in playerSettings.yaml
* fixed broken SM client following merge
* beautified json skillset presets
* Fixed ArchipelagoSmClient not building
* Fixed conflict between mutliworld patch and beam_doors_plms patch
- doorsColorsRando now working
* SM generation now outputs APBP
- Fixed paths for patches and presets when frozen
* added missing file and fixed multithreading issue
* temporarily set data_version = 0
* more work
- added support for AP starting items
- fixed client crash with gamemode being None
- patch.py "compatible_version" is now 3
* commited missing asm files
fixed start item reserve breaking game (was using bad write offset when patching)
* Nothing item are now handled game-side. the game will now skip displaying a message box for received Nothing item (but the client will still receive it).
fixed crash in SMClient when loosing connection to SNI
* fixed No Energy Item missing its ID
fixed Plando
* merge post fixes
* fixed start item Grapple, XRay and Reserve HUD, as well as graphic beams (except ice palette color)
* fixed freeze in blue brinstar caused by Varia's custom PLM not being filled with proper Multiworld PLM address (altLocsAddresses)
* fixed start item x-ray HUD display
* Fixed start items being sent by the server (is all handled in ROM)
Start items are now not removed from itempool anymore
Nothing Item is now local_items so no player will ever pickup Nothing. Doing so reduces contribution of this world to the Multiworld the more Nothing there is though.
Fixed crash (and possibly passing but broken) at generation where the static list of IPSPatches used by all SM worlds was being modified
* fixed settings that could be applied to any SM players
* fixed auth to server only using player name (now does as ALTTP to authenticate)
* - fixed End Credits broken text
* added non SM item name display
* added all supported SM options in playerSettings.yaml
* fixed locations needing a list of parent regions (now generate a region for each location with one-way exits to each (previously) parent region
did some cleaning (mainly reverts on unnecessary core classes
* minor setting fixes and tweaks
- merged Area and lightArea settings
- made missileQty, superQty and powerBombQty use value from 10 to 90 and divide value by float(10) when generating
- fixed inverted layoutPatch setting
* added option start_inventory_removes_from_pool
fixed option names formatting
fixed lint errors
small code and repo cleanup
* Hopefully fixed ROR2 that could not send any items
* - fixed missing required change to ROR2
* fixed 0 hp when respawning without having ever saved (start items were not updating the save checksum)
* fixed typo with doors_colors_rando
* fixed checksum
* added custom sprites for off-world items (progression or not)
the original AP sprite was made with PierRoulette's SM Item Sprite Utility by ijwu
* - added missing change following upstream merge
- changed patch filename extension from apbp to apm3 so patch can be used with the new client
* added morph placement options: early means local and sphere 1
* fixed failing unit tests
* - fixed broken custom_preset options
* - big cleanup to remove unnecessary or unsupported features
* - more cleanup
* - moved sm_randomizer_rom and all always applied patches into an external project that outputs basepatch.ips
- small cleanup
* - added comment to refer to project for generating basepatch.ips (https://github.com/lordlou/SMBasepatch)
* fixed g4_skip patch that can be not applied if hud is enabled
* - fixed off world sprite that can have broken graphics (restricted to use only first 2 palette)
* - updated basepatch to reflect g4_skip removal
- moved more asm files to SMBasepatch project
* - tourian grey doors at baby metroid are now always flashing (allowing to go back if needed)
* fixed wrong path if using built as exe
* - cleaned exposed maxDifficulty options
- removed always enabled Knows
* Merged LttPClient and SMClient into SNIClient
* added varia_custom Preset Option that fetch a preset (read from a new varia_custom_preset Option) from varia's web service
* small doc precision
* - added death_link support
- fixed broken Goal Completion
- post merge fix
* - removed now useless presets
* - fixed bad internal mapping with maxDiff
- increases maxDiff if only Bosses is preventing beating the game
* - added support for lowercase custom preset sections (knows, settings and controller)
- fixed controller settings not applying to ROM
* - fixed death loop when dying with Door rando, bomb or speed booster as starting items
- varia's backup save should now be usable (automatically enabled when doing door rando)
* -added docstring for generated yaml
* fixed bad merge
* fixed broken infinity max difficulty
* commented debug prints
* adjusted credits to mark progression speed and difficulty as Non Available
* added support for more than 255 players (will print Archipelago for higher player number)
* fixed missing cleanup
* added support for 65535 different player names in ROM
* fixed generations failing when only bosses are unreachable
* - replaced setting maxDiff to infinity with a bool only affecting boss logics if only bosses are left to finish
* fixed failling generations when using 'fun' settings
Accessibility checks are forced to 'items' if restricted locations are used by VARIA following usage of 'fun' settings
* fixed debug logger
* removed unsupported "suits_restriction" option
* fixed generations failing when only bosses are unreachable (using a less intrusive approach for AP)
* - fixed deathlink emptying reserves
- added death_link_survive option that lets player survive when receiving a deathlink if the have non-empty reserves
* - merged death_link and death_link_survive options
* fixed death_link
* added a fallback default starting location instead of failing generation if an invalid one was chosen
* added Nothing and NoEnergy as hint blacklist
added missing NoEnergy as local items and removed it from progression
* reduced slot_data to only what should be needed by PopTracker (for https://github.com/ArchipelagoMW/Archipelago/pull/5039)
moves uuid caching to appdata and uuid generation to be a random uuid instead of getnode's hardware address driven identifier and updates docs to point to the shared cache
* replace Clique with V6 in unit tests
* no hard mode in V6
* modify regex in copy_world to allow : str
* oops
* I see now
* work around all typing
* there actually needs to be something
* Update setup_en.md
Updated setup instructions for Civilization VI in Archipelago
* Update en_Civilization VI.md
Updated info page for Civilization VI in Archipelago
* Update setup_en.md
* implement tabs as NavigationBar
* update the underline bar with the screen manager
* remove some unneeded kv
* remove the underline in favor of a full tab highlight
* fix insert transitions
* use on_release instead of on_press
* minor cleanup
* add remove_client_tab and add a caller to the NavigationBar for back compat
* unused imports
* Update kvui.py
---------
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* gift version 3
* update settings usage
* that really has just been broken this entire time
* remove unnecessary print
* Update client.py
* fix random flavor handling
* fix incorrect sender/receiver
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Fixing open waters urns not breakable with nature forms logic bug
* Using list in comprehension only when useful
* Replacing damaging items by a constant
* Removing comprehension list creating from lambda
* Fix Branch (Not Crow)
* Oops
* Mark Aldrich Ruby as missable
* Expand comment
* Short circuit
* Mark Twin Dragon Greatshield as missable
* Add missable cause
A couple of Entrance access rules were checking for being able to reach
a Location, but a Location first checks for being able to reach its
parent Region, so it needs to be registered that access to that parent
Region can give access to the Entrance.
The `Behind Rocks` and `Pickaxe Hard Cave` Entrances require being able
to reach the `Cut Content` region, but no indirect conditions were being
registered for this region.
The `set_lfod_self_obtained_items_rules` function was also using a
`world` parameter that was actually expecting a `MultiWorld` instance,
so I have renamed it for clarity and updated the function to use
`world.get_entrance()` rather than `multiworld.get_entrance()`.
Much of the rest of the file passes `MultiWorld` instances to `world`
parameters, but fixing all of these is out of the scope of the changes
in this patch, so has not been included.
* move to playercontainer
* moves patch_file_ending handling to APPlayerContainer and updates the worlds using it to define their extensions
* give oot a patch_file_ending as well
- Cleans up a few missed references in the setup guide.
- Refactors Options class to use metaclass and decorators to enforce friendly limits on multiple levels.
- Templates generated from the website, even ones with `random` should not fail generation because the website will only allow values inside the friendly limits.
- _Uploaded_ yamls to the website with `random`, should also now respect friendly limits without the need for `random-range` shenanigans.
- _Uploaded_ yamls to the website, or yamls that are used to generate locally, that have hard-defined values outside the friendly limits, will be clamped/dragged/massaged into those limits (with logged warnings).
- Removed an early completion goal that was playing havoc with fill. Not enough people seem to use this goal, so its loss will not be mourned.
* calc relevant components before opening the launcher app so it can be skipped for text client only uri launches
* generically passthrough the url arg
* Apply suggestions from code review
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* flip if not else
* Update Launcher.py
* pluralize
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Fix playthrough
* oops
* oops 2
* I don't like this
* that should do it
* Update BaseClasses.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Update BaseClasses.py
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Gives WebHost the ability to verify that a patch file is an APPlayerContainer (defined by #4331 as a APContainer containing the "player" field), and allowed it to display any patch file that it can verify is an APPlayerContainer.
- Players and AI can sacrifice their own units and upload them to the multiworld.
- Players and AI can summon random units from the multiworld.
- Has 4 new separate options for how many sacrifices and summons either the player or the AI can make per level attempt.
- New /sacrifice_summon command to toggle sacrifices and summons on/off. Useful if the AI makes a level impossible with their summons.
- Linux Support.
- Is an apworld now.
---------
Co-authored-by: Raspberry Floof <raspberry@rosenthalcastle.org>
Co-authored-by: KScl <ks@rosenthalcastle.org>
Co-authored-by: Abigail Fox <Raspberryfloof@users.noreply.github.com>
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
The DS3 static randomizer uses the relative ordering of location names
to map between Archipelago's notion of location IDs and the static
randomizer's. Treating unrandomized locations as excluded can break this
behavior by removing some locations from the list, causing further
locations to be incorrectly assigned.
The only reason this wasn't a bigger problem up to this point was that
location order only matters on a per-region and per-item basis. That
means this only causes problems in practice when a single region has
multiple locations with the same default item, and some of those
locations are randomized while others are not. Since exclusions (and
thus randomization) are usually done based on item types, we managed to
dodge this bullet for a long time.
* Jak 1: Initial commit: Cell Locations, Items, and Regions modeled.
* Jak 1: Wrote Regions, Rules, init. Untested.
* Jak 1: Fixed mistakes, need better understanding of Entrances.
* Jak 1: Fixed bugs, refactored Regions, added missing Special Checks. First spoiler log generated.
* Jak 1: Add Scout Fly Locations, code and style cleanup.
* Jak 1: Add Scout Flies to Regions.
* Jak 1: Add version info.
* Jak 1: Reduced code smell.
* Jak 1: Fixed UT bugs, added Free The Sages as Locations.
* Jak 1: Refactor ID scheme to better fit game's scheme. Add more subregions and rules, but still missing one-way Entrances.
* Jak 1: Add some one-ways, adjust scout fly offset.
* Jak 1: Found Scout Fly ID's for first 4 maps.
* Jak 1: Add more scout fly ID's, refactor game/AP ID translation for easier reading and code reuse.
* Jak 1: Fixed a few things. Four maps to go.
* Jak 1: Last of the scout flies mapped!
* Jak 1: simplify citadel sages logic.
* Jak 1: WebWorld setup, some documentation.
* Jak 1: Initial checkin of Client. Removed the colon from the game name.
* Jak 1: Refactored client into components, working on async communication between the client and the game.
* Jak 1: In tandem with new ArchipelaGOAL memory structure, define read_memory.
* Jak 1: There's magic in the air...
* Jak 1: Fixed bug translating scout fly ID's.
* Jak 1: Make the REPL a little more verbose, easier to debug.
* Jak 1: Did you know Snowy Mountain had such specific unlock requirements? I didn't.
* Jak 1: Update Documentation.
* Jak 1: Simplify user interaction with agents, make process more robust/less dependent on order of ops.
* Jak 1: Simplified startup process, updated docs, prayed.
* Jak 1: quick fix to settings.
* Jak and Daxter: Implement New Game (#1)
* Jak 1: Initial commit: Cell Locations, Items, and Regions modeled.
* Jak 1: Wrote Regions, Rules, init. Untested.
* Jak 1: Fixed mistakes, need better understanding of Entrances.
* Jak 1: Fixed bugs, refactored Regions, added missing Special Checks. First spoiler log generated.
* Jak 1: Add Scout Fly Locations, code and style cleanup.
* Jak 1: Add Scout Flies to Regions.
* Jak 1: Add version info.
* Jak 1: Reduced code smell.
* Jak 1: Fixed UT bugs, added Free The Sages as Locations.
* Jak 1: Refactor ID scheme to better fit game's scheme. Add more subregions and rules, but still missing one-way Entrances.
* Jak 1: Add some one-ways, adjust scout fly offset.
* Jak 1: Found Scout Fly ID's for first 4 maps.
* Jak 1: Add more scout fly ID's, refactor game/AP ID translation for easier reading and code reuse.
* Jak 1: Fixed a few things. Four maps to go.
* Jak 1: Last of the scout flies mapped!
* Jak 1: simplify citadel sages logic.
* Jak 1: WebWorld setup, some documentation.
* Jak 1: Initial checkin of Client. Removed the colon from the game name.
* Jak 1: Refactored client into components, working on async communication between the client and the game.
* Jak 1: In tandem with new ArchipelaGOAL memory structure, define read_memory.
* Jak 1: There's magic in the air...
* Jak 1: Fixed bug translating scout fly ID's.
* Jak 1: Make the REPL a little more verbose, easier to debug.
* Jak 1: Did you know Snowy Mountain had such specific unlock requirements? I didn't.
* Jak 1: Update Documentation.
* Jak 1: Simplify user interaction with agents, make process more robust/less dependent on order of ops.
* Jak 1: Simplified startup process, updated docs, prayed.
* Jak 1: quick fix to settings.
* Jak and Daxter: Genericize Items, Update Scout Fly logic, Add Victory Condition. (#3)
* Jak 1: Update to 0.4.6. Decouple locations from items, support filler items.
* Jak 1: Total revamp of Items. This is where everything broke.
* Jak 1: Decouple 7 scout fly checks from normal checks, update regions/rules for orb counts/traders.
* Jak 1: correct regions/rules, account for sequential oracle/miner locations.
* Jak 1: make nicer strings.
* Jak 1: Add logic for finished game. First full run complete!
* Jak 1: update group names.
* Jak and Daxter - Gondola, Pontoons, Rules, Regions, and Client Update
* Jak 1: Overhaul of regions, rules, and special locations. Updated game info page.
* Jak 1: Preparations for Alpha. Reintroducing automatic startup in client. Updating docs, readme, codeowners.
* Alpha Updates (#15)
* Jak 1: Consolidate client into apworld, create launcher icon, improve setup docs.
* Jak 1: Update setup guide.
* Jak 1: Load title screen, save states of in/outboxes.
* Logging Update (#16)
* Jak 1: Separate info and debug logs.
* Jak 1: Update world info to refer to Archipelago Options menu.
* Deathlink (#18)
* Jak 1: Implement Deathlink. TODO: make it optional...
* Jak 1: Issue a proper send-event for deathlink deaths.
* Jak 1: Added cause of death to deathlink, fixed typo.
* Jak 1: Make Deathlink toggleable.
* Jak 1: Added player name to death text, added zoomer/flut/fishing text, simplified GOAL call for deathlink.
* Jak 1: Fix death text in client logger.
* Move Randomizer (#26)
* Finally remove debug-segment text, update Python imports to relative paths.
* HUGE refactor to Regions/Rules to support move rando, first hub area coded.
* More refactoring.
* Another refactor - may squash.
* Fix some Rules, reuse some code by returning key regions from build_regions.
* More regions added. A couple of TODOs.
* Fixed trade logic, added LPC regions.
* Added Spider, Snowy, Boggy. Fixed Misty's orbs.
* Fix circular import, assert orb counts per level, fix a few naming errors.
* Citadel added, missing locs and connections fixed. First move rando seed generated.
* Add Move Rando to Options class.
* Fixed rules for prerequisite moves.
* Implement client functionality for move rando, add blurbs to game info page.
* Fix wrong address for cache checks.
* Fix byte alignment of offsets, refactor read_memory for better code reuse.
* Refactor memory offsets and add some unit tests.
* Make green eco the filler item, also define a maximum ID. Fix Boggy tether locations.
* Move rando fixes (#29)
* Fix virtual regions in Snowy. Fix some GMC problems.
* Fix Deathlink on sunken slides.
* Removed unncessary code causing build failure.
* Orbsanity (#32)
* My big dumb shortcut: a 2000 item array.
* A better idea: bundle orbs as a numerical option and make array variable size.
* Have Item/Region generation respect the chosen Orbsanity bundle size. Fix trade logic.
* Separate Global/Local Orbsanity options. TODO - re-introduce orb factory for per-level option.
* Per-level Orbsanity implemented w/ orb bundle factory.
* Implement Orbsanity for client, fix some things up for regions.
* Fix location name/id mappings.
* Fix client orb collection on connection.
* Fix minor Deathlink bug, add Update instructions.
* Finishing Touches (#36)
* Set up connector level thresholds, completion goal choices.
* Send AP sender/recipient info to game via client.
* Slight refactors.
* Refactor option checking, add DataStorage handling of traded orbs.
* Update instructions to change order of load/connect.
* Add Option check to ensure enough Locations exist for Cell Count thresholds. Fix Final Door region.
* Need some height move to get LPC sunken chamber cell.
* Rename completion_condition to jak_completion_condition (#41)
* The Afterparty (#42)
* Fixes to Jak client, rules, options, and more.
* Post-rebase fixes.
* Remove orbsanity reset code, optimize game text in client.
* More game text optimization.
* Added more specific troubleshooting/setup instructions.
* Add known issue about large releases taking time. (Dodge 6,666th commit.)
* Remove "Bundle of", Add location name groups, set better default RootDirectory for new players.
* Make orb trade amounts configurable, make orbsanity defaults more reasonable.
* Add HUD info to doc.
* Exempt's Code Review Updates (#43)
* Round 1 of code review updates, the easy stuff.
* Factor options checking away from region/rule creation.
* Code review updates round 2, more complex stuff.
* Code review updates round 3: the mental health annihilator
* Code review updates part 4: redemption.
* More code review feedback, simplifying code, etc.
* Added a host.yaml option to override friendly limits, plus a couple of code review updates.
* Added singleplayer limits, player names to enforcement rules.
* Updated friendly limits to be more strict, optimized recalculate logic.
* Today's the big day Jak: updates docs for mod support in OpenGOAL Launcher
* Rearranged and clarified some instructions, ADDED PATH-SPACE FIX TO CLIENT.
* Fix deathlink reset stalls on a busy client. (#47)
* Jak & Daxter Client : queue game text messages to get items faster during release (#48)
* queue game text messages to write them during the main_tick function and empty the message queue faster during release
* wrap comment for code style character limit
Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com>
* remove useless blank line
Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com>
* whitespace code style
Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com>
* Move JsonMessageData dataclass outside of ReplClient class for code clarity
---------
Co-authored-by: massimilianodelliubaldini <8584296+massimilianodelliubaldini@users.noreply.github.com>
* Item Classifications (and REPL fixes) (#49)
* Changes to item classifications
* Bugfixes to power cell thresholds.
* Fix bugs in item_type_helper.
* Refactor 100 cell door to pass unit tests.
* Quick fix to ReplClient.
* Not so quick fix to ReplClient.
* Display friendly limits in options tooltips.
* Use math.ceil like a normal person.
* Missed a space.
* Fix non-accessibility due to bad orb calculation.
* Updated documentation.
* More Options, More Docs, More Tests (#51)
* Reorder cell counts, require punch for Klaww.
* Friendlier friendly friendlies.
* Removed custom_worlds references from docs/setup guide, focused OpenGOAL Launcher language.
* Increased breadth of unit tests.
* Clean imports of unit tests.
* Create OptionGroups.
* Fix region rule bug with Punch for Klaww.
* Include Punch For Klaww in slot data.
* Update worlds/jakanddaxter/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Temper and Harden Text Client (#52)
* Provide config path so OpenGOAL can use mod-specific saves and settings.
* Add versioning to MemoryReader. Harden the client against user errors.
* Updated comments.
* Add Deathlink as a "statement of intent" to the YAML. Small updates to client.
* Revert deathlink changes.
* Update error message.
* Added color markup to log messages printed in text client.
* Separate loggers by agent, write markup to GUI and non-markup to disk simultaneously.
* Refactor MemoryReader callbacks from main_tick to constructor.
* Make callback names more... informative.
* Give users explicit instructions in error messages.
* Stellar Messaging (#54)
* Use new ap-messenger functions for text writing.
* Remove Powershell requirement, bump memory version to 3.
* Error message update w/ instructions for game crash.
* Create no console window for gk.
* ISO Data Enhancement (#58)
* Add iso-path as argument to GOAL compiler.
# Conflicts:
# worlds/jakanddaxter/Client.py
* More resilient handling of iso_path.
* Fixed scout fly ID mismatches.
* Corrected iso_data subpath.
* Update memory version to 4.
* Docs update for iso_data.
* Auto Detect OpenGOAL Install (#63)
* Auto detect OpenGOAL install path. Also fix Deathlink on server connection.
* Updated docs, add instructions to error messages.
* Slight tweak to error text.
* J&D : add per region location groups (#64)
* add per region power cells location group
* add per region scout flies location group
* add per zone orb bundle groups
(I'm not particularly happy about this code, but I figured doing it this way was the point of least friction/duplication)
* guess who forgot 9 very important characters in each line of the last commit
* Rearrange location group names, quick fix to client error handling.
* Fix pycharm warnings.
* Fix more pycharm warnings.
* Light cleanup: fix icons, add bug report page, remove py 3.8 code.
* Update worlds/jakanddaxter/Options.py
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Update worlds/jakanddaxter/Options.py
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Update worlds/jakanddaxter/Options.py
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Update worlds/jakanddaxter/Options.py
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Code review updates on comments, tooltips, and type hints.
* Update type hint for lists in regions.
* Missed todo removal.
* More type hint updates.
* Small region updates for location accessibility, small updates to world guide and README.md.
* Add GMC scout fly location group.
* Improved sanitization of game text.
* Traps 2 (#70)
* Add trap items, relevant options, and citadel orb caches.
* Update REPL to send traps to game.
* Fix item counter.
* Allow player to select which traps to use.
* Fix host.yaml doc strings, ap-setup-options typing, bump memory version to 5.
* Alter some trap names.
* Update world doc.
* Add health trap.
* Added 3 more trap types.
* Protect against empty trap list.
* Reword traps paragraph in world doc.
* Another update to trap paragraph.
* Concisify trap option docstring.
* Timestamp on game log file.
* Update client to handle waiting on title screen.
* Send slot name and seed to game.
* Use self.random instead.
* Update setup doc for new title screen.
* Quick clarification of orb caches in world doc.
* Sanitize slot info earlier.
* Added to and improved unit tests.
* Light cleanup on world.
* Optimizations to movement rules, docs: known issues update.
* Quick fixes for beta 0.5.0 release: template options and LPC logic.
* Quick fix to spoiler counts.
* Reorganize world guide for faster navigation.
* Fix links.
* Update HUD section.
* Found a way to render apostrophes in item names.
* March Refactors (#77)
* Reorg imports, small fix to Rock Village movement.
* Fix wait-on-title message never going to ready message.
* Colorama init fix.
* Swap trap list for a dictionary of trap weights.
* The more laws, the less justice.
* Quick readability update.
* Have memory reader provide instructions for slow booting games.
* Revert some things.
* Update setup_en.md
* Update HUD mode lingo for combined msgs.
* Remade launcher icon, sized correctly.
* I don't know why I can't be satisfied with things.
* Apply suggestions from Scipio
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Properly use the settings API instead of Utils.
* Newline on requirements.txt.
* Add __init__ files for frozen builds.
* Replace an ap_inform function with a CommonClient built-in.
* Resize icon to match kivymd expected size.
* First round of Treble code reviews.
* Second round of Treble code reviews.
* Third round of Treble code reviews.
* Missed an unncessary if condition.
* Missed unnecessary comments.
* Fourth round of Treble code reviews.
* Switch trap dictionary to OptionCounter.
* Use existing slot name/seed from network protocol.
* Violet code review updates.
* Violet code review updates part 2.
* Refactor to avoid floating imports (Violet part 3).
* Found a few more valid characters for messaging.
* Move tests out of init, add colon to game name (now that it's safe).
* But don't include those chars for file text.
* Implement Vi suggestion on webhost-capable friendly limits.
* Revert "Implement Vi suggestion on webhost-capable friendly limits."
This reverts commit 2d012b7f4a.
* Rename all files for PEP8.
* Refactor how maximums work on webhost.
* Fix rogue UT.
* Don't rush.
* Fix client post-PEP8.
---------
Co-authored-by: Justus Lind <DeamonHunter@users.noreply.github.com>
Co-authored-by: Romain BERNARD <30secondstodraw@gmail.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
`prev_state` starts off as a copy of `swap_state` and then `swap_state`
collects `item_to_place`. Collecting an item must never reduce
accessibility (otherwise generation breaks horribly), so it is
guaranteed that `swap_state` will always be able to reach at least as
many locations as `prev_state`, so `new_loc_count >= prev_loc_count` is
always `True`.
As a sideeffect of this change, this fixes generation of Pokemon Emerald
with locally shuffled Badges/HMs when there are worlds with unconnected
entrances present in the multiworld e.g. KH1. This is because this
location counting did not respect `single_player_placement=True` and
counted reachable locations across the entire multiworld.
Fixes#4834 as a sideeffect of removing the redundant code.
- Fixes Shadow's mission count being set by Sonic's mission count option
- Fixes one small logic error on `Security Hall - 5` on Hard Logic difficulty
- Removes stray character that was probably harmless
* Kivy: Add a button prompt box
* auto format the buttons to display 2 per row to look nicer
* update to kivymd
* have the uri popup use the new API
* have messenger use the new API
* make the buttonprompt import even more lazy
* messenger needs to be lazy too
* make the buttons take up the full dialog width
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
This item name is unusual in that it loses the word "round" when it's
infused, *and* the only guaranteed drop in the base game is the infused
"Blessed Red and White Round Shield +1". But since we're just listing
the uninfused version, we should use the uninfused name.
* demonstrate our pytest/CI configuration missing a __init__ test failure
* tell pytest/CI to run tests in __init__.py files
* revert the demonstration test failure
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Docs: tests: add naming / file naming conventions
Deprecates putting stuff into `__init__.py`.
This may be relevant for test discovery in the future.
* Docs: tests: fix class naming
* Docs: tests: update examples
* Punctuation is hard
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Revert part of one suggestion
The first set of () make the sentence make less sense.
* Docs: tests: clarify that __init__.py may be empty
* Make sentence nicer to read
I simply kept the original wording, but I agree that it reads somewhat odd
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* Update tests.md
Spelled out that tests will not run without running UpdateModule.py first and including a link to the instructions on how to do that.
* Applied black-silver's feedback and also I ran into tests that don't run correctly unless you also have run Webhost.py once. I have included that in the documentation as well.
* More black-silver feedback.
* Fix merge conflict
* Fix formatting, fix rule for heir access after merge
* Writing combat logic helpers
* More helpers!
* More logic!
* Rename has_stick to has_melee, some fixes per Medic's review
* Clamp max power from sword upgrades
* Wrote the rest of the helpers
* Remove unused import
* Apply item classifications
* Create the combat logic option
* Item classification varies based on option
* Add the shop sword logic stuff in
* Add the rules for the boss-only option
* Fix tiny issues
* Some early Overworld combat logic
* Fill out swamp combat logic
* Add note
* Bump up Boss Scav and Heir
* More revisions to combat logic
* Some changes, currently broken
* New system for power, kinda jank probably
* Revisions to new system, needs more balancing
* Cap attack upgrades
* Uncap mp power since it's directly related to damage output
* Voidlings
* Put together a table showing the vanilla-expected stats for each area
* Added some info on potion counts
* Made new helper functions
* Make has_required_stats
* Make has_combat_reqs
* Update er_rules for new combat reqs
* Fix all the broken things ever
* Remove outdated todo
* Make temp option for testing logic
* More flexible choices for combat items
* Hard require sword for bosses
* Temporarily default combat logic to on
* Finish writing overworld combat logic
* East Forest combat logic done
* Remove a few easy ones
* Finish beneath the well
* Dark Tomb combat logic
* West Garden combat logic
* make unit tests checkmark again
* Weird west garden dagger house edge case
* Try block for that weird west garden edge case
* Add quarry combat logic
* Update to filter out unreachable regions outside of ER
* Fortress Grave Path logic, and a couple fixes to the west garden logic
* Fortress east shortcut logic, and rewriting the try except blocks to use finally
* Refactor to use a new function cause wow there was a lot of repeated code
* Add combat logic to the other two sets of fortress fuses
* Add combat rules to beneath the vault
* Fix missing cathedral -> elevator connection
* Combat logic for cathedral to elevator
* Add cathedral main region, rename cathedral -> cathedral entry
* Setup cathedral combat logic
* Adjust locations' regions for ER
* Add laurels zip logic to the chest in the spike room in cathedral
* Add combat logic to frog's domain
* Move frog's domain locations to regions for combat logic
* Add new frog's domain regions for combat logic
* Update region name for frog's domain
* Fix typo
* Add more regions for lower zig
* Move around lower zig regions for combat logic
* Lower Zig combat logic
* Upper zig combat logic
* Fix typo
* Fix typos
* Fix missing world.
* Update combat logic description
* Add todo
* Add todo
* Don't make zig skip if er or fixed shop is off
* Make it so zig skip is only made with fewer shops and er
* Temporarily default combat logic on
* Update test to explicitly disable combat logic
* Update test_access.py
* Slight wording changes
* Fix bugs, refactor quarry regions so you can access chests in lower quarry with ice grapples
* Run through checks you can do with magic dagger
* Run through checks you can do with magic dagger
* Add rule for entering town portal of having equipment to deal with enemies
* Add rule for atoll near the 6 crabs surrounding a poor defenseless baby slorm
* Update the rule for the chest near the 6 crabs surrounding a slorm to also possibly require laurels
* Revamp combat logic function to work properly without melee
* Add laurels rules to combat logic chests
* Modify beneath the vault bridge rule to need a lantern if combat logic is on
* Put in money logic
* Dagger or combat for swamp big skeleton chest
* Remove the 100 moneys from logic
* Modify lower zig ls drop region destinations
* Remove completed todo
* Reword combat logic option description, remove test option
* Add combat logic to slot data
* Merge Silent's missing slot data bugfix PR #3628
* Remove test combat option
* Update combat logic description
* Fix secret gathering place issue
* Fix secret gathering place issue
* Fix lower zig ls rule
* Fix accidentally removed librarian rule
* Remove redundant rule
* Update gauntlet rule to hard-require a sword
* Add test for a problematic connection
* Adjust combat logic to deal with weird edge cases so it doesn't take stuff out of logic that was previously in logic
* Fix create_item classification
* Update some comments
* Update per exempt's suggestion
* Add combat logic to the well boss fight, reorder the combat logic stuff a little to better section them off
* Add EntranceLayout option
* Add back LogicRules as an invisible option, to not break old yamls
* Fix a bug with seed group, continue changing fixed shop to entrance layout
* Fix missed fixed shop -> entrance layout spot
* Fix bug in seed groups with fixed shop on and off
* Add entrance layout to the UT regen stuff
* Put direction. in, will add them later
* Remove unused elevation from portal class
* Got like half of them in
* Finish adding all of the directions
* Add combat rule for zig front to back
* Update per Medic's suggestion
* Update ladder storage without items option description
* Mess with state with collect and remove to save like 2 seconds (never again)
* Save even more time, still never going to do this again on anything else
* Add option check for collect and remove
* Add directions to shop portals
* Update direction in Portal with default
* Move Direction above Portal
* Add decoupled option, mess with plando connection stuff
* Merge, implement verify plando directions
* Condense the stuff in change and remove to less lines (thanks medic)
* Remove unused thing
* Swap to using logicmixin instead of prog_items (thanks Vi)
* Fix consistency in stat counters
* Add back something that was needed
* Fix mistake when adding back
* Making the fix better (thanks medic)
* Make it actually return false if it gets to the backup lists and fails them
* Fix stuff after merge
* Add outlet regions, create new regions as needed for them
* Put together part of decoupled and direction pairs
* make direction pairs work
* Make decoupled work
* Make fixed shop work again
* Fix a few minor bugs
* Fix a few minor bugs
* Fix plando
* god i love programming
* Reorder portal list
* Update portal sorter for variable shops
* Add missing parameter
* Some cleanup of prints and functions
* Fix typo
* it's aliiiiiive
* Make seed groups not sync decoupled
* Add test with full-shop plando
* Fix bug with vanilla portals
* Handle plando connections and direction pair errors
* Update plando checking for decoupled
* Fix typo
* Fix exception text to be shorter
* Add some more comments
* Add todo note
* Remove unused safety thing
* Remove extra plando connections definition in options
* Make seed groups in decoupled with overlapping but not fully overlapped plando connections interact nicely without messing with what the entrances look like in the spoiler log
* Fix weird edge case that is technically user error
* Add note to fixed shop
* Fix parsing shop names in UT
* Remove debug print
* Actually make UT work
* multiworld. to world.
* Fix typo from merge
* Make it so the shops show up in the entrance hints
* Fix bug in ladder storage rules
* Remove blank line
* # Conflicts:
# worlds/tunic/__init__.py
# worlds/tunic/er_data.py
# worlds/tunic/er_rules.py
# worlds/tunic/er_scripts.py
# worlds/tunic/rules.py
# worlds/tunic/test/test_access.py
* Fix issues after merge
* Update plando connections stuff in docs
* Fix library mistake
* has_stick -> has_melee
* has_stick -> has_melee
* Add a failsafe for direction pairing
* Fix playthrough crash bug
* Remove init from logicmixin
* Updates per code review (thanks hesto)
* has_stick to has_melee in newer update
* has_stick to has_melee in newer update
* # Conflicts:
# worlds/tunic/__init__.py
# worlds/tunic/combat_logic.py
# worlds/tunic/er_data.py
# worlds/tunic/er_rules.py
# worlds/tunic/er_scripts.py
* Cleanup more stuff after merge
* Revert "Cleanup more stuff after merge"
This reverts commit a6ee9a93da.
* Revert "# Conflicts:"
This reverts commit c74ccd74a4.
* Cleanup more stuff after merge
* Swap to .get for decoupled so it works with older games probably maybe
* Fix after merge
* Fix typo
* Fix UT support with fixed shop option
* Backport plando connections fix
* Fix issue with fixed shop + decoupled
* Make the error not duplicate the while loop condition
* Fix rule for quarry back to monastery
* Fix more stuff after merge
* Make it not output anything if you set plando connections but not ER
* Add obvious note to plando connections description
* Fix after merge
* add comment to commented out connection
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
This adds the requirement of a void mayo for the Goblin Problem quest. There are also some small adjustments to related rules
- Fishing a void mayo is only considered an option during the Goblin Problem quest, as the odds of finding one after the quest drops drastically.
- Entrance to the witch hut now requires the goblin problem quest, not just a void mayo.
- Fishing rules are all moved to `fishing_logic.py`.
- `can_fish_at` no longer check that you have any of the fishing regions and the region you actually want to fish in.
- created `can_fish_anywhere` and `can_crab_pot_anywhere` to better illustrate when any fish satisfies the rule.
### Features:
- Trap Link
- When you receive a trap, you send a copy of it to every other player with Trap Link enabled
- Ring Link
- Any coin amounts gained and lost by a linked player will be instantly shared with all other active linked players
Co-authored-by: TheLX5 <luisyuregi@gmail.com>
FakeROM instances were being created with default arguments, which
included a mutable default argument data dictionary, so all FakeROM
instances would be writing to and reading the same dictionary, resulting
in broken patch data in multiworlds with more than one Super Metroid
world.
* CI: github attestation for manually started builds
* CI: include appimage zsync in build attestation
* CI: github attestation for Linux release builds
* CI: reorder steps in build.yml
* CI: add windows builds to release.yml
* CI: order jobs in release.yml
* CI: add missing permission to release.yml
* CI: enable windows build in release.yml
* CI: false is skip
* CounterOption
* bring back the negative exception for ItemDict
* Backwards compatibility
* ruff on witness
* fix in calls
* move the contains
* comment
* comment
* Add option min and max values for CounterOption
* Use min 0 for TrapWeights
* This is safe now
* ruff
* This fits on one line again now
* OptionCounter
* Update Options.py
* Couple more typing things
* Update Options.py
* Make StartInventory work again, also make LocationCounter theoretically work
* Docs
* more forceful wording
* forced line break
* Fix unit test (that wasn't breaking?)
* Add trapweights to witness option presets to 'prove' that the unit test passes
* Make it so you can order stuff
* Update macros.html
* region.add_event function
* Make it return the location bc why not
* Actually item bc that seems more useful
* Update BaseClasses.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Update BaseClasses.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* add all the requested features from code review
* oop
* roughly sort args in order of importance (imo)
* Fix typing
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Core: deprecate old options API
* also deprecate assigning options via option_definitions
---------
Co-authored-by: alwaysintreble <mmmcheese158@gmail.com>
Basically, hints for itemlink worlds' locations get stored in ctx.hints under
1. the location's player
2. **every individual player** that is participating in the itemlink.
Right now, the updatehint code tries to replace and resend the hint under the itemlinked player, which doesn't work.
* Add fuzzy search box to Launcher.
* move func bind to the kv and prefer substring matching (#79)
* move the func bind to the kv
* prefer substr matching
* Remove fuzzy results, rely on substring only.
* Use early return instead of else.
* Add type hint to filter_clients_by_type.
* Activate search on keyboard input.
* Clear search box when filtering by type.
* Update Launcher.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
#4239 refactored buildings, but introduced iteration of a set when precollecting the building items into start inventory.
The iteration order of sets varies between separate Python processes due to set order being partially based on the hashes of the objects in the set and because Python processes each have a random hash seed by default.
* Adds a new class allowing TextFields to be resized
* Resizes most CommonClient components to be more in-line with pre-KivyMD
* Change the color of SelectableLabels and TooltipLabels to white
* Fixed ClientTabs not correctly showing the current tab indicator
* The server label now features a (i) icon to indicate that it can be hovered over.
* Changed the default `primary_palette` to `Lightsteelblue` and the default `dynamic_scheme_name` to `VIBRANT`
* Properly set attributes on `KivyJSONToTextParser.TextColors` so that proper typing can be utilized if an individual value is needed
* Fixed some buttons being discolored permanently once pressed
* Sped up the animations of button ripples and tab switching
* Added the ability to insert a new tab to `GameManager.add_client_tab`
* Hovering over the "Command" button in CommonClient will now display the contents of `/help` as a popup (note: this popup can be too large on default height for adequately large /help (SC2 Client), but should always fit fine on fullscreen).
* Fixed invalid sizing of MessageBox errors, and changed their text color to white
* Terraria integration
* Precollected items for debugging
* Fix item classification
* Golem requires Plantera's Bulb
* Pumpkin Moon requires Dungeon
* Progressive Dungeon
* Reorg, Options.py work
* Items are boss flags
* Removed unused option
* Removed nothing
* Wall, Plantera, and Zenith goals
* Achievements and items
* Fixed The Cavalry and Completely Awesome achievements
* Made "Dead Men Tell No Tales" a grindy achievement
* Some docs, Python 3.8 compat
* docs
* Fix extra item and "Head in the Clouds" being included when achievements are disabled
* Requested changes
* Fix potential thread unsafety, replace Nothing with 50 Silver
* Remove a log
* Corrected heading
* Added incompatible mods list
* In-progress calamity integration
* Terraria events progress
* Rules use events
* Removed an intentional crash I accidentally left in
* Fixed infinite loop
* Moved rules to data file
* Moved item rewards to data file
* Generating from data file
* Fixed broken Mech Boss goal
* Changes Calamity makes to vanilla rules, Calamity final bosses goal
* Added Deerclops, fixed Zenith goal
* Final detailed vanilla pass
* Disable calamity goals
* Typo
* Fixed some reward items not adding to item pool
* In-progress unit test fixes
* Unit test fixes
* `.apworld` compat
* Organized rewards file, made Frog Leg and Fllpper available in vanilla
* Water Walking Boots and Titan Glove rewards
* Add goals to slot data
* Fixed Hammush logic in Post-Mech goal
* Fixed coin rewards
* Updated Terraria docs
* Formatted
* Deathlink in-progress
* Boots of the Hero is grindy
* Fixed zenith goal not placing an item
* Address review
* Gelatin World Tour is grindy
* Difficulty notice
* Switched some achievements' grindiness
* Added "Hey! Listen!" achievement
* Terarria Python 3.8 compat
* Fixed Terraria You and What Army logic
* Calamity minion accessories
* Typo
* Calamity integration
* `deathlink` -> `death_link`
Co-authored-by: Zach Parks <zach@alliware.com>
* Missing `.`
Co-authored-by: Zach Parks <zach@alliware.com>
* Incorrect type annotation
Co-authored-by: Zach Parks <zach@alliware.com>
* `deathlink` -> `death_link` 2
Co-authored-by: Zach Parks <zach@alliware.com>
* Style
Co-authored-by: Zach Parks <zach@alliware.com>
* Markdown style
Co-authored-by: Zach Parks <zach@alliware.com>
* Markdown style 2
Co-authored-by: Zach Parks <zach@alliware.com>
* Address review
* Fix bad merge
* Terraria utility mod recommendations
* Calamity minion armor logic
* ArmorMinions -> Armor Minions, boss rush goal, fixed unplaced item
* Fixed unplaced item
* Started on Terraria 1.4.4
* Crate logic
* getfixedboi, 1.4.4 achievements, shimmer, town slimes, `Rule`, `Condition`, etc
* More clam getfixedboi logic, bar decraft logic, `NotGetfixedboi` -> `Not Getfixedboi`
* Calamity fixes
* Calamity crate ore logic
* Fixed item accessibility not generating in getfixedboi, fixed not generating with incompatible options, fixed grindy function
* Early achievements, separate achievement category options
* Infinity +1 Sword achievement can be location in later goals
* The Frequent Flyer is impossible in Calamity getfixedboi
* Add Enchanted Sword and Starfury for starting inventories
* Don't Dread on Me is redundant in Calamity
* In Calamity getfixedboi, Queen Bee summons enemies who drop Plague Cell Canisters
* Can't use Gelatin Crystal outside Hallow
* You can't get the Terminus without flags
* Typo
* Options difficult warnings
* Robbing the Grave is Hardmode
* Don't reserve an ID for unused Victory item
* Plantera is accessible early in Calamity via Giant Plantera's Bulbs
* Unshuffled Life Crystal and Defender Medal items
* Comment about Midas' Blessing
* Update worlds/terraria/Options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Remove stray expression
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Review suggestions
* Option naming caps consistency, add Laser Drill, Lunatic Cultist alt reqs, fix Eldritch Soul Artifact, Ceaseless Void reqs Dungeon
* Cal Clone doesn't drop Broken Hero Sword anymore, Laser Drill is weaker in Calamity
Co-authored-by: Seatori <92278897+Seatori@users.noreply.github.com>
* Fix Acid Rain logic
* Fix XB-∞ Hekate failing accessibility checks (by commenting it out bc it doesn't affect logic)
* Hardmode ores being fishable early in Calamity is not a bug anymore
* Mecha Mayhem is inaccessible in getfixedboi
* Update worlds/terraria/Rules.dsv
Co-authored-by: Seafo <92278897+Seatori@users.noreply.github.com>
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
Co-authored-by: Zach Parks <zach@alliware.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: Seatori <92278897+Seatori@users.noreply.github.com>
* Unroll tests for better parallelization
* fix ut test
* self review
* bro it's the second time today I have to commit some garbage to have a github action rerun because messenger fails what is this
* my god can the tests plz pass
* code reviews
* code reviews
* move TestRandomWorlds out of long module
* Pokemon Red and Blue PC Item fix
* Respect non_local_items for PC Item
* prefer exclude if also in priority locations
---------
Co-authored-by: alchav <alchav@jalchavware.com>
* Core: Speed up fill_restrictive item_pool pop loop
Items from `reachable_items` are placed in last-in-first-out order, so
items being placed will be towards the end of `item_pool`, but the
iteration to find the item was iterating from the start of `item_pool`.
Now also uses `del` instead of `.pop()` for an additional, tiny,
performance increase.
It is unlikely for there to be a noticeable difference in most cases.
Only generating with many worlds with a high percentage of progression
items and fast access rules is likely to see a difference with this
change.
--skip_output generation of 400 template A Hat in Time yamls with
progression balancing disabled goes from 76s to 43s (43% reduction) for
me with this patch. This placed 43200 progression items out of 89974
items total (48% progression items).
* Fix comment typo
"be" was missing.
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* create building data object and rename ItemSource to Source to be more generic
# Conflicts:
# worlds/stardew_valley/content/game_content.py
# Conflicts:
# worlds/stardew_valley/data/artisan.py
# worlds/stardew_valley/data/game_item.py
# worlds/stardew_valley/data/harvest.py
# worlds/stardew_valley/data/shop.py
* remove compound sources, replace by other requirements which already handle this usecase
* add coops to content packs
* add building progression in game features
* add shippping bin to starting building; remove has_house
* replace config check with feature
* add other buildings in content packs
* not passing
* tests passes, unbelievable
* use newly create methods more
* use new assets to ease readability
* self review
* fix flake8 maybe
* properly split rule for mapping cave systems
* fix tractor garage name
* self review
* add upgrade_from to farm house buldings
* don't override building name variable in logic
* remove has_group from buildings
* mark some items easy in grinding logic so blueprints buildings can be in more early spheres
* move stuff around to maybe avoid future conflicts cuz I have like 10 PRs opened right now
* remove price_multiplier, turns out it's unused during generation
* disable shop source for mapping cave systems
* bunch of code review changes
* add petbowl and farmhouse to autobuilding
* set min easy items to 300
* fix farm type
* Removed now unused imports from Launcher
* Moved ImageIcon and ImageButton to use ApAsyncImage for compatibility with apworlds
* Adjusted image size in the Launcher from 40x40 to 48x48. This is already larger than the size in previous versions, and a docs update is soon to follow.
* Expose `dynamic_scheme_contrast` to user.kv, allowing users to set high contrast.
* ScrollBox's default scroll_type was set to only content, so the scrollbar in Launcher was nonfunctional.
* Adjusted the spacing of the title of a component when a description is present to be closer to the center.
* Launcher now scrolls to the top automatically when changing between filters
Shifts the contents of `kvui.py`, and thus all CommonClient-based clients as well as Launcher, to using KivyMD. KivyMD is an extension for Kivy that is almost fully compatible with pre-existing Kivy components, while providing Material Design support for theming and overall visual design as well as useful pre-existing built in components such as Snackbars, Tooltips, and a built-in File Manager (not currently being used).
As a part of this shift, the launcher was completely overhauled, adding the ability to filter the list of components down to each type of component, the ability to define favorite components and filter to them, and add shortcuts for launcher components to the desktop. An optional description field was added to Component for display within the new launcher.
The theme (Light/Dark) and primary palette have also been exposed to users via client/user.kv.
* Core: Prevent people from using LogicMixin incorrectly
There's a world that ran into some issues because it defined its custom LogicMixin variables at the class level.
This caused "instance bleed" when new CollectionState objects were created.
I don't think there is ever a reason to have a non-function class variable on LogicMixin without also having `init_mixin`, so this asserts that this is the case.
Tested:
Doesn't fail any current worlds
Correctly fails the world in question
Also, not gonna call out that world because it was literally my fault for explaining it to them wrong :D
* Verbose af
* Update AutoWorld.py
`Location` does not override `__eq__` so should not override `__hash__`.
With this patch, this makes operations on sets of locations slightly
faster because they will use `object.__hash__` rather than
`Location.__hash__`.
`object.__hash__` is about 4 to 5 times faster than `Location.__hash__`
for me. Generation often uses sets of locations, so this slightly speeds
up generation.
The only place I could find that was hashing locations directly was
`WitnessLocationHint.__hash__`, but it has implemented a matching
`__eq__`, so is fine.
For security reasons, Python randomizes its hash seed each time it is
started, so the result of the `hash()` function is nondeterministic and
can't have been used by worlds for anything that needed to be
deterministic and can't have been used to compare information hashed at
generation time to information hashed by a client.
The base state passed to fill_restrictive should be as maximal as
possible otherwise fill_restrictive has to repeatedly re-sweep and
collect from advancement locations that were reachable from before
fill_restrictive has placed a single item.
This is not added within fill_restrictive itself because it is common
for fills to be performed using a partial 'all_state', which is already
a maximum exploration state.
With --skip_output generation of every template yaml, except FF, KH
and Shivers, this prevented repeatedly re-sweeping 576 advancement
locations in every sweep within progression fill, reducing the
generation time from 124s to 113s for me (8.8% reduction, averaged over
5 generations each).
Without implementing __iter__ directly, calling iter() on a
Region.Register on Python 3.12 would return a new generator implemented
as follows:
```py
def __iter__(self) -> int:
i = 0
try:
while True:
v = self[i]
yield v
i += 1
except IndexError:
return None
```
This was determined by disassembling the returned generator with
dis.dis() and then constructing a function that disassembles into the
same bytecode.
The iterator returned by `iter(self._list)` is faster than this
generator, so using it slightly improves generation performance on
average.
Iteration of Region.Register objects is used a lot in
`CollectionState.update_reachable_regions` in both of the private
_update methods that get called. The performance gain here will vary
depending on how many regions a world has and how many exits those
regions have on average.
For a game like Blasphemous, with a lot of regions and exits, generation
of 10 template Blasphemous yamls with `--skip_output --seed 1` and
progression balancing disabled went from 19.0s to 16.4s (14.2% reduction
in generation duration).
* Only consider usable exits when calculating whether or not a region is a dead-end
* Update EntranceLookup unit tests
* Add new dead-end test
* Add additional explanation to the new test
* minor formatting tweak
based on review feedback
---------
Co-authored-by: CodeGorilla <3672561+Ars-Ignis@users.noreply.github.com>
* DLC Quest Bug Fix
Start inventory item that do not exist in the present world do not make more trap item to appear anymore
* Update worlds/dlcquest/Items.py
Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com>
* DLC Quest Bug Fix
did the recommendation of Mysteryem and made the item not exist in the pool of item created
* DLC Quest Bug Fix
did the recommendation of agilbert1412 and made a check by name instead of item to itemData
* DLC Quest Bug Fix
overcook failed test
* DLC Quest Bug Fix
re-type correctly a type hint
---------
Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com>
* Note death link and trap link in game info page
* Update worlds/tunic/docs/en_TUNIC.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Turn it into a bulleted list
- Across Doom 1993 and Doom 2, any items that are accessible in Ultra-Violence from the start of the level without putting the player in any danger are now considered in logic when that level is first received, without needing any weapons available. This is intended to give generation more possible outs for bad placements.
- This affects the following maps in Doom 1993:
- Toxin Refinery (E1M3): 1 location.
- Command Control (E1M4): 1 location.
- Computer Station (E1M7): 1 location.
- Deimos Lab (E2M4): 1 location.
- Tower of Babel (E2M8): 1 location.
- Unholy Cathedral (E3M5): 1 location.
- This affects the following maps in Doom 2:
- The Waste Tunnels (MAP05): 2 locations.
- Dead Simple (MAP07): 2 locations.
- The Pit (MAP09): 1 location.
- Refueling Base (MAP10): 1 location.
- Nirvana (MAP21): 1 location, except see below.
- Icon of Sin (MAP30): 9 locations.
- Grosse (MAP32): 2 locations.
- Doom 2 has had some more significant logical adjustments made.
- The following Pro tricks have been added to Pro logic:
- Circle of Death (MAP11): Lowering the exit wall without the Red key by hitting the switch to do so from the nukage. This makes three items previously locked behind the Red key available early, as well as the exit.
- Suburbs (MAP16): Reaching the exit without any keys, as the gap between the pillar and the wall is large enough to let you through if you position yourself well. While multiple other squeeze glides exist (for example, you can skip the Yellow key in MAP21 by using one), this one is significantly easier than the rest; it does not require much precision, nor does it require vertical mouse movement.
- Nirvana (MAP21): Skipping the Blue key, as there is a gigantic gap between the bars that attempt to block you.
- The Chasm (MAP24): Skipping the Blue key by going extremely far through the nukage and finding one of a couple specific teleporters is now considered a Pro trick, and standard logic now expects the key to be obtained.
- The following levels have had other logic adjustments:
- The Waste Tunnels (MAP05): Requirements lowered to Shotgun + Super Shotgun + (Chaingun | Plasma gun).
- The Crusher (MAP06): Requirements lowered to Shotgun + (Chaingun | Plasma gun) for areas immediately accessible. Going beyond the Blue key door also requires Super Shotgun.
- The Factory (MAP12): The outdoors area, and the little room to the right of where you start, are accessible in sphere 1. These three items are all easily obtainable with only the pistol. The remaining items that are not in the central area are accessible with (Super Shotgun | Plasma gun), while the items in that area are accessible with Super Shotgun + Chaingun + (Plasma gun | BFG9000). This fixes Episode 2 not having an available sphere 1, and allows solo Episode 2 games.
- Nirvana (MAP21): As above, the item in the starting room is accessible in sphere 1. Every other item that doesn't require a key is accessible with (Super Shotgun | Plasma gun). The room in which you use the Yellow key is accessible with Super Shotgun + Chaingun + (Plasma gun | BFG9000). This fixes Episode 3 not having an available sphere 1, and allows solo Episode 3 games.
- The Catacombs (MAP22): The four items in the opening room only require (Shotgun | Super Shotgun | Plasma gun). The rest of the level is as before.
- Bloodfalls (MAP25): Requirements lowered to Shotgun + Super Shotgun + Chaingun, as this level is unusually easy for its placement in the game. Progressing past the Blue key door additionally requires (Rocket launcher | Plasma gun | BFG9000) solely to deal with the Arch-vile at the end of the level.
- Wolfenstein (MAP31): Requirements lowered to Chaingun + (Shotgun | Super Shotgun). This is closer to what the game expects from a non-secret hunting player from a pistol start.
- The following logic bugs in Heretic have been fixed:
- Quay (E5M3): An item in a Blue key locked hallway was previously marked as being in the "Main" region, thus considered to be accessible without that key. It has been moved to the appropriate "Blue" region.
- Courtyard (E5M4): Logic previously assumed you could reach the Wings of Wrath from the opening room, when that isn't actually possible. Changing this moved some items previously in the "Main" region into a new "Green" region, and items previously in the "Kakis" (Yellow OR Green) are now in a "Yellow" region instead. Fixes#4662.
- For known problematic solo episodes, some additional special cases have been added.
- Doom 1993, Episode 3: One of either the Shotgun or Chaingun is placed early. Slough of Despair (E3M2) is given as an additional starting level.
- Doom 2, Episode 3: One of either the Super Shotgun or Plasma gun is placed early.
- Heretic, Episode 1: The Docks (E1M1) - Yellow key is placed early.
- The following levels (and thus, their items and locations) were renamed, due to typos or other oddities:
- `Barrels o Fun (MAP23)` -> `Barrels o' Fun (MAP23)`
- `Wolfenstein2 (MAP31)` -> `Wolfenstein (MAP31)`
- `Grosse2 (MAP32)` -> `Grosse (MAP32)`
- `D'Sparil'S Keep (E3M8)` -> `D'Sparil's Keep (E3M8)`
- `The Aquifier (E3M9)` -> `The Aquifer (E3M9)`
Adds The Legend of Zelda: The Wind Waker as a supported game in Archipelago. The game uses [LagoLunatic's randomizer](https://github.com/LagoLunatic/wwrando) as its base (regarding logic, options, etc.) and builds from there.
* [Core][GER] Allow and require user-provided target name when splitting 1-way entrances
* Move target naming onto a parameter of disconnect_entrance_for_randomization
Changelog:
Features:
- New Goal
- Minigame Madness
- Win a certain number of each type of Minigame Trap, then defeat the Finalhazard to win!
- How many of each Minigame are required can be set by an Option
- When the required amount of a Minigame has been received, that Minigame can be replayed in the Chao World Lobby
- New optional Location Checks
- Bigsanity
- Go fishing with Big in each stage for a Location Check
- Itemboxsanity
- Either Extra Life Boxes or All Item Boxes
- New Items
- New Traps
- Literature Trap
- Controller Drift Trap
- Poison Trap
- Bee Trap
- New Minigame Traps
- Breakout Trap
- Fishing Trap
- Trivia Trap
- Pokemon Trivia Trap
- Pokemon Count Trap
- Number Sequence Trap
- Light Up Path Trap
- Pinball Trap
- Math Quiz Trap
- Snake Trap
- Input Sequence Trap
- Trap Link
- When you receive a trap, you send a copy of it to every other player with Trap Link enabled
- Boss Gate Plando
- Expert Logic Difficulty
- Use at your own risk. This difficulty requires complete mastery of SA2.
- Missions can now be enabled and disabled per-character, instead of just per-style
- Minigame Difficulty can now be set to "Chaos", which selects a new difficulty randomly per-trap received
Quality of Life:
- Gate Stages and Mission Orders are now displayed in the spoiler log
- Additional play stats are saved and displayed with the randomizer credits
- Stage Locations progress UI now displays in multiple pages when Itemboxsanity is enabled
- Current stage mission order and progress are now shown when paused in-level
- Chaos Emeralds are now shown when paused in-level
- Location Name Groups were created
- Moved SA2B to the new Options system
- Option Presets were created
- Error Messages are more obvious
Bug Fixes:
- Added missing `Dry Lagoon - 12 Animals` location
- Flying Dog boss should no longer crash when you have done at least 3 Intermediate Kart Races
- Invincibility can no longer be received in the King Boom Boo fight, preventing a crash
- Chaos Emeralds should no longer disproportionately end up in Cannon's Core or the final Level Gate
- Going into submenus from the pause menu should no longer reset traps
- `Sonic - Magic Gloves` are now plural
- Junk items will no longer cause a crash when in a falling state
- Chao Garden:
- Prevent races from occasionally becoming uncompletable when using the "Prize Only" option
- Properly allow Hero Chao to participate in Dark Races
- Don't allow the Chao Garden to send locations when connected to an invalid server
- Prevent the Chao Garden from resetting your life count
- Fix Chao World Entrance Shuffle causing inaccessible Neutral Garden
- Fix pressing the 'B' button to take you to the proper location in Chao World Entrance Shuffle
- Prevent Chao Karate progress icon overflow
- Prevent changing Chao Timescale while paused or while a Minigame is active
- Logic Fixes:
- `Mission Street - Chao Key 1` (Hard Logic) now requires no upgrades
- `Mission Street - Chao Key 2` (Hard Logic) now requires no upgrades
- `Crazy Gadget - Hidden 1` (Standard Logic) now requires `Sonic - Bounce Bracelet` instead of `Sonic - Light Shoes`
- `Lost Colony - Hidden 1` (Standard Logic) now requires `Eggman - Jet Engine`
- `Mad Space - Gold Beetle` (Standard Logic) now only requires `Rouge - Iron Boots`
- `Cosmic Wall - Gold Beetle` (Standard and Hard Logic) now only requires `Eggman - Jet Engine`
* DKC3, PKMN R/B/Em, M&L specific item matches
* MLSS Bean types are now discrete
* Add Doom 1/2 items
* Add Doom 1/2 items, actually
* Add Inscryption items
* Add more SA2B items, Minecraft
* Add VVVVVV
* Add misc items, comma fixes
* Hat in Time items
* Misc changes
* Expand TODO
* Add more OoT items, Pokemon consumables
* KH2
* KH1, adjust KH2 items
* Formatting fixes
* more item changes, fix kh1 name
* Fix KH1 name
* Add Full Heal to MEDICINE graphics
* Final comma fixes before PR
* Add Full Restore as Medicine
* Move some names to generic, drink fixes, double-quotes consistency fix
* moved ROCK SMASH match to PHRASES dict
* Removed some redundant name checks, remove Old Amber check from Emerald
* Added "PASS" generic check as "LETTER" sprite
* Removed TODO
* Corrected KH1 name for real this time
* Icon assignment now uppers freogin item string during comparison
* Doom skull keys are now NIGHTMARE_KEY, added QUILL as generic for FEATHER
* KH2 armor is Blunic, accessories are Ribbons
* KH1 accessories/armor are Blunic
* "ROCK SMASH" is now "BOMB"
* Removed extra space
### Features:
- New optional Location Checks
- Checkpointsanity
- Hair Color
- Allows for setting of Maddy's hair color in each of No Dash, One Dash, Two Dash, and Feather states
- Other Player Ghosts
- A game config option allows you to see ghosts of other Celeste 64 players in the multiworld
### Quality of Life:
- Checkpoint Warping
- Received Checkpoint items allow for warping to their respective checkpoint
- These items are on their respective checkpoint location if Checkpointsanity is disabled
- Logic accounts for being able to warp to otherwise inaccessible areas
- Checkpoints are a possible option for a starting item on Standard Logic + Move Shuffle + Checkpointsanity
- New Options toggle to enable/disable background input
### Bug Fixes:
- Traffic Blocks now correctly appear disabled within Cassettes
* Tests: unroll test_multiworlds.TestTwoPlayerMulti
Also adds a helper function that other tests can use to unroll tests.
* Docs: add more details to docs/tests.md
* Explain parametrization, subtests and link to the new helper
* Mention some performance details and work-arounds
* Mention multithreading / pytest-xdist
* Tests: make param.classvar_matrix accept sets
* CI: add test/param.py to type checking
* Tests: add missing typing to test/param.py
* Tests: fix typo in test/param.py doc comment
Co-authored-by: qwint <qwint.42@gmail.com>
* update docs
* Docs: reword note on performance
---------
Co-authored-by: qwint <qwint.42@gmail.com>
* Add test that stage1 ER will not fail due to speculative sweeping an indirect conditioned dead end
* Skip speculative sweep if it's the last entrance placement
* Better implementation of needs_speculative_sweep
* pep8
* Added mission order to randomized stuff, added a mention to the default option collect on goal, added an issue about mission order progress vs AP collect
* Remove false menion of collect being note modifyable after the mworld was gen
* Simplification of some sentences
* American spelling, header newline, and other
* Revert gray to grey, corrected some colors
* Forgot a gray -> grey
* Replace how the faction color option is described to side-step difference within yaml and client. Both fr/en.
* Change Regions, Areas and Connections to dataclasses/NamedTuples
* Move to new file
* we do a little renaming
* Purge the 'lambda' naming in favor of 'rule' or 'WitnessRule'
* missed one
* unnecessary change
* omega oops
* NOOOOOOOO
* Merge error
* mypy thing
* don't allow one-way and two-way entrances to be connected to each other
* add special handling for the tower hq nodes since they share the same parent region
* Change the logic for the 3 Zora's Domain Beehives to support new rule
Implement new logic changes to these 3 locations
* Update LogicHelpers.json with new rule for beehives that only appear for child link
Added below the "can_break_upper_beehive" a new helper called "can_break_upper_beehive_child" which removes the requirement for hookshot to avoid a logic error in the Zora Domain Beehives where it checks whether child or adult can break beehives, even though these beehives do not appear as an adult.
* Update LogicHelpers.json moving the call for is_child
As is_child is already called for can_use (Boomerang), it's a bit redundant to include the check for using the Boomerang, so it's being moved to be with the Bombchu check to ensure that it's not expected if the Bombchu Logic Rule is turned on that Adult can use bombchus to break the beehives. This effectively does the same thing, but should be better on performance.
* - Add requirement on Aurora Vineyard tablet to start the quest
* - Add rule for using the aurora vineyard staircase
* - Added a test for the tablet
* - Add a few missing items to the test
* - Introduce a new item to split the quest from the door and avoir ER issues
* - Optimize imports
* - Forgot to generate the item
* fix Aurora mess
# Conflicts:
# worlds/stardew_valley/rules.py
# worlds/stardew_valley/test/mods/TestMods.py
* fix a couple errors in the cherry picked commit, added a method to improve readability and reduce chance of human error on story quest conditions
* - remove blank line
* - Code review comments
* - fixed weird assert name
* - fixed accidentally surviving line
* - Fixed imports
---------
Co-authored-by: Jouramie <16137441+Jouramie@users.noreply.github.com>
* Landstalker: Fixed duplicate entrance names when using the "No teleport tree requirements" option
* Landstalker: Fixed more cases of duplicate entrance names when using "Shuffle Trees" with open trees
* Landstalker: Fixed endgame locations being present in "Reach Kazalt" goal
* Landstalker: Fixed Lithograph hint pointing at the wrong player
* Landstalker: Updated docs to remove the link to Steam since game got delisted
* Landstalker: Fixed high value hint_count rarely failing at generation
* Landstalker: Fixed dynamic shop prices being potentially invalid in case of a progression balancing (changes by ExemptMedic)
* Bottom to central path sealed off
* Bottom-to-left-path to right path sealed off
* Central opening (r4444): Left unsealed, paths seperated
* Top right half rocks fixed
* Middle to top opening sealed
* Right hallway seal correctly positioned
* Top right ladder: Fixed overlapping walls
A new `Subcon Forest - Behind Boss Firewall` region is added for
`Subcon Village - Snatcher Statue Chest`. `Subcon Forest Area` connects
to this new region, requiring either the first
`Progressive Painting Unlock`, or Expert logic +
`NoPaintingSkips: false`.
A new `Subcon Forest Boss Arena` region is added for
`Subcon Forest - Boss Arena Chest` because this is immediately
accessible from YCHE. There are connections to this region from
`Your Contract has Expired` (no requirements) and from
`Subcon Forest - Behind Boss Firewall` (requiring either Hard logic or
`Hookshot Badge` + `TOD Access`).
A reverse connection is also added to Expert logic, for
`Subcon Forest Boss Arena` -> `Subcon Forest - Behind Boss Firewall`.
This could be extended to include Hard logic if there is a reasonable
Cherry Bridge setup.
A reverse connection is also added to Expert logic, for
`Subcon Forest - Behind Boss Firewall` -> `Subcon Forest Area`, so long
as `NoPaintingSkips: false` because it is impossible to burn the
paintings to remove the firewall, from behind the firewall.
A new `Your Contract has Expired - Post Fight` region is added for the
Snatcher post fight cutscene to prevent the Snatcher Hover trick giving
access to YCHE, which would otherwise also give access to the new
`Subcon Forest Boss Arena` Region.
The paintings and boss arena gap logic for `Snatcher Statue Chest` and
`Boss Arena Chest` are now handled using the connections to/from these
new regions rather than being on the locations themselves.
The logic for `Act Completion (Toilet of Doom)` remains unchanged
because it has to be in the `Toilet of Doom` region.
In Expert logic, with `NoPaintingSkips: false`, YCHE is added as a rift
access region to Subcon Forest Time Rift entrances.
The `YCHE Access` event is no longer used and has been removed.
- Fixes painting skips logic for Subcon Village - Snatcher Statue Chest
- Fixes Subcon Forest - Boss Arena Chest being inaccessible from YCHE
- Adds Expert logic to reach `Snatcher Statue Chest` from YCHE
- Adds Expert logic to skip the boss firewall in reverse from YCHE so
long as painting skips are not removed from logic
- Adds Expert logic to access Subcon Forest Time Rift entrances from
YCHE so long as painting skips are not removed from logic
* The Messenger: transition rando
* remove unused import
* always link both directions for plando when using coupled transitions
* er_type was renamed to randomization_type
* use frozenset for things that shouldn't change
* review suggestions
* do portal and transition shuffle in `connect_entrances`
* remove some unnecessary connections that were causing entrance caching collisions
* add test for strictest possible ER settings
* use unittest.skip on the skipped test, so we don't waste time doing setUp and tearDown
* use the world helpers
* make the plando connection description more verbose
* always add searing crags portal if portal shuffle is disabled
* guarantee an arbitrary number of locations with first connection
* make the constraints more lenient for a bit more variety
* Init
* remove submodule
* Init
* Update docs
* Fix tests
* Update to use apcivvi
* Update Readme and codeowners
* Minor changes
* Remove .value from options (except starting hint)
* Minor updates
* remove unnecessary property
* Cleanup Rules and Region
* Fix output file generation
* Implement feedback
* Remove 'AP' tag and fix issue with format strings and using same quotes
* Update worlds/civ_6/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Minor docs changes
* minor updates
* Small rework of create items
* Minor updates
* Remove unused variable
* Move client to Launcher Components with rest of similar clients
* Revert "Move client to Launcher Components with rest of similar clients"
This reverts commit f9fd5df9fd.
* modify component
* Fix generation issues
* Fix tests
* Minor change
* Add improvement and test case
* Minor options changes
* .
* Preliminary Review
* Fix failing test due to slot data serialization
* Format json
* Remove exclude missable boosts
* Update options (update goody hut text, make research multiplier a range)
* Update docs punctuation and slot data init
* Move priority/excluded locations into options
* Implement docs PR feedback
* PR Feedback for options
* PR feedback misc
* Update location classification and fix client type
* Fix typings
* Update research cost multiplier
* Remove unnecessary location priority code
* Remove extrenous use of items()
* WIP PR Feedback
* WIP PR Feedback
* Add victory event
* Add option set for death link effect
* PR improvements
* Update post fill hint to support items with multiple classifications
* remove unnecessary len
* Move location exclusion logic
* Update test to use set instead of accidental dict
* Update docs around progressive eras and boost locations
* Update docs for options to be more readable
* Fix issue with filler items and prehints
* Update filler_data to be static
* Update links in docs
* Minor updates and PR feedback
* Update boosts data
* Update era required items
* Update existing techs
* Update existing techs
* move boost data class
* Update reward data
* Update prereq data
* Update new items and progressive districts
* Remove unused code
* Make filler item name func more efficient
* Update death link text
* Move Civ6 to the end of readme
* Fix bug with hidden locations and location.name
* Partial PR Feedback Implementation
* Format changes
* Minor review feedback
* Modify access rules to use list created in generate_early
* Modify boost rules to precalculate requirements
* Remove option checks from access rules
* Fix issue with pre initialized dicts
* Add inno setup for civ6 client
* Update inno_setup.iss
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
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>
* merge group options so specific handling is not needed when generating filler pool
* fix
* remove unneeded imports
* self review
* remove unneeded imports
* looks like typing was missing woopsi
* sm64ex: use item data class
* rearrange imports
* Dict to dict
* remove optional typing
* bonus item descriptions since we can also add stuff for webworld easily
* remove item descriptions (rip) and decrease verbosity for classifications
* formatting
* Timespinner: Add "no hell spiders" enemy rando option that is present in upstream settings
* Timespinner: Prism Break support tweaks (including tracker support)
* Timespinner: Add support for upstream Lock Key Amadeus flag
* Timespinner: Add support for upstream Risky Warps flag
* Timespinner: Add support for upstream Pyramid Start flag
* Timespinner: fix error in lab connectivity logic
* Timespinner: use has_all to simplify one check
Per PR suggestion.
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Timespinner: fix apparent logic error inherited from in-rando logic
* Timespinner: adjust "Origins" location logic slightly further to account for a Risky Warps case
* Timespinner: remove the backward compat options for the recent flag additions
* Timespinner: add newly added Gate Keep option from rando
* Timespinner: adjust the laser access colours in the tracker
* Timespinner: fix an item description in the tracker
* Timespinner: based on testing feedback, put Laser Access items in their own category
* Timespinner: add support for new upstream flag Royal Roadblock
* Timespinner: also ensure the new flag gets put in slot data
* Timespinner: fix bug in universal tracker support indicating castle basement is accessible at the lower Rising Tides flooding level
* Timespinner: exclude Talaria Attachment and Timespinner Wheel from pyramid start starter progression items
* Timespinner: fix region logic for the left pyramid warp
* Timespinner: fix main Gyre access logic when Risky Warps warps you behind the lasers
* Timespinner: apply suggested spacing fix
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: sgrunt <sgrunt1987@gmail.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Starting out
* Rules for breakable regions
* make the rest of it work, it's pr ready, boom
* Make it work in not pot shuffle
* Fix after merge
* Fix item id overlap
* Move breakable, grass, and local fill options in yaml
* Fix groups getting overwritten
* Rename, add new breakables
* Rename more stuff
* Time to rename them again
* Make it actually default for breakable shuffle
* Burn the signs down
* Fix west courtyard pot regions
* Fix fortress courtyard and beneath the fortress loc groups again
* More missing loc group conversions
* Replace instances of world.player with player, same for multiworld
* Update worlds/tunic/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Remove unused import
* create tool progression feature and unwrap option
* replace option usage with calling feature
* add comment explaining why some logic is a weird place
* replace item creation logic with feature
* self review and add unit tests
* rename test cuz I named them too long
* add a test for the trash can useful stuff cuz I thought there was a bug but turns out it works
* self review again
* remove price_multiplier, turns out it's unused during generation
* damn it 3.11 why are you like this
* use blacksmith region when checking vanilla tools
* fix rule
* move can mine using in tool logic
* remove changes to performance test
* properly set the option I guess
* properly set options 2
* that's what happen when you code too late
* Doom, Doom 2, Heretic: customizable ammo capacity
* Do not progression balance capacity up items
* Prog fill still doesn't agree, just go with our original idea
* Clean up the new options a bit
- Gave all options a consistent and easily readable naming scheme
(`max_ammo_<type>` and `added_ammo_<type>`)
- Don't show the new options in the spoiler log,
as they do not affect logic
- Fix the Doom games' Split Backpack option accidentally referring to
Heretic's Bag of Holding
The logging change across all three games is incidental, as at some
point I did run into that condition by happenstance and it turns out
that it throws an exception due to bad formatting if it's reached
* Do the visibility change for Heretic as well
* Update required client version
* Remove spoiler log restriction on options
* Remove Visibility import now made redundant
* Pokemon Emerald: Change some dexsanity vanilla items to evo items
If a species evolves via item use (Fire Stone, Metal Coat, etc.), use that as it's vanilla item instead of a ball
* Pokemon Emerald: Remove accidentally added print
* Pokemon Emerald: Update changelog
* Pokemon Emerald: Adjust changelog
* Pokemon Emerald: Remove unnecessary else
* Pokemon Emerald: Fix changelog
* adding qwints suggestions
* add stat increase protection and ingame yml stuff
* idk how I forgot these
* reword things
* Update worlds/kh2/Client.py
Co-authored-by: qwint <qwint.42@gmail.com>
* 3.12 compat
* too long of a line
* why didnt I do this before lol
* reading is hard
* missed one
* forgot the self
* fix crash if you get datapackage that isnt kh2
* update to main?
* update to use 0.10 as base and fix violet's base 0 on hex values
* reverting this because I'm bad at my job
---------
Co-authored-by: qwint <qwint.42@gmail.com>
* Expand and validate the RAM cache
* Part way through location improvement
* Fixed location tracking
* Preliminary entrance tracking support
* Actually send entrance messages
* Store found entrances on the server
* Bit of cleanup
* Added rupee count, items linked to checks
* Send Magpie a handshAck
* Got my own version wrong
* Remove the Beta name
* Only send slot_data if there's something in it
* Ask the server for entrance updates
* Small fix to stabilize Link's location when changing rooms
* Oops, server storage is shared between worlds
* Deal with null responses from the server
* Added UNUSED_KEY item
This was causing confusion and Discord support requests because the
instructions there are no longer compatible with the latest version of
Archipelago.
This also lists me as the primary author of the new setup guide.
* Secret Feature
* Fixes
* Fixes and unit tests
* renaming some variables
* Fix the thing
* unit test for elevator egg
* Docstring
* reword
* Fix duplicate locations I think?
* Remove debug thing
* Add the tests back lol
* Make it so that you can exclude an egg to disable it
* Improve hint text for easter eggs
* Update worlds/witness/options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/witness/player_logic.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/witness/options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/witness/player_logic.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/witness/rules.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update test_easter_egg_shuffle.py
* This was actually not necessary, since this is the Egg requirements, nothing to do with location names
* Move one of them
* Improve logic
* Lol
* Moar
* Adjust unit tests
* option docstring adjustment
* Recommend door shuffle
* Don't overlap IDs
* Option description idk
* Change the way the difficulties work to reward playing higher modes
* Fix merge
* add some stuff to generate_data_file (this file is not imported during gen, don't review it :D)
* oop
* space
* This can be earlier than I thought, apparently.
* buffer
* Comment
* Make sure the option is VERY visible
* Some mypy stuff
* apparently ruff wants this
* .
* durinig
* Update options.py
* Explain the additional effects of each difficulty
* Fix logic of flood room secret
* Add Southern Peninsula Area
* oop
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* More hex quest updates
- Implement page ability shuffle for hex quest
- Fix keys behind bosses if hex goal is less than 3
- Added check to fix conflicting hex quest options
- Add option to slot data
* Change option comparison
* Change option checking and fix some stuff
- also keep prayer first on low hex counts
* Update option defaulting
* Update option checking
* Fix option assignment again
* Show player name in option warning
* Add new option to universal tracker stuff
* Update __init__.py
* Make helper method for getting total hexagons in itempool
* Update options.py
* Update option value passthrough
* Change ability shuffle to default on
* Check for hexagons option when writing spoiler
* add groups and a preset
* formatting
* pull zig's tarin's gift improvements
* typing
* alias groups for progressive items
* change tarins gift option a bit
* add bush breakers item group
* fix typo
* bush_breaker option, respect non_local_items
* review suggestions
* cleaner
thx exempt
* Update worlds/ladx/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* fix gen failures for dungeon shuffle
* exclude shovel based on entrance mapping
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* marin text
* Adds lots of Marin Flavour Text (#32)
* Updates of Splash text 24-09-18
* Re-Adds '
* use pkgutil
* Adds all community suggestions up until 20/09/2024 (#33)
* Adds all community suggestions up until 20/09/2024
* cutting deathlink jokes
---------
Co-authored-by: Alex Nordstrom <a.l.nordstrom@gmail.com>
* drop piracy-adjacent jokes
* marin text was too long
* more submissions
* no longer looking for new maintainer
---------
Co-authored-by: palex00 <32203971+palex00@users.noreply.github.com>
* Move a couple locations to monastery
* Connect Quarry Back to Monastery
* Quarry Back -> Monastery with laurels, Monastery -> Monastery Back with wand/sword
* Add Monastery Back region
* Move a couple non-ER locations to monastery back
* Monastery front -> back with sword, wand, or laurels zip
* also laurels zip for non-ER
* CI: ctest: fix trigger on CMakeLists change
* CI: ctest: update cmake version
this removes a warning
and matches gtest
* CI: ctest: remove explicit build mode for MSVC
gtest switched to dynamic libc (/MD), which is default, so this just works now
* uses itempool count vs unfilled location count instead of counting prog_items values which could have custom counters
* move unfilled location check to before can_reach
* add tests for successful minimal GER call with extra collect override prog_items in the pool to regression test issue fixed in this PR
* Potential fix for attack issue
* also put the lazy version of the swamp fix in for good measure
* fix extra line
* now it is good
* Add the test, roll the other PR into this one
* Make the test exception more useful
* Remove debug print
* Combat logic fixed?
* Move a few areas to before well instead of east forest
* Put in qwint's suggestions in test
* Implement qwint's suggestions in combat_logic.py
* Implement qwint's suggestions for combat_logic.py
* Fix typo
* Remove experimental from combat logic description
* Remove copy_mixin again
* Add comment about copy_mixin
* Use a more proper random
* Some optimizations from Vi's comments
* Core: Replace generator creation/iteration in CollectionState methods
Using generators in these functions incurs overhead to create the new
generator instance, call the `any`/`all`/`sum` function and have the
`any`/`all`/`sum` function iterate the generator, which in turn iterates
the iterable.
Replacing the use of generators with for loops is faster.
Getting `self.prog_items[player]` once in advance also improves
performance of iterating longer iterables.
* Add comment on the choice of for loops instead of any()/all()/sum()
* [LADX] Fix minimal accessibility
* allow_partial for minimal accessibility
* create the correct partial_all_state
* skip our prefills rather than removing after
* dont rebuild our prefill list
---------
Co-authored-by: threeandthreee <a.l.nordstrom@gmail.com>
* Tests: massively improve the memory leak test performance
With the growing number of worlds, GC becomes the bottleneck and slows down the test.
* Tests: fix typing in general/test_memory
* MultiServer: add NoText tag and handling
* MultiServer: deprecate and warn for uncompressed connections
* MultiServer: fix missing space in no compression warning
* - Unrolled and improved the structure of the test for Mods + ER, to improve total performance and performance on individual tests for threading purposes
* Use | instead of Union[]
Co-authored-by: Jouramie <16137441+Jouramie@users.noreply.github.com>
* - Remove unused using
---------
Co-authored-by: Jouramie <16137441+Jouramie@users.noreply.github.com>
* adds docstring to make_gui describing what things you might want to change without dealing with kivy/kvui directly (there are better places to document those)
* Update CommonClient.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Update CommonClient.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* skips opening a subprocess if kivy (and thus the launcher gui) hasn't been loaded so stdin can function as expected on --nogui and similar
* this exists lol
* keep old function around and use new function for CC component
* fix name=None typing
* unit test that get all state is called with partial entrances before connect_entrances
* fix the two worlds doing it
* lol
* unused import
* Update test/general/test_entrances.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update test_entrances.py
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Add connect_entrances
* update ER docs
* fix that test, but also ew
* Add a test that asserts the new finalization
* Rewrite test a bit
* rewrite some more
* blank line
* rewrite rewrite rewrite
* rewrite rewrite rewrite
* RE. WRITE.
* oops
* Bruh
* I guess, while we're at it
* giga oops
* It's been a long day
* Switch KH1 over to this design with permission of GICU
* Revert
* Oops
* Bc I like it
* Update locations.py
* Core: some low-hanging fruit on the strict type check
* bump pyright version
* bump pyright version
* bump pyright and remove file that's no longer easy
* PMDs now check to make sure you have enough unlockers for all of them before any are in logic, to avoid softlocks
* Adds Humor and BlckMnd to the pool and sets logic for Villain and Comedian. Patch not yet updated to remove starting inventory
* Adds Serenade as a check
* Fixes hide and seek completion to use proper Yoka Zoo map. Updates bsdiff patch to 1.2
* Adds option for excluding Secret Area, and item/location groups for further customization
* Update worlds/mmbn3/Locations.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/mmbn3/Regions.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/mmbn3/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/mmbn3/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/mmbn3/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Replaces can_reach generic with can_reach_region or can_reach_location, where applciable
* Unlocker is now a progression item, Excluded Locations is now a Set
* Missed a merge marker
* Excluded locations is no longer a set since you can't append to a set with +=
* Excluded locations is now a set again since you apparent can append to a set with |=
* Replaces more lists with sets. Fixes wording in option descriptions
* Update worlds/mmbn3/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Fix Director boss photo logic
The rules were being added to for the "Director" boss in
`set_enemy_rules()`, which didn't exist because the boss created was
called "Conductor" instead.
The name of the boss has been changed to "Director", to match, because
it is more accurate due to DJ Grooves possibly being the boss instead of
The Conductor.
The missing logic was the `Hookshot Badge` requirement, however, the
boss events are only used as part of the `Camera Tourist - All Clear`
location, which requires every boss event to be reachable, and the
Toxic Flower boss also has a `Hookshot Badge` requirement, so the
missing `Hookshot Badge` for the Director boss had no effect on logic.
The boss event locations are hidden from spoiler output, so to get a
spoiler showing the Director boss event accessed before having
`Hookshot Badge`, spoiler output had to be modified to also show the
hidden locations. Example sphere from playthrough that should not be
possible because it gets the `Hookshot Badge` and the `Conductor` event
(now renamed to `Director`) in the same sphere:
```
5: {
Act Completion (Time Rift - Dead Bird Studio): Relic (Crayon Box)
Conductor - Dead Bird Studio Basement: Conductor
Dead Bird Studio (Rift) - Page: Behind Cardboard Planet: Time Piece
Dead Bird Studio (Rift) - Page: Near Time Rift Gate: Hookshot Badge
Picture Perfect - Hats Buy Building: Metro Ticket - Blue
Snatcher - Your Contract has Expired: Snatcher
}
```
* Add missing Hookshot + Painting logic for Toilet boss picture
Includes the Hard logic of crossing the gap with a cherry bridge instead
of hookshot and the expert logic of being able to skip the boss firewall
with a cherry hover.
* Fix Alpine Skyline - Goat Outpost Horn region
`Alpine Skyline - Goat Outpost Horn` is accessible from The Illness has
Spread, but was being added to the region that is only accessible from
Alpine Free Roam. `Alpine Skyline - Goat Outpost Horn` has been moved to
the region that is accessible from both The Illness has Spread and
Alpine Free Roam.
* Add missing HitType.umbrella logic for Top of HQ Coin in Beat the Heat
Like Heating up Mafia Town, the cannon to the Mafia HQ area only opens
once all the faucets have been turned off by hitting them. This requires
the Umbrella when umbrella logic is enabled, but the Snatcher Coin on
top of Mafia HQ was missing this requirement when accessed from Beat the
Heat.
* Add missing Main Objective requirement for auto-completed Bonus Stamps
When a Main Objective is not excluded, but the bonuses are excluded, the
bonuses auto-complete once the Main Objective is completed. The
requirement to complete the Main Objective was missing, so the logic was
incorrectly awarding bonus stamps as soon as a Contract was unlocked,
even when it was not possible to complete the Main Objective of that
Contract.
* Add missing Hookshot requirement for The Arctic Cruise - Toilet from Bon Voyage!
`The Arctic Cruise - Toilet` is accessed from the `Cruise Ship` region,
but it is only present in the Ship Shape and Bon Voyage! acts.
Ship Shape and Rock the Boat can access `Cruise Ship` without any items,
but Bon Voyage! requires the Hookshot Badge to reach `Cruise Ship`.
With how the logic was set up, it was incorrectly giving access to
`The Arctic Cruise - Toilet` if the player had access to Bon Voyage!
but only had access to `Cruise Ship` through Rock the Boat.
* Fix Expert logic Rush Hour-only ticket skips
The code was checking `if not world.options.NoTicketSkips:`, but that
would only be `True` for `False`. For "rush_hour" (for Rush Hour-only
ticket skips), it would be `False`, causing Rush Hour-only ticket skips
to act as if ticket skips were disabled.
* Remove Mystifying Time Mesa: Zipline gaining Hookshot requirement in moderate logic
Alpine Skyline - Mystifying Time Mesa: Zipline does not normally
require Hookshot Badge because it is an implied requirement due to only
being accessible from Alpine Free Roam which does require Hookshot
Badge. In normal logic difficulty, the location does not have an
explicit Hookshot Badge requirement, but moderate logic was adding a
Hookshot Badge requirement. This extraneous Hookshot Badge requirement
has been removed.
* Fix Act Completion (Queen Vanessa's Manor) not being accessible with Dweller Mask/Brewing Hat
It was logically requiring the Umbrella hit type only, whereas all the
other locations in Queen Vanessa's Manor require the Dweller Bell hit
type which additionally allows Dweller Mask or Brewing Hat.
* Remove Dweller Mask requirement for Subcon Forest - Tall Tree Hookshot Swing
The Dweller Mask is not used in the intended vanilla route to get this
item, so this requirement seems to have been a mistake.
* Remove unused SDJ option for Subcon Forest - Long Tree Climb Chest
Hard logic can already reach this location with nothing (other than
paintings), so the "or" logic of being able to perform an SDJ was
unused.
* Require any non-HUMT Mafia Town act for Hot Air Balloon with nothing
Two buckets/beach balls are required to bucket/ball hover, but there is
only a single beach ball accessible in Heating Up Mafia Town, and
no accessible buckets.
There is an alternative strategy for Top of Lighthouse that only
requires a single beach ball, so that location can still be reached with
nothing from Heating Up Mafia Town.
* Use `get_difficulty()` helper in `set_enemy_rules`
Co-authored-by: Exempt-Medic <60412657+exempt-medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+exempt-medic@users.noreply.github.com>
* Fix crash when trying to log an exception
In https://github.com/ArchipelagoMW/Archipelago/pull/3028, we added a new logging filter which checked `record.msg`.
However, you can pass whatever you want into a logging call. In this case, what we missed was ecc3094c70/MultiServer.py (L530C1-L530C37), where we pass an Exception object as the message. This currently causes a crash with the new filter.
The logging module supports this. It has no typing and can handle passing objects as messages just fine.
What you're supposed to use, as far as I understand it, is `record.getMessage()` instead of `record.msg`.
* Update Utils.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Fix certain items not being added to slot data
* Change where items get added to slot data
* Add initial grass randomizer stuff
* Fix rules
* Update grass.py
Improve location names
* Remove wand and gun from logic
* Update __init__.py
* Fix logic for two pieces of grass in atoll
* Make early bushes only contain grass
* Backport changes to grass rando (#20)
* Backport changes to grass rando
* add_rule instead of set_rule for the special cases, add special cases for back of swamp laurels area cause I should've made a new region for the swamp upper entrance
* Remove item name group for grass
* Update grass rando option descriptions
- Also ignore grass fill for single player games
* Ignore grass fill option for solo rando
* Update er_rules.py
* Fix pre fill issue
* Remove duplicate option
* Add excluded grass locations back
* Hide grass fill option from simple ui options page
* Check for start with sword before setting grass rules
* Update worlds/tunic/options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Exclude grass from get_filler_item_name
- non-grass rando games were accidentally seeing grass items get shuffled in as filler, which is funny but probably shouldn't happen
* Update worlds/tunic/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* change the rest of grass_fill to local_fill
* Filter out grass from filler_items
* remove -> discard
* Update worlds/tunic/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* change has_stick to has_melee
* Update grass list with combat logic regions
* More fixes from combat logic merge
* Fix some dumb stuff (#21)
* Reorganize pre fill for grass
* Update option value passthrough
* Update __init__.py
* Fix region name
* Make separate pools for the grass and non-grass fills (#22)
* Make separate pools for the grass and non-grass fills
* Update worlds/tunic/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Fix those things in the PR (#23)
* Use excludable property
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Modify UT support to make a better pattern
* Handle keyerror for logic_rules option
* Missed self.passthrough value setting
* Less laziness for passthrough
* Remove extra newline
* Fix missing using_ut = True, also remove now unnecessary try except since 0.5.1 is out
* New UT thing, it goes in this PR because it's been open for 5 months for a very very tiny change
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* first working (most of the time) progression generation for SM using VariaRandomizer's rules, items, locations and accessPoint (as regions)
* first working single-world randomized SM rom patches
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* Fixed multiworld support patch not working with VariaRandomizer's
Added stage_fill_hook to set morph first in progitempool
Added back VariaRandomizer's standard patches
* + added missing files from variaRandomizer project
* + added missing variaRandomizer files (custom sprites)
+ started integrating VariaRandomizer options (WIP)
* Some fixes for player and server name display
- fixed player name of 16 characters reading too far in SM client
- fixed 12 bytes SM player name limit (now 16)
- fixed server name not being displayed in SM when using server cheat ( now displays RECEIVED FROM ARCHIPELAGO)
- request: temporarly changed default seed names displayed in SM main menu to OWTCH
* Fixed Goal completion not triggering in smClient
* integrated VariaRandomizer's options into AP (WIP)
- startAP is working
- door rando is working
- skillset is working
* - fixed itemsounds.ips crash by always including nofanfare.ips into multiworld.ips (itemsounds is now always applied and "itemsounds" preset must always be "off")
* skillset are now instanced per player instead of being a singleton class
* RomPatches are now instanced per player instead of being a singleton class
* DoorManager is now instanced per player instead of being a singleton class
* - fixed the last bugs that prevented generation of >1 SM world
* fixed crash when no skillset preset is specified in randoPreset (default to "casual")
* maxDifficulty support and itemsounds removal
- added support for maxDifficulty
- removed itemsounds patch as its always applied from multiworld patch for now
* Fixed bad merge
* Post merge adaptation
* fixed player name length fix that got lost with the merge
* fixed generation with other game type than SM
* added default randoPreset json for SM in playerSettings.yaml
* fixed broken SM client following merge
* beautified json skillset presets
* Fixed ArchipelagoSmClient not building
* Fixed conflict between mutliworld patch and beam_doors_plms patch
- doorsColorsRando now working
* SM generation now outputs APBP
- Fixed paths for patches and presets when frozen
* added missing file and fixed multithreading issue
* temporarily set data_version = 0
* more work
- added support for AP starting items
- fixed client crash with gamemode being None
- patch.py "compatible_version" is now 3
* commited missing asm files
fixed start item reserve breaking game (was using bad write offset when patching)
* Nothing item are now handled game-side. the game will now skip displaying a message box for received Nothing item (but the client will still receive it).
fixed crash in SMClient when loosing connection to SNI
* fixed No Energy Item missing its ID
fixed Plando
* merge post fixes
* fixed start item Grapple, XRay and Reserve HUD, as well as graphic beams (except ice palette color)
* fixed freeze in blue brinstar caused by Varia's custom PLM not being filled with proper Multiworld PLM address (altLocsAddresses)
* fixed start item x-ray HUD display
* Fixed start items being sent by the server (is all handled in ROM)
Start items are now not removed from itempool anymore
Nothing Item is now local_items so no player will ever pickup Nothing. Doing so reduces contribution of this world to the Multiworld the more Nothing there is though.
Fixed crash (and possibly passing but broken) at generation where the static list of IPSPatches used by all SM worlds was being modified
* fixed settings that could be applied to any SM players
* fixed auth to server only using player name (now does as ALTTP to authenticate)
* - fixed End Credits broken text
* added non SM item name display
* added all supported SM options in playerSettings.yaml
* fixed locations needing a list of parent regions (now generate a region for each location with one-way exits to each (previously) parent region
did some cleaning (mainly reverts on unnecessary core classes
* minor setting fixes and tweaks
- merged Area and lightArea settings
- made missileQty, superQty and powerBombQty use value from 10 to 90 and divide value by float(10) when generating
- fixed inverted layoutPatch setting
* added option start_inventory_removes_from_pool
fixed option names formatting
fixed lint errors
small code and repo cleanup
* Hopefully fixed ROR2 that could not send any items
* - fixed missing required change to ROR2
* fixed 0 hp when respawning without having ever saved (start items were not updating the save checksum)
* fixed typo with doors_colors_rando
* fixed checksum
* added custom sprites for off-world items (progression or not)
the original AP sprite was made with PierRoulette's SM Item Sprite Utility by ijwu
* - added missing change following upstream merge
- changed patch filename extension from apbp to apm3 so patch can be used with the new client
* added morph placement options: early means local and sphere 1
* fixed failing unit tests
* - fixed broken custom_preset options
* - big cleanup to remove unnecessary or unsupported features
* - more cleanup
* - moved sm_randomizer_rom and all always applied patches into an external project that outputs basepatch.ips
- small cleanup
* - added comment to refer to project for generating basepatch.ips (https://github.com/lordlou/SMBasepatch)
* fixed g4_skip patch that can be not applied if hud is enabled
* - fixed off world sprite that can have broken graphics (restricted to use only first 2 palette)
* - updated basepatch to reflect g4_skip removal
- moved more asm files to SMBasepatch project
* - tourian grey doors at baby metroid are now always flashing (allowing to go back if needed)
* fixed wrong path if using built as exe
* - cleaned exposed maxDifficulty options
- removed always enabled Knows
* Merged LttPClient and SMClient into SNIClient
* added varia_custom Preset Option that fetch a preset (read from a new varia_custom_preset Option) from varia's web service
* small doc precision
* - added death_link support
- fixed broken Goal Completion
- post merge fix
* - removed now useless presets
* - fixed bad internal mapping with maxDiff
- increases maxDiff if only Bosses is preventing beating the game
* - added support for lowercase custom preset sections (knows, settings and controller)
- fixed controller settings not applying to ROM
* - fixed death loop when dying with Door rando, bomb or speed booster as starting items
- varia's backup save should now be usable (automatically enabled when doing door rando)
* -added docstring for generated yaml
* fixed bad merge
* fixed broken infinity max difficulty
* commented debug prints
* adjusted credits to mark progression speed and difficulty as Non Available
* added support for more than 255 players (will print Archipelago for higher player number)
* fixed missing cleanup
* added support for 65535 different player names in ROM
* fixed generations failing when only bosses are unreachable
* - replaced setting maxDiff to infinity with a bool only affecting boss logics if only bosses are left to finish
* fixed failling generations when using 'fun' settings
Accessibility checks are forced to 'items' if restricted locations are used by VARIA following usage of 'fun' settings
* fixed debug logger
* removed unsupported "suits_restriction" option
* fixed generations failing when only bosses are unreachable (using a less intrusive approach for AP)
* - fixed deathlink emptying reserves
- added death_link_survive option that lets player survive when receiving a deathlink if the have non-empty reserves
* - merged death_link and death_link_survive options
* fixed death_link
* added a fallback default starting location instead of failing generation if an invalid one was chosen
* added Nothing and NoEnergy as hint blacklist
added missing NoEnergy as local items and removed it from progression
* SM Varia can now generate without ROM
* removed stage_assert_generate
This affects builds with non-writable installation directories.
Instead of saving data in ~/Archipelago we now use $XDG_DATA_HOME/Archipelago
(defaulting to ~/.local/share/Archipelago).
If ~/Archipelago still exists we move it to the new location and link ~/Archipelago to it.
Motivation: This follows the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/latest/)
to at least some degree and doesn't clutter the user's home directory.
Option resolution for the `StartingLocation` option (the only
`ChoiceIsRandom` subclass) was writing to the `randomized` attribute on
the class instead of on the instance, meaning that
`self.options.starting_location.randomized` would be `True` for all
Blasphemous players in the multiworld if any one of the players set
their `StartingLocation` option to `"random"`.
This patch fixes the issue by writing to the `randomized` attribute on
the new instance instead of on the class.
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`.
* 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>
* 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>
* proguseful
* ruff
* variable rename
* variable rename
* Better (?) comment
* Better way to do this? I guess
* sure
* ruff
* Eh, it's not worth it. Here's the much simpler version
* don't need this now
* Improve some classification checks while we're at it
* Only proguseful obelisk keys if eps are individual
* Vi don't forget about itemlinks challenge difficulty impossible
* People other than Vi also don't forget about ItemLinks challenge difficulty impossible
This PR is mainly refactoring. Here is what changed:
- Changing item names so that each words are capitalized (`Energy Form` instead of `Energy form`)
- Removing duplication of string literal by using:
- Constants for items and locations,
- Region's name attribute for entrances,
- Clarify some documentations,
- Adding some region to be more representative of the game and to remove listing of locations in the rules (prioritize entrance rules over individual location rules).
This is the other minor modifications that are not refactoring:
- Adding an early bind song option since that can be used to exit starting area.
- Changing Sun God to Lumerean God to be coherent with the other gods.
- Changing Home Water to Home Waters and Open Water to Open Waters to be coherent with the game.
- Removing a rules to have an attack to go in Mithalas Cathedral since you can to get some checks in it without an attack.
- Adding some options to slot data to be used with Poptracker.
- Fixing a little but still potentially logic breaking bug.
* Raft: Place locked items in create_items and fix get_pre_fill_items
`pre_fill` runs after item plando, and item plando could place an item
at a location where Raft was intending to place a locked item, which
would crash generation.
This patch moves the placement of these locked items earlier, into
`create_items`.
Setting items into `multiworld.raft_frequencyItemsPerPlayer` for each
player has been replaced with passing `frequencyItems` to the new
`place_frequencyItems` function.
`setLocationItem` and `setLocationItemFromRegion` have been moved into
the new `place_frequencyItems` function so that they can capture the
`frequencyItems` argument variable.
The `get_pre_fill_items` function could return a list of all previously
placed items across the entire multiworld which was not correct. It
should have returned the items in
`multiworld.raft_frequencyItemsPerPlayer[self.player]`. Now that these
items are placed in `create_items` instead of `pre_fill`,
`get_pre_fill_items` is no longer necessary and has been removed.
* self.multiworld.get_location -> self.get_location
Changed the occurences in the modified code.
* Saving Princess: initial commit
* settings -> options
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* settings -> options
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* replace RegionData class with List[str]
RegionData was only wrapping a List[str], so we can directly use List[str]
* world: MultiWorld -> multiworld: MultiWorld
* use world's random instead of multiworld's
* use state's has_any and has_all where applicable
* remove unused StartInventory import
* reorder PerGameCommonOptions
* fix relative AutoWorld import
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* clean up double spaces
* local commands -> Local Commands
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* remove redundant which items section
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* game info rework
* clean up item count redundancy
* add game to readme and codeowners
* fix get_region_entrance return type
* world.multiworld.get -> world.get
* add more events
added events for the boss kills that open the gate, as well as for system power being restored
these only apply if expanded pool is not selected
* add client/autoupdater to launcher
* reorder commands in game info
* update docs with automated installation info
* add quick links to doc
* Update setup_en.md
* remove standalone saving princess client
* doc fixes
* code improvements and redundant default removal
as suggested by @Exempt-Medic
this includes the removal of events from the item/location name to id, as well as checking for the player name being ASCII
* add option to change launch coammnd
the LaunchCommand option is filled to either the executable or wine with the necessary arguments based on Utils.is_windows
* simplify valid install check
* mod installer improvements
now deletes possible existing files before installing the mod
* add option groups and presets
* add required client version
* update docs about cheat items pop-ups
items sent directly by the server (such as with starting inventory) now have pop-ups just like any other item
* add Steam Input issue to faq
* Saving Princess: BRAINOS requires all weapons
* Saving Princess: Download dll and patch together
Previously, gm-apclientpp.dll was downloaded from its own repo
With this update, the dll is instead extracted from the same zip as the game's patch
* Saving Princess: Add URI launch support
* Saving Princess: goal also requires all weapons
given it's past brainos
* Saving Princess: update docs
automatic connection support was added, docs now reflect this
* Saving Princess: extend([item]) -> append(item)
* Saving Princess: automatic connection validation
also parses the slot, password and host:port into parameters for the game
* Saving Princess: change subprocess .run to .Popen
This keeps the game from freezing the launcher while it is running
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Fully updates requirements.py to live LADXR (#19)
* Updates dungeon2.py to LADXR-Live (#20)
No logic changes or bugfix are in this file. It is only code cleanup.
* Update dungeon1.py (#21)
- The Three of a Kind with Bomb is moved from Normal to Hard Logic
The rest is code cleanup.
lines 22-25 | 22-26 & 33 | 34 remain different in AP | Upstream with no effective difference
* Fully updates dungeon3.py to LADXR-live (#22)
Logic Changes:
- Hard mode now considers killing the enemies in the top room with pot
Everything else is cleanup.
* Fully update dungeon4.py to LADXR-live logic (#23)
Logic Changes:
- Hard Logic: Removes Feather requirement from grabbing the Pit Key
- Hell logic: new hookshot clip (line 64)
- Hell logic: hookshot spam over the first pit of crossroads, then buffer down (line 69)
- Hell logic: push block left of keyblock up, then shaq jump off the left wall and pause buffer to land on keyblock.
- Hell logic: split zol for more entities, and clip through the block left of keyblock by hookshot spam
The rest is code cleanup
* Updates dungeon5.py mostly to LADXR-Live Logic (#24)
Logic Changes:
- Hell logic: use zoomerang dashing left to get an unclipped boots superjump off the right wall over the block. reverse is push block (line 69)
The rest is cleanup.
The upstream splits the post_gohma region into pre_gohma, gohma and post_gohma. I did not implement this yet as I do not know the implications. To port this the following lines need to be changed (AP | LADXR):
18 | 18-20;
55 | 58;
65 | 68-69
* Fully update dungeon6.py logic (#25)
Logic Changes:
- Hard logic: allow damage boosting past the mini thwomps
- Glitched logic: bomb triggering elephants in two cases
Everything else is cleanup
* Fully update dungeon7.py to LADXR-live logic (#26)
Logic Changes:
- Hard logic: Three of a Kind is now possible with bombs only
Everything else is code cleanup
* Fully updates dungeon8.py to LADXR-live (#27)
Logic change:
- Hard logic: allows to drop the Gibdos into holes as a way to kill them
- Glitched logic: underground section with fire balls jumping up out of lava. Use boots superjump off left wall to jump over the pot blocking the way
The rest is code cleanup
* Fully update dungeonColor.py to LADXR-live (#28)
Logic changes:
- Normal logic: Karakoros now need power bracelet to put them into their holes
- Hard logic: Karakoros without power bracelet but with weapon
- Hell logic: Karakoros with only bombs
Everything else is code cleanup
* Updating overworld.py (#29)
* Updating overworld.py
This tries to update all logic of the Overworld.
Logic changes include:
- Normal logic: requires hookshot or shield to traverse Armos Cave
- Hard logic: Traverse Armos Cave with nothing (formerly normal logic)
- Hard logic: get the animal village bomb cave check with jump and boomerang
- Hard logic: use rooster to go to D7
- Lots of Jesus Rooster Jumps
I stopped counting and need to go over this again.
Also, please investigate line 474 AP because it's removed in LADXR-Upstream and I don't know why.
* remove featherless fisher under bridge from hard
it was moved to hell upstream and its already present in our code
---------
Co-authored-by: Alex Nordstrom <a.l.nordstrom@gmail.com>
* fixes
* add test messages
* Adds Pegasus Boots to the test (#31)
* Fix d6 boss_key logic (#30)
* restore hardmode logic
* higher logic fixes
* add bush requirement to the raft
in case the player needs to farm rupees to play again
---------
Co-authored-by: palex00 <32203971+palex00@users.noreply.github.com>
* add groups and a preset
* formatting
* typing
* alias groups for progressive items
* add bush breakers item group
* fix typo
* some manual location groups
* drop dummy dungeon items from groups
* text shuffle exclusions
Exclude owl statues, library books, goal sign, signpost maze, and various rupee prices from text shuffle
* clearer variable name
* KH2: Add missing indirect conditions for Final region access
Entrances to the Final region require being able to reach any one of a
number of locations, but for a location to be reachable, its parent
region must also be reachable, so indirect conditions must be added for
these regions.
* Use World.get_location
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Use World.get_location, for real this time
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* LADX: Magnifying Glass fixes
Removed the duplicate item (Magnifying Lens), and made the real one a filler item.
* Update worlds/ladx/Items.py
Co-authored-by: threeandthreee <alex@3and3.dev>
---------
Co-authored-by: threeandthreee <alex@3and3.dev>
* Core: warn if a yaml is empty
* WebHost: ignore empty yaml
Generate: log which yaml documents are empty
* Actually remove empty yamls from weight_cache
* More verbose variable name
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Improved sm64ex advanced setup docs
This edit clarifies some things that are not obvious in the version that is currently live on the site.
This should prevent others from needing to go spelunking in Discord chat history to figure out how to do advanced builds.
* Update worlds/sm64ex/docs/setup_en.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* copyediting
---------
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* create a first draft of the feature
* use feature in items and locations
* add content to more places
* use feature in logic
* replace option check by feature
* remove unused code
* remove weird white space
* some import nitpicking
* flip negative if
* Docs: update min required version
and add comment about security.
* Core: rework python version check
* CI: set min micro update for build and release
* Add kivy overrides to allow AsyncImage source paths of the format ap:worlds.module/subpath/to/data.png that use pkgutil to load files from within an apworld
* Apply suggestions from code review
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* change original-load variable name for clarity per review
* add comment to record pkgutil format
* remove dependency on PIL
* i hate typing
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* first working (most of the time) progression generation for SM using VariaRandomizer's rules, items, locations and accessPoint (as regions)
* first working single-world randomized SM rom patches
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* Fixed multiworld support patch not working with VariaRandomizer's
Added stage_fill_hook to set morph first in progitempool
Added back VariaRandomizer's standard patches
* + added missing files from variaRandomizer project
* + added missing variaRandomizer files (custom sprites)
+ started integrating VariaRandomizer options (WIP)
* Some fixes for player and server name display
- fixed player name of 16 characters reading too far in SM client
- fixed 12 bytes SM player name limit (now 16)
- fixed server name not being displayed in SM when using server cheat ( now displays RECEIVED FROM ARCHIPELAGO)
- request: temporarly changed default seed names displayed in SM main menu to OWTCH
* Fixed Goal completion not triggering in smClient
* integrated VariaRandomizer's options into AP (WIP)
- startAP is working
- door rando is working
- skillset is working
* - fixed itemsounds.ips crash by always including nofanfare.ips into multiworld.ips (itemsounds is now always applied and "itemsounds" preset must always be "off")
* skillset are now instanced per player instead of being a singleton class
* RomPatches are now instanced per player instead of being a singleton class
* DoorManager is now instanced per player instead of being a singleton class
* - fixed the last bugs that prevented generation of >1 SM world
* fixed crash when no skillset preset is specified in randoPreset (default to "casual")
* maxDifficulty support and itemsounds removal
- added support for maxDifficulty
- removed itemsounds patch as its always applied from multiworld patch for now
* Fixed bad merge
* Post merge adaptation
* fixed player name length fix that got lost with the merge
* fixed generation with other game type than SM
* added default randoPreset json for SM in playerSettings.yaml
* fixed broken SM client following merge
* beautified json skillset presets
* Fixed ArchipelagoSmClient not building
* Fixed conflict between mutliworld patch and beam_doors_plms patch
- doorsColorsRando now working
* SM generation now outputs APBP
- Fixed paths for patches and presets when frozen
* added missing file and fixed multithreading issue
* temporarily set data_version = 0
* more work
- added support for AP starting items
- fixed client crash with gamemode being None
- patch.py "compatible_version" is now 3
* commited missing asm files
fixed start item reserve breaking game (was using bad write offset when patching)
* Nothing item are now handled game-side. the game will now skip displaying a message box for received Nothing item (but the client will still receive it).
fixed crash in SMClient when loosing connection to SNI
* fixed No Energy Item missing its ID
fixed Plando
* merge post fixes
* fixed start item Grapple, XRay and Reserve HUD, as well as graphic beams (except ice palette color)
* fixed freeze in blue brinstar caused by Varia's custom PLM not being filled with proper Multiworld PLM address (altLocsAddresses)
* fixed start item x-ray HUD display
* Fixed start items being sent by the server (is all handled in ROM)
Start items are now not removed from itempool anymore
Nothing Item is now local_items so no player will ever pickup Nothing. Doing so reduces contribution of this world to the Multiworld the more Nothing there is though.
Fixed crash (and possibly passing but broken) at generation where the static list of IPSPatches used by all SM worlds was being modified
* fixed settings that could be applied to any SM players
* fixed auth to server only using player name (now does as ALTTP to authenticate)
* - fixed End Credits broken text
* added non SM item name display
* added all supported SM options in playerSettings.yaml
* fixed locations needing a list of parent regions (now generate a region for each location with one-way exits to each (previously) parent region
did some cleaning (mainly reverts on unnecessary core classes
* minor setting fixes and tweaks
- merged Area and lightArea settings
- made missileQty, superQty and powerBombQty use value from 10 to 90 and divide value by float(10) when generating
- fixed inverted layoutPatch setting
* added option start_inventory_removes_from_pool
fixed option names formatting
fixed lint errors
small code and repo cleanup
* Hopefully fixed ROR2 that could not send any items
* - fixed missing required change to ROR2
* fixed 0 hp when respawning without having ever saved (start items were not updating the save checksum)
* fixed typo with doors_colors_rando
* fixed checksum
* added custom sprites for off-world items (progression or not)
the original AP sprite was made with PierRoulette's SM Item Sprite Utility by ijwu
* - added missing change following upstream merge
- changed patch filename extension from apbp to apm3 so patch can be used with the new client
* added morph placement options: early means local and sphere 1
* fixed failing unit tests
* - fixed broken custom_preset options
* - big cleanup to remove unnecessary or unsupported features
* - more cleanup
* - moved sm_randomizer_rom and all always applied patches into an external project that outputs basepatch.ips
- small cleanup
* - added comment to refer to project for generating basepatch.ips (https://github.com/lordlou/SMBasepatch)
* fixed g4_skip patch that can be not applied if hud is enabled
* - fixed off world sprite that can have broken graphics (restricted to use only first 2 palette)
* - updated basepatch to reflect g4_skip removal
- moved more asm files to SMBasepatch project
* - tourian grey doors at baby metroid are now always flashing (allowing to go back if needed)
* fixed wrong path if using built as exe
* - cleaned exposed maxDifficulty options
- removed always enabled Knows
* Merged LttPClient and SMClient into SNIClient
* added varia_custom Preset Option that fetch a preset (read from a new varia_custom_preset Option) from varia's web service
* small doc precision
* - added death_link support
- fixed broken Goal Completion
- post merge fix
* - removed now useless presets
* - fixed bad internal mapping with maxDiff
- increases maxDiff if only Bosses is preventing beating the game
* - added support for lowercase custom preset sections (knows, settings and controller)
- fixed controller settings not applying to ROM
* - fixed death loop when dying with Door rando, bomb or speed booster as starting items
- varia's backup save should now be usable (automatically enabled when doing door rando)
* -added docstring for generated yaml
* fixed bad merge
* fixed broken infinity max difficulty
* commented debug prints
* adjusted credits to mark progression speed and difficulty as Non Available
* added support for more than 255 players (will print Archipelago for higher player number)
* fixed missing cleanup
* added support for 65535 different player names in ROM
* fixed generations failing when only bosses are unreachable
* - replaced setting maxDiff to infinity with a bool only affecting boss logics if only bosses are left to finish
* fixed failling generations when using 'fun' settings
Accessibility checks are forced to 'items' if restricted locations are used by VARIA following usage of 'fun' settings
* fixed debug logger
* removed unsupported "suits_restriction" option
* fixed generations failing when only bosses are unreachable (using a less intrusive approach for AP)
* - fixed deathlink emptying reserves
- added death_link_survive option that lets player survive when receiving a deathlink if the have non-empty reserves
* - merged death_link and death_link_survive options
* fixed death_link
* added a fallback default starting location instead of failing generation if an invalid one was chosen
* added Nothing and NoEnergy as hint blacklist
added missing NoEnergy as local items and removed it from progression
* now doesnt require ROM for generation
* removed stage_assert_generate
* fixed conflict with main and small cleanup
* Core: Allow option groups to specify option order
* words hard
* Actually use the earlier built dictionary for faster in checking
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Rewrite start inventory from pool code
* I think this is nicer?
* lol
* I just made it even shorter and nicer
* comments :D
* I think this makes more logical sense
* final change I promise
* HOLD UP THIS IS SO SHORT NOW
* ???????? Vi pls
* ???????? Vi pls????????????????
* this was probably important idk
* Lmao this just did not work correctly at all
* Core: fix settings API for removal of Python 3.8, 3.9
This is fixing 2 problems:
- The `World` class has the annotation:
`settings: ClassVar[Optional["Group"]]`
so `MyWorld.settings` should not raise an exception like it does for some worlds.
With the `Optional` there, it looks like it should return `None` for the worlds that don't use it. So that's what I changed it to.
- `Group.update` had some code that required `typing.Union` instead of the Python 3.10 `|` for unions.
added unit test for this fix
added change in Zillion that I used to discover this problem and used it to test the test
* fix copy-pasted stuff
* tuple instead of set
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Split elevators come to you
* .
* unit test
* mypy stuff
* Fine. I'll fix the fcking commented out code. Happy?
* ruff
* """""Backwards compatibility"""""
* ruff
* make it look better
* #
* fix presets
* fix a unit test
* Make that explicit in the code
* Improve description
This means its diff will be collapsed by default on PRs that change it, because it is an "auto generated" file that does not need to be looked at by reviewers
* Pokemon Emerald: Rework location tags to categories
* Pokemon Emerald: Rework item tags, automatically create item/location groups
* Pokemon Emerald: Move item and location groups to data.py, add some regional location groups
* Map Regions
* Pokemon Emerald: Fix up location groups
* Pokemon Emerald: Move groups to their own file
* Pokemon Emerald: Add meta groups for location groups
* Pokemon Emerald: Fix has_group using updated item group name
* Pokemon Emerald: Add sanity check for maps in location groups
* Pokemon Emerald: Remove missed use of location.tags
* Pokemon Emerald: Reclassify white and black flutes
* Pokemon Emerald: Update changelog
* Pokemon Emerald: Adjust changelog
---------
Co-authored-by: Tsukino <16899482+Tsukino-uwu@users.noreply.github.com>
* Add timestamps to logging for improved debugging
* Add datetime to general logging; particularly useful for large seeds.
* Move console timestamps from Main to Utils.init_logging (better location)
* Update Main.py
remove spurious blank line
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
---------
Co-authored-by: Zach Parks <zach@alliware.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Actually take item from pool when plandoing from_pool
* Remove the awkward index thing
* oops left a comment in
* there wasn't a line break here before
* Only remove if actually found, check against player number
* oops
* Go back to index based system so we can just remove at the end
* Comment
* Fix error on None
* Update Fill.py
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 Start Inventory From Pool
Just as the title implies
* Update Options.py
Fix dataclass since I had just pulled changes from prior options.py without seeing if anythin had changed
* Update Options.py
One more time with feeling
* Update worlds/smz3/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Introduce 'Hint Priority' concept
* fix error when sorting hints while not connected
* fix 'found' -> 'status' kivy stuff
* remove extraneous warning
this warning fired if you clicked to select or toggle priority of any hint, as you weren't clicking on the header...
* skip scanning individual header widgets when not clicking on the header
* update hints on disconnection
* minor cleanup
* minor fixes/cleanup
* fix: hints not updating properly for receiving player
* update re: review
* 'type() is' -> 'isinstance()'
* cleanup, re: Jouramie's review
* Change 'priority' to 'status', add 'Unspecified' and 'Avoid' statuses, update colors
* cleanup
* move dicts out of functions
* fix: new hints being returned when hint already exists
* fix: show `Found` properly when hinting already-found hints
* import `Hint` and `HintStatus` directly from `NetUtils`
* Default any hinted `Trap` item to be classified as `Avoid` by default
* add some sanity checks
* re: Vi's feedback
* move dict out of function
* Update kvui.py
* remove unneeded dismiss message
* allow lclick to drop hint status dropdown
* underline hint statuses to indicate clickability
* only underline clickable statuses
* Update kvui.py
* Update kvui.py
---------
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* sm64ex: add option groups
* sm64ex: rename sanity options group to item options
* sm64ex: rename sanity options group to logic options
* sm64ex: seperate star costs from goal options and add entrance rando to logic options
* sm64ex: seperate ability options from logic options group
* Core: Fix playthrough only checking half of the sphere 0 items
The lists of precollected items were being mutated while iterating those
same lists, causing playthrough to skip checking half of the sphere 0
advancement items.
This patch ensures the lists are copied before they are iterated.
* Replace chain.from_iterable with two for loops for better clarity
Added a comment to `multiworld.push_precollected(item)` to explain that
it is also modifying `precollected_items`.
* Fix it so item linked locations are correct in slot data
* List -> Set
* Cache the locations instead
* Just loop the multiworld once
* Move it all to fill slot data and pretend we're doing a stage
* Move groups up so it doesn't loop over the multiworld locations if no item links are present
* Update worlds/tunic/__init__.py
Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com>
---------
Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com>
Reconnecting an act in a telescope to a time rift removes the entrances
to the time rift from its access regions because it will be accessible
from the telescope instead.
By doing so early on, as a starting act with insanity act randomizer or
as a plando-ed act, this can happen before the time rift itself has been
reconnected to an act or other time rift. In which case, when later
attempting to connect that time rift to an act or other time rift, the
entrances from the rift access regions will no longer exist, so must be
re-created. The original code was mistakenly re-creating the entrances
from the time rift being reconnected, instead of from the rift access
regions.
* Removes explicit indirect conditions
* Changes special rules function add rule instead of setting, and call it unconditionally
* Fixes issues in rule generation that have been around but unused the whole time
* Finally moves rules out into a separate file. Fixes level-related logic
* Removes redundant max skill level checks on canoes, since they're in the skill training rules now
* For some reason, canoe logic assumed you could always walk from lumbridge to south varrock without farms. This has been fixed
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Quests now respect skill limits and can be excluded. Tasks that take multiple skills how actually check all skills
* Adds alternative route for cooking that doesn't require fishing
* Remove debug code
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Aquaria: Remove BaseException handling from create_item
Catching `BaseException` without re-raising the exception should almost
never be done because `BaseException` includes exit exceptions, such as
`SystemExit` and `KeyboardInterrupt`.
Ideally, the caught exception types should be as narrow as possible to
not mask bugs from catching unexpected exceptions. Having narrow
exception types can also help indicate to other developers what
exceptions are expected to be raisable by the code within the `try`
clause.
Similarly, the `try` clause should ideally contain the minimum code
necessary, to avoid masking bugs in the case that code within the `try`
clause that is not expected to raise an exception does so.
In this case, the only expected exception that can occur appears to be
`item_table[name]` that can raise a `KeyError` when `create_item()` is
passed an unexpected `name` argument. So this patch moves the other code
out of the `try` clause and changes the caught exception types to only
`KeyError`.
* Remove try-except
The KeyError that would be raised will be propagated as-is rather than
raising a new exception in its place.
* Remove extra newline
The original code did not have this newline, so it has been removed.
* change to persist all hints to ctx.hints regardless of found status
* remove if not found entirely as it seems like it was added to not double charge hint points
9842399d8b
* Add missing connection to the furnace entry by west garden
* Add missing connection to the furnace entry by west garden
* Add missing hard ls for ruined passage door
* Allow shield for LS
* Split PR into two
* Split PR into two
* Split PR into two
* Add dark tomb ice grapple through the wall
* move special cases to be outside strict
* Update text.py
* fix wily machine edge case, incorrect weapons, and time stopper failsafe
* bump world version
* weakness checking is inclusive
* Update __init__.py
* add air shooter to edge case validation
* TLOZ: Assorded Logic Fixes
- Add needing arrows for Pols Voice rule. Not super necessary at the moment since wooden arrows are always accessible in one of the opening shops, but future proofing for future plans
- Create Gohma Locations and make sure all Gohma blocked locations have the required rule (was missing at least one location before)
- Remove the rule requiring Bow for all locations of level 8 (not sure why that was there, it's theoretically redundant now that Gohma and Pols Voice are properly marked)
- Make sure Digdogger locations properly require Recorder, and clean up redundant Level 7 rules as level 7 currently requires Recorder to access the entrance
* Update worlds/tloz/Rules.py
forgor that has_any exists
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Remove world = multiworld
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* improve energy link performance on large surfaces
* Add Energy link bridge storage table to initialization.
* Fix event based energy link for Factorio 2.0
* Adjust energy link bridge for quality.
If a world uses a `Location` or `Entrance` subclass that overrides the
`item_rule`/`access_rule` class attribute, then
`spot.__class__.item_rule`/`spot.__class__.access_rule` will get the
overridden rule, which may not be an empty rule.
Uses of `spot.__class__` have been replaced with getting the class
attribute rule belonging to the `Location` or `Entrance` class.
* Also makes adjustments to the style for these slots by italicizing its names (including multi-tracker).
* Player-specific trackers do not link to ItemLink player trackers (they do not exist).
* Fixes a bug on Factorio multi-tracker when item links exist.
* WebHost: use new safe yaml template filename
this mirrors the change in ArchipelagoMW/#4106 in WebHost
* WebHost: install docs into safe filename and require docs to be named safe
* Test: update doc test for safe name
* WebHost: fix import order to not break ModuleUpdate
* add quotes around strings containing {{ game }}
* do the actually correct thing instead of a hack
thanks berserker66 for pointing out to me that I was doing this the
completly wrong way, so I fixed it up
* Clean up filenames to prevent illegal chars
* Use %s substitution instead of concatenation
* whoops
somehow i removed a space from the comment for the regex, so this adds
it back
* Use pre-existing function in Utils.py
* Test: add test for option yaml with colon
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
This will make it easier for players to understand when they have a
mismatch between their DS3 apworld and their local randomizer version,
mitigating a common source of confusion and support requests.
* Core: Detect and account for apworlds being downloaded with a (1) in their name
* Reword comment
* Always use internal module name
* Requested changes from black-silver
* Landstalker: remove global ref to multiworld
`cached_spheres` holds a reference to the multiworld, which leaks the multiworld if multidata is skipped. Instead of making it a class variable, give a reference to each matching world.
* Switch to using `get_game_worlds`
- removed tutorialization (Craft/Do X to unlock tech)
- start with everything needed for power, electric mining drills, science lab and automation science already unlocked
- updated world gen
- updated mod api use
- updated fluid boxes (CaitSith2)
- new option: free sample quality (needs quality mod)
- removed old gruft, faster gen speed, faster load time
- lists space age as explicitly not supported, so it prevents the game from trying to load both
- fixes Y offset of traps being wrong (way higher than intended)
- client now has a 5 second timeout to communicate with the bound factorio server, so it aborts actions if the server died
- savegames are now stored in write_data_directory -> saves -> Archipelago
- add cargo-landing-pad handling
- starting rocket silo and cargo landing pad respect free sample quality
- supports Factorio 2.0
---------
Co-authored-by: CaitSith2 <d_good@caitsith2.com>
* Core: downgrade websockets to 13.x
14.x currently doesn't work for MultiServer.
14.x is not supported with py3.8, so updating to 14.x should be scheduled for AP 0.6.0.
* CI: 5min timeout for hosting test
* MultiServer: properly shutdown even if ctx is invalid
* CI: increase hosting test timeout to 10min
this is 4x expected time, just to be safe.
* TUNIC: Add Shop indirect condition
The `Overworld -> Cube Cave Entrance Region` Entrance checks
`can_shop()` which checks for being able to reach the "Shop" Region, so
the Entrance requires an indirect condition of reaching the "Shop"
Region.
* Rename entrance variable to cube_entrance
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
stage_post_fill iterates sets of locations, so the iteration order is
non-deterministic, resulting in different items being converted from
Progression to Useful when generating with the same seed.
This patch makes stage_post_fill deterministic by sorting the duplicate
pokemon locations in each sphere before choosing which of the duplicates
should remain as progression.
Some worlds might want to check for "Item is junk", i.e. an excludable item.
Because this is both `filler` and `trap`, and because `filler` is `0`, there are many "wrong ways" to do this. So I think we should provide a helper function for it.
ALttP makes common use of entrances with access rules that require
another entrance to be accessible. This results in requiring an indirect
condition to be registered for the other entrance's `.parent_region`,
but this indirect condition is often missing.
There are so many missing indirect conditions, and due to the complexity
of some of the chained rules, it is simply not realistic to add all the
missing indirect conditions.
This patch changes ALttP to use automatic indirect conditions instead of
explicit indirect conditions and removes the places that were
registering indirect conditions.
Without this patch, the missing indirect conditions almost never have an
effect on generating with default options, but enabling certain options,
such as `glitches_required` or `entrance_shuffle` can result in
frequently checking entrances that are missing indirect conditions.
Examples of complex chained rules:
`get_rule_to_add()` in `Rules.set_bunny_rules()` can create
rules on entrances that require access to any of a number of different
other entrances, which should require the parent regions of all of those
other entrances to be registered as indirect conditions.
There are entrance access rules that check
`StateHelpers.can_kill_most_things()` (e.g. `Turtle Rock Second Section
Bomb Wall`), which can check `can_extend_magic()`, which checks for
being able to buy unlimited `Blue Potion`, which checks for being able
to reach a shop that sells unlimited `Blue Potion`. This is usually
`Potion Shop`, but there is a yaml option that shuffles shop
inventories, so the shop that sells unlimited `Blue Potion` can be
randomized, meaning that the region that should be registered as an
indirect condition can also be randomized.
Example of many missing indirect conditions:
With `small_key_shuffle: universal`, every single
`ALttPLogic._lttp_has_key()` checks for being able to reach shops that
sell an unlimited number of universal Small Keys. Meaning that every
entrance access rule that uses `_lttp_has_key()` should register all
shop regions that sell unlimited universal small keys as indirect
conditions.
* Rogue Legacy: Remove item/location id overlap rejection code.
RL has been updated to support id overlaps.
* Update __init__.py
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Core: The Item Links fix to end them all
This puts the bandaid that was holding Item Links together for years back on.
It's a bad solution
But it's what we had previously, and the change away from this is what broke them
So in the interest of 0.5.1 releasing this century, maybe we should just go with this.
* Update AutoWorld.py
* somehow this mixup got into the final grubhunt PR
* catch a case I didn't test before
* Update worlds/hk/__init__.py
Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com>
* first pass at adding grub count tests
* add tests to explicitly show counting/not counting of player2s grubs
* forgot a test rename
---------
Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com>
* Tests: Add a test that weights file generates different results per player correctly
* Update test/programs/test_generate.py
* Generate.main() return and accessibility options were changed
* Added rematch information to game page
* Better wording
* Actually correct the language
* Update worlds/pokemon_emerald/docs/en_Pokemon Emerald.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Linked to rom_changes_en.md rather than adding to the game page
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
All entrances to Cooks_Guild and Crafting_Guild and all entrances using
special logic for canoes were missing indirect conditions for the
regions that the cooking, crafting and woodcutting skill rules require
access to.
* Add the yacht dice (from other git) world to the yacht dice fork
* Update .gitignore
* Removed zillion because it doesn't work
* Update .gitignore
* added zillion again...
* Now you can have 0 extra fragments
* Added alt categories, also options
* Added item categories
* Extra categories are now working! 🐶
* changed options and added exceptions
* Testing if I change the generate.py
* Revert "Testing if I change the generate.py"
This reverts commit 7c2b3df617.
* ignore gitignore
* Delete .gitignore
* Update .gitignore
* Update .gitignore
* Update logic, added multiplicative categories
* Changed difficulties
* Update offline mode so that it works again
* Adjusted difficulty
* New version of the apworld, with 1000 as final score, always
Will still need to check difficulty and weights of adding items.
Website is not ready yet, so this version is not usable yet :)
* Changed yaml and small bug fixes
Fix when goal and max are same
Options: changed chance to weight
* no changes, just whitespaces
* changed how logic works
Now you put an array of mults and the cpu gets a couple of tries
* Changed logic, tweaked a bit too
* Preparation for 2.0
* logic tweak
* Logic for alt categories properly now
* Update setup_en.md
* Update en_YachtDice.md
* Improve performance of add_distributions
* Formatting style
* restore gitignore to APMW
* Tweaked generation parameters and methods
* Version 2.0.3
manual input option
max score in logic always 2.0.3
faster gen
* Comments and editing
* Renamed setup guide
* Improved create_items code
* init of locations: remove self.event line
* Moved setting early items to generate_early
* Add my name to CODEOWNERS
* Added Yacht Dice to the readme in list of games
* Improve performance of Yacht Dice
* newline
* Improve typing
* This is actually just slower lol
* Update worlds/yachtdice/Items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update Options.py
* Styling
* finished text whichstory option
* removed roll and rollfragments; not used
* import; worlds not world :)
* Option groups!
* ruff styling, fix
* ruff format styling!
* styling and capitalization of options
* small comment
* Cleaned up the "state_is_a_list" a little bit
* RUFF 🐶
* Changed filling the itempool for efficiency
Now, we start with 17 extra items in the item pool, it's quite likely you need at least 17 items (~80%?).
And then afterwards, we delete items if we overshoot the target of 1000, and add items if we haven't reached an achievable score of 1000 yet. Also, no need to recompute the entire logic when adding points.
* 🐶
* Removed plando "fix"
* Changed indent of score multiplier
* faster location function
* Comments to docstrings
* fixed making location closest to goal_score be goal_score
* options format
* iterate keys and values of a dict together
* small optimization ListState
* faster collection of categories
* return arguments instead of making a list (will 🐶 later)
* Instead of turning it into a tuple, you can just make a tuple literal
* remove .keys()
* change .random and used enumerate
* some readability improvements
* Remove location "0", we don't use that one
* Remove lookup_id_to_name entirely
I for sure don't use it, and as far as I know it's not one of the mandatory functions for AP, these are item_name_to_id and location_name_to_id.
* .append instead of += for single items, percentile function changed
Also an extra comment for location ids.
* remove ) too many
* Removed sorted from category list
* Hash categories (which makes it slower :( )
Maybe I messed up or misunderstood...
I'll revert this right away since it is 2x slower, probably because of sorted instead of sort?
* Revert "Hash categories (which makes it slower :( )"
This reverts commit 34f2c1aed8.
* temporary push: 40% faster generation test
Small changes in logic make the generation 40% faster.
I'll have to think about how big the changes are. I suspect they are rather limited.
If this is the way to go, I'll remove the temp file and redo the YachtWeights file, I'll remove the functions there and just put the new weights here.
* Add Points item category
* Reverse changes of bad idea :)
* ruff 🐶
* Use numpy and pmf function to speed up gen
Numpy has a built-in way to sum probability mass functions (pmf).
This shaves of 60% of the generation time :D
* Revert "Use numpy and pmf function to speed up gen"
This reverts commit 9290191cb3.
* Step inbetween to change the weights
* Changed the weights to make it faster
135 -> 81 seconds on 100 random yamls
* Adjusted max_dist, split dice_simulation function
* Removed nonlocal and pass arguments instead
* Change "weight-lists" to Dict[str, float]
* Removed the return from ini_locations.
Also added explanations to cat_weights
* Choice options; dont'use .value (will ruff later)
* Only put important options in slotdata
* 🐶
* Add Dict import
* Split the cache per player, limit size to 400.
* 🐶
* added , because of style
* Update apworld version to 2.0.6
2.0.5 is the apworld I released on github to be tested
I never separately released 2.0.4.
* Multiple smaller code improvements
- changed names in YachtWeights so we don't need to translate them in Rules anymore
- we now remember which categories are present in the game, and also put this in slotdata. This we do because only one of two categories is present in a game. If for some reason both are present (plando/getitem/startinventory), we now know which category to ignore
-
* 🐶 ruff
* Mostly minimize_extra_items improvements
- Change logic, generation is now even faster (0.6s per default yaml).
- Made the option 'minimize_extra_items' do a lot more, hopefully this makes the impact of Yacht Dice a little bit less, if you want that. Here's what is also does now:
- you start with 2 dice and 2 rolls
- there will be less locations/items at the start of you game
* ruff 🐶
* Removed printing options
* Reworded some option descriptions
* Yacht Dice: setup: change release-link to latest
On the installation page, link to the latest release, instead of the page with all releases
* Several fixes and changes
-change apworld version
-Removed the extra roll (this was not intended)
-change extra_points_added to a mutable list to that it actually does something
-removed variables multipliers_added and items_added
-Rules, don't order by quantity, just by mean_score
-Changed the weights in general to make it faster
* 🐶
* Revert setup to what it was (latest, without S)
* remove temp weights file, shouldn't be here
* Made sure that there is not too many step score multipliers.
Too many step score multipliers lead to gen fails too, probably because you need many categories for them to actually help a lot. So it's hard to use them at the start of the game.
* add filler item name
* Textual fixes and changes
* Remove Victory item and use event instead.
* Revert "Remove Victory item and use event instead."
This reverts commit c2f7d674d3.
* Changed order of options
Also changed 'both options' to 'the website'
* Rephrase the offline-play part
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Previously, because `default(..., true)` only checks if the
left-hand-side is falsey, not just `None`, this always forced options
to render in non-rich mode if they were explicitly set to
`rich_text_doc = None`. Now it matches the intended and documented
behavior, where `None` falls back to the world's
`rich_text_options_doc` setting.
* WebHost: restore fragment links for glossary and faq
such as /faq/en/#what-does-multi-game-mean
* WebHost: faq, glossary: make markdown titles clickable
* Add the yacht dice (from other git) world to the yacht dice fork
* Update .gitignore
* Removed zillion because it doesn't work
* Update .gitignore
* added zillion again...
* Now you can have 0 extra fragments
* Added alt categories, also options
* Added item categories
* Extra categories are now working! 🐶
* changed options and added exceptions
* Testing if I change the generate.py
* Revert "Testing if I change the generate.py"
This reverts commit 7c2b3df617.
* ignore gitignore
* Delete .gitignore
* Update .gitignore
* Update .gitignore
* Update logic, added multiplicative categories
* Changed difficulties
* Update offline mode so that it works again
* Adjusted difficulty
* New version of the apworld, with 1000 as final score, always
Will still need to check difficulty and weights of adding items.
Website is not ready yet, so this version is not usable yet :)
* Changed yaml and small bug fixes
Fix when goal and max are same
Options: changed chance to weight
* no changes, just whitespaces
* changed how logic works
Now you put an array of mults and the cpu gets a couple of tries
* Changed logic, tweaked a bit too
* Preparation for 2.0
* logic tweak
* Logic for alt categories properly now
* Update setup_en.md
* Update en_YachtDice.md
* Improve performance of add_distributions
* Formatting style
* restore gitignore to APMW
* Tweaked generation parameters and methods
* Version 2.0.3
manual input option
max score in logic always 2.0.3
faster gen
* Comments and editing
* Renamed setup guide
* Improved create_items code
* init of locations: remove self.event line
* Moved setting early items to generate_early
* Add my name to CODEOWNERS
* Added Yacht Dice to the readme in list of games
* Improve performance of Yacht Dice
* newline
* Improve typing
* This is actually just slower lol
* Update worlds/yachtdice/Items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update Options.py
* Styling
* finished text whichstory option
* removed roll and rollfragments; not used
* import; worlds not world :)
* Option groups!
* ruff styling, fix
* ruff format styling!
* styling and capitalization of options
* small comment
* Cleaned up the "state_is_a_list" a little bit
* RUFF 🐶
* Changed filling the itempool for efficiency
Now, we start with 17 extra items in the item pool, it's quite likely you need at least 17 items (~80%?).
And then afterwards, we delete items if we overshoot the target of 1000, and add items if we haven't reached an achievable score of 1000 yet. Also, no need to recompute the entire logic when adding points.
* 🐶
* Removed plando "fix"
* Changed indent of score multiplier
* faster location function
* Comments to docstrings
* fixed making location closest to goal_score be goal_score
* options format
* iterate keys and values of a dict together
* small optimization ListState
* faster collection of categories
* return arguments instead of making a list (will 🐶 later)
* Instead of turning it into a tuple, you can just make a tuple literal
* remove .keys()
* change .random and used enumerate
* some readability improvements
* Remove location "0", we don't use that one
* Remove lookup_id_to_name entirely
I for sure don't use it, and as far as I know it's not one of the mandatory functions for AP, these are item_name_to_id and location_name_to_id.
* .append instead of += for single items, percentile function changed
Also an extra comment for location ids.
* remove ) too many
* Removed sorted from category list
* Hash categories (which makes it slower :( )
Maybe I messed up or misunderstood...
I'll revert this right away since it is 2x slower, probably because of sorted instead of sort?
* Revert "Hash categories (which makes it slower :( )"
This reverts commit 34f2c1aed8.
* temporary push: 40% faster generation test
Small changes in logic make the generation 40% faster.
I'll have to think about how big the changes are. I suspect they are rather limited.
If this is the way to go, I'll remove the temp file and redo the YachtWeights file, I'll remove the functions there and just put the new weights here.
* Add Points item category
* Reverse changes of bad idea :)
* ruff 🐶
* Use numpy and pmf function to speed up gen
Numpy has a built-in way to sum probability mass functions (pmf).
This shaves of 60% of the generation time :D
* Revert "Use numpy and pmf function to speed up gen"
This reverts commit 9290191cb3.
* Step inbetween to change the weights
* Changed the weights to make it faster
135 -> 81 seconds on 100 random yamls
* Adjusted max_dist, split dice_simulation function
* Removed nonlocal and pass arguments instead
* Change "weight-lists" to Dict[str, float]
* Removed the return from ini_locations.
Also added explanations to cat_weights
* Choice options; dont'use .value (will ruff later)
* Only put important options in slotdata
* 🐶
* Add Dict import
* Split the cache per player, limit size to 400.
* 🐶
* added , because of style
* Update apworld version to 2.0.6
2.0.5 is the apworld I released on github to be tested
I never separately released 2.0.4.
* Multiple smaller code improvements
- changed names in YachtWeights so we don't need to translate them in Rules anymore
- we now remember which categories are present in the game, and also put this in slotdata. This we do because only one of two categories is present in a game. If for some reason both are present (plando/getitem/startinventory), we now know which category to ignore
-
* 🐶 ruff
* Mostly minimize_extra_items improvements
- Change logic, generation is now even faster (0.6s per default yaml).
- Made the option 'minimize_extra_items' do a lot more, hopefully this makes the impact of Yacht Dice a little bit less, if you want that. Here's what is also does now:
- you start with 2 dice and 2 rolls
- there will be less locations/items at the start of you game
* ruff 🐶
* Removed printing options
* Reworded some option descriptions
* Yacht Dice: setup: change release-link to latest
On the installation page, link to the latest release, instead of the page with all releases
* Several fixes and changes
-change apworld version
-Removed the extra roll (this was not intended)
-change extra_points_added to a mutable list to that it actually does something
-removed variables multipliers_added and items_added
-Rules, don't order by quantity, just by mean_score
-Changed the weights in general to make it faster
* 🐶
* Revert setup to what it was (latest, without S)
* remove temp weights file, shouldn't be here
* Made sure that there is not too many step score multipliers.
Too many step score multipliers lead to gen fails too, probably because you need many categories for them to actually help a lot. So it's hard to use them at the start of the game.
* add filler item name
* Textual fixes and changes
* Remove Victory item and use event instead.
* Revert "Remove Victory item and use event instead."
This reverts commit c2f7d674d3.
* Revert "Textual fixes and changes"
This reverts commit e9432f9245.
* Remove Victory item and make it an event instead
* Yacht Dice logic fix, no decreasing score when obtain item
take 2
* Logic fix: Revert max_tries and mults, change ordering
* Remove spaces :^)
* Updated weights that are stochastically ordered by dice/roll
In the trimming of the weights, sometimes it having 4 rolls would be better than having 5 rolls.
I did a check that this does not happen for any dice increment or roll increment
* Swap for-loops to increase performance
This method is faster if the first for-loop contains fewer items.
Since the function is called with, typically, `dist2` having less items, let's loop over `dist2` first. This makes the entire program 10% faster.
* Remove options with 0 chance from list
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* WebHost: reduce precision and optimize header-logo.svg
technically those files will not produce an identical output when rendered
however the difference is virtually impossible to see even when rendered to w=4096
* WebHost: keep original svg
The "filling multiworld" subtest was at the wrong indentation, so was
only running for the last world_type.
"games" has additionally been added to the subtest to help better
identify failures.
Now that the subtest is actually being run for each world type, this
adds about 20 seconds to the duration of the test on my machine.
* Pokemon Emerald: Another guarded write on wonder trades
* Pokemon Emerald: Reorder sending wonder trade and erasing data
In case the guarded write fails
* DS3: Point the DS3 client link to my GitHub
It's not clear if/when my PR will land for the upstream fork, or if we'll just start using my fork as the primary source of truth. For now, it's the only one with 3.0.0-compatible releases.
* DS3: Document Proton support
* DS3: Document another way to get a YAML template
* DS3: Don't say that the mod will force offline mode
ModEngine2 is *supposed to* do this, but in practice it does not
* Code review
* Update Linux instructions per user experiences
* Remove outdated information from SM64 setup guide
Recent build changes have made it so that old saves no longer remove logical gates or prevent Toads from granting stars, remove info highlighting these issues.
* Better line break location
* Core: Move connection.parent_region assert to can_reach
This is how it already works for locations and it feels more correct to me to check in the place where the crash would happen.
Also update location error to be a bit more verbose
* Bring back the other assert
* Update BaseClasses.py
* duh
* Fuck it
* Major fixes
* a
* b
* Even more fixes
* New option - NoFreeRoamFinale
* a
* Hat Logic Fix
* Just to be safe
* multiworld.random to world.random
* KeyError fix
* Update .gitignore
* Update __init__.py
* Zoinks Scoob
* ffs
* Ruh Roh Raggy, more r-r-r-random bugs!
* 0.9b - cleanup + expanded logic difficulty
* Update Rules.py
* Update Regions.py
* AttributeError fix
* 0.10b - New Options
* 1.0 Preparations
* Docs
* Docs 2
* Fixes
* Update __init__.py
* Fixes
* variable capture my beloathed
* Fixes
* a
* 10 Seconds logic fix
* 1.1
* 1.2
* a
* New client
* More client changes
* 1.3
* Final touch-ups for 1.3
* 1.3.1
* 1.3.3
* Zero Jumps gen error fix
* more fixes
* Formatting improvements
* typo
* Update __init__.py
* Revert "Update __init__.py"
This reverts commit e178a7c0a6.
* init
* Update to new options API
* Missed some
* Snatcher Coins fix
* Missed some more
* some slight touch ups
* rewind
* a
* fix things
* Revert "Merge branch 'main' of https://github.com/CookieCat45/Archipelago-ahit"
This reverts commit a2360fe197, reversing
changes made to b8948bc495.
* Update .gitignore
* 1.3.6
* Final touch-ups
* Fix client and leftover old options api
* Delete setup-ahitclient.py
* Update .gitignore
* old python version fix
* proper warnings for invalid act plandos
* Update worlds/ahit/docs/en_A Hat in Time.md
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
* Update worlds/ahit/docs/setup_en.md
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
* 120 char per line
* "settings" to "options"
* Update DeathWishRules.py
* Update worlds/ahit/docs/en_A Hat in Time.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* No more loading the data package
* cleanup + act plando fixes
* almost forgot
* Update Rules.py
* a
* Update worlds/ahit/Options.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* Options stuff
* oop
* no unnecessary type hints
* warn about depot download length in setup guide
* Update worlds/ahit/Options.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* typo
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* Update worlds/ahit/Rules.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* review stuff
* More stuff from review
* comment
* 1.5 Update
* link fix?
* link fix 2
* Update setup_en.md
* Update setup_en.md
* Update setup_en.md
* Evil
* Good fucking lord
* Review stuff again + Logic fixes
* More review stuff
* Even more review stuff - we're almost done
* DW review stuff
* Finish up review stuff
* remove leftover stuff
* a
* assert item
* add A Hat in Time to readme/codeowners files
* Fix range options not being corrected properly
* 120 chars per line in docs
* Update worlds/ahit/Regions.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Update worlds/ahit/DeathWishLocations.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Remove some unnecessary option.class.value
* Remove data_version and more option.class.value
* Update worlds/ahit/Items.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Remove the rest of option.class.value
* Update worlds/ahit/DeathWishLocations.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* review stuff
* Replace connect_regions with Region.connect
* review stuff
* Remove unnecessary Optional from LocData
* Remove HatType.NONE
* Update worlds/ahit/test/TestActs.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* fix so default tests actually don't run
* Improve performance for death wish rules
* rename test file
* change test imports
* 1000 is probably unnecessary
* a
* change state.count to state.has
* stuff
* starting inventory hats fix
* shouldn't have done this lol
* make ship shape task goal equal to number of tasksanity checks if set to 0
* a
* change act shuffle starting acts + logic updates
* dumb
* option groups + lambda capture cringe + typo
* a
* b
* missing option in groups
* c
* Fix Your Contract Has Expired being placed on first level when it shouldn't
* yche fix
* formatting
* major logic bug fix for death wish
* Update Regions.py
* Add missing indirect connections
* Fix generation error from chapter 2 start with act shuffle off
* a
* Revert "a"
This reverts commit df58bbcd99.
* Revert "Fix generation error from chapter 2 start with act shuffle off"
This reverts commit 0f4d441824.
* Fix option typo
* I lied, it's actually two lines
---------
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* duh
* Fuck it
* Major fixes
* a
* b
* Even more fixes
* New option - NoFreeRoamFinale
* a
* Hat Logic Fix
* Just to be safe
* multiworld.random to world.random
* KeyError fix
* Update .gitignore
* Update __init__.py
* Zoinks Scoob
* ffs
* Ruh Roh Raggy, more r-r-r-random bugs!
* 0.9b - cleanup + expanded logic difficulty
* Update Rules.py
* Update Regions.py
* AttributeError fix
* 0.10b - New Options
* 1.0 Preparations
* Docs
* Docs 2
* Fixes
* Update __init__.py
* Fixes
* variable capture my beloathed
* Fixes
* a
* 10 Seconds logic fix
* 1.1
* 1.2
* a
* New client
* More client changes
* 1.3
* Final touch-ups for 1.3
* 1.3.1
* 1.3.3
* Zero Jumps gen error fix
* more fixes
* Formatting improvements
* typo
* Update __init__.py
* Revert "Update __init__.py"
This reverts commit e178a7c0a6.
* init
* Update to new options API
* Missed some
* Snatcher Coins fix
* Missed some more
* some slight touch ups
* rewind
* a
* fix things
* Revert "Merge branch 'main' of https://github.com/CookieCat45/Archipelago-ahit"
This reverts commit a2360fe197, reversing
changes made to b8948bc495.
* Update .gitignore
* 1.3.6
* Final touch-ups
* Fix client and leftover old options api
* Delete setup-ahitclient.py
* Update .gitignore
* old python version fix
* proper warnings for invalid act plandos
* Update worlds/ahit/docs/en_A Hat in Time.md
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
* Update worlds/ahit/docs/setup_en.md
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
* 120 char per line
* "settings" to "options"
* Update DeathWishRules.py
* Update worlds/ahit/docs/en_A Hat in Time.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* No more loading the data package
* cleanup + act plando fixes
* almost forgot
* Update Rules.py
* a
* Update worlds/ahit/Options.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* Options stuff
* oop
* no unnecessary type hints
* warn about depot download length in setup guide
* Update worlds/ahit/Options.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* typo
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* Update worlds/ahit/Rules.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* review stuff
* More stuff from review
* comment
* 1.5 Update
* link fix?
* link fix 2
* Update setup_en.md
* Update setup_en.md
* Update setup_en.md
* Evil
* Good fucking lord
* Review stuff again + Logic fixes
* More review stuff
* Even more review stuff - we're almost done
* DW review stuff
* Finish up review stuff
* remove leftover stuff
* a
* assert item
* add A Hat in Time to readme/codeowners files
* Fix range options not being corrected properly
* 120 chars per line in docs
* Update worlds/ahit/Regions.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Update worlds/ahit/DeathWishLocations.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Remove some unnecessary option.class.value
* Remove data_version and more option.class.value
* Update worlds/ahit/Items.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Remove the rest of option.class.value
* Update worlds/ahit/DeathWishLocations.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* review stuff
* Replace connect_regions with Region.connect
* review stuff
* Remove unnecessary Optional from LocData
* Remove HatType.NONE
* Update worlds/ahit/test/TestActs.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* fix so default tests actually don't run
* Improve performance for death wish rules
* rename test file
* change test imports
* 1000 is probably unnecessary
* a
* change state.count to state.has
* stuff
* starting inventory hats fix
* shouldn't have done this lol
* make ship shape task goal equal to number of tasksanity checks if set to 0
* a
* change act shuffle starting acts + logic updates
* dumb
* option groups + lambda capture cringe + typo
* a
* b
* missing option in groups
* c
* Fix Your Contract Has Expired being placed on first level when it shouldn't
* yche fix
* formatting
* major logic bug fix for death wish
* Update Regions.py
* Add missing indirect connections
* Fix generation error from chapter 2 start with act shuffle off
* a
* Revert "a"
This reverts commit df58bbcd99.
* Revert "Fix generation error from chapter 2 start with act shuffle off"
This reverts commit 0f4d441824.
* fix async lag
* Update Client.py
* shop item names need this now
* fix indentation
---------
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Add the yacht dice (from other git) world to the yacht dice fork
* Update .gitignore
* Removed zillion because it doesn't work
* Update .gitignore
* added zillion again...
* Now you can have 0 extra fragments
* Added alt categories, also options
* Added item categories
* Extra categories are now working! 🐶
* changed options and added exceptions
* Testing if I change the generate.py
* Revert "Testing if I change the generate.py"
This reverts commit 7c2b3df617.
* ignore gitignore
* Delete .gitignore
* Update .gitignore
* Update .gitignore
* Update logic, added multiplicative categories
* Changed difficulties
* Update offline mode so that it works again
* Adjusted difficulty
* New version of the apworld, with 1000 as final score, always
Will still need to check difficulty and weights of adding items.
Website is not ready yet, so this version is not usable yet :)
* Changed yaml and small bug fixes
Fix when goal and max are same
Options: changed chance to weight
* no changes, just whitespaces
* changed how logic works
Now you put an array of mults and the cpu gets a couple of tries
* Changed logic, tweaked a bit too
* Preparation for 2.0
* logic tweak
* Logic for alt categories properly now
* Update setup_en.md
* Update en_YachtDice.md
* Improve performance of add_distributions
* Formatting style
* restore gitignore to APMW
* Tweaked generation parameters and methods
* Version 2.0.3
manual input option
max score in logic always 2.0.3
faster gen
* Comments and editing
* Renamed setup guide
* Improved create_items code
* init of locations: remove self.event line
* Moved setting early items to generate_early
* Add my name to CODEOWNERS
* Added Yacht Dice to the readme in list of games
* Improve performance of Yacht Dice
* newline
* Improve typing
* This is actually just slower lol
* Update worlds/yachtdice/Items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update Options.py
* Styling
* finished text whichstory option
* removed roll and rollfragments; not used
* import; worlds not world :)
* Option groups!
* ruff styling, fix
* ruff format styling!
* styling and capitalization of options
* small comment
* Cleaned up the "state_is_a_list" a little bit
* RUFF 🐶
* Changed filling the itempool for efficiency
Now, we start with 17 extra items in the item pool, it's quite likely you need at least 17 items (~80%?).
And then afterwards, we delete items if we overshoot the target of 1000, and add items if we haven't reached an achievable score of 1000 yet. Also, no need to recompute the entire logic when adding points.
* 🐶
* Removed plando "fix"
* Changed indent of score multiplier
* faster location function
* Comments to docstrings
* fixed making location closest to goal_score be goal_score
* options format
* iterate keys and values of a dict together
* small optimization ListState
* faster collection of categories
* return arguments instead of making a list (will 🐶 later)
* Instead of turning it into a tuple, you can just make a tuple literal
* remove .keys()
* change .random and used enumerate
* some readability improvements
* Remove location "0", we don't use that one
* Remove lookup_id_to_name entirely
I for sure don't use it, and as far as I know it's not one of the mandatory functions for AP, these are item_name_to_id and location_name_to_id.
* .append instead of += for single items, percentile function changed
Also an extra comment for location ids.
* remove ) too many
* Removed sorted from category list
* Hash categories (which makes it slower :( )
Maybe I messed up or misunderstood...
I'll revert this right away since it is 2x slower, probably because of sorted instead of sort?
* Revert "Hash categories (which makes it slower :( )"
This reverts commit 34f2c1aed8.
* temporary push: 40% faster generation test
Small changes in logic make the generation 40% faster.
I'll have to think about how big the changes are. I suspect they are rather limited.
If this is the way to go, I'll remove the temp file and redo the YachtWeights file, I'll remove the functions there and just put the new weights here.
* Add Points item category
* Reverse changes of bad idea :)
* ruff 🐶
* Use numpy and pmf function to speed up gen
Numpy has a built-in way to sum probability mass functions (pmf).
This shaves of 60% of the generation time :D
* Revert "Use numpy and pmf function to speed up gen"
This reverts commit 9290191cb3.
* Step inbetween to change the weights
* Changed the weights to make it faster
135 -> 81 seconds on 100 random yamls
* Adjusted max_dist, split dice_simulation function
* Removed nonlocal and pass arguments instead
* Change "weight-lists" to Dict[str, float]
* Removed the return from ini_locations.
Also added explanations to cat_weights
* Choice options; dont'use .value (will ruff later)
* Only put important options in slotdata
* 🐶
* Add Dict import
* Split the cache per player, limit size to 400.
* 🐶
* added , because of style
* Update apworld version to 2.0.6
2.0.5 is the apworld I released on github to be tested
I never separately released 2.0.4.
* Multiple smaller code improvements
- changed names in YachtWeights so we don't need to translate them in Rules anymore
- we now remember which categories are present in the game, and also put this in slotdata. This we do because only one of two categories is present in a game. If for some reason both are present (plando/getitem/startinventory), we now know which category to ignore
-
* 🐶 ruff
* Mostly minimize_extra_items improvements
- Change logic, generation is now even faster (0.6s per default yaml).
- Made the option 'minimize_extra_items' do a lot more, hopefully this makes the impact of Yacht Dice a little bit less, if you want that. Here's what is also does now:
- you start with 2 dice and 2 rolls
- there will be less locations/items at the start of you game
* ruff 🐶
* Removed printing options
* Reworded some option descriptions
* Yacht Dice: setup: change release-link to latest
On the installation page, link to the latest release, instead of the page with all releases
* Several fixes and changes
-change apworld version
-Removed the extra roll (this was not intended)
-change extra_points_added to a mutable list to that it actually does something
-removed variables multipliers_added and items_added
-Rules, don't order by quantity, just by mean_score
-Changed the weights in general to make it faster
* 🐶
* Revert setup to what it was (latest, without S)
* remove temp weights file, shouldn't be here
* Made sure that there is not too many step score multipliers.
Too many step score multipliers lead to gen fails too, probably because you need many categories for them to actually help a lot. So it's hard to use them at the start of the game.
* add filler item name
* Textual fixes and changes
* Remove Victory item and use event instead.
* Revert "Remove Victory item and use event instead."
This reverts commit c2f7d674d3.
* Revert "Textual fixes and changes"
This reverts commit e9432f9245.
* Remove Victory item and make it an event instead
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* set filler item
also rename "Master Stalfos' Message" to "Nothing" as it shows up in game, and "Gel" to "Zol Attack"
* fix for extra gold leaves
* fix for start_inventory
* Quiz updates
* Enable Partial Trainersanity
* Losable Key Items Still Count
* New options api
* Type Chart Seed
* Continue switching to new options API
* Level Scaling and Quiz fixes
* Level Scaling and Quiz fixes
* Clarify that palettes are only for Super Gameboy
* Type chart seed groups use one random players' options
* remove goal option again
* Text updates
* Trainersanity Trainers ignore Blind Trainers setting
* Re-order simple connecting interiors so that directions are preserved when possible
* Dexsanity exact number
* Year update
* Dexsanity Doc update
* revert accidental file deletion
* Fixes
* Add world parameter to logic calls
* restore correct seeded random object
* missing world.options changes
* Trainersanity table bug fix
* delete entrances as well as exits when restarting door shuffle
* Do not collect route 25 item for level scaling if trainer is trainersanity
* world.options in level_scaling.py
* Update worlds/pokemon_rb/level_scaling.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/pokemon_rb/encounters.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/pokemon_rb/encounters.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* world -> multiworld
* Fix Cerulean Cave Hidden Item Center Rocks region
* Fix Cerulean Cave Hidden Item Center Rocks region for real
* Remove "self-locking" rules
* Update worlds/pokemon_rb/regions.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Fossil events
* Update worlds/pokemon_rb/level_scaling.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: alchav <alchav@jalchavware.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* make yaml_output arg a bool instead of number
* make yaml_output dump all player options as csv
* it sorts by game so swap those columns
* capitalize game and name headers
* use a list and just add an if before adding instead of sorting
* skip options that the world doesn't want displayed
* check if the class is a subclass of Removed specifically instead of the none flag
* don't create empty rows
* add a header for every game option that isn't from the common ones even if they have the same name
* add to webhost gen args so it can still gen
* WebHost: add spinner to room command
and show error message if fetch fails due to NetworkError
* WebHost: don't update room log while tab is inactive
* WebHost: don't include log for automated requests
* WebHost: refresh room also for re-spinups
and do that from javascript
* Test, WebHost: send fake user-agent where required
* WebHost: remove wrong comment in host room
* - Created a test for the "Mapping Cave Systems" book
* - Added missing rule to marlon's bedroom
* - Can kill any monster, not just green slime
* - Added a compound source structure, but I ended up deciding to not use it here. Still keeping it as it will probably be useful eventually
* - Use the compound source of the monster compoundium (ironic, I know)
* - Add required elevators
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* add a more clear error message for a missing exit
* remove portal region from the available pool
* ensure plando portals are in the correct spot in the list and it gets cleared correctly
`CollectionState.update_reachable_regions()` un-stales the state for all
players, but when checking `OOTRegion.can_reach()`, it would only update
OOT's age region accessibility when the state was stale, so if the state
was always un-staled by `update_reachable_regions()` immediately before
`OOTRegion.can_reach()`, OOT's age region accessibility would never
update.
This patch fixes the issue by replacing use of CollectionState.stale
with a separate stale state dictionary specific to OOT that is only
un-staled by `_oot_update_age_reachable_regions()`.
OOT's collect() and remove() implementations have been updated to stale
the new OOT-specific state.
Entrances to SciLab_Cyberworld and Yoka_Cyberworld had logic for being
able to reach SciLab_Overworld, but did not register this indirect
condition.
Entrances to Beach_Cyberworld had logic for being able to reach
Yoka_Overworld, but did not register this indirect condition.
Entrances to Undernet and Secret_Area had logic for having a high enough
explore score, but explore score is calculated based on the
accessibility of a number of regions and no indirect conditions were
being registered for these regions.
* fix single player item links
* Make a variable and fix weird spacing
* use advancement instead of classification
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
The Bowser in the Fire Sea randomized entrance has an access rule that
requires being able to reach "DDD: Board Bowser's Sub", but being able
to reach a location also requires being able to reach the region that
location is in, so an indirect condition is required.
* Add the yacht dice (from other git) world to the yacht dice fork
* Update .gitignore
* Removed zillion because it doesn't work
* Update .gitignore
* added zillion again...
* Now you can have 0 extra fragments
* Added alt categories, also options
* Added item categories
* Extra categories are now working! 🐶
* changed options and added exceptions
* Testing if I change the generate.py
* Revert "Testing if I change the generate.py"
This reverts commit 7c2b3df617.
* ignore gitignore
* Delete .gitignore
* Update .gitignore
* Update .gitignore
* Update logic, added multiplicative categories
* Changed difficulties
* Update offline mode so that it works again
* Adjusted difficulty
* New version of the apworld, with 1000 as final score, always
Will still need to check difficulty and weights of adding items.
Website is not ready yet, so this version is not usable yet :)
* Changed yaml and small bug fixes
Fix when goal and max are same
Options: changed chance to weight
* no changes, just whitespaces
* changed how logic works
Now you put an array of mults and the cpu gets a couple of tries
* Changed logic, tweaked a bit too
* Preparation for 2.0
* logic tweak
* Logic for alt categories properly now
* Update setup_en.md
* Update en_YachtDice.md
* Improve performance of add_distributions
* Formatting style
* restore gitignore to APMW
* Tweaked generation parameters and methods
* Version 2.0.3
manual input option
max score in logic always 2.0.3
faster gen
* Comments and editing
* Renamed setup guide
* Improved create_items code
* init of locations: remove self.event line
* Moved setting early items to generate_early
* Add my name to CODEOWNERS
* Added Yacht Dice to the readme in list of games
* Improve performance of Yacht Dice
* newline
* Improve typing
* This is actually just slower lol
* Update worlds/yachtdice/Items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update Options.py
* Styling
* finished text whichstory option
* removed roll and rollfragments; not used
* import; worlds not world :)
* Option groups!
* ruff styling, fix
* ruff format styling!
* styling and capitalization of options
* small comment
* Cleaned up the "state_is_a_list" a little bit
* RUFF 🐶
* Changed filling the itempool for efficiency
Now, we start with 17 extra items in the item pool, it's quite likely you need at least 17 items (~80%?).
And then afterwards, we delete items if we overshoot the target of 1000, and add items if we haven't reached an achievable score of 1000 yet. Also, no need to recompute the entire logic when adding points.
* 🐶
* Removed plando "fix"
* Changed indent of score multiplier
* faster location function
* Comments to docstrings
* fixed making location closest to goal_score be goal_score
* options format
* iterate keys and values of a dict together
* small optimization ListState
* faster collection of categories
* return arguments instead of making a list (will 🐶 later)
* Instead of turning it into a tuple, you can just make a tuple literal
* remove .keys()
* change .random and used enumerate
* some readability improvements
* Remove location "0", we don't use that one
* Remove lookup_id_to_name entirely
I for sure don't use it, and as far as I know it's not one of the mandatory functions for AP, these are item_name_to_id and location_name_to_id.
* .append instead of += for single items, percentile function changed
Also an extra comment for location ids.
* remove ) too many
* Removed sorted from category list
* Hash categories (which makes it slower :( )
Maybe I messed up or misunderstood...
I'll revert this right away since it is 2x slower, probably because of sorted instead of sort?
* Revert "Hash categories (which makes it slower :( )"
This reverts commit 34f2c1aed8.
* temporary push: 40% faster generation test
Small changes in logic make the generation 40% faster.
I'll have to think about how big the changes are. I suspect they are rather limited.
If this is the way to go, I'll remove the temp file and redo the YachtWeights file, I'll remove the functions there and just put the new weights here.
* Add Points item category
* Reverse changes of bad idea :)
* ruff 🐶
* Use numpy and pmf function to speed up gen
Numpy has a built-in way to sum probability mass functions (pmf).
This shaves of 60% of the generation time :D
* Revert "Use numpy and pmf function to speed up gen"
This reverts commit 9290191cb3.
* Step inbetween to change the weights
* Changed the weights to make it faster
135 -> 81 seconds on 100 random yamls
* Adjusted max_dist, split dice_simulation function
* Removed nonlocal and pass arguments instead
* Change "weight-lists" to Dict[str, float]
* Removed the return from ini_locations.
Also added explanations to cat_weights
* Choice options; dont'use .value (will ruff later)
* Only put important options in slotdata
* 🐶
* Add Dict import
* Split the cache per player, limit size to 400.
* 🐶
* added , because of style
* Update apworld version to 2.0.6
2.0.5 is the apworld I released on github to be tested
I never separately released 2.0.4.
* Multiple smaller code improvements
- changed names in YachtWeights so we don't need to translate them in Rules anymore
- we now remember which categories are present in the game, and also put this in slotdata. This we do because only one of two categories is present in a game. If for some reason both are present (plando/getitem/startinventory), we now know which category to ignore
-
* 🐶 ruff
* Mostly minimize_extra_items improvements
- Change logic, generation is now even faster (0.6s per default yaml).
- Made the option 'minimize_extra_items' do a lot more, hopefully this makes the impact of Yacht Dice a little bit less, if you want that. Here's what is also does now:
- you start with 2 dice and 2 rolls
- there will be less locations/items at the start of you game
* ruff 🐶
* Removed printing options
* Reworded some option descriptions
* Yacht Dice: setup: change release-link to latest
On the installation page, link to the latest release, instead of the page with all releases
* Several fixes and changes
-change apworld version
-Removed the extra roll (this was not intended)
-change extra_points_added to a mutable list to that it actually does something
-removed variables multipliers_added and items_added
-Rules, don't order by quantity, just by mean_score
-Changed the weights in general to make it faster
* 🐶
* Revert setup to what it was (latest, without S)
* remove temp weights file, shouldn't be here
* Made sure that there is not too many step score multipliers.
Too many step score multipliers lead to gen fails too, probably because you need many categories for them to actually help a lot. So it's hard to use them at the start of the game.
* add filler item name
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* The Witness: Fix hints always displaying the Witness player
Got a bit too trigger happy with changing instances of `world.multiworld.player_name` to `world.player_name` - Some of these were actually *supposed* to be other players.
Alternate title: The Witness doesn't have a Silph Scope
* that one i guess
* add deck support to the messenger mod setup
* Add tkinter cleanup because it's janky
* prompt about launching the game instead of just doing it
* add "better" file validation to courier checking
* make it a bit more palatable
* make it a bit more palatable
* add the executable's md5 to ensure the correct file is selected
* handle a bad md5 and show a message
* make the utils wrapper snake_case and add a docstring
* use stored archive instead of head
* don't give other people the convenience method ig
* make Generate handle slots without names defined better
* set name dict before loop so we don't have to check for its existence later
* move setter so it's more obvious why
* fix and add test
* add test to make sure we check xp can be earned
* fix python 3.8 test my god I hope it gets removed soon
* fixing some review comments
* curse you monstersanity
* move month rule to has_level vanilla, so next level is in logic once the previous item is received
* use progressive masteries to skills in test alsanity
* rename reset_collection_state
* add more tests around skill and masteries rules
* progressive level issue
---------
Co-authored-by: agilbert1412 <alexgilbert@yahoo.com>
* Launcher "Text Client" --connect archipelago.gg:38281
should work, it doesn't, this fixes that
* more explicit handling of expected values
* removing launcher updates meaning this pr cannot stand alone but will not have merge issues later
* add parser failure when an invalid url is found
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* adds handling for the `--` cli arg by having launcher capture, ignore, and pass through all of the values after it, while only processing (and validating) the values before it
updates text client and its components to allow for args to be passed through, captured in run_as_textclient, and used in parse_args if present
* Update worlds/LauncherComponents.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* explicitly using default args for parse_args when launched directly
* revert manual arg parsing by request
* Update CommonClient.py
* Update LauncherComponents.py
* :)
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Draft of SC2 EN documentation update: added hotkey, known issues; enhanced goal and prog balancing description. Added place holder for changes to apply in the French documentation.
* Enforced StarCraft over Starcraft, added information on locations in the FR documentation
* Removed a mention to a no longer available third link in the required software (since download_data deprecated the need to do it by hand)
* First version of FR campaign restriction for sc2; rewriting (FR/EN) of randomizer goal description
* Finished description for sc2 AP goal , minor formating
* Added, both en/fr, indications that logic is locations wise and not mission wise (i.e. you might need to dip)
* Enforced the 120 carac limit to last commit
* Removed mention of needing to use the weighted option page to exlcude unit/upgrades since it is not longer the case in AP v0.5.0
* Added mention of /received being different in SC2 client (both language). Added Known issues in the FR version.
* Simplified the text a bit and corrected some errors
* Enforced, again, Star-C-raft; setting -> option; applied sugg for readability enhancement
* Clean these functions up, get the hell out of here 5 parameter function
* Clean up a bunch of rules that no longer need to be multi-lined since the functions are shorter
* Clean up some range functions
* Update to use world instead of player like Vi recommended
* Fix merge conflict
* Create new options
* Slightly revise ls rule
* Update options.py
* Update options.py
* Add tedious option for ls
* Update laurels zips description
* Create new options
* Slightly revise ls rule
* Update options.py
* Update options.py
* Add tedious option for ls
* Update laurels zips description
* Creating structures to redo ladder storage rules
* Put together overworld ladder groups, remove tedious
* Write up the rules for the regular rules
* Update slot data and UT stuff
* Put new ice grapple stuff in er rules
* Ice grapple hard to get to fountain cross room
* More ladder data
* Wrote majority of overworld ladder rules
* Finish the ladder storage rules
* Update notes
* Add note
* Add well rail to the rules
* More rules
* Comment out logically irrelevant entrances
* Update with laurels_zip helper
* Add parameter to has_ice_grapple_logic for difficulty
* Add new parameter to has_ice_grapple_logic
* Move ice grapple chest to lower forest in ER/ladders
* Fix rule
* Finishing out hooking the new rules into the code
* Fix bugs
* Add more hard ice grapples
* Fix more bugs
* Shops my beloved
* Change victory condition back
* Remove debug stuff
* Update plando connections description
* Fix extremely rare bug
* Add well front -> back hard ladder storages
* Note in ls rules about knocking yourself down with bombs being out of logic
* Add atoll fuse with wand + hard ls
* Add some nonsense that boils down to activating the fuse in overworld
* Further update LS description
* Fix missing logic on bridge switch chest in upper zig
* Revise upper zig rule change to account for ER
* Fix merge conflict
* Fix formatting, fix rule for heir access after merge
* Add the shop sword logic stuff in
* Remove todo that was already done
* Fill out a to-do with some cursed nonsense
* Fix event in wrong region
* Fix missing cathedral -> elevator connection
* Fix missing cathedral -> elevator connection
* Add ER exception to cathedral -> elevator
* Fix secret gathering place issue
* Fix incorrect ls rule
* Move 3 locations to Quarry Back since they're easily accessible from the back
* Also update non-er region
* Remove redundant parentheses
* Add new test for a weird edge case in ER
* Slight option description updates
* Use has_ladder in spots where it wasn't used for some reason, add a comment
* Fix unit test for ER
* Update per exempt's suggestion
* Add back LogicRules as an invisible option, to not break old yamls
* Remove unused elevation from portal class
* Update ladder storage without items description
* Remove shop_scene stuff since it's no longer relevant in the mod by the time this version comes out
* Remove shop scene stuff from game info since it's no longer relevant in the mod by the time this comes out
* Update portal list to match main
* god I love github merging things
* Remove note
* Add ice grapple hard path from upper overworld to temple rafters entrance
* Actually that should be medium
* Remove outdated note
* Add ice grapple hard for swamp mid to the ledge
* Add missing laurels zip in swamp
* Some fixes to the ladder storage data while reviewing it
* Add unit test for weird edge case
* Backport outlet region system to fix ls bug
* Fix incorrect ls, add todo
* Add missing swamp ladder storage connections
* Add swamp zip to er data
* Add swamp zip to er rules
* Add hard ice grapple for forest grave path main to upper
* Add ice grapple logic for all bomb walls except the east quarry one
* Add ice grapple logic for frog stairs eye to mouth without the ladder
* Add hard ice grapple for overworld to the stairs to west garden
* Add the ice grapple boss quick kills to medium ice grappling
* Add the reverse connection for the ice grapple kill on Garden Knight
* Add atoll house ice grapple push, and add west garden ice grapple entry to the regular rules
* Pokemon Emerald: Use some new state functions, improve rule reuse
* Pokemon Emerald: Remove a couple more extra lambdas
* Pokemon Emerald: Swap some rules to use exclusive groups/lists
* Pokemon Emerald: Linting
We're not gonna keep both me and the linter happy here, but this at least gets things more consistent
* Pokemon Emerald: Update _exclusive to _unique
* moves the title name in CommonContext.run_gui into a parameter defaulted to the normal default so others using it don't have to rewrite everything
* Change to using a GameManager attribute instead of a default param
* Update CommonClient.py
treble suggestion 1
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Update CommonClient.py
treble suggestion 2
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Update CommonClient.py
treble suggestion 3
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Use make_gui() instead of a property to push kivy importing back to lazy loading regardless of gui_enabled status
* cleanup
* almost forgot to type it
* change make_gui to be a class so clients can subclass it
* clean up code readability
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Core: have webhost slot name links go through the launcher so that components can use them
* fix query handling, remove debug prints, and change mousover text for new behavior
* remove a missed debug and unused function
* filter room id to suuid since that's what everything else uses
* pass args to common client correctly
* add GUI to select which client to open
* remove args parsing and "require" components to parse it themselves
* support for messenger since it was basically already done
* use "proper" args argparsing and clean up uri handling
* use a timer and auto launch text client if no component is found
* change the timer to be a bit more appealing. also found a bug lmao
* don't hold 5 hostage and capitalize URI ig
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Add the yacht dice (from other git) world to the yacht dice fork
* Update .gitignore
* Removed zillion because it doesn't work
* Update .gitignore
* added zillion again...
* Now you can have 0 extra fragments
* Added alt categories, also options
* Added item categories
* Extra categories are now working! 🐶
* changed options and added exceptions
* Testing if I change the generate.py
* Revert "Testing if I change the generate.py"
This reverts commit 7c2b3df617.
* ignore gitignore
* Delete .gitignore
* Update .gitignore
* Update .gitignore
* Update logic, added multiplicative categories
* Changed difficulties
* Update offline mode so that it works again
* Adjusted difficulty
* New version of the apworld, with 1000 as final score, always
Will still need to check difficulty and weights of adding items.
Website is not ready yet, so this version is not usable yet :)
* Changed yaml and small bug fixes
Fix when goal and max are same
Options: changed chance to weight
* no changes, just whitespaces
* changed how logic works
Now you put an array of mults and the cpu gets a couple of tries
* Changed logic, tweaked a bit too
* Preparation for 2.0
* logic tweak
* Logic for alt categories properly now
* Update setup_en.md
* Update en_YachtDice.md
* Improve performance of add_distributions
* Formatting style
* restore gitignore to APMW
* Tweaked generation parameters and methods
* Version 2.0.3
manual input option
max score in logic always 2.0.3
faster gen
* Comments and editing
* Renamed setup guide
* Improved create_items code
* init of locations: remove self.event line
* Moved setting early items to generate_early
* Add my name to CODEOWNERS
* Added Yacht Dice to the readme in list of games
* Improve performance of Yacht Dice
* newline
* Improve typing
* This is actually just slower lol
* Update worlds/yachtdice/Items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update Options.py
* Styling
* finished text whichstory option
* removed roll and rollfragments; not used
* import; worlds not world :)
* Option groups!
* ruff styling, fix
* ruff format styling!
* styling and capitalization of options
* small comment
* Cleaned up the "state_is_a_list" a little bit
* RUFF 🐶
* Changed filling the itempool for efficiency
Now, we start with 17 extra items in the item pool, it's quite likely you need at least 17 items (~80%?).
And then afterwards, we delete items if we overshoot the target of 1000, and add items if we haven't reached an achievable score of 1000 yet. Also, no need to recompute the entire logic when adding points.
* 🐶
* Removed plando "fix"
* Changed indent of score multiplier
* faster location function
* Comments to docstrings
* fixed making location closest to goal_score be goal_score
* options format
* iterate keys and values of a dict together
* small optimization ListState
* faster collection of categories
* return arguments instead of making a list (will 🐶 later)
* Instead of turning it into a tuple, you can just make a tuple literal
* remove .keys()
* change .random and used enumerate
* some readability improvements
* Remove location "0", we don't use that one
* Remove lookup_id_to_name entirely
I for sure don't use it, and as far as I know it's not one of the mandatory functions for AP, these are item_name_to_id and location_name_to_id.
* .append instead of += for single items, percentile function changed
Also an extra comment for location ids.
* remove ) too many
* Removed sorted from category list
* Hash categories (which makes it slower :( )
Maybe I messed up or misunderstood...
I'll revert this right away since it is 2x slower, probably because of sorted instead of sort?
* Revert "Hash categories (which makes it slower :( )"
This reverts commit 34f2c1aed8.
* temporary push: 40% faster generation test
Small changes in logic make the generation 40% faster.
I'll have to think about how big the changes are. I suspect they are rather limited.
If this is the way to go, I'll remove the temp file and redo the YachtWeights file, I'll remove the functions there and just put the new weights here.
* Add Points item category
* Reverse changes of bad idea :)
* ruff 🐶
* Use numpy and pmf function to speed up gen
Numpy has a built-in way to sum probability mass functions (pmf).
This shaves of 60% of the generation time :D
* Revert "Use numpy and pmf function to speed up gen"
This reverts commit 9290191cb3.
* Step inbetween to change the weights
* Changed the weights to make it faster
135 -> 81 seconds on 100 random yamls
* Adjusted max_dist, split dice_simulation function
* Removed nonlocal and pass arguments instead
* Change "weight-lists" to Dict[str, float]
* Removed the return from ini_locations.
Also added explanations to cat_weights
* Choice options; dont'use .value (will ruff later)
* Only put important options in slotdata
* 🐶
* Add Dict import
* Split the cache per player, limit size to 400.
* 🐶
* added , because of style
* Update apworld version to 2.0.6
2.0.5 is the apworld I released on github to be tested
I never separately released 2.0.4.
* Multiple smaller code improvements
- changed names in YachtWeights so we don't need to translate them in Rules anymore
- we now remember which categories are present in the game, and also put this in slotdata. This we do because only one of two categories is present in a game. If for some reason both are present (plando/getitem/startinventory), we now know which category to ignore
-
* 🐶 ruff
* Mostly minimize_extra_items improvements
- Change logic, generation is now even faster (0.6s per default yaml).
- Made the option 'minimize_extra_items' do a lot more, hopefully this makes the impact of Yacht Dice a little bit less, if you want that. Here's what is also does now:
- you start with 2 dice and 2 rolls
- there will be less locations/items at the start of you game
* ruff 🐶
* Removed printing options
* Reworded some option descriptions
* Yacht Dice: setup: change release-link to latest
On the installation page, link to the latest release, instead of the page with all releases
* Several fixes and changes
-change apworld version
-Removed the extra roll (this was not intended)
-change extra_points_added to a mutable list to that it actually does something
-removed variables multipliers_added and items_added
-Rules, don't order by quantity, just by mean_score
-Changed the weights in general to make it faster
* 🐶
* Revert setup to what it was (latest, without S)
* remove temp weights file, shouldn't be here
* Made sure that there is not too many step score multipliers.
Too many step score multipliers lead to gen fails too, probably because you need many categories for them to actually help a lot. So it's hard to use them at the start of the game.
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
In `_get_next_random_batch()`, the `remaining_entities` and
`remaining_entity_weights` lists were being constructed by iterating
sets.
This patch changes the function to iterate a sorted copy of each set
instead.
* Docs: Specify process for adding a world maintainer to an existing world
* Update world maintainer.md
* Update world maintainer.md
* Update world maintainer.md
* Update world maintainer.md
* Update world maintainer.md
* Update world maintainer.md
* Update world maintainer.md
* Update world maintainer.md
* Update world maintainer.md
* Update world maintainer.md
* Update world maintainer.md
* Rewrite by BadMagic
* Update docs/world maintainer.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Variety Rando (But WitnessLogicVariety.txt is wrong
* Actually variety the variety file (Ty Exempt-Medic <3)
* This will be preopened
* Tooltip explaining the different difficulties
* Remove ?, those were correct
* Less efficient but easier to follow
* Parentheses
* Fix some reqs
* Not Arrows in Variety
* Oops
* Happy medic, I made a wacky solution
* there we go
* Lint oops
* There
* that copy is unnecessary
* Turns out that copy is necessary still
* yes
* lol
* Rename to Umbra Variety
* missed one
* Erase the Eraser
* Fix remaining instances of 'variety' and don't have a symbol item on the gate in variety
* reorder difficulties
* inbetween
* ruff
* Fix Variety Invis requirements
* Fix wooden beams variety
* Fix PP2 variety
* Mirror changes from 'Variety Mode Puzzle Change 3.2.3'
* These also have Symmetry
* merge error prevention
* Update worlds/witness/data/static_items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* no elif after return
* add variety to the symbol requirement bleed test
* Add variety to one of the 'other settings' unit tests
* Add Variety minimal symbols unittest
* oops
* I did the dumb again
* .
* Incorporate changes from other PR into WitnesLogicVariety.txt
* Update worlds/witness/data/WitnessLogicVariety.txt
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/witness/data/WitnessLogicVariety.txt
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update the reqs as well haha
* Another difference, thanks Medic :§
* Wait no, this one was right
* lol
* apply changes to WitnessLogicVariety.txt
* Add most recent Variety changes
* oof
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Docs: Mention indirect_conditions and that they are a *hard requirement* (with hard exception cases)
I definitely don't feel like I wrote this in the best way, or in the best place, but it is a precedent that I think is necessary so we can treat it as "the law of the land".
* oops
* Update world api.md
* Update world api.md
* Update world api.md
* Update docs/world api.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* I like within more here
* Update docs/world api.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update world api.md
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Once a thug shop rolled 0 as the number of items it should have, all
remaining iterations would do nothing because neither the `count == -1`
condition nor the `count >= 1` condition would be met. This caused all
remaining thug shops to have zero items. This also caused the item
counts of remaining thug shops to be absent from slot data, which was
how this issue was found.
I found the old code confusing and, rather than try to figure out how to
fix it, I opted to rewrite it. With the new code, a local variable
dictionary tracks the number of created locations for each thug and no
more locations are created for a thug once their number of locations
equals the number of shop items that thug rolled.
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* first working (most of the time) progression generation for SM using VariaRandomizer's rules, items, locations and accessPoint (as regions)
* first working single-world randomized SM rom patches
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* Fixed multiworld support patch not working with VariaRandomizer's
Added stage_fill_hook to set morph first in progitempool
Added back VariaRandomizer's standard patches
* + added missing files from variaRandomizer project
* + added missing variaRandomizer files (custom sprites)
+ started integrating VariaRandomizer options (WIP)
* Some fixes for player and server name display
- fixed player name of 16 characters reading too far in SM client
- fixed 12 bytes SM player name limit (now 16)
- fixed server name not being displayed in SM when using server cheat ( now displays RECEIVED FROM ARCHIPELAGO)
- request: temporarly changed default seed names displayed in SM main menu to OWTCH
* Fixed Goal completion not triggering in smClient
* integrated VariaRandomizer's options into AP (WIP)
- startAP is working
- door rando is working
- skillset is working
* - fixed itemsounds.ips crash by always including nofanfare.ips into multiworld.ips (itemsounds is now always applied and "itemsounds" preset must always be "off")
* skillset are now instanced per player instead of being a singleton class
* RomPatches are now instanced per player instead of being a singleton class
* DoorManager is now instanced per player instead of being a singleton class
* - fixed the last bugs that prevented generation of >1 SM world
* fixed crash when no skillset preset is specified in randoPreset (default to "casual")
* maxDifficulty support and itemsounds removal
- added support for maxDifficulty
- removed itemsounds patch as its always applied from multiworld patch for now
* Fixed bad merge
* Post merge adaptation
* fixed player name length fix that got lost with the merge
* fixed generation with other game type than SM
* added default randoPreset json for SM in playerSettings.yaml
* fixed broken SM client following merge
* beautified json skillset presets
* Fixed ArchipelagoSmClient not building
* Fixed conflict between mutliworld patch and beam_doors_plms patch
- doorsColorsRando now working
* SM generation now outputs APBP
- Fixed paths for patches and presets when frozen
* added missing file and fixed multithreading issue
* temporarily set data_version = 0
* more work
- added support for AP starting items
- fixed client crash with gamemode being None
- patch.py "compatible_version" is now 3
* commited missing asm files
fixed start item reserve breaking game (was using bad write offset when patching)
* Nothing item are now handled game-side. the game will now skip displaying a message box for received Nothing item (but the client will still receive it).
fixed crash in SMClient when loosing connection to SNI
* fixed No Energy Item missing its ID
fixed Plando
* merge post fixes
* fixed start item Grapple, XRay and Reserve HUD, as well as graphic beams (except ice palette color)
* fixed freeze in blue brinstar caused by Varia's custom PLM not being filled with proper Multiworld PLM address (altLocsAddresses)
* fixed start item x-ray HUD display
* Fixed start items being sent by the server (is all handled in ROM)
Start items are now not removed from itempool anymore
Nothing Item is now local_items so no player will ever pickup Nothing. Doing so reduces contribution of this world to the Multiworld the more Nothing there is though.
Fixed crash (and possibly passing but broken) at generation where the static list of IPSPatches used by all SM worlds was being modified
* fixed settings that could be applied to any SM players
* fixed auth to server only using player name (now does as ALTTP to authenticate)
* - fixed End Credits broken text
* added non SM item name display
* added all supported SM options in playerSettings.yaml
* fixed locations needing a list of parent regions (now generate a region for each location with one-way exits to each (previously) parent region
did some cleaning (mainly reverts on unnecessary core classes
* minor setting fixes and tweaks
- merged Area and lightArea settings
- made missileQty, superQty and powerBombQty use value from 10 to 90 and divide value by float(10) when generating
- fixed inverted layoutPatch setting
* added option start_inventory_removes_from_pool
fixed option names formatting
fixed lint errors
small code and repo cleanup
* Hopefully fixed ROR2 that could not send any items
* - fixed missing required change to ROR2
* fixed 0 hp when respawning without having ever saved (start items were not updating the save checksum)
* fixed typo with doors_colors_rando
* fixed checksum
* added custom sprites for off-world items (progression or not)
the original AP sprite was made with PierRoulette's SM Item Sprite Utility by ijwu
* - added missing change following upstream merge
- changed patch filename extension from apbp to apm3 so patch can be used with the new client
* added morph placement options: early means local and sphere 1
* fixed failing unit tests
* - fixed broken custom_preset options
* - big cleanup to remove unnecessary or unsupported features
* - more cleanup
* - moved sm_randomizer_rom and all always applied patches into an external project that outputs basepatch.ips
- small cleanup
* - added comment to refer to project for generating basepatch.ips (https://github.com/lordlou/SMBasepatch)
* fixed g4_skip patch that can be not applied if hud is enabled
* - fixed off world sprite that can have broken graphics (restricted to use only first 2 palette)
* - updated basepatch to reflect g4_skip removal
- moved more asm files to SMBasepatch project
* - tourian grey doors at baby metroid are now always flashing (allowing to go back if needed)
* fixed wrong path if using built as exe
* - cleaned exposed maxDifficulty options
- removed always enabled Knows
* Merged LttPClient and SMClient into SNIClient
* added varia_custom Preset Option that fetch a preset (read from a new varia_custom_preset Option) from varia's web service
* small doc precision
* - added death_link support
- fixed broken Goal Completion
- post merge fix
* - removed now useless presets
* - fixed bad internal mapping with maxDiff
- increases maxDiff if only Bosses is preventing beating the game
* - added support for lowercase custom preset sections (knows, settings and controller)
- fixed controller settings not applying to ROM
* - fixed death loop when dying with Door rando, bomb or speed booster as starting items
- varia's backup save should now be usable (automatically enabled when doing door rando)
* -added docstring for generated yaml
* fixed bad merge
* fixed broken infinity max difficulty
* commented debug prints
* adjusted credits to mark progression speed and difficulty as Non Available
* added support for more than 255 players (will print Archipelago for higher player number)
* fixed missing cleanup
* added support for 65535 different player names in ROM
* fixed generations failing when only bosses are unreachable
* - replaced setting maxDiff to infinity with a bool only affecting boss logics if only bosses are left to finish
* fixed failling generations when using 'fun' settings
Accessibility checks are forced to 'items' if restricted locations are used by VARIA following usage of 'fun' settings
* fixed debug logger
* removed unsupported "suits_restriction" option
* fixed generations failing when only bosses are unreachable (using a less intrusive approach for AP)
* - fixed deathlink emptying reserves
- added death_link_survive option that lets player survive when receiving a deathlink if the have non-empty reserves
* - merged death_link and death_link_survive options
* fixed death_link
* added a fallback default starting location instead of failing generation if an invalid one was chosen
* added Nothing and NoEnergy as hint blacklist
added missing NoEnergy as local items and removed it from progression
* replaced deprecated use of option_definitions for SM and SMZ3 by options_dataclass
* fixed missed references to option_definitions
* Update worlds/sm/variaRandomizer/utils/utils.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* fixed conflicts and made SMZ3 accessibility related code more future proof
* Update worlds/smz3/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/smz3/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* initial work on procedure patch
* more flexibility
load default procedure for version 5 patches
add args for procedure
add default extension for tokens and bsdiff
allow specifying additional required extensions for generation
* pushing current changes to go fix tloz bug
* move tokens into a separate inheritable class
* forgot the commit to remove token from ProcedurePatch
* further cleaning from bad commit
* start on docstrings
* further work on docstrings and typing
* improve docstrings
* fix incorrect docstring
* cleanup
* clean defaults and docstring
* define interface that has only the bare minimum required
for `Patch.create_rom_file`
* change to dictionary.get
* remove unnecessary if statement
* update to explicitly check for procedure, restore compatible version and manual override
* Update Files.py
* remove struct uses
* Update Rom.py
* convert KDL3 to APPP
* change class variables to instance variables
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* move required_extensions to tuple
* fix missing tuple ellipsis
* fix classvar mixup
* rename tokens to _tokens. use hasattr
* type hint cleanup
* Update Files.py
* initial base for local items, need to finish
* coo not clean
* handle local items for real, appp cleanup
* actually make bosses send their locations
* fix cloudy park 4 rule, zero deathlink message
* remove redundant door_shuffle bool
when generic ER gets in, this whole function gets rewritten. So just clean it a little now.
* properly fix deathlink messages, fix fill error
* update docs
* add prefill items
* fix kine fill error
* Update Rom.py
* Update Files.py
* mypy and softlock fix
* Update Gifting.py
* mypy phase 1
* fix rare async client bug
* Update __init__.py
* typing cleanup
* fix stone softlock
because of the way Kine's Stone works, you can't clear the stone blocks before clearing the burning blocks, so we have to bring Burning from outside
* Update Rom.py
* Add option groups
* Rename to lowercase
* finish rename
* whoops broke the world
* fix animal duplication bug
* overhaul filler generation
* add Miku flavor
* Update gifting.py
* fix issues related to max_hs increase
* Update test_locations.py
* fix boss shuffle not working if level shuffle is disabled
* fix bleeding default levels
* Update options.py
* thought this would print seed
* yay bad merges
* forgot options too
* yeah lets just break generation while at it
* this is probably a problem
* cap required heart stars
* Revert "cap required heart stars"
This reverts commit 759efd3e2b.
* fix duplication removal placement, deprecated test option
* forgot that we need to account for what we place
* move location ids
* rewrite trap handling
* further stage renumber fixes
* forgot one more
* basic UT support
* fix local heart star checks
* fix pattern
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
We had been keeping a set of items and defining item equality, but
item equality really only makes sense if you consider distinct IDs to
be distinct items. But that means the set ends up having multiple
copies of the same item, causing a bug where some items had the wrong
upgrade level in the game.
This also removes the equality definition, which was only used by this
one set.
* - Add Unit test for all the fish that require a specific region to be reachable
* - Move the crimsonfish to the tide pools region
* - Improved the unit test to be more thorough, add extended family fish to the test
* - Moved the son of crimsonfish to the correct region as well
* FFMQ: Fix reset protection (#3710)
* Revert reset protection
* Fix reset protection
---------
Co-authored-by: alchav <alchav@jalchavware.com>
* - Take shipsanity moss out of shipsanity crops (#3709)
* sc2: Removing unused dependency in requirements.txt (#3697)
* sc2: Removing unused dependency in requirements.txt
* sc2: Add missing newline in requirements.txt
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* WebHost: Fix NamedRange values clamping to the range (#3613)
If a NamedRange has a `special_range_names` entry outside the
`range_start` and `range_end`, the HTML5 range input will clamp the
submitted value to the closest value in the range.
These means that, for example, Pokemon RB's "HM Compatibility" option's
"Vanilla (-1)" option would instead get posted as "0" rather than "-1".
This change updates NamedRange to behave like TextChoice, where the
select element has a `name` attribute matching the option, and there is
an additional element to be able to provide an option other than the
select element's choices.
This uses a different suffix of `-range` rather than `-custom` that
TextChoice uses. The reason is we need some way to decide whether to use
the custom value or the select value, and that method needs to work
without JavaScript. For TextChoice this is easy, if the custom field is
empty use the select element. For NamedRange this is more difficult as
the browser will always submit *something*. My choice was to only use
the value from the range if the select box is set to "custom". Since
this only happens with JS as "custom' is hidden, I made the range hidden
under no-JS. If it's preferred, I could make the select box hidden
instead. Let me know.
This PR also makes the `js-required` class set `display: none` with
`!important` as otherwise the class wouldn't work on any rule that
had `display: flex` with more specificity than a single class.
* Timespinner: migrate to new options api and correct random (#2485)
* Implemented new options system into Timespinner
* Fixed typo
* Fixed typo
* Fixed slotdata maybe
* Fixes
* more fixes
* Fixed failing unit tests
* Implemented options backwards comnpatibility
* Fixed option fallbacks
* Implemented review results
* Fixed logic bug
* Fixed python 3.8/3.9 compatibility
* Replaced one more multiworld option usage
* Update worlds/timespinner/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Updated logging of options replacement to include player name and also write it to spoiler
Fixed generation bug
Implemented review results
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Core: migrate item links out of main (#2914)
* Core: move item linking out of main
* add a test that item link option correctly validates
* remove unused fluff
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Core: Rework accessibility (#1481)
* rename locations accessibility to "full" and make old locations accessibility debug only
* fix a bug in oot
* reorder lttp tests to not override its overrides
* changed the wrong word in the dict
* :forehead:
* update the manual lttp yaml
* use __debug__
* update pokemon and messenger
* fix conflicts from 993
* fix stardew presets
* add that locations may be inaccessible to description
* use reST format and make the items description one line so that it renders correctly on webhost
* forgot i renamed that
* add aliases for back compat
* some cleanup
* fix imports
* fix test failure
* only check "items" players when the item is progression
* Revert "only check "items" players when the item is progression"
This reverts commit ecbf986145.
* remove some unnecessary diffs
* CV64: Add ItemsAccessibility
* put items description at the bottom of the docstring since that's it's visual order
* :
* rename accessibility reference in pokemon rb dexsanity
* make the rendered tooltips look nicer
* Shivers: New features and removes two missed options using the old options API (#3287)
* Adds an option to have pot pieces placed local/non-local/anywhere
Shivers nearly always finishes last in multiworld games due to the fact you need all 20 pot pieces to win and the pot pieces open very few location checks. This option allows the pieces to be placed locally. This should allow Shivers to be finished earlier.
* New option: Choose how many ixupi captures are needed for goal completion
New option: Choose how many ixupi captures are needed for goal completion
* Fixes rule logic for location 'puzzle solved three floor elevator'
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.
* Merge branch 'main' of https://github.com/GodlFire/Shivers
* Revert "Merge branch 'main' of https://github.com/GodlFire/Shivers"
This reverts commit bb08c3f0c2.
* Fixes issue with office elevator rule logic.
* Bug fix, missing logic requirement for location 'Final Riddle: Guillotine Dropped'
Bug fix, missing logic requirement for location 'Final Riddle: Guillotine Dropped'
* Moves plaque location to front for better tracker referencing.
* Tiki should be Shaman.
* Hanging should be Gallows.
* Merrick spelling.
* Clarity change.
* Changes new option to use new option API
Changes new option to use new option API
* Added sub regions for Ixupi
-Added sub regions for Ixupi and moved ixupi capture checks into the sub region.
-Added missing wax capture possible spot in Shaman room
* Adds option for ixupi captures to be priority locations
Adds option for ixupi captures to be priority locations
* Consistency
Consistency
* Changes ixupi captures priority to default on toggle
Changes ixupi captures priority to default on toggle
* Docs update
-Updated link to randomizer
-Update some text to reflect the latest functionality
-Replaced 'setting' with 'option'
* New features/bug fixes
-Adds an option to have completed pots in the item pool
-Moved subterranean world information plaque to maze staircase
* Cleanup
Cleanup
* Fixed name for moved location
When moving a location and renaming it I forgot to fix the name in a second spot.
* Squashed commit of the following:
commit 630a3bdfb9
Merge: 8477d3c85e579200
Author: GodlFire <46984098+GodlFire@users.noreply.github.com>
Date: Mon Apr 1 19:08:48 2024 -0600
Merge pull request #10 from ArchipelagoMW/main
Merge main into branch
commit 5e5792009c
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Mon Apr 1 12:08:21 2024 -0500
LttP: delete playerSettings.yaml (#3062)
commit 9aeeeb077a
Author: CaitSith2 <d_good@caitsith2.com>
Date: Mon Apr 1 06:07:56 2024 -0700
ALttP: Re-mark light/dark world regions after applying plando connections (#2964)
commit 35458380e6
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Mon Apr 1 07:07:11 2024 -0600
Pokemon Emerald: Fix wonder trade race condition (#2983)
commit 4ac1866689
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Mon Apr 1 08:06:31 2024 -0500
ALTTP: Skull Woods Inverted fix (#2980)
commit 4aa03da66e
Author: Fabian Dill <Berserker66@users.noreply.github.com>
Date: Mon Apr 1 15:06:02 2024 +0200
Factorio: fix attempting to create savegame with not filename safe characters (#2842)
commit 24a03bc8b6
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Mon Apr 1 08:02:26 2024 -0500
KDL3: fix shuffled animals not actually being random (#3060)
commit f813a7005f
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Sun Mar 31 11:11:10 2024 -0500
The Messenger: update docs formatting and fix outdated info (#3033)
* The Messenger: update docs formatting and fix outdated info
* address review feedback
* 120 chars
commit 2a0b7e0def
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>
Date: Sun Mar 31 09:55:55 2024 -0600
CV64: A couple of very small docs corrections. (#3057)
commit 03d47e460e
Author: Ixrec <ericrhitchcock@gmail.com>
Date: Sun Mar 31 16:55:08 2024 +0100
A Short Hike: Clarify installation instructions (#3058)
* Clarify installation instructions
* don't mention 'config' folder since it isn't created until the game starts
commit e546c0f7ff
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Sun Mar 31 10:50:31 2024 -0500
Yoshi's Island: add patch suffix (#3061)
commit 2ec93ba82a
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Sun Mar 31 09:48:59 2024 -0600
Pokemon Emerald: Fix inconsistent location name (#3065)
commit 4e3d396394
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Sun Mar 31 10:47:11 2024 -0500
The Messenger: Fix precollected notes not being removed from the itempool (#3066)
* The Messenger: fix precollected notes not being properly removed from pool
* The Messenger: bump required client version
commit 72c53513f8
Author: Fabian Dill <Berserker66@users.noreply.github.com>
Date: Sun Mar 31 03:57:59 2024 +0200
WebHost: fix /check creating broken yaml files if files don't end with a newline (#3063)
commit b7ac6a4cbd
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Fri Mar 29 20:14:53 2024 -0500
The Messenger: Fix various portal shuffle issues (#2976)
* put constants in a bit more sensical order
* fix accidental incorrect scoping
* fix plando rules not being respected
* add docstrings for the plando functions
* fix the portal output pools being overwritten
* use shuffle and pop instead of removing by content so plando can go to the same area twice
* move portal pool rebuilding outside mapping creation
* remove plando_connection cleansing since it isn't shared with transition shuffle
commit 5f0112e783
Author: Zach Parks <zach@alliware.com>
Date: Fri Mar 29 19:13:51 2024 -0500
Tracker: Add starting inventory to trackers and received items table. (#3051)
commit bb481256de
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Thu Mar 28 21:48:40 2024 -0500
Core: Make fill failure error more human parseable (#3023)
commit 301d9de975
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Thu Mar 28 19:31:59 2024 -0500
Docs: adding games rework (#2892)
* Docs: complete adding games.md rework
* remove all the now unused images
* review changes
* address medic's review
* address more comments
commit 9dc708978b
Author: Trevor L <80716066+TRPG0@users.noreply.github.com>
Date: Thu Mar 28 18:26:58 2024 -0600
Hylics 2: Fix invalid multiworld data, use `self.random` instead of `self.multiworld.random` (#3001)
* Hylics 2: Fixes
* Rewrite loop
commit 4391d1f4c1
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Thu Mar 28 18:05:39 2024 -0600
Pokemon Emerald: Fix opponents learning non-randomized TMs (#3025)
commit 5d9d4ed9f1
Author: black-sliver <59490463+black-sliver@users.noreply.github.com>
Date: Fri Mar 29 01:01:31 2024 +0100
SoE: update to pyevermizer v0.48.0 (#3050)
commit c97215e0e7
Author: Scipio Wright <scipiowright@gmail.com>
Date: Thu Mar 28 17:23:37 2024 -0400
TUNIC: Minor refactor of the vanilla_portals function (#3009)
* Remove unused, change an if to an elif
* Remove unused import
commit eb66886a90
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Thu Mar 28 16:23:01 2024 -0500
SC2: Don't Filter Excluded Victory Locations (#3018)
commit de860623d1
Author: Fabian Dill <Berserker66@users.noreply.github.com>
Date: Thu Mar 28 22:21:56 2024 +0100
Core: differentiate between unknown worlds and broken worlds in error message (#2903)
commit 74b2bf5161
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Thu Mar 28 15:20:55 2024 -0600
Pokemon Emerald: Exclude norman trainer location during norman goal (#3038)
commit 74ac66b032
Author: BadMagic100 <dempsey.sean@outlook.com>
Date: Thu Mar 28 08:49:19 2024 -0700
Hollow Knight: 0.4.5 doc revamp and default options tweaks (#2982)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit 80d7ac4164
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Thu Mar 28 09:41:32 2024 -0500
KDL3: RC1 Fixes and Enhancement (#3022)
* fix cloudy park 4 rule, zero deathlink message
* remove redundant door_shuffle bool
when generic ER gets in, this whole function gets rewritten. So just clean it a little now.
* properly fix deathlink messages, fix fill error
* update docs
commit 77311719fa
Author: Ziktofel <ziktofel@gmail.com>
Date: Thu Mar 28 15:38:34 2024 +0100
SC2: Fix HERC upgrades (#3044)
commit cfc1541be9
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Thu Mar 28 15:19:32 2024 +0100
Docs: Mention the "last received item index" paradigm in the network protocol docs (#2989)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit 4d954afd9b
Author: Scipio Wright <scipiowright@gmail.com>
Date: Thu Mar 28 10:11:20 2024 -0400
TUNIC: Add link to AP plando guide to connection plando section of game page (#2993)
commit 17748a4bf1
Author: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Date: Thu Mar 28 10:00:10 2024 -0400
Launcher, Docs: Update UI and Set-Up Guide to Reference Options (#2950)
commit 9182fe563f
Author: Entropynines <163603868+Entropynines@users.noreply.github.com>
Date: Thu Mar 28 06:56:35 2024 -0700
README: Remove outdated information about launchers (#2966)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit bcf223081f
Author: t3hf1gm3nt <59876300+t3hf1gm3nt@users.noreply.github.com>
Date: Thu Mar 28 09:54:56 2024 -0400
TLOZ: Fix markdown issue with game info page (#2985)
commit fa93488f3f
Author: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Date: Thu Mar 28 09:46:00 2024 -0400
Docs: Consistent naming for "connection plando" (#2994)
commit db15dd4bde
Author: chandler05 <66492208+chandler05@users.noreply.github.com>
Date: Thu Mar 28 08:45:19 2024 -0500
A Short Hike: Fix incorrect info in docs (#3016)
commit 01cdb0d761
Author: PoryGone <98504756+PoryGone@users.noreply.github.com>
Date: Thu Mar 28 09:44:23 2024 -0400
SMW: Update World Doc for v2.0 Features (#3034)
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
commit d0ac2b744e
Author: panicbit <panicbit@users.noreply.github.com>
Date: Thu Mar 28 10:11:26 2024 +0100
LADX: fix local and non-local instrument placement (#2987)
* LADX: fix local and non-local instrument placement
* change confusing variable name
commit 14f5f0127e
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Date: Thu Mar 28 04:42:35 2024 -0400
Stardew Valley: Fix potential soft lock with vanilla tools and entrance randomizer + Performance improvement for vanilla tool/skills (#3002)
* fix vanilla tool fishing rod requiring metal bars
fix vanilla skill requiring previous level (it's always the same rule or more restrictive)
* add test to ensure fishing rod need fish shop
* fishing rod should be indexed from 0 like a mentally sane person would do.
* fishing rod 0 isn't real, but it definitely can hurt you.
* reeeeeeeee
commit cf133dde72
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Thu Mar 28 02:32:27 2024 -0600
Pokemon Emerald: Fix typo (#3020)
commit ca18121811
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Date: Thu Mar 28 04:27:49 2024 -0400
Stardew Valley: Fix generation fail with SVE and entrance rando when Wizard Tower is in place of Sprite Spring (#2970)
commit 1d4512590e
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Wed Mar 27 21:09:09 2024 +0100
requirements.txt: _ instead of - to make PyCharm happy (#3043)
commit f7b415dab0
Author: agilbert1412 <alexgilbert@yahoo.com>
Date: Tue Mar 26 19:40:58 2024 +0300
Stardew valley: Game version documentation (#2990)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit 702f006c84
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>
Date: Tue Mar 26 07:31:36 2024 -0600
CV64: Change all mentions of "settings" to "options" and fix a broken link (#3015)
commit 98ce8f8844
Author: Yussur Mustafa Oraji <N00byKing@hotmail.de>
Date: Tue Mar 26 14:29:25 2024 +0100
sm64ex: New Options API and WebHost fix (#2979)
commit ea47b90367
Author: Scipio Wright <scipiowright@gmail.com>
Date: Tue Mar 26 09:25:41 2024 -0400
TUNIC: You can grapple down here without the ladder, neat (#3019)
commit bf3856866c
Author: agilbert1412 <alexgilbert@yahoo.com>
Date: Sun Mar 24 23:53:49 2024 +0300
Stardew Valley: presets with some of the new available values for existing settings to make them more accurate (#3014)
commit c0368ae0d4
Author: Phaneros <31861583+MatthewMarinets@users.noreply.github.com>
Date: Sun Mar 24 13:53:20 2024 -0700
SC2: Fixed missing upgrade from custom tracker (#3013)
commit 36c83073ad
Author: Salzkorn <salzkitty@gmail.com>
Date: Sun Mar 24 21:52:41 2024 +0100
SC2 Tracker: Fix grouped items pointing at wrong item IDs (#2992)
commit 2b24539ea5
Author: Ziktofel <ziktofel@gmail.com>
Date: Sun Mar 24 21:52:16 2024 +0100
SC2 Tracker: Use level tinting to let the player know which level he has of Replenishable Magazine (#2986)
commit 7e904a1c78
Author: Ziktofel <ziktofel@gmail.com>
Date: Sun Mar 24 21:51:46 2024 +0100
SC2: Fix Kerrigan presence resolving when deciding which races should be used (#2978)
commit bdd498db23
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Fri Mar 22 15:36:27 2024 -0500
ALTTP: Fix#2290's crashes (#2973)
commit 355223b8f0
Author: PinkSwitch <52474902+PinkSwitch@users.noreply.github.com>
Date: Fri Mar 22 15:35:00 2024 -0500
Yoshi's Island: Implement New Game (#2141)
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: Alchav <59858495+Alchav@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit aaa3472d5d
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Fri Mar 22 21:30:51 2024 +0100
The Witness: Fix seed bleed issue (#3008)
commit 96d93c1ae3
Author: chandler05 <66492208+chandler05@users.noreply.github.com>
Date: Fri Mar 22 15:30:23 2024 -0500
A Short Hike: Add option to customize filler coin count (#3004)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit ca549df20a
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Fri Mar 22 15:29:24 2024 -0500
CommonClient: fix hint tab overlapping (#2957)
Co-authored-by: Remy Jette <remy@remyjette.com>
commit 44988d430d
Author: Star Rauchenberger <fefferburbia@gmail.com>
Date: Fri Mar 22 15:28:41 2024 -0500
Lingo: Add trap weights option (#2837)
commit 11b32f17ab
Author: Danaël V <104455676+ReverM@users.noreply.github.com>
Date: Fri Mar 22 12:46:14 2024 -0400
Docs: replacing "setting" to "option" in world docs (#2622)
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
Added non-AP World specific information
* Update contributing.md
Fixed broken link
* Some minor touchups
* Update Contributing.md
Draft for version with picture
* Update contributing.md
Small word change
* Minor updates for conciseness, mostly
* Changed all instances of settings to options in info and setup guides
I combed through all world docs and swapped "setting" to "option" when this was refering to yaml options.
I also changed a leftover "setting" in option.py
* Update contributing.md
* Update contributing.md
* Update setup_en.md
Woops I forgot one
* Update Options.py
Reverted changes regarding options.py
* Update worlds/noita/docs/en_Noita.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md
revert change waiting for that page to be updated
* Update worlds/witness/docs/setup_en.md
* Update worlds/witness/docs/en_The Witness.md
* Update worlds/soe/docs/multiworld_en.md
Fixed Typo
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/witness/docs/en_The Witness.md
* Update worlds/adventure/docs/en_Adventure.md
* Update worlds/witness/docs/setup_en.md
* Updated Stardew valley to hopefully get rid of the merge conflicts
* Didn't work :dismay:
* Delete worlds/sc2wol/docs/setup_en.md
I think this will fix the merge issue
* Now it should work
* Woops
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
commit 218cd45844
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Fri Mar 22 03:02:38 2024 -0500
APProcedurePatch: fix RLE/COPY incorrect sizing (#3006)
* change class variables to instance variables
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* move required_extensions to tuple
* fix missing tuple ellipsis
* fix classvar mixup
* rename tokens to _tokens. use hasattr
* type hint cleanup
* Update Files.py
* check using isinstance instead
* Update Files.py
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
commit 4196bde597
Author: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Date: Thu Mar 21 16:38:36 2024 -0400
Docs: Fixing special_range_names example (#3005)
commit 40f843f54d
Author: Star Rauchenberger <fefferburbia@gmail.com>
Date: Thu Mar 21 11:00:53 2024 -0500
Lingo: Minor game data fixes (#3003)
commit da333fbb0c
Author: GodlFire <46984098+GodlFire@users.noreply.github.com>
Date: Thu Mar 21 09:52:16 2024 -0600
Shivers: Adds missing logic rule for skull dial door location (#2997)
commit 43084da23c
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Thu Mar 21 16:51:29 2024 +0100
The Witness: Fix newlines in Witness option tooltips (#2971)
commit 14816743fc
Author: Scipio Wright <scipiowright@gmail.com>
Date: Thu Mar 21 11:50:07 2024 -0400
TUNIC: Shuffle Ladders option (#2919)
commit 30a0aa2c85
Author: Star Rauchenberger <fefferburbia@gmail.com>
Date: Thu Mar 21 10:46:53 2024 -0500
Lingo: Add item/location groups (#2789)
commit f4b7c28a33
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Wed Mar 20 17:45:32 2024 -0500
APProcedurePatch: hotfix changing class variables to instance variables (#2996)
* change class variables to instance variables
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* move required_extensions to tuple
* fix missing tuple ellipsis
* fix classvar mixup
* rename tokens to _tokens. use hasattr
* type hint cleanup
* Update Files.py
* check using isinstance instead
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
commit 12864f7b24
Author: chandler05 <66492208+chandler05@users.noreply.github.com>
Date: Wed Mar 20 22:44:09 2024 +0100
A Short Hike: Implement New Game (#2577)
commit db02e9d2aa
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>
Date: Wed Mar 20 15:03:25 2024 -0600
Castlevania 64: Implement New Game (#2472)
commit 32315776ac
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Date: Wed Mar 20 16:57:45 2024 -0400
Stardew Valley: Fix extended family legendary fishes being locations with fishsanity set to exclude legendary (#2967)
commit e9620bea77
Author: Magnemania <89949176+Magnemania@users.noreply.github.com>
Date: Wed Mar 20 16:56:00 2024 -0400
SM64: Goal Logic and Hint Bugfixes (#2886)
commit 183ca35bba
Author: qwint <qwint.42@gmail.com>
Date: Wed Mar 20 08:39:37 2024 -0500
CommonClient: Port Casting Bug (#2975)
commit fcaaa197a1
Author: TheLX5 <luisyuregi@gmail.com>
Date: Wed Mar 20 05:56:19 2024 -0700
SMW: Fixes for Bowser being defeatable on Egg Hunt and CI2 DC room access (#2981)
commit 8f7b63a787
Author: TheLX5 <luisyuregi@gmail.com>
Date: Wed Mar 20 05:56:04 2024 -0700
SMW: Blocksanity logic fixes (#2988)
commit 6f64bb9869
Author: Scipio Wright <scipiowright@gmail.com>
Date: Wed Mar 20 08:46:31 2024 -0400
Noita: Remove newline from option description so it doesn't look bad on webhost (#2969)
commit d0a9d0e2d1
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Wed Mar 20 06:43:13 2024 -0600
Pokemon Emerald: Bump required client version (#2963)
commit 94650a02de
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Tue Mar 19 17:08:29 2024 -0500
Core: implement APProcedurePatch and APTokenMixin (#2536)
* initial work on procedure patch
* more flexibility
load default procedure for version 5 patches
add args for procedure
add default extension for tokens and bsdiff
allow specifying additional required extensions for generation
* pushing current changes to go fix tloz bug
* move tokens into a separate inheritable class
* forgot the commit to remove token from ProcedurePatch
* further cleaning from bad commit
* start on docstrings
* further work on docstrings and typing
* improve docstrings
* fix incorrect docstring
* cleanup
* clean defaults and docstring
* define interface that has only the bare minimum required
for `Patch.create_rom_file`
* change to dictionary.get
* remove unnecessary if statement
* update to explicitly check for procedure, restore compatible version and manual override
* Update Files.py
* remove struct uses
* ensure returning bytes, add token type checking
* Apply suggestions from code review
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* pep8
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Changes pot_completed_list to a instance variable instead of global.
Changes pot_completed_list to a instance variable instead of global. The global variable was unintentional and was causing missmatch in pre_fill which would cause generation error.
* Removing deprecated options getter
* Adds back fix from main branch
Adds back fix from main branch
* Removing messenger changes that somehow got on my branch?
Removing messenger changes that somehow got on my branch?
* Removing messenger changes that are somehow on the Shivers branch
Removing messenger changes that are somehow on the Shivers branch
* Still trying to remove Messenger changes on Shivers branch
Still trying to remove Messenger changes on Shivers branch
* Review comments addressed. Early lobby access set as default.
Review comments addressed. Early lobby access set as default.
* Review comments addressed
Review comments addressed
* Review comments addressed. Option for priority locations removed.
Option to have ixupi captures a priority has been removed and can be added again if Priority Fill is changed. See Issues #3467.
* Minor Change
Minor Change
* Fixed ID 10 T Error
Fixed ID 10 T Error
* Front door option added to slot data
Front door option added to slot data
* Add missing .value on slot data
Add missing .value on slot data
* Small change to slot data
Small change to slot data
* Small change to slot data
Why didn't this change get pushed github...
* Forgot list
Forgot list
---------
Co-authored-by: Kory Dondzila <korydondzila@gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Bomb Rush Cyberfunk: Fix Coil quest being in glitched logic too early (#3720)
* Update Rules.py
* Update Rules.py
* Options: Always verify keys for VerifyKeys options (#3280)
* Options: Always verify keys for VerifyKeys options
* fix PlandoTexts
* use OptionError and give a slightly better error message for which option it is
* add the player name to the error
* don't create an unnecessary list
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Docs: Add FFMQ French Setup Guide + Minor fixes to English Guide (#3590)
* Add docs
* Fix character
* Configuration
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* ajuster
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* inclure
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* doublon
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* remplissage
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* autre
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* pouvoir
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* mappemonde
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* apostrophes
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* virgule
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* fournir
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* apostrophes 2
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* snes9x
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* apostrophes 3
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* options
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* lien
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* de laquelle
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* Étape de génération
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* apostrophes 4
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* également
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* guillemets
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* guillemets 2
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* adresse
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* Connect
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* seed
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
* Changer fichier yaml pour de configuration
* Fix capitalization
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Fix capitalization 2
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Fix typo+Add link to fr/en info page
---------
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Spire: Convert options, clean up random calls, and add DeathLink (#3704)
* Convert StS options
* probably a bad idea
* Update worlds/spire/Options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
---------
Co-authored-by: Kono Tyran <Kono@koifysh.dev>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Core: fix missing import for `MultiWorld.link_items()` (#3731)
* Pokemon R/B: Removing Floats from NamedRange #3717
* Docs: Missed Full Accessibility mention/conversion #3734
* ChecksFinder: Refactor/Cleaning (#3725)
* Update ChecksFinder
* minor cleanup
* Check for compatible name
* Enable APWorld
* Update setup_en.md
* Update en_ChecksFinder.md
* The client is getting updated instead
* Qwint suggestions, ' -> ", streamline fill_slot_data
* Oops, too many refactors
---------
Co-authored-by: SunCat <suncat.game@ya.ru>
* OSRS: Implement New Game (#1976)
* MMBN3: Press program now has proper color index when received remotely
* Initial commit of OSRS untangled from MMBN3 branch
* Fixes some broken region connections
* Removes some locations
* Rearranges locations to fill in slots left by removed locations
* Adds starting area rando
* Moves Oak and Willow trees to resource regions
* Fixes various PEP8 violations
* Refactor of regions
* Fixes variable capture issue with region rules
* Partial completion of brutal grind logic
* Finishes can_reach_skill function
* Adds skill requirements to location rules, fixes regions rules
* Adds documentation for OSRS
* Removes match statement
* Updates Data Version to test mode to prevent item name caching
* Fixes starting spawn logic for east varrock
* Fixes river lum crossing logic to not assume you can phase across water
* Prevents equipping items when you haven't unlocked them
* Changes canoe logic to not require huge levels
* Skeletoning out some data I'll need for variable task system
* Adds csvs and parser for logic
* Adds Items parsing
* Fixes the spawning logic to not default to Chunksanity when you didn't pick it
* Begins adding generation rules for data-driven logic
* Moves region handling and location creating to different methods
* Adds logic limits to Options
* Begun the location generation has
* Randomly generates tasks for each skill until populated
* Mopping up improper names, adding custom logic, and fixes location rolling
* Drastically cleans up the location rolling loop
* Modifies generation to properly use local variables and pass unit tests
* Game is now generating, but rules don't seem to work
* Lambda capture, my old nemesis. We meet again
* Fixes issue with Corsair Cove item requirement causing logic loop
* Okay one more fix, another variable capture
* On second thought lets not have skull sceptre tasks. 'Tis a silly place
* Removes QP from item pool (they're events not items)
* Removes Stronghold floor tasks, no varbit to track them
* Loads CSV with pkutil so it can be used in apworld
* Fixes logic of skill tasks and adds QP requirements to long grinds
* Fixes pathing in pkgutil call
* Better handling for empty task categories, no longer throws errors
* Fixes order for progressive tasks, removes un-checkable spider task
* Fixes logic issues related to stew and the Blurite caves
* Fixes issues generating causing tests to sporadically fail
* Adds missing task that caused off-by-one error
* Updates to new Options API
* Updates generation to function properly with the Universal Tracker (Thanks Faris)
* Replaces runtime CSV parsing with pre-made python files generated from CSVs
* Switches to self.random and uses random.choice instead of doing it manually
* Fixes to typing, variable names, iterators, and continue conditions
* Replaces Name classes with Enums
* Fixes parse error on region special rules
* Skill requirements check now returns an accessrule instead of being one that checks options
* Updates documentation and setup guide
* Adjusts maximum numbers for combat and general tasks
* Fixes region names so dictionary lookup works for chunksanity
* Update worlds/osrs/docs/en_Old School Runescape.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Update worlds/osrs/docs/en_Old School Runescape.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Updates readme.md and codeowners doc
* Removes erroneous East Varrock -> Al Kharid connection
* Changes to canoe logic to account for woodcutting level options
* Fixes embarassing typo on 'Edgeville'
* Moves Logic CSVs to separate repository, addresses suggested changes on PR
* Fixes logic error in east/west lumbridge regions. Fixes incorrect List typing in main
* Removes task types with weight 0 from the list of rollable tasks
* Missed another place that the task type had to be removed if 0 weight
* Prevents adding an empty task weight if levels are too restrictive for tasks to be added
* Removes giant blank space in error message
* Adds player name to error for not having enough available tasks
---------
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* TUNIC: Fix missing traversal req #3740
* TUNIC: Sort entrances in the spoiler log (#3733)
* Sort entrances in spoiler log
* Rearrange portal list to closer match the vanilla game order, for better spoiler and because I already did this mod-side
* Add break (thanks vi)
* KH2: Update the docs to support steam in the setup guide (#3711)
* doc updates
* add steam link
* Update worlds/kh2/docs/setup_en.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update setup_en.md
* Forgot to include these
* Consistent styling
* :)
* version 3.3.0
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* RoR2: Remove recursion from explore mode access rules (#3681)
The access rules for "<Environment name> Chest n", "<Environment name>
Shrine n" etc. locations recursively called state.can_reach() for the
n-1 location name, with the n=1 location being the only location to have
the actual access rule set.
This patch removes the recursion, instead setting the actual access rule
directly on each location, increasing the performance of checking
accessibility of n>1 locations.
Risk of Rain 2 was already quite fast to generate despite the recursion
in the access rules, but with this patch, generating a multiworld with
200 copies of the template RoR2 yaml (and progression balancing
disabled through a meta.yaml) goes from about 18s to about 6s for me.
From generating the same seed before and after this patch, the same
result is produced.
* Aquaria: Logic bug fixes (#3679)
* Fixing logic bugs
* Require energy attack in the cathedral and energy form in the body
* King Jelly can be beaten easily with only the Dual Form
* I think that I have a problem with my left and right...
* There is a monster that is blocking the path, soo need attack to pass
* The Li cage is not accessible without the Sunken city boss
* Removing useless space.
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Two more minors logic modification
* Adapting tests to af9b6cd
* Reformat the Region file
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* HK: add grub hunt goal (#3203)
* makes grub hunt goal option that calculates the total available grubs (including item link replacements) and requires all of them to be gathered for goal completion
* update slot data name for grub count
* add option to set number needed for grub hub
* updates to grub hunt goal based on review
* copy/paste fix
* account for 'any' goal and fix overriding non-grub goals
* making sure godhome is in logic for any and removing redundancy on completion condition
* fix typing
* i hate typing
* move to stage_pre_fill
* modify "any" goal so all goals are in logic under minimal settings
* rewrite grub counting to create lookups for grubs and groups that can be reused
* use generator instead of list comprehension
* fix whitespace merging wrong
* minor code cleanup
* DS3: Version 3.0.0 (#3128)
* Update worlds/dark_souls_3/Locations.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Fix Covetous Silver Serpent Ring location
* Update location groups
This should cover pretty much all of the seriously hidden items. It
also splits out miniboss drops, mimic drops, and hostile NPC drops.
* Remove the "Guarded by Keys" group
On reflection, I don't think this is actually that useful. It'll also
get a lot muddier once we can randomize shops and ashes become
pseudo-"keys".
* Restore Knight Slayer's Ring classification
* Support infusions/upgrades in the new DS3 mod system
* Support random starting loadouts
* Make an item's NPC status orthogonal to its category
* Track location groups with flags
* Track Archipelago/Offline mismatches on the server
Also fix a few incorrect item names.
* Add additional locations that are now randomizable
* Don't put soul and multiple items in shops
* Add an option to enable whether NG+ items/locations are included
* Clean up useful item categorization
There are so many weapons in the game now, it doesn't make sense to
treat them all as useful
* Add more variety to filler items
* Iron out a few bugs and incompatibilities
* Fix more silly bugs
* Get tests passing
* Update options to cover new item types
Also recategorize some items.
* Verify the default values of `Option`s.
Since `Option.verify()` can handle normalization of option names, this allows options to define defaults which rely on that normalization. For example, it allows a world to exclude certain locations by default.
This also makes it easier to catch errors if a world author accidentally sets an invalid default.
* Make a few more improvements and fixes
* Randomize Path of the Dragon
* Mark items that unlock checks as useful
These items all unlock missable checks, but they're still good to ahve in the game for variety's sake.
* Guarantee more NPC quests are completable
* Fix a syntax error
* Fix rule definition
* Support enemy randomization
* Support online Yhorm randomization
* Remove a completed TODO
* Fix tests
* Fix force_unique
* Add an option to smooth out upgrade item progression
* Add helpers for setting location/entrance rules
* Support smoother soul item progression
* Fill extra smoothing items into conditional locations as well as other worlds
* Add health item smoothing
* Handle infusions at item generation time
* Handle item upgrades at genreation time
* Fix Grave Warden's Ashes
* Don't overwrite old rules
* Randomize items based on spheres instead of DS3 locations
* Add a smoothing option for weapon upgrades
* Add rules for crow trades
* Small fixes
* Fix a few more bugs
* Fix more bugs
* Try to prevent Path of the Dragon from going somewhere it doesn't work
* Add the ability to provide enemy presets
* Various fixes and features
* Bug fixes
* Better Coiled Sword placement
* Structure DarkSouls3Location more like DarkSouls3Item
* Add events to make DS3's spheres more even
* Restructure locations to work like items do now
* Add rules for more missable locations
* Don't add two Storm Rulers
* Place Hawk Ring in Farron Keep
* Mark the Grass Crest Shield as useful
* Mark new progression items
* Fix a bug
* Support newer better Path of the Dragon code
* Don't lock the player out of Coiled Sword
* Don't create events for missable locations
* Don't throw strings
* Don't smooth event items
* Properly categorize Butcher Knife
* Be more careful about placing Yhorm in low-randomization scenarios
* Don't try to smooth DLC items with DLC disabled
* Fix another Yhorm bug
* Fix upgrade/infusion logic
* Remove the PoolType option
This distinction is no longer meaningful now that every location in
the game of each type is randomized
* Categorize HWL: Red Eye Orb as an NPC location
* Don't place Storm Ruler on CA: Coiled Sword
* Define flatten() locally to make this APWorld capable
* Fix some more Leonhard weirdness
* Fix unique item randomization
* Don't double Twin Dragon Greatshield
* Remove debugging print
* Don't add double Storm Ruler
Also remove now-redundant item sorting by category in create_items.
* Don't add double Storm Ruler
Also remove now-redundant item sorting by category in create_items.
* Add a missing dlc_enabled check
* Use nicer options syntax
* Bump data_version
* Mention where Yhorm is in which world
* Better handle excluded events
* Add a newline to Yhorm location
* Better way of handling excluded unradomized progression locations
* Fix a squidge of nondeterminism
* Only smooth items from this world
* Don't smooth progression weapons
* Remove a location that doesn't actually exist in-game
* Classify Power Within as useful
* Clarify location names
* Fix location requirements
* Clean up randomization options
* Properly name Coiled Sword location
* Add an option for configuring how missable items are handled
* Fix some bugs from location name updates
* Fix location guide link
* Fix a couple locations that were busted offline
* Update detailed location descriptions
* Fix some bugs when generating for a multiworld
* Inject Large Leather Shield
* Fix a few location issues
* Don't allow progression_skip_balancing for unnecessary locs
* Update some location info
* Don't uniquify the wrong items
* Fix some more location issues
* More location fixes
* Use hyphens instead of parens for location descriptions
* Update and fix more locations
* Fix Soul of Cinder boss name
* Fix some logic issues
* Add item groups and document item/location groups
* Fix the display name for "Impatient Mimics"
* Properly handle Transposing Kiln and Pyromancer's Flame
* Testing
* Some fixes to NPC quests, late basin, and transposing kiln
* Improve a couple location names
* Split out and improve missable NPC item logic
* Don't allow crow trades to have foreign items
* Fix a variable capture bug
* Make sure early items are accessible early even with early Castle
* Mark ID giant slave drops as missable
* Make sure late basin means that early items aren't behind it
* Make is_location_available explicitly private
* Add an _add_item_rule utility that checks availability
* Clear excluded items if excluded_locations == "unnecessary"
* Don't allow upgrades/infusions in crow trades
* Fix the documentation for deprecated options
* Create events for all excluded locations
This allows `can_reach` logic to work even if the locations are
randomized.
* Fix up Patches' and Siegward's logic based on some manual testing
* Factor out more sub-methods for setting location rules
* Oops, left these in
* Fixing name
* Left that in too
* Changing to NamedRange to support special_range_names
* Alphabetizing
* Don't call _is_location_available on foreign locations
* Add missing Leonhard items
* Changing late basin to have a post-small-doll option
* Update basin option, add logic for some of Leonhard Hawkwood and Orbeck
* Simplifying an option, fixing a copy-paste error
* Removing trailing whitespace
* Changing lost items to go into start inventory
* Revert Basin changes
* Oops
* Update Options.py
* Reverting small doll changes
* Farron Keep boss requirement logic
* Add Scroll for late_dlc
* Fixing excluded unnecessary locations
* Adding Priestess Ring as being after UG boss
* Removing missable from Corvian Titanite Slab
* Adding KFF Yhorm boss locks
* Screams about Creighton
* Elite Knight Set isn't permanently missable
* Adding Kiln requirement to KFF
* fixing valid_keys and item groups
* Fixing an option-checker
* Throwing unplaceable Storm Ruler into start inventory
* Update locations
* Refactor item injection
* Update setup doc
* Small fixes
* Fix another location name
* Fix injection calculation
* Inject guaranteed items along with progression items
* Mark boss souls as required for access to regions
This allows us to set quest requirements for boss souls and have them
automatically propagated to regions, means we need less machinery for
Yhorm bosses, and allows us to get rid of a few region-transition
events.
* Make sure Sirris's quest can be completed before Pontiff
* Removing unused list
* Changing dict to list
* Removing unused test
* Update __init__.py
* self.multiworld.random -> self.random (#9)
* Fix some miscellaneous location issues
* Rewrite the DS3 intro page/FAQ
* Removing modifying the itempool after fill (#7)
Co-authored-by: Natalie Weizenbaum <nweiz@google.com>
* Small fixes to the setup guide (#10)
Small fixes, adding an example for connecting
* Expanded Late Basin of Vows and Late DLC (#6)
* Add proper requirements for CD: Black Eye Orb
* Fix Aldrich's name
* Document the differences with the 2.x.x branch
* Don't crash if there are more items than locations in smoothing
* Apply suggestions from code review
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Code review
* Fix _replace_with_filler
* Don't use the shared flatten function in SM
* Track local items separately rather than iterating the multiworld
* Various formatting/docs changes suggested by PyCharm (#12)
* Drop deprecated options
* Rename "offline randomizer" to "static randomizer" which is clearer
* Move `enable_*_locations` under removed options.
* Avoid excluded locations for locally-filled items
* Adding Removed options to error (#14)
* Changes for WebHost options display and the options overhaul
* unpack iterators in item list (#13)
* Allow worlds to add options to prebuilt groups
Previously, this crashed because `typing.NamedTuple` fields such as
`group.name` aren't assignable. Now it will only fail for group names
that are actually incorrectly cased, and will fail with a better error
message.
* Style changes, rename exclude behavior options, remove guaranteed items option
* Spacing/Formatting (#18)
* Various Fixes (#19)
* Universally Track Yhorm (#20)
* Account for excluded and missable
* These are behaviors now
* This is singular, apparently
* Oops
* Fleshing out the priority process
* Missable Titanite Lizards and excluded locations (#22)
* Small style/efficiency changes
* Final passthrough fixes (#24)
* Use rich option formatting
* Make the behavior option values actual behaviors (#25)
* Use !=
* Remove unused flatten utility
* Some changes from review (#28)
* Fixing determinism and making smooth faster (#29)
* Style change
* PyCharm and Mypy fixes (#26)
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Change yhorm default (#30)
* Add indirect condition (#27)
* Update worlds/dark_souls_3/docs/locations_en.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Ship all item IDs to the client
This avoids issues where items might get skipped if, for instance,
they're only in the starting inventory.
* Make sure to send AP IDs for infused/upgraded weapons
* Make `RandomEnemyPresetOption` compatible with ArchipelagoMW/Archipelago#3280 (#31)
* Fix cast
* More typing and small fixes (#32)
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Exempt-Medic <ExemptMedic@Gmail.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Core: Check parent_region.can_reach first in Location.can_reach (#3724)
* Core: Check parent_region.can_reach first in Location.can_reach
The comment about self.access_rule computing faster on average appears
to no longer be correct with the current caching system for region
accessibility, resulting in self.parent_region.can_reach computing
faster on average.
Generation of template yamls for each game that does not require a rom
to generate, generated with `python -O .\Generate.py --seed 1`
(all durations averaged over at 4 or 5 generations):
Full generation with `spoiler: 1` and no progression balancing:
89.9s -> 72.6s
Only output from above case:
2.6s -> 2.2s
Full generation with `spoiler: 3` and no progression balancing:
769.9s -> 627.1s
Only playthrough calculation + paths from above case:
680.5s -> 555.3s
Full generation with `spoiler: 1` with default progression balancing:
123.5s -> 98.3s
Only progression balancing from above case:
11.3s -> 9.6s
* Update BaseClasses.py
* Update BaseClasses.py
* Update BaseClasses.py
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Core: Speed up CollectionState.copy() using built-in copy methods (#3678)
All the types being copied are built-in types with their own `copy()`
methods, so using the `copy` module was a bit overkill and also slower.
This patch replaces the use of the `copy` module in
`CollectionState.copy()` with using the built-in `.copy()` methods.
The copying of `reachable_regions` and `blocked_connections` was also
iterating the keys of each dictionary and then looking up the value in
the dictionary for that key. It is faster, and I think more readable, to
iterate the dictionary's `.items()` instead.
For me, when generating a multiworld including the template yaml of
every world with `python -O .\Generate.py --skip_output`, this patch
saves about 2.1s. The overall generation duration for these yamls varies
quite a lot, but averages around 160s for me, so on average this patch
reduced overall generation duration (excluding output duration) by
around 1.3%.
Timing comparisons were made by calling time.perf_counter() at the start
and end of `CollectionState.copy()`'s body, and summing the differences
between the starts and ends of the method body into a global variable
that was printed at the end of generation.
Additional timing comparisons were made, using the `timeit` module, of
the individual function calls or dictionary comprehensions used to
perform the copying.
The main performance cost was `copy.deepcopy()`, which gets slow as the
number of keys multiplied by the number of values within the
sets/Counters gets large, e.g., to deepcopy a `dict[int, Counter[str]]`
with 100 keys and where each Counter contains 100 keys was 30x slower
than most other tested copying methods. Increasing the number of dict
keys or Counter keys only makes it slower.
* HK: fix iterating all worlds instead of only HK worlds in stage_pre_fill (#3750)
Would cause generation to fail when generating with HK and another game.
Mistake in 6803c373e5.
* DOOM, DOOM II: Update steam URLs (#3746)
* TLOZ: world: multiworld (#3752)
* SoE: fix determinism (#3745)
Fixes randomly placed ingredients not being deterministic (depending on settings)
and in turn also fixes logic not being deterministic if they get replaced by fragments.
* Core: fix invalid __package__ of zipped worlds (#3686)
* fix invalid package fix
* add comment describing fix
* Clique: Update to new options API (#3759)
* Timespinner: Fix eels check logic #3777
* TUNIC: Add note to Universal Tracker stuff #3772
* Core: change start inventory from pool to warn when nothing to remove (#3158)
* makes start inventory from pool warn and fixes the itempool to match when it can not find a matching item to remove
* calc the difference correctly
* save new filler and non-removed items differently so we don't remove existing items at random
* Undertale: Fix slot_data and options.as_dict() (#3774)
* Undertale: Fixing slot_data
* Booleans were difficult
* Core: Error on empty options.as_dict (#3773)
* Error on empty options.as_dict
* ValueError instead
* Apply suggestions from code review
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Core: Remove broken unused code from Options.py (#3781)
"Unused" is a baseless assertion, but this code path has been crashing on the first statement for 6 months and noone's complained
* Core: Two Small Fixes (#3782)
* Core: recontextualize `CollectionState.collect` (#3723)
* Core: renamed `CollectionState.collect` arg from `event` to `prevent_sweep` and remove forced collection
* Update TestDungeon.py
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Core: dump all item placements for generation failures. (#3237)
* Core: dump all item placements for generation failures
* pass the multiworld from remaining fill
* change how the args get handled to fix formatting
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Tests: fix the all games multiworld test (#3788)
* TUNIC: Swap from multiworld.get to world.get for applicable things (#3789)
* Swap from multiworld.get to world.get for applicable things
* Why was this even here in the first place?
* I have no idea (#3791)
* TUNIC: Add off and on aliases for the Entrance Rando option #3794
* Stardew Valley: Add Quality Bobber in the logic rules for fish quality gold and above #3792
* Core: Require excluded locations to be reachable with full/locations accessibility (#3802)
* Make excludeds reachable
* Update all_state tests
* Lingo: Fixed Initiated-side Eight Door not opening (#3793)
* TUNIC: Give the fox a gun (in logic) (very small PR) (#3790)
* Add bomb wall logic
* Remove option call from can_shop
* Gun for the envoy blocking Quarry
* has_sword -> can_shop on cube cave entrance region
* TLOZ: Fix non-deterministic item pool generation (#3779)
* TLOZ: Fix non-deterministic item pool generation
The way the item pool was constructed involved iterating unions of sets.
Sets are unordered, so the order of iteration of these combined sets
would be non-deterministic, resulting in the items in the item pool
being generated in a different order with the same seed.
Rather than creating unions of sets at all, the original code has been
replaced with using Counter objects. As a dict subclass, Counter
maintains insertion order, and its update() method makes it simple to
combine the separate item dictionaries into a single dictionary with the
total count of each item across each of the separate item dictionaries.
Fixes#3664 - After investigating more deeply, the only differences I
could find between generations of the same seed was the order of items
created by TLOZ, so this patch appears to fix the non-deterministic
generation issue. I did manage to reproduce the non-deterministic
behaviour with just TLOZ in the end, but it was very rare. I'm not
entirely sure why generating with SMZ3 specifically would cause the
non-deterministic behaviour in TLOZ to be frequently present, whereas
generating with other games or multiple TLOZ yamls would not.
* Change import order
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Docs: Update 'tag' documentation (#3632)
* Add tag docs for HintGame
* Apply suggestions from code review
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Make Tracker/TextOnly consistent with previous commit
* Apply suggestion
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* fix spacing
* Apply suggestion
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* apply suggestion correcting footnotes
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* [OSRS] Fixes Incorrect filler item names causing failures on tests. (#3768)
* Updates filler item names to match the actual item names
* Adds more descriptive error message in case this error comes back
* Properly raises exception instead of just text
* Replaces exception with assert
* Fix !remaining for cross-world items (#3732)
* Fix !remaining for other worlds
* Typing fixes for the previous change
* Update LocationStore test to match what get_remaining now returns
* Core: early_local != local_early #3780
* Pokemon Emerald: Ensure dig tutor is always usable (#3660)
* Pokemon Emerald: Ensure dig tutor is always usable
* Pokemon Emerald: Clarify comment
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Core: type for `CommonContext.ui` (#3796)
* Core: type for `CommonContext.ui`
* use `Optional`
* VVVVVV: Make unnecessary Trinkets filler (#3806)
* Make unnecessary trinkets filler
* Proper syntax
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Kingdom Hearts: Implement New Game (#3201)
* Added Final Ansem Goal
* Update __init__.py
* Update Rules.py
* New EotW logic
* Update __init__.py
* Update __init__.py
* Update Items.py
* Update Rules.py
* Rename Location to be more meaningful, logic fixes
* Removed Aerith locations
* Change to allow randomized keyblade stats
* Fixed incorrect option description. Fixed victory locations for alternative win condition settings
* Commit
* Lots of changes
* Fixes
* Fixes
* Update Rules.py
* Update Rules.py
* Update Rules.py
* Update Rules.py
* Fixes
* Update Rules.py
* Update Rules.py
* Update Options.py
* Old Book is not required
* Added Jungle Slider
* Add Cid Check
* Add Wonderland Book Check
* Add OC Green Trinity
* Add Inferno Band Event
* Add Kurt Zisa Zantetsuken and Unknown EXP Necklace checks
* Update Locations.py
* Fix Final Ansem Goal
* Update __init__.py
* Update __init__.py
* Add options to exclude super bosses and 100 acre wood
* Fix puppies trp, remove cid check
* Fix 100 Acre Wood Option
* Material to Empty Bottle
* Fixed rules, location names, etc
* Fix super bosses
* Add item + location groups, level sanity
* Fix location and item group names
* Add Bad Starting Weapons Option
* Logic Error for 100 Acre Wood
* Update Rules.py
* Update __init__.py
* Fixes related to randomized keyblade stats and super bosses
* Credits and Fixes
* Logic fixes, location name group changes
* Update Options.py
* Update worlds/kh1/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/docs/en_Kingdom Hearts.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update .gitignore
* Update CODEOWNERS
* Update docs/CODEOWNERS
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Fixed Atlantica item group name
* Update CODEOWNERS
* Update Client.py
* Update Items.py
* Update __init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update Rules.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update Rules.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update Rules.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Fixed report group name
* Fixes for PR
* Update Options.py
* Push changes for making the Final Rest Door appear, few option fixes
* Update Rules.py
* Website formatting, 0 min for reports, option description typo
* Create KH1Client.py
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update Options.py
* Update Options.py
* Update Rules.py
* Update Rules.py
* Update Rules.py
* Add Donald and Goofy Death Link
* Add fight logic for optional bosses
* Update __init__.py
* Update Options.py
* Update worlds/kh1/Options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update Client.py
* Update kh1_en.md
* Update __init__.py
* Cleaning up for PR
* Update Client.py
* Added event locations for vanilla items
* Add proper location groups and auto hint synth shop items when entering
* so many changes
* Update Rules.py
* fixed oathkeeper and crabclaw logic
* Update Rules.py
* Update Rules.py
* Update Rules.py
* Update Rules.py
* Update en_Kingdom Hearts.md
* Update en_Kingdom Hearts.md
* fixing text
* Update kh1_en.md
* Addition of new key items
* Update Regions.py
* Push for start item from pool test
* Update worlds/kh1/Options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Document update
* Update Rules.py
* Added starting world range and final rest goal option
* Update kh1_en.md
* Update en_Kingdom Hearts.md
* Update __init__.py
* Update __init__.py
* Clean up options descriptions
* Update worlds/kh1/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/Options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/Client.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Fix grammar in document
* Update __init__.py
* Update worlds/kh1/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Removed return type
* Update __init__.py
* Update __init__.py
* Update worlds/kh1/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update __init__.py
* Fix missing i replacement, rework set rules to use "self" instead of a million arguments
* Update KH1Client.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Reformat rules, fix bug with exp mult, add to readme
* Clean up regions, fix client
* Fix item send prompt
* Update worlds/kh1/docs/en_Kingdom Hearts.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/docs/en_Kingdom Hearts.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/docs/en_Kingdom Hearts.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/docs/en_Kingdom Hearts.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/docs/en_Kingdom Hearts.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/docs/en_Kingdom Hearts.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/docs/en_Kingdom Hearts.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/docs/kh1_en.md
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/test/test_goal.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Locations.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Regions.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Locations.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Locations.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Regions.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Regions.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/__init__.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Fix so many suggestions
* removed junk in missable locations option
* Update __init__.py
* Change credits order
* Update en_Kingdom Hearts.md
* Standardize punctuation
* Update en_Kingdom Hearts.md
* Update en_Kingdom Hearts.md
* Update Regions.py
* Removed "disclude" options in generation fillers
* Update Rules.py
* Update __init__.py
* Fix cemetery typo
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Add option groups and option presets
* Update worlds/kh1/__init__.py
That's a good idea!
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Presets.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* fixed HB rule and formatting on a line in Items.py
* Fix logic bug with Geppetto's House postcard
* Update Rules.py
* Update Options.py
* Update __init__.py
* Update __init__.py
* Huge under-the-hood update for PR
* More updates for PR
* Update worlds/kh1/__init__.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update worlds/kh1/Rules.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update __init__.py
---------
Co-authored-by: Scipio Wright <scipiowright@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: Fix incorrect default state checked in MultiWorld.can_beat_game (#3813)
`MultiWorld.can_beat_game()` with no arguments would initially check if
`self.state` is beatable, but then would create an empty state,
`state = CollectionState(self)`, to sweep spheres from to determine if
the game is beatable. The issue was that `self.state` and the new empty
state could be different.
Currently, it seems that everywhere in Archipelago's codebase that calls
`MultiWorld.can_beat_game()` with no arguments or `starting_state=None`
has a `self.state` that only contains precollected items, so the new
empty state happens to result in an equivalent state, but this should
not be relied upon to always be the case.
This patch changes `can_beat_game()` to initially check if the new empty
state is beatable instead of `self.state`.
This appears to be a bug introduced way back in 27b6dd8bd7Fixes#3742
* The Witness: Fix Tunnels Theater Flower EP Access Logic + Add Unit Test for it (and Expert PP2) (#3807)
* Tunnels Theater Flowers fix + Flowers&PP2 Unit Tests
* copypaste
* Can just do it like this
* This is even better probably
* Also do some cleanup :3
* God damnit
* Docs: `NetworkItem.player` (#3811)
* Docs: `NetworkItem.player`
In many contexts, it's difficult to tell whether this is the sending player or the receiving player.
* correct player info
* Update NetUtils.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Minecraft: Update to new options system. (#3765)
* Move to new options system.
switch to using self.random
reformat rules file.
* further reformats
* fix tests to use new options system.
* fix slot data to not use self.multiworld
* I hate python
* new starting_items docstring to prepare for 1.20.5+ item components.
fix invalid json being output to starting_items
* more typing fixes.
* stupid quotes around type declarations
* removed unused variable in ItemPool.py
change null check in Structures.py
* update rules "self" variable to a "world: MinecraftWorld" variable
* get key, and not value for required bosses.
* The Witness: Panel Hunt Mode (#3265)
* 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>
* The Witness: Add "vague" hints making use of other games' region names and location groups (#2921)
* Vague hints work! But, the client will probably reveal some of the info through scouts atm
* Fall back on Everywhere if necessary
* Some of these failsafes are not necessary now
* Limit region size to 100 as well
* Actually... like this.
* Nutmeg
* Lol
* -1 for own player but don't scout
* Still make always/priority ITEM hints
* fix
* uwu notices your bug
* The hints should, like, actually work, you know?
* Make it a Toggle
* Update worlds/witness/hints.py
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* Update worlds/witness/hints.py
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* Make some suggested changes
* Make that ungodly equation a bit clearer in terms of formatting
* make that not sorted
* Add a warning about the feature in the option tooltip
* Make using region names experimental
* reword option tooltip
* Note about singleplayer
* Slight rewording again
* Reorder the order of priority a bit
* this condition is unnecessary now
* comment
* No wait the order has to be like this
* Okay now I think it's correct
* Another comment
* Align option tooltip with new behavior
* slight rewording again
* reword reword reword reword
* -
* ethics
* Update worlds/witness/options.py
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* Rename and slight behavior change for local hints
* I think I overengineered this system before. Make it more consistent and clear now
* oops I used checks by accident
* oops
* OMEGA OOPS
* Accidentally commited a print statemetn
* Vi don't commit nonsense challenge difficulty impossible
* This isn't always true but it's good enough
* Update options.py
* Update worlds/witness/options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Scipio :3
* switch to is_event instead of checking against location.address
* oop
* Update test_roll_other_options.py
* Fix that unit test problem lol
* Oh is this not fixed in the apworld?
---------
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Mega Man 2: Implement New Game (#3256)
* initial (broken) commit
* small work on init
* Update Items.py
* beginning work, some rom patches
* commit progress from bh branch
* deathlink, fix soft-reset kill, e-tank loss
* begin work on targeting new bhclient
* write font
* definitely didn't forget to add the other two hashes no
* update to modern options, begin colors
* fix 6th letter bug
* palette shuffle + logic rewrite
* fix a bunch of pointers
* fix color changes, deathlink, and add wily 5 req
* adjust weapon weakness generation
* Update Rules.py
* attempt wily 5 softlock fix
* add explicit test for rbm weaknesses
* fix difficulty and hard reset
* fix connect deathlink and off by one item color
* fix atomic fire again
* de-jank deathlink
* rewrite wily5 rule
* fix rare solo-gen fill issue, hopefully
* Update Client.py
* fix wily 5 requirements
* undo fill hook
* fix picopico-kun rules
* for real this time
* update minimum damage requirement
* begin move to procedure patch
* finish move to APPP, allow rando boobeam, color updates
* fix color bug, UT support?
* what do you mean I forgot the procedure
* fix UT?
* plando weakness and fixes
* sfx when item received, more time stopper edge cases
* Update test_weakness.py
* fix rules and color bug
* fix color bug, support reduced flashing
* major world overhaul
* Update Locations.py
* fix first found bugs
* mypy cleanup
* headerless roms
* Update Rom.py
* further cleanup
* work on energylink
* el fixes
* update to energylink 2.0 packet
* energylink balancing
* potentially break other clients, more balancing
* Update Items.py
* remove startup change from basepatch
we write that in patch, since we also need to clean the area before applying
* el balancing and feedback
* hopefully less test failures?
* implement world version check
* add weapon/health option
* Update Rom.py
* x/x2
* specials
* Update Color.py
* Update Options.py
* finally apply location groups
* bump minor version number instead
* fix duplicate stage sends
* validate wily 5, tests
* see if renaming fixes
* add shuffled weakness
* remove passwords
* refresh rbm select, fix wily 5 validation
* forgot we can't check 0
* oops I broke the basepatch (remove failing test later)
* fix solo gen fill error?
* fix webhost patch recognition
* fix imports, basepatch
* move to flexibility metric for boss validation
* special case boobeam trap
* block strobe on stage select init
* more energylink balancing
* bump world version
* wily HP inaccurate in validation
* fix validation edge case
* save last completed wily to data storage
* mypy and pep8 cleanup
* fix file browse validation
* fix test failure, add enemy weakness
* remove test seed
* update enemy damage
* inno setup
* Update en_Mega Man 2.md
* setup guide
* Update en_Mega Man 2.md
* finish plando weakness section
* starting rbm edge case
* remove * imports
* properly wrap later weakness additions in regen playthrough
* fix import
* forgot readme
* remove time stopper special casing
since we moved to proper wily 5 validation, this special casing is no longer important
* properly type added locations
* Update CODEOWNERS
* add animation reduction
* deprioritize Time Stopper in rush checks
* special case wily phase 1
* fix key error
* forgot the test
* music and general cleanup
* the great rename
* fix import
* thanks pycharm
* reorder palette shuffle
* account for alien on shuffled weakness
* apply suggestions
* fix seedbleed
* fix invalid buster passthrough
* fix weakness landing beneath required amount
* fix failsafe
* finish music
* fix Time Stopper on Flash/Alien
* asar pls
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* world helpers
* init cleanup
* apostrophes
* clearer wording
* mypy and cleanup
* options doc cleanup
* Update rom.py
* rules cleanup
* Update __init__.py
* Update __init__.py
* move to defaultdict
* cleanup world helpers
* Update __init__.py
* remove unnecessary line from fill hook
* forgot the other one
* apply code review
* remove collect
* Update rules.py
* forgot another
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Blasphemous: Total overhaul (#3355)
* Blasphemous: WIP overhaul
* Entrance rule mistake
* stuff
* Getting closer
* Real?? Maybe??
* Don't fail me now 🙏
* Add starting location tests
* More tests (it still doesn't work actually 😔)
* REAL
* Add unreachable regions to test_reachability.py
* PR ready
- Remove unused functions from init
- Use group exclusive functions in rules
- Style changes
* Bump required client version
* Clean up unused imports
* Change slot data
* Review fixes
- Prevent strength calculations from including excess items
- Add new lines to ends of files
- Fix missed deprecated option and random usage in init
* Update option docstrings, add groups
* Add preprocessor files
* Update option docstrings again actually
* Update player strength calculation
* Rename group methods
* Fix missing logic for RESCUED_CHERUB_06
* Register indirect conditions
* Register indirect conditions (part 2)
* Update extracted logic, change slot data key
* Add region to excluded list
* A capital letter
* Use camelCase keys in preprocessor
* Write some of new setup guide
* Remove indents before list points
* Change locationinfo to list of dictonaries
* Finish docs, update extractor config and data
* Mark region_data.py as generated
* Suggested changes
* More suggested changes
* Suggested changes again
- Use OptionError
- Create list of disabled locations before looping
- Check if options are equal to str instead of int
- Clean up start location override
- Reword some of setup guide
- Organize location list
- Remove unnecessary escaped quotes from option docstrings
- Add world type to test base
* C# moment
* Requested changes
* Update .gitattributes
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* MM2: fix Wily 5 Time Stopper rule (#3824)
* fix time stopper rule
* that was the entirely wrong rule actually
* YachtDice: implement new game (#3482)
* Add the yacht dice (from other git) world to the yacht dice fork
* Update .gitignore
* Removed zillion because it doesn't work
* Update .gitignore
* added zillion again...
* Now you can have 0 extra fragments
* Added alt categories, also options
* Added item categories
* Extra categories are now working! 🐶
* changed options and added exceptions
* Testing if I change the generate.py
* Revert "Testing if I change the generate.py"
This reverts commit 7c2b3df617.
* ignore gitignore
* Delete .gitignore
* Update .gitignore
* Update .gitignore
* Update logic, added multiplicative categories
* Changed difficulties
* Update offline mode so that it works again
* Adjusted difficulty
* New version of the apworld, with 1000 as final score, always
Will still need to check difficulty and weights of adding items.
Website is not ready yet, so this version is not usable yet :)
* Changed yaml and small bug fixes
Fix when goal and max are same
Options: changed chance to weight
* no changes, just whitespaces
* changed how logic works
Now you put an array of mults and the cpu gets a couple of tries
* Changed logic, tweaked a bit too
* Preparation for 2.0
* logic tweak
* Logic for alt categories properly now
* Update setup_en.md
* Update en_YachtDice.md
* Improve performance of add_distributions
* Formatting style
* restore gitignore to APMW
* Tweaked generation parameters and methods
* Version 2.0.3
manual input option
max score in logic always 2.0.3
faster gen
* Comments and editing
* Renamed setup guide
* Improved create_items code
* init of locations: remove self.event line
* Moved setting early items to generate_early
* Add my name to CODEOWNERS
* Added Yacht Dice to the readme in list of games
* Improve performance of Yacht Dice
* newline
* Improve typing
* This is actually just slower lol
* Update worlds/yachtdice/Items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update Options.py
* Styling
* finished text whichstory option
* removed roll and rollfragments; not used
* import; worlds not world :)
* Option groups!
* ruff styling, fix
* ruff format styling!
* styling and capitalization of options
* small comment
* Cleaned up the "state_is_a_list" a little bit
* RUFF 🐶
* Changed filling the itempool for efficiency
Now, we start with 17 extra items in the item pool, it's quite likely you need at least 17 items (~80%?).
And then afterwards, we delete items if we overshoot the target of 1000, and add items if we haven't reached an achievable score of 1000 yet. Also, no need to recompute the entire logic when adding points.
* 🐶
* Removed plando "fix"
* Changed indent of score multiplier
* faster location function
* Comments to docstrings
* fixed making location closest to goal_score be goal_score
* options format
* iterate keys and values of a dict together
* small optimization ListState
* faster collection of categories
* return arguments instead of making a list (will 🐶 later)
* Instead of turning it into a tuple, you can just make a tuple literal
* remove .keys()
* change .random and used enumerate
* some readability improvements
* Remove location "0", we don't use that one
* Remove lookup_id_to_name entirely
I for sure don't use it, and as far as I know it's not one of the mandatory functions for AP, these are item_name_to_id and location_name_to_id.
* .append instead of += for single items, percentile function changed
Also an extra comment for location ids.
* remove ) too many
* Removed sorted from category list
* Hash categories (which makes it slower :( )
Maybe I messed up or misunderstood...
I'll revert this right away since it is 2x slower, probably because of sorted instead of sort?
* Revert "Hash categories (which makes it slower :( )"
This reverts commit 34f2c1aed8.
* temporary push: 40% faster generation test
Small changes in logic make the generation 40% faster.
I'll have to think about how big the changes are. I suspect they are rather limited.
If this is the way to go, I'll remove the temp file and redo the YachtWeights file, I'll remove the functions there and just put the new weights here.
* Add Points item category
* Reverse changes of bad idea :)
* ruff 🐶
* Use numpy and pmf function to speed up gen
Numpy has a built-in way to sum probability mass functions (pmf).
This shaves of 60% of the generation time :D
* Revert "Use numpy and pmf function to speed up gen"
This reverts commit 9290191cb3.
* Step inbetween to change the weights
* Changed the weights to make it faster
135 -> 81 seconds on 100 random yamls
* Adjusted max_dist, split dice_simulation function
* Removed nonlocal and pass arguments instead
* Change "weight-lists" to Dict[str, float]
* Removed the return from ini_locations.
Also added explanations to cat_weights
* Choice options; dont'use .value (will ruff later)
* Only put important options in slotdata
* 🐶
* Add Dict import
* Split the cache per player, limit size to 400.
* 🐶
* added , because of style
* Update apworld version to 2.0.6
2.0.5 is the apworld I released on github to be tested
I never separately released 2.0.4.
* Multiple smaller code improvements
- changed names in YachtWeights so we don't need to translate them in Rules anymore
- we now remember which categories are present in the game, and also put this in slotdata. This we do because only one of two categories is present in a game. If for some reason both are present (plando/getitem/startinventory), we now know which category to ignore
-
* 🐶 ruff
* Mostly minimize_extra_items improvements
- Change logic, generation is now even faster (0.6s per default yaml).
- Made the option 'minimize_extra_items' do a lot more, hopefully this makes the impact of Yacht Dice a little bit less, if you want that. Here's what is also does now:
- you start with 2 dice and 2 rolls
- there will be less locations/items at the start of you game
* ruff 🐶
* Removed printing options
* Reworded some option descriptions
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Yacht Dice: setup: change release-link to latest (#3827)
On the installation page, link to the latest release, instead of the page with all releases
* ALTTP: Minor Tweaks to the Adjuster UI (#2533)
* Tweak ALTTP Adjuster padding/size to accommodate resizing
- Set minsize so the actions buttons on bottom are always visible.
- Added a minor amount of padding around the top level objects.
- Increased the size of the entry fields for roms to match general
button size.
- Updated layout calls so vertical spacing doesn't increase
between fields when maximizing the window
- Added a little bit of spacing on the rom label so it more closely
lines up with the other rom selection field
* Tweak ALTTP Adjuster padding/size to accommodate resizing
- Set minsize so the actions buttons on bottom are always visible.
- Added a minor amount of padding around the top level objects.
- Increased the size of the entry fields for roms to match general
button size.
- Updated layout calls so vertical spacing doesn't increase
between fields when maximizing the window
- Added a little bit of spacing on the rom label so it more closely
lines up with the other rom selection field
* LTTP: Fix a bug in Triforce Pieces Mode: Extra (#3784)
When triforce_pieces_mode is set to "extra", the number of Triforce pieces in the pool should be equal to the number required plus the number extra. The number available was being used in this calculation, instead of the number required.
* The Witness: Ban Excluded Panels from Panel Hunt (#3818)
* excluded panels should not be picked by panel hunt
* ban excluded panels from panel hunt
* Get rid of an unused variable
* Purge the world: multiworld evil from osrs (#3751)
* Core, some worlds: Rename sweep_for_events to sweep_for_advancements (#3571)
* Rename sweep_for_events to sweep_for_advancements
* more event->advancement renames
* oops accidentally deleted the deprecation thing in the force push
* Update TestDungeon.py
* Update BaseClasses.py
* Update BaseClasses.py
* oops
* utils.deprecate
* treble, you had no idea how right you were
* Update test_panel_hunt.py
* Update BaseClasses.py
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Core: some typing and cleaning in `BaseClasses.py` (#3391)
* Core: some typing and cleaning in `BaseClasses.py`
* more backwards `__repr__`
* double-quote string
* remove some end-of-line whitespace
* Celeste 64: Typo #3840
oops
* Kingdom Hearts: Make Ceiling Division Human-Readable #3839
* The Witness: Shuffle Dog (#3425)
* 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?
* The Witness: Switch to world.player_name (#3693)
* lint
* player_name
* oops lmao
* shorten
* Launcher: Update message that displays when installing a custom apworld for a game in main (#3607)
* kvui: assert kivy is not imported before kvui (#3823)
* Pokemon Emerald: Send current map to trackers (#3726)
---------
Co-authored-by: Alchav <59858495+Alchav@users.noreply.github.com>
Co-authored-by: alchav <alchav@jalchavware.com>
Co-authored-by: Phaneros <31861583+MatthewMarinets@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Remy Jette <remy@remyjette.com>
Co-authored-by: Jarno <jarnowesthof@gmail.com>
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: GodlFire <46984098+GodlFire@users.noreply.github.com>
Co-authored-by: Kory Dondzila <korydondzila@gmail.com>
Co-authored-by: Trevor L <80716066+TRPG0@users.noreply.github.com>
Co-authored-by: wildham <64616385+wildham0@users.noreply.github.com>
Co-authored-by: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Co-authored-by: Kono Tyran <Kono@koifysh.dev>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: SunCat <suncat.game@ya.ru>
Co-authored-by: digiholic <digikun@gmail.com>
Co-authored-by: JaredWeakStrike <96694163+JaredWeakStrike@users.noreply.github.com>
Co-authored-by: Mysteryem <Mysteryem@users.noreply.github.com>
Co-authored-by: Louis M <prog@tioui.com>
Co-authored-by: qwint <qwint.42@gmail.com>
Co-authored-by: Natalie Weizenbaum <nweiz@google.com>
Co-authored-by: Exempt-Medic <ExemptMedic@Gmail.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: Kaito Sinclaire <ks@rosenthalcastle.org>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: Star Rauchenberger <fefferburbia@gmail.com>
Co-authored-by: Emily <35015090+EmilyV99@users.noreply.github.com>
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
Co-authored-by: Scrungip <95324612+Scrungip@users.noreply.github.com>
Co-authored-by: gaithern <36639398+gaithern@users.noreply.github.com>
Co-authored-by: KonoTyran <Kono.Tyran@gmail.com>
Co-authored-by: Spineraks <markvanderboor@hotmail.com>
Co-authored-by: B1t <christopher.j.wallis@gmail.com>
Co-authored-by: Kappatechy <jmdewar@shaw.ca>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
Co-authored-by: PoryGone <98504756+PoryGone@users.noreply.github.com>
The `Time Rift - Alpine Skyline` region was incorrectly accessible from
Alpine Free Roam without Hookshot Badge or Umbrella.
One of the two regions that connects to the `Time Rift - Alpine Skyline`
region is `Alpine Free Roam`. The problem here is that
`Alpine Free Roam` corresponds to the intro section of Alpine Free Roam,
but the Time Rift is actually found in-game in what equates to the
`Alpine Skyline Area` region.
The entrance connecting `Alpine Free Roam` to `Alpine Skyline Area`
(`AFR -> Alpine Skyline Area`) requires the Hookshot Badge (and Umbrella
if umbrella logic is enabled), but because the entrance to
`Time Rift - Alpine Skyline` is placed in `Alpine Free Roam` instead, it
was missing the hookshot/umbrella requirements.
The missing Hookshot Badge and Umbrella requirements have been added to
`Rules.set_rift_rules()` and `Rules.set_default_rift_rules()`.
The entrances to the `Time Rift - Curly Tail Trail` and `Time Rift - The
Twilight Bell` regions are also in the `Alpine Free Roam` region, but
the logic for both of those entrances require event items that are only
accessible from the `Alpine Skyline Area` region.
The moderate logic for the Mafia Town Clock Tower Chest and Top of
Ruined Tower with nothing, and for clearing Rock the Boat without Ice
Hat were mistakenly using `add_rule` instead of `set_rule`, which was
adding the condition of `and True` which had no effect.
This patch corrects these moderate logic rules to use `set_rule`
instead.
* Attempt at optimizing rules
* docstrings
* Python 3.8
* Lasers optimisation
* Simplify conversion code and make it even faster
* mypy
* ruff
* Neat
* Add redirect to the other two modes
* Update WitnessLogic.txt
* Update WitnessLogicExpert.txt
* Update WitnessLogicVanilla.txt
* Use NamedTuple
* Ruff
* mypy thing
* Mypy stuff
* Move Redirect Event to Desert Region so it has a better name
* Update to Muse Dash 4.7.0 Muse Dash - Let's Rhythm Jam!
* Add the replaced song to the removed list.
* Oops add the other secret song to this list.
* Add trailing comma
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* 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?
* Rename sweep_for_events to sweep_for_advancements
* more event->advancement renames
* oops accidentally deleted the deprecation thing in the force push
* Update TestDungeon.py
* Update BaseClasses.py
* Update BaseClasses.py
* oops
* utils.deprecate
* treble, you had no idea how right you were
* Update test_panel_hunt.py
* Update BaseClasses.py
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
When triforce_pieces_mode is set to "extra", the number of Triforce pieces in the pool should be equal to the number required plus the number extra. The number available was being used in this calculation, instead of the number required.
* Tweak ALTTP Adjuster padding/size to accommodate resizing
- Set minsize so the actions buttons on bottom are always visible.
- Added a minor amount of padding around the top level objects.
- Increased the size of the entry fields for roms to match general
button size.
- Updated layout calls so vertical spacing doesn't increase
between fields when maximizing the window
- Added a little bit of spacing on the rom label so it more closely
lines up with the other rom selection field
* Tweak ALTTP Adjuster padding/size to accommodate resizing
- Set minsize so the actions buttons on bottom are always visible.
- Added a minor amount of padding around the top level objects.
- Increased the size of the entry fields for roms to match general
button size.
- Updated layout calls so vertical spacing doesn't increase
between fields when maximizing the window
- Added a little bit of spacing on the rom label so it more closely
lines up with the other rom selection field
* Add the yacht dice (from other git) world to the yacht dice fork
* Update .gitignore
* Removed zillion because it doesn't work
* Update .gitignore
* added zillion again...
* Now you can have 0 extra fragments
* Added alt categories, also options
* Added item categories
* Extra categories are now working! 🐶
* changed options and added exceptions
* Testing if I change the generate.py
* Revert "Testing if I change the generate.py"
This reverts commit 7c2b3df617.
* ignore gitignore
* Delete .gitignore
* Update .gitignore
* Update .gitignore
* Update logic, added multiplicative categories
* Changed difficulties
* Update offline mode so that it works again
* Adjusted difficulty
* New version of the apworld, with 1000 as final score, always
Will still need to check difficulty and weights of adding items.
Website is not ready yet, so this version is not usable yet :)
* Changed yaml and small bug fixes
Fix when goal and max are same
Options: changed chance to weight
* no changes, just whitespaces
* changed how logic works
Now you put an array of mults and the cpu gets a couple of tries
* Changed logic, tweaked a bit too
* Preparation for 2.0
* logic tweak
* Logic for alt categories properly now
* Update setup_en.md
* Update en_YachtDice.md
* Improve performance of add_distributions
* Formatting style
* restore gitignore to APMW
* Tweaked generation parameters and methods
* Version 2.0.3
manual input option
max score in logic always 2.0.3
faster gen
* Comments and editing
* Renamed setup guide
* Improved create_items code
* init of locations: remove self.event line
* Moved setting early items to generate_early
* Add my name to CODEOWNERS
* Added Yacht Dice to the readme in list of games
* Improve performance of Yacht Dice
* newline
* Improve typing
* This is actually just slower lol
* Update worlds/yachtdice/Items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Update Options.py
* Styling
* finished text whichstory option
* removed roll and rollfragments; not used
* import; worlds not world :)
* Option groups!
* ruff styling, fix
* ruff format styling!
* styling and capitalization of options
* small comment
* Cleaned up the "state_is_a_list" a little bit
* RUFF 🐶
* Changed filling the itempool for efficiency
Now, we start with 17 extra items in the item pool, it's quite likely you need at least 17 items (~80%?).
And then afterwards, we delete items if we overshoot the target of 1000, and add items if we haven't reached an achievable score of 1000 yet. Also, no need to recompute the entire logic when adding points.
* 🐶
* Removed plando "fix"
* Changed indent of score multiplier
* faster location function
* Comments to docstrings
* fixed making location closest to goal_score be goal_score
* options format
* iterate keys and values of a dict together
* small optimization ListState
* faster collection of categories
* return arguments instead of making a list (will 🐶 later)
* Instead of turning it into a tuple, you can just make a tuple literal
* remove .keys()
* change .random and used enumerate
* some readability improvements
* Remove location "0", we don't use that one
* Remove lookup_id_to_name entirely
I for sure don't use it, and as far as I know it's not one of the mandatory functions for AP, these are item_name_to_id and location_name_to_id.
* .append instead of += for single items, percentile function changed
Also an extra comment for location ids.
* remove ) too many
* Removed sorted from category list
* Hash categories (which makes it slower :( )
Maybe I messed up or misunderstood...
I'll revert this right away since it is 2x slower, probably because of sorted instead of sort?
* Revert "Hash categories (which makes it slower :( )"
This reverts commit 34f2c1aed8.
* temporary push: 40% faster generation test
Small changes in logic make the generation 40% faster.
I'll have to think about how big the changes are. I suspect they are rather limited.
If this is the way to go, I'll remove the temp file and redo the YachtWeights file, I'll remove the functions there and just put the new weights here.
* Add Points item category
* Reverse changes of bad idea :)
* ruff 🐶
* Use numpy and pmf function to speed up gen
Numpy has a built-in way to sum probability mass functions (pmf).
This shaves of 60% of the generation time :D
* Revert "Use numpy and pmf function to speed up gen"
This reverts commit 9290191cb3.
* Step inbetween to change the weights
* Changed the weights to make it faster
135 -> 81 seconds on 100 random yamls
* Adjusted max_dist, split dice_simulation function
* Removed nonlocal and pass arguments instead
* Change "weight-lists" to Dict[str, float]
* Removed the return from ini_locations.
Also added explanations to cat_weights
* Choice options; dont'use .value (will ruff later)
* Only put important options in slotdata
* 🐶
* Add Dict import
* Split the cache per player, limit size to 400.
* 🐶
* added , because of style
* Update apworld version to 2.0.6
2.0.5 is the apworld I released on github to be tested
I never separately released 2.0.4.
* Multiple smaller code improvements
- changed names in YachtWeights so we don't need to translate them in Rules anymore
- we now remember which categories are present in the game, and also put this in slotdata. This we do because only one of two categories is present in a game. If for some reason both are present (plando/getitem/startinventory), we now know which category to ignore
-
* 🐶 ruff
* Mostly minimize_extra_items improvements
- Change logic, generation is now even faster (0.6s per default yaml).
- Made the option 'minimize_extra_items' do a lot more, hopefully this makes the impact of Yacht Dice a little bit less, if you want that. Here's what is also does now:
- you start with 2 dice and 2 rolls
- there will be less locations/items at the start of you game
* ruff 🐶
* Removed printing options
* Reworded some option descriptions
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Blasphemous: WIP overhaul
* Entrance rule mistake
* stuff
* Getting closer
* Real?? Maybe??
* Don't fail me now 🙏
* Add starting location tests
* More tests (it still doesn't work actually 😔)
* REAL
* Add unreachable regions to test_reachability.py
* PR ready
- Remove unused functions from init
- Use group exclusive functions in rules
- Style changes
* Bump required client version
* Clean up unused imports
* Change slot data
* Review fixes
- Prevent strength calculations from including excess items
- Add new lines to ends of files
- Fix missed deprecated option and random usage in init
* Update option docstrings, add groups
* Add preprocessor files
* Update option docstrings again actually
* Update player strength calculation
* Rename group methods
* Fix missing logic for RESCUED_CHERUB_06
* Register indirect conditions
* Register indirect conditions (part 2)
* Update extracted logic, change slot data key
* Add region to excluded list
* A capital letter
* Use camelCase keys in preprocessor
* Write some of new setup guide
* Remove indents before list points
* Change locationinfo to list of dictonaries
* Finish docs, update extractor config and data
* Mark region_data.py as generated
* Suggested changes
* More suggested changes
* Suggested changes again
- Use OptionError
- Create list of disabled locations before looping
- Check if options are equal to str instead of int
- Clean up start location override
- Reword some of setup guide
- Organize location list
- Remove unnecessary escaped quotes from option docstrings
- Add world type to test base
* C# moment
* Requested changes
* Update .gitattributes
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* initial (broken) commit
* small work on init
* Update Items.py
* beginning work, some rom patches
* commit progress from bh branch
* deathlink, fix soft-reset kill, e-tank loss
* begin work on targeting new bhclient
* write font
* definitely didn't forget to add the other two hashes no
* update to modern options, begin colors
* fix 6th letter bug
* palette shuffle + logic rewrite
* fix a bunch of pointers
* fix color changes, deathlink, and add wily 5 req
* adjust weapon weakness generation
* Update Rules.py
* attempt wily 5 softlock fix
* add explicit test for rbm weaknesses
* fix difficulty and hard reset
* fix connect deathlink and off by one item color
* fix atomic fire again
* de-jank deathlink
* rewrite wily5 rule
* fix rare solo-gen fill issue, hopefully
* Update Client.py
* fix wily 5 requirements
* undo fill hook
* fix picopico-kun rules
* for real this time
* update minimum damage requirement
* begin move to procedure patch
* finish move to APPP, allow rando boobeam, color updates
* fix color bug, UT support?
* what do you mean I forgot the procedure
* fix UT?
* plando weakness and fixes
* sfx when item received, more time stopper edge cases
* Update test_weakness.py
* fix rules and color bug
* fix color bug, support reduced flashing
* major world overhaul
* Update Locations.py
* fix first found bugs
* mypy cleanup
* headerless roms
* Update Rom.py
* further cleanup
* work on energylink
* el fixes
* update to energylink 2.0 packet
* energylink balancing
* potentially break other clients, more balancing
* Update Items.py
* remove startup change from basepatch
we write that in patch, since we also need to clean the area before applying
* el balancing and feedback
* hopefully less test failures?
* implement world version check
* add weapon/health option
* Update Rom.py
* x/x2
* specials
* Update Color.py
* Update Options.py
* finally apply location groups
* bump minor version number instead
* fix duplicate stage sends
* validate wily 5, tests
* see if renaming fixes
* add shuffled weakness
* remove passwords
* refresh rbm select, fix wily 5 validation
* forgot we can't check 0
* oops I broke the basepatch (remove failing test later)
* fix solo gen fill error?
* fix webhost patch recognition
* fix imports, basepatch
* move to flexibility metric for boss validation
* special case boobeam trap
* block strobe on stage select init
* more energylink balancing
* bump world version
* wily HP inaccurate in validation
* fix validation edge case
* save last completed wily to data storage
* mypy and pep8 cleanup
* fix file browse validation
* fix test failure, add enemy weakness
* remove test seed
* update enemy damage
* inno setup
* Update en_Mega Man 2.md
* setup guide
* Update en_Mega Man 2.md
* finish plando weakness section
* starting rbm edge case
* remove * imports
* properly wrap later weakness additions in regen playthrough
* fix import
* forgot readme
* remove time stopper special casing
since we moved to proper wily 5 validation, this special casing is no longer important
* properly type added locations
* Update CODEOWNERS
* add animation reduction
* deprioritize Time Stopper in rush checks
* special case wily phase 1
* fix key error
* forgot the test
* music and general cleanup
* the great rename
* fix import
* thanks pycharm
* reorder palette shuffle
* account for alien on shuffled weakness
* apply suggestions
* fix seedbleed
* fix invalid buster passthrough
* fix weakness landing beneath required amount
* fix failsafe
* finish music
* fix Time Stopper on Flash/Alien
* asar pls
* Apply suggestions from code review
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* world helpers
* init cleanup
* apostrophes
* clearer wording
* mypy and cleanup
* options doc cleanup
* Update rom.py
* rules cleanup
* Update __init__.py
* Update __init__.py
* move to defaultdict
* cleanup world helpers
* Update __init__.py
* remove unnecessary line from fill hook
* forgot the other one
* apply code review
* remove collect
* Update rules.py
* forgot another
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Vague hints work! But, the client will probably reveal some of the info through scouts atm
* Fall back on Everywhere if necessary
* Some of these failsafes are not necessary now
* Limit region size to 100 as well
* Actually... like this.
* Nutmeg
* Lol
* -1 for own player but don't scout
* Still make always/priority ITEM hints
* fix
* uwu notices your bug
* The hints should, like, actually work, you know?
* Make it a Toggle
* Update worlds/witness/hints.py
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* Update worlds/witness/hints.py
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* Make some suggested changes
* Make that ungodly equation a bit clearer in terms of formatting
* make that not sorted
* Add a warning about the feature in the option tooltip
* Make using region names experimental
* reword option tooltip
* Note about singleplayer
* Slight rewording again
* Reorder the order of priority a bit
* this condition is unnecessary now
* comment
* No wait the order has to be like this
* Okay now I think it's correct
* Another comment
* Align option tooltip with new behavior
* slight rewording again
* reword reword reword reword
* -
* ethics
* Update worlds/witness/options.py
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* Rename and slight behavior change for local hints
* I think I overengineered this system before. Make it more consistent and clear now
* oops I used checks by accident
* oops
* OMEGA OOPS
* Accidentally commited a print statemetn
* Vi don't commit nonsense challenge difficulty impossible
* This isn't always true but it's good enough
* Update options.py
* Update worlds/witness/options.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Scipio :3
* switch to is_event instead of checking against location.address
* oop
* Update test_roll_other_options.py
* Fix that unit test problem lol
* Oh is this not fixed in the apworld?
---------
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* 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>
* Move to new options system.
switch to using self.random
reformat rules file.
* further reformats
* fix tests to use new options system.
* fix slot data to not use self.multiworld
* I hate python
* new starting_items docstring to prepare for 1.20.5+ item components.
fix invalid json being output to starting_items
* more typing fixes.
* stupid quotes around type declarations
* removed unused variable in ItemPool.py
change null check in Structures.py
* update rules "self" variable to a "world: MinecraftWorld" variable
* get key, and not value for required bosses.
* Docs: `NetworkItem.player`
In many contexts, it's difficult to tell whether this is the sending player or the receiving player.
* correct player info
* Update NetUtils.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Tunnels Theater Flowers fix + Flowers&PP2 Unit Tests
* copypaste
* Can just do it like this
* This is even better probably
* Also do some cleanup :3
* God damnit
`MultiWorld.can_beat_game()` with no arguments would initially check if
`self.state` is beatable, but then would create an empty state,
`state = CollectionState(self)`, to sweep spheres from to determine if
the game is beatable. The issue was that `self.state` and the new empty
state could be different.
Currently, it seems that everywhere in Archipelago's codebase that calls
`MultiWorld.can_beat_game()` with no arguments or `starting_state=None`
has a `self.state` that only contains precollected items, so the new
empty state happens to result in an equivalent state, but this should
not be relied upon to always be the case.
This patch changes `can_beat_game()` to initially check if the new empty
state is beatable instead of `self.state`.
This appears to be a bug introduced way back in 27b6dd8bd7Fixes#3742
* Updates filler item names to match the actual item names
* Adds more descriptive error message in case this error comes back
* Properly raises exception instead of just text
* Replaces exception with assert
* TLOZ: Fix non-deterministic item pool generation
The way the item pool was constructed involved iterating unions of sets.
Sets are unordered, so the order of iteration of these combined sets
would be non-deterministic, resulting in the items in the item pool
being generated in a different order with the same seed.
Rather than creating unions of sets at all, the original code has been
replaced with using Counter objects. As a dict subclass, Counter
maintains insertion order, and its update() method makes it simple to
combine the separate item dictionaries into a single dictionary with the
total count of each item across each of the separate item dictionaries.
Fixes#3664 - After investigating more deeply, the only differences I
could find between generations of the same seed was the order of items
created by TLOZ, so this patch appears to fix the non-deterministic
generation issue. I did manage to reproduce the non-deterministic
behaviour with just TLOZ in the end, but it was very rare. I'm not
entirely sure why generating with SMZ3 specifically would cause the
non-deterministic behaviour in TLOZ to be frequently present, whereas
generating with other games or multiple TLOZ yamls would not.
* Change import order
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Core: dump all item placements for generation failures
* pass the multiworld from remaining fill
* change how the args get handled to fix formatting
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* makes start inventory from pool warn and fixes the itempool to match when it can not find a matching item to remove
* calc the difference correctly
* save new filler and non-removed items differently so we don't remove existing items at random
Fixes randomly placed ingredients not being deterministic (depending on settings)
and in turn also fixes logic not being deterministic if they get replaced by fragments.
All the types being copied are built-in types with their own `copy()`
methods, so using the `copy` module was a bit overkill and also slower.
This patch replaces the use of the `copy` module in
`CollectionState.copy()` with using the built-in `.copy()` methods.
The copying of `reachable_regions` and `blocked_connections` was also
iterating the keys of each dictionary and then looking up the value in
the dictionary for that key. It is faster, and I think more readable, to
iterate the dictionary's `.items()` instead.
For me, when generating a multiworld including the template yaml of
every world with `python -O .\Generate.py --skip_output`, this patch
saves about 2.1s. The overall generation duration for these yamls varies
quite a lot, but averages around 160s for me, so on average this patch
reduced overall generation duration (excluding output duration) by
around 1.3%.
Timing comparisons were made by calling time.perf_counter() at the start
and end of `CollectionState.copy()`'s body, and summing the differences
between the starts and ends of the method body into a global variable
that was printed at the end of generation.
Additional timing comparisons were made, using the `timeit` module, of
the individual function calls or dictionary comprehensions used to
perform the copying.
The main performance cost was `copy.deepcopy()`, which gets slow as the
number of keys multiplied by the number of values within the
sets/Counters gets large, e.g., to deepcopy a `dict[int, Counter[str]]`
with 100 keys and where each Counter contains 100 keys was 30x slower
than most other tested copying methods. Increasing the number of dict
keys or Counter keys only makes it slower.
* Core: Check parent_region.can_reach first in Location.can_reach
The comment about self.access_rule computing faster on average appears
to no longer be correct with the current caching system for region
accessibility, resulting in self.parent_region.can_reach computing
faster on average.
Generation of template yamls for each game that does not require a rom
to generate, generated with `python -O .\Generate.py --seed 1`
(all durations averaged over at 4 or 5 generations):
Full generation with `spoiler: 1` and no progression balancing:
89.9s -> 72.6s
Only output from above case:
2.6s -> 2.2s
Full generation with `spoiler: 3` and no progression balancing:
769.9s -> 627.1s
Only playthrough calculation + paths from above case:
680.5s -> 555.3s
Full generation with `spoiler: 1` with default progression balancing:
123.5s -> 98.3s
Only progression balancing from above case:
11.3s -> 9.6s
* Update BaseClasses.py
* Update BaseClasses.py
* Update BaseClasses.py
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Update worlds/dark_souls_3/Locations.py
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Fix Covetous Silver Serpent Ring location
* Update location groups
This should cover pretty much all of the seriously hidden items. It
also splits out miniboss drops, mimic drops, and hostile NPC drops.
* Remove the "Guarded by Keys" group
On reflection, I don't think this is actually that useful. It'll also
get a lot muddier once we can randomize shops and ashes become
pseudo-"keys".
* Restore Knight Slayer's Ring classification
* Support infusions/upgrades in the new DS3 mod system
* Support random starting loadouts
* Make an item's NPC status orthogonal to its category
* Track location groups with flags
* Track Archipelago/Offline mismatches on the server
Also fix a few incorrect item names.
* Add additional locations that are now randomizable
* Don't put soul and multiple items in shops
* Add an option to enable whether NG+ items/locations are included
* Clean up useful item categorization
There are so many weapons in the game now, it doesn't make sense to
treat them all as useful
* Add more variety to filler items
* Iron out a few bugs and incompatibilities
* Fix more silly bugs
* Get tests passing
* Update options to cover new item types
Also recategorize some items.
* Verify the default values of `Option`s.
Since `Option.verify()` can handle normalization of option names, this allows options to define defaults which rely on that normalization. For example, it allows a world to exclude certain locations by default.
This also makes it easier to catch errors if a world author accidentally sets an invalid default.
* Make a few more improvements and fixes
* Randomize Path of the Dragon
* Mark items that unlock checks as useful
These items all unlock missable checks, but they're still good to ahve in the game for variety's sake.
* Guarantee more NPC quests are completable
* Fix a syntax error
* Fix rule definition
* Support enemy randomization
* Support online Yhorm randomization
* Remove a completed TODO
* Fix tests
* Fix force_unique
* Add an option to smooth out upgrade item progression
* Add helpers for setting location/entrance rules
* Support smoother soul item progression
* Fill extra smoothing items into conditional locations as well as other worlds
* Add health item smoothing
* Handle infusions at item generation time
* Handle item upgrades at genreation time
* Fix Grave Warden's Ashes
* Don't overwrite old rules
* Randomize items based on spheres instead of DS3 locations
* Add a smoothing option for weapon upgrades
* Add rules for crow trades
* Small fixes
* Fix a few more bugs
* Fix more bugs
* Try to prevent Path of the Dragon from going somewhere it doesn't work
* Add the ability to provide enemy presets
* Various fixes and features
* Bug fixes
* Better Coiled Sword placement
* Structure DarkSouls3Location more like DarkSouls3Item
* Add events to make DS3's spheres more even
* Restructure locations to work like items do now
* Add rules for more missable locations
* Don't add two Storm Rulers
* Place Hawk Ring in Farron Keep
* Mark the Grass Crest Shield as useful
* Mark new progression items
* Fix a bug
* Support newer better Path of the Dragon code
* Don't lock the player out of Coiled Sword
* Don't create events for missable locations
* Don't throw strings
* Don't smooth event items
* Properly categorize Butcher Knife
* Be more careful about placing Yhorm in low-randomization scenarios
* Don't try to smooth DLC items with DLC disabled
* Fix another Yhorm bug
* Fix upgrade/infusion logic
* Remove the PoolType option
This distinction is no longer meaningful now that every location in
the game of each type is randomized
* Categorize HWL: Red Eye Orb as an NPC location
* Don't place Storm Ruler on CA: Coiled Sword
* Define flatten() locally to make this APWorld capable
* Fix some more Leonhard weirdness
* Fix unique item randomization
* Don't double Twin Dragon Greatshield
* Remove debugging print
* Don't add double Storm Ruler
Also remove now-redundant item sorting by category in create_items.
* Don't add double Storm Ruler
Also remove now-redundant item sorting by category in create_items.
* Add a missing dlc_enabled check
* Use nicer options syntax
* Bump data_version
* Mention where Yhorm is in which world
* Better handle excluded events
* Add a newline to Yhorm location
* Better way of handling excluded unradomized progression locations
* Fix a squidge of nondeterminism
* Only smooth items from this world
* Don't smooth progression weapons
* Remove a location that doesn't actually exist in-game
* Classify Power Within as useful
* Clarify location names
* Fix location requirements
* Clean up randomization options
* Properly name Coiled Sword location
* Add an option for configuring how missable items are handled
* Fix some bugs from location name updates
* Fix location guide link
* Fix a couple locations that were busted offline
* Update detailed location descriptions
* Fix some bugs when generating for a multiworld
* Inject Large Leather Shield
* Fix a few location issues
* Don't allow progression_skip_balancing for unnecessary locs
* Update some location info
* Don't uniquify the wrong items
* Fix some more location issues
* More location fixes
* Use hyphens instead of parens for location descriptions
* Update and fix more locations
* Fix Soul of Cinder boss name
* Fix some logic issues
* Add item groups and document item/location groups
* Fix the display name for "Impatient Mimics"
* Properly handle Transposing Kiln and Pyromancer's Flame
* Testing
* Some fixes to NPC quests, late basin, and transposing kiln
* Improve a couple location names
* Split out and improve missable NPC item logic
* Don't allow crow trades to have foreign items
* Fix a variable capture bug
* Make sure early items are accessible early even with early Castle
* Mark ID giant slave drops as missable
* Make sure late basin means that early items aren't behind it
* Make is_location_available explicitly private
* Add an _add_item_rule utility that checks availability
* Clear excluded items if excluded_locations == "unnecessary"
* Don't allow upgrades/infusions in crow trades
* Fix the documentation for deprecated options
* Create events for all excluded locations
This allows `can_reach` logic to work even if the locations are
randomized.
* Fix up Patches' and Siegward's logic based on some manual testing
* Factor out more sub-methods for setting location rules
* Oops, left these in
* Fixing name
* Left that in too
* Changing to NamedRange to support special_range_names
* Alphabetizing
* Don't call _is_location_available on foreign locations
* Add missing Leonhard items
* Changing late basin to have a post-small-doll option
* Update basin option, add logic for some of Leonhard Hawkwood and Orbeck
* Simplifying an option, fixing a copy-paste error
* Removing trailing whitespace
* Changing lost items to go into start inventory
* Revert Basin changes
* Oops
* Update Options.py
* Reverting small doll changes
* Farron Keep boss requirement logic
* Add Scroll for late_dlc
* Fixing excluded unnecessary locations
* Adding Priestess Ring as being after UG boss
* Removing missable from Corvian Titanite Slab
* Adding KFF Yhorm boss locks
* Screams about Creighton
* Elite Knight Set isn't permanently missable
* Adding Kiln requirement to KFF
* fixing valid_keys and item groups
* Fixing an option-checker
* Throwing unplaceable Storm Ruler into start inventory
* Update locations
* Refactor item injection
* Update setup doc
* Small fixes
* Fix another location name
* Fix injection calculation
* Inject guaranteed items along with progression items
* Mark boss souls as required for access to regions
This allows us to set quest requirements for boss souls and have them
automatically propagated to regions, means we need less machinery for
Yhorm bosses, and allows us to get rid of a few region-transition
events.
* Make sure Sirris's quest can be completed before Pontiff
* Removing unused list
* Changing dict to list
* Removing unused test
* Update __init__.py
* self.multiworld.random -> self.random (#9)
* Fix some miscellaneous location issues
* Rewrite the DS3 intro page/FAQ
* Removing modifying the itempool after fill (#7)
Co-authored-by: Natalie Weizenbaum <nweiz@google.com>
* Small fixes to the setup guide (#10)
Small fixes, adding an example for connecting
* Expanded Late Basin of Vows and Late DLC (#6)
* Add proper requirements for CD: Black Eye Orb
* Fix Aldrich's name
* Document the differences with the 2.x.x branch
* Don't crash if there are more items than locations in smoothing
* Apply suggestions from code review
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Code review
* Fix _replace_with_filler
* Don't use the shared flatten function in SM
* Track local items separately rather than iterating the multiworld
* Various formatting/docs changes suggested by PyCharm (#12)
* Drop deprecated options
* Rename "offline randomizer" to "static randomizer" which is clearer
* Move `enable_*_locations` under removed options.
* Avoid excluded locations for locally-filled items
* Adding Removed options to error (#14)
* Changes for WebHost options display and the options overhaul
* unpack iterators in item list (#13)
* Allow worlds to add options to prebuilt groups
Previously, this crashed because `typing.NamedTuple` fields such as
`group.name` aren't assignable. Now it will only fail for group names
that are actually incorrectly cased, and will fail with a better error
message.
* Style changes, rename exclude behavior options, remove guaranteed items option
* Spacing/Formatting (#18)
* Various Fixes (#19)
* Universally Track Yhorm (#20)
* Account for excluded and missable
* These are behaviors now
* This is singular, apparently
* Oops
* Fleshing out the priority process
* Missable Titanite Lizards and excluded locations (#22)
* Small style/efficiency changes
* Final passthrough fixes (#24)
* Use rich option formatting
* Make the behavior option values actual behaviors (#25)
* Use !=
* Remove unused flatten utility
* Some changes from review (#28)
* Fixing determinism and making smooth faster (#29)
* Style change
* PyCharm and Mypy fixes (#26)
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Change yhorm default (#30)
* Add indirect condition (#27)
* Update worlds/dark_souls_3/docs/locations_en.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Ship all item IDs to the client
This avoids issues where items might get skipped if, for instance,
they're only in the starting inventory.
* Make sure to send AP IDs for infused/upgraded weapons
* Make `RandomEnemyPresetOption` compatible with ArchipelagoMW/Archipelago#3280 (#31)
* Fix cast
* More typing and small fixes (#32)
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Exempt-Medic <ExemptMedic@Gmail.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* makes grub hunt goal option that calculates the total available grubs (including item link replacements) and requires all of them to be gathered for goal completion
* update slot data name for grub count
* add option to set number needed for grub hub
* updates to grub hunt goal based on review
* copy/paste fix
* account for 'any' goal and fix overriding non-grub goals
* making sure godhome is in logic for any and removing redundancy on completion condition
* fix typing
* i hate typing
* move to stage_pre_fill
* modify "any" goal so all goals are in logic under minimal settings
* rewrite grub counting to create lookups for grubs and groups that can be reused
* use generator instead of list comprehension
* fix whitespace merging wrong
* minor code cleanup
* Fixing logic bugs
* Require energy attack in the cathedral and energy form in the body
* King Jelly can be beaten easily with only the Dual Form
* I think that I have a problem with my left and right...
* There is a monster that is blocking the path, soo need attack to pass
* The Li cage is not accessible without the Sunken city boss
* Removing useless space.
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Two more minors logic modification
* Adapting tests to af9b6cd
* Reformat the Region file
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
The access rules for "<Environment name> Chest n", "<Environment name>
Shrine n" etc. locations recursively called state.can_reach() for the
n-1 location name, with the n=1 location being the only location to have
the actual access rule set.
This patch removes the recursion, instead setting the actual access rule
directly on each location, increasing the performance of checking
accessibility of n>1 locations.
Risk of Rain 2 was already quite fast to generate despite the recursion
in the access rules, but with this patch, generating a multiworld with
200 copies of the template RoR2 yaml (and progression balancing
disabled through a meta.yaml) goes from about 18s to about 6s for me.
From generating the same seed before and after this patch, the same
result is produced.
* Sort entrances in spoiler log
* Rearrange portal list to closer match the vanilla game order, for better spoiler and because I already did this mod-side
* Add break (thanks vi)
* MMBN3: Press program now has proper color index when received remotely
* Initial commit of OSRS untangled from MMBN3 branch
* Fixes some broken region connections
* Removes some locations
* Rearranges locations to fill in slots left by removed locations
* Adds starting area rando
* Moves Oak and Willow trees to resource regions
* Fixes various PEP8 violations
* Refactor of regions
* Fixes variable capture issue with region rules
* Partial completion of brutal grind logic
* Finishes can_reach_skill function
* Adds skill requirements to location rules, fixes regions rules
* Adds documentation for OSRS
* Removes match statement
* Updates Data Version to test mode to prevent item name caching
* Fixes starting spawn logic for east varrock
* Fixes river lum crossing logic to not assume you can phase across water
* Prevents equipping items when you haven't unlocked them
* Changes canoe logic to not require huge levels
* Skeletoning out some data I'll need for variable task system
* Adds csvs and parser for logic
* Adds Items parsing
* Fixes the spawning logic to not default to Chunksanity when you didn't pick it
* Begins adding generation rules for data-driven logic
* Moves region handling and location creating to different methods
* Adds logic limits to Options
* Begun the location generation has
* Randomly generates tasks for each skill until populated
* Mopping up improper names, adding custom logic, and fixes location rolling
* Drastically cleans up the location rolling loop
* Modifies generation to properly use local variables and pass unit tests
* Game is now generating, but rules don't seem to work
* Lambda capture, my old nemesis. We meet again
* Fixes issue with Corsair Cove item requirement causing logic loop
* Okay one more fix, another variable capture
* On second thought lets not have skull sceptre tasks. 'Tis a silly place
* Removes QP from item pool (they're events not items)
* Removes Stronghold floor tasks, no varbit to track them
* Loads CSV with pkutil so it can be used in apworld
* Fixes logic of skill tasks and adds QP requirements to long grinds
* Fixes pathing in pkgutil call
* Better handling for empty task categories, no longer throws errors
* Fixes order for progressive tasks, removes un-checkable spider task
* Fixes logic issues related to stew and the Blurite caves
* Fixes issues generating causing tests to sporadically fail
* Adds missing task that caused off-by-one error
* Updates to new Options API
* Updates generation to function properly with the Universal Tracker (Thanks Faris)
* Replaces runtime CSV parsing with pre-made python files generated from CSVs
* Switches to self.random and uses random.choice instead of doing it manually
* Fixes to typing, variable names, iterators, and continue conditions
* Replaces Name classes with Enums
* Fixes parse error on region special rules
* Skill requirements check now returns an accessrule instead of being one that checks options
* Updates documentation and setup guide
* Adjusts maximum numbers for combat and general tasks
* Fixes region names so dictionary lookup works for chunksanity
* Update worlds/osrs/docs/en_Old School Runescape.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Update worlds/osrs/docs/en_Old School Runescape.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Updates readme.md and codeowners doc
* Removes erroneous East Varrock -> Al Kharid connection
* Changes to canoe logic to account for woodcutting level options
* Fixes embarassing typo on 'Edgeville'
* Moves Logic CSVs to separate repository, addresses suggested changes on PR
* Fixes logic error in east/west lumbridge regions. Fixes incorrect List typing in main
* Removes task types with weight 0 from the list of rollable tasks
* Missed another place that the task type had to be removed if 0 weight
* Prevents adding an empty task weight if levels are too restrictive for tasks to be added
* Removes giant blank space in error message
* Adds player name to error for not having enough available tasks
---------
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Options: Always verify keys for VerifyKeys options
* fix PlandoTexts
* use OptionError and give a slightly better error message for which option it is
* add the player name to the error
* don't create an unnecessary list
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Adds an option to have pot pieces placed local/non-local/anywhere
Shivers nearly always finishes last in multiworld games due to the fact you need all 20 pot pieces to win and the pot pieces open very few location checks. This option allows the pieces to be placed locally. This should allow Shivers to be finished earlier.
* New option: Choose how many ixupi captures are needed for goal completion
New option: Choose how many ixupi captures are needed for goal completion
* Fixes rule logic for location 'puzzle solved three floor elevator'
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.
* Merge branch 'main' of https://github.com/GodlFire/Shivers
* Revert "Merge branch 'main' of https://github.com/GodlFire/Shivers"
This reverts commit bb08c3f0c2.
* Fixes issue with office elevator rule logic.
* Bug fix, missing logic requirement for location 'Final Riddle: Guillotine Dropped'
Bug fix, missing logic requirement for location 'Final Riddle: Guillotine Dropped'
* Moves plaque location to front for better tracker referencing.
* Tiki should be Shaman.
* Hanging should be Gallows.
* Merrick spelling.
* Clarity change.
* Changes new option to use new option API
Changes new option to use new option API
* Added sub regions for Ixupi
-Added sub regions for Ixupi and moved ixupi capture checks into the sub region.
-Added missing wax capture possible spot in Shaman room
* Adds option for ixupi captures to be priority locations
Adds option for ixupi captures to be priority locations
* Consistency
Consistency
* Changes ixupi captures priority to default on toggle
Changes ixupi captures priority to default on toggle
* Docs update
-Updated link to randomizer
-Update some text to reflect the latest functionality
-Replaced 'setting' with 'option'
* New features/bug fixes
-Adds an option to have completed pots in the item pool
-Moved subterranean world information plaque to maze staircase
* Cleanup
Cleanup
* Fixed name for moved location
When moving a location and renaming it I forgot to fix the name in a second spot.
* Squashed commit of the following:
commit 630a3bdfb9
Merge: 8477d3c85e579200
Author: GodlFire <46984098+GodlFire@users.noreply.github.com>
Date: Mon Apr 1 19:08:48 2024 -0600
Merge pull request #10 from ArchipelagoMW/main
Merge main into branch
commit 5e5792009c
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Mon Apr 1 12:08:21 2024 -0500
LttP: delete playerSettings.yaml (#3062)
commit 9aeeeb077a
Author: CaitSith2 <d_good@caitsith2.com>
Date: Mon Apr 1 06:07:56 2024 -0700
ALttP: Re-mark light/dark world regions after applying plando connections (#2964)
commit 35458380e6
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Mon Apr 1 07:07:11 2024 -0600
Pokemon Emerald: Fix wonder trade race condition (#2983)
commit 4ac1866689
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Mon Apr 1 08:06:31 2024 -0500
ALTTP: Skull Woods Inverted fix (#2980)
commit 4aa03da66e
Author: Fabian Dill <Berserker66@users.noreply.github.com>
Date: Mon Apr 1 15:06:02 2024 +0200
Factorio: fix attempting to create savegame with not filename safe characters (#2842)
commit 24a03bc8b6
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Mon Apr 1 08:02:26 2024 -0500
KDL3: fix shuffled animals not actually being random (#3060)
commit f813a7005f
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Sun Mar 31 11:11:10 2024 -0500
The Messenger: update docs formatting and fix outdated info (#3033)
* The Messenger: update docs formatting and fix outdated info
* address review feedback
* 120 chars
commit 2a0b7e0def
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>
Date: Sun Mar 31 09:55:55 2024 -0600
CV64: A couple of very small docs corrections. (#3057)
commit 03d47e460e
Author: Ixrec <ericrhitchcock@gmail.com>
Date: Sun Mar 31 16:55:08 2024 +0100
A Short Hike: Clarify installation instructions (#3058)
* Clarify installation instructions
* don't mention 'config' folder since it isn't created until the game starts
commit e546c0f7ff
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Sun Mar 31 10:50:31 2024 -0500
Yoshi's Island: add patch suffix (#3061)
commit 2ec93ba82a
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Sun Mar 31 09:48:59 2024 -0600
Pokemon Emerald: Fix inconsistent location name (#3065)
commit 4e3d396394
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Sun Mar 31 10:47:11 2024 -0500
The Messenger: Fix precollected notes not being removed from the itempool (#3066)
* The Messenger: fix precollected notes not being properly removed from pool
* The Messenger: bump required client version
commit 72c53513f8
Author: Fabian Dill <Berserker66@users.noreply.github.com>
Date: Sun Mar 31 03:57:59 2024 +0200
WebHost: fix /check creating broken yaml files if files don't end with a newline (#3063)
commit b7ac6a4cbd
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Fri Mar 29 20:14:53 2024 -0500
The Messenger: Fix various portal shuffle issues (#2976)
* put constants in a bit more sensical order
* fix accidental incorrect scoping
* fix plando rules not being respected
* add docstrings for the plando functions
* fix the portal output pools being overwritten
* use shuffle and pop instead of removing by content so plando can go to the same area twice
* move portal pool rebuilding outside mapping creation
* remove plando_connection cleansing since it isn't shared with transition shuffle
commit 5f0112e783
Author: Zach Parks <zach@alliware.com>
Date: Fri Mar 29 19:13:51 2024 -0500
Tracker: Add starting inventory to trackers and received items table. (#3051)
commit bb481256de
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Thu Mar 28 21:48:40 2024 -0500
Core: Make fill failure error more human parseable (#3023)
commit 301d9de975
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Thu Mar 28 19:31:59 2024 -0500
Docs: adding games rework (#2892)
* Docs: complete adding games.md rework
* remove all the now unused images
* review changes
* address medic's review
* address more comments
commit 9dc708978b
Author: Trevor L <80716066+TRPG0@users.noreply.github.com>
Date: Thu Mar 28 18:26:58 2024 -0600
Hylics 2: Fix invalid multiworld data, use `self.random` instead of `self.multiworld.random` (#3001)
* Hylics 2: Fixes
* Rewrite loop
commit 4391d1f4c1
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Thu Mar 28 18:05:39 2024 -0600
Pokemon Emerald: Fix opponents learning non-randomized TMs (#3025)
commit 5d9d4ed9f1
Author: black-sliver <59490463+black-sliver@users.noreply.github.com>
Date: Fri Mar 29 01:01:31 2024 +0100
SoE: update to pyevermizer v0.48.0 (#3050)
commit c97215e0e7
Author: Scipio Wright <scipiowright@gmail.com>
Date: Thu Mar 28 17:23:37 2024 -0400
TUNIC: Minor refactor of the vanilla_portals function (#3009)
* Remove unused, change an if to an elif
* Remove unused import
commit eb66886a90
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Thu Mar 28 16:23:01 2024 -0500
SC2: Don't Filter Excluded Victory Locations (#3018)
commit de860623d1
Author: Fabian Dill <Berserker66@users.noreply.github.com>
Date: Thu Mar 28 22:21:56 2024 +0100
Core: differentiate between unknown worlds and broken worlds in error message (#2903)
commit 74b2bf5161
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Thu Mar 28 15:20:55 2024 -0600
Pokemon Emerald: Exclude norman trainer location during norman goal (#3038)
commit 74ac66b032
Author: BadMagic100 <dempsey.sean@outlook.com>
Date: Thu Mar 28 08:49:19 2024 -0700
Hollow Knight: 0.4.5 doc revamp and default options tweaks (#2982)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit 80d7ac4164
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Thu Mar 28 09:41:32 2024 -0500
KDL3: RC1 Fixes and Enhancement (#3022)
* fix cloudy park 4 rule, zero deathlink message
* remove redundant door_shuffle bool
when generic ER gets in, this whole function gets rewritten. So just clean it a little now.
* properly fix deathlink messages, fix fill error
* update docs
commit 77311719fa
Author: Ziktofel <ziktofel@gmail.com>
Date: Thu Mar 28 15:38:34 2024 +0100
SC2: Fix HERC upgrades (#3044)
commit cfc1541be9
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Thu Mar 28 15:19:32 2024 +0100
Docs: Mention the "last received item index" paradigm in the network protocol docs (#2989)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit 4d954afd9b
Author: Scipio Wright <scipiowright@gmail.com>
Date: Thu Mar 28 10:11:20 2024 -0400
TUNIC: Add link to AP plando guide to connection plando section of game page (#2993)
commit 17748a4bf1
Author: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Date: Thu Mar 28 10:00:10 2024 -0400
Launcher, Docs: Update UI and Set-Up Guide to Reference Options (#2950)
commit 9182fe563f
Author: Entropynines <163603868+Entropynines@users.noreply.github.com>
Date: Thu Mar 28 06:56:35 2024 -0700
README: Remove outdated information about launchers (#2966)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit bcf223081f
Author: t3hf1gm3nt <59876300+t3hf1gm3nt@users.noreply.github.com>
Date: Thu Mar 28 09:54:56 2024 -0400
TLOZ: Fix markdown issue with game info page (#2985)
commit fa93488f3f
Author: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Date: Thu Mar 28 09:46:00 2024 -0400
Docs: Consistent naming for "connection plando" (#2994)
commit db15dd4bde
Author: chandler05 <66492208+chandler05@users.noreply.github.com>
Date: Thu Mar 28 08:45:19 2024 -0500
A Short Hike: Fix incorrect info in docs (#3016)
commit 01cdb0d761
Author: PoryGone <98504756+PoryGone@users.noreply.github.com>
Date: Thu Mar 28 09:44:23 2024 -0400
SMW: Update World Doc for v2.0 Features (#3034)
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
commit d0ac2b744e
Author: panicbit <panicbit@users.noreply.github.com>
Date: Thu Mar 28 10:11:26 2024 +0100
LADX: fix local and non-local instrument placement (#2987)
* LADX: fix local and non-local instrument placement
* change confusing variable name
commit 14f5f0127e
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Date: Thu Mar 28 04:42:35 2024 -0400
Stardew Valley: Fix potential soft lock with vanilla tools and entrance randomizer + Performance improvement for vanilla tool/skills (#3002)
* fix vanilla tool fishing rod requiring metal bars
fix vanilla skill requiring previous level (it's always the same rule or more restrictive)
* add test to ensure fishing rod need fish shop
* fishing rod should be indexed from 0 like a mentally sane person would do.
* fishing rod 0 isn't real, but it definitely can hurt you.
* reeeeeeeee
commit cf133dde72
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Thu Mar 28 02:32:27 2024 -0600
Pokemon Emerald: Fix typo (#3020)
commit ca18121811
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Date: Thu Mar 28 04:27:49 2024 -0400
Stardew Valley: Fix generation fail with SVE and entrance rando when Wizard Tower is in place of Sprite Spring (#2970)
commit 1d4512590e
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Wed Mar 27 21:09:09 2024 +0100
requirements.txt: _ instead of - to make PyCharm happy (#3043)
commit f7b415dab0
Author: agilbert1412 <alexgilbert@yahoo.com>
Date: Tue Mar 26 19:40:58 2024 +0300
Stardew valley: Game version documentation (#2990)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit 702f006c84
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>
Date: Tue Mar 26 07:31:36 2024 -0600
CV64: Change all mentions of "settings" to "options" and fix a broken link (#3015)
commit 98ce8f8844
Author: Yussur Mustafa Oraji <N00byKing@hotmail.de>
Date: Tue Mar 26 14:29:25 2024 +0100
sm64ex: New Options API and WebHost fix (#2979)
commit ea47b90367
Author: Scipio Wright <scipiowright@gmail.com>
Date: Tue Mar 26 09:25:41 2024 -0400
TUNIC: You can grapple down here without the ladder, neat (#3019)
commit bf3856866c
Author: agilbert1412 <alexgilbert@yahoo.com>
Date: Sun Mar 24 23:53:49 2024 +0300
Stardew Valley: presets with some of the new available values for existing settings to make them more accurate (#3014)
commit c0368ae0d4
Author: Phaneros <31861583+MatthewMarinets@users.noreply.github.com>
Date: Sun Mar 24 13:53:20 2024 -0700
SC2: Fixed missing upgrade from custom tracker (#3013)
commit 36c83073ad
Author: Salzkorn <salzkitty@gmail.com>
Date: Sun Mar 24 21:52:41 2024 +0100
SC2 Tracker: Fix grouped items pointing at wrong item IDs (#2992)
commit 2b24539ea5
Author: Ziktofel <ziktofel@gmail.com>
Date: Sun Mar 24 21:52:16 2024 +0100
SC2 Tracker: Use level tinting to let the player know which level he has of Replenishable Magazine (#2986)
commit 7e904a1c78
Author: Ziktofel <ziktofel@gmail.com>
Date: Sun Mar 24 21:51:46 2024 +0100
SC2: Fix Kerrigan presence resolving when deciding which races should be used (#2978)
commit bdd498db23
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Fri Mar 22 15:36:27 2024 -0500
ALTTP: Fix#2290's crashes (#2973)
commit 355223b8f0
Author: PinkSwitch <52474902+PinkSwitch@users.noreply.github.com>
Date: Fri Mar 22 15:35:00 2024 -0500
Yoshi's Island: Implement New Game (#2141)
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: Alchav <59858495+Alchav@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit aaa3472d5d
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Fri Mar 22 21:30:51 2024 +0100
The Witness: Fix seed bleed issue (#3008)
commit 96d93c1ae3
Author: chandler05 <66492208+chandler05@users.noreply.github.com>
Date: Fri Mar 22 15:30:23 2024 -0500
A Short Hike: Add option to customize filler coin count (#3004)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit ca549df20a
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Fri Mar 22 15:29:24 2024 -0500
CommonClient: fix hint tab overlapping (#2957)
Co-authored-by: Remy Jette <remy@remyjette.com>
commit 44988d430d
Author: Star Rauchenberger <fefferburbia@gmail.com>
Date: Fri Mar 22 15:28:41 2024 -0500
Lingo: Add trap weights option (#2837)
commit 11b32f17ab
Author: Danaël V <104455676+ReverM@users.noreply.github.com>
Date: Fri Mar 22 12:46:14 2024 -0400
Docs: replacing "setting" to "option" in world docs (#2622)
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
Added non-AP World specific information
* Update contributing.md
Fixed broken link
* Some minor touchups
* Update Contributing.md
Draft for version with picture
* Update contributing.md
Small word change
* Minor updates for conciseness, mostly
* Changed all instances of settings to options in info and setup guides
I combed through all world docs and swapped "setting" to "option" when this was refering to yaml options.
I also changed a leftover "setting" in option.py
* Update contributing.md
* Update contributing.md
* Update setup_en.md
Woops I forgot one
* Update Options.py
Reverted changes regarding options.py
* Update worlds/noita/docs/en_Noita.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md
revert change waiting for that page to be updated
* Update worlds/witness/docs/setup_en.md
* Update worlds/witness/docs/en_The Witness.md
* Update worlds/soe/docs/multiworld_en.md
Fixed Typo
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/witness/docs/en_The Witness.md
* Update worlds/adventure/docs/en_Adventure.md
* Update worlds/witness/docs/setup_en.md
* Updated Stardew valley to hopefully get rid of the merge conflicts
* Didn't work :dismay:
* Delete worlds/sc2wol/docs/setup_en.md
I think this will fix the merge issue
* Now it should work
* Woops
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
commit 218cd45844
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Fri Mar 22 03:02:38 2024 -0500
APProcedurePatch: fix RLE/COPY incorrect sizing (#3006)
* change class variables to instance variables
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* move required_extensions to tuple
* fix missing tuple ellipsis
* fix classvar mixup
* rename tokens to _tokens. use hasattr
* type hint cleanup
* Update Files.py
* check using isinstance instead
* Update Files.py
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
commit 4196bde597
Author: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Date: Thu Mar 21 16:38:36 2024 -0400
Docs: Fixing special_range_names example (#3005)
commit 40f843f54d
Author: Star Rauchenberger <fefferburbia@gmail.com>
Date: Thu Mar 21 11:00:53 2024 -0500
Lingo: Minor game data fixes (#3003)
commit da333fbb0c
Author: GodlFire <46984098+GodlFire@users.noreply.github.com>
Date: Thu Mar 21 09:52:16 2024 -0600
Shivers: Adds missing logic rule for skull dial door location (#2997)
commit 43084da23c
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Thu Mar 21 16:51:29 2024 +0100
The Witness: Fix newlines in Witness option tooltips (#2971)
commit 14816743fc
Author: Scipio Wright <scipiowright@gmail.com>
Date: Thu Mar 21 11:50:07 2024 -0400
TUNIC: Shuffle Ladders option (#2919)
commit 30a0aa2c85
Author: Star Rauchenberger <fefferburbia@gmail.com>
Date: Thu Mar 21 10:46:53 2024 -0500
Lingo: Add item/location groups (#2789)
commit f4b7c28a33
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Wed Mar 20 17:45:32 2024 -0500
APProcedurePatch: hotfix changing class variables to instance variables (#2996)
* change class variables to instance variables
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* move required_extensions to tuple
* fix missing tuple ellipsis
* fix classvar mixup
* rename tokens to _tokens. use hasattr
* type hint cleanup
* Update Files.py
* check using isinstance instead
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
commit 12864f7b24
Author: chandler05 <66492208+chandler05@users.noreply.github.com>
Date: Wed Mar 20 22:44:09 2024 +0100
A Short Hike: Implement New Game (#2577)
commit db02e9d2aa
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>
Date: Wed Mar 20 15:03:25 2024 -0600
Castlevania 64: Implement New Game (#2472)
commit 32315776ac
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Date: Wed Mar 20 16:57:45 2024 -0400
Stardew Valley: Fix extended family legendary fishes being locations with fishsanity set to exclude legendary (#2967)
commit e9620bea77
Author: Magnemania <89949176+Magnemania@users.noreply.github.com>
Date: Wed Mar 20 16:56:00 2024 -0400
SM64: Goal Logic and Hint Bugfixes (#2886)
commit 183ca35bba
Author: qwint <qwint.42@gmail.com>
Date: Wed Mar 20 08:39:37 2024 -0500
CommonClient: Port Casting Bug (#2975)
commit fcaaa197a1
Author: TheLX5 <luisyuregi@gmail.com>
Date: Wed Mar 20 05:56:19 2024 -0700
SMW: Fixes for Bowser being defeatable on Egg Hunt and CI2 DC room access (#2981)
commit 8f7b63a787
Author: TheLX5 <luisyuregi@gmail.com>
Date: Wed Mar 20 05:56:04 2024 -0700
SMW: Blocksanity logic fixes (#2988)
commit 6f64bb9869
Author: Scipio Wright <scipiowright@gmail.com>
Date: Wed Mar 20 08:46:31 2024 -0400
Noita: Remove newline from option description so it doesn't look bad on webhost (#2969)
commit d0a9d0e2d1
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Wed Mar 20 06:43:13 2024 -0600
Pokemon Emerald: Bump required client version (#2963)
commit 94650a02de
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Tue Mar 19 17:08:29 2024 -0500
Core: implement APProcedurePatch and APTokenMixin (#2536)
* initial work on procedure patch
* more flexibility
load default procedure for version 5 patches
add args for procedure
add default extension for tokens and bsdiff
allow specifying additional required extensions for generation
* pushing current changes to go fix tloz bug
* move tokens into a separate inheritable class
* forgot the commit to remove token from ProcedurePatch
* further cleaning from bad commit
* start on docstrings
* further work on docstrings and typing
* improve docstrings
* fix incorrect docstring
* cleanup
* clean defaults and docstring
* define interface that has only the bare minimum required
for `Patch.create_rom_file`
* change to dictionary.get
* remove unnecessary if statement
* update to explicitly check for procedure, restore compatible version and manual override
* Update Files.py
* remove struct uses
* ensure returning bytes, add token type checking
* Apply suggestions from code review
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* pep8
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Changes pot_completed_list to a instance variable instead of global.
Changes pot_completed_list to a instance variable instead of global. The global variable was unintentional and was causing missmatch in pre_fill which would cause generation error.
* Removing deprecated options getter
* Adds back fix from main branch
Adds back fix from main branch
* Removing messenger changes that somehow got on my branch?
Removing messenger changes that somehow got on my branch?
* Removing messenger changes that are somehow on the Shivers branch
Removing messenger changes that are somehow on the Shivers branch
* Still trying to remove Messenger changes on Shivers branch
Still trying to remove Messenger changes on Shivers branch
* Review comments addressed. Early lobby access set as default.
Review comments addressed. Early lobby access set as default.
* Review comments addressed
Review comments addressed
* Review comments addressed. Option for priority locations removed.
Option to have ixupi captures a priority has been removed and can be added again if Priority Fill is changed. See Issues #3467.
* Minor Change
Minor Change
* Fixed ID 10 T Error
Fixed ID 10 T Error
* Front door option added to slot data
Front door option added to slot data
* Add missing .value on slot data
Add missing .value on slot data
* Small change to slot data
Small change to slot data
* Small change to slot data
Why didn't this change get pushed github...
* Forgot list
Forgot list
---------
Co-authored-by: Kory Dondzila <korydondzila@gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* rename locations accessibility to "full" and make old locations accessibility debug only
* fix a bug in oot
* reorder lttp tests to not override its overrides
* changed the wrong word in the dict
* :forehead:
* update the manual lttp yaml
* use __debug__
* update pokemon and messenger
* fix conflicts from 993
* fix stardew presets
* add that locations may be inaccessible to description
* use reST format and make the items description one line so that it renders correctly on webhost
* forgot i renamed that
* add aliases for back compat
* some cleanup
* fix imports
* fix test failure
* only check "items" players when the item is progression
* Revert "only check "items" players when the item is progression"
This reverts commit ecbf986145.
* remove some unnecessary diffs
* CV64: Add ItemsAccessibility
* put items description at the bottom of the docstring since that's it's visual order
* :
* rename accessibility reference in pokemon rb dexsanity
* make the rendered tooltips look nicer
* Core: move item linking out of main
* add a test that item link option correctly validates
* remove unused fluff
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
If a NamedRange has a `special_range_names` entry outside the
`range_start` and `range_end`, the HTML5 range input will clamp the
submitted value to the closest value in the range.
These means that, for example, Pokemon RB's "HM Compatibility" option's
"Vanilla (-1)" option would instead get posted as "0" rather than "-1".
This change updates NamedRange to behave like TextChoice, where the
select element has a `name` attribute matching the option, and there is
an additional element to be able to provide an option other than the
select element's choices.
This uses a different suffix of `-range` rather than `-custom` that
TextChoice uses. The reason is we need some way to decide whether to use
the custom value or the select value, and that method needs to work
without JavaScript. For TextChoice this is easy, if the custom field is
empty use the select element. For NamedRange this is more difficult as
the browser will always submit *something*. My choice was to only use
the value from the range if the select box is set to "custom". Since
this only happens with JS as "custom' is hidden, I made the range hidden
under no-JS. If it's preferred, I could make the select box hidden
instead. Let me know.
This PR also makes the `js-required` class set `display: none` with
`!important` as otherwise the class wouldn't work on any rule that
had `display: flex` with more specificity than a single class.
* updates HK to consistently use world.random, use world.options, don't use world = self.multiworld, and remove some things from the logicMixin
* Update HK to new options dataclass
* Move completion condition helpers to Rules.py
* updates from review
These areas are technically connected through The Observant, but the connection between The Observant and The Incomparable is marked as a warp because of the warp hallways leading up to The Observant's achievement panel. Creating separate entrances for The Incomparable is a simple workaround, and allows use of that connection during a pilgrimage.
* save the seed in slot data to reuse it in UT
* add logging when seed is missing
* add UT test and fix bundle test
* self review
* run UT test on allsanity+mod so it's more meaningfull
* Created panels mode door shuffle
* Added some panel door item names
* Remove RUNT TURN panel door
Not really useful.
* Fix logic with First SIX related stuff
* Add group_doors to slot data
* Fix LEVEL 2 behavior with panels mode
* Fixed unit tests
* Fixed duplicate IDs from merge
* Just regenerated new IDs
* Fixed duplication of color and door group items
* Removed unnecessary unit test option
* Fix The Seeker being achievable without entrance door
* Fix The Observant being achievable without locked panels
* Added some more panel doors
* Added Progressive Suits Area
* Lingo: Fix Basement access with THE MASTER
* Added indirect conditions for MASTER-blocked entrances
* Fixed Incomparable achievement access
* Fix STAIRS panel logic
* Fix merge error with good items
* Is this clearer?
* DREAD and TURN LEARN
* Allow a weird edge case for reduced locations
Panels mode door shuffle + grouped doors + color shuffle + pilgrimage enabled is exactly the right number of items for reduced locations. Removing color shuffle also allows for disabling pilgrimage, adding sunwarp locking, or both, with a couple of locations left over.
* Prevent small sphere one on panels mode
* Added shuffle_doors aliases for old options
* Fixed a unit test
* Updated datafile
* Tweaked requirements for reduced locations
* Added player name to OptionError messages
* Update generated.dat
* Docs: Add Swedish Guide for Pokemon Emerald
Swedish Translation
* v2
some proof reading & clarification changes
* v3
* v4
* v5
typo
* v6
* Update worlds/pokemon_emerald/docs/setup_sv.md
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* Update worlds/pokemon_emerald/docs/setup_sv.md
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* v7
Tried to reduce the length of lines, this should still convey the same message/meaning
* typo
* v8
Removed Leading/Trailing Spaces
* typo v2
* Added a couple of full stops.
* lowercase typos
* Update setup_sv.md
* Apply suggestions from code review
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
---------
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
Co-authored-by: bittersweetrin <chandraherbozo@gmail.com>
* Fix logic bug on daggerfish
* Make new region for pond.
* Fix SVE logic for crops
* Fix Distant Lands Cropsanity
* Fix failing tests.
* Reverting removing these for now.
* Fix bugs, add combat requirement
* convert str into tuple directly
* add ginger island to mod tests
* Move a lot of mod item logic to content pack
* Gut the rules from DL while we're at it.
* Import nuke
* Fix alecto
* Move back some rules for now.
* Move archaeology rules
* Add some comments why its done.
* Clean up archaeology and fix sve
* Moved dulse to water item class
* Remove digging like worms for now
* fix
* Add missing shipsanity location
* Move background names around or something idk
* Revert ArchaeologyTrash for now
---------
Co-authored-by: Jouramie <jouramie@hotmail.com>
* settings: clean up imports
* settings: try to use atomic rename
* settings: flush, sync and validate new yaml
before replacing the old one
* settings: add test for Settings.save
* adding one faq :)
* adding another faq that links to the relevant file
* add lined line breaks between questions and lower the heading size of the question so sub-divisions can be added later
* missed some newlines
* updating best practice filler method
* add note about get_filler_item_name()
* updates to wording from review
* add section to CODEOWNERS for maintainers of this doc
* use underscores to reference the file easier in CODEOWNERS
* update link to be direct and filter to function name
* makes the kivy connect button do the same username forgetting that /connect does to fix an issue where losing connection would make you unable to connect to a different server
* extract duplicate code
* per request, adds handling on any disconnect to forget the saved password as to not leak it to other servers
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Lingo: Add option to prevent shuffling postgame
* Allow roof access on door shuffle
* Fix broken unit test
* Simplified THE END edge case
* Revert unnecessary change
* Review comments
* Fix mastery unit test
* Update generated.dat
* Added player's name to error message
* [TLOZ]: Fix determinism / Add Location Name Groups / Remove Level 9 Junk Fill
Axing the final uses of world.multiworld.random that were missed before, hopefully fixing the determinism issue brought up in Issue #3664 (at least on TLOZ's end, leaving SMZ3 alone). Also adding location name groups finally, as well as axing the Level 9 Junk Fill because with the new location name groups players can choose to exclude Level 9 with exclude locations instead.
* location name groups
* add take any item and sword cave location name groups
* use sets like you're supposed to, silly
* update the addresses hopefully
* todo
* update address for steam and epic
* oops
* leftover hard address
* made auto tracking say which version of the game
* not needed anymore since they were updated
* FFMQ Efficiency improvement and use new options methods
* Hard check for 0x01 game status
* Fixes
* Why were Mac's Ship entrance hints excluded?
* Two remaining per_slot_randoms purged
* reformat generate_early
* Utils.parse_yaml
* Lingo: Add pilgrimage logic through Starting Room
* Added unit test
* Reverse order of two doors in unit test
* Remove print statements from TestPilgrimage
* Update generated.dat
* - Extracted walnut logic to a Mixin so it can be used in content pack requirements
* - Add 100 walnut requirements to the Queen of Sauce Cookbook
* - Woops a file wasn't added to previous commits
* - Make the queen of sauce cookbook a ginger island only thing, due to the walnut requirement
* - Moved the book in the correct content pack
* - Removed an empty class that I'm not sure where it came from
* makes the kivy connect button do the same username forgetting that /connect does to fix an issue where losing connection would make you unable to connect to a different server
* extract duplicate code
* make sure number of month is actually a int
* improve rule explain like in pr
* remove redundant if in can_complete_bundle
* assert number is int so cache is not bloated
* escape markup in uncolored text
* Fix comment to allign with style guide
Fixes the comment so it follows the style guide, along with making it
better explain the code.
* Make more concise
* Update UndertaleClient.py Fixed output location of the patched game
Fixed the error that when the client is opened outside of the archipelago folder, the patched folder would be created in there which on windows ends up trying to create it in the system32 folder
Bug Report: https://discord.com/channels/731205301247803413/1148330675452264499/1237412436382973962
* Undertale: removed unnecessary wrapping in UndertaleClient.py
I did not know os.path.join was unnecessary in this case the more you know.
* Tests, WebHost: move out setUp and fix typing in api_generate
Also fixes a typo
and changes client to be per-test rather than a ClassVar
* Tests, WebHost: add tests for display_log endpoint
* Tests, WebHost: add tests for host_room endpoint
* Tests, WebHost: enable Flask DEBUG mode for tests
This provides the actual error if a test raised an exception on the server.
* Tests, WebHost: use user_path for logs
This is what custom_server does now.
* Tests, WebHost: avoid triggering security scans
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
* Add hidden early symbol item option, make some unit tests
* Add early symbol item false to the arrows test
* I guess it's not an issue
* more tests
* assertEqual
* cleanup
* add minimum symbols test for all 3 modes
* Formatting
* Add more minimal beatability tests
* one more for the road
* I HATE THIS AAAAAAAAAAAHHHHHHHHHHH WHY DID WE GO WITH OPTIONS
* loiaqeäsdhgalikSDGHjasDÖKHGASKLDÖGHJASKLJGHJSAÖkfaöslifjasöfASGJÖASDLFGJ'sklgösLGIKsdhJLGÖsdfjälghklDASFJghjladshfgjasdfälkjghasdöLfghasd-kjgjASDLÖGHAESKDLJGJÖsdaLGJHsadöKGjFDSLAkgjölSÄDghbASDFKGjasdLJGhjLÖSDGHLJASKDkgjldafjghjÖLADSFghäasdökgjäsadjlgkjsadkLHGsaDÖLGSADGÖLwSdlgkJLwDSFÄLHBJsaöfdkHweaFGIoeWjvlkdösmVJÄlsafdJKhvjdsJHFGLsdaövhWDsköLV-ksdFJHGVöSEKD
* fix imports (within apworld needs to be relative)
* Update worlds/witness/options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Sure
* good suggestion
* subtest
* Add some EP shuffle unit tests, also an explicit event-checking unit test
* add more tests yay
* oops
* mypy
* Update worlds/witness/options.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Collapse into one test :(
* More efficiency
* line length
* More collapsing
* Cleanup and docstrings
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Clean these functions up, get the hell out of here 5 parameter function
* Clean up a bunch of rules that no longer need to be multi-lined since the functions are shorter
* Clean up some range functions
* Update to use world instead of player like Vi recommended
* Fix merge conflict
* Fix after merge
* Change 'The Body main area' by 'The Body center area' for consistency
* Renaming some locations for consistency
* Adding a line for standard
* Replacing Cathedral by Mithalas Cathedral and addin Blind goal option
* Client option renaming for consistency
* Fix death link not working
* Removing death link from the option to put it client side
* Changing Left to Right
* 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
* add Range= to log, making responses a lot smaller for massive rooms
* switch xhr to fetch
* post the form using fetch if possible
* also refresh log faster while waiting for command echo / response
* do not follow redirect, saving a request
* do not post empty body
* smooth-scroll the log view
* paste the log into the div when loading the HTML (up to 1MB, rest will be `fetch`ed)
* fix duplicate charset in display_log response
* Add note about bushes to logic section of readme
* Fix missing logic on bridge switch chest in upper zig
* Revise upper zig rule change to account for ER
* Add imo all needed options to fill_slot_data that are worth tracking in the poptracker pack. This is aimed at providing information for the oot poptracker-pack for autofilling of settings within this pack.
* cap line length at 120 and reorganize list
---------
Co-authored-by: StripesOO7 <54711792+StripeesOO7@users.noreply.github.com>
* Updated the options definitions to the new api
* Fixed the wrong base class being used for UndertaleOptions
* Undertale: Added get_filler_item_name to Undertale, changed multiworld.per_slot_randoms to self.random, removed some unused imports in options.py, and fixed rules.py still using state.multiworld instead of world.options, and simplified the set_completion_rules function in rules.py
* Undertale: Fixed it trying to add strings to the finished item pool
* fixed 1000g item not being in the key items pool for Undertale
* Removed ".copy()" for the junk_weights, reformatted the requested lines to have less new lines, and changed "itempool += [self.create_filler()]" to "itempool.append(self.create_filler())"
* Change setup_en.md to use Latest releases page
Really simple change to point users to the Latest release page instead of the Releases page. Saw a user accidentally download 0.3.6 because it was the last item on the page (they're accustomed to scrolling down to the bottom of the page in GitHub for the Assets section), and this change prevents that outright.
* Update setup_en.md
Rewrite text and link to restore semantic compatibility.
for doom 2, some of the armor and health weights were nudged down
to compensate for the addition of the megasphere
for heretic, the torch was just added without changing anything else,
as I felt doing so would negatively impact the distribution of
artifacts (and personally I already feel there's too few in a game)
Added require_pokedex, blind_trainers, and area_1_to_1 mapping, which would be helpful to the poptracker packs to accurately reflect the checks available to players.
* Render option documentation as reStructuredText in the WebView
This means that options can use the standard Python documentation
format, while producing much nicer-looking documentation in the
WebView with things like emphasis, lists, and so on.
* Opt existing worlds out of rich option docs
This avoids breaking the rendering of existing option docs which were
written with the old plain text rendering in mind, while also allowing
new options to default to the rich text rendering instead.
* Use reStructuredText formatting for Lingo Options docstrings
* Disable raw and file insertion RST directives
* Update doc comments per code review
* Make rich text docs opt-in
* Put rich_text_options_doc on WebWorld
* Document rich text API
* Code review
* Update docs/options api.md
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Update Options.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
---------
Co-authored-by: Chris Wilson <chris@legendserver.info>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Player Options: Fix Named Range displays
* Also add validation to the NamedRange class itself
* Don't break Stardew
* Comment
* Do replace first so title works correctly
* Bring change to Weighted Options as well
* WebHost: Fix "Add" button for Progression Balancing causing a weird redirect
This "add" button is part of a form, which causes it to submit the form, because the default type for a button is "submit".
This PR changes the type of the button to "button", which causes it to not submit the form and just execute its normal effect.
(An alternative would be `event.preventDefault()` but that seems less clean to me, but also I'm not a HTML/JS dev)
* There's also multiple.
* CI: build: fail fast if setup.py fails on windows
* CI: build: fail for missing uploads, rework compression
Upload-artifact allows setting compression level now.
The change speeds up both upload and extraction.
* CI: match build gz in release
* CI: build: verify worlds all load
* CI: build: generate a game
* Generate: move worlds loaded exception to allow settings to init from worlds
* CI: build: build setup before running tests
* Speedups: remove dependency on c++
* Speedups: intset: handle malloc failing
* Speedups: intset: fix corner case for int64 on 32bit systems
original idea was to only use bucket->val if int<pointer,
but we always have a union now anyway
* Speedups: add size comment to player_set bucket configuration
* test: more tests for LocationStore.find_item
* test: require _speedups in CI
This kind of tests that the build succeeds.
* test: even more tests for LocationStore.find_item
* Speedups: intset uniform comment style
* Speedups: intset: avoid memory leak when realloc fails
* Speedups: intset: make `gcc -pedantic -std=c99 -fanalyzer` without warnings
Unnamed unions are not in C99, this got fixed.
The overhead of setting count=0 is minimal or optimized-out and silences -fanalizer (see comment).
* Speedups: don't leak memory in case of exception
* Speedups: intset: validate alloc and free
This won't happen in our cython, but it's still a good addition.
* CI: add test framework for C/C++ code
* CI: ctest: fix cwd
* Speedups: intset: ignore msvc warning
* Tests: intset: revert attempt at no-asan
We solve this with env vars in ctest now, and this fails for msvc.
* Test: cpp: docs: fix typo
* Test: cpp: docs: fix another typo
* Test: intset: proper bucket count for Negative test
INTxx_MIN % 1 would not produce a negative number, so the test was flawed.
Previously, this crashed because `typing.NamedTuple` fields such as
`group.name` aren't assignable. Now it will only fail for group names
that are actually incorrectly cased, and will fail with a better error
message.
* Tests: Add checksum validation to the postgen datapackage test
* add a special case for the test world datapackage rather than hidden
* add the test world to the datapackage instead of special casing around it
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* client: Added command history access with up/down and command echo in common client
* client: Changed command echo colour to orange
* client: removed star import from typing
* client: updated code style to match style guideline
* client: adjusted ordering of calling parent constructor in command prompt input constructor
* client: Fixed issues identified by beauxq in PR; fixed some typing issues
* client: PR comments; replaced command history list with deque
* Core: hot reload components from installed apworld
* address PR reviews
`Launcher` widget members default to `None` so they can be defined in `build`
`Launcher._refresh_components` is not wrapped
loaded world goes into `world_sources` so we can check if it's already loaded.
(`WorldSource` can be ordered now without trying to compare `None` and `float`)
(don't load empty directories so we don't detect them as worlds)
* clarify that the installation is successful
* Test: add hosting simulation test
* WebHost: add weak typing to get_app()
* MultiServer: add typing to auto_saver_thread
* MultiServer: don't cancel task, properly end it
* customserver: stop auto-save thread from saving after shutdown
and make sure it stops, another potential memory leak
* MultiServer, customserver: make datapackage small again
* customserver: collect/finish room tasks
Hopefully fixes the memory leak we are seeing
* CI: test hosting
* Test: hosting: verify autohoster saves on Ctrl+C
* customserver: save when stopping via Ctrl+C
* A Short Hike: New options and stuff
* Add to slot data for poptracker
* Address concerns
* Address concerns
* Fix indentations
* Update option description
* Address all issues
* Group "or"s
* Core: add unit tests for the numeric options
* document using a collection and the hashing quirk
* add another example for the footgun
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
There was a bug that made lots of flashing terrain if a game over happened in certain places.
(And this could be dangerous for people sensitive to flashing lights.)
There was also a bug with a bad sound effect after a game over.
* Ensure that included/starter songs only include those within enabled dlcs.
* Allow filtering traps by trap instead of by category.
* Add in the currently available limited time dlcs to the dlc list.
* Add the option group to the webhost and cleanup some errors.
* Fix trap list.
* Update tests. Add new ones to test correctness of new features.
* Remove the old Just As Planned option
* Make traps order alphabetically. Also adjust the title for traps.
* Adjust new lines to better fit the website.
* Style fixes.
* Test adjustments and a fix due to test no longer having just as planned dlc.
* Undo spacing changes as it breaks yaml generation.
* Fix indenting in webhost.
* Add the old options in as removed. Also clean up unused import.
* Remove references to the old allow_just_as_planned_dlc_songs option in Muse Dash tests.
* Add newline to end of file.
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* duh
* Fuck it
* Major fixes
* a
* b
* Even more fixes
* New option - NoFreeRoamFinale
* a
* Hat Logic Fix
* Just to be safe
* multiworld.random to world.random
* KeyError fix
* Update .gitignore
* Update __init__.py
* Zoinks Scoob
* ffs
* Ruh Roh Raggy, more r-r-r-random bugs!
* 0.9b - cleanup + expanded logic difficulty
* Update Rules.py
* Update Regions.py
* AttributeError fix
* 0.10b - New Options
* 1.0 Preparations
* Docs
* Docs 2
* Fixes
* Update __init__.py
* Fixes
* variable capture my beloathed
* Fixes
* a
* 10 Seconds logic fix
* 1.1
* 1.2
* a
* New client
* More client changes
* 1.3
* Final touch-ups for 1.3
* 1.3.1
* 1.3.3
* Zero Jumps gen error fix
* more fixes
* Formatting improvements
* typo
* Update __init__.py
* Revert "Update __init__.py"
This reverts commit e178a7c0a6.
* init
* Update to new options API
* Missed some
* Snatcher Coins fix
* Missed some more
* some slight touch ups
* rewind
* a
* fix things
* Revert "Merge branch 'main' of https://github.com/CookieCat45/Archipelago-ahit"
This reverts commit a2360fe197, reversing
changes made to b8948bc495.
* Update .gitignore
* 1.3.6
* Final touch-ups
* Fix client and leftover old options api
* Delete setup-ahitclient.py
* Update .gitignore
* old python version fix
* proper warnings for invalid act plandos
* Update worlds/ahit/docs/en_A Hat in Time.md
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
* Update worlds/ahit/docs/setup_en.md
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
* 120 char per line
* "settings" to "options"
* Update DeathWishRules.py
* Update worlds/ahit/docs/en_A Hat in Time.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* No more loading the data package
* cleanup + act plando fixes
* almost forgot
* Update Rules.py
* a
* Update worlds/ahit/Options.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* Options stuff
* oop
* no unnecessary type hints
* warn about depot download length in setup guide
* Update worlds/ahit/Options.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* typo
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* Update worlds/ahit/Rules.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* review stuff
* More stuff from review
* comment
* 1.5 Update
* link fix?
* link fix 2
* Update setup_en.md
* Update setup_en.md
* Update setup_en.md
* Evil
* Good fucking lord
* Review stuff again + Logic fixes
* More review stuff
* Even more review stuff - we're almost done
* DW review stuff
* Finish up review stuff
* remove leftover stuff
* a
* assert item
* add A Hat in Time to readme/codeowners files
* Fix range options not being corrected properly
* 120 chars per line in docs
* Update worlds/ahit/Regions.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Update worlds/ahit/DeathWishLocations.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Remove some unnecessary option.class.value
* Remove data_version and more option.class.value
* Update worlds/ahit/Items.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Remove the rest of option.class.value
* Update worlds/ahit/DeathWishLocations.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* review stuff
* Replace connect_regions with Region.connect
* review stuff
* Remove unnecessary Optional from LocData
* Remove HatType.NONE
* Update worlds/ahit/test/TestActs.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* fix so default tests actually don't run
* Improve performance for death wish rules
* rename test file
* change test imports
* 1000 is probably unnecessary
* a
* change state.count to state.has
* stuff
* starting inventory hats fix
* shouldn't have done this lol
* make ship shape task goal equal to number of tasksanity checks if set to 0
* a
* change act shuffle starting acts + logic updates
* dumb
* option groups + lambda capture cringe + typo
* a
* b
* missing option in groups
* c
* Fix Your Contract Has Expired being placed on first level when it shouldn't
* formatting
* major logic bug fix for death wish
---------
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Fix improper css for word-break on player-options page
* Add default handling to weighted-options types
* Remove random-low/mid/high from Toggle, Choice, and TextChoice,
* Port key sorting for OptionList and OptionSet from player-options to weighted-options
* Ensure Choice and TextChoice values are set properly
* Remove debug line 🤦♂️
* Pokemon RB: Add an item group for each HM
HMs are suffixed with the name of the move, e.g. "HM02 Fly". If TM
move are randomized, they do not have the move name, e.g. "TM02".
If someone hints for an HM using the just the number, the fuzzy matching
sees "TM02" as closer than "HM02 Fly", and in fact sees it as close
enough to not ask the user to confirm, leading them to waste hint points
on non-progression item that they didn't intend.
Emerald already does this for this reason, adding the same for RB.
* Add the new groups for HMs in the item_table instead
* 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
* New classification changes (Credit: Exempt-Medic)
* Don't need to pass world
* Comments
* Replace it with another magic system because why not at this point :DDDDDD
* oops
* Oops
* Another was missed
* Make events conditions. Disable_Non_Randomized will no longer just 'have all events'
* What the fuck? Has this just always been broken?
* Don't have boolean function with 'not' in the name
* Another useful classification
* slight code refactor
* Funny haha booleans
* This would create a really bad merge error
* I can't believe this actually kind of works
* And here's the punchline. + some bugfixes
* Comment dat code
* Comments galore
* LMAO OOPS
* so nice I did it twice
* debug x2
* Careful
* Add more comments
* That comment is a bit unnecessary now
* Fix overriding region connections
* Correct a comment
* Correct again
* Rename variable
* Idk I guess this is in this branch now
* More tweaking of postgame & comments
* This is commit just exists to fix that grammar error
* I think I can just fucking delete this now???
* Forgot to reset something here
* Delete dead codepath
* Obelisk Keys were getting yote erroneously
* More comments
* Fix duplicate connections
* Oopsington III
* performance improvements & cleanup
* More rules cleanup and performance improvements
* Oh cool I can do this huh
* Okay but this is even more swag tho
* Lazy eval
* remove some implicit checks
* Is this too magical yet
* more guard magic
* Maaaaaaaagiccccccccc
* Laaaaaaaaaaaaaaaazzzzzzyyyyyyyyyyy
* Make it docstring
* Newline bc I like that better
* this is a little spooky lol
* lol
* Wait
* spoO
* Better variable name and comment
* Improved comment again
* better API
* oops I deleted a deepcopy
* lol help
* Help???
* player_regionsns lmao
* Add some comments
* Make doors disabled properly again. I hope this works
* Don't disable lasers
* Omega oops
* Make Floor 2 Exit not exist
* Make a fix that's warps compatible
* I think this was an oversight, I tested a seed and it seems to have the same result
* This is definitely less Violet than before
* Does this feel more violet lol
* Exception if a laser gets disabled, cleanup
* Ruff
* >:(
* consistent utils import
* Make autopostgame more reviewable (hopefully)
* more reviewability
* WitnessRule
* replace another instance of it
* lint
* style
* comment
* found the bug
* Move comment
* Get rid of cache and ugly allow_victory
* comments and lint
* Started to create the french doc
* First version of sc2 setup in french finish, created the file for the introduction of the game in french
* French-fy upgrade in setup, continue translation of game description
* Finish writing FR game page, added a link to it on the english game page. Re-read and corrected both the game page and setup page.
* Corrected a sentence in the SC2 English setup guide.
* Applied 120 carac limits for french part, applied modification for consistency.
* Added reference to website yaml checker, applied several wording correction/suggestions
* Modified link to AP page to be in relative (fr/en), uniformed SC2 and random writing (fr), applied some suggestons in writing quality(fr), added a mention to the datapackage (fr/en), enhanced prog balancing recommendation (fr)
* Correction of some grammar issues
* Removed name correction for english part since done in other PR; added mention to hotkey and language restriction
* Applied suggestions of peer review
* Applied mofications proposed by reviewer about the external website
---------
Co-authored-by: neocerber <neorcerber@gmail.com>
* allow option groups to specify whether they should be hidden or not
* allow worlds to override whether game options starts collapsed
* remove Game Options assert so the visibility of that group can be changed
* if "Game Options" or "Item & Location Options" groups are specified, fix casing
* don't allow item & location options to have duplicates of the auto added options
* use a generator instead of a comprehension
* use consistent naming
* move item_and_loc_options out of the meta class and into the Options module
* don't allow empty world specified option groups
* reuse option_group generation code instead of rewriting it
* delete the default group if it's empty
* indent
* Core: Utils.py typing
`get_fuzzy_results` typing
There are places that this is called with a `word_list` that is not a `Sequence`, and it is valid (e.g., `set` or `dict`).
To decide the right type, we look at how `word_list` is used:
- the parameter to `len` - requires `__len__`
- the 2nd parameter to `map` - requires `__iter__`
Then we look at https://docs.python.org/3/library/collections.abc.html#collections-abstract-base-classes and ask what is the simplest type that includes both `__len__` and `__iter__`: `Collection`
(Python 3.8 requires using the alias in `typing`, instead of `collections.abc`)
* a bit more typing and cleaning
* fine, take away my fun for something that no one is ever going to see anyway...
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* - Fix link in Stardew Setup Guide
* - Create option groups for Stardew Valley
* - Cleaned up the imports
* - Fixed double quotes and trailing comma
* - Improve order in the multipliers category
* Fixed shop changes
* Update option description
* Apply suggestions from Vi's review (thank you)
* Fix for plando connections on a full scene
* Plando connections should work better now for complicated paths
* Even more good plando connections yes
* Starting to move the info over
* Fixing up formatting a bit
* Remove unneeded item info
* Put in updated_reachable_regions, to replace add_dependent_regions
* Updated to match ladder shuffle
* More stuff I guess
* It functions!
* It mostly works with plando now, some slight issues still
* Fixed minor logic bug
* Fixed world leakage
* Change exception message
* Make exception message better for troubleshooting failed connections
* Merged with main
* technically a logic fix but it would never matter cause no start shuffle
* Add a couple more alias item groups cause yeah
* Rename beneath the vault front -> beneath the vault main
* Flip lantern access rule to the region
* Add missing connection to traversal reqs
* Move start_inventory_from_pool to the top so that it's next to start_inventory
* Reword the fixed shop description slightly
* Refactor per ixrec's comments
* Greatly reduced an overcomplicated block because Vi is cool and smart and also cool
* Rewrite traversal reqs thing per Vi's comments
when switching to multiple rooms per process, we ended up modifying the static server data
because that's how _load works and the data is now shared between multiple rooms.
* 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
* Implement support for option groups. WebHost options pages still need to be updated.
* Remove debug output
* In-progress conversion of player-options to Jinja rendering
* Support "Randomize" button without JS, transpile SCSS to CSS, include map file for later editors
* Un-alphabetize options, add default group name for item/location Option classes, implement more option types
* Re-flow UI generation to avoid printing rows with unsupported or invalid option types, add support for TextChoice options
* Support all remaining option types
* Rendering improvements and CSS fixes for prettiness
* Wrap options in a form, update button styles, fix labels, disable inputs where the default is random, nuke the JS
* Minor CSS tweaks, as recommended by the designer
* Hide JS-required elements in noscript tag. Add JS reactivity to range, named-range, and randomize buttons.
* Fix labels, add JS handling for TextChoice
* Make option groups collapsable
* PEP8 current option_groups progress (#2604)
* Make the python more PEP8 and remove unneeded imports
* remove LocationSet from `Item & Location Options` group
* It's ugly, but YAML generation is working
* Stop generating JSON files for player-options pages
* Do not include ItemDict entries whose values are zero
* Properly format yaml output
* Save options when form is submitted, load options on page load
* Fix options being omitted from the page if a group has an even number of options
* Implement generate-game, escape option descriptions
* Fix "randomize" checkboxes not properly setting YAML options to "random"
* Add a separator between item/location groups and items/locations in their respective lists
* Implement option presets
* Fix docs to detail what actually ended up happening
* implement option groups on webworld to allow dev sorting (#2616)
* Force extremely long item/location/option names with no spaces to text-wrap
* Fix "randomize" button being too wide in single-column display, change page header to include game name
* Update preset select to read "custom" when updating form inputs. Show error message if the user doesn't input a name
* Un-break weighted-options, add option group names to weighted options
* Nuke weighted-options. Set up framework to rebuild it in Jinja.
* Generate styles with scss, remove styles which will be replaced, add placeholders for worlds
* Support Toggle, DefaultOnToggle, and Choice options in weighted-options
* Implement expand/collapse without JS for worlds and option groups
* Properly style set options
* Implement Range and NamedRange. Also, CSS is hard.
* Add support for remaining option types. JS and backend still forthcoming.
* Add JS functionality for collapsing game divs, populating span values on range updates. Add <noscript> tag to warn users with JS disabled.
* Support showing/hiding game divs based on range value for game
* Add support for adding/deleting range rows
* Save settings to localStorage on form submission
* Save deleted options on form submission
* Break weighted-options into a per-game page.
- Break weighted-options into a per-game page
- Add "advanced options" links to supported games page
- Use details/summary tags on supported games, player-options, and weighted-options
- Fix bug preventing previously deleted rows from being removed on page load if JS is enabled
- Move route handling for options pages to options.py
- Remove world handling from weighted-options
* Implement loading previous settings from localStorage on page load if JS is enabled
* Weighted options can now generate YAML files and single-player games
* options pages now respect option visibility settings for simple and complex pages
* Remove `/weighted-settings` redirect, fix weighted-options link on player-options page
* Fix instance of AutoWorld not having access to proper `random`
* Catch instances of frozenset along with set
* Restore word-wrap in tooltips
* Fix word wrap in player-options labels
* Add `dedent` filter to help with formatting tooltips in player-options
* Do not change the ordering of keys when printing yaml files
* Move necessary import out of conditional statement
* Expand only the first option group by default on both options pages
* Respect option visibility when generating yaml template files
* Swap to double quotes
* Replace instances of `/weighted-settings` with `/weighted-options`, swap out incomplete links
* Strip newlines and spaces after applying dedent filter
* Fix documentation for option groups
* Update site map
* Update various docs
* Sort OptionSet lists alphabetically
* Minor style tweak
* Fix extremely long text overflowing tooltips
* Convert player-options to use CSS grid instead of tables
* Do not display link to weighted-options page on supported games if the options page is an external link
* Update worlds/AutoWorld.py
Bugfix by @alwaysintreble
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Fix NamedRange options not being properly set if a preset it loaded
* Move option-presets route into options.py
* Include preset name in YAML if not "default" and not "custom"
* Removed macros for PlandoBosses and DefaultOnToggle, as they were handled by their parent classes
* Fix not disabling custom inputs when the randomize button is clicked
* Only sort OptionList and OptionSet valid_keys if they are unordered
* Quick style fixes for player-settings to give `select` elements `text-overflow: ellipsis` and increase base size of left-column
* Prevent showing a horizontal scroll bar on player-options if the browser width was beneath a certain threshold
* Fix a bug in weighted-options which prevented inputting a negative value for new range inputs
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* some worlds: some typing in `LocalRom`
### `read_bytes`
It's not safe to return `bytearray` when we think it's `bytes`
```python
a = rom.read_bytes(8, 3)
hash(a) # This won't crash, right?
```
### `write_bytes`
`Iterable[SupportsIndex]` is what's required for `bytearray.__setitem__(slice, values)`
We need to add `__len__` for the `len(values)` in this function.
* remove `object` inheritance
* Initial implementation of Yu-Gi-Oh! WC 2006
* Added Opponents and banlists
* Initial implementation of Yu-Gi-Oh! WC 2006
* Added Opponents and banlists
* Added Campaign Logic
* Added Bonuses Logic
* Added challenge logic
* fixed yugioh client
* ygo06 rom cleanup and include lua
* ygo06 patch cleanup
* ygo06 move client to world folder
* lots of small changes
* bug fixes
* implemented filler item for yugioh06
* BizHawkClient: Add client and connector
* BizHawkClient: Add launcher component and inno_setup lines
* BizHawkClient: Misc stability updates and small improvements
Bad commit organization a consequence of working with two different branches and not keeping the commits separated
* BizHawkClient: Add docstrings
* BizHawkClient: Pull in changes from other branch
* BizHawkClient: Fix no handler message not displaying after changed ROMs
* BizHawkClient: Remove extra print statement from lua
* BizHawkClient: Change version command to use raw strings
* BizHawkClient: Change script version to single integer
* YGO06: added logic for "all expect type forbidden" limited duels
* YGO06: Structure Deck choice now affects logic. Fixed a bug with tier 5 campaign opponents. Added logic for TD16 Union.
* BizHawkClient: Add newline to version for lua script
* BizHawkClient: Call send_connect from BizHawkClient's watcher loop
* BizHawkClient: Add handling for failed request getting script version
* BizHawkClient: Have base64.lua check lua version explicitly for bit operations
On 2.9, it would detect LuaJIT and flood the console with deprecation warnings
* BizHawkClient: Update connector script for slightly better errors and address Gambatte frame sync issue
* BizHawkClient: Remove accidentally added print statements
* BizHawkClient: Fix connector server not closing correctly
* BizHawkClient: Move some connector code around, some linting
* BizHawkClient: Small cleanup in lua
* BizHawkClient: Lua linting
* BizHawkClient: Remove outdated sentences in docstrings
* YGO06: Logic additions and bug fixes
* BizHawkClient: Correctly null check patch file arg
* BizHawkClient: Initialize logging
* BizHawkClient: Move code to worlds/_bizhawk
Also splits out BizHawk communication functions to their own file for use outside this client
* BizHawkClient: Add license to connector lua, add types to docs
* BizHawkClient: Add module docstrings
* YGO06: Logic additions
* BizHawkClient: Allow clients to define multiple systems
* BizHawkClient: Better logging and handling of interruptions to connection to script
* YGO06: Logic additions
* YGO06: Added text to options
* YGO06: Ported to bizhawk client
* YGO06: fix goal not being detected
* YGO06: fix access item rule for tier 5 column 1 and 2
* YGO06: docu and bug fixes
* YGO06: change name
* YGO06: some fixes
* YGO06: fix starting opponent and booster not applying
* YGO06: added option to reduce the amount of challenges and remove the no ban list from pool.
* YGO06: added rom being asked for on first use
* YGO06: fix rules for challenges
* YGO06: create proper rules for TD04 Ritual Summon
* YGO06: mark most banlists as usefull instead of progression
* YGO06: reduce the required core boosters across the board
* YGO06: fix client not loading if another game already loaded the bizhawk client
* YGO06: fix client not finding the bizhawk client.
* YGO06: fix TD08 Draw not giving out an item
* YGO06: small text changes
* YGO06: update to version 0.4.4
* YGO06: logic mixin clean-up
* YGO06: added option for campaign opponents as goal
* Pokemon Emerald add encounter table randomization
* Pokemon Emerald: Item ball randomization working
* Pokemon Emerald: Clean up code a little
* Pokemon Emerald: Partial rework of region/location creation
* Pokemon Emerald: Dedupe items and add more readable names
* Refactor region creation to manually defined regions
* Split region json
* Use new data.json with flattened constants and add HM locations
* YGO06: bug fixes
* YGO06: bug fix
* YGO06: changes default options to be more beginner friendly
* YGO06: attempt at universal tracker support. Settings are stored in slot data now.
* YGO06: fix for older python versions
* YGO06: fix slot data
* YGO06: added diiferent opponents to the campaign
* YGO06: fix small bug with opponent icons
* YGO06: fix unwanted changes
* YGO06: repair merge with main
* YGO06: map out all of the opponents
* YGO06: added opponent shuffle
* YGO06: added logic to opponent shuffle
* YGO06: added option to use ocg art
* YGO06: bug_fixes
* YGO06: removed todos, since they are not needed anymore
* YGO06: added draft mode
* YGO06: added logic to draft mode
* YGO06: Added Money multiplier when you lose
* YGO06: Fixed Unit Test errors
* YGO06: Added Random deck option
* YGO06: Bug fix with registering client
* YGO06: client clean-up
* YGO06: fixed card misspellings
* YGO06: removed unused imports and other small changes
* YGO06: small changes
* YGO06: fix generation error when the combination of starting with "No Banlist" and not adding "No Banlist" to the pool is selected
* YGO06: fix ocg art path overwriting Huge Revolution bugfix
* YGO06: added comments and other minor changes
* YGO06: fixed byte length in client for money
* YGO06: fixes for webhost and options
* YGO06: use the proper random function
* YGO06: change settings to options
* YGO06: move to procedure patch
* YGO06: fix imports
* YGO06: fix download link for patch not showing
* YGO06: remove unnecessary Optional
* YGO06: fix universal tracker stuff
* YGO06: add typings
* YGO06: small cleanup
* yugioh06: small change to setup
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* YGO06: remove logic mixin
* YGO06: fix create item and implement create filler and get filler item name
* YGO06: remove double lambdas
* YGO06: use pkgutil.get_data instaed pf zipFile
* YGO06: fix starting items being duplicated
* YGO06: lots of small changes
* YGO06: moved functions to match execution order
* YGO06: run ruff
* YGO06: run ruff format
* YGO06: fix ruff errors
* YGO06: undo ruff format for rules
* YGO06: move import to prevent circular dependency
* YGO06: remove unused class
* YGO06: optimizing rules
* YGO06: some optimization and small bug fix
---------
Co-authored-by: Zunawe <gyroscope15@gmail.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Docs: remove obsolete yaml generation info
This line was added when we didn't have the "Generate Template Options" button in the launcher.
* add information about `Launcher.py`
* Hylics 2: Remove Random Start option and replace it with Start Location option
* remove choice
* Readd random start to slot data
* newlines
* Add random_start as a Removed option
* Update advanced yaml guide wording
* Update options api as well
* Update exclude locations description slightly to use more current verbiage
* Update priority locations in options api.md to note what happens if it runs out
* Remove auto-added bullet points
* Slightly mess with wording to make it more succinct
* throw an error for unknown options
* move the error to the end of trigger resolution and make trigger names valid
* add bad hardcoded stuff for LTTP
* use itertools.chain instead of a ChainMap
* remove accidental unused import
* make the check after both trigger resolutions so no valid keys are missed, and only check relevant game.
* log a warning instead of crashing
* delete options from the weights once it gets registered for cleaner erroring
* grammar hard
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 has_list and count_list and improve (?) count_group
* MESSENGER STOP
* Add docstrings to has_list and count_list
* Add docstrings for has_group and count_group as well
* oops
* Rename to has_from
* docstrings improvement again
* Docstring
* Pokemon Emerald: Add event ticket locations to client data store flags
* Pokemon Emerald: Add regi doors event flag
* Pokemon Emerald: Add more tracker flags
* Cleanup and new option support
* Handle new locations
* Support higher Strawberry counts
* Don't add start inventory items to the pool
* Support Move Shuffle functionality and items
* Hard and Move Shuffle Logic
* Fix Options
* Update CHANGELOG.md
* Add standard moves logic for signs 3 and 4
* Fix Option Tooltip
* Add tracker link to setup guide
* Fix unit test
* Fix option tooltips
* Missing Space
* Move option checking out of rule function
* Delete just_gen500.bat
* Core: allow for single player state sweeping
* Fill: have distribute items use single_player fill when it can
* oop
* pass locations to sweep_for_events instead of the player
* finally found the diff that was breaking swap
* LTTP fills everyone's dungeons at once, not just a single player's
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Fixed Logic in Rules.py
As of easy logic of this goal is
set_rule(world.multiworld.get_location("GO! GO! MARIO!!: Stars", player), lambda state: logic.has_midring(state) or (state.has("Tulip", player) and logic.cansee_clouds(state)))
normal logic shouldn't need any collectable.
* Corrected Logic Rules.py
* Update entrance rando description to discuss seed groups
* Starting off, setting up some names
* It lives
* Some preliminary plando connection handling, probably has errors
* Add missed comma
* if -> elif
* I think this is working properly to handle plando connections
* Update comments
* Fix up shop -> shop portal stuff
* Add back comma that got removed for no reason in the ladder PR
* Remove unnecessary if else
* add back the actually necessary if but not the else
* okay they were both necessary
* Update entrance rando description
* blasphemy
Co-authored-by: Silent <110704408+silent-destroyer@users.noreply.github.com>
* Rename other instances of tunc -> tunic
* Update per Vi's review (thank you)
* Fix a not that shouldn't have been
* Rearrange, update per Vi's comments (thank you)
* Fix indent
* Add a .value
* Add .values
* Fix bad comparison
* Add a not that was supposed to be there
* Replace another isinstance
* Revise option description
* Fix per Kaito's comment
Co-authored-by: Kaito Sinclaire <ks@rosenthalcastle.org>
---------
Co-authored-by: Silent <110704408+silent-destroyer@users.noreply.github.com>
Co-authored-by: Kaito Sinclaire <ks@rosenthalcastle.org>
* Verify the default values of `Option`s.
Since `Option.verify()` can handle normalization of option names, this allows options to define defaults which rely on that normalization. For example, it allows a world to exclude certain locations by default.
This also makes it easier to catch errors if a world author accidentally sets an invalid default.
* Update Generate.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Add location groups for each region
* Capitalize existing location groups
* Capitalize new boss location group names
* Update comment with capitalization
* Capitalize location_type in reigons.py
* Replaced the outdated Tracker Pack with a new one that is also pinned in the Discord channel
* Same change but for Spanish
* Update setup_en.md
* catching the bottom link as well
* See English Setupguide
* huzzah, location groups
* scope creep pog
* Apply suggestion to the other spot it is applicable at too
* apply berserker's suggestion
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Remove extra location group for shops
* Fire rod for magic wand
* Capitalize itme name groups
* Update docs to capitalize item name groups, remove the little section on aliases
since the aliases bit is really more for someone misremembering the name than anything else, like "fire rod" is because you played a lot of LttP, or Orb instead of Magic Orb is clear.
* Fix rule with item group name
* Capitalization is cool
* Fix merge mistake
* Add Flask group, remove Potions group
* Update docs to detail how to find item and location groups
* Revise per Vi's comment
* Fix test
* fuzzy matching please stop
* Remove test change that was meant for a different branch
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Add better "verbs" on joining msg, and improve leaving msgs
* Add 'HintGame' tag, for projects like BKSudoku/APSudoku/HintMachine
* data in one place instead of 3
* Clean up 'ignore_game' loop to use any() instead
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
* Options: Add an OptionError to specify bad options caused the failure
* inherit from ValueError instead of RuntimeError since this error should be thrown via bad input
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Properly name the Book to Book of Magic in Rules.py so you can actually possibly be expected to use Magical Rod plus Book of Magic to get through dark rooms. No wonder we tend to see candles so early oops.
Also adding a rule that you need candles for access to Level 8 so you aren't required to time a Rod+Book shot against a moblin to burn the bush. Might make this a logic trick or something later.
* Add a `robots.txt` file to prevent crawlers from scraping the site
* Added `ASSET_RIGHTS` entry to config.yaml to control whether `/robots.txt` is served or not
* Always import robots.py, determine config in route function
* Finish writing a comment
* Remove unnecessary redundant import and config
* ALTTP: Massive game tracker update.
* Adds dropdowns separated by region for each location and its checked status.
* Adds Bombs for bombless start seeds.
* Adds Triforce Pieces to track.
* Update icon image URLs to match in-game closer.
* Fix issue with grouped progressive items.
* Couple missed points.
* Another edge case with details being refreshed.
* Remove old commented out CSS
* Consolidate a table and move an erroneous location in wrong region.
* ALTTP: Updates and refactors to multi-tracker and player tracker.
* Removed some missed commented out code.
* Add triforce to prepare inventory logic.
* An option was added to enable or disable the pilgrimage, and it defaults to disabled. When disabled, the client will prevent you from performing a pilgrimage (i.e. the yellow border will not appear when you enter the 1 sunwarp). The sun painting is added to the item pool when pilgrimage is disabled, as otherwise there is no way into the Pilgrim Antechamber. Inversely, the sun painting is no longer in the item pool when pilgrimage is enabled (even if door shuffle is on), requiring you to perform a pilgrimage to get to that room.
* The canonical pilgrimage has been deprecated. Instead, there is logic for determining whether a pilgrimage is possible.
* Two options were added that allow the player to decide whether paintings and/or Crossroads - Roof Access are permitted during the pilgrimage. Both default to disabled. These options apply both to logical expectations in the generator, and are also enforced by the game client.
* An option was added to control how sunwarps are accessed. The default is for them to always be accessible, like in the base game. It is also possible to disable them entirely (which is not possible when pilgrimage is enabled), or lock them behind items similar to door shuffle. It can either be one item that unlocks all sunwarps at the same time, six progressive items that unlock the sunwarps from 1 to 6, or six individual items that unlock the sunwarps in any order. This option is independent from door shuffle.
* An option was added that shuffles sunwarps. This acts similarly to painting shuffle. The 12 sunwarps are re-ordered and re-paired. Sunwarps that were previously entrances or exits do not need to stay entrances or exits. Performing a pilgrimage requires proceeding through the sunwarps in the new order, rather than the original one.
* Pilgrimage was added as a win condition. It requires you to solve the blue PILGRIM panel in the Pilgrim Antechamber.
* CI: strict mypy check in github actions
mypy_files.txt is a list of files that will fail the CI if mypy finds errors in them
* don't need these
* `Any` should be a way to silence the type checker
* restrict return Any
* CI: pyright in github actions
* fix mistake in translating from mypy
* missed another change from mypy to pyright
* pin pyright version
* add more paths that should trigger check
* use Python instead of bash
* type error for testing CI
* Revert "type error for testing CI"
This reverts commit 99f65f3dad.
* oops
* don't need to redirect output
A world's player_logic is accessible from the LingoWorld object, so it's not necessary to also pass the LingoPlayerLogic object through every function that uses both.
* Update item pool to include 25 jokes and videos as progression items, as well as a progression GeroCities profile
* Fix a bug in Items.py causing item names to be appended inappropriately
* Remove unnecessary import
* Change item pool to have 50 jokes and 20 motivational videos
* Adjust item pool to have 40 of both jokes and videos
* Fix imports to allow compressing for distribution as a .apworld
* Replace all usages of player settings
* Fixed line break error
* Attempt to fix line break again
* Finally figure out what Pycharm did to this file
* Pycharm search failed me
* Remove duplicate s
* Update ArchipIdle
* Revert random newline changes from Pycharm
* Remove player settings from fstrings and rename --samesettings to --sameoptions
* Finally get PyCharm to not auto-format my commits, randomly inserting the newlines
* Removing player-settings
* Missed one
* Remove final line break error
Co-authored-by: Exempt-Medic <60412657+exempt-medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Exempt-Medic <ExemptMedic@Gmail.com>
* put constants in a bit more sensical order
* fix accidental incorrect scoping
* fix plando rules not being respected
* add docstrings for the plando functions
* fix the portal output pools being overwritten
* use shuffle and pop instead of removing by content so plando can go to the same area twice
* move portal pool rebuilding outside mapping creation
* remove plando_connection cleansing since it isn't shared with transition shuffle
* fix cloudy park 4 rule, zero deathlink message
* remove redundant door_shuffle bool
when generic ER gets in, this whole function gets rewritten. So just clean it a little now.
* properly fix deathlink messages, fix fill error
* update docs
* fix vanilla tool fishing rod requiring metal bars
fix vanilla skill requiring previous level (it's always the same rule or more restrictive)
* add test to ensure fishing rod need fish shop
* fishing rod should be indexed from 0 like a mentally sane person would do.
* fishing rod 0 isn't real, but it definitely can hurt you.
* reeeeeeeee
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
Added non-AP World specific information
* Update contributing.md
Fixed broken link
* Some minor touchups
* Update Contributing.md
Draft for version with picture
* Update contributing.md
Small word change
* Minor updates for conciseness, mostly
* Changed all instances of settings to options in info and setup guides
I combed through all world docs and swapped "setting" to "option" when this was refering to yaml options.
I also changed a leftover "setting" in option.py
* Update contributing.md
* Update contributing.md
* Update setup_en.md
Woops I forgot one
* Update Options.py
Reverted changes regarding options.py
* Update worlds/noita/docs/en_Noita.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md
revert change waiting for that page to be updated
* Update worlds/witness/docs/setup_en.md
* Update worlds/witness/docs/en_The Witness.md
* Update worlds/soe/docs/multiworld_en.md
Fixed Typo
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/witness/docs/en_The Witness.md
* Update worlds/adventure/docs/en_Adventure.md
* Update worlds/witness/docs/setup_en.md
* Updated Stardew valley to hopefully get rid of the merge conflicts
* Didn't work :dismay:
* Delete worlds/sc2wol/docs/setup_en.md
I think this will fix the merge issue
* Now it should work
* Woops
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* initial work on procedure patch
* more flexibility
load default procedure for version 5 patches
add args for procedure
add default extension for tokens and bsdiff
allow specifying additional required extensions for generation
* pushing current changes to go fix tloz bug
* move tokens into a separate inheritable class
* forgot the commit to remove token from ProcedurePatch
* further cleaning from bad commit
* start on docstrings
* further work on docstrings and typing
* improve docstrings
* fix incorrect docstring
* cleanup
* clean defaults and docstring
* define interface that has only the bare minimum required
for `Patch.create_rom_file`
* change to dictionary.get
* remove unnecessary if statement
* update to explicitly check for procedure, restore compatible version and manual override
* Update Files.py
* remove struct uses
* ensure returning bytes, add token type checking
* Apply suggestions from code review
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* pep8
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Adds Archipelago support for Zork Grand Inquisitor, the 1997 point-and-click PC adventure game.
The client (based on `CommonClient`), on top of its regular Archipelago duties, fully handles the randomization of the game and the monitoring / modification of the game state. No game modding needed at all; the player is ready to play an Archipelago seed if they can play the vanilla game through ScummVM.
The "reverse engineering" (there's likely a better term for this...) of the game is my own original work and I included an MIT license at the root of my world directory.
A PopTracker pack was also created to help people learn the game: https://github.com/SerpentAI/ZorkGrandInquisitorAPTracker
Major Content update for Stardew Valley, including the following features
- Major performance improvements all across the Stardew Valley apworld, including a significant reduction in the test time
- Randomized Farm Type
- Bundles rework (Remixed Bundles and Missing Bundle!)
- New Settings:
* Shipsanity - Shipping individual items
* Monstersanity - Slaying monsters
* Cooksanity - Cooking individual recipes
* Chefsanity - Learning individual recipes
* Craftsanity - Crafting individual items
- New Goals:
* Protector of the Valley - Complete every monster slayer goal
* Full Shipment - Ship every item
* Craftmaster - Craft every item
* Gourmet Chef - Cook every recipe
* Legend - Earn 10 000 000g
* Mystery of the Stardrops - Find every stardrop (Maguffin Hunt)
* Allsanity - Complete every check in your slot
- Building Shuffle: Cheaper options
- Tool Shuffle: Cheaper options
- Money rework
- New traps
- New isolated checks and items, including the farm cave, the movie theater, etc
- Mod Support: SVE [Albrekka]
- Mod Support: Distant Lands [Albrekka]
- Mod Support: Hat Mouse Lacey [Albrekka]
- Mod Support: Boarding House [Albrekka]
Co-authored-by: Witchybun <elnendil@gmail.com>
Co-authored-by: Witchybun <96719127+Witchybun@users.noreply.github.com>
Co-authored-by: Jouramie <jouramie@hotmail.com>
Co-authored-by: Alchav <59858495+Alchav@users.noreply.github.com>
* Core: add layer for patches that don't use `Patch.py`
* bump container version
* APAutoPatchInterface name
* mystic quest change
* OoT and Adventure changes
* missed name in docstring
* container version compatibility
* Moves plaque location to front for better tracker referencing.
* Tiki should be Shaman.
* Hanging should be Gallows.
* Merrick spelling.
* Clarity change.
* proof of concept
* add dict support, block top/game level merge
* prevent key error when option being merged is new
* update triggers guide
* Add documentation about add/remove/replace
* move to trailing name instead of proper tag
* update docs
* confirm types
* Update Utils.py
* Update Generate.py
* pep8
* move to + syntax
* forgot to support sets
* specify received type of type error
* Update Generate.py
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Apply suggestion from review
* add test for update weights
* move test to new test case
* Apply suggestions from code review
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Core: typing for `Option.default` and a few other `Option` class variables
This is a replacement for https://github.com/ArchipelagoMW/Archipelago/pull/2173
You can read discussion there for issues we found for why we can't have more specific typing on `default`
instead of setting a default in `Option` (where we don't know the type), we check in the metaclass to make sure they have a default.
* NumericOption doesn't need the type annotation that brings out the mypy bug
* SoE default ClassVar
Changelog:
Features:
- New optional Location Checks
- 3-Up Moons
- Hidden 1-Ups
- Bonus Blocks
- Blocksanity
- All blocks that contain coins or items are included, with the exception of:
- Blocks in Top Secret Area & Front Door/Bowser Castle
- Blocks that are unreachable without glitches/unreasonable movement
- New Items
- Special Zone Clear
- New Filler Items
- 1 Coin
- 5 Coins
- 10 Coins
- 50 Coins
- New Trap Items
- Reverse Trap
- Thwimp Trap
- SFX Shuffle
- Palette Shuffle Overhaul
- New Curated Palette can now be used for the Overworld and Level Palette Shuffle options
- Foreground and Background Shuffle options have been merged into a single setting
- Max possible Yoshi Egg value is 255
- UI in-game is updated to handle 3-digits
- New `Display Received Item Popups` option: `progression_minus_yoshi_eggs`
Quality of Life:
- In-Game Indicators are now displayed on the map screen for location checks and received items
- In-level sprites are displayed upon receiving certain items
- The Camera Scroll unlocking is now only enabled on levels where it needs to be
- SMW can now handle receiving more than 255 items
- Significant World Code cleanup
- New Options API
- Removal of `world: MultiWorld` across the world
- The PopTracker pack now has tabs for every level/sublevel, and can automatically swap tabs while playing if connected to the server
Bug Fixes:
- Several logic tweaks/fixes
"Major credit to @TheLX5 for being the driving force for almost all of this update. We've been collaborating on design and polish of the features for the last few months, but all of the heavy lifting was all @TheLX5."
* Added snes9x-nwa as recommended emulator to the setup guides
* Removed snes9x-nwa from the setup guides of DKC3 and SMW
* Update worlds/alttp/docs/multiworld_en.md
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Removed duplicate text
Minor grammar and spelling fixes
* Unified required software for SM, SMZ3 and SoE with ALTTP
* Added instructions for usage of BSNES-Plus for ALTTP, SM and SMZ3
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* fix, maybe
* typegard for iterable of any
* wow I'm so tired I just changed the method name without changing what it actually does...
* also exclude bytes in is_iterable_but_str
* apply pr comments
* Update Utils.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Revert "also exclude bytes in is_iterable_but_str"
This reverts commit cf087d2ee2.
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* map option objects to a `World.options` dict
* convert RoR2 to options dict system for testing
* add temp behavior for lttp with notes
* copy/paste bad
* convert `set_default_common_options` to a namespace property
* reorganize test call order
* have fill_restrictive use the new options system
* update world api
* update soe tests
* fix world api
* core: auto initialize a dataclass on the World class with the option results
* core: auto initialize a dataclass on the World class with the option results: small tying improvement
* add `as_dict` method to the options dataclass
* fix namespace issues with tests
* have current option updates use `.value` instead of changing the option
* update ror2 to use the new options system again
* revert the junk pool dict since it's cased differently
* fix begin_with_loop typo
* write new and old options to spoiler
* change factorio option behavior back
* fix comparisons
* move common and per_game_common options to new system
* core: automatically create missing options_dataclass from legacy option_definitions
* remove spoiler special casing and add back the Factorio option changing but in new system
* give ArchipIDLE the default options_dataclass so its options get generated and spoilered properly
* reimplement `inspect.get_annotations`
* move option info generation for webhost to new system
* need to include Common and PerGame common since __annotations__ doesn't include super
* use get_type_hints for the options dictionary
* typing.get_type_hints returns the bases too.
* forgot to sweep through generate
* sweep through all the tests
* swap to a metaclass property
* move remaining usages from get_type_hints to metaclass property
* move remaining usages from __annotations__ to metaclass property
* move remaining usages from legacy dictionaries to metaclass property
* remove legacy dictionaries
* cache the metaclass property
* clarify inheritance in world api
* move the messenger to new options system
* add an assert for my dumb
* update the doc
* rename o to options
* missed a spot
* update new messenger options
* comment spacing
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* fix tests
* fix missing import
* make the documentation definition more accurate
* use options system for loc creation
* type cast MessengerWorld
* fix typo and use quotes for cast
* LTTP: set random seed in tests
* ArchipIdle: remove change here as it's default on AutoWorld
* Stardew: Need to set state because `set_default_common_options` used to
* The Messenger: update shop rando and helpers to new system; optimize imports
* Add a kwarg to `as_dict` to do the casing for you
* RoR2: use new kwarg for less code
* RoR2: revert some accidental reverts
* The Messenger: remove an unnecessary variable
* remove TypeVar that isn't used
* CommonOptions not abstract
* Docs: fix mistake in options api.md
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* create options for item link worlds
* revert accidental doc removals
* Item Links: set default options on group
* Messenger: Limited Movement option first draft
* The Messenger: add automated setup through the launcher
* drop tomllib
* don't uselessly import launcher
* The Messenger: fix missing goal requirement for power seal hunt
* make hard mode goal harder
* make fire seal a bit more lenient
* have limited movement force minimal accessibility
* add an early meditation option
* clean up precollected notes tests a bit
* add linux support
* add steam deck support
* await monokickstart
* minor styling cleanup
* more minor styling cleanup
* 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
* remove seal shuffle option
* some cleanup stuff
* portal rando progress
* pre-emptive region creation
* seals need to be in the datapackage
* put mega shards in old order
* fix typos and make it actually work
* fix more missed connections and add portal events
* fix all the portal rando code
* finish initial logic implementation
* remove/comment out debug stuff
* does not actually support plando yet
* typos and fix a crash when 3 available portals was selected
* finish initial logic for all connections and remove/rename as necessary
* fix typos and add some more leniency
* move item classification determination to its own method rather than split between two spots
* super complicated solution for handling installing the alpha builds
* fix logic bugs and add a test
* implement logic to shuffle the cutscene portals even though it's probably not possible
* just use the one list
* fix some issues with the mod checking/downloading
* Core: have webhost slot name links go through the launcher so that components can use them
* add uri support to the launcher component function
* generate output file under specific conditions
* cleanup connections.py
* set topology_present to true when portals are shuffled
* add requirement for ghost pit loc since it's pretty hard without movement
* bring hard logic back
* misc cleanup
* fix asset grabbing of latest version
* implement ER
* just use the entrances for the spoiler instead of manipulating the cache
* remove test defaults
* remove excessive comprehension
* cleanup and cater data for the client
* add elemental skylands to the shuffle pools
* initial attempts at hint text
* use network items for offline seeds
* change around the offline seed data again
* move er after portal shuffle and ensure a minimal sphere 1
* 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
* add more ER transitions
* fix spoiler output of portal warps
* add path to hint_data
* rename entrance to tot to be a bit clearer
* cleanup imports and update description for hard logic
* cleanup for PR to main
* missed a spot
* cleanup monokickstart
* add location_name_groups
* update docs for new setup
* client can reconnect on its own now, no need for a button.
* fix mod download link grabbing the wrong assets
* cleanup mod pulling a bit and display version it's trying to update to
* plando support
* comment out broken steam deck support
* supports plando
* satisfy flake for currently unused file
* fix the items accessibility test
* review comments
* add searing crags portal to starting portals when disabled like option says
* address sliver comments
* rip out currently unused transition shuffle
* add aerobatics warrior requirement to fire seal
---------
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <beauxq@yahoo.com>
Co-authored-by: Sean Dempsey <dempsey.sean@outlook.com>
Co-authored-by: qwint <qwint.42@gmail.com>
* Tests: add test for all games multiworld and test for two player multiworld per game
* make assertSteps behave like call_all
* review improvements
* fix stage calling and loc copying in accessibility
* add docstrings
* lttp is on the options api now
* skip the all games multiworld for now. likely needs to be modified to test specific worlds
* move skip to the class
* Core: create the per world random object in the world constructor
* remove the check that multiworld exists
* add a deprecation warning to per_slot_randoms
* move random import and fix conflicts
* assert worlds don't exist before setting the multiworld seed
* fix the dlcq and sdv tests
* actually use the seed
* Corrected logic error.
Per discussion here: https://discord.com/channels/731205301247803413/1148330200891932742/1192138309120577646
At the moment, the logic expects Treasure Bumper 2 to require 1 bumper, Treasure Bumper 3 to require 2, etc., and for Treasure Bumper 1 to be in Sphere 1. This is incorrect, each Bumper check should require 1 Bumper item of it's type.
This corrects that. I've verified I was able to generate with it by editing my apworld locally, but I'm also not a programmer and don't know anything about tests. However, I'd think this is a simple change.
* Correct logic in Bumper Sticker unit tests
Off By One errors were rampant in the Bumper Stickers unit test logic. This should correct those errors.
* Correct use of "range" function
The function setting the access rules for Treasure and Booster Bumpers was stopping one short of being applied to all the related locations. This has been corrected.
* Restoring and clarifying designer's original level access intent
The original creator of the AP version of Bumper Stickers intentionally set the Treasure Bumper requirements to logically reach each level 1 higher than the actual game requires, and logic tests were built based on this. This design decision has now been restored.
* Revert "Restoring and clarifying designer's original level access intent"
This reverts commit 5186c5fcc3.
* Correct test logic for level 5
While 33 Treasure Bumpers are generated, only 32 are needed to reach level 5. This push corrects the unit test for the level 5 checks.
* Rename generically-named variables
Change variables from generic names (x, y, n) to more meaningful names, for ease of readability.
---------
Co-authored-by: The T <thet113@gmail.com>
- Perhaps most critically, adds the ability for the door shuffle code to catch door shuffle exceptions and try again. Will try up to 10 times. Should mean Door Shuffle does not need to be disallowed in the big async🤞
- Door Shuffle code has been made drastically faster by searching for the first dead end instead of sorting the whole list of entrances by whether they are dead ends.
- Renames Full to Interiors, and adds a new Full door shuffle that shuffles interior-to-interior doors separately from exterior-to-interior doors.
- Adds a new Decoupled door shuffle.
- Warp Tile Shuffle now has 3 separate options, Vanilla, Shuffle, and Mixed. Shuffle shuffles the warp tiles among themselves, Mixed mixes them into the Door Shuffle pool.
- Safari Zone connections are now shuffled on Full, Insanity, and Decoupled.
- On Simple Door Shuffle, the Town Map is updated to show the new dungeon locations. The Town Map has been updated to show the locations of dungeons that previously were not shown unless you opened the map within them, and the Sea Cottage has been removed from it.
- Adds Auto Level Scaling that chooses the level scaling mode based on the Door Shuffle choice.
- Fixes issues with Flash and Fly move interventions (where it ensures an available Pokémon that can learn it is reachable depending on settings).
- Fixes a possible generation crash with type chart randomization.
- Should fix an issue where `stage_fill_hook` was able to remove the wrong item from the item pool resulting in a duplicated item reference existing.
- Adds a stage_post_fill function which searches for Pokémon in order of spheres, setting all but the first advancement Pokémon event found to `useful` so that spoiler playthrough calculation skips them. In a solo game gen test, this cut gen time from 15 seconds to 10 seconds with same seed number. Difference is likely to be much more massive in larger multiworlds.
Was pointed out that using `state.locations.checked` is not the best solution, even if it's for a completion condition and the Ganon event location would always have the Triforce of Power event item. So let's just check for the Triforce of Power instead. Thank you Zunawe for pointing it out and Silvris for providing the proper rule to use.
* If the user tried to run `/bank` with no arguments to see the current
value while disconnected, previously it threw an exception `KeyError:
'EnergyLinkNone'`. Now it informs the user that they must be connected
and in-game, like `/bank deposit` and `/bank withdraw` do.
I'm also open to adding another `if` branch to make `/bank` only check
for `ctx.server` instead of combining it with the other bank commands,
to allow connecting to check the bank before the game save is loaded.
If that's preferred let me know.
* If the user tried to run `/bank` or `/bank deposit` when the EnergyLink
hadn't been used yet, they would get a `TypeError` exception. Trying
`/bank withdraw` would give no output and would crash the lua
connector script. Now it treats a `None` EnergyLink as `0` and works
properly.
* allow common collection in set and list option constructors
* allow any iterable of strings
* add return None
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Turns out you can't kill Gleeok with bombs or a candle as I happened to find out in a community async. While I'll be fine, a rare combination of settings could put all 4 possible weapons (the three levels of sword and the Magical Rod) to kill Gleeoks behind killing Gleeoks. This fix should prevent that from happening.
Note: Even though there are technically 5 weapons that can kill Gleeok in the pool because at the moment we have an extra copy of the base Sword, I want to future-proof this incase we make changes to the item pool later.
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Despite earlier efforts, there were still rare fill errors when door shuffle and color shuffle were on and early color hallways was off, because sphere 1 was too small. This turns "Starting Room - HI" back into a location, which should give the algorithm more room.
The "forced good item" pool has been reconsidered. The problem with the specific item that caused the recent failure (Welcome Back - Shortcut to Starting Room) is that it only provided one location when color shuffle was on, which is a net of zero considering that the GOOD LUCK check was forced. It will no longer show up as a good item unless color shuffle is off. On an opposite vein, Rhyme Room Doors will now show up even if color shuffle is on, because it gives color hallways access by itself.
A good item will only be forced onto GOOD LUCK now if there is more than one player.
* 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>
* Core: typing: return type of `fill_slot_data` to `Mapping`
type checker be like:
"Wait a minute! If you give this mutable dict to those sussy sketchbags, they might mutate it and invalidate your more specific typing!"
Note that this doesn't mean the return value needs to be immutable. It just means the caller won't mutate it (which matches current `Main.py` implementation).
I've seen some talk of introducing ownership to the type system.
https://discuss.python.org/t/we-may-need-better-specification-for-existing-and-future-refinement-types-in-the-type-system/43955/5
Then maybe I could say: "Do whatever you want with it, because I'm giving up ownership."
But that doesn't exist in the type system currently.
* in docs too
* docs talk less about type and more about json
* keep `dict` to be safe with .net client and json
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>
* Add nmg boss scav kill
* Add boss quick kills
* Fix name of orb
* Remove getting into zig with ice grapple
* Remove connection from quarry to zig
* Add a few missing dependent regions
* Separate the atoll statue and portal pad so that it doesn't assume you can get from one to the other without prayer
* Clarify which kinds of options actually support "random"
The current phrasing of this sentence made me expect "random" to work even on my OptionsDict option. After asking `#archipelago-dev` and checking the `Options.py` code, it's become clear that many option types don't (and can't) support "random". This is my best guess at a more correct wording.
* add a sentence about from_text overrides based on black-silver's suggestion
* Speedups: remove unnecessary cinit
This was meant for (memory) safety, but cython docs clearly state that this
is done automatically. The code generated for cinit with args is what
triggers a 'possible null deref' in clang's static analyzer, so by removing
cinit, we can now use static analysis.
* Speedups: disable pickling ...
... of LocationStore and internal classes.
This reduces code size and avoids accidentally pickling them.
## What is this fixing or adding?
Adds Bombless Start option, along with proper bomb logic. This involves updating `can_kill_most_things` to include checking how many bombs can be held. Many places where the ability to kill enemies was assumed, now have logic. This fixes some possible existing logic issues, for example: Mini Moldorm cave checks currently are always in logic despite the fact that on expert enemy health it would require 12 bombs to kill each mini moldorm.
Overhauls options, pulling them out of core and in particular making large changes to how the shop options work.
Co-authored-by: espeon65536 <81029175+espeon65536@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Bondo <38083232+BadmoonzZ@users.noreply.github.com>
Co-authored-by: espeon65536 <espeon65536@gmail.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
Adds better support for the Universal Tracker (see its channel in the future game design section).
This does absolutely nothing regarding standard gen, just adds some checks for an attribute that only exists when UT is being used.
The Colorful did not actually properly split into individual doors when progressive colorful was off. This change refactors the code that handles special cases with progressive items to make things clearer (which is important because I will be introducing another one).
* Tests: assign the World to WorldTestBase and add a player field (because I like typing self.player far more than random 1's all over the place)
* more accurate docstring for world and multiworld
* use self.player within the class
## What is this fixing or adding?
- Roof MASTERY panels are now technically in individual regions with more descriptive names, so they can be displayed better on the tracker.
- Orange Tower Seventh Floor - Mastery has been renamed to simply Mastery.
- The Optimistic is its own region now.
- The misnamed CEILING in Room Room has been fixed.
- The misnamed CHEESE in Challenge Room has been fixed.
- The misnamed SOUND in Outside the Bold has been fixed.
- "The Bearer - Shortcut to The Bold" is now "The Bearer - Entrance".
- HUB ROOM - NEAR, FAR and the Warts Straw and Leaf Feel Areas have now been semantically combined into the "Symmetry Room". They are still logically three separate regions.
- The FACTS chain in Challenge Room has been reindexed, and the full chain panel is now indicated as such.
- The Room Room floors have been reindexed.
- Panels in The Observant are now named by their questions, not answers.
- Added a (1) subscript to several panels in Orange Tower Fourth Floor, Outside The Initiated, and The Seeker.
The validate_config.rb script has also been updated to check that all items and locations have an ID.
This change should not impact generation logic at all. It is just changing item and location names.
With BaseClasses running `worlds.__init__.py` and worlds importing
`from BaseClasses`, this is likely to result in some extra code being run
because of partial recursive imports. This now lazily loads `worlds` when
needed, at which point `sys.modules` should be properly populated.
The final stage of Progressive Art Gallery opens up the four-way intersection between the Art Gallery, Orange Tower Fifth Floor, The Bearer, and Outside The Initiated. This is a very useful door, and it would be cool to be able to open it without having to get five progressive items. The original reason this was included in the progression was because getting into the back of Art Gallery early would cause sequence breaks. At this point, the way the client handles the Art Gallery has changed enough that it does not matter if the player can go through this door before getting all progressive art galleries.
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. :)
* Added some resilience to non-ASCII player names or items
* Also the client, not even sure if switching to ascii is useful here
* Split a long line in two
* Initial content-based labeling
* Improve labeling rules around docs and /worlds/generic
* Improve labeling rules around docs and webhost
* Formatting
* Update matching for webhost
* back to square 1 on is:docu
* Try a better glob for docs
* Formatting
* Manage PR state labels
* Correct syntax for conditions
* Correct syntax for conditions
* add trigger on reopening
* add trigger on closing
* keep labels in sync as pr updates
* Change edit event to sync
* Restrict only to PRs to main
* address review comments
* apply only to PRs into main
* 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
* Tests: test that item/location name groups are not empty
* Tests: better name for test_groups TestCase
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
In pyevermizer, it's called Atlas Medallion, not Amulet, leading to an
empty group and to code not considering them as an alchemy ingredient
when swapping out for a trap or an energy core fragment.
Also adds a test.
Reworking the options to make it work with the new options API.
Also reworked stuff in several spots to use world: NoitaWorld instead of multiworld: MultiWorld
The value of 10 does not really fit some of our world patterns and values
up to 15 may be acceptable. Looking at some worlds, 14 seems to be
achievable without too much work and reduces the noise in test output,
making it more usable.
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).
Currently when a room shuts down while clients are connected it instantly spins back up. This fixes that behaviour categorically.
I still don't know why or when this problem started, but it's certainly wreaking havok on prod.
`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)
Refactors region code to remove references to course index.
There were bugs somewhere, but I dont know where tbh.
This fixes them but leaves logic otherwise intact, and much cleaner to look at as there's one list less to take care of.
Additionally, this fixes stopping the clock from Big Boos Haunt.
Door entities think they can be solved without any other panels needing to be solved.
Usually, this is true, because they no longer need to be "powered on" by a previous panel.
However, there are some entities that need another entity to be powered/solved for a different reason.
In this case, Symmetry Island Lower Left set opens the latches that block your ability to solve the panel. The panel itself actually starts on. Playing doors: panels does not change this, unlike usually where dependencies like this get removed by playing that mode.
In the long term, I want to somehow be able to "mark" dependencies as "environmental" or "power based" so I can distinguish them properly.
Since the coop update, the Ancient key (which is always the reward for defeating the boss) would disappear when leaving the cave, making it impossible to open the locked door behind the Ancient Cave entrance counter. While this is basically cosmetic and has no adverse effects on the multiworld (as the door does not lead to any multiworld locations and is only accessible after defeating the final boss anyway), players may still want to enter this room as part of a ritual to celebrate their victory.
Why does this happen? The game keeps track of two different inventories, one for outside and another one for the cave dive. When entering or leaving the cave, important things such as blue chest items and Iris treasures are automatically copied to the other inventory. However, it turns out that the Ancient key doesn't participate in this mechanism. Instead, the script that runs when exiting the cave checks whether event flag 0xC3 is set, and if it is on, it calls a script action that adds the key item to the outside inventory. (Whether or not the player actually had the key item in their in-cave inventory is not checked at all; only the flag matters.)
In the unmodified game, that flag is set by the cutscene script that awards the key. It actually sets two event flags, 0xC3 and 0xD1. The latter is used by the game when trying to display the boss in the cafe basement and is used by AP as the indicator that the boss goal was completed. With the coop update, the event script method that created the key was intercepted and modified to send out a location check instead. That location always has the Ancient key as a fixed item placement; the benefit of handling it as a remote item is that in this way the key essentially serves as a signal that transmits the information of the boss' defeat to all clients cooping on the slot. When receiving the key, however, the custom ASM did only set flag 0xD1. As part of the bugfix, it is now changed to set flag 0xC3 as well.
But that alone is still not enough to make it work. The subroutine that is called by the game to create the key when exiting the cave with flag 0xC3 is the same subroutine that gets called in the cutscene that originally tried to award the key. But that's the one that has been rewritten to send the location check instead. So instead of creating the key when leaving the cave, it would just send the same location check again, effectively doing nothing. Therefore, the other part of the bugfix is to only intercept this subroutine if the player is currently on the Ancient Cave Final Floor (where the cutscene takes place), thus making it possible to recreate the key item when exiting.
* - Added logic rules for reaching, then completing, the field office in order to be allowed to spend significant amounts of walnuts
* - Revert moving a method for some reason
* update DS3 setup guide to preserve downpatching instructions
we want to preserve this on the AP site as the future of the speedsouls wiki is unknown and may disappear at any time.
* Update worlds/dark_souls_3/docs/setup_en.md
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
* Update setup_en.md
---------
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
When using localhost on mac, both ipv4 and ipv6 are tried and raise separate errors
which are combined by asyncio and difficult/inelegant to handle.
Python 3.12 adds the argument all_errors, which would make this easier.
FFMQR by @wildham0
Uses an API created by wildham for Map Shuffle, Crest Shuffle and Battlefield Reward Shuffle, using a similar method of obtaining data from an external website to Super Metroid's Varia Preset option.
Generates a .apmq file which the user must bring to the FFMQR website https://www.ffmqrando.net/Archipelago to patch their rom. It is not an actual patch file but contains item placement and options data for the FFMQR website to generate a patched rom with for AP.
Some of the AP options may seem unusual, using Choice instead of Range where it may seem more appropriate, but these are options that are passed to FFMQR and I can only be as flexible as it is.
@wildham0 deserves the bulk of the credit for not only creating FFMQR in the first place but all the ASM work on the rom needed to make this possible, work on FFMQR to allow patching with the .apmq files, and creating the API that meant I did not have to recreate his map shuffle from scratch.
Almost all of the events have been eradicated, which significantly improves both generation speed and playthrough calculation.
Previously, checking for access to a location involved checking for access to each panel in the location, as well as recursively checking for access to any panels required by those panels. This potentially performed the same check multiple times. The access requirements for locations are now calculated and flattened in generate_early, so that the access function can directly check for the required rooms, doors, and colors.
These flattened access requirements are also used for Entrance checking, and register_indirect_condition is used to make sure that can_reach(Region) is safe to use.
The Mastery and Level 2 rules now just run a bunch of access rules and count the number of them that succeed, instead of relying on event items.
Finally: the Level 2 panel hunt is now enabled even when Level 2 is not the victory condition, as I feel that generation is fast enough now for that to be acceptable.
- Removes the Pokémon Client, adding support for Red and Blue to the Bizhawk Client.
- Adds `/bank` commands that mirror SDV's, allowing transferring money into and out of the EnergyLink storage.
- Adds a fix to the base patch so that the progressive card key counter will not increment beyond 10, which would lead to receiving glitch items. This value is checked against and verified that it is not > 10 as part of crash detection by the client, to prevent erroneous location checks when the game crashes, so this is relevant to the new client (although shouldn't happen unless you're using !getitem, or putting progressive card keys as item link replacement items)
More speed optimizations for The Messenger. Moves Figurines into their own region, so their complicated access rule only needs to be calculated once when doing a sweep. Removes a redundant loop for shop locations by just directly assigning the access rule in the class instead of retroactively. Reduces slot_data to only information that can't be derived, and removes some additional extraneous data. Removes some unused sets and lists. Removes a redundant event location, and increments the required_client_version to prevent clients that don't expect the new slot_data. Drops data version since it's going away soon anyways, to remove conflicts.
This allows multiple client/connector pairs to run at the same time. It also includes a few other miscellaneous small changes that accumulated as I went. They can be split if desired
- Whatever the `client_socket:send` line (~440) was doing with that missing operator, it's no longer doing. Don't ask me how it was working before. Lua is witchcraft.
- Removed the `settimeout(2)` which causes the infamous emulator freeze (and replaced it with a `settimeout(0)` when the server socket is created). It appears to be unnecessary to set a timeout for discovering a client. Maybe at some point in time it was useful to keep the success rate for connecting high, but it seems to not be a problem if the timeout is 0 instead.
- Also updated the Emerald setup to remove mention of the freezing.
- Connector script now picks the first port that's not in use in a range of 5 ports.
- To summarize why I was previously under the impression that multiple running scripts would not detect when a port was in use:
1. Calling `socket.bind` in the existing script will first create an ipv6 socket.
2. A second concurrent script trying to bind to the same port would I think fail to create an ipv6 socket but then succeed in creating an ipv4 socket on the same port.
3. That second socket could never communicate with a client; extra clients would just bounce off the first script.
4. The third concurrent script will then fail on both and actually give an `address already in use` error.
- I'm not _really_ sure what's going on there. But forcing one or the other by calling `socket.tcp4()` or `socket.tcp6()` means that only one script will believe it has the port while any others will give `address already in use` as you'd expect.
- As a side note, our `socket.lua` is much wonkier than I had previously thought. I understand some parts were added for LADX and when BizHawk 2.9 came out, but as far back as the file's history in this repo, it has provided a strange, modified interface as compared to the file it was originally derived from, to no benefit as far as I can tell.
- The connector script closes `server` once it finds a client and opens a new one if the connection drops. I'm not sure this ultimately has an effect, but it seems more proper.
- If the connector script's main function returns because of some error or refusal to proceed, the script no longer tries to resume the coroutine it was part of, which would flood the log with irrelevant errors.
- Creating `SyncError`s in `guarded_read` and `guarded_write` would raise its own error because the wrong variable was being used in its message.
- A call to `_bizhawk.connect` can take a while as the client tries the possible ports. There's a modification that will wait on either the `connect` or the exit event. And if the exit event fires while still looking for a connector script, this cancels the `connect` so the window can close.
- Related: It takes 2-3 seconds for a call to `asyncio.open_connection` to come back with any sort of response on my machine, which can be significant now that we're trying multiple ports in sequence. I guess it could fire off 5 tasks at once. Might cause some weirdness if there exist multiple scripts and multiple clients looking for each other at the same time.
- Also related: The first time a client attempts to connect to a script, they accept each other and start communicating as expected. The second client to try that port seems to believe it connects and will then time out on the first message. And then all subsequent attempts to connect to that port by any client will be refused (as expected) until the script shuts down or restarts. I haven't been able to explain this behavior. It adds more time to a client's search for a script, but doesn't ultimately cause problems.
Changelog:
Features:
- New goal
- Chaos Chao
- Raise a Chaos Chao to win!
- New optional Location Checks
- Chao Animal Parts
- Each body part from each type of animal is a location
- Chao Stats
- 0-99 levels of each of the 7 Chao stats can be locations
- The frequency of Chao Stat locations can be set (every level, every 2nd level, etc)
- Kindergartensanity
- Classroom lessons are locations
- Either all lessons or any one of each category can be set as locations
- Shopsanity
- A specified number of locations can be placed in the Chao Black Market
- These locations are unlocked by acquiring `Chao Coin`s
- Ring costs for these items can be adjusted
- Chao Karate can now be set to one location per fight, instead of one per tournament
- Items
- If any Chao locations are active, the following will be in the item pool:
- Chao Eggs
- Garden Seeds
- Garden Fruit
- Chao Hats
- Chaos Drives
- The starting eggs in the garden can be a random color
- Chao World entrances can be shuffled
- Chao are given default names
- New Traps
- Reverse Trap
Quality of Life:
- Chao Save Data is now separate per-slot in addition to per-seed
- This allows a single player to have multiple slots in the same seed, each having separate Chao progress
- Chao Race/Karate progress is now displayed on Stage Select (when hovering over Chao World)
- All Chao can now enter the Hero and Dark races
- Chao Karate difficulty can be set separately from Chao Race difficulty
- Chao Aging can be sped up at will, up to 15×
- New mod `config` option to fine-tune Chao Stat multiplication
- Note: This does not mix well with the Mod Manager "`Chao Stat Multiplier`" code
- Pong Traps can now activate in Chao World
- Maximum range for possible number of Emblems is now 1000
- General APWorld cleanup and optimization
- Option access has moved to the new options system
- An item group now exists for trap items
Bug Fixes:
- Dry Lagoon now has all 11 Animals
- Eternal Engine - 2 (Standard and Hard Logic) now requires only `Tails - Booster`
- Lost Colony - 2 (Hard Logic) now requires no upgrades
- Lost Colony - Animal 9 (Hard Logic) now requires either `Eggman - Jet Engine` or `Eggman - Large Cannon`
Modifies various access rules in the lufia2ac world with the aim of making them evaluate quicker.
Instead of having to determine the reachability of another location, they now only have to count items in state, which is faster.
(Also made it reuse the identical lambda for multiple locations, which might save a smidgen of memory.)
orjson has a .py entry point that imports `from .orjson` (from the DLL), which does not work on 3.8 if the DLL is not in the same folder as the .py. The changed import system in 3.9+ seems to allow this. Excluding it from libraries.zip will put both files into the same folder.
* Fill: add test for swap error with item rules
https://discord.com/channels/731205301247803413/731214280439103580/1167195750082560121
* Fill: fix swap error found in CI
Swap now assumes the unplaced items can be placed before the to-be-swapped item.
Unsure if that is safe or unsafe.
* Test: clarify docstring and comments in fill swap test
* Test: clarify comments in fill swap test more
When managing an async, it can be useful to sort the tracker by Last
Activity to see who has potentially abandoned their slots. Today, if a
slot hasn't been started (last activity is None) then it is sorted as
if last activity is -1, that it is it has had more recent activity than
any other slot.
This change makes it so slots that haven't started are treated as if
they have last activity MAX_VALUE time ago. This way they get sorted
with slots that haven't been touched in a long time which should make
intuitive sense as the "last activity" is effectively inf time ago.
In a lot of cases, Factorio would write data to file first, then attach that file into zip. It now directly attaches the data to the zip and encapsulation was used to allow earlier GC in places (rendered templates especially).
* Lingo: Fix painting shuffle logic issue in The Wise
* Lingo: More generic painting cycle prevention
* Lingo: okay how about now
* Lingo: Consider Owl Hallway blocked painting areas in vanilla doors
* Lingo: so honestly I should've seen this one coming
* Lingo: Refined req_blocked for vanilla doors
* Lingo: Orange Tower Basement is also owl-blocked
* Lingo: Rewrite randomize_paintings to eliminate rerolls
Now, mapping is done in two phases, rather than assigning everything at once and then rerolling if the mapping is non-viable.
* Factor out a common function for building lists
* Expose name groups through the weighted-settings UI
* Fix weighted-settings page
The request for the JSON file that provides the setting data was missed during the rename in #2037, so prior to this the weighted settings page wasn't rendering at all.
The request for the JSON file that provides the setting data was missed during the rename in #2037, so prior to this the weighted settings page wasn't rendering at all.
* Add Unique Locals Commands to ChecksFinder
* Add Unique Locals Commands to MMBN3 Game Page
* Add Unique Locals Commands to Ocarina of Time Game Page
* Add Unique Locals Commands to Undertale Game Page
* Add Unique Locals Commands to Wargroove Game Page
* Add Unique Locals Commands to The Legend of Zelda Game Page
* Add Unique Locals Commands to Zillion Game Page
* Amend Unique Locals Commands on Final Fantasy 1 Game Page
* Add Unique Locals Commands to Pokemon R/B Game Page
* Grammar fix for FF1
* Corrected sections names to match
* Added commands to Starcraft 2 Wings of Liberty game page
Co-authored-by: Bicoloursnake <60069210+bicoloursnake@users.noreply.github.com>
---------
Co-authored-by: Bicoloursnake <60069210+bicoloursnake@users.noreply.github.com>
* WebHost: Round percentage of checks, fix possible 500 error
* Round using str.format in the template
How the percentage of checks done should be displayed is a display
concern, so it makes sense to just always do it in the template. That
way, along with using .format() instead of .round, means we always get
exactly the same presentation regardless of whether it ends in .00
(which would not round to two decimal places), is an int (which
`round(2)` wouldn't touch at all), etc.
* Round percent_total_checks_done in lttp multitracker
* Fix non-LttP games showing as 0% done in LttP MultiTracker
- Entrance randomizer no longer grows with multiworld
- Improved ER success rate again by prioritizing Temple of Time even more
- Prefill is faster, has slightly reduced failure rate when map/compass are in dungeon but previous items in any_dungeon (which consumed all available locations), no longer removes items from the main itempool; itemlinked prefill items removed to accomodate improvements
- Now triggers only one recache after `generate_basic` instead of one per oot world
- Avoids recaches during `create_regions`
- All ER temp entrances have unique names (so the entrance cache does not break)
this allows skipping multiple simplifications of the same object, e.g. item_rules
also update the logic simplification tests to be a proper unittest.TestCase
* Update faq_en.md
Reorganizing information and adding links to some of the various guides and website pages. Even just adding the Getting Started, Supported Games, and Server Commands links seems like a hefty upgrade. We have good resources, we should make them obvious.
I think more can probably be done here, but I already shuffled this around a lot.
* Reorganize information again, elaborate single player
Sneaki's suggestion makes way more sense organizationally. Added more detail to the single player section to more clearly explain the easiest method.
* Usage of multi-world
Consistency
Co-authored-by: kindasneaki <ryandj67@hotmail.com>
* More multi-world
More consistency
Co-authored-by: kindasneaki <ryandj67@hotmail.com>
* Revert to multiworld
Makes more sense and is colloquially the preferred terminology.
* Rework "leaving early"
Changed the "What if a player needs to leave early" section into, "Does everyone need to be connected at the same time?"
This allows the FAQ to explain briefly what a sync multiworld and an async multiworld is. This is probably good material for the Glossary, but it comes up so much in the Discord that we probably need to explain it here as briefly as possible. This paragraph lends itself to the question of what to do if a player must leave early anyway.
* Grammatical, tensing, and voice updates for consistency with other pages I originally authored.
---------
Co-authored-by: kindasneaki <ryandj67@hotmail.com>
Co-authored-by: Chris Wilson <chris@legendserver.info>
* add missing groups
* remove set comprehensions
* fix boss essence
* reorganized them
* combine boss essence on creation instead of update
* rename to match option names
* Add missing groups
* add PoP totem
* Stardew Valley: Test: unify mods
* Stardew Valley: Test: don't use SVTestBase where setUp is unused
* Stardew Valley: Test: remove duplicate backpack test
* Stardew Valley: Test: remove 2,3,4 heart tests
assume the math is correct with just 2 points on the curve
* Stardew Valley: Test: reduce duplicate test/gen runs
* Stardew Valley: Test: Change 'long' tests to not use TestBase
TestBase' setUp is not being used in the changed TestCases
* Stardew Valley: Test: Use subtests and inheritance for backpacks
* Stardew Valley: Test: add flag to skip some of the extensive tests by default
* Stardew Valley: speed up rules creation by 4%
No class should ever inherit from And, Or, False_ or True_ and isinstance is not free.
Sadly there is no cheap way to forbid inheritance, but it was tested using metaclass.
* Stardew Valley: save calls to type()
Local variable is a bit faster than fetching type again
* Stardew Valley: save calls to True_() and False_(), also use 'in' operator
* Stardew Valley: optimize And and Or simplification
* Stardew Valley: optimize logic constructors
* begin reworking adding games.md
* make it presentable
* some doc cleanup
* style cleanup
* rework the "more on that later" section of SDV
* remove now unused images
* make the doc links consistent
* typo
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
---------
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
* bumpstik: treasure/booster location rules
* bumpstik: oop missed a bit
* bumpstik: apply access rule to Hazards check
* bumpstik: move completion cond. to set_rules
* bumpstik: tests?
I have literally never written these before so 🤷
* bumpstik: oops
* bumpstik: how about this?
* bumpstik: fix some logic
* bumpstik: this almost works but not quite
* bumpstik: accurate region boundaries for BBs
since we're using rules now
* bumpstik: holy heck it works now
* SoE: create regions cleanup and speedup
keep local reference instead of hitting multiworld cache
also technically fixes a bug where all locations are in 'menu', not 'ingame'
* SoE: somplify region connection
* WebHost: unify references to options
* it was just an extra s the whole time...
* grammar
* redirect from old pages
* redirect stuff correctly
* use url_for
* use " for modified strings
* remove redirect cache
* player_settings
* update site map
Sweep only current player's locations so that more players does not slow it down.
Fix a slight possibility of Full door shuffle crash by only sorting for outdoor dead ends only when connecting from a non-dead end.
- Added location name groups, so you can make your entire Water Temple priority to annoy everyone else
- Significant improvement to ER generation success rate (~80% to >99%)
- Changed `adult_trade_start` option to a choice option instead of a list (this shouldn't actually break any YAMLs though, due to the lesser-known property of lists parsing as a uniformly-weighted choice)
- Major improvements to the option tooltips where needed. (Possibly too much text now)
- Changed default hint distribution to `async` to help people's generation times. The tooltip explains that it removes WOTH hints so people hopefully don't get tripped up.
- Makes stick and nut capacity upgrades useful items
- Added shop prices and required trials to spoiler log
- Added Cojiro to adult trade item group, because it had been forgotten previously
- Fixed size-modified chests not being moved properly due to trap appearance changing the size
- Fixed Thieves Hideout keyring not being allowed in start inventory
- Fixed hint generation not accurately flagging barren locations on certain dungeon item shuffle settings
- Fixed bug where you could plando arbitrarily-named items into the world, breaking everything
This PR adds a new, optional aspect to the Ancient Cave experience:
During their run, players can have the opportunity to purchase some additional items or spells to improve their party. If enabled, a shop will appear everytime a certain (configurable) number of floors in the dungeon has been completed. The shop inventories are generated randomly (taking into account player preference as well as a system to ensure that more expensive items can only become available deeper into the run).
For customization, 3 new options are introduced:
- `shop_interval`: Determines by how many floors the shops are separated (or keeps them turned off entirely)
- `shop_inventory`: Determines what's possible to be for sale. (Players can specify weights for general categories of things such as "weapon" or "spell" or even adjust the probabilities of individual items)
- `gold_modifier`: Determines how much gold is dropped by enemies. This is the player's only source of income and thus controls how much money they will have available to spend in shops
* WebHost: minor css changes to make Supported Games page usable without js
* Update JS to use querySelectorAll, remove most id attributes from elements, use relative element selectors
* Hide content when clearing search bar
* Remove `console.log`, remove TODO
---------
Co-authored-by: Chris Wilson <chris@legendserver.info>
* Refactor weighted-settings.js
This moves most of the infrastructure into two classes:
* WeightedSettings covers the settings page as a whole. It tracks the
user's current settings in local storage as well as the game data
from the server so they don't need to be manually passed around from
function to function.
* GameSettings covers the settings for a single game, and provides a
view of the current settings and the game data just for that game.
* Fix item count updating
"Added a bunch of tests to make sure I don't break anything during refactoring
Huge cleanup in the Regions file, extract methods, remove code duplicate, fix typos, fix variable naming conventions, etc.
Small cleanup in other places, minor stuff just what was needed for Regions"
- Fix generation failing with certain gesture shuffle options
- Fixed passing ItemDict to multidata instead of item code
- Don't allow CHARGE UP to be placed at Foglast: TV
- APWorld support by removing LogicMixin from Rules.py
🤞
* map option objects to a `World.options` dict
* convert RoR2 to options dict system for testing
* add temp behavior for lttp with notes
* copy/paste bad
* convert `set_default_common_options` to a namespace property
* reorganize test call order
* have fill_restrictive use the new options system
* update world api
* update soe tests
* fix world api
* core: auto initialize a dataclass on the World class with the option results
* core: auto initialize a dataclass on the World class with the option results: small tying improvement
* add `as_dict` method to the options dataclass
* fix namespace issues with tests
* have current option updates use `.value` instead of changing the option
* update ror2 to use the new options system again
* revert the junk pool dict since it's cased differently
* fix begin_with_loop typo
* write new and old options to spoiler
* change factorio option behavior back
* fix comparisons
* move common and per_game_common options to new system
* core: automatically create missing options_dataclass from legacy option_definitions
* remove spoiler special casing and add back the Factorio option changing but in new system
* give ArchipIDLE the default options_dataclass so its options get generated and spoilered properly
* reimplement `inspect.get_annotations`
* move option info generation for webhost to new system
* need to include Common and PerGame common since __annotations__ doesn't include super
* use get_type_hints for the options dictionary
* typing.get_type_hints returns the bases too.
* forgot to sweep through generate
* sweep through all the tests
* swap to a metaclass property
* move remaining usages from get_type_hints to metaclass property
* move remaining usages from __annotations__ to metaclass property
* move remaining usages from legacy dictionaries to metaclass property
* remove legacy dictionaries
* cache the metaclass property
* clarify inheritance in world api
* move the messenger to new options system
* add an assert for my dumb
* update the doc
* rename o to options
* missed a spot
* update new messenger options
* comment spacing
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* fix tests
* fix missing import
* make the documentation definition more accurate
* use options system for loc creation
* type cast MessengerWorld
* fix typo and use quotes for cast
* LTTP: set random seed in tests
* ArchipIdle: remove change here as it's default on AutoWorld
* Stardew: Need to set state because `set_default_common_options` used to
* The Messenger: update shop rando and helpers to new system; optimize imports
* Add a kwarg to `as_dict` to do the casing for you
* RoR2: use new kwarg for less code
* RoR2: revert some accidental reverts
* The Messenger: remove an unnecessary variable
* remove TypeVar that isn't used
* CommonOptions not abstract
* Docs: fix mistake in options api.md
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* create options for item link worlds
* revert accidental doc removals
* Item Links: set default options on group
* change Zillion to new options dataclass
* remove unused parameter to function
* use TypeGuard for Literal narrowing
* move dlc quest to new api
* move overcooked 2 to new api
* fixed some missed code in oc2
* - Tried to be compliant with 993 (WIP?)
* - I think it all works now
* - Removed last trace of me touching core
* typo
* It now passes all tests!
* Improve options, fix all issues I hope
* - Fixed init options
* dlcquest: fix bad imports
* missed a file
* - Reduce code duplication
* add as_dict documentation
* - Use .items(), get option name more directly, fix slot data content
* - Remove generic options from the slot data
* improve slot data documentation
* remove `CommonOptions.get_value` (#21)
* better slot data description
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <beauxq@yahoo.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Alex Gilbert <alexgilbert@yahoo.com>
* Tests: Add a test for fill to WorldTestBase
* test items and minimal accessibility, only bailing out when no reachable locations exist.
* put egg shard max/goal at sane values
114 locations - 35 always-present progression items - 25 excluded locations from settings <= 74 egg shards
past me can't do arithmetic
* f
* i'm bad at git
* make fill import local to prevent circular imports
---------
Co-authored-by: espeon65536 <espeon65536@gmail.com>
* added setup_es.md
setup_en 100% translated (with a bit of adaptation to spanish linguistics)
* Update __init__.py
add reference to the spanish tutorial
* Update setup_es.md
removed temporary "wip translation" header
* Update setup_es.md
formatting cleanup
* Update setup_es.md
translated "alias for" on lines 73 and 74, which I just forgot to
* Update setup_es.md
fixed a bunch of punctuation/grammar and fixed bold format in Configuring Bizhawk section
* Update worlds/pokemon_rb/docs/setup_es.md
updated bold format as per nicholassaylor's suggestion
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
---------
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Update commands_en.md
Commands re-ordered and put into categories
Some commands were better documented / explained more clearly
Other formatting changes
* Status command moved to General category and elaboration on getitem command
* "Multi-world" -> "Multiworld"
* Moved game-specific local commands to game pages
Adds a generic client that can communicate with BizHawk. Similar to SNIClient, but for arbitrary systems and doesn't have an intermediary application like SNI.
* Launcher: Allow opening patches for clients without an exe
* Launcher: Restore behavior for not showing patch suffixes for clients that aren't installed
* core: typing for MultiWorld.get_regions
* core: utility method for visualizing worlds as PlantUML
* core: utility method for visualizing worlds as PlantUML: update docs
* Tests: add a name removal method, and have assertAccessDependency use and dispose its own state
* Update test/TestBase.py
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Core: better error if GUI is unavailable
* Core: enable open_directory kdialog and zenity
The native dialog helpers were disabled because there was odd behavior.
This is now fixed and was tested with latest zenity and kdialog.
* Core: fix open_filename suggestion for zenity
* added setup_es.md
setup_en 100% translated (with a bit of adaptation to spanish linguistics)
* Update __init__.py
add reference to the spanish tutorial
* Update setup_es.md
removed temporary "wip translation" header
* Update setup_es.md
formatting cleanup
* Update setup_es.md
translated "alias for" on lines 73 and 74, which I just forgot to
* Update SC2 setup guide
Removed a sentence that made sense when I included sudo in the command in the previous sentence, but does not make sense otherwise.
* Update en_Super Mario 64.md
It turns out castle has a lowercase l in it.
* Docs: SMW: Updated SNIClient Connector Lua Directory
* Docs: DKC3: Updated SNIClient Connector Lua Directory
* Docs: Lufia2AC: Updated SNIClient Connector Lua Directory
* Docs: SM: Updated SNIClient Connector Lua Directory
* Docs: SMZ3: Updated SNIClient Connector Lua Directory
Expert Swamp Maze currently thinks it needs Red Underwater 4 instead of the door. This could lead to an unbeatable seed in door shuffle, although it's very unlikely.
* Core: lazy-load worlds in unpickler
this should hopefully fix customserver's memory consumption
* WebHost: move imports around to save memory in MP
* MultiServer: prefer loading _speedups without pyximport
This saves ~15MB per MP and speeds up module import if it was built in-place.
* Tests: fix tests for changed WebHost imports
* CustomServer: run GC after setup
* CustomServer: cleanup exception handling
* Allow any valid priority location in yaml.
For some games, the use location group name "Everywhere", results in the generator failing no matter what, as only a subset of the location names will actually be present. A good example of that is Zillion. It has 21 location names per room, of which, only at most 2 is ever used.
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Changed the pathing code to use os.path.join, instead of adding strings together, also fixed the savepath command using UndertaleContext instead of self.ctx (Credit to Wackerly for finding the self.ctx issue and fix)
* Undertale: Fixed a debug function in the game not requiring debug to be enabled.
* Undetale: Fixed a logic bug with the location "Letter Quest"
* - Added a rule to vault bundles that require access to the wizard
- Fixed the region required to meet the wizard
* - Updated the location count in a test due to a previous coffee bean bugfix that added a location
Certain multiworld settings (bug observed with item link settings) can cause the total item count in TLoZ world to exceed 255. This causes an overflow in the loop to receive all pending items. This adds an additional byte to be used as a high byte for the items obtained counter.
This approach was taken due to the surrounding bytes being occupied, preventing a direct 16-bit number from being used without moving to a different location and leaving more empty bytes in the memory block for save data.
Migrates SC2 WoL world to the new mod with new items and locations. The new mod has a different architecture making it more future proof (with planned adding of other campaigns). Also gets rid of several old bugs
Adds new short game formats intended for sync games (Tiny Grid, Mini Gauntlet). The final mission isn't decided by campaign length anymore but it's configurable instead. Allow excluding missions for Vanilla Shuffled, corrected some documentation.
NOTE: This is a squashed commit with Salz' HotS excluded (not ready for the release and I plan multi-campaign instead)
---------
Co-authored-by: Matthew <matthew.marinets@gmail.com>
* - Added missing logic rules where, to earn hearts above 8 and 10, you need access to dating and marriage respectively.
* - Slight cleanup based on Black Sliver's suggestion
* Support multi-select during check/generate file upload
This will allow the user to select multiple YAML files via Shift-Click
or Control-Click in their browser when generating a game via the site
instead of having to zip them locally first.
* Update generate.html: File -> File(s)
* Change check.html button text to "Upload File(s)" to match generate.html
* Fix typo in Factorio options tooltip
* Fix typo, add details
* Apply code review suggestion
It doesn't let me apply more than one change to the same line in a batch.
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Apply code review suggestion from @nicholassaylor
It doesn't let me apply more than one change to the same line in a batch.
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update SC2 setup guide
Removed a sentence that made sense when I included sudo in the command in the previous sentence, but does not make sense otherwise.
* Update en_Super Mario 64.md
It turns out castle has a lowercase l in it.
* Slight rewording of DS3 game page
Lists made more concise, space added between "generated weapons" and open parenthesis
* Proofread Final Fantasy pages
Fixed minor typos and reworded sentences for conciseness.
* Edited Kingdom Hearts 2 Game Page
Refined style, capitalization, and sentence structure for clarity
* Fixed nested list in Minecraft game page
Each nest needed an additional 2 spaces
* Edited Risk of Rain 2 Game Page
Made various edits to redundancy within the page as well as omitted/unclear information
* Edited Stardew Valley game page
Small capitalization consistency edits and slight rewording for conciseness
* Update worlds/ff1/docs/multiworld_en.md
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
* Update worlds/kh2/docs/en_Kingdom Hearts 2.md
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
* Update worlds/kh2/docs/en_Kingdom Hearts 2.md
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
* Add information for EXP multiplier
Include Drive Forms and Summons
* Correction for Newt Altars RoR2
Co-Authored-By: kindasneaki <19377912+kindasneaki@users.noreply.github.com>
---------
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: kindasneaki <19377912+kindasneaki@users.noreply.github.com>
* - Added missing special order requirements, mostly for the regions where to place the collected items, or the NPC to talk to when done
* - Added missing requirement on being able to go see the wizard cutscene in order to interact with bundles
I hope this gets a prize for "Most irrelevant PR in AP history"
Explanation:
When changing the hint system on the client side to be able to auto-wrap, decisions were made about which line breaks were still explicitly important, with most of them being removed.
This hint was somewhat devalued in the process.
-. --- - .... .. -. --. translates to "Nothing", which I thought was the entirety of the joke.
However, the line breaks were actually also important, because:
dash dot, dash dash dash,
dash, dot dot dot dot, dot dot,
dash dot, dash dash dot
is a Haiku! And the hint's creator (oddGarrett I believe) said this was specifically part of the creative vision for this joke hint. They said it's fine, I don't need to change it, but I couldn't let that stand.
So, the explicit line breaks for this joke hint are back.
At some point the client-side mod for this world started to include support for the "!" in dev console, rendering this line obsolete. Updated to reflect current client behavior.
As it turns out, SD2SNES / FXPAK Pro has a limit as to how many bytes can be written in a single command packet. Exceed this limit, and the hardware will crash. That limit is 512 bytes. Even then, I have scaled back to 256 bytes at a time for a margin of safety.
* Fix up non-deterministic order of item_name_to_id and location_name_to_id.
* Remove debug line.
* Change to use a Chainmap instead and simplify logic a bit.
* Add the forgotten music sheet item.
* - Added missing coffee bean to cropsanity
* - Fix an issue with the seed having the same name as the crop
* - Fix a recently discovered bug with help wanted rules when using a number not divisible by 7
using os.path.join was causing duplicate parts of the filepath in certain environments. turns out it's not needed when loading the basepatch in our current world structure. this should hopefully fix genning issues on the RC beta site (and presumably the main site once the RC turns into the release)
* - Use proper MD5 validation
The method TLoZ was trying to validate it's baserom was different from basically every other ROM game. Almost all the other ROM games use the same method as each other (except for the external patchers like FF1 and SoE, and OoT has its own special handling that's vastly different), so updating TloZ to match.
Also got rid of the checksum attribute for the TLoZDeltaPatch as it didn't seem to be used anywhere, so felt it was unnecessary and partially confusing to have it right next to the hash attribute that is actually used.
* change error message to reference MD5
* __init__.py: Add fill_slot_data function
Add fill_slot_data function.
Used by StripesOO7's pop-tracker pack to auto populate settings as convenience for the user
* LTTP__init__.py added race condition to fill_slot_data
* added missing self to multiworl.is_race
* changed filling of slot_data to fill from static list instead of pulling all alttp_options.
additional options needed to be done separately cause they are not stored the same way as the rest. "mode", "goal", etc. are simple values as the rest are key:value pairs so `.value` is not supported and I didn't want to introduce an if-statement.
* changed filling of slot_data to fill from static list instead of pulling all alttp_options.
additional options needed to be done separately cause they are not stored the same way as the rest. "mode", "goal", etc. are simple values as the rest are key:value pairs so `.value` is not supported and I didn't want to introduce an if-statement.
* added a comment to describe the use for the option added to slot_data
---------
Co-authored-by: StripesOO7 <54711792+StripeesOO7@users.noreply.github.com>
- add section about configuring lua core (shamelessly taken from the OoT setup guide) on bizhawk version 2.8 and below
- fix wrong reference to the ff1 connector lua to correctly reference the tloz connector lua
- remove reference to recommended bizhawk version. it's unnecessary
The cython-generated code triggers C4551 on MSVC,
which does not get silenced by pyximport's build flags.
So we silence it on source code level instead.
* MultiServer: fix wrong missing for empty state w/o speedups
* Tests: fix some tests not being run
* Tests: add test for set intersection with LocationStore
* Settings: disable saving and gui during tests
* Tests: create a fresh host.yaml for TestHostYAML
Now that host.yaml is .gitignored, testing the local host.yaml makes no sense anymore
## What is this fixing or adding?
It was pointed out that distributing an archive with copies of all the supported mods could lead to legal problems down the line. So we are moving away from this approach.
This also means that, in the event that a mod gets updated and the previous version is no longer available, we need the ability to update the mod's supported version at any point in time, and cannot rely on AP's release schedule for such updates that will, in most cases, be only changing the string for the required version.
Changes:
- Scrub all references to the support mods zip file from documentation
- Create dedicated "Supported Mods" documentation page, external to AP so we can keep it updated with mod versions regardless of their release schedule
- Remove mod version validation from the AP backend, and manage that in the mod itself, for the same reason.
* Meta: Create code owners document for tracking and notifying owners of world changes.
* Removing @dewiniaid as maintainer for Hollow Knight.
2023-07-11 - Finalization Date for Vote
https://discord.com/channels/731205301247803413/1123286507390767267/1128482720218099812
@ThePhar - Vote to Remove (2023-06-27)
@black-sliver - Vote to Remove (2023-06-27)
@KonoTyran - Vote to Remove (2023-06-27)
@Berserker66 - Vote to Remove (2023-07-09)
Passed with majority to remove maintainer status.
* Adding @BadMagic100 and @ThePhar as maintainers for Hollow Knight.
@BadMagic100 to primarily handle client-side maintenance/updates.
@ThePhar to primarily handle Archipelago-side maintenance/updates.
https://discord.com/channels/731205301247803413/1131762415021858907
@ThePhar - Approved @BadMagic100 (2023-07-20) and @ThePhar (2023-07-24) as Maintainers
@LegendaryLinux - Approved @BadMagic100 (2023-07-20) as Maintainer
@Berserker66 - Approved @BadMagic100 (2023-07-26) and @ThePhar (2023-07-26) as Maintainers
@black-sliver - Approved @BadMagic100 (2023-07-26) and @ThePhar (2023-07-26) as Maintainers
@KonoTyran - Approved @BadMagic100 (2023-07-27) and @ThePhar (2023-07-27) as Maintainers
Passed with a majority to set maintainer status for Hollow Knight.
There was a bug that randomly after opening and closing the menu, some players on Bizhawk would get old items again. Tracking this down took multiple hours over the course of several weeks. The root cause turned out to be reading from the System Bus domain while an DMA copy was happening. Doing so is undefined behavior on GBC (though I'm sure some game relies on it). On Gambatte, you end up reading some garbage byte no matter what the read is (unsure what the providence of the byte is - some garbage, some register, the actual DMA data, who knows?). Normally, this isn't an issue, as Bizhawk callbacks only happen during vblank/halt, which is generally a state where we have valid WRAM to read from. However - a setting is being passed around the community for Bizhawk that changes the frame counter to go from "only when Vblank happens" to "whenever some number of audio samples have happened" which causes the bizhawk callbacks to happen....nearly whenever. Including during a DMA. You can tell this is happening if you print the `PC` register when reading memory - if it matches `FFXX` then you are executing in a routine in HRAM and likely doing a DMA.
Additionally, the check items counter specifically is in WRAM Bank 1 which could be swapped out of - will have to keep an eye on this - generally LADX lives in Bank 1, but there are a few things that use the other banks (swap space for some objects??). This could be a problem on any platform - if we get more reports of bad items gets, that's probably why.
Also, fixes some logging that was never getting reenabled.
* The Messenger: Don't generate Figurines
* The Messenger: add prerequisite shop cost requirements
* The Messenger: don't double the cost anymore
* The Messenger: remove centered mind prereq instead of checking for it
* The Messenger: use cost as a property to cache it and gain back speed
* The Messenger: hardcode the prereqs for more speed
* make the linter and mypy happier
* use cached_property
* - Reorganised tests for better backpack coverage
- Added a test for backpack locations being absent on vanilla
* - Fix backpack locations on vanilla
* - Fixed a typo in documentation
* - Added missing parenthesis after enum.auto so that Python 3.11 still works
* - Added Blank lines at the end of the backpack test files
* - cleaned whitespace
## What is this fixing or adding?
Adds a large number of new options, including:
- Door Shuffle
- Sphere-based level scaling
- Key Item and Pokedex requirement options to reach the Elite Four
- Split Card Key option
- Dexsanity option can be set to a percentage of Pokémon that will be checks
- Stonesanity: remove the stones from the Celadon Department Store and shuffle them into the item pool, replacing 4 of the 5 Moon Stone items
- Sleep Trap items option
- Randomize Move Types option
- Town Map Fly Location option, to unlock a flight location when finding/receiving the Town Map
Many enhancements have been made, including:
- Game allows you to continue your save file _from Pallet Town_ as a way to save warp back to the beginning of the game. The one-way drop from Diglett's Cave to north Route 2 that had been added to the randomizer has been removed.
- Client auto-hints some locations when you are able to see the item before you can obtain it (but would only show AP Item if it is for another player), including Bike Shop, Oak's Aides, Celadon Prize Corner, and the unchosen Fossil location.
Various bugs have been fixed, including:
- Route 13 wild Pokémon not correctly logically requiring Cut
- Vanilla tm/hm compatibility options giving compatibility for many TMs/HMs erroneously
- If an item that exists in multiple quantities in the item pool is chosen for one of the locations that are pre-filled with local items, it will continue placing that same item in the remaining locations as long as more of that item exist
- `start_with` option for `randomize_pokedex` still shuffling a Pokédex into the item pool
- The obedience threshold levels being incorrect with 0-2 badges, with Pokémon up to level 30 obeying with 0-1 badges and up to 10 with 2 badges
- Receiving a DeathLink trigger in the Safari Zone causing issues. Now, you will have your steps remaining set to 0 instead of blacking out when you're in the Safari Zone.
Many location names have been changed, as location names are automatically prepended using the Region name and a large number of areas have been split into new regions as part of the overhaul to add Door Shuffle.
* moves items location from RC -> DH
"Ring of Steel Protection+3" actually belongs in DH instead of RC. this will shift the item ID's for the last 3 items in RC, and should not shift any ids in DH
* updated data_version to 7
#1800 introduced a cleanup pass to "eject" unreachable items to hopefully get better error reporting of what could not be placed. The code to do so has an unnecessary amount of sweeps from pool.
* - Fixed Leo's Treehouse being randomized too aggressively
* - Added an automated test to catch badly tagged Non-progression entrances
* - Fixed a logic issue with Void Mayonnaise not being fishable
* - Removed unused import
## What is this fixing or adding?
Major content update for Stardew Valley
## How was this tested?
One large-scale public Beta on the archipelago server, plus several smaller private asyncs and test runs
You can go to https://github.com/agilbert1412/StardewArchipelago/releases to grab the mod (latest 4.x.x version), the supported mods and the apworld, to test this PR
## New Features:
- Festival Checks [Easy mode or Hard Mode]
- Special Orders [Both Board and Qi]
- Willy's Boat
- Ginger Island Parrots
- TV Channels
- Trap Items [Available in various difficulty levels]
- Entrance Randomizer: Buildings and Chaos
- New Fishsanity options: Exclude Legendaries, Exclude Hard fish, Only easy fish
- Resource Pack overhaul [Resource packs are now more enjoyable and varied]
- Goal: Greatest Walnut Hunter [Find every single Golden Walnut]
- Goal: Perfection [Achieve Perfection]
- Option: Profit Margin [Multiplier over all earnings]
- Option: Friendsanity Heart Size [Reduce clutter from friendsanity hearts]
- Option: Exclude Ginger Island - will exclude many locations and items to generate a playthrough that does not go to the island
- Mod Support [Curated list of mods]
## New Contributors:
@Witchybun for the mod support
---------
Co-authored-by: Witchybun <embenham05@gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
## What is this fixing or adding?
Adjusted some map terrain. Made Ambushed in the Middle's HQ more exposed. Made Deep Thicket's AI spawn extra units. Adjusted some terrain in Rebel Village.
Moved item creation from generate_basic to create_items for (https://github.com/ArchipelagoMW/Archipelago/pull/1460)
* settings: don't crash when loading an outdated host.yaml
* settings: use temp file to not destroy host.yaml on error
* settings: implement saving of dicts
* settings: simplify dump of dict
* settings: add support for sequences
also a few more comments
* settings: reformat a bit
One of the recent PRs accidentally removed all ability for the client to see which EPs are precompleted (due to settings)
This is pretty bad, as the client now thinks these EPs need to be completed for "Obelisk Side" locations, when the generator does not. This would lead to impossible seeds.
Fixing three bugs:
1. Made Salubra Charm Shop Slots use the actual options value and not the Iselda Shop Slots value.
2. Made Mask Shards no longer considered Filler but instead Progression so they can actually be used for access requirements that require damage boosts.
3. Fixed goal requirements to account for Focus being required for The Hollow Knight and Sealed Siblings endings and adjusted the Radiance and Any goal requirements accordingly.
Updated Setup Guide:
Changed to mention Scarab+ instead of Scarab (it is better maintained and has several quality of life improvements and fixes a bug for XBox Game Pass).
Added info about how to use Scarab+ with XBox Game Pass.
* Region.create_exit and Region.connect helpers
* reduce code duplication and better naming in Region.connect
* thank you tests
* reorder class definition
* define entrance_type on Region
* document helpers
* drop __class_getitem__ for now
* review changes
zfile.filename is the full path within the archive, so by default
zf.extract will maintain that directory structure when extracting.
This causes the docs to be placed in the wrong place, as the Javascript
code expects them to be placed directly in the game folder.
* Add settings API ("auto settings") for host.yaml
* settings: no BOM when saving
* settings: fix saving / groups resetting themselves
* settings: fix AutoWorldRegister import
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
* Lufia2: settings: clean up imports
* settings: more consistent class naming
* Docs: update world api for settings api refactor
* settings: fix access from World instance
* settings: update migration timeline
* Docs: Apply suggestions from code review
Co-authored-by: Zach Parks <zach@alliware.com>
* Settings: correctly resolve .exe in UserPath and LocalPath
---------
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
Co-authored-by: Zach Parks <zach@alliware.com>
* Server: allow games with no locations again
* Server: validate locations in pure python implementation
and rework tests
* Server: fix tests for py<3.11
* MultiServer: speed up location commands
Adds optimized pure python wrapper around locations dict
Adds optimized cython implementation of the wrapper, saving cpu time and 80% memory use
* Speedups: auto-build on import and build during setup
* Speedups: add requirements
* CI: don't break with build_ext
* Speedups: use C++ compiler for pyximport
* Speedups: cleanup and more validation
* Speedups: add tests for LocationStore
* Setup: delete temp in-place build modules
* Speedups: more tests and safer indices
The change has no security implications, but ensures that entries[IndexEntry.start] is always valid.
* Speedups: add cython3 compatibility
* Speedups: remove unused import
* Speedups: reformat
* Speedup: fix empty set in test
* Speedups: use regular dict in Locations.get_for_player
* CI: run unittests with beta cython
now with 2x nicer names
* fix estus shard/bone shard numbers
there are only 11 estus shards in the pool, so fixed number of estus shards so everything can be collected, and upped the number of bone shards in the pool to fix datapackage numbers. new counts went from: 15(estus) + 5(bones) = 20(total) TO 11(estus) + 9(bones) = 20(total)
* Update locations_data.py
changed estus shard/bone shard counts to match the counts in items_data.py. same reasoning as the commit for that, only 11 estus in game
* added new options "Late DLC"
revampled "Late Basin of Vows" option
added the Fire Demon location in Undead Sanctuary
* first file dump
added new settings for customizing pool options
sorted all the item pools
code clean up
fixed estus/bone shard counts
still need to figure out location excluding
* bunch of changes
added new locations
put locations into specific lists
made DarkSouls3Locations for each list of items
still need to figure out how to exclude
* excluded locations from generating without options, created gotthard_region, update how the pool fills additional items, update location/item tables, create more tables
* code cleanup, remove extra tables, add grave key/eyes of a firekeeper back to key pool
* fixed some logging
* add more detailed options descriptions
* forgot to update progressive locations updates too whoops
* remove irina's tower key from items/location list. the current ID's dont work to shuffle
* fixed item-to-locations, added new weapons, added new armors, added new rings, added "eyes of a fire keeper" to key locations list to balance, adjusted tables
* added HWL: broken straight sword location, moved Greirat's ashes to NPC items
* remove hwl: broken short sword location/item from pool (does not exist), fix item/location counts in options, general code clean up
* more code cleanup, fix Havels Ring +3 location/properly renamed item, changed Estus/Bone Shard names to not include a +| added a missing undead bone shard
* fixed npc rule, added a bunch of ring locations, fixed ring tables
* updated options
* cleaned up more code, edited some option names
* start of new items system
* DS3: Major refactor (allows for defining more items than those in vanilla locations)
* DS3: Repair changes overwritten by refactor
* DS3: Re-implement new options for location categories
* DS3: Make replacement item lists for most unique item types
* DS3: Remove accidentally added apworld
* DS3: Make option names more consistent
* DS3: Fix Pyromancer's Parting Flame location category
* DS3: Add new items
* DS3: Fix access rule for DLC/Contraption Key
* DS3: Only replace unrandomized progression items with events
Also fix some location names/categories
* DS3: Change some location names to be in line with their items
* DS3: Add randomized infusion code (only works for Broadsword)
* DS3: Make varied item pool an option
* added remaining weapons, shields, armors, rings, spells, dlc equivalents | added remaining dlc ring locations (2 in dreg heap, 5 in ringed city)
* adjusted 'Progressive Locations' counts and added new table
* added more souls + upgrade gems
* added the rest of consumables
* reverted adding an additional 'progressive location 4' table and added bulk progression locations to prog. location 3 table
* DS3: Add infusion categories and some cleanup of items
* DS3: Fix item ordering
* DS3: Fix infusion/upgrade code extra if
* DS3: Disable some unmarked cut content items
* DS3: Rename blessed red and white shield+1
* DS3: Implement guaranteed_items option
* DS3: Remove print statement
* DS3: Add extra check for trying to remove items from an empty list
* add unused content item id's
* DS3: Move cut content to its own list
* DS3: Classify spells and healing upgrades as useful
* DS3: Implement get_filler_item_name
* DS3: Change lower bounds for upgrades from +1 to +0
* DS3: Move Ancient Dragon Greatshield back to vanilla and recategorize some useful consumables
* DS3: Guaranteed items checks for number of existing items before replacing
* added remaining progressive items, fixed npc rules, adjusted option location counts
* delete extra items, add rule for dancer/late basin
* seperate PW into two parts (can access first half w/o contraption key | SKIP more unused items
* DS3: Minor linting changes
* DS3: Update required_client_version
* DS3: Remove rule for bell tower access
The key can always be purchased from the shop
* DS3: Move location category option checks to generate_early
* added "Boss Soul" option to pool
* DS3: Fix rules for boss souls and update misc location count
* DS3: Address minor review comments
* DS3: Change category enums to IntEnum
* DS3: Make apworld
---------
Co-authored-by: Brooty Johnson <83629348+Br00ty@users.noreply.github.com>
* add a random object to the World
* use it in The Messenger
* the worlds don't exist until the end of set options
* set seed in lttp tests
* use world.random for shop shuffle
* Core: Add support for non dictionary iterables for `Region.add_exits`
* some cleanup and duplicate code removal
* add unit test for non dict iterable
* use more consistent naming
* sometimes i just make stuff harder on myself :)
* Remove CHAOS Glitch. Add test to check for removed songs.
* Add to game list
* Fix oversight with 0 difficulty songs. Fix naming of test.
* Add new songs and update other data.
* Fix accidental copy paste
* Initializes MMBN3 world with empty files
* Adds item names to item dict
* Adds locations and names
* Adds skeleton of MMBN3Client. Mostly copy pasta from OOT
* Fixed some style and formatting
* More incremental Lua tests
* Adds all locations and checking to Lua connector
* Made class definitions for TextPet Parser
* Begun connecting item delivery system through lua and textpet
* Lua Connection can now send test items
* Item Delivery is now parameterized. Test command can send any chip
* Adds the ability to send non-chip items
* Fixes name errors in python client
* Fixes count for zenny, attempts to fix bugfrags
* Fixes an issue where you always received 255 bugfrags
* Converts zenny and bugfrag amounts to little endian bytecode
* Checks game state before sending chips
Adds debug option to display information overlayed on rom
Fixes chip indexing issue for chips with ids over 255
Minor text fixes
* Adds in some animation reset instructions during item get message
* Stores previously collected item index in save, re-sends missing items
* Adds title screen check before sending locations
Loading items from save could not be done via RAM. Had to be added in
assembly
* Adds progressive undernet check
* Added library for lzss decoding bits of rom
* More progress on parsing text events from ROM
* Adds a way to inject messages into ScriptArchive data structure and generate bytecode
* Adds Item definitions, passes to client
* Adds regions and item collection rules
* Touched up a few names and values that have changed in preparation for the final patching
* Modifying messages via item is now successful
* Added generate_output hook to generate ROM data
* Generates ROM successfully
* Fixes navi cust give index
* Whoops forgot to wrap this in brackets
* Injects extra scripts for undernet rankings
* Programs had ammount and color swapped
* Prompts the user for their username when connecting
* Adds flagClear to the list of commands to avoid overwriting
* Fixes message box crashes and several other multiworld issues
* Fixes IDs and names of several items and locations
* Added .gba to gitignore
* Fixes compatibility after recent rebase
* Fixes some locations and items that are otherwise unobtainable
* Attempts to make a working launcher in the installer
* Creates installer and fixes several inaccessible locations
* Many minor changes to items, locations, and requirements made during testing
* Adds an info page for MMBN3
* Fixes failing tests by removing duplicate IDs and properly marking progression items
* Accidentally forgot to un-remove the thing
* Whoops, changed this by accident
* Updates self.world references to self.multiworld
* Fixes imports to use from imports instead of using the namespace
* Removed some leftover merge artifacts from inno setup
* Puts back that darned signtool line again
* Adds Overworld Metro keys as items
* Adds TamaCode and puts shortcuts behind cyber passes
* Fixes Numberman code 16 check
* Fixes metro access logic and adds text to metro
* Reworks Lua to fix crashing when many items are queued
* Items for other BN3 games for different players are no longer given in the main player's ROM as well
* Fixes incorrect Item ID for ACDC Metro
* Fixes multi-box text messages
* Adds timer before sending an item
* Forgot to remove the second box of SubMems
* Updates patch and lua to prevent softlocks and crashes
* Adds options for extra undernet ranks, exclude jobs
* Extra GigFreez now gives 20 bugfrags
* Additional Progressive Undernets can no longer appear on the WWW Base
* Moves item signal byte to empty area of flags instead of end of RAM
* Adds Chocolate Shop locations and navi chips to fill them
* Fixes save crash, and added chocolates to lua
* Fixes chocolate stand selling out text, removes DrillMan cube in Undernet
* Replaces old messaging system with direct memory manipulation for receiving items
* Removes NDSPY requirements from MMBN3 by manually adapting the GBA's lz10 algorithm
* Fixes the names of Hospital-1 Locations
* Adds Canary Bit to avoid sending checks when title screen check fails
* Gaining a cybermetro pass will now open the shortcut immediately
* Randomizes the two accessible areas of Undernet 7, adds Hammer as item
* Adds new locations to connector lua
* Injects the name of the item into trade quests
* Fixes copy-paste error in docs
* Fixes merge artifacts and depracated code
* Nut-wafer stand now faces Lan the right way after buying
* Removes unused Goal Option and updates the readme to include most recent changes
* Touch-ups and formatting changes
* The Great Fillerization update. Dozens of items changed to Filler
* Replaces instances of Mega Man with MegaMan
* Update worlds/mmbn3/docs/en_MegaMan Battle Network 3.md
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
* Update worlds/mmbn3/__init__.py
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
Co-authored-by: SoldierofOrder <107806872+SoldierofOrder@users.noreply.github.com>
* Changes code ordering to suit base class's
* assert_generate now checks for roms. Minor text fixes
* Makes player specific frequency and excluded location options
* Apply suggestions from code review
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
* Addresses suggested changes from PR review
* Replaces ndspy lz10 with MIT-compliant nlzss lz10
* apworld compatibility fix for mmbn3_options from utils
* Addressing more comments by el-u
* APworld will now pull patch from zip folder
* Apply suggestions from code review
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
* Cleaned up comments for progressive undernet ROM function, moved index list to field to avoid re-initializing
* Removes improper player-indexed location/item dicts, replaces with world member variables
* Avoids redefining list in progressive undernet ROM function
* Filler items can no longer be generated beyond their specified amounts
* Fixes list copying issue with item frequencies
* Adds BN3 Client Generation back into Launcher settings
* Fixes typos causing huge problems
* Fixed non-relative import for apworld
* Removes custom enum implementation that broke pickle
* Displays message when attempting to load an incorrect ROM, will not attempt to patch it
* Filler items can now only be placed once
* Changes path in setup doc to match Lua path changes
* Fixes file extension for MMBN3 file
* Replaces magic number with reference to value in NetUtils
* Moves victory rules to set_rules. Removes commented out code
* Rewrites Lua script to send block of memory
* Fixes off-by-one error in sending bytes for locations
* Fixes issue with invalid characters in text parsing, and WWW monitor text box parsing
* Moves trade text injection to init so it has access to options
* Attempts to split the text boxes for hinted items
* Trade checks now provide hints if the option is set for them
* Fixes escape character issue for BizHawk 2.9.1
Something in Bizhawk lua parsing changed to dislike the escaped tilde.
I'm not even entirely sure why it was escaped in the first place, but
this should fix the compatibility of it.
* Re-adds desk check that it turns out actually does exist
* Updates requirements to mention bizhawk 2.7 instead of 2.3.1
* Fixes off-by-one error in command byte counts
* Fixes program color indices
* Fixes newline PEP violations
* Reverts an accidental whitespace change made to launcher.py
* Fixes URL formatting on link to settings from setup guide
Co-authored-by: Zach Parks <zach@alliware.com>
* Splits several lines in the readme to avoid excessive length
* Fixes formatting and (hopefully) reduces cringe of joke in setup doc
* Removes unnecessary constructor
* Changes item frequency generation to avoid reusing the same references
Co-authored-by: Zach Parks <zach@alliware.com>
---------
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
Co-authored-by: SoldierofOrder <107806872+SoldierofOrder@users.noreply.github.com>
Co-authored-by: Zach Parks <zach@alliware.com>
* Core: typing for async_start
* CommonClient: add a framework for clients to subscribe to data storage key notifications
* Core: update version to 0.4.2
* lufia2ac: coop support
* first working (most of the time) progression generation for SM using VariaRandomizer's rules, items, locations and accessPoint (as regions)
* first working single-world randomized SM rom patches
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* first working (most of the time) progression generation for SM using VariaRandomizer's rules, items, locations and accessPoint (as regions)
* first working single-world randomized SM rom patches
* - SM now displays message when getting an item outside for someone else (fills ROM item table)
This is dependant on modifications done to sm_randomizer_rom project
* First working MultiWorld SM
* some missing things:
- player name inject in ROM and get in client
- end game get from ROM in client
- send self item to server
- add player names table in ROM
* replaced CollectionState inheritance from SMBoolManager with a composition of an array of it (required to generation more than one SM world, which is still fails but is better)
* - reenabled balancing
* post rebase fixes
* updated SmClient.py
* + added VariaRandomizer LICENSE
* + added sm_randomizer_rom project (which builds sm.ips)
* Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm and done some cleaning
* properly revert change made to CollectionState and more cleaning
* Fixed multiworld support patch not working with VariaRandomizer's
* missing file commit
* Fixed syntax error in unused code to satisfy Linter
* Revert "Fixed multiworld support patch not working with VariaRandomizer's"
This reverts commit fb3ca18528bb331995e3d3051648c8f84d04c08b.
* many fixes and improovement
- fixed seeded generation
- fixed broken logic when more than one SM world
- added missing rules for inter-area transitions
- added basic patch presence for logic
- added DoorManager init call to reflect present patches for logic
- moved CollectionState addition out of BaseClasses into SM world
- added condition to apply progitempool presorting only if SM world is present
- set Bosses item id to None to prevent them going into multidata
- now use get_game_players
* Fixed multiworld support patch not working with VariaRandomizer's
Added stage_fill_hook to set morph first in progitempool
Added back VariaRandomizer's standard patches
* + added missing files from variaRandomizer project
* + added missing variaRandomizer files (custom sprites)
+ started integrating VariaRandomizer options (WIP)
* Some fixes for player and server name display
- fixed player name of 16 characters reading too far in SM client
- fixed 12 bytes SM player name limit (now 16)
- fixed server name not being displayed in SM when using server cheat ( now displays RECEIVED FROM ARCHIPELAGO)
- request: temporarly changed default seed names displayed in SM main menu to OWTCH
* Fixed Goal completion not triggering in smClient
* integrated VariaRandomizer's options into AP (WIP)
- startAP is working
- door rando is working
- skillset is working
* - fixed itemsounds.ips crash by always including nofanfare.ips into multiworld.ips (itemsounds is now always applied and "itemsounds" preset must always be "off")
* skillset are now instanced per player instead of being a singleton class
* RomPatches are now instanced per player instead of being a singleton class
* DoorManager is now instanced per player instead of being a singleton class
* - fixed the last bugs that prevented generation of >1 SM world
* fixed crash when no skillset preset is specified in randoPreset (default to "casual")
* maxDifficulty support and itemsounds removal
- added support for maxDifficulty
- removed itemsounds patch as its always applied from multiworld patch for now
* Fixed bad merge
* Post merge adaptation
* fixed player name length fix that got lost with the merge
* fixed generation with other game type than SM
* added default randoPreset json for SM in playerSettings.yaml
* fixed broken SM client following merge
* beautified json skillset presets
* Fixed ArchipelagoSmClient not building
* Fixed conflict between mutliworld patch and beam_doors_plms patch
- doorsColorsRando now working
* SM generation now outputs APBP
- Fixed paths for patches and presets when frozen
* added missing file and fixed multithreading issue
* temporarily set data_version = 0
* more work
- added support for AP starting items
- fixed client crash with gamemode being None
- patch.py "compatible_version" is now 3
* commited missing asm files
fixed start item reserve breaking game (was using bad write offset when patching)
* Nothing item are now handled game-side. the game will now skip displaying a message box for received Nothing item (but the client will still receive it).
fixed crash in SMClient when loosing connection to SNI
* fixed No Energy Item missing its ID
fixed Plando
* merge post fixes
* fixed start item Grapple, XRay and Reserve HUD, as well as graphic beams (except ice palette color)
* fixed freeze in blue brinstar caused by Varia's custom PLM not being filled with proper Multiworld PLM address (altLocsAddresses)
* fixed start item x-ray HUD display
* Fixed start items being sent by the server (is all handled in ROM)
Start items are now not removed from itempool anymore
Nothing Item is now local_items so no player will ever pickup Nothing. Doing so reduces contribution of this world to the Multiworld the more Nothing there is though.
Fixed crash (and possibly passing but broken) at generation where the static list of IPSPatches used by all SM worlds was being modified
* fixed settings that could be applied to any SM players
* fixed auth to server only using player name (now does as ALTTP to authenticate)
* - fixed End Credits broken text
* added non SM item name display
* added all supported SM options in playerSettings.yaml
* fixed locations needing a list of parent regions (now generate a region for each location with one-way exits to each (previously) parent region
did some cleaning (mainly reverts on unnecessary core classes
* minor setting fixes and tweaks
- merged Area and lightArea settings
- made missileQty, superQty and powerBombQty use value from 10 to 90 and divide value by float(10) when generating
- fixed inverted layoutPatch setting
* added option start_inventory_removes_from_pool
fixed option names formatting
fixed lint errors
small code and repo cleanup
* Hopefully fixed ROR2 that could not send any items
* - fixed missing required change to ROR2
* fixed 0 hp when respawning without having ever saved (start items were not updating the save checksum)
* fixed typo with doors_colors_rando
* fixed checksum
* added custom sprites for off-world items (progression or not)
the original AP sprite was made with PierRoulette's SM Item Sprite Utility by ijwu
* - added missing change following upstream merge
- changed patch filename extension from apbp to apm3 so patch can be used with the new client
* added morph placement options: early means local and sphere 1
* fixed failing unit tests
* - fixed broken custom_preset options
* - big cleanup to remove unnecessary or unsupported features
* - more cleanup
* - moved sm_randomizer_rom and all always applied patches into an external project that outputs basepatch.ips
- small cleanup
* - added comment to refer to project for generating basepatch.ips (https://github.com/lordlou/SMBasepatch)
* fixed g4_skip patch that can be not applied if hud is enabled
* - fixed off world sprite that can have broken graphics (restricted to use only first 2 palette)
* - updated basepatch to reflect g4_skip removal
- moved more asm files to SMBasepatch project
* - tourian grey doors at baby metroid are now always flashing (allowing to go back if needed)
* fixed wrong path if using built as exe
* - cleaned exposed maxDifficulty options
- removed always enabled Knows
* Merged LttPClient and SMClient into SNIClient
* added varia_custom Preset Option that fetch a preset (read from a new varia_custom_preset Option) from varia's web service
* small doc precision
* - added death_link support
- fixed broken Goal Completion
- post merge fix
* - removed now useless presets
* - fixed bad internal mapping with maxDiff
- increases maxDiff if only Bosses is preventing beating the game
* - added support for lowercase custom preset sections (knows, settings and controller)
- fixed controller settings not applying to ROM
* - fixed death loop when dying with Door rando, bomb or speed booster as starting items
- varia's backup save should now be usable (automatically enabled when doing door rando)
* -added docstring for generated yaml
* fixed bad merge
* fixed broken infinity max difficulty
* commented debug prints
* adjusted credits to mark progression speed and difficulty as Non Available
* added support for more than 255 players (will print Archipelago for higher player number)
* fixed missing cleanup
* added support for 65535 different player names in ROM
* fixed generations failing when only bosses are unreachable
* - replaced setting maxDiff to infinity with a bool only affecting boss logics if only bosses are left to finish
* fixed failling generations when using 'fun' settings
Accessibility checks are forced to 'items' if restricted locations are used by VARIA following usage of 'fun' settings
* fixed debug logger
* removed unsupported "suits_restriction" option
* fixed generations failing when only bosses are unreachable (using a less intrusive approach for AP)
* - fixed deathlink emptying reserves
- added death_link_survive option that lets player survive when receiving a deathlink if the have non-empty reserves
* - merged death_link and death_link_survive options
* fixed death_link
* added a fallback default starting location instead of failing generation if an invalid one was chosen
* added Nothing and NoEnergy as hint blacklist
added missing NoEnergy as local items and removed it from progression
* fixed broken Item links
* fixed failing generation that could happen with Disabled Tourian
fixed shared Location list that could be modified for each world
* added missing force disable of EscapeRando if an escape solution cant be found
* fixed broken animal surprise patches
* prevent receiving items when in the first room of Ceres (message box in mode7 is broken)
* fixed generating with "activate chozo robots" Objective
* added soft reset that saves to initial starting location
reverted code change applied to fix softlocks from comeback checks
reverted forcing all beam local when using door rando
* replaced "save and reset" with "save and fast reload" (using same Start+Select+L+R)
* added documentation about Save and Reload
removed forgotten docstring about forcing beams as local items when using door rando
* fixed frequent failing generation on WebHost (KeyError: 'Kraid')
* added "objectiveRandom", "nbObjective", objectiveList and adapted Objective selection options to better reflect VARIA's.
fixed "collect 100% items" not being excluded when objectiveRandom is used
added Exception when VARIA initial layout fails
* fixed broken non-AP items
fixed determinism caused by the use of a set
* fixed generation failing on Webhost with string as a OptionSet (replaced default with a list of string)
cleaned doc and naming of Objective related Options
* Alpha 1 Muse dash stuff.
* Add in an option to limit to only base game songs.
* Make all items progression instead of progression_skip_balancing.
* Add in extra_goal_song_items to help make runs less about completing every song.
* Change ID range to be in a more open area, and add some comments.
* Add in Streamer Mode and difficulty range options. Rearrange data files so its easier to get all data at once.
* Fix generation issues.
* Fix up the maximum and remove old option.
* Remove empty items and the option to make filler songs empty.
* Support emerald hunt mode. Make difficulties an option rather than 2 sliders.
* Fix DLC Song option being inverted.
* Fix item counting being broken if there was more than 1 world.
* Make compatible with .apworld specification.
* Make All item names ASCII compatible.
* Add in the additional_item_percentage option.
* Add a test to ensure the item names are within the normal ascii range.
* Add in death link.
* Remove the album from the item name. Not really needed anymore.
* Add the 2 budget is burning albums under the free songs heading. Adds a couple more songs without dlc.
* Sanitise Album names.
* Added the grade needed choice.
* Update songs to v3.1.0
* Adjust difficulty ranges. Add Expert and Master.
* Fix setup_en.md being out of date.
* Add a manual override.
* Add testing for diff ranges. Fix bugs introduced there. Limit option to 11 to not generate an impossible seed.
* Remove regions from Muse Dash.
* Some Oops...
* Attempt to make tests happy.
* Remove supports weighting false to stop webhost test failing.
* Adjusted settings
* Adjust music sheets to use percentages. Various cleanups.
* Fixes to new code.
* Add Ola Dash Album. Add support for overriding song difficulty. Other stylisation changes.
* Attempt fix tests.
* Ooops missed one.
* flake8 suggestions.
* Remove FM 17314 SUGAR RADIO as that song is a bit weird.
* Update document pages.
* Add trap support
* Lower additional song count by 10.
* Tests broke on my end. Using github to test this.
* Looks like I was accidentally adding ~.
* Fix the one song that crashes OoT hint generation
* Various documentation changes.
* Website documents fixup.
* Doc updates part 2.
* Oops. Doc updates part 3.
* Add Muse Dash to the apworld list.
* Add trailing comma.
* Add a couple plando options.
* Set data_version to 1.
* Add in some handling incase someone decides a song is both starter and included.
* Remove brackets around ifs.
* Oops. Accidentally removed a necessary bracket.
* Fix filtering crash due to me mixing up c# and python .remove().
* Add Happy Otaku Pack Vol.17. Also increment data version.
* Update links to melon loader to be the latest.
* Clean up song selection code by shuffling once then popping.
* Add UID to the Data text file, so the same file can be used client and server.
* Increment Data Version because some names have changed.
* Correct some names.
* Update data to v3.4.0 (Addition of Muse Radio FM104)
* Add support for SFX traps. Adjusted how traps were setup a bit.
* Update the docs to include a troubleshooting section.
* Small fixes.
* Remove unnecessary brackets.
* Add .net downloads to docs.
* Avoid failing generation if strict difficulty settings are applied with no dlc songs and streamer mode.
* Forgot to add the worst starting song count.
* Make minimum song count be Starting Songs + 11 instead of Starting Songs * 2 + 1.
* Fix up several issues where song count could mismatch the requested amount.
* Add a test to ensure world size doesn't grow.
* Fix some oversights.
* Remove unnecessary brackets.
* Fix up passing the tuple out when just the key would suffice.
* Adjust typing based on Phar's suggestions.
* Apply the rest of Phar's suggestions with minor tweaks to other parts to suit suggestions.
* Adjust some more stuff to fit 120 characters.
* Some more pep8 stuff and fix tests.
* Some pep8 in tests.
* The Messenger: strip generated filler items for a sufficiently small remaining item pool
* rewrite the test for the small chance there's no large currency shards
* rework main ap setup guide
* review updates
* add blurb about re-opening rooms and user-content
* more review suggestions
* remove dead links. Windows blurb
* clarify not using qusb and remove redundancies
* SNES mini note
* review suggestions
* remove remaining repetitive text
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* add shop shuffle options and items
* add logic for the shop slots
* write cost tests
* start on shop item logic
* make strike and second wind early items
* some cleanup
* remove 5 shards
* double cost requirement for really expensive items and raise the rates
* add test for shop shuffle with minimum other locations
* put power seal in front of shards
* rename locations and items
* update rules, regions, and shop
* update tests and misc fixes
* minor cleanup
* implement money wrench and figurines
* clean out now unneeded info from slot_data
* docs update and fix a failure when not shuffling shops
* remove shop shuffle option
* Finish out shop rules
* make seals generation easier to read and fix tests
* rule adjustments
* oop
* adjust the prices to be a bit more generous
* add max price to slot data for tracker
* update the hard rules a bit
* remove unnecessary test
* update data_version
* bump version and remove info for fixed issues
* remove now unneeded assert
* review updates
* minor bug fix
* add a test for minimum locations shop costing
* minor optimizations and cleanup
* remove whitespace
* Ice Trap Support
* Support Animalsanity
* Add option for controlling number of emblems in pool
* Support Slow Trap
* Support Cutscene Traps
* Support Voice Shuffle
* Handle Boss Rush goals
* Fix create item reference to self.multiworld
* Support Ringlink
* Reduce beep frequency to 20
* Add Boss Rush Chaos Emerald Hunt Goal
* Fix Eternal Engine - Pipe 1 logic
* Add Chao voice shuffle
* Remove unused option
* Adjust wording of Required Cannon's Core Missions
* Fix incorrect region assignment
* Fix incorrect animal logics
* Fix Chao Race tooltip
* Remove Green Hill Animal Location
* Add Location Count info to tooltips
* Don't allow M4 first if animalsanity is active
* Add Iron Boots to Standard Logic Egg Quarters 5
* Make Vanilla Boss Rush actually Vanilla
* Increment Mod Version
* Increment Data Package Version
---------
Co-authored-by: RaspberrySpaceJam <tyler.summers@gmail.com>
* bumpstik: initial commit
* bumpstik: fix game name in location obj
* bumpstik: specified offset
* bumpstik: forgot to call create_regions
* bumpstik: fix entrance generation
* bumpstik: fix completion definition
* bumpstik: treasure bumper, LttP text
* bumpstik: add more score-based locations
* bumpstik: adjust regions
* bumpstik: fill with Treasure Bumpers
* bumpstik: force Treasure Bumper on last location
* bumpstik: don't require Hazard Bumpers for level 4
* bumpstik: treasure bumper locations
* bumpstik: formatting
* bumpstik: refactor to 0.3.5
* bumpstik: Treasure bumpers are now progression
* bumpstik: complete reimplementation of locations
* bumpstik: implement Nothing as item
* bumpstik: level 3 and 4 locations
* bumpstik: correct a goal value
* bumpstik: region defs need one extra treasure
* bumpstik: add more starting paint cans
* bumpstik: toned down final score goal
* bumpstik: changing items, Hazards no longer traps
* bumpstik: remove item groups
* bumpstik: update self.world to self.multiworld
* bumpstik: clean up item types and classes
* bumpstik: add options
also add traps to item pool
* bumpstik: update docs
* bumpstik: oops
* bumpstik: add to master game list on readme
* bumpstik: renaming Task Skip to Task Advance
because "Task Skip" is surprisingly hard to say
* bumpstik: fill with score on item gen
instead of nothing (nothing is still the default filler)
* bumpstik: add 18 checks
* bumpstik: bump ap ver
* bumpstik: add item groups
* bumpstik: make helper items and traps configurable
* bumpstik: make Hazard Bumper progression
* bumpstik: tone final score goal down to 50K
* bumpstik: 0.4.0 region update
* bumpstik: clean up docs
also final goal is now 50K or your score + 5000, whichever is higher
* bumpstik: take datapackage out of testing mode
* bumpstik: Apply suggestions from code review
code changes for .apworld support
Co-authored-by: Zach Parks <zach@alliware.com>
---------
Co-authored-by: Zach Parks <zach@alliware.com>
* adding back parens that got deleted by accident.
* Void Locus and The Planetarium ids backwards
* change required client version
* beads of fealty was missing for A Moment, whole victory
* found another logic bug
* Update worlds/ror2/__init__.py
Co-authored-by: Zach Parks <zach@alliware.com>
* Remove unnecessary comment
---------
Co-authored-by: Zach Parks <zach@alliware.com>
Randomizes the items, and adds a new item to the pool, "Plot" which lets you go further and further in the game the more you have.
Developers: WirTheAvali (Preferred name for professional use, mewlif)
* Fix links to TASVideos.org using HTTP
* Revise all docs mentioning Lua in EmuHawk which are in English
resolvesTASEmulators/BizHawk#3650
* Correct capitalisation of "BizHawk"
in strings and camelCase identifiers
* Use the term "EmuHawk" when referring to the app, in English docs
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Tests: add test for mixing minimal and non-minimal
* Tests: minor cleanup in test_minimal_mixed_fill
* fix fill_restrictive for mixed minimal/non-minimal
The reason why this only happens for minimal is because it would not accept the solution it found otherwise.
Tracking and releasing unreachable items would be the better solution, but that's a lot harder to do.
* fix typo in fill_restrictive
* fix pep8 in fill_restrictive
* Fill: cleanup invalid unsafe placements, better comments
* Fill: more cleanup
* Factorio: move Client into world folder
* Factorio: declare Client as Client Component
* FactorioClient: use centralized launch_subprocess
* TextClient: make always available
- Remove a relative import in Rules.py
- Clean up a few unused imports in __init__.py
- Use pkgutil instead of open when applying base patch
- make sure rom_name is initialized correctly in modify_multidata
* use os.path.join() instead of explicit "/"
* Docs: Mention Git in the "Optional" section of "Running from Source"
GIt is required to install the Zilliandomizer package.
Also, this is probably just nice to have.
* Remove mention of Zillion so the text doesn't need updating.
* Update docs/running from source.md
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update docs/running from source.md
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Mention PyCharm's git integration
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
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.
* Change default spoiler-option in WebHostLib/generate.py to 3 instead of 0
* shifting spoiler-default to the JS calls instead of setting it in generate.py
---------
Co-authored-by: StripesOO7 <54711792+StripeesOO7@users.noreply.github.com>
* Docs: add info about mainting worlds
* Docs: fix typos in world maintainer
* Docs: commit suggestions into world maintainers
Thanks Joethepic and Silvris
* Docs: fix more typos in world maintainer
* Docs: more typos
* Docs: world maintainers link to core maintainers
* Docs: world maintainers voting on discord
* Docs: add 'world maintainer' link to 'adding games'
* Docs: unmaintained worlds in 'disabled'
* Docs: world maintainer update from review
Thanks LegendaryLinux
* Doc: rephrase world maintainer voting
* Clients: use certifi for wss
On Windows, the local cert store might be outdated and refuse connection to some servers.
* Clients: lazily create ssl_context
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
Shifts the Lake region to be connected to The Laboratory, so that the Lake boss is late game instead of early game.
Shifts the Below Lava Lake region to be connected to the Snowy Depths, so instead of being early game it's early-mid game (since that's when you would be expected to be able to have decent enough digging or a Sädekivi.
* [Docs] Update YAML planning guide
Changed wording for items accessibility to describe how it actually works. Reordered settings such as local_items and start_location_hints to match their order in templates. Fixed some grammatical errors.
* Fix typo
Co-authored-by: Zach Parks <zach@alliware.com>
* Update doc
Moved `accessibility`, `progression_balancing`, and `triggers` to game sections instead of root sections and reworded description accordingly. Updated version number. Fixed `progression_balancing` values in example YAMLs.
* Indented trigger to be part of ALTTP
---------
Co-authored-by: Zach Parks <zach@alliware.com>
The Wargroove mod didn't close the commander.json's file handle. The Wargroove mod will now close that file handle. The change for the mod can be viewed here: FlySniper/WargrooveArchipelagoMod@fc9aeb3
The change can be verified as present in this repository by viewing the binary data in the modAssets.dat file and searching for "commander.json"
This makes a few changes to logic to better match the 1.3 rando's logic. This fixes instances where the wrong items were expected, fixes a typo of "Lorqiana", moves the expert logic on "PotSS: Second area ledge" to only apply if on expert, and adds a new route to "DC: Mea Culpa altar" via Linen of Golden Thread + Three Gnarled Tongues
* Update world api doc
Changed the description of excluded and priority locations to match how they appear in other places such as the options api doc
* Update world api.md
* CI: add a workflow to show flake8 violations in modified files of a PR
* modify a file to trigger the lint check
* CI: add a workflow to show mypy violations in modified files of a PR
* modify a file to trigger the type check
* Split flake8 and mypy into two parallel jobs; run a variant of the workflow on push event; modify a file to trigger the push workflow
* fail the task if there are syntax errors; remove old lint workflow
* Fix starting weapon locations usage
Makes a fresh copy of starting weapon locations when get_pool_core is ran
Should fix the issue of dangerous_weapon_locations getting appended to the list for other worlds past the first world that has dangerous StartingPosition, as well as running into the error if ExpandedPool was different between players
Credit for fix goes to @Silvris in the AP Discord
* Add new translation for Adventure and Archipidle in french
Add new translation for Adventure and Archipidle in french
* Add more store in setup page subnautica for more fairness
Add more store in setup page subnautica for more fairness
* tweak update merge #1685 for lua file
tweak update merge #1685 for lua file
* fix text
fix text
* fix wrong translation
fix wrong translation
* Yes it's better
Yes it's better
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Fix documentation error
* init_creation
somehow this fix bug
* item_shuffle_fix
also a count as been corrected
* Fix_early_generation
* Update __init__.py
* Update __init__.py
fix version specific bug
* fix rule set for final boss
and did some reformation
(thanks kaito)
* Update Rules.py
the sword trio can now be in itself if before or actually themself
* Core: correct typing info for item_in_locations
Core: rename item_in_locations to item_name_in_location_names
Core: add actual item_name_in_locations
* item_shuffle_fix
also a count as been corrected
* Fix_early_generation
* fix rule set for final boss
and did some reformation
(thanks kaito)
* Update Rules.py
the sword trio can now be in itself if before or actually themself
* Fix the missing []
and switch to the good function
* - Cleanup and Black Sliver's suggestions
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
Co-authored-by: Alex Gilbert <alexgilbert@yahoo.com>
* Adding SC2 macOS instructions
A few hours ago, I tested whether the client would run successfully on macOS (Send/Receive items, load maps, download maps, etc.). After the successful testing, I thought adding some documentation would be nice for those who want to play Archipelago on a macOS system.
* Don't need sudo
Turns out you don't need sudo to do the download_data, oops.
* Removed Extraneous Parantheses
__init__:
- Added exception for if the player has too many excluded abilities on keyblades.
- Fixed Action Abilities only on keyblades from breaking.
- Added proper support for ability quantity's instead of 1 of the ability
- Moved filling the localitems slot data to init instead of generate_output so I could easily unit test it
TestSlotData:
- Checks if the "localItems" part of slot data is filled. This is used for keeping track of local items and making sure nothing dupes
Corrects incorrect name listed for location in rules.py leading to logic rules failing to apply.
Swaps location names for incorrectly-named trainersanity checks in Viridian Gym
refactored and cleaned a bit SMWorld class for best practices:
- moved content of Regions.py and Rules.py in SMWorld
- moved appropiate code to their dedicated World core functions
- moved some Entrances being created in generate_basic to create_regions
more comeback check fixes:
- fixed setting progression door openers items local if doors_colors_rando is used
- enable comeback check only for filling stage as later stages (progression balancing, accessibility and spoiler playthrough) are prone to fail with it
Fixes some issues with typos and oversights logic generation in SC2
Rebalancing
Adds Vultures to Advanced tactics as train killers
Drops Firebats from basic unit pool and moves Goliaths from advanced tactics to standard
Use item index instead of location and player to determine if the player should get the item.
Fixed getting stat increases on the title screen breaking stuff.
Changed local locations list from a list organized by world-id to a set.
Fixed the inventory slots to be the actual back of inventory.
Fixed recaching when not closing the client but switching slots .
Fixed getting a ability faster than the game so it dupes.
Removed verify location since it was never used.
- fixed wrong condition in Collect to assign lastAP
- fixed possible infinite loop in generating output when many SM worlds are present
- fixed new VARIA code that changed a list used for every SM worlds and would throw if many SM worlds uses Aea rando and not AreaLayout
* oot client: check types of tables coming from lua script for safety
There was a reported bug with corrupted (?) slot data preventing locations sending. This should safeguard against any instances of that happening in the future, if it ever happens again.
* oot: repair minor hint issues
SMW has # in some location names which breaks ootr's poor text formatting system, so those need to be filtered out.
Also replaces "[X] for [player Y]" with "[player Y]'s X" as frequently requested.
* oot: update required client version
* oot client: fix patching filename bug
* oot: fix broken poachers saw item
how was I this stupid, seriously
* oot: sanitize player, location, and item names everywhere
* Fixes the socket library for bizhawk 2.9/lua 5.4 by including another one in parallel
* Fixes lua 5.4 support by making socket.lua into a "modern" module (the `module` keyword is gone)
* Adds the linux version and 32 bit windows socket dlls because why not
* Merges common functions into `common.lua` - the only functional change of this should be that:
* Some things that were locals are globals now - this can be changed, I just was lazy and it likely doesn't matter
* `drawText` now uses middle/bottom for all prints - feel free to do what you like with that change
- New OC2 option `DLCOptionSet`, which is a list of DLCs whose levels should or shouldn't be used for entrance randomizer (and mention in documentation). By default, DLC owners now need to enable DLCs in weighted settings.
- Throw user-friendly exceptions when contradictory settings are enabled
- Slightly relax generation requirements for sphere 1/2 level permutations
- Write entrance randomizer info in spoiler log
- Skip adding "Dark Green Ramp" to item pool if Kevin Levels are disabled
* Core: Band-aid fixes `start_inventory_from_pool` causing generation failures if any world does utilize it.
* Core: Slightly better(?) solution
* Set default so it doesn't fail on WebHost.
This is a major update for Stardew Valley, for version 3.x.x.
Changes include a large number of new features, including Seasons Randomizer, SeedShuffle, Museumsanity, Friendsanity, Complete Collection Goal, Full House Goal, friendship multiplier
Co-authored-by: Jouramie <jouramie@hotmail.com>
* notify clients of their amount of hint points on initial connection and when hinting
* send in connect packet instead of sending a RoomUpdate on connect
* send hint_points update in `on_new_hint`
* add to connected packet docs
* hint_points isn't a new variable on RoomUpdate now
* note roomupdate can contain connected members
* add the hint point stuff to commonclient
* only show hint points when relevant and default to 0
* Revert "note roomupdate can contain connected members"
* remove hint_points from roomupdate args list and condense explanation of possible packet args
* updates from phar's review
* Small tweak to wording in RoomUpdate
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
Co-authored-by: Phar <zach@alliware.com>
Random Visit Locking wasn't copying correctly
init cleanup and moved itempool population to create_items
Updated docs due to a lot of people having issues setting it up.
This adds support to most of Varia's 20221101 update. Notably, added Options for:
- Objectives
- Tourian
- RelaxedRoundRobinCF
As well as previously unsupported Options:
- EscapeRando
- RemoveEscapeEnemies
- HideItems
* Clique: The greatest game of all time
* Fix failing test
* Increment data_version for backwards compat
* Clique: Tweaked names and forced progression for "The Button"
* Clique: Just location/item definitions to class
* Clique: More tweaks.
* Clique: Fix derp moment.
* Clique: Fix derp moment, part dos.
* Clique: Suggested changes.
* Clique: Update domain
* Clique: Create derived classes for Item and Location
* Clique: simplify line
* implement mega shards
* create the option and locations, add to slot data and tests
* add boss refights as locations
* remove barma'thazel. it's apparently impossible to get to him
* remove barma'thazel again
* up max shard count to 85
* increment version
* dynamically alter the power seal pool
* revert host.yaml change
* two mega shards were missing from the maps
* add new checks to the info page
* add some more rules to skylands
* forgot to update my tests
* explicit imports, remove unnecessary typing, lower required client ver
* use generators for shard and seal creation
* Core: default data_version to 0
This allows new (ap-)worlds to function with old clients without having to define a version.
* Blasphemous: fix data_version
* Core: Fix divide by zero error if all locations are priority
* Core: 100% makes more sense than 0% in this context
* Core: Revert a some "autoformatter" damage
* Core: Move comparisons a bit earlier.
Worlds that are 100% filled with locked locations should now be completely skipped in the progression balancing step now as we filter them out at the very beginning of the stage now. Also skips progression balancing if it turns out all locations are locked early before attempting to balance.
* Restore "random" option to weighted-settings, adjust capitalization of hardcoded settings
* Set default value as "random" for Choice, TextChoice, and Toggle options with no default value
This is a Lua script for BizHawk that implements the relevant parts of
the RetroArch networking API used by the Archipelago LADX Client.
socket.lua and core.dll are exact copies of the same files in
data/lua/OOT and various other folders. There is a PR consolidating
these into the base folder, which this commit is anticipating.
LADX "just works"(tm) when this is loaded in Bizhawk.
* TLOZ: Pols Voice Logic Fix
Was informed that Pols Voice require certain weapons to kill that might not be guaranteed by the starting weapon. This is the only regular enemy in the game that cannot be killed by either any of the starting weapons or bombs which can be bought, so adding this rule should prevent any issues.
* Add support for items-list, locations-list, and custom-list option types to weighted-settings
* Fix subclass detection for `items-list`, `locations-list`, and `custom-list` in weighted-settings
* Move specially handled options alongside each other in the UI, and split them into logical groupings
* Fix header text and location for Priority an Exclusion locations
* Add universally supported "random" option to `Choice` and `TextChoice` options in weighted-settings
* Update description text for exclusion items to clarify they also prevent helpful items.
* Be technically correct and call them `useful` items.
* Fix a bug causing weighted-settings UI to incorrectly display range values with no default as having a value of 25.
* Do not set min and max values of range options to zero by default. This causes clutter in saved `.yaml` files.
* [WebHost] Unify styles for popover and mobile menus. Adjust popover menu to function the same as the mobile menu, and toggle via JS.
* Remove class `first-link` in favor of CSS `:first-child`.
* Adjust mobile menu link font size and padding. Change wording of popover trigger text. Add border-right to popover menu. Change "Upload Host File" to "Host Game"
* Change mobile menu text to "Host Game"
* ModuleUpdater/setup: install pkg_resources and check for pip
plus minor cleanup in the github actions
* ModuleUpdate/setup: make flake8 happy
* ModuleUpdate/setup: make mypy happier
* fix missing rule
* document a missing known issue
* fix a break when shuffle seals is off
* test the thing i just fixed
* invert the if so it's a bit faster
* Change archipelago mod download page
* Docs: change connecting to archipelago in RoR2 setup guide
* dropdowns for links
* change some relative sizing
* change links and reorder links
* dropdowns for links
* change some relative sizing
* change links and reorder links
* mobile view was showing on desktop early
* add in missing relative font sizes
* clean up and add a temp downdown img
* move links around
* added cloud border
* move arrow to the left side
* Improve mobile styles for WebHost
- Mobile view works properly on mobile Chrome and Firefox
- Added thin-window view for desktop browsers that have been reduced in size
- Tested in Chrome and Firefox on mobile and desktop
* Improve style for small-width desktop popover
Adds Adventure for the Atari 2600, NTSC version. New randomizer, not based on prior works. Somewhat atypical of current AP rom patch games; The generator does not require the adventure rom, but writes some data to an .apadvn APContainer file that the client uses along with a base bsdiff patch to generate a final rom file.
KH2Client:
- Now checks if the world id is in the list of checks. This fixed sending out stuff on the movie
- Cleaned up unused inports
- Not getting starting invo if the game is not open when you connect to the server
__init__:
-Cleaned up print statements
- Fixed the spoiler log not outputting the right amount of mcguffins after fixing them in the case of the player messing up their settings
Openkh:
-Fixed putting the correct dummy item on levels
Changelog:
Features:
- New goal
- Grand Prix
- Complete all of the Kart Races to win!
- New optional Location Checks
- Omosanity (Activating Omochao)
- Kart Race Mode
- Ring Loss option
- `Classic` - lose all rings on hit
- `Modern` - lose 20 rings on hit
- `OHKO` - instantly die on hit, regardless of ring count (shields still protect you)
- New Trap
- Pong Trap
Quality of Life:
- SA2B is now distributed as an `.apworld`
- Maximum possible number of Emblems in item pool is increased from 180 to 250
- An indicator now shows on the Stage Select screen when `Cannon's Core` is available
- Certain traps (`Exposition` and `Pong`) are now possible to receive on `Route 101` and `Route 280`
- Certain traps (`Confusion`, `Chaos Control`, `Exposition` and `Pong`) are now possible to receive on `FinalHazard`
Bug Fixes:
- Actually swap Intermediate and Expert Chao Races correctly
- Don't always grant double score for killing Gold Beetles anymore
- Ensure upgrades are applied properly, even when received while dying
- Fix the Message Queue getting disordered when receiving many messages in quick succession
- Fix Logic errors
- `City Escape - 3` (Hard Logic) now requires no upgrades
- `Mission Street - Pipe 2` (Hard Logic) now requires no upgrades
- `Crazy Gadget - Pipe 3` (Hard Logic) now requires no upgrades
- `Egg Quarters - 3` (Hard Logic) now requires only `Rouge - Mystic Melody`
- `Mad Space - 5` (Hard Logic) now requires no upgrades
Co-authored-by: RaspberrySpaceJam <tyler.summers@gmail.com>
* add support for direct url for mod to download.
make a nice error message if the chosen release channel is empty.
* Rip out call to github api as it is no longer used.
* rework error message to be more descriptive, and provide basic troubleshooting.
fix command line data version not correctly overriding apmc data version.
### New features
- ***Architect mode***
Usually the cave is randomized by the game, meaning that each attempt will produce a different dungeon. However, with this new feature the player can, between runs, opt into keeping the same cave. If activated, they will then encounter the same floor layouts, same enemy spawns, and same red chest contents as on their previous attempt.
- ***Custom item pool***
Previously, the multiworld item pool consisted entirely of random blue chest items because, well, the permanent checks are blue chests and that's what one would normally get from these. While blue chest items often greatly increase your odds against regular enemies, being able to defeat the Master can be contingent on having an appropriate equipment setup of red chest items (such as Dekar blade) or even enemy drops (such as Hidora rock), most of which cannot normally be obtained from blue chests.
With the custom item pool option, players now have the freedom to place any cave item into the multiworld itempool for their world.
- ***Enemy floor number, enemy sprite, and enemy movement pattern randomization***
Experienced players can deduce a lot of information about the opposition they will be facing, for example: Given the current floor number, one can know in advance which of the enemy types will have a chance to spawn on that floor. And when seeing a particular enemy sprite, one can already know which enemy types one might have to face in battle if one were to come in contact with it, and also how that enemy group will move through the dungeon.
Three new randomization options are added for players who want to spice up their game: one can shuffle which enemy types appear on which floor, one can shuffle which sprite is used by which enemy type, and one can shuffle which movement pattern is used by which sprite.
- ***EXP modifier***
Just a simple multiplier option to allow people to level up faster. (For technical reasons, the maximum amount of EXP that can be awarded for a single enemy is limited to 65535, but even with the maximum allowed modifier of 500% there are only 6 enemy types in the cave that can reach this cap.)
### Balance change
- ***proportionally adjust chest type distribution to accommodate increased blue chest chance***
One of the main problems that became apparent in the current version has to do with the distribution of chest contents. The game considers 6 categories, namely: consumable (mostly non-restorative), consumable (restorative), blue chest item, spell, gear, and weapon. Since only blue chests count as multiworld locations, we want to have a mechanism to customize the blue chest chance.
Given how the chest types are detetermined in game, a naive implementation of an increased blue chest chance causes only the consumable chance to be decreased in return. In practice, this has resulted in some players of worlds with a high blue chest chance struggling (more than usual) to keep their party alive because they were always low on comsumables that restore HP and MP.
The new algorithm tries to avoid this one-sided effect by having an increase in blue chest chance resulting in a decrease of all other types, calculated in such a way that the relative distribution of the other 5 categories stays (approximately) the same.
### Bug fixes
- ***prevent using party member items if character is already in party***
This should have been changed at the same time that 6eb00621e3 was made, but oh well...
- ***fix glitched sprite when opening a chest immediately after receiving an item***
When opening a chest right after receiving a multiworld item (such that there were two item get animations in the exact same iteration of the game main loop), the item from the chest would display an incorrect sprite in the wrong place. Fixed by cleaning up some relevant memory addresses after getting the multiworld item.
- ***fix death link***
There was a condition in `deathlink_kill_player` that looked kinda smart (it checked the time against `last_death_link`), but actually wasn't smart at all because `deathlink_kill_player` is executed as an async task and the main thread will update `last_death_link` after creating the task, meaning that whether or not the incoming death link would actually be passed to the game seems to have been up to a race condition. Fixed by simply removing that check.
### Other
- ***add Lufia II Ancient Cave (and SMW) to the network diagram***
These two games were missing from the SNES sector.
- ***implement get_filler_item_name***
Place a restorative consumable instead of a completely random item. (Now the only known problem with item links in lufia2ac is... that noone has ever tested item links. But this should be an improvement at least. Anyway, now #1172 can come ;)
And btw., if you think that the implementation of random selection in this method looks weird, that's because it is indeed weird. (It tries to recreate the algorithm that the game itself uses when it generates a replacement item for a chest that would contain a spell that the party already knows.)
- ***store all options in a dataclass***
This is basically like using #993 (but without actual support from core). It makes the lufia2ac world code much nicer to maintain because one doesn't have to change 5 different places anymore when adding or renaming an option.
- ***remove master_hp.scale***
I have to admit: `scale` was a mistake. Never have I seen a single option value cause so many user misconceptions. Some people assume it affects enemies other than the Master; some people assume it affects stats other than HP; and many people will just assume it is a magic option that will somehow counterbalance whatever settings combination they are currently trying to shoot themselves in the foot with.
On top of that, the `scale` mechanism probably doesn't provide a good user experience even when used for its intended purpose (since having reached floor XY in general doesn't mean you will have the power to deplete XY% of the Masters usual HP; especially given that, due to the randomness of loot, you are never guaranteed to be able to defeat the vanilla Master even when you have cleared 100% of the floors).
The intended target audience of the `master_hp` option are people who want to fight the Master (and know how to fight it), but also want to lessen (to a degree of their choosing) the harsh dependence on the specific equipment setups that are usually required to win this fight even when having done all 99 floors. They can achieve this by setting the `master_hp` option to a numeric value appropriate for the level of challenge they are seeking. Therefore, nothing of value should be lost by removing the special `scale` value from the `master_hp` option, while at the same time a major source of user confusion will be eliminated.
- ***typing***
This (combined with the switch to the option dataclass) greatly reduces the typing problems in the lufia2ac world. The remaining typing errors mostly fall into 4 categories:
1. Lambdas with defaults (which seem to be incorrectly reported as an error due to a mypy bug)
1. Classmethods that return instances (which could probably be improved using PEP 673 "Self" types, but that would require Python 3.11 as the minimum supported version)
1. Everything that inherits from TextChoice (which is a typing mess in core)
1. Everything related to asar.py (which does not have proper typing and lies outside of this project)
## How was this tested?
https://discord.com/channels/731205301247803413/1080852357442707476 and others
Energy Link:
* Transfer and Storage increased by 10X
* Cost of building increased by roughly 10X
* This is a way to address their effect on performance, as users now need a tenth of them to get the same throughput, it also differentiates them from Accumulators
5 new Traps:
* Teleport Trap
* Grenade Trap
* Cluster Grenade Trap
* Artillery Trap
* Atomic Rocket Trap
When max science is lower than min science, the two are now swapped.
Max Evolution Trap count was changed from 25 -> 10.
New option: Ingredients Offset
* When creating random recipes, use this many more or less ingredients in the new recipe.
* CI: fix and more greedy filtering
* CI: only run lint if *.py changed
* CI: only run CodeQL if supported file changed
* CI: fix unittests still triggering for build.yml
* CI: update CodeQL action
* CI: trigger codeql when changing the workflow
* implement function to allow self locking items for items accessibility
* swap some lttp locations to use new functionality
* lambda capture `item_name` and `location`
* don't lambda capture location
* Revert weird visual indent
* make location.always_allow additive
* fix always_allow rule for multiple items
* don't need to lambda capture item_names
* oop
* move player assignment to the beginning
* always_allow should only be for that player so prevent non_local_items
* messenger got merged so have it use this
* Core: fix doc string indentation for allow_self_locking_items
* Core: fix doc string indentation for allow_self_locking_items, number two
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Coin items received or found in the Game Corner are now shuffled, locations require Coin Case
* Prizesanity option (shuffle Game Corner Prizes)
* DexSanity option: location checks for marking Pokémon as caught in your Pokédex. Also an option to set all Pokémon in your Pokédex as seen from the start, to aid in locating them.
* Option to randomize the layout of the Rock Tunnel.
* Area 1-to-1 mapping: When one instance of a Wild Pokémon in a given area is randomized, all instances of that Pokémon will be the same. So that if a route had 3 different Pokémon before, it will have 3 after randomization.
* Option to randomize the moves taught by TMs.
* Exact controls for TM/HM compatibility chances.
* Option to randomize Pokémon's pallets or set them based on primary type.
* Added Cinnabar Gym trainers to Trainersanity and randomized the quiz questions and answers. Getting a correct answer will flag the trainer as defeated so that you can obtain the Trainersanity check without defeating the trainer if you answer correctly.
* initial commit of messenger integration
* setup no_logic and needed slot_data
* fix some typos and determinism
* make all of it deterministic
* add documentation
* swapped to non local items so change the fed data
* ~~deathlink~~
* satisfy the docs test
* update doc test to show expected name
* split custom classes into a separate file and fix an errant rule
* make access dependency test give more useful errors
* implement tests
* remove some unneccessary back entrances and make names clearer
* fix some big dumbs
* successful unit tests are good also some slight reorganizing
* add astral tea quest line, and potentially power seals as items
* if TYPE_CHECKING... aahhhhhh
* oop forgot to remove legacy code
* having the seed and leaves as actual items doesn't seem to do anything so remove them. locations still work though
* update setup guide with some changes
* Tower HQ was creating duplicate locations
* allow self locking items
* cleanup
* move self_locking_items function to core
* docstring
* implement choice of notes needed for music box
* test the default value
* don't create any starting inventory items
* make item creation faster
* change default accessibility and power seals options
* improve documentation
* precollected_items is a dict of Items...
* implement shop chest goal
* tests
* always assign total and required seals
* add new goals and set music box as requiring shop chest on shop chest goals instead of just setting it as the completion
* fix dumb test quirk
* implement music box skip as an option
* world rewrite/cleanup
* default to apworld and add game to readme
* revert bleeding commits from other PRs
* more bleeds
* fix some errors in options docstrings
* ???
* make my set rules method not have an awful name
* test cleanup
* add a test for item accessibility
* fix issues with tests
* make the self locking item behavior work correctly
* misc cleanup
* more general cleanup to be a good example
* quick rules rewrite
* more general cleanup and typing
* more speed, more clean
* bump data version
* make sure the locked item belongs to current player
* fix bad name and indent. call MessengerItem directly for events
* add poptracker pack to docs
* doc cleanup and "known issues" section that I probably won't be able to fix any time soon.
* missed some spots
* add another bug i forgot about
* be consistently wrong
* 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
* add ability to choose custom characters in STS
* bump required protocol (client?) version.
* fix slot data fill.
* add downfall mode, as well as characters.
* small change in documentation for character choice as it now uses internal ID's instead of visible titles... because other languages are a thing.
* Minecraft: rewrite to modern AP standards
* Fix gitignore to not try to ignore the entire minecraft world
* minecraft: clean up MC-specific tests
* minecraft: use pkgutil instead of open
* minecraft: ship as apworld
* mc: update region to new api
* Increase upper limit on advancement and egg shard goals
* mc: reduce egg shard count by 5 for structure compasses
* Minecraft: add more tests
Ensures data loading works; tests beatability with various options at their max setting; new tests for 1.19 advancements
* test improvements
* mc: typing and imports cleanup
* parens
* mc: condense filler item code and override get_filler_item_name
- consolidated declaration and population of level location lists
- moved floor_location_game_ids_late declaration for consistency
- moved generate_itempool to create_items, where it belongs
- mention that expanded pool includes take any caves in the option description again
- removed unnecessary StartingPosition check regarding Take Any Caves (leftover from older StartingPosition behavior I believe)
- use proper comparisons to option keys instead of hardcoded ints
Originally, short generations used an artificial cull to create balanced mission distributions. This resulted in campaigns that were somewhat too consistent, and on some standard settings combinations, this resulted in campaigns having The Outlaws as the second mission 100% of the time. It also caused generation to fail a bit too easily if the player excluded too many missions.
This removes the cull and adds an additional early Easy mission slot to all of the reduced sized campaigns.
When playing on No Build settings, this also pushes many of the missions down a difficulty level to ensure greater variety, and pushes additional missions down on Advanced Tactics.
Additional small fixes:
The in-world Excluded Missions validation check is replaced by the core OptionSet check.
Fixed issue with Existing Items not getting their upgrades locked with Units Always Have Upgrades on.
Settings combination:
- EP Shuffle
- disable_non_randomized
- doors: panels or doors: none
An Event Item was being created that is inaccessible. This is fixed now.
(The fix makes sure that player_logic is not trying to create events for the sake of EPs that are disabled)
Note: These two sets should probably be merged anyway, they used to behave differenty but no longer really do. But that will require some extra care on the client side as well.
* Options.py cleanup
* TextChoice cleanup
* make Option.current_option_name a property
* title the TextChoce option names
* satisfy the linter
* a little more options cleanup
* move the typing import
* typing should be PlandoSettings
* fix incorrect conflict merging
* make imports local
* the tests seem to want me to import these twice though i hate it.
* changes from review. Make the various Location verifying Options `LocationSet`
* remove unnecessary fluff
* begrudgingly support get_current_option_name. Leave a comment that worlds shouldn't be touching this
* log a deprecation warning and return the property for `get_current_option_name()`
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* - Can Catch every fish doesn't need fishing rods if they are not shuffled
* add has_max_fishing_rod
* add test for master angler + vanilla tools
---------
Co-authored-by: Alex Gilbert <alexgilbert@yahoo.com>
* Tests: test that the game is beatable for WorldTestBases
* update docstring
* don't test the bases with default options for real this time
* invert the property so worlds can use it easier
* setup check should be or
* test class needs to always be constructed
* skip default tests before multiworld setup
* check if the calling method is in the base's __dict__
* shorter property and functional setup skipping
* shorter property and functional setup skipping
* 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>
* Tests: test that worlds don't create regions or locations after `create_items`
* recache during the location counts just to be extra safe
* adjust typing and use a Tuple instead of a list
* remove unused import
* Tests: test all state and empty state on world test bases
* actually add the test methods to the dict
* only test if the world test base has non default options
* remove temp logging
* ditch the meta class and document methods
* Tests: WorldTestBase comment and docstring cleanup
* skip default tests if setUp or world_setup are modified and use a property
* negation hurts my head
* docstring
* use a better name for the property
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Stardew Valley Archipelago implementation
* fix breaking changes
* - Added and Updated Documentation for the game
* Removed fun
* Remove entire idea of step, due to possible inconsistency with the main AP core
* Commented out the desired steps, fix renaming after rebase
* Fixed wording
* tests now passes on 3.8
* run flake8
* remove dependency so apworld work again
* remove dependency for real
* - Fix Formatting in the Game Page
- Removed disabled Option Descriptions for Entrance Randomizer
- Improved Game Page's description of the Arcade Machine buffs
- Trimmed down the text on the Options page for Arcade Machines, so that it is smaller
* - Removed blankspace
* remove player field
* remove None check in options
* document the scripts
* fix pytest warning
* use importlib.resources.files
* fix
* add version requirement to importlib_resources
* remove __init__.py from data folder
* increment data version
* let the __init__.py for 3.9
* use sorted() instead of list()
* replace frozenset from fish_data with tuples
* remove dependency on pytest
* - Add a bit of text to the guide to tell them about how to redeem some received items
* - Added a comment about which mod version to use
* change single quotes for double quotes
* Minimum client version both ways
* Changed version number to be more specific. The mod will handle deciding
---------
Co-authored-by: Alex Gilbert <alexgilbert@yahoo.com>
- Added more progressive locations and associated items.
- Added an option to enable materials/consumables/estus randomization, some players complain about the number of locations and the randomness of those items.
- Added an option to add DLC Items and Locations to the pool, the player must own both the ASHES OF ARIANDEL and the RINGED CITY DLC.
Co-authored-by: Br00ty <83629348+Br00ty@users.noreply.github.com>
Co-authored-by: Friðberg Reynir Traustason <fridberg.traustason@gmail.com>
This adds Wargroove to the list of supported games. Wargroove uses a custom non-linear campaign over the vanilla and double trouble campaigns. A Wargroove client has been added which does a lot of heavy lifting for the Wargroove implementation and must be always on during gameplay. The mod source files can be found here: https://github.com/FlySniper/WargrooveArchipelagoMod
* Make RisingTidesOverrides consistent with normal yaml behaviour.
* Each of the options can be either string directly specifying the option, or dictionary.
* If dictionary, ensure that at least one of the options is greater than zero.
* Made keys optional
* A lot less copy/pasta.
---------
Co-authored-by: Jarno Westhof <jarnowesthof@gmail.com>
* Docs: document world docs and tests
* regions and items shouldn't be created after `create_items`
* Changes from review
* Restructure game info section
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* w
* urls can have extension probably
* reorder the methods by call order
* fix grammar mistake in ordered method list
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Timespinner: added RisingTides and DadPercent flags
* Implemented logic for DadPercent and RisingTides
* Fixed TODO's
* Logic fixes
* Fixed + removed LogicMixins
* Fixes
* More Fixes
* Added UnchainedKeys flag
* Fixed available items in pool with UnchainedKeys
* Fixed typing callable
* Fixed generation failures
* More refactorings
* Implemented traps
* Fixed more typo
* Fixed copy paste bug
* Fixed teleporter logic
* Fixed traps from pool
* Fixed pyramid gates bug that causes a crash on connecting
* Fixed seed reproduceability
* Fixed logic eye for eye spy
Now consider warp beacons as starter progression items
* Attempt to add tracker icons using table
* Replaced table layout with css grid
* Fixed tracker + added Timespinner was apworld capatible
* Updated archipelago items description
* updated URL
* Cleared up text
* Fixed based on self review of PR
* Fixed unit tests
* Fixed seed reproduceability when the traps yaml option is not provided
* Fixed logic for flooded basement
* Implemented Beserkers review result
I am not sure why, i guess this is just to make adding future games less conflicting?
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Added two new options (thanks to WeffJebster)
* Apply suggestions from code review
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Addition review results
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* WebHost: Tweaks to search on tracker pages
- Pressing `Ctrl+F` or `/` now focuses the search box.
- Typing now automatically focuses the search box.
- Pressing `Escape` now clears the search and scrolls to the top.
* WebHost/Trackers: Focus search box on load
* WebHost/Trackers: Remove overriding of Ctrl+F and /
Before: 1 item activates all 4
After: 7 items activate 7 buttons, creating more divergent routes
Also, I consolidated the 6 filler emotes into a single "Emote Wheel" item to make space in the item pool.
I bumped my data version and min AP version to indicate this change.
The corresponding oc2-modding update is **v1.6.0**
* Tests: add a test that created items and locations exist in the datapackage
* move FF validation to `assert_generate` and remove test exclusion
* test created location addresses are correct
* make the assertion proper and more verbose
* make item count test ~~a bit faster~~ a lot nicer
* 120 blaze it
* name test multiworld setup better and fix another over 120 line in FFR
* LTTP: do the enemizer check in `stage_assert_generate` and break after checking any world for enemizer succeeds
* use multiworld
* catch a missed `used_enemizer` check and add typing
* more typing
* Protocol: Improve machine-readability of prints
* Factorio: Make use of new PrintJSON fields for echo detection.
* Protocol: Add message field to chat prints.
## Adding in Explore Mode:
Features include:
* Added in `environments` to be items.
* `Location checks` are now `environment based` instead of being able to get them from anywhere.
* Added in support for the `DLC Survivors of the void` which include `Void Items` and `3 new maps` that come with it. (option added to use DLC)
---------
Co-authored-by: Dogpetkid <dogpetkid@gmail.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"
* Make Bowser unkillable on Egg Hunt
* Increment Data Package version
Changed a location name.
* Baseline for Bowser Rooms shuffling
* Add boss shuffle
* Remove extra space
* Overworld Palette Shuffle
* Fix Literature Trap typo
* Handle Queuing traps and new Timer Trap
* Fix trap name and actually create them
* Early Climb and Overworld Speed
* Add correct tooltip for Early Climb
* Tooltip text edit
* Address unconnected regions
* Add option to fully exclude Special Zone levels from the seed
* Fix Chocolate Island 4 Dragon Coins logic
* Update worlds/smw/Client.py to use `getattr`
raiseException(f"dungeon_items key in A Link to the Past was removed, but is present in these weights as {get_choice_legacy('dungeon_items',weights,False)}.")
logging.info(f"Wrote new mod file to {new_ap_mod}")
ifold_ap_modisnotNone:
os.remove(old_ap_mod)
logging.info(f"Removed old mod file from {old_ap_mod}")
else:
logging.error(f"Error retrieving the randomizer mod (status code {apmod_resp.status_code}).")
logging.error(f"Please report this issue on the Archipelago Discord server.")
sys.exit(1)
exceptStopIteration:
logging.warning(f"No compatible mod version found for {minecraft_version}.")
ifnotprompt_yes_no("Run server anyway?"):
sys.exit(0)
else:
logging.error(f"Error checking for randomizer mod updates (status code {resp.status_code}).")
logging.error(f"If this was not expected, please report this issue on the Archipelago Discord server.")
ifnotprompt_yes_no("Continue anyways?"):
sys.exit(0)
defcheck_eula(forge_dir):
"""Check if the EULA is agreed to, and prompt the user to read and agree if necessary."""
eula_path=os.path.join(forge_dir,"eula.txt")
ifnotos.path.isfile(eula_path):
# Create eula.txt
withopen(eula_path,'w')asf:
f.write("#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).\n")
f.write(f"#{strftime('%a%b %d%X%Z %Y')}\n")
f.write("eula=false\n")
withopen(eula_path,'r+')asf:
text=f.read()
if'false'intext:
# Prompt user to agree to the EULA
logging.info("You need to agree to the Minecraft EULA in order to run the server.")
logging.info("The EULA can be found at https://account.mojang.com/documents/minecraft_eula")
Archipelago provides a generic framework for developing multiworld capability for game randomizers. In all cases, presently, Archipelago is also the randomizer itself.
Archipelago provides a generic framework for developing multiworld capability for game randomizers. In all cases,
presently, Archipelago is also the randomizer itself.
Currently, the following games are supported:
* The Legend of Zelda: A Link to the Past
* Factorio
* Minecraft
* Subnautica
* Slay the Spire
* Risk of Rain 2
* The Legend of Zelda: Ocarina of Time
* Timespinner
* Super Metroid
* Secret of Evermore
* Final Fantasy
* Rogue Legacy
* VVVVVV
* Raft
* Super Mario 64
* Meritous
* Super Metroid/Link to the Past combo randomizer (SMZ3)
* ChecksFinder
* ArchipIDLE
* Hollow Knight
* The Witness
* Sonic Adventure 2: Battle
* Starcraft 2: Wings of Liberty
* Starcraft 2
* Donkey Kong Country 3
* Dark Souls 3
* Super Mario World
@@ -34,6 +32,56 @@ Currently, the following games are supported:
* Overcooked! 2
* Zillion
* Lufia II Ancient Cave
* Blasphemous
* Wargroove
* Stardew Valley
* The Legend of Zelda
* The Messenger
* Kingdom Hearts 2
* The Legend of Zelda: Link's Awakening DX
* Adventure
* DLC Quest
* Noita
* Undertale
* Bumper Stickers
* Mega Man Battle Network 3: Blue Version
* Muse Dash
* DOOM 1993
* Terraria
* Lingo
* Pokémon Emerald
* DOOM II
* Shivers
* Heretic
* Landstalker: The Treasures of King Nole
* Final Fantasy Mystic Quest
* TUNIC
* Kirby's Dream Land 3
* Celeste 64
* Castlevania 64
* A Short Hike
* Yoshi's Island
* Mario & Luigi: Superstar Saga
* Bomb Rush Cyberfunk
* Aquaria
* Yu-Gi-Oh! Ultimate Masters: World Championship Tournament 2006
* A Hat in Time
* Old School Runescape
* Kingdom Hearts 1
* Mega Man 2
* Yacht Dice
* Faxanadu
* Saving Princess
* Castlevania: Circle of the Moon
* Inscryption
* Civilization VI
* The Legend of Zelda: The Wind Waker
* Jak and Daxter: The Precursor Legacy
* Super Mario Land 2: 6 Golden Coins
* shapez
* Paint
* Celeste (Open World)
* Choo-Choo Charles
For setup and instructions check out our [tutorials page](https://archipelago.gg/tutorial/).
Downloads can be found at [Releases](https://github.com/ArchipelagoMW/Archipelago/releases), including compiled
@@ -41,36 +89,57 @@ windows binaries.
## History
Archipelago is built upon a strong legacy of brilliant hobbyists. We want to honor that legacy by showing it here. The repositories which Archipelago is built upon, inspired by, or otherwise owes its gratitude to are:
Archipelago is built upon a strong legacy of brilliant hobbyists. We want to honor that legacy by showing it here.
The repositories which Archipelago is built upon, inspired by, or otherwise owes its gratitude to are:
* [Zarby89's](https://github.com/Ijwu/Enemizer/commits?author=Zarby89) and [sosuke3's](https://github.com/Ijwu/Enemizer/commits?author=sosuke3) contributions to Enemizer, which make the vast majority of Enemizer contributions.
and [sosuke3's](https://github.com/Ijwu/Enemizer/commits?author=sosuke3) contributions to Enemizer, which make up the
vast majority of Enemizer contributions.
We recognize that there is a strong community of incredibly smart people that have come before us and helped pave the path. Just because one person's name may be in a repository title does not mean that only one person made that project happen. We can't hope to perfectly cover every single contribution that lead up to Archipelago but we hope to honor them fairly.
We recognize that there is a strong community of incredibly smart people that have come before us and helped pave the
path. Just because one person's name may be in a repository title does not mean that only one person made that project
happen. We can't hope to perfectly cover every single contribution that lead up to Archipelago, but we hope to honor
them fairly.
### Path to the Archipelago
Archipelago was directly forked from bonta0's `multiworld_31` branch of ALttPEntranceRandomizer (this project has a long legacy of its own, please check it out linked above) on January 12, 2020. The repository was then named to _MultiWorld-Utilities_ to better encompass its intended function. As Archipelago matured, then known as "Berserker's MultiWorld" by some, we found it necessary to transform our repository into a root level repository (as opposed to a 'forked repo') and change the name (which came later) to better reflect our project.
Archipelago was directly forked from bonta0's `multiworld_31` branch of ALttPEntranceRandomizer (this project has a
long legacy of its own, please check it out linked above) on January 12, 2020. The repository was then named to
_MultiWorld-Utilities_ to better encompass its intended function. As Archipelago matured, then known as
"Berserker's MultiWorld" by some, we found it necessary to transform our repository into a root level repository
(as opposed to a 'forked repo') and change the name (which came later) to better reflect our project.
## Running Archipelago
For most people all you need to do is head over to the [releases](https://github.com/ArchipelagoMW/Archipelago/releases) page then download and run the appropriate installer. The installers function on Windows only.
If you are running Archipelago from a non-Windows system then the likely scenario is that you are comfortable running source code directly. Please see our doc on [running Archipelago from source](docs/running%20from%20source.md).
For most people, all you need to do is head over to
the [releases page](https://github.com/ArchipelagoMW/Archipelago/releases), then download and run the appropriate
installer, or AppImage for Linux-based systems.
If you are a developer or are running on a platform with no compiled releases available, please see our doc on
[running Archipelago from source](docs/running%20from%20source.md).
## Related Repositories
This project makes use of multiple other projects. We wouldn't be here without these other repositories and the contributions of their developers, past and present.
This project makes use of multiple other projects. We wouldn't be here without these other repositories and the
contributions of their developers, past and present.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.