aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--maps/2P-ring-street.map18
-rw-r--r--maps/2P-ring-street.yml22
-rw-r--r--maps/2P-river-king.map20
-rw-r--r--maps/2P-river-king.yml24
-rw-r--r--maps/3P-ring-street.map22
-rw-r--r--maps/3P-ring-street.yml23
-rw-r--r--maps/4P-islands.map35
-rw-r--r--maps/4P-islands.yml36
-rw-r--r--maps/Makefile6
-rw-r--r--maps/the-kraken.map28
-rw-r--r--maps/the-kraken.yml29
-rwxr-xr-xscripts/generate_map_img.py47
12 files changed, 148 insertions, 162 deletions
diff --git a/maps/2P-ring-street.map b/maps/2P-ring-street.map
deleted file mode 100644
index 1802c5f7..00000000
--- a/maps/2P-ring-street.map
+++ /dev/null
@@ -1,18 +0,0 @@
-T H HT
- FSSSSS2H
- SHSH HS
- S SST S
-H HFH H
- S TSS S
- SH HSHS
-H1SSSSSF
-TH H T
-
-T := tower
-H := house
-F := farm
-S := street
-1 := spawn player 1
-2 := spawn player 2
-
-kings := (1,9) (9,1)
diff --git a/maps/2P-ring-street.yml b/maps/2P-ring-street.yml
new file mode 100644
index 00000000..ca70147e
--- /dev/null
+++ b/maps/2P-ring-street.yml
@@ -0,0 +1,22 @@
+map: |1+
+ T H HT
+ FSSSSS2H
+ SHSH HS
+ S SST S
+ H HFH H
+ S TSS S
+ SH HSHS
+ H1SSSSSF
+ TH H T
+
+symbols:
+ T: tower
+ H: house
+ F: farm
+ S: street
+ 1: spawn player 1
+ 2: spawn player 2
+
+kings:
+ - (1,9)
+ - (9,1)
diff --git a/maps/2P-river-king.map b/maps/2P-river-king.map
deleted file mode 100644
index 0fa00e15..00000000
--- a/maps/2P-river-king.map
+++ /dev/null
@@ -1,20 +0,0 @@
- H HH F T
-WDFSSSSSH1
-WWT STWWH
-WWWWWSWWWWW
-WWWWWSWWWWW
-WWWWWSWWWWW
- HWWTS TWW
- 2HSSSSSFDW
-T F HH H
-
-T := tower
-H := house
-F := farm
-W := deep water
-S := street
-D := docks
-1 := spawn player 1
-2 := spawn player 2
-
-kings := (1,11) (11,1)
diff --git a/maps/2P-river-king.yml b/maps/2P-river-king.yml
new file mode 100644
index 00000000..d0dd7ebd
--- /dev/null
+++ b/maps/2P-river-king.yml
@@ -0,0 +1,24 @@
+map: |1+
+ H HH F T
+ WDFSSSSSH1
+ WWT STWWH
+ WWWWWSWWWWW
+ WWWWWSWWWWW
+ WWWWWSWWWWW
+ HWWTS TWW
+ 2HSSSSSFDW
+ 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
+
+kings:
+ - (1,11)
+ - (11,1)
diff --git a/maps/3P-ring-street.map b/maps/3P-ring-street.map
deleted file mode 100644
index 32bdd02e..00000000
--- a/maps/3P-ring-street.map
+++ /dev/null
@@ -1,22 +0,0 @@
-##### F #####
-### 2 ###
-## T ##
-# H S H #
-# HSSSH #
- H SSHSS H
- F S HS F
- 1TSSST*TSSST3
- SHF S
- SSSSS
-# H #
-
-T := tower
-H := house
-F := farm
-S := street
-1 := spawn player 1
-2 := spawn player 2
-3 := spawn player 3
-* := stick of victory
-# := not part of the map
-
diff --git a/maps/3P-ring-street.yml b/maps/3P-ring-street.yml
new file mode 100644
index 00000000..47b9d88f
--- /dev/null
+++ b/maps/3P-ring-street.yml
@@ -0,0 +1,23 @@
+map: |1+
+ XXXXX F XXXXX
+ XXX 2 XXX
+ XX T XX
+ X H S H X
+ X HSSSH X
+ H SSHSS H
+ F S HS F
+ 1TSSST$TSSST3
+ SHF S
+ SSSSS
+ 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
diff --git a/maps/4P-islands.map b/maps/4P-islands.map
deleted file mode 100644
index 09c0a1c5..00000000
--- a/maps/4P-islands.map
+++ /dev/null
@@ -1,35 +0,0 @@
- WWWWWWWWWWW
- 4 TWWWWWWWWWWWT 3
- HDWWW WWWWWWDH
- WWW TSSSS#WWWW
-WWWWWHFSSHHW##WWWWW
-WWWW#SSS#WWWWSH WWW
-WWW##WW##WWWWSF WW
-WWWSWWWW W#SST WW
-WWWSHWW T T ##SS WW
-WW SHWW * WWHS WW
-WW SS## T T WWHSWWW
-WW TSS#W WWWWSWWW
-WW FSWWWW##WW##WWW
-WWW HSWWWW#SSS#WWWW
-WWWWW##WHHSSFHWWWWW
- WWWW#SSSST WWW
- HDWWWWWW WWWDH
- 1 TWWWWWWWWWWWT 2
- WWWWWWWWWWW
-
-* := stick of victory
-# := shallow water
-W := deep water
-D := docks
-T := tower
-H := house
-F := farm
-W := deep water
-S := street
-D := docks
-1 := spawn player 1
-2 := spawn player 2
-3 := spawn player 3
-4 := spawn player 4
-
diff --git a/maps/4P-islands.yml b/maps/4P-islands.yml
new file mode 100644
index 00000000..5f8dd6f4
--- /dev/null
+++ b/maps/4P-islands.yml
@@ -0,0 +1,36 @@
+map: |1+
+ WWWWWWWWWWW
+ 4 TWWWWWWWWWWWT 3
+ HDWWW WWWWWWDH
+ WWW TSSSSwWWWW
+ WWWWWHFSSHHWwwWWWWW
+ WWWWwSSSwWWWWSH WWW
+ WWWwwWWwwWWWWSF WW
+ WWWSWWWW WwSST WW
+ WWWSHWW T T wwSS WW
+ WW SHWW $ WWHS WW
+ WW SSww T T WWHSWWW
+ WW TSSwW WWWWSWWW
+ WW FSWWWWwwWWwwWWW
+ WWW HSWWWWwSSSwWWWW
+ WWWWWwwWHHSSFHWWWWW
+ WWWWwSSSST WWW
+ HDWWWWWW WWWDH
+ 1 TWWWWWWWWWWWT 2
+ WWWWWWWWWWW
+
+symbols:
+ $: stick of victory
+ w: shallow water
+ W: deep water
+ D: docks
+ T: tower
+ H: house
+ F: farm
+ W: deep water
+ S: street
+ D: docks
+ 1: spawn player 1
+ 2: spawn player 2
+ 3: spawn player 3
+ 4: spawn player 4
diff --git a/maps/Makefile b/maps/Makefile
index 45254c04..98fac22e 100644
--- a/maps/Makefile
+++ b/maps/Makefile
@@ -2,17 +2,17 @@
.DEFAULT_GOAL = all
-MAPS = $(shell find . -name "*.map")
+MAPS = $(shell find . -name "*.yml")
VERBOSE = @
-PNGS = $(MAPS:.map=.png)
+PNGS = $(MAPS:.yml=.png)
MAKEFILE_LIST = Makefile
all: $(PNGS)
-%.png : %.map $(MAKEFILE_LIST)
+%.png : %.yml $(MAKEFILE_LIST)
@echo "generate map › $@"
$(VERBOSE) python3 ../scripts/generate_map_img.py $<
diff --git a/maps/the-kraken.map b/maps/the-kraken.map
deleted file mode 100644
index 51b39b3d..00000000
--- a/maps/the-kraken.map
+++ /dev/null
@@ -1,28 +0,0 @@
-WWW4WWW
-W HK TW
-W 312 W
-WWWWWWW
-WWWWW W
-WWWW SW
-W WWDHW
-WSTWW W
-WF WWWW
-W WWWWW
-WWWWWWW
-WW DWW
-WS * W
- ***
-
-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
-* := player spawn
-
diff --git a/maps/the-kraken.yml b/maps/the-kraken.yml
new file mode 100644
index 00000000..becd909d
--- /dev/null
+++ b/maps/the-kraken.yml
@@ -0,0 +1,29 @@
+map: |1+
+ WWW4WWW
+ W HK TW
+ W 312 W
+ WWWWWWW
+ WWWWW W
+ WWWW SW
+ W WWDHW
+ WSTWW W
+ WF WWWW
+ W WWWWW
+ WWWWWWW
+ WW DWW
+ WS 0 W
+ 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
diff --git a/scripts/generate_map_img.py b/scripts/generate_map_img.py
index f4e29148..84a72abb 100755
--- a/scripts/generate_map_img.py
+++ b/scripts/generate_map_img.py
@@ -5,6 +5,7 @@ import pathlib
import numpy
import os
from typing import MutableMapping
+import yaml
MAP_ROOT = pathlib.Path(os.getcwd())
TILES_DIR = MAP_ROOT / '../assets/tiles'
@@ -14,24 +15,15 @@ def get_tile_path(tile: str) -> pathlib.Path:
"""Return the corresponding image file name for a tile"""
return TILES_DIR / f'{tile.lower().replace(" ", "_")}.png'
-def read_map(map_path: pathlib.Path) -> MutableMapping:
- """Read and parse a map file"""
- map_definition = {'symbols': {}, 'rules': {}}
+def generate_img(map_path: pathlib.Path):
+ """Generate a image from a map file"""
with open(map_path, 'r') as map_file:
- lines = [l[:-1] for l in map_file.readlines()] # remove new lines
-
- # sections in map files are seperated by an empty line
- section_end = lines.index('')
- map_string = '\n'.join(lines[:section_end])
- lines = lines [section_end+1:] # consume map string
+ map_definition = yaml.full_load(map_file)
- section_end = lines.index('')
- for symbol_def in lines[:section_end]:
- symbol, tile = symbol_def.split(':=')
- symbol = symbol.strip()
- tile = tile.strip()
- map_definition['symbols'][symbol] = tile
- lines = lines[section_end + 1:] # consume symbol definitions
+ # remove the trailing new line
+ map_string = map_definition['map'][:-1]
+ # ensure that all keys are actually strings
+ symbols = {str(k): v for k, v in map_definition['symbols'].items()}
# build up tiles
tiles = []
@@ -40,30 +32,13 @@ def read_map(map_path: pathlib.Path) -> MutableMapping:
for symbol in line:
tile = "neutral"
if symbol != ' ':
- if symbol not in map_definition['symbols']:
+ if symbol not in symbols:
print(f'WARNING unknown symbol "{symbol}"')
else:
- tile = map_definition['symbols'][symbol]
+ tile = symbols[symbol]
row.append(tile)
tiles.append(row)
- map_definition['tiles'] = tiles
-
- for rule in lines:
- name, rule = symbol_def.split(':=')
- name = name.strip()
- rule = rule.strip()
- map_definition['rules'][name] = rule
-
- return map_definition
-
-
-def generate_img(map_path: pathlib.Path):
- """Generate a image from a map file"""
- map_definition = read_map(map_path)
-
- tiles = map_definition['tiles']
-
rows_imgs = []
for i, row in enumerate(tiles):
tile_imgs = []
@@ -140,7 +115,7 @@ def main():
map_path = pathlib.Path(args.map_input)
map_files = [map_path]
if map_path.is_dir():
- map_files = map_path.glob('*.map')
+ map_files = map_path.glob('*.yml')
for m in map_files:
generate_img(m)