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.
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.
* 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.
* 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
* 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>
* 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
* 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
* WebHost: Show error instead of 500 for unexpected files in multidata zip
* Add filename to error message
* Apply suggestions from code review
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: black-sliver <59490463+black-sliver@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
* 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>
* 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
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>
* 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
* rework main ap setup guide
* review updates
* add blurb about re-opening rooms and user-content
* more review suggestions
* remove dead links. Windows blurb
* 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>
* 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
* 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"
* 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
* 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 /
* 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`
## 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>
* WebHost: save datatables state
* WebHost: Fix DataTables local storage keys.
Co-authored-by: recklesscoder <57289227+recklesscoder@users.noreply.github.com>
* 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
* 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.
* 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>
* 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>
* 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
* 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
* 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>
* First pass at a contribution guide for the website. Suggestions are welcome.
* Attempt to make the WebHost change guide describe the intent of the style restrictions more accurately.
* Try to improve the explanation of the intention behind the style restrictions.
* WebHost: allow newlines in data-tooltip
* WebHost: Tooltips: strip surrounding whitespace
* WebHost: unify tooltips behaviour
* WebHost: unify labels around tooltips
* WebHost: changing tooltips width to max-width to allow small tooltips to not have empty space.
* Minor modifications to tooltips
- Reduce tooltip target to (?) spans
- Set fixed width of 260px on tooltips
- Add space between : and (?) on player-settings
- Removed cursor:pointer on tooltips
- Fix labels for checkboxes on generate.html
Co-authored-by: Chris Wilson <chris@legendserver.info>