* FF1 Client fixes.
* Strip leading/trailing spaces from rom-stored player name.
* FF1R encodes the name as utf-8, as it happens.
* UTF-8 is four bytes per character, so we need 64 bytes for the name, not 16.
* init
* Revert "init"
This reverts commit bba6b7a306b512dc77bc04acb166f83134827f98.
* put it back but clean
* pass args
* windows stuff
* delete old exe
this seems like it?
* use marin icon in launcher
* use LauncherComponents.launch
Without `gc.freeze()` and `gc.unfreeze()` afterward, the `gc.collect()`
call within each benchmark often takes much longer than all 100_000
iterations of the location access rule, making it difficult to benchmark
all but the slowest of access rules.
This change enables using `gc.freeze()` by default.
* core: Add host.yaml setting to make !countdown configurable
* Store /option changes to countdown_mode in save file
* Wording changes in host.yaml
* Use .get
* Fix validation for /option command
* Improve user friendliness of generation failure webpage.
* Add details to other render for seedError.html.
* Refactor css to avoid !important tags.
* Update WebHostLib/static/styles/themes/ocean-island.css
Co-authored-by: qwint <qwint.42@gmail.com>
* Update WebHostLib/generate.py
Co-authored-by: qwint <qwint.42@gmail.com>
* use f words
* small refactor
* Update WebHostLib/generate.py
Co-authored-by: qwint <qwint.42@gmail.com>
* Fix whitespace.
* Update one new use of seedError template for pickling errors.
---------
Co-authored-by: qwint <qwint.42@gmail.com>
There is a limit to the number of times an item can be swapped to
prevent swapping going on potentially forever. Swapping an item with a
copy of itself is assumed to be a pointless swap, and was wasting
possible swaps in cases where there were multiple copies of an item
being placed.
This swapping behaviour was noticed from debugging solo LADX generations
that was wasting swaps by swapping copies of the same item.
This patch adds a check that if the placed_item and item_to_place are
equal, then the location is skipped and no attempt to swap is made.
If worlds do intend to have seemingly equal items to actually have
different logical behaviour, those worlds should override __eq__ on
their Item subclasses so that the item instances are not considered
equal.
Generally, fill_restrictive should only be used with progression items,
so it is assumed that swapping won't have to deal with multiple copies
of an item where some copies are progression and some are not. This is
relevant because Item.__eq__ only compares .name and .player.
* SNIClient: new SnesReader interface
* fix Python 3.8 compatibility
`bisect_right`
* move to worlds
because we don't have good separation importable modules and entry points
* `read` gives object that contains data
* remove python 3.10 implementation and update typing
* remove obsolete comment
* freeze _MemRead and assert type of get parameter
* some optimization in `SnesData.get`
* pass context to `read` so that we can have a static instance of `SnesReader`
* add docstring to `SnesReader`
* remove unused import
* break big reads into chunks
* some minor improvements
- `dataclass` instead of `NamedTuple` for `Read`
- comprehension in `SnesData.__init__`
- `slots` for dataclasses
* Change descriptions
* Fix sni client?
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>