From 14c25a26bc8cd188620f5dcfd1b498d3fae1bff4 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Thu, 4 Sep 2025 15:21:40 +0200 Subject: update the map definitions --- maps/2P-ring-street.yml | 14 +++++++------- maps/2P-river-king.yml | 18 +++++++++--------- maps/3P-ring-street.yml | 20 ++++++++++---------- maps/4P-islands.yml | 26 ++++++++++++------------- maps/Readme.md | 46 +++++++++++++++++++++++++++++++++++++++++++++ maps/test.yml | 20 ++++++++++++++++++++ maps/the-kraken.yml | 26 ++++++++++++------------- maps/the-tyrant.yml | 20 ++++++++++---------- scripts/generate_map_img.py | 3 ++- 9 files changed, 130 insertions(+), 63 deletions(-) create mode 100644 maps/Readme.md create mode 100644 maps/test.yml diff --git a/maps/2P-ring-street.yml b/maps/2P-ring-street.yml index e0ff41ae..952020b4 100644 --- a/maps/2P-ring-street.yml +++ b/maps/2P-ring-street.yml @@ -1,4 +1,4 @@ -map: |1- +map: |+1 T H HT FSSSSS2H SHSH HS @@ -10,12 +10,12 @@ map: |1- TH H T symbols: - T: tower - H: house - F: farm - S: street - 1: spawn player 1 - 2: spawn player 2 + "T": tower + "H": house + "F": farm + "S": street + "1": spawn player 1 + "2": spawn player 2 kings: - [1,9] diff --git a/maps/2P-river-king.yml b/maps/2P-river-king.yml index a44987d6..6449a2d1 100644 --- a/maps/2P-river-king.yml +++ b/maps/2P-river-king.yml @@ -1,4 +1,4 @@ -map: |1- +map: |+1 H HH F T WDFSSSSSH1 WWT STWWH @@ -10,14 +10,14 @@ map: |1- T F HH H symbols: - T: tower - H: house - F: farm - W: deep water - S: street - D: docks - 1: spawn player 1 - 2: spawn player 2 + "T": tower + "H": house + "F": farm + "W": deep water + "S": street + "D": docks + "1": spawn player 1 + "2": spawn player 2 kings: - [11,1] diff --git a/maps/3P-ring-street.yml b/maps/3P-ring-street.yml index f8b129c5..620b7132 100644 --- a/maps/3P-ring-street.yml +++ b/maps/3P-ring-street.yml @@ -1,4 +1,4 @@ -map: |1- +map: |+1 XXXXX F XXXXX XXX 2 XXX XX T XX @@ -12,12 +12,12 @@ map: |1- X H X symbols: - T: tower - H: house - F: farm - S: street - 1: spawn player 1 - 2: spawn player 2 - 3: spawn player 3 - $: stick of victory - X: not part of the map + "T": tower + "H": house + "F": farm + "S": street + "1": spawn player 1 + "2": spawn player 2 + "3": spawn player 3 + "$": stick of victory + "X": not part of the map diff --git a/maps/4P-islands.yml b/maps/4P-islands.yml index c2573fbc..f57c492d 100644 --- a/maps/4P-islands.yml +++ b/maps/4P-islands.yml @@ -1,4 +1,4 @@ -map: |1- +map: |+1 WWWWWWWWWWW 4 TWWWWWWWWWWWT 3 HDWWW WWWWWWDH @@ -20,15 +20,15 @@ map: |1- WWWWWWWWWWW symbols: - $: stick of victory - w: shallow water - W: deep water - D: docks - T: tower - H: house - F: farm - S: street - 1: spawn player 1 - 2: spawn player 2 - 3: spawn player 3 - 4: spawn player 4 + "$": stick of victory + "w": shallow water + "W": deep water + "D": docks + "T": tower + "H": house + "F": farm + "S": street + "1": spawn player 1 + "2": spawn player 2 + "3": spawn player 3 + "4": spawn player 4 diff --git a/maps/Readme.md b/maps/Readme.md new file mode 100644 index 00000000..c1bbcc9e --- /dev/null +++ b/maps/Readme.md @@ -0,0 +1,46 @@ +# Map Definitions for Muhq's Game + +## Available Maps + +``` +maps +├── 2P-ring-street.yml +├── 2P-river-king.yml +├── 3P-ring-street.yml +├── 4P-islands.yml +├── the-kraken.yml +└── the-tyrant.yml +``` + +## Naming Convention + * Map names use kebab case + * Maps start with their player amount + * Map names somehow describe their features (`ring-street`, `islands`, `river`, ...) + * Boss maps are named after the boss + +## Yaml Schema + +### Required Keys +Map definitions are written in Yaml and must have at least the following keys: + +```yaml +map: # A multiline string featuring one character per tile +``` + +All trailing newlines are removed from the `map` string. +It is advised to use `|+` to preserve potential meaningful trailing white space. + +```yaml +symbols: # The symbols must contain the tile descriptions for each character used in the map +``` + +The `" "` key will be inserted automatically for `neutral` tiles if it is not present in the symbols. +Symbols should be quoted to ensure they are parsed as characters. + +### Optional Keys: + + ```yaml + start_deck_list: # A string containing the map's starting deck list + win_condition: # The map's win condition + kings: # A list of the 0-based positions of each player's king + ``` diff --git a/maps/test.yml b/maps/test.yml new file mode 100644 index 00000000..55beb200 --- /dev/null +++ b/maps/test.yml @@ -0,0 +1,20 @@ +map: |+1 + WTW$ + WGWS + F SS + 0SH + +symbols: + "W": wall + "G": gate + "T": tower + "H": house + "F": farm + "S": street + "$": store + "0": player spawn + +start_deck_list: |- + 1 misc/farmer + 1 magic/attack! + 1 exp1/illusionist diff --git a/maps/the-kraken.yml b/maps/the-kraken.yml index 46016b32..55fbcc0c 100644 --- a/maps/the-kraken.yml +++ b/maps/the-kraken.yml @@ -1,4 +1,4 @@ -map: |1- +map: |+1 WWW4WWW W HK TW W 312 W @@ -15,18 +15,18 @@ map: |1- 000 symbols: - K: the kraken - T: tower - H: house - F: farm - W: deep water - S: store - D: docks - 1: deep water spawn 1 - 2: deep water spawn 2 - 3: deep water spawn 3 - 4: deep water spawn 4 - 0: player spawn + "K": the kraken + "T": tower + "H": house + "F": farm + "W": deep water + "S": store + "D": docks + "1": deep water spawn 1 + "2": deep water spawn 2 + "3": deep water spawn 3 + "4": deep water spawn 4 + "0": player spawn start_deck_list: |- 1 misc/farmer diff --git a/maps/the-tyrant.yml b/maps/the-tyrant.yml index 55f0084e..4440aa78 100644 --- a/maps/the-tyrant.yml +++ b/maps/the-tyrant.yml @@ -1,4 +1,4 @@ -map: |1- +map: |+1 HF HH H H SSH HTWT HHH SH$SSSG1GSSS$H @@ -16,15 +16,15 @@ map: |1- 0H 0H H0 symbols: - W: wall - G: gate - T: tower - H: house - F: farm - S: street - $: store - 1: the tyrant - 0: player spawn + "W": wall + "G": gate + "T": tower + "H": house + "F": farm + "S": street + "$": store + "1": the tyrant + "0": player spawn win_condition: players: destroy the tyrant diff --git a/scripts/generate_map_img.py b/scripts/generate_map_img.py index 254581f2..39c41a45 100755 --- a/scripts/generate_map_img.py +++ b/scripts/generate_map_img.py @@ -232,7 +232,8 @@ def generate_img(map_path: pathlib.Path): with open(map_path, 'r', encoding="utf8") as map_file: map_definition = yaml.full_load(map_file) - map_string = map_definition['map'] + # strip trailing newlines from the map definition + map_string = map_definition['map'].strip("\n") # ensure that all keys are actually strings symbols = {str(k): v for k, v in map_definition['symbols'].items()} -- cgit v1.2.3