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 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.10" tiledversion="1.11.1" name="overworld" tilewidth="16" tileheight="16" tilecount="256" columns="16">
<image source="tilemap.png" width="256" height="256"/>
- <tile id="1">
- <properties>
- <property name="solid" type="int" value="4"/>
- </properties>
- </tile>
- <tile id="3">
- <properties>
- <property name="solid" type="int" value="5"/>
- </properties>
- </tile>
<tile id="18">
<properties>
- <property name="solidType" propertytype="tileSolidType" value="TILE_SOLID_FULL"/>
- </properties>
- </tile>
- <tile id="33">
- <properties>
- <property name="solid" type="int" value="2"/>
- </properties>
- </tile>
- <tile id="35">
- <properties>
- <property name="solid" type="int" value="3"/>
+ <property name="solidType" propertytype="tileSolidType" value="TILE_SOLID_NONE"/>
</properties>
</tile>
<tile id="54">
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")