* 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`
Fixed DW Chest Game always sending checks for the 2 chests. The checks sent were the proper "Chest Game" location for the first time the player would open the second chest but all other times, it would send either the last check that was done or default to sending location 0x00 which is SM "Power Bomb (Crateria surface)".
* Setup: update some stuff to 6.14.0 cx-Freeze
* Fix BuildCommand and replace include_files by cutom step
* setup.py: bit more cleanup for extra_libs
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* SC2Client: Added feedback for users who have map files, but no version #.
* SC2Client: Fixed a missing space.
* SC2Client: /download_data now always forces a download.
* ALttP: Fix hint tile hints being potentially useless with item links.
* use the set returned from world.get_player_groups(player)
* Move the group resolving to BaseClasses. Fix silver arrow hints as well.
The issue at hand is fixing impossible seeds generated by a lack of properly checking if the player can come back to its previous region after reaching for a new location, as reported here: https://discord.com/channels/731205301247803413/1050529825212874763/1050529825212874763
The previous attempt at checking for comeback was only done against "Landing Site" and the custom start region which is a partial solution at best. For exemple, generating a single player plando seed with a custom starting location at "red_brinstar_elevator" with a forced red door at "RedTowerElevatorBottomLeft" and 2 Missiles set at "Morphing Ball" and "Energy Tank, Brinstar Ceiling" would generate an impossible seed where the player is expected to go through the green door "LandingSiteRight" with no Supers to go to the only possible next location "Power Bomb (red Brinstar spike room)". This is because the comeback check would pass because it would consider coming back to "Landing Site" enough.
The proposed solution is keeping a record of the last accessed region when collecting items. It would then be used as the source of the comeback check with the destination being the new location. This check had to be moved from can_fill() to can_reach() because the maximum_exploration_state of the AP filler only use can_reach().
Its still not perfect because collect() can be called in batch for many items at a time so the last accessed region will be set as the last collected item and will be used for the next comeback checks.
This was tested a bit with the given exemple above (its now failing generation) and by generating some 8 SM players seed with many door color rando, area rando and boss rando enabled.
* Added cerulean_cave_condition to fill_slot_data
Added `cerulean_cave_condition` to the `fill_slot_data` function, for a poptracker feature being worked on as it was missing
* Added the potential for any traps to be disabled
Adding the ability to disable any kind of trap, for example if you want any status trap except being Poisoned. Will add a contingency to not try and roll a trap if they are all set to disabled.
* Added contingency to if all traps are disabled
Added a contingency to creating items such that it doesn't try to create a trap if all the traps are disabled
* Updated variable name
Edited name of variable to follow PEP 8 variable naming conventions
* oot: repair closed forest + dungeon ER
* oot: finally skip triforce pieces in balancing
* oot: fix mq_dungeons_mode set to mq or count
* oot: force 0.3.7 client
hopefully this makes people update
* oot: temp fix for skip-child-zelda crash
eventually I want to decide on a better fix for this though
* oot: remove skip-child-zelda item inside if tree
* oot: fix classification of some thieves hideout locations in tracker
* oot: fix regional shuffle for hideout keys and ganon boss key
* oot: properly attach hints to dungeon locations
* Fix entrance shuffle flag not being set correctly due to new dungeon shuffle option format
* Webhost: rename all references to forfeit and deprecate it
* needed some renames in multiserver for all the commands to function
* remove forfeit commands
* support forfeit_mode for clients
* rename `forfeit_player` to `release_player`
- Since multiprocessing and exceptions apparently don't interact well, any exceptions in `generate_output` are handled more gracefully now. The event is always set as well, so the process will no longer hang on an exception there.
- The triforce object file was renamed in 7.0. I didn't change the filename in the code, so it would crash on non-Windows systems.
- Some hint distributions just crash, so I'm temporarily removing them. It will take a while to port the relevant functionality and I'd rather not hold up the next version release.
* SC2: Fixed nondeterminism resulting from early unit placement
* SC2: Renamed "world" arguments to "multiworld"
* SC2: Fixed All-In Ground including anti-air in defense score, fixed error in beats_protoss_deathball
* SC2: Fixed No Logic using logic on Beat events
* SC2: Fixed /unfinished command failing when All-In available
## What is this fixing or adding?
- Adds the majority of OoTR 7.0 features:
- Pot shuffle, Freestanding item shuffle, Crate shuffle, Beehive shuffle
- Key rings mode
- Dungeon shortcuts to speed up dungeons
- "Regional" shuffle for dungeon items
- New options for shop pricing in shopsanity
- Expanded Ganon's Boss Key shuffle options
- Pre-planted beans
- Improved Chest Appearance Matches Contents mode
- Blue Fire Arrows
- Bonk self-damage
- Finer control over MQ dungeons and spawn position randomization
- Several bugfixes as a result of the update:
- Items recognized by the server and valid starting items are now in a 1-to-1 correspondence. In particular, starting with keys is now supported.
- Entrance randomization success rate improved. Hopefully it is now at 100%.
Co-authored-by: Zach Parks <zach@alliware.com>
- Pokemon guide was missing a point about changing the Lua option in Bizhawk.
- The same point in the OoT guide was missing a step about restarting Bizhawk after changing the Lua option, so updated that as well.
Adds Trainersanity option (Each non-scripted trainer has a location check, adding 317 locations)
Adds Randomize Pokedex option. It is required to obtain items from Oak's Aides.
Adds option to add all normal shop items to all normal shops.
Adds DeathLink option.
Adds traps.
Improves Type Chart randomization.
Items can be received during battle.
Stores start inventory in ROM. Only requests remote start inventory if patch is from v1.
Fixes logic bugs.
Various other improvements.
Changelog:
Features:
- Completely reworked mission progression system
- Control of which mission types can be active per-gameplay-style
- Control of how many missions are active per-gameplay-style
- Mission order shuffle
- Two new Chaos Emerald Hunt goals
- `Chaos Emerald Hunt` involves finding the seven Chaos Emeralds and beating Green Hill
- `FinalHazard Chaos Emerald Hunt` is the same, but with the FinalHazard fight at the end of Green Hill
- New optional Location Checks
- Keysanity (Chao Containers)
- Whistlesanity (Animal Pipes and hidden whistle spots)
- Beetlesanity (Destroying Gold Beetles)
- Option to require clearing all active Cannon's Core Missions for access to the Biolizard fight in `Biolizard` goal
- Hard Logic option
- More Music Options
- Option to use SADX music
- New `Singularity` music shuffle option
- Option to choose the Narrator theme
- New Traps
- Tiny Trap is now permanent within a level
- Gravity Trap
- Exposition Trap
Quality of Life:
- Significant revamp to Stage Select screen information conveyance
- Icons are displayed for:
- Relevant character's upgrades
- Which location checks are active/checked
- Chaos Emeralds found (if relevant)
- Gate and Cannon's Core emblem costs
- The above stage-specific info can also be viewed when paused in-level
- The current mission is also displayed when paused
- Emblem Symbol on Mission Select subscreen now only displays if a high enough rank has been gotten on that mission to send the location check
- Hints including SA2B locations will now specify which Gate that level is located in
- Save file now stores slot name to help prevent false location checks in the case of one player having multiple SA2B slots in the same seed
- Chao Intermediate and Expert race sets are now swapped, per player feedback
- Intermediate now includes Beginner + Challenge + Hero + Dark
- Expert now includes Beginner + Challenge + Hero + Dark + Jewel
- New mod config option for the color of the Message Queue text
Bug Fixes:
- Fixed bug where game stops properly tracking items after 127 have been received.
- Several logic fixes
- Game now refers to `Knuckles - Shovel Claws` correctly
- Minor AP World code cleanup
* Rogue Legacy: More refactoring and clean up.
* Also marked Blacksmith as Progression as it's used in a rule.
* Remove extra newline.
* Prevent divide by zero type error.
* Scratch last commit, got the math mixed in my head.
* Clarified name of rule regarding percentage of stat upgrades.
* Move early vendors/architect creation into `create_items` logic.
* Rename parameter in `create_region`.
* Rename local var in `create_region`.
* Removed accidental links in Markdown docs.
* Refactor `create_region` signature and caller.
* Remove redundant if-else.
* Revert change to if-else, and moved item_pool to function instead of obj var.
* Rename LegacyLogic to RLLogic.
* Remove LogicMixin for rules.
* core: fix bug that caused world option overrides to fail
* copy paste sliver's better code that works as intended
* Fix whitespace
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Added Juice Ranch and Worm Pod to logic
Extra parenthesis removed
* Delete log.txt
Not used
Transitioned all whitespace characters to Linux /n from Windows /r/n
Updated rules for Rescue Blerol 1 and 2 to avoid impossible seed generation. Fixed member requirements for Vault Bomb. Added Juice Ranch: Fridge for consistency with other checks behind combat. Added party_shuffle rules to vault medallions, removed jail key requirement (not needed)
* Docs/Factorio: Flesh out lacking option descriptions.
* Docs/Factorio: Added instructions on peaceful mode.
* Docs/Factorio: Use subheadings for each "other setting".
* Docs/Factorio: Mention that `tech_tree_information: full` grants hints.
* Docs/Factorio: Instructions to use .yaml checker after editing your .yaml manually.
* WebHost: On uploads, infer player name if missing in file name.
* Remove conditional logic for not including player name in file name.
* quick readability tweak to "fix"
* Refactored `upload_zip_to_db` to clean up redundancies and fix issues
* Rename `patches` to `files`
* fix comment
* WebHost: Remove "Random" as an option and move to separate button in …
* Merge branch 'main' into randomize-button
* Tweaked color and changed text of tooltip.
* Merge branch 'main' into randomize-button
Early Unit: Now respects Excluded Items when selecting a random unit.
Units Always Have Upgrades: Changed removal cascade behavior; now additionally checks to see if an associated item is already locked when attempting to remove, and locks associated items if so. Occasionally caused issues with starter items in the past, frequently caused issues with yaml-defined Locked Items.
* Fix wrapping too early if docstring is within 120 characters and re-indent other lines.
* Remove auto-word wrapping and tweaked all worlds' option docstrings formatting.
Options should wrap around the 120 character mark to prevent template files from being too long horizontally. This also allows manual-indentation to work again.
* Fix missing '#' on empty lines in output from docstring.
* Generated patch includes base patch
* location ID range start match item ID start
* remove unused import
* Change Oak's Aides defaults to be more sync-friendly
* Baseline patching and logic for DKC3
* Client can send, but not yet receive
* Alpha Test Baseline
* Bug Fixes and Starting Lives Option
* Finish BBH, add world hints
* Add music shuffle
* Boomer Costs Text
* Stubbed in Collect behaviour
* Adjust Gyrocopter option
* Add Bonus Coin junk replacement and tracker support
* Delete bad logs
* Undo host.yaml change
* Refactored SNIClient
* Make Swanky Free
* Fix Typo
* Undo SNIClient run_game hack
* Fix Typo
* Remove Bosses from Level Shuffle
* Remove duplicate kivy Data
* Add DKC3 Docs and increment Data version
* Remove dead code
* Fix mislabeled region
* Add Dark Souls 3 to README
* Always force Cog on Rocket Rush Flag
* Fix Single Ski lock and too many DK Coins
* Update Retroarch version number
* Don't send DKC3 through LttP Adjuster
* Comment Location ROM Table
* Change ROM Hash prefix to D3
* Remove redundant constructor
* Add ROM Change Safeguards
* Properly mark WRAM accesses
* Remove outdated region connect
* Fix syntax error
* Fix Game description
* Fix SNES Bank Access
* Add isso_setup for DKC3
* Double Quote strings
* Escape single quotes I guess
* Add two locations to Trade Sequence List
* Remove trace sequence locations from ROM data dict
* Prevent Krematoa Crash, add crash robustness
* Remove print statements
* Don't remove ctx.rom if save file dies
* Consolidate logic for readability
* Add link to tracker on DKC3 Setup doc
* Remove false information from setup guide
* Fix file extension in setup doc
* Bug Fixes
* Add KONGsanity and cheat options
* First Pass Collect behavior
* Fix level unlock data
* Make ! only indicate KONG letters on KONGsanity
* Fix Level Name in locations
* Adjust junk pool logic
* Fix Knautilus Connections
* Fix Wrinkly Softlock
* Fix missed world reference
* CommonClient & SNIClient: Fixes for reconnecting.
- CommonClient: Allow manual reconnect by typing /connect.
- CommonClient: Don't prompt to reconnect if there is nothing to reconnect to.
- CommonClient: Hide the connection loss modal popup when attempting to connect again.
- CommonClient & SNIClient: Cancel auto-reconnect tasks when the user intervenes.
* (Fix imports for linting.)
* OoT: ER improvements
Include dungeon rewards in itempool to allow for ER improvement
Better validate_world function by checking for multi-entrance incompatibility more efficiently
Fix some generation failures by ensuring all entrances placed with logic
Introduce bias to some interior entrance placement to improve generation rate
* OoT: fix overworld ER spoiler information
* OoT: rewrite dungeon item placement algorithm
in particular, no longer assumes that exactly the number of vanilla keys is present, which lets it place more or fewer items.
* OoT: auto-send more locations
Now should autosend cows, DMT/DMC great fairies, medigoron, and bombchu salesman
This should be every check autosending. these ones are super weird for some reason and didn't get fixed with the others
* OoT: add items forced local by settings to AP's local_items
* OoT: fast-fill shop junk items
* OoT: ensure that Kokiri Shop is always reachable immediately in closed forest
hence Deku Shield can be bought to leave the forest
* OoT: randomize internal connect name
Connect name is now a random 16-character string.
This should prevent any issues with connecting to a room with the wrong ROM with probability almost 1.
* OoT: introduce TrackRandomRange for trials hint and mq dungeon maps
* OoT: enable proper itemlinking of songs and dungeon items, with restricted placements according to player settings
* OoT: barren hint oversight fix
* OoT: allow NL + ER to roll properly
* OoT: 3.8 compatibility
set and list builtins don't have proper typing support until 3.9, apparently
* OoT: remove Gerudo Membership Card location from the pool if fortress open and card not randomized
another long-standing bug squished
* OoT: exclude locations in the itemlink song fill if they aren't also priority
* OoT: prevent data bleed when client isn't closed between different game connections
I don't understand why people keep doing this
* OoT: linter appeasement
it was a real error though
* fixing merge conflicts is hard
* oot merge update #2
* OoT: removed accidentally duplicated code
* add min and max comments for named special_range options
* comment all special range options and dictate the min and max in comment block
* make it cleaner
* make it cleanerer
* make it cleanererer
* Reformat template for more consistent comments.
* Fixed missing note on some special settings.
* Small tweak to template.
* Update playerSettings.yaml to match auto-generated template with all ALTTP options.
* Fix edge case with `special_range_cutoff` and revert playerSettings.yaml.
Co-authored-by: Zach Parks <zach@alliware.com>
* 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
* added missing completion_condition when TowerCrystals is lower than GanonCrystals
added Rewards and Medallions infos to spoiler
* Update worlds/smz3/__init__.py
Yes, indeed. Thank you!
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: Zach Parks <zach@alliware.com>
Currently there can be locations that are marked as excluded,
but don't have rules to enforce it, while fill has special handling
for excluded locations already.
This change removes special rules, and adds a generic rule instead.
* [Pokemon] Logic fixes
* [Pokemon] Fix seed name length
* [Pokemon] Location name changes
* [Pokemon] Hidden Item Nurse Bed logic fix
* Badges Needed description update
* Ensure player name does not exceed 16 bytes
* Player name check fix
* Remove unique items in start_inventory from item pool
* Vending Machine Drinks will not be created as filler
* Skip trainer text
* Badges needed for viridian gym text
* Add slot data for trackers
* free fly map in slot data and old_man = vanilla allows more free fly maps
* Re-add mistakenly removed slot data item
* Add tracker link to setup doc
* Doc fix
* Fix base patch
* Change pre_fill to generate_basic so items are pre-filled before item links
* Rename some hidden locations
* missing file from commit and revert one errant location name change
* CommonClient: Focus text field when requesting input.
* CommonClient: Store and prefill last server address.
* CommonClient: Focus and select portion of server address upon start.
* CommonClient: Don't allow editing of address while connected.
* CommonClient: Don't make pressing Enter in the address bar disconnect you.
* CommonClient: Use TextInput.text_validate_unfocus over jank workaround.
* CommonClient: Fixed hang when closing after failed handshake.
* CommonClient: Made scrollbar wider and interactable.
* SM: fix using item links together with remote items
* SM: write 0 index for excess player ids
* some style and minor fixes (strotlog/Archipelago#1)
* more typing in SM patching
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* rename references to `Multiworld` in core to `multiworld` instead of `world`
* fix smz3
* fix oot
* fix low hanging fruit
* revert mysteriously broken spacing in world api.md
* fix more randomly broken spacing
* hate
* that better be all of it
* begrudgingly move over smw
* ._.
* missed some worlds
* this is getting tedious now
* Missed some self.world definitions
Co-authored-by: espeon65536 <espeon65536@gmail.com>
Co-authored-by: Zach Parks <zach@alliware.com>
* Minor cleanup and renaming of some files/functions.
* Rename `LegacyWorld` and `LegacyWeb` to RLWorld and RLWeb.
* Undo accidental change to comment.
* Undo accidental change to comment.
* Restructure Items.py format and combine all tables into one.
* Restructure Locations.py format and combine all tables into one.
* Split boss event items into separate boss entries.
* Remove definitions folder.
* Reformatted __init__.py for Rogue Legacy.
* Allow fairy chests to be disabled.
* Add working prefill logic for early vendors.
* Re-introduce Early Architect setting.
* Revamped rules and regions and can now generate games.
* Fix normal vendors breaking everything.
* Fix early vendor logic and add fairy chest logic to require Dragons or Enchantress + runes.
* Fix issue with duplicate items being created.
* Move event placement into __init__.py and fix duplicate Vendors.
* Tweak weights and spacing.
* Update documentation and include bug report link.
* Fix relative link for template file.
* Increase amount of chest locations in `location_table`.
* Correct a refactor rename gone wrong.
* Remove unused reference in imports.
* Tweak mistake in boss name in place_events.
* English is hard.
* Tweak some lines in __init__.py to use `.settings()` method.
* Add unique id tests for Rogue Legacy.
IDs are mixed around, so let's try to avoid accidentally using the same identifier twice.
* Fix typo in doc.
* Simplify `fill_slot_data`.
* Change prefix on `_place_events` to maintain convention.
* Remove items that are **not** progression from rules.
* fix case sensitivity in server commands
* improve ambiguous match breakout
* worried about accidentally swapping team and slot
* Remove now unused import
* [Minecraft] Two by two logical requirement fix
* Two by two update
* Two by Two logical fix [Description in order]
* Two by Two fix [Bucket only= False]
Along with the others isolated items checks
* Add separate pool option for entrance shuffle and swap MIPS costs if MIPS1Cost is greater
* Changes based on N00by's suggestions
* split into secret_entrance_ids and course_entrance_ids
* Factorio: Added ability to chat from within the game.
This also allows using commands such as !hint from within the game.
* Factorio: Only prepend player names to chat in multiplayer.
* Factorio: Mirror chat sent from the FactorioClient UI to the Factorio server.
* Factorio: Remove local coordinates from outgoing chat.
* Factorio: Added setting to disable bridging chat out.
Added client command to toggle this setting at run-time.
* Factorio: Added in-game command to toggle chat bridging setting at run-time.
* .
* Factorio: Document toggle for chat bridging feature.
* (Removed superfluous type annotations.)
* (Removed hard to read regex.)
* Docs/Factorio: Fix display of multiline code snippets.
* Option RangeWithSpecialMax
* amendment to typing in web options
* compare string with number
* lots of work on zillion
* fix zillion fill logic
* fix a few more issues in zillion fill logic
* can make zillion patch and use it
* put multi items in zillion rom
* work on ZillionClient
* logging and auth in client
* work on sending and receiving items
* implement item_handling flag
* fix locations ids to NuktiServer package
* use rewrite of zri
* cache logic rule data for performance
* use new id maps
* fix some problems with the big recent merge
* ZillionClient: use new context manager for Memory class
* fix ItemClassification for Zillion items
and some debug statements for asserts,
documentation on running scripts for manual testing
type correction in CommonContext
* fix some issues in client, start on docs, put rescue and item ram addresses in slot data
* use new location name system
fix item locations getting out of sync in progression balancing
* zillion client can read slot name from game
* zillion: new item names
* remove extra unneeded import
* newer options (room gen and starting cards)
* update comment in zillion patch
* zillion non static regions
* change some logging, update some comments
* allow ZillionClient to exit in certain situations
* todo note to fix options doc strings
* don't force auto forfeit
* rework validation of floppy requirement and item counts
and fix race condition in generate_output
* reorganize Zillion component structure
with System class
* documentation updates for Zillion
* attempt inno_setup.iss
* remove todo comment for something done
* update comment
* rework item count zillion options
and some small cleanups
* fix location check count
* data package version 1
* Zillion can pass unit tests without rom
* fix freeze if closing ZillionClient while it's waiting for server login
* specify commit hash for zilliandomizer package
* some changes to options validation
* Zillion doors saved on multiworld server
* add missing function in inno_setup
and name of vanilla continues in options
* rework zillion sync task and context
* Apply documentation suggestions from SoldierofOrder
Co-authored-by: SoldierofOrder <107806872+SoldierofOrder@users.noreply.github.com>
* update zillion package
* workaround for asyncio udp bug
There is a bug in Python in Windows
https://github.com/python/cpython/issues/91227
that makes it so if I look for RetroArch before it's ready, it breaks the asyncio udp transport system.
As a workaround, we don't look for RetroArch until the user asks for it with /sms
* a few of the smaller suggestions from review
* logic only looks at my locations
instead of all the multiworld locations
* some adjustments from pull request discussion
and some unit tests
* patch webhost changes from pull request discussion
* zillion logic tests
* better vblr test
* test interaction of character rescue items with logic
* move unit tests to new worlds folder
* comment improvements
* fix minor logic issue
and add memory read timeout
* capitalization in option display names
Opa-Opa is a proper noun
* client toggle side panel with /map
* displays map
* fix map transparency
* fix broken launcher
* better way to specify grid container
* start kivy typing
* have a map that updates with item checks
but it breaks other parts of the UI
* fix layout bug
* aspect ratio of image
and some type checking details
* Fix loading of map for compiled builds
Co-authored-by: SoldierofOrder <107806872+SoldierofOrder@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <doughoskisson@novuslabs.com>
Co-authored-by: CaitSith2 <d_good@caitsith2.com>
* Early Items option
* Early Items description update
* Change Early Items to dict
* Rewrite early items as extra fill steps
* Move if statement up
* Document early_items
* Move early_items handling before fill_hook
* Apply suggestions from code review
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Subnautica pre-fill moved to early_items
* Subnautica early items fix
* Remove unit test bug workaround
* beauxq's pr
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Switched mission item group to a list comprehension to fix missile shuffle errors
* Logic for reducing mission and item counts
* SC2: Piercing the Shroud/Maw of the Void requirements now DRY
* SC2: Logic for All-In, may need further refinement
* SC2: Additional mission orders and starting locations
* SC2: New Mission Order options for shorter campaigns and smaller item pools
* Using location table for hardcoded starter unit
* SC2: Options to curate random item pool and control early unit placement
* SC2: Proper All-In logic
* SC2: Grid, Mini Grid and Blitz mission orders
* SC2: Required Tactics and Unit Upgrade options, better connected item handling
* SC2: Client compatibility with Grid settings
* SC2: Mission rando now uses world random
* SC2: Alternate final missions, new logic, fixes
* SC2: Handling alternate final missions, identifying final mission on client
* SC2: Minor changes to handle edge-case generation failures
* SC2: Removed invalid type hints for Python 3.8
* Revert "SC2: Removed invalid type hints for Python 3.8"
This reverts commit 7851b9f7a3.
* SC2: Removed invalid type hints for Python 3.8
* SC2: Removed invalid type hints for Python 3.8
* SC2: Removed invalid type hints for Python 3.8
* SC2: Removed invalid type hints for Python 3.8
* SC2: Changed location loop to enumerate
* SC2: Passing category names through slot data
* SC2: Cleaned up unnecessary _create_items method
* SC2: Removed vestigial extra_locations field from MissionInfo
* SC2: Client backwards compatibility
* SC2: Fixed item generation issue where item is present in both locked and unlocked inventories
* SC2: Removed Missile Turret from defense rating on maps without air
* SC2: No logic locations point to same access rule
Co-authored-by: michaelasantiago <michael.alec.santiago@gmail.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* First Pass removal of game-specific code
* SMW, DKC3, and SM hooked into AutoClient
* All SNES autoclients functional
* Fix ALttP Deathlink
* Don't default to being ALttP, and properly error check ctx.game
* Adjust variable naming
* In response to:
> we should probably document usage somewhere. I'm open to suggestions of where this should be documented.
I think the most valuable documentation for APIs is docstrings and full typing.
about websockets change in imports - from websockets documentation:
> For convenience, many public APIs can be imported from the websockets package. However, this feature is incompatible with static code analysis. It breaks autocompletion in an IDE or type checking with mypy. If you’re using such tools, use the real import paths.
* todo note for python 3.11
typing.NotRequired
* missed staging in previous commit
* added missing death Game States for DeathLink
Co-authored-by: beauxq <beauxq@users.noreply.github.com>
Co-authored-by: lordlou <87331798+lordlou@users.noreply.github.com>
* 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
* removed now unecessary sorting of Morph balls at end of item pool
Its messing with priority locations feature.
* tests: fix random failures on Zillion tests
Normally there's a low probably that the game doesn't require a power-up that it usually requires.
This makes sure it always has that requirement for tests.
* better type narrowing
* SoE: rebalancing and cleanup
* ModuleUpdate: make url detection more generic
* SoE: change item rules to depend on target player difficulty
* SoE: Update to pyevermizer 0.41.0
* adds footknight
* adds location difficulty
* SoE: minor optimization in item rule
if .. in is faster with sets
* SoE: drop support of patch format v3
* SoE: fix some typing and warnings
* SoE: cleanup imports
* Option RangeWithSpecialMax
* amendment to typing in web options
* compare string with number
* lots of work on zillion
* fix zillion fill logic
* fix a few more issues in zillion fill logic
* can make zillion patch and use it
* put multi items in zillion rom
* work on ZillionClient
* logging and auth in client
* work on sending and receiving items
* implement item_handling flag
* fix locations ids to NuktiServer package
* use rewrite of zri
* cache logic rule data for performance
* use new id maps
* fix some problems with the big recent merge
* ZillionClient: use new context manager for Memory class
* fix ItemClassification for Zillion items
and some debug statements for asserts,
documentation on running scripts for manual testing
type correction in CommonContext
* fix some issues in client, start on docs, put rescue and item ram addresses in slot data
* use new location name system
fix item locations getting out of sync in progression balancing
* zillion client can read slot name from game
* zillion: new item names
* remove extra unneeded import
* newer options (room gen and starting cards)
* update comment in zillion patch
* zillion non static regions
* change some logging, update some comments
* allow ZillionClient to exit in certain situations
* todo note to fix options doc strings
* don't force auto forfeit
* rework validation of floppy requirement and item counts
and fix race condition in generate_output
* reorganize Zillion component structure
with System class
* documentation updates for Zillion
* attempt inno_setup.iss
* remove todo comment for something done
* update comment
* rework item count zillion options
and some small cleanups
* fix location check count
* data package version 1
* Zillion can pass unit tests without rom
* fix freeze if closing ZillionClient while it's waiting for server login
* specify commit hash for zilliandomizer package
* some changes to options validation
* Zillion doors saved on multiworld server
* add missing function in inno_setup
and name of vanilla continues in options
* rework zillion sync task and context
* Apply documentation suggestions from SoldierofOrder
Co-authored-by: SoldierofOrder <107806872+SoldierofOrder@users.noreply.github.com>
* update zillion package
* workaround for asyncio udp bug
There is a bug in Python in Windows
https://github.com/python/cpython/issues/91227
that makes it so if I look for RetroArch before it's ready, it breaks the asyncio udp transport system.
As a workaround, we don't look for RetroArch until the user asks for it with /sms
* a few of the smaller suggestions from review
* logic only looks at my locations
instead of all the multiworld locations
* some adjustments from pull request discussion
and some unit tests
* patch webhost changes from pull request discussion
* zillion logic tests
* better vblr test
* test interaction of character rescue items with logic
* move unit tests to new worlds folder
* comment improvements
* fix minor logic issue
and add memory read timeout
* capitalization in option display names
Opa-Opa is a proper noun
* redirect zz stdout to debug
* fix option validation bug making unbeatable seeds
* remove line that does nothing
* attach logic cache to world
Co-authored-by: SoldierofOrder <107806872+SoldierofOrder@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <doughoskisson@novuslabs.com>
* Softlock fix: 'Swamp Maze Controls' item also locks maze control other side now
* Increase default & max amount of Puzzle Skips (in response to client side changes to how they work)
* Logically require shortbox lasers to start the elevator
* world test base class
* game not instance property
* I would have guessed that this only collected 1.
* game property
* move SoE tests into worlds
* don't force auto world setup
* OoT: ER improvements
Include dungeon rewards in itempool to allow for ER improvement
Better validate_world function by checking for multi-entrance incompatibility more efficiently
Fix some generation failures by ensuring all entrances placed with logic
Introduce bias to some interior entrance placement to improve generation rate
* OoT: fix overworld ER spoiler information
* OoT: rewrite dungeon item placement algorithm
in particular, no longer assumes that exactly the number of vanilla keys is present, which lets it place more or fewer items.
* WebHost: Modernized anchor code
* WebHost: Fixed scrolling to anchors
* WebHost: Fixed scrolling to anchors when fonts are being loaded
* WebHost: Anchor PR changes requested by LegendaryLinux
Overcooked! 2 is a couch co-op arcade game with a very high skill ceiling. It has a small but occult following, and the community craves a reason to keep coming back besides just grinding high scores. as such, this PR represents 3 major milestones in one:
* The launch of OC2 Modding, a modding framework which is the first public mod for the game beyond simple RAM trainers
* The launch of OC2 Randomizer
* The integration of OC2 Randomizer in Archipelago
* Prevent legendaries from being shuffled into restless soul encounter
* Prevent Poke Tower 6F wild mons from being same as restless soul
* fix non-deterministic generation
* fix some blunders i made when implementing this
* move generic functions to core class
* move lttp specific stuff out and split up from_text a bit for more modularity
* slightly optimize from_text call order
* don't make changes on github apparently. reading hard
* Metaclass Magic
* do a check against the base class
* copy paste strikes again
* use option default instead of hardcoded "none". check locations and bosses aren't reused.
* throw dupe location error for lttp
* generic singularity support with a bool
* forgot to enable it for lttp
* better error handling
* PlandoBosses: fix inheritance of singularity
* Tests: PlandoBosses
* fix case insensitive tests
* Tests: cleanup PlandoBosses tests
* f in the chat
* oop
* split location into a different variable
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* pass the list of options as `option_list`
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
- Added bolded note that one must use a new file with each new seed
- Added troubleshooting section for when one didn't use a new file
- Worded compilation step 8 more explicitly
- Added link to compilation options list
- Added link to TextClient for using commands
* allow string defaults in yaml templates
* have default_converter handle strings
* handle all default values in the yaml
* allow for random range options
* yaml dump dicts
* strip the whities
* rip out the converter
* accidentally stripped the dicts
* goodbye readability
* hostRoom.css Changes
Makes the console be a scrollable object, for easier use with commands
* Update hostRoom.css
* Requested Change
Requested Change
* move output file name logic into core
I see the same logic with small variations in each different world implementation.
It seems to me, it would be better in the core to keep it consistent.
* missed a few
* remove review comment
* + smw
* double quote strings
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* revert change to DS3 output file name
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* ModuleUpdate: skip non-worlds
* ModuleUpdate: don't skip _* folders
- _* folders may be used for libraries
- this means to properly disable a world, it has to be renamed with a preceding `.`
- Added sections for console commands and known issues.
- Updated "Resuming" section to reflect current functionality.
- Removed implication that one might have to create the QMods folder. (If it's missing, then you've already messed up step 1.)
- Renamed "Connect Menu" to "connect form" to be less confusing. Generally fixed word capitalization to conform to standard English. Minor wording changes.
* some typing and docs in various parts of the interface
* fix whitespace in docstring
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* suggested changes from discussion
* remove redundant import
* adjust type for json messages
* for options module detection:
module.lower().endswith("options")
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Doc: logic mixin, drop underscore, clarify
conventionally, we added a leading underscore to logic mixins' function
names. This is noisy in the warning section of IDEs. Leading underscores
should only be used for private/protected functions.
In addition, the use of self.world and/or requirement to (no) pass in stuff
was not made clear earlier.
* SoE: fix _ warnings for logic mixin
2022-09-25 18:00:22 +02:00
2416 changed files with 416014 additions and 77807 deletions
factorio_server_logger.info(f"Sending {item_name} to Nauvis from {player_name}.{(' (Item name might not match the seed.)'ifFactorio.data_versionelse'')}")
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)}.")
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
@@ -25,9 +27,51 @@ Currently, the following games are supported:
* 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
* Pokémon Red and Blue
* Hylics 2
* 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
* Clique
* 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
* Zork Grand Inquisitor
* 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
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
@@ -35,36 +79,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.