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")