diff --git a/TypeGraph.project.gmx b/TypeGraph.project.gmx
index cfdee39..a16601f 100644
--- a/TypeGraph.project.gmx
+++ b/TypeGraph.project.gmx
@@ -159,6 +159,7 @@
       
       
     
+    
   
   
     
@@ -220,6 +221,7 @@
     
     
     
+    
   
   
     rooms\roomInit
@@ -235,4 +237,4 @@
     
     0
   
-
\ No newline at end of file
+
diff --git a/objects/Debug.object.gmx b/objects/Debug.object.gmx
index ee06b12..df36c6b 100644
--- a/objects/Debug.object.gmx
+++ b/objects/Debug.object.gmx
@@ -133,6 +133,30 @@ ds_map_destroy(objectNames);
         
       
     
+    
+      
+        1
+        603
+        7
+        0
+        0
+        -1
+        2
+        
+        
+        self
+        0
+        0
+        
+          
+            1
+            if room == roomInit
+room_goto(room0)
+
+          
+        
+      
+    
     
       
         1
diff --git a/objects/LevelLoader.object.gmx b/objects/LevelLoader.object.gmx
new file mode 100644
index 0000000..eeed8ac
--- /dev/null
+++ b/objects/LevelLoader.object.gmx
@@ -0,0 +1,23 @@
+
+
diff --git a/scripts/loadLevel.gml b/scripts/loadLevel.gml
new file mode 100644
index 0000000..a57a474
--- /dev/null
+++ b/scripts/loadLevel.gml
@@ -0,0 +1,51 @@
+///loadLevel(json, typeMap, root)
+/**
+ * loadLevel :: JSON -> ()
+ *
+ * Fills a level room with a level description from a JSON string.
+ *
+ * @param json the json level description
+ */
+
+var json = argument0;
+var typeMap = argument1;
+var root = argument2;
+
+assert(is_string(json), "No JSON string provided.");
+assert(ds_exists(typeMap, ds_type_map), "Invalid type map provided.");
+assertInstanceof(root, TypeConLink);
+
+var map = json_decode(json);
+
+assert(
+       ds_exists(map, ds_type_map) &&
+       ds_exists(map[?"blocks"], ds_type_list) &&
+       ds_exists(map[?"goal"], ds_type_list) && 
+       ds_exists(map[?"parameters"], ds_type_list) &&
+       ds_exists(map[?"start"], ds_type_list) &&
+       ds_exists(map[?"traits"], ds_type_list),
+       "Invalid level description."
+);
+
+var paramMap = ds_map_create();
+var params = map[?"parameters"];
+for (var i = 0; i < ds_list_size(params); i++) {
+  var param = params[|i];
+  var traits = param[?"traits"];
+  
+  var inst;
+  if (param[?"free"])
+    inst = new(FreeType);
+  else
+    inst = new(ConcreteType);
+  
+  inst.order = param[?"order"];
+
+  for (var j = 0; j < ds_list_size(traits); j++)
+    
+  
+  paramMap[?param[?"name"]] = inst;
+}
+
+ds_map_destroy(map);
+