From 4a8127146eafd4fef5b478c1bf9f5a152c8c4cd5 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Thu, 22 Jun 2023 22:10:28 +0100 Subject: Import entities from the map and spawn them --- tools/map.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'tools/map.py') diff --git a/tools/map.py b/tools/map.py index 5522a9e..7e0210f 100755 --- a/tools/map.py +++ b/tools/map.py @@ -10,12 +10,23 @@ __version__ = "1.0" ld = os.environ.get("LD", "i586-pc-msdosdjgpp-ld") strip = os.environ.get("STRIP", "i586-pc-msdosdjgpp-strip") +entity_types = ("Player",) + def get_layer(data, name): for layer in data["layers"]: if layer["name"] == name: return layer - raise ValueError("Layer %s not found" % name) + raise ValueError("Layer %r not found" % name) + + +def get_prop(data, name, default): + if "properties" not in data: + return default + for prop in data["properties"]: + if prop["name"] == name: + return prop["value"] + return default def main(): @@ -55,7 +66,29 @@ def main(): out.extend(map(lambda x: (x - tileset["firstgid"]) & 0xFF, gold_layer["data"])) - # TODO: process map entities + entity_layer = get_layer(data, "Entities") + + for ent in entity_layer["objects"]: + try: + typ = entity_types.index(ent["name"]) + except ValueError: + parser.error("Entity in map %r not found in entity types" % ent["name"]) + + x = ent["x"] // tileset["tilewidth"] + y = ent["y"] // tileset["tileheight"] + + flags = 0 + + dir = get_prop(ent, "dir", "right") + if dir not in ("left", "right"): + parser.error("Invalid value for property dir: %r" % dir) + if dir == "left": + flags |= 1 + + out.extend([typ, x, y, flags]) + + # end of entity list + out.append(0xFF) tmp = args.output.rstrip(".o") with open(tmp, "wb") as fd: -- cgit v1.2.3