From 57d231b561b3d7401b631b1962971ce10c8b2c6f Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Mon, 23 Jun 2025 23:24:00 -0500 Subject: [PATCH] About to start parsing different ent types. --- data/map.tmj | 4 ++-- data/overworld.tsx | 22 +------------------- src/dusk/entity/npc.h | 4 +--- tools/mapcompile/constants.py | 6 +----- tools/mapcompile/entityParser.py | 35 +++++++++++++++++++++++++++----- tools/mapcompile/mapcompile.py | 18 ++++++++++++++++ 6 files changed, 53 insertions(+), 36 deletions(-) diff --git a/data/map.tmj b/data/map.tmj index 9a48a55..14a38ff 100644 --- a/data/map.tmj +++ b/data/map.tmj @@ -437,8 +437,8 @@ "value":"NPC_INTERACT_TYPE_TEXT" }], "template":"templates\/NPC.tx", - "x":6575.625, - "y":6816.33333333333 + "x":6539.95833333333, + "y":6849.33333333333 }], "opacity":1, "type":"objectgroup", diff --git a/data/overworld.tsx b/data/overworld.tsx index 4ddc6bb..b7e2309 100644 --- a/data/overworld.tsx +++ b/data/overworld.tsx @@ -1,29 +1,9 @@ - - - - - - - - - - - - - - - - - - - - - + diff --git a/src/dusk/entity/npc.h b/src/dusk/entity/npc.h index 0bb41a7..ad03843 100644 --- a/src/dusk/entity/npc.h +++ b/src/dusk/entity/npc.h @@ -4,8 +4,6 @@ typedef struct _entity_t entity_t; -#define NPC_INTERACT_TEXTS_MAX 4 - typedef enum { NPC_INTERACT_TYPE_NONE = 0, NPC_INTERACT_TYPE_TEXT = 1, @@ -17,7 +15,7 @@ typedef struct { npcinteracttype_t interactType; union { - char_t* texts[NPC_INTERACT_TEXTS_MAX]; + char_t* text; }; } npc_t; diff --git a/tools/mapcompile/constants.py b/tools/mapcompile/constants.py index 30a795d..8bb3b44 100644 --- a/tools/mapcompile/constants.py +++ b/tools/mapcompile/constants.py @@ -4,8 +4,4 @@ CHUNK_HEIGHT = 8 CHUNK_TILE_COUNT = CHUNK_WIDTH * CHUNK_HEIGHT CHUNK_ENTITY_COUNT_MAX = 8 TILE_WIDTH_HEIGHT = 16 -TILE_WIDTH_HEIGHT = 16 - -ENTITY_TYPE_MAP = { - "npc": "ENTITY_TYPE_NPC", -} \ No newline at end of file +TILE_WIDTH_HEIGHT = 16 \ No newline at end of file diff --git a/tools/mapcompile/entityParser.py b/tools/mapcompile/entityParser.py index 749fa9c..de83159 100644 --- a/tools/mapcompile/entityParser.py +++ b/tools/mapcompile/entityParser.py @@ -1,15 +1,40 @@ -from constants import TILE_WIDTH_HEIGHT, ENTITY_TYPE_MAP -from helper import floatToFixed248 +import sys +from constants import TILE_WIDTH_HEIGHT + +ENTITY_TYPE_MAP = { + 'templates/NPC.tx': 'ENTITY_TYPE_NPC', +} def parseEntity(obj, chunkData): - if 'type' in obj and obj['type'] not in ENTITY_TYPE_MAP: + if 'type' in obj: + if obj['type'] not in ENTITY_TYPE_MAP: + print(f"Unknown entity type: {obj['type']}") + return None + + entType = ENTITY_TYPE_MAP[obj['type']] + + elif 'template' in obj: + if obj['template'] not in ENTITY_TYPE_MAP: + print(f"Unknown entity template: {obj['template']}") + return None + entType = ENTITY_TYPE_MAP[obj['template']] + + else: return None + if 'properties' not in obj: + obj['properties'] = {} + obj['localX'] = obj['x'] - (chunkData['topLeftTileX'] * TILE_WIDTH_HEIGHT) obj['localY'] = obj['y'] - (chunkData['topLeftTileY'] * TILE_WIDTH_HEIGHT) obj['dir'] = 'ENTITY_DIR_SOUTH' - obj['type'] = 'ENTITY_TYPE_NPC' + obj['type'] = entType - print(obj) + # Handle per-type properties + if entType == 'ENTITY_TYPE_NPC': + obj['data'] = {} + obj['data']['npc'] = {} + obj['data']['npc']['interactType'] = 'NPC_INTERACT_TYPE_TEXT' + obj['data']['npc']['text'] = '"test"' return obj \ No newline at end of file diff --git a/tools/mapcompile/mapcompile.py b/tools/mapcompile/mapcompile.py index c6817f2..313ef3f 100644 --- a/tools/mapcompile/mapcompile.py +++ b/tools/mapcompile/mapcompile.py @@ -89,6 +89,24 @@ for chunkY in range(mapData['mapHeightInRealChunks']): if 'dir' in entity: f.write(f" .dir = {entity['dir']},\n") + def printRecurse(obj, tabs = " "): + for key, value in obj: + if isinstance(value, dict): + f.write(f"{tabs}.{key} = {{\n") + printRecurse(value.items(), tabs + " ") + f.write(f"{tabs}}},\n") + elif isinstance(value, list): + f.write(f"{tabs}.{key} = {{\n") + for item in value: + f.write(f"{tabs} {item},\n") + f.write(f"{tabs}}},\n") + else: + f.write(f"{tabs}.{key} = {value},\n") + + + if 'data' in entity: + printRecurse(entity['data'].items()) + f.write(" },\n") f.write(f" }},\n")