From 826ac2ed199ec6be2b57082a8a74e8f5f7d63440 Mon Sep 17 00:00:00 2001 From: Berserker Date: Sat, 14 Mar 2026 22:22:04 +0100 Subject: [PATCH] Core: Other Games and Tools page --- docs/CODEOWNERS | 2 - setup.py | 1 - test/general/test_implemented.py | 4 +- test/general/test_options.py | 2 +- worlds/apsudoku/__init__.py | 34 ---------------- worlds/apsudoku/docs/en_Sudoku.md | 15 ------- worlds/apsudoku/docs/setup_en.md | 55 ------------------------- worlds/generic/__init__.py | 5 ++- worlds/generic/docs/other_en.md | 68 +++++++++++++++++++++++++++++++ 9 files changed, 75 insertions(+), 111 deletions(-) delete mode 100644 worlds/apsudoku/__init__.py delete mode 100644 worlds/apsudoku/docs/en_Sudoku.md delete mode 100644 worlds/apsudoku/docs/setup_en.md create mode 100644 worlds/generic/docs/other_en.md diff --git a/docs/CODEOWNERS b/docs/CODEOWNERS index 46afd30456..30b61f5c85 100644 --- a/docs/CODEOWNERS +++ b/docs/CODEOWNERS @@ -19,8 +19,6 @@ # NewSoupVi is acting maintainer, but world belongs to core with the exception of the music /worlds/apquest/ @NewSoupVi -# Sudoku (APSudoku) -/worlds/apsudoku/ @EmilyV99 # Aquaria /worlds/aquaria/ @tioui diff --git a/setup.py b/setup.py index 949b1e3e30..ebef3880fc 100644 --- a/setup.py +++ b/setup.py @@ -71,7 +71,6 @@ non_apworlds: set[str] = { "Ocarina of Time", "Overcooked! 2", "Raft", - "Sudoku", "Super Mario 64", "VVVVVV", "Wargroove", diff --git a/test/general/test_implemented.py b/test/general/test_implemented.py index add6e5321e..0bc7b62d5b 100644 --- a/test/general/test_implemented.py +++ b/test/general/test_implemented.py @@ -11,7 +11,7 @@ class TestImplemented(unittest.TestCase): def test_completion_condition(self): """Ensure a completion condition is set that has requirements.""" for game_name, world_type in AutoWorldRegister.world_types.items(): - if not world_type.hidden and game_name not in {"Sudoku"}: + if not world_type.hidden: with self.subTest(game_name): multiworld = setup_solo_multiworld(world_type) self.assertFalse(multiworld.completion_condition[1](multiworld.state)) @@ -59,7 +59,7 @@ class TestImplemented(unittest.TestCase): def test_prefill_items(self): """Test that every world can reach every location from allstate before pre_fill.""" for gamename, world_type in AutoWorldRegister.world_types.items(): - if gamename not in ("Archipelago", "Sudoku", "Final Fantasy", "Test Game"): + if gamename not in ("Archipelago", "Final Fantasy", "Test Game"): with self.subTest(gamename): multiworld = setup_solo_multiworld(world_type, ("generate_early", "create_regions", "create_items", "set_rules", "connect_entrances", "generate_basic")) diff --git a/test/general/test_options.py b/test/general/test_options.py index 6b08c8e9b0..5d69b6820b 100644 --- a/test/general/test_options.py +++ b/test/general/test_options.py @@ -109,7 +109,7 @@ class TestOptions(unittest.TestCase): def test_option_set_keys_random(self): """Tests that option sets do not contain 'random' and its variants as valid keys""" for game_name, world_type in AutoWorldRegister.world_types.items(): - if game_name not in ("Archipelago", "Sudoku", "Super Metroid"): + if game_name not in ("Archipelago", "Super Metroid"): for option_key, option in world_type.options_dataclass.type_hints.items(): if issubclass(option, OptionSet): with self.subTest(game=game_name, option=option_key): diff --git a/worlds/apsudoku/__init__.py b/worlds/apsudoku/__init__.py deleted file mode 100644 index 04422ddb23..0000000000 --- a/worlds/apsudoku/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -from typing import Dict - -from BaseClasses import Tutorial -from ..AutoWorld import WebWorld, World - -class AP_SudokuWebWorld(WebWorld): - options_page = False - theme = 'partyTime' - - setup_en = Tutorial( - tutorial_name='Setup Guide', - description='A guide to playing APSudoku', - language='English', - file_name='setup_en.md', - link='setup/en', - authors=['EmilyV'] - ) - - tutorials = [setup_en] - -class AP_SudokuWorld(World): - """ - Play a little Sudoku while you're in BK mode to maybe get some useful hints - """ - game = "Sudoku" - web = AP_SudokuWebWorld() - - item_name_to_id: Dict[str, int] = {} - location_name_to_id: Dict[str, int] = {} - - @classmethod - def stage_assert_generate(cls, multiworld): - raise Exception("APSudoku cannot be used for generating worlds, the client can instead connect to any slot from any world") - diff --git a/worlds/apsudoku/docs/en_Sudoku.md b/worlds/apsudoku/docs/en_Sudoku.md deleted file mode 100644 index b56af0de79..0000000000 --- a/worlds/apsudoku/docs/en_Sudoku.md +++ /dev/null @@ -1,15 +0,0 @@ -# APSudoku - -## Hint Games - -HintGames do not need to be added at the start of a seed, and do not create a 'slot'- instead, you connect the HintGame client to a different game's slot. By playing a HintGame, you can earn hints for the connected slot. - -## What is this game? - -Play Sudoku puzzles of varying difficulties, earning a hint for each puzzle correctly solved. Harder puzzles are more likely to grant a hint towards a Progression item, though otherwise what hint is granted is random. - -## Where is the options page? - -There is no options page; this game cannot be used in your .yamls. Instead, the client can connect to any slot in a multiworld. - -By using the connected room's Admin Password on the Admin Panel tab, you can configure some settings at any time to affect the entire room. This allows disabling hints entirely, as well as altering the hint odds for each difficulty. diff --git a/worlds/apsudoku/docs/setup_en.md b/worlds/apsudoku/docs/setup_en.md deleted file mode 100644 index f80cd4333f..0000000000 --- a/worlds/apsudoku/docs/setup_en.md +++ /dev/null @@ -1,55 +0,0 @@ -# APSudoku Setup Guide - -## Required Software -- [APSudoku](https://github.com/APSudoku/APSudoku) - -## General Concept - -This is a HintGame client, which can connect to any multiworld slot, allowing you to play Sudoku to unlock random hints for that slot's locations. - -Does not need to be added at the start of a seed, as it does not create any slots of its own, nor does it have any YAML files. - -## Installation Procedures - -### Windows / Linux -Go to the latest release from the [github APSudoku Releases page](https://github.com/APSudoku/APSudoku/releases/latest). Download and extract the appropriate file for your platform. - -### Web -Go to the [github pages](apsudoku.github.io) or [itch.io](https://emilyv99.itch.io/apsudoku) site, and play in the browser. - -## Joining a MultiWorld Game - -1. Run the APSudoku executable. -2. Under `Settings` → `Connection` at the top-right: - - Enter the server address and port number - - Enter the name of the slot you wish to connect to - - Enter the room password (optional) - - Select DeathLink related settings (optional) - - Press `Connect` -4. Under the `Sudoku` tab - - Choose puzzle difficulty - - Click `Start` to generate a puzzle -5. Try to solve the Sudoku. Click `Check` when done - - A correct solution rewards you with 1 hint for a location in the world you are connected to - - An incorrect solution has no penalty, unless DeathLink is enabled (see below) - -Info: -- You can set various settings under `Settings` → `Sudoku`, and can change the colors used under `Settings` → `Theme`. -- While connected, you can view the `Console` and `Hints` tabs for standard TextClient-like features -- You can also use the `Tracking` tab to view either a basic tracker or a valid [GodotAP tracker pack](https://github.com/EmilyV99/GodotAP/blob/main/tracker_packs/GET_PACKS.md) -- While connected, the number of "unhinted" locations for your slot is shown in the upper-left of the the `Sudoku` tab. (If this reads 0, no further hints can be earned for this slot, as every locations is already hinted) -- Click the various `?` buttons for information on controls/how to play - -## Admin Settings - -By using the connected room's Admin Password on the Admin Panel tab, you can configure some settings at any time to affect the entire room. - -- You can disable APSudoku for the entire room, preventing any hints from being granted. -- You can customize the reward weights for each difficulty, making progression hints more or less likely, and/or adding a chance to get "no hint" after a solve. - -## DeathLink Support - -If `DeathLink` is enabled when you click `Connect`: -- Lose a life if you check an incorrect puzzle (not an _incomplete_ puzzle- if any cells are empty, you get off with a warning), or if you quit a puzzle without solving it (including disconnecting). -- Your life count is customizable (default 0). Dying with 0 lives left kills linked players AND resets your puzzle. -- On receiving a DeathLink from another player, your puzzle resets. diff --git a/worlds/generic/__init__.py b/worlds/generic/__init__.py index c4aef4f67b..e183d8a536 100644 --- a/worlds/generic/__init__.py +++ b/worlds/generic/__init__.py @@ -26,7 +26,10 @@ class GenericWeb(WebWorld): 'English', 'setup_en.md', 'setup/en', ['alwaysintreble']) triggers = Tutorial('Archipelago Triggers Guide', 'A guide to setting up and using triggers in your game settings.', 'English', 'triggers_en.md', 'triggers/en', ['alwaysintreble']) - tutorials = [setup, mac, commands, advanced_settings, triggers, plando] + other_games = Tutorial('Other Games and Tools', + 'A guide to additional games and tools that can be used with Archipelago.', + 'English', 'other_en.md', 'other/en', ['EmilyV']) + tutorials = [setup, mac, commands, advanced_settings, triggers, plando, other_games] class GenericWorld(World): diff --git a/worlds/generic/docs/other_en.md b/worlds/generic/docs/other_en.md new file mode 100644 index 0000000000..4c07e57c1c --- /dev/null +++ b/worlds/generic/docs/other_en.md @@ -0,0 +1,68 @@ +# Other Games and Tools + +This guide provides information on other games and tools that can be used with Archipelago but are not part of the standard multiworld generation process. + +## Community Resources + +### Discord Servers +Archipelago has two main Discord servers for community interaction, game support, and hosting public games: +- [Archipelago Official Discord](https://discord.gg/8Z65BR2): The main community hub. +- [Archipelago After Dark Discord](https://discord.gg/fqvNCCRsu4): An adults-only "after dark" server for more mature discussions and unrated games. + +On these servers, you can find the **#apworld-index** channel, which contains hundreds of additional games (APWorlds) that can be added to your Archipelago installation. + +### Documentation +- [Archipelago Wiki](https://archipelago.miraheze.org/): A community-driven wiki with additional information on games, setup, and more. + +## Community Tools + +### PopTracker +[PopTracker](https://github.com/black-sliver/PopTracker) is a popular, universal community-made tracker that supports many Archipelago games. It provides both manual and automatic tracking capabilities for a wide variety of "tracker packs" created by the community. + +## APSudoku + +### What is this game? +APSudoku is a HintGame client which can connect to any multiworld slot, allowing you to play Sudoku to unlock random hints for that slot's locations. +It does not need to be added at the start of a seed, as it does not create any slots of its own, nor does it have any YAML files. + +### Required Software +- [APSudoku](https://github.com/APSudoku/APSudoku) + +### Installation Procedures +#### Windows / Linux +Go to the latest release from the [GitHub APSudoku Releases page](https://github.com/APSudoku/APSudoku/releases/latest). Download and extract the appropriate file for your platform. +#### Web +Go to the [GitHub pages](https://apsudoku.github.io) or [itch.io](https://emilyv99.itch.io/apsudoku) site, and play in the browser. + +### Joining a MultiWorld Game +1. Run the APSudoku executable. +2. Under `Settings` → `Connection` at the top-right: + - Enter the server address and port number + - Enter the name of the slot you wish to connect to + - Enter the room password (optional) + - Select DeathLink related settings (optional) + - Press `Connect` +3. Under the `Sudoku` tab: + - Choose puzzle difficulty + - Click `Start` to generate a puzzle +4. Try to solve the Sudoku. Click `Check` when done. + - A correct solution rewards you with 1 hint for a location in the world you are connected to. + - An incorrect solution has no penalty, unless DeathLink is enabled (see below). + +### Additional Information +- You can set various settings under `Settings` → `Sudoku`, and can change the colors used under `Settings` → `Theme`. +- While connected, you can view the `Console` and `Hints` tabs for standard TextClient-like features. +- You can also use the `Tracking` tab to view either a basic tracker or a valid [GodotAP tracker pack](https://github.com/EmilyV99/GodotAP/blob/main/tracker_packs/GET_PACKS.md). +- While connected, the number of "unhinted" locations for your slot is shown in the upper-left of the `Sudoku` tab. (If this reads 0, no further hints can be earned for this slot, as every location is already hinted.) +- Click the various `?` buttons for information on controls/how to play. + +### Admin Settings +By using the connected room's Admin Password on the Admin Panel tab, you can configure some settings at any time to affect the entire room. +- You can disable APSudoku for the entire room, preventing any hints from being granted. +- You can customize the reward weights for each difficulty, making progression hints more or less likely, and/or adding a chance to get "no hint" after a solve. + +### DeathLink Support +If `DeathLink` is enabled when you click `Connect`: +- Lose a life if you check an incorrect puzzle (not an _incomplete_ puzzle — if any cells are empty, you get off with a warning), or if you quit a puzzle without solving it (including disconnecting). +- Your life count is customizable (default 0). Dying with 0 lives left kills linked players AND resets your puzzle. +- On receiving a DeathLink from another player, your puzzle resets.