Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
2aa5110
Add button press protection to Victory button
nicopop Apr 7, 2026
709d9fb
Add option to sort categories via algorithms
nicopop Apr 7, 2026
8d00903
make location buttons checks for the location name instead of the but…
nicopop Apr 7, 2026
c0d7d86
fix copy paste errors and new options not doing anything until reload
nicopop Apr 7, 2026
78ad825
client version bump
nicopop Apr 7, 2026
4dcb9bc
removed testing code oops
nicopop Apr 7, 2026
96a944b
added basic support for UT aliases
nicopop Apr 8, 2026
bdd43de
moved where get_location_UT_alias_by_id get location_id_to_alias to s…
nicopop Apr 8, 2026
7aa239a
update SortingOrderCategories description
nicopop Apr 8, 2026
0facb72
add UT alias support for victory location
nicopop Apr 8, 2026
f962997
add Support for basic item aliases
nicopop Apr 8, 2026
5cea500
keep categories that starts with parentheses to the top of natural sort
nicopop Apr 8, 2026
310c6c4
Merge branch 'main' into client-misc-changes
nicopop Apr 9, 2026
ea9c928
rephrase the get_location_alias_by_id comments
nicopop Apr 9, 2026
4dfbb80
Merge branch 'main' of https://github.com/ManualForArchipelago/Manual…
nicopop Apr 14, 2026
2e13b87
renamed the categories sorting settings keys
nicopop May 29, 2026
1f3dc56
moved alias stuff to other branch
nicopop May 30, 2026
75e2b56
Add alias code that was in PR #214
nicopop May 30, 2026
9936709
rename alias to description in the client
nicopop May 30, 2026
3cea3e5
Add full support for the item/loc descriptions
nicopop May 30, 2026
89c637e
added item/location description to schema
nicopop May 30, 2026
b0da087
removed all reference to alias except for the 1 needed for UT
nicopop May 31, 2026
b2af75f
use the official webworld.item/loc_descriptions instead
nicopop Jun 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions schemas/Manual.items.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@
"description": "(Optional) A string to sort the items by. If not provided, items will always be sorted by name.",
"type": "string"
},
"description": {
"description": "(Optional) A short description of the item to be displayed in the client",
"type": "string"
},
"_comment": {"$ref": "#/definitions/comment"}
},
"required": ["name"]
Expand Down
4 changes: 4 additions & 0 deletions schemas/Manual.locations.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@
"description": "(Optional) A string to sort the locations by. If not provided, locations will always be sorted by name.",
"type": "string"
},
"description": {
"description": "(Optional) A short description of the location to be displayed in the client in the Manual and Tracker tabs",
"type": "string"
},
"_comment": {"$ref": "#/definitions/comment"}
},
"required": ["name"]
Expand Down
6 changes: 5 additions & 1 deletion src/Items.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

item_id_to_name: dict[int, str] = {}
item_name_to_item: dict[str, dict] = {}
item_name_to_description: dict[str, str] = {}
item_name_groups: dict[str, str] = {}
advancement_item_names: set[str] = set()
lastItemId = -1
Expand Down Expand Up @@ -38,7 +39,7 @@
count += 1

for item in item_table:
item_name = item.get("name", f"Unnamed Item {item['id']}")
item_name: str = item.get("name", f"Unnamed Item {item['id']}")
item_id_to_name[item["id"]] = item_name
item_name_to_item[item_name] = item

Expand All @@ -60,6 +61,9 @@
item_name_groups[group_name] = []
item_name_groups[group_name].append(item_name)

if item.get("description"):
item_name_to_description[item_name] = item["description"]

item_id_to_name[None] = "__Victory__"
item_name_to_id = {name: id for id, name in item_id_to_name.items()}

Expand Down
5 changes: 4 additions & 1 deletion src/Locations.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,12 @@

location_id_to_name: dict[int, str] = {}
location_name_to_location: dict[str, dict[str, Any]] = {}
location_name_to_description: dict[str, str] = {}
location_name_groups: dict[str, list[str]] = {}
event_name_to_event: dict[str, dict[str, Any]] = {}

for loc in location_table:
loc_name = loc.get("name", f"Unnamed Location {loc['id']}")
loc_name: str = loc.get("name", f"Unnamed Location {loc['id']}")
location_id_to_name[loc["id"]] = loc_name
location_name_to_location[loc_name] = loc

Expand All @@ -59,6 +60,8 @@
location_name_groups[c] = []
location_name_groups[c].append(loc_name)

if loc.get("description"):
location_name_to_description[loc_name] = loc["description"]

# location_id_to_name[None] = "__Manual Game Complete__"
location_name_to_id = {name: id for id, name in location_id_to_name.items()}
Expand Down
192 changes: 144 additions & 48 deletions src/ManualClient.py

Large diffs are not rendered by default.

8 changes: 7 additions & 1 deletion src/Meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,14 @@ def set_world_description(base_doc: str) -> str:
return base_doc


def set_world_webworld(web: WebWorld) -> WebWorld:
def set_world_webworld(web: ManualWeb) -> ManualWeb:
from .Options import make_options_group
from .Locations import location_name_to_description
from .Items import item_name_to_description

web.location_descriptions = location_name_to_description
web.item_descriptions = item_name_to_description

if meta_table.get("docs", {}).get("web", {}):
Web_Config = meta_table["docs"]["web"]

Expand Down
6 changes: 4 additions & 2 deletions src/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from .Data import item_table, location_table, event_table, region_table, category_table
from .Game import game_name, filler_item_name, starting_items
from .Meta import world_description, world_webworld
from .Locations import location_id_to_name, location_name_to_id, location_name_to_location, location_name_groups, victory_names, event_name_to_event
from .Locations import location_id_to_name, location_name_to_id, location_name_to_location, location_name_groups, victory_names, event_name_to_event, location_name_to_description
from .Items import item_id_to_name, item_name_to_id, item_name_to_item, item_name_groups
from .DataValidation import runGenerationDataValidation, runPreFillDataValidation

Expand Down Expand Up @@ -71,6 +71,7 @@ class ManualWorld(World):

# UT (the universal-est of trackers) can now generate without a YAML
ut_can_gen_without_yaml = True
location_id_to_alias: dict[int, str] = {location_name_to_id[name]: desc for name, desc in location_name_to_description.items()}

origin_region_name = "Manual"

Expand Down Expand Up @@ -417,6 +418,7 @@ def fill_slot_data(self):

# slot_data["DeathLink"] = bool(self.multiworld.death_link[self.player].value)
common_options = set(PerGameCommonOptions.type_hints.keys())
common_options |= set(["generate_region_diagram", "start_inventory_from_pool"])
for option_key, _ in self.options_dataclass.type_hints.items():
if option_key in common_options:
continue
Expand Down Expand Up @@ -570,7 +572,7 @@ def __init__(self, display_name: str, script_name: Optional[str] = None, func: O
self.version = version

def add_client_to_launcher() -> None:
version = 2026_04_04 # YYYYMMDD
version = 2026_04_07 # YYYYMMDD
found = False

if "manual" not in icon_paths:
Expand Down
Loading