* Fix webhost argparse with extra args
* accidentally added line
* WebHost: fix some typing
B64 url conversion is used in test/hosting,
so it felt appropriate to include this here.
* Test: Hosting: also test autogen
* Test: Hosting: simplify stop_* and leave a note about Windows compat
* Test: Hosting: fix formatting error
* Test: Hosting: add limitted Windows support
There are actually some differences with MP on Windows
that make it impossible to run this in CI.
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
From Discord:
Well, flask-compress updated and now our 3.11 CI is failing
Why? They switched to a lib called backports.zstd
And 3.11 pkg_resources can't handle that.
pip finds it. But in our ModuleUpdate.py, we first pkg_resources.require packages, and this fails. I can't reproduce this locally yet, but in CI, it seems like even though backports.zstd is installed, it still fails on it and prompts installing it over and over in every unit test
Now what do we do :KEKW:
Black Sliver suggested pinning flask-compress for 3.11
But I would just like to point out that this means we can't unpin it until we drop 3.11
the real thing is we probably need to move away from pkg_resources? lol
since it's been deprecated literally since the oldest version we support
* WebHost: reset Generator proc title on error
* WebHost: fix shutting down autogen
This is still not perfect but solves some of the issues.
* WebHost: properly propagate JOB_TIME
* WebHost: handle autogen shutdown
* APWorld docs: Make a distinction between APWorld and .apworld
* Update apworld specification.md
* Update apworld specification.md
* Be more anal about the launcher component
* Update apworld specification.md
* Update apworld specification.md
* 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.