aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--maps/2P-ring-street.yml14
-rw-r--r--maps/2P-river-king.yml18
-rw-r--r--maps/3P-ring-street.yml20
-rw-r--r--maps/4P-islands.yml26
-rw-r--r--maps/Readme.md46
-rw-r--r--maps/test.yml20
-rw-r--r--maps/the-kraken.yml26
-rw-r--r--maps/the-tyrant.yml20
-rwxr-xr-xscripts/generate_map_img.py3
9 files changed, 130 insertions, 63 deletions
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()}