diff --git a/.github/pyright-config.json b/.github/pyright-config.json index de7758a715..b6561afa46 100644 --- a/.github/pyright-config.json +++ b/.github/pyright-config.json @@ -2,6 +2,7 @@ "include": [ "../BizHawkClient.py", "../Patch.py", + "../test/param.py", "../test/general/test_groups.py", "../test/general/test_helpers.py", "../test/general/test_memory.py", diff --git a/.github/workflows/ctest.yml b/.github/workflows/ctest.yml index a0ae2cb252..610f6d7477 100644 --- a/.github/workflows/ctest.yml +++ b/.github/workflows/ctest.yml @@ -36,9 +36,9 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: ilammy/msvc-dev-cmd@v1 + - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 if: startsWith(matrix.os,'windows') - - uses: Bacondish2023/setup-googletest@v1 + - uses: Bacondish2023/setup-googletest@49065d1f7a6d21f6134864dd65980fe5dbe06c73 with: build-type: 'Release' - name: Build tests diff --git a/.gitignore b/.gitignore index 5da42dc1e0..f50fc17e23 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ *.apmc *.apz5 *.aptloz +*.aptww *.apemerald *.pyc *.pyd diff --git a/AdventureClient.py b/AdventureClient.py index 24c6a4c4fc..91567fc0a0 100644 --- a/AdventureClient.py +++ b/AdventureClient.py @@ -511,7 +511,7 @@ if __name__ == '__main__': import colorama - colorama.init() + colorama.just_fix_windows_console() asyncio.run(main()) colorama.deinit() diff --git a/CommonClient.py b/CommonClient.py index 33792f0ed2..ae411838d8 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -1128,7 +1128,7 @@ def run_as_textclient(*args): args = handle_url_arg(args, parser=parser) # use colorama to display colored text highlighting on windows - colorama.init() + colorama.just_fix_windows_console() asyncio.run(main(args)) colorama.deinit() diff --git a/FF1Client.py b/FF1Client.py index b7c58e2061..748a95b72c 100644 --- a/FF1Client.py +++ b/FF1Client.py @@ -261,7 +261,7 @@ if __name__ == '__main__': parser = get_base_parser() args = parser.parse_args() - colorama.init() + colorama.just_fix_windows_console() asyncio.run(main(args)) colorama.deinit() diff --git a/LinksAwakeningClient.py b/LinksAwakeningClient.py index ff932e7c76..2f2c94f68f 100644 --- a/LinksAwakeningClient.py +++ b/LinksAwakeningClient.py @@ -506,7 +506,7 @@ class LinksAwakeningContext(CommonContext): la_task = None client = None # TODO: does this need to re-read on reset? - found_checks = [] + found_checks = set() last_resend = time.time() magpie_enabled = False @@ -558,10 +558,6 @@ class LinksAwakeningContext(CommonContext): self.ui = LADXManager(self) self.ui_task = asyncio.create_task(self.ui.async_run(), name="UI") - - async def send_checks(self): - message = [{"cmd": "LocationChecks", "locations": self.found_checks}] - await self.send_msgs(message) async def send_new_entrances(self, entrances: typing.Dict[str, str]): # Store the entrances we find on the server for future sessions @@ -613,8 +609,8 @@ class LinksAwakeningContext(CommonContext): self.client.pending_deathlink = True def new_checks(self, item_ids, ladxr_ids): - self.found_checks += item_ids - create_task_log_exception(self.send_checks()) + self.found_checks.update(item_ids) + create_task_log_exception(self.check_locations(self.found_checks)) if self.magpie_enabled: create_task_log_exception(self.magpie.send_new_checks(ladxr_ids)) @@ -721,7 +717,7 @@ class LinksAwakeningContext(CommonContext): if self.last_resend + 5.0 < now: self.last_resend = now - await self.send_checks() + await self.check_locations(self.found_checks) if self.magpie_enabled: try: self.magpie.set_checks(self.client.tracker.all_checks) @@ -803,6 +799,6 @@ async def main(): await ctx.shutdown() if __name__ == '__main__': - colorama.init() + colorama.just_fix_windows_console() asyncio.run(main()) colorama.deinit() diff --git a/MMBN3Client.py b/MMBN3Client.py index 140a98745c..4945d49221 100644 --- a/MMBN3Client.py +++ b/MMBN3Client.py @@ -370,7 +370,7 @@ if __name__ == "__main__": import colorama - colorama.init() + colorama.just_fix_windows_console() asyncio.run(main()) colorama.deinit() diff --git a/MultiServer.py b/MultiServer.py index a310808b3a..f9ed34e2f7 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -47,7 +47,7 @@ from NetUtils import Endpoint, ClientStatus, NetworkItem, decode, encode, Networ from BaseClasses import ItemClassification min_client_version = Version(0, 1, 6) -colorama.init() +colorama.just_fix_windows_console() def remove_from_list(container, value): diff --git a/OoTClient.py b/OoTClient.py index 1154904173..6a87b9e722 100644 --- a/OoTClient.py +++ b/OoTClient.py @@ -346,7 +346,7 @@ if __name__ == '__main__': import colorama - colorama.init() + colorama.just_fix_windows_console() asyncio.run(main()) colorama.deinit() diff --git a/Options.py b/Options.py index 49e82069ee..95b9b468c6 100644 --- a/Options.py +++ b/Options.py @@ -1579,6 +1579,7 @@ def dump_player_options(multiworld: MultiWorld) -> None: player_output = { "Game": multiworld.game[player], "Name": multiworld.get_player_name(player), + "ID": player, } output.append(player_output) for option_key, option in world.options_dataclass.type_hints.items(): @@ -1591,7 +1592,7 @@ def dump_player_options(multiworld: MultiWorld) -> None: game_option_names.append(display_name) with open(output_path(f"generate_{multiworld.seed_name}.csv"), mode="w", newline="") as file: - fields = ["Game", "Name", *all_option_names] + fields = ["ID", "Game", "Name", *all_option_names] writer = DictWriter(file, fields) writer.writeheader() writer.writerows(output) diff --git a/README.md b/README.md index 19ab8aba01..7957eb120c 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ Currently, the following games are supported: * Castlevania: Circle of the Moon * Inscryption * Civilization VI +* The Legend of Zelda: The Wind Waker * Jak and Daxter: The Precursor Legacy For setup and instructions check out our [tutorials page](https://archipelago.gg/tutorial/). diff --git a/SNIClient.py b/SNIClient.py index 9140c73c14..1156bf6040 100644 --- a/SNIClient.py +++ b/SNIClient.py @@ -735,6 +735,6 @@ async def main() -> None: if __name__ == '__main__': - colorama.init() + colorama.just_fix_windows_console() asyncio.run(main()) colorama.deinit() diff --git a/UndertaleClient.py b/UndertaleClient.py index dfacee148a..1c522fac92 100644 --- a/UndertaleClient.py +++ b/UndertaleClient.py @@ -500,7 +500,7 @@ def main(): import colorama - colorama.init() + colorama.just_fix_windows_console() asyncio.run(_main()) colorama.deinit() diff --git a/WargrooveClient.py b/WargrooveClient.py index f9971f7a6c..f900e05e3f 100644 --- a/WargrooveClient.py +++ b/WargrooveClient.py @@ -446,6 +446,6 @@ if __name__ == '__main__': parser = get_base_parser(description="Wargroove Client, for text interfacing.") args, rest = parser.parse_known_args() - colorama.init() + colorama.just_fix_windows_console() asyncio.run(main(args)) colorama.deinit() diff --git a/WebHostLib/requirements.txt b/WebHostLib/requirements.txt index b7b14dea1e..190409d9a2 100644 --- a/WebHostLib/requirements.txt +++ b/WebHostLib/requirements.txt @@ -1,11 +1,11 @@ -flask>=3.0.3 -werkzeug>=3.0.6 +flask>=3.1.0 +werkzeug>=3.1.3 pony>=0.7.19 -waitress>=3.0.0 +waitress>=3.0.2 Flask-Caching>=2.3.0 -Flask-Compress>=1.15 -Flask-Limiter>=3.8.0 -bokeh>=3.5.2 -markupsafe>=2.1.5 +Flask-Compress>=1.17 +Flask-Limiter>=3.12 +bokeh>=3.6.3 +markupsafe>=3.0.2 Markdown>=3.7 mdx-breakless-lists>=1.0.1 diff --git a/WebHostLib/templates/playerOptions/macros.html b/WebHostLib/templates/playerOptions/macros.html index 64f0f140de..972f03175d 100644 --- a/WebHostLib/templates/playerOptions/macros.html +++ b/WebHostLib/templates/playerOptions/macros.html @@ -213,7 +213,7 @@ {% endmacro %} {% macro RandomizeButton(option_name, option) %} -