aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-12 19:23:19 -0400
committerhistoria <[not public]>2026-07-12 19:23:19 -0400
commitbeb0b73a9e56fdc717d55bbf1a1c7c5b49d4c6a4 (patch)
treefa5fb802937f631c45c46851328b4839a4b35949
parent2bacbb08d1ac67c4f63ee535728cd4e8760e3211 (diff)
downloadthehouseoficarus-beb0b73a9e56fdc717d55bbf1a1c7c5b49d4c6a4.tar.gz
feat: remains drop is optional
-rw-r--r--data/.admin_history.json1
-rw-r--r--internal/admin/static/editor.js1
-rw-r--r--internal/admin/static/mobeditor.js25
-rw-r--r--internal/admin/templates/layout.html4
4 files changed, 26 insertions, 5 deletions
diff --git a/data/.admin_history.json b/data/.admin_history.json
deleted file mode 100644
index fde8314..0000000
--- a/data/.admin_history.json
+++ /dev/null
@@ -1 +0,0 @@
-{"history":[{"time":"2026-07-11T18:30:19-04:00","description":"Deleted file courses/test_copy.yaml","file_path":"data/courses/test_copy.yaml","old_content":"completion_xp: 0\nname: test\nobstacles:\n - exit_dir: southwest\n fail_damage:\n - 0\n - 0\n phases: []\n room_id: 1009\n verb: climb\n xp: 0\nrequired_level: 1\nstart_room: 1007\n","new_content":"","is_delete":true,"is_create":false},{"time":"2026-07-11T18:30:26-04:00","description":"Deleted file .admin_history.json","file_path":"data/.admin_history.json","old_content":"{\"history\":[{\"time\":\"2026-07-11T18:30:19-04:00\",\"description\":\"Deleted file courses/test_copy.yaml\",\"file_path\":\"data/courses/test_copy.yaml\",\"old_content\":\"completion_xp: 0\\nname: test\\nobstacles:\\n - exit_dir: southwest\\n fail_damage:\\n - 0\\n - 0\\n phases: []\\n room_id: 1009\\n verb: climb\\n xp: 0\\nrequired_level: 1\\nstart_room: 1007\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false}],\"redo\":null}","new_content":"","is_delete":true,"is_create":false},{"time":"2026-07-11T18:30:29-04:00","description":"Deleted file .admin_history.yaml","file_path":"data/.admin_history.yaml","old_content":"{\"history\":[{\"time\":\"2026-06-30T03:16:23-04:00\",\"description\":\"update room 1009\",\"file_path\":\"data/rooms/intro/1009.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"26\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs:\\n - id: man\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:16:24-04:00\",\"description\":\"update room 1009\",\"file_path\":\"data/rooms/intro/1009.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs:\\n - id: man\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"27\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs:\\n - id: man\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:16:25-04:00\",\"description\":\"update room 1009\",\"file_path\":\"data/rooms/intro/1009.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"27\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs:\\n - id: man\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"27\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs:\\n - id: man\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:20:00-04:00\",\"description\":\"update room 1009\",\"file_path\":\"data/rooms/intro/1009.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"27\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs:\\n - id: man\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"27\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:20:04-04:00\",\"description\":\"update room 1009\",\"file_path\":\"data/rooms/intro/1009.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"27\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"27\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs:\\n - id: man\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:20:07-04:00\",\"description\":\"update room 1009\",\"file_path\":\"data/rooms/intro/1009.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"27\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs:\\n - id: man\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"27\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1016\\n northwest:\\n room: 8\\n southwest:\\n room: 1006\\n west:\\n room: 1005\\nhazard: \\\"\\\"\\nid: 1009\\nitem_spawns: []\\nmobs:\\n - id: man\\n - id: man\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:28:54-04:00\",\"description\":\"rename room 1014 to 1015\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"new_file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1007\\n up:\\n room: 1015\\nhazard: \\\"\\\"\\nid: 1014\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1007\\n up:\\n room: 1015\\nhazard: \\\"\\\"\\nid: 1014\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:29:30-04:00\",\"description\":\"rename room 1007 to 10070\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"new_file_path\":\"data/rooms/intro/10070.yaml\",\"old_content\":\"id: 1007\\nname: New Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 12\\n northwest:\\n room: 1005\\n south:\\n room: 1014\\n up:\\n room: 11\\n west:\\n room: 1006\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: New Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 12\\n northwest:\\n room: 1005\\n south:\\n room: 1014\\n up:\\n room: 11\\n west:\\n room: 1006\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:30:46-04:00\",\"description\":\"update room 10070\",\"file_path\":\"data/rooms/intro/10070.yaml\",\"old_content\":\"id: 1007\\nname: New Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 12\\n northwest:\\n room: 1005\\n south:\\n room: 1014\\n up:\\n room: 11\\n west:\\n room: 1006\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 12\\n northwest:\\n room: 1005\\n south:\\n room: 1014\\n up:\\n room: 11\\n west:\\n room: 1006\\nhazard: \\\"\\\"\\nid: 10070\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:39:51-04:00\",\"description\":\"update room 2002 (add exit north to 1007)\",\"file_path\":\"data/rooms/intro/2002.yaml\",\"old_content\":\"id: 2002\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n east:\\n room: 2003\\n north:\\n room: 1013\\n southeast:\\n room: 2004\\n west:\\n room: 2001\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 2002\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n east:\\n room: 2003\\n north:\\n room: 1007\\n southeast:\\n room: 2004\\n west:\\n room: 2001\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:39:51-04:00\",\"description\":\"create room 1007\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n south: 2002\\nid: 1007\\nname: 'Room #1007'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:39:56-04:00\",\"description\":\"delete room 1007\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"exits:\\n south: 2002\\nid: 1007\\nname: 'Room #1007'\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:40:02-04:00\",\"description\":\"delete room 10070\",\"file_path\":\"data/rooms/intro/10070.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 12\\n northwest:\\n room: 1005\\n south:\\n room: 1014\\n up:\\n room: 11\\n west:\\n room: 1006\\nhazard: \\\"\\\"\\nid: 10070\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:40:04-04:00\",\"description\":\"delete room 1015\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1007\\n up:\\n room: 1015\\nhazard: \\\"\\\"\\nid: 1014\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:41:10-04:00\",\"description\":\"update room 1006\",\"file_path\":\"data/rooms/intro/1006.yaml\",\"old_content\":\"id: 1006\\nname: New Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 1005\\n northeast:\\n room: 1009\\n northwest:\\n room: 1008\\n up:\\n room: 1010\\n west:\\n room: 2003\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 1005\\n northeast:\\n room: 1009\\n northwest:\\n room: 1008\\n up:\\n room: 1010\\n west:\\n room: 2003\\nhazard: \\\"\\\"\\nid: 1006\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:41:11-04:00\",\"description\":\"update room 1006\",\"file_path\":\"data/rooms/intro/1006.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 1005\\n northeast:\\n room: 1009\\n northwest:\\n room: 1008\\n up:\\n room: 1010\\n west:\\n room: 2003\\nhazard: \\\"\\\"\\nid: 1006\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: E2\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 1005\\n northeast:\\n room: 1009\\n northwest:\\n room: 1008\\n up:\\n room: 1010\\n west:\\n room: 2003\\nhazard: \\\"\\\"\\nid: 1006\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:41:12-04:00\",\"description\":\"update room 1006\",\"file_path\":\"data/rooms/intro/1006.yaml\",\"old_content\":\"block_transport: false\\ncolor: E2\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 1005\\n northeast:\\n room: 1009\\n northwest:\\n room: 1008\\n up:\\n room: 1010\\n west:\\n room: 2003\\nhazard: \\\"\\\"\\nid: 1006\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: E2\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 1005\\n northeast:\\n room: 1009\\n northwest:\\n room: 1008\\n up:\\n room: 1010\\n west:\\n room: 2003\\nhazard: \\\"\\\"\\nid: 1006\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:41:16-04:00\",\"description\":\"update room 1016 (add exit east to 1007)\",\"file_path\":\"data/rooms/intro/1016.yaml\",\"old_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n south:\\n room: 1009\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n east:\\n room: 1007\\n south:\\n room: 1009\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:41:25-04:00\",\"description\":\"update room 1016 (add exit southeast to 1007)\",\"file_path\":\"data/rooms/intro/1016.yaml\",\"old_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n east:\\n room: 1007\\n south:\\n room: 1009\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n east:\\n room: 1007\\n south:\\n room: 1009\\n southeast:\\n room: 1007\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:41:37-04:00\",\"description\":\"update room 1016 (add exit southeast to 1007)\",\"file_path\":\"data/rooms/intro/1016.yaml\",\"old_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n east:\\n room: 1007\\n south:\\n room: 1009\\n southeast:\\n room: 1007\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n east:\\n room: 1007\\n south:\\n room: 1009\\n southeast:\\n room: 1007\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:41:44-04:00\",\"description\":\"update room 1016 (add exit southeast to 1007)\",\"file_path\":\"data/rooms/intro/1016.yaml\",\"old_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n east:\\n room: 1007\\n south:\\n room: 1009\\n southeast:\\n room: 1007\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n east:\\n room: 1007\\n south:\\n room: 1009\\n southeast:\\n room: 1007\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:41:57-04:00\",\"description\":\"update room 1006 (add exit east to 1007)\",\"file_path\":\"data/rooms/intro/1006.yaml\",\"old_content\":\"block_transport: false\\ncolor: E2\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 1005\\n northeast:\\n room: 1009\\n northwest:\\n room: 1008\\n up:\\n room: 1010\\n west:\\n room: 2003\\nhazard: \\\"\\\"\\nid: 1006\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"id: 1006\\nname: New Room\\ncolor: E2\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 1005\\n northeast:\\n room: 1009\\n northwest:\\n room: 1008\\n up:\\n room: 1010\\n west:\\n room: 2003\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:01-04:00\",\"description\":\"update room 2004 (add exit south to 1007)\",\"file_path\":\"data/rooms/intro/2004.yaml\",\"old_content\":\"id: 2004\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n north:\\n room: 2003\\n northwest:\\n room: 2002\\n west:\\n room: 2005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 2004\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n north:\\n room: 2003\\n northwest:\\n room: 2002\\n south:\\n room: 1007\\n west:\\n room: 2005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:01-04:00\",\"description\":\"create room 1007\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n north: 2004\\nid: 1007\\nname: 'Room #1007'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:42:20-04:00\",\"description\":\"unlink 1016 east 1007\",\"file_path\":\"data/rooms/intro/1016.yaml\",\"old_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n east:\\n room: 1007\\n south:\\n room: 1009\\n southeast:\\n room: 1007\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n south:\\n room: 1009\\n southeast:\\n room: 1007\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:20-04:00\",\"description\":\"unlink 1007 west 1016 (reverse)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"exits:\\n north: 2004\\nid: 1007\\nname: 'Room #1007'\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:23-04:00\",\"description\":\"unlink 1016 southeast 1007\",\"file_path\":\"data/rooms/intro/1016.yaml\",\"old_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n south:\\n room: 1009\\n southeast:\\n room: 1007\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n south:\\n room: 1009\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:23-04:00\",\"description\":\"unlink 1007 northwest 1016 (reverse)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:28-04:00\",\"description\":\"unlink 1006 east 1007\",\"file_path\":\"data/rooms/intro/1006.yaml\",\"old_content\":\"id: 1006\\nname: New Room\\ncolor: E2\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 1005\\n northeast:\\n room: 1009\\n northwest:\\n room: 1008\\n up:\\n room: 1010\\n west:\\n room: 2003\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1006\\nname: New Room\\ncolor: E2\\ndescription:\\n - text: A featureless room.\\nexits:\\n north:\\n room: 1005\\n northeast:\\n room: 1009\\n northwest:\\n room: 1008\\n up:\\n room: 1010\\n west:\\n room: 2003\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:28-04:00\",\"description\":\"unlink 1007 west 1006 (reverse)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:33-04:00\",\"description\":\"unlink 2002 north 1007\",\"file_path\":\"data/rooms/intro/2002.yaml\",\"old_content\":\"id: 2002\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n east:\\n room: 2003\\n north:\\n room: 1007\\n southeast:\\n room: 2004\\n west:\\n room: 2001\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 2002\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n east:\\n room: 2003\\n southeast:\\n room: 2004\\n west:\\n room: 2001\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:33-04:00\",\"description\":\"unlink 1007 south 2002 (reverse)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:38-04:00\",\"description\":\"unlink 1005 southeast 1007\",\"file_path\":\"data/rooms/intro/1005.yaml\",\"old_content\":\"block_transport: false\\ncolor: CC\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1009\\n northeast:\\n room: 1016\\n south:\\n room: 1006\\n southeast:\\n room: 1007\\n southwest:\\n room: 2003\\n west:\\n room: 1008\\nhazard: \\\"\\\"\\nid: 1005\\nitem_spawns: []\\nmobs: []\\nname: New Room\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"id: 1005\\nname: New Room\\ncolor: CC\\ndescription:\\n - text: A featureless room.\\nexits:\\n east:\\n room: 1009\\n northeast:\\n room: 1016\\n south:\\n room: 1006\\n southwest:\\n room: 2003\\n west:\\n room: 1008\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:38-04:00\",\"description\":\"unlink 1007 northwest 1005 (reverse)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:44-04:00\",\"description\":\"update room 1007 (add exit south to 1013)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\n south:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:44-04:00\",\"description\":\"create room 1013\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n north: 1007\\nid: 1013\\nname: 'Room #1013'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:42:44-04:00\",\"description\":\"update room 1013 (add exit east to 1014)\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"exits:\\n north: 1007\\nid: 1013\\nname: 'Room #1013'\\n\",\"new_content\":\"id: 1013\\nname: 'Room #1013'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1014\\n north:\\n room: 1007\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:44-04:00\",\"description\":\"create room 1014\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n west: 1013\\nid: 1014\\nname: 'Room #1014'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:42:45-04:00\",\"description\":\"update room 1014 (add exit east to 1015)\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"exits:\\n west: 1013\\nid: 1014\\nname: 'Room #1014'\\n\",\"new_content\":\"id: 1014\\nname: 'Room #1014'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1015\\n west:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:45-04:00\",\"description\":\"create room 1015\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n west: 1014\\nid: 1015\\nname: 'Room #1015'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:42:48-04:00\",\"description\":\"delete room 1015\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"exits:\\n west: 1014\\nid: 1015\\nname: 'Room #1015'\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:42:49-04:00\",\"description\":\"delete room 1014\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"id: 1014\\nname: 'Room #1014'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1015\\n west:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:42:51-04:00\",\"description\":\"delete room 1013\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"id: 1013\\nname: 'Room #1013'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1014\\n north:\\n room: 1007\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:42:53-04:00\",\"description\":\"update room 1007 (add exit east to 1013)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\n south:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1013\\n north:\\n room: 2004\\n south:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:42:53-04:00\",\"description\":\"create room 1013\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n west: 1007\\nid: 1013\\nname: 'Room #1013'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:43:23-04:00\",\"description\":\"delete room 1013\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"exits:\\n west: 1007\\nid: 1013\\nname: 'Room #1013'\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:43:24-04:00\",\"description\":\"update room 1007 (add exit south to 1013)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1013\\n north:\\n room: 2004\\n south:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1013\\n north:\\n room: 2004\\n south:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:24-04:00\",\"description\":\"create room 1013\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n north: 1007\\nid: 1013\\nname: 'Room #1013'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:43:35-04:00\",\"description\":\"unlink 1007 south 1013\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1013\\n north:\\n room: 2004\\n south:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1013\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:35-04:00\",\"description\":\"unlink 1013 north 1007 (reverse)\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"exits:\\n north: 1007\\nid: 1013\\nname: 'Room #1013'\\n\",\"new_content\":\"id: 1013\\nname: 'Room #1013'\\ncolor: \\\"\\\"\\ndescription: []\\nexits: {}\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:39-04:00\",\"description\":\"unlink 1007 east 1013\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1013\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:39-04:00\",\"description\":\"unlink 1013 west 1007 (reverse)\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"id: 1013\\nname: 'Room #1013'\\ncolor: \\\"\\\"\\ndescription: []\\nexits: {}\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1013\\nname: 'Room #1013'\\ncolor: \\\"\\\"\\ndescription: []\\nexits: {}\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:42-04:00\",\"description\":\"delete room 1013\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"id: 1013\\nname: 'Room #1013'\\ncolor: \\\"\\\"\\ndescription: []\\nexits: {}\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:43:43-04:00\",\"description\":\"update room 1007 (add exit south to 1013)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\n south:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:43-04:00\",\"description\":\"create room 1013\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n north: 1007\\nid: 1013\\nname: 'Room #1013'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:43:44-04:00\",\"description\":\"update room 1013 (add exit east to 1014)\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"exits:\\n north: 1007\\nid: 1013\\nname: 'Room #1013'\\n\",\"new_content\":\"id: 1013\\nname: 'Room #1013'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1014\\n north:\\n room: 1007\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:44-04:00\",\"description\":\"create room 1014\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n west: 1013\\nid: 1014\\nname: 'Room #1014'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:43:45-04:00\",\"description\":\"update room 1014 (add exit north to 1015)\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"exits:\\n west: 1013\\nid: 1014\\nname: 'Room #1014'\\n\",\"new_content\":\"id: 1014\\nname: 'Room #1014'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 1015\\n west:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:45-04:00\",\"description\":\"create room 1015\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n south: 1014\\nid: 1015\\nname: 'Room #1015'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:43:46-04:00\",\"description\":\"update room 1015 (add exit east to 1018)\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"exits:\\n south: 1014\\nid: 1015\\nname: 'Room #1015'\\n\",\"new_content\":\"id: 1015\\nname: 'Room #1015'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1018\\n south:\\n room: 1014\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:46-04:00\",\"description\":\"create room 1018\",\"file_path\":\"data/rooms/intro/1018.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n west: 1015\\nid: 1018\\nname: 'Room #1018'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:43:46-04:00\",\"description\":\"update room 1018 (add exit south to 1019)\",\"file_path\":\"data/rooms/intro/1018.yaml\",\"old_content\":\"exits:\\n west: 1015\\nid: 1018\\nname: 'Room #1018'\\n\",\"new_content\":\"id: 1018\\nname: 'Room #1018'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n south:\\n room: 1019\\n west:\\n room: 1015\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:46-04:00\",\"description\":\"create room 1019\",\"file_path\":\"data/rooms/intro/1019.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n north: 1018\\nid: 1019\\nname: 'Room #1019'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:43:47-04:00\",\"description\":\"link 1019 west 1014\",\"file_path\":\"data/rooms/intro/1019.yaml\",\"old_content\":\"exits:\\n north: 1018\\nid: 1019\\nname: 'Room #1019'\\n\",\"new_content\":\"id: 1019\\nname: 'Room #1019'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 1018\\n west:\\n room: 1014\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:47-04:00\",\"description\":\"link 1014 east 1019 (reverse)\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"id: 1014\\nname: 'Room #1014'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 1015\\n west:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1014\\nname: 'Room #1014'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1019\\n north:\\n room: 1015\\n west:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:43:50-04:00\",\"description\":\"delete room 1019\",\"file_path\":\"data/rooms/intro/1019.yaml\",\"old_content\":\"id: 1019\\nname: 'Room #1019'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 1018\\n west:\\n room: 1014\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:46:51-04:00\",\"description\":\"delete room 1018 (cleaned 1 exits)\",\"file_path\":\"data/rooms/intro/1018.yaml\",\"old_content\":\"id: 1018\\nname: 'Room #1018'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n south:\\n room: 1019\\n west:\\n room: 1015\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:46:53-04:00\",\"description\":\"delete room 1015 (cleaned 1 exits)\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"id: 1015\\nname: 'Room #1015'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n south:\\n room: 1014\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:46:56-04:00\",\"description\":\"delete room 1014 (cleaned 1 exits)\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"id: 1014\\nname: 'Room #1014'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1019\\n west:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:47:00-04:00\",\"description\":\"delete room 1013 (cleaned 1 exits)\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"id: 1013\\nname: 'Room #1013'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 1007\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:47:04-04:00\",\"description\":\"delete room 1007 (cleaned 1 exits)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"\",\"is_delete\":true,\"is_create\":false},{\"time\":\"2026-06-30T03:47:05-04:00\",\"description\":\"update room 2004 (add exit east to 1007)\",\"file_path\":\"data/rooms/intro/2004.yaml\",\"old_content\":\"id: 2004\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n north:\\n room: 2003\\n northwest:\\n room: 2002\\n west:\\n room: 2005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 2004\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 2003\\n northwest:\\n room: 2002\\n west:\\n room: 2005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:05-04:00\",\"description\":\"create room 1007\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n west: 2004\\nid: 1007\\nname: 'Room #1007'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:47:06-04:00\",\"description\":\"update room 1007 (add exit east to 1013)\",\"file_path\":\"data/rooms/intro/1007.yaml\",\"old_content\":\"exits:\\n west: 2004\\nid: 1007\\nname: 'Room #1007'\\n\",\"new_content\":\"id: 1007\\nname: 'Room #1007'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n east:\\n room: 1013\\n west:\\n room: 2004\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:06-04:00\",\"description\":\"create room 1013\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n west: 1007\\nid: 1013\\nname: 'Room #1013'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:47:07-04:00\",\"description\":\"update room 1013 (add exit northeast to 1014)\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"exits:\\n west: 1007\\nid: 1013\\nname: 'Room #1013'\\n\",\"new_content\":\"id: 1013\\nname: 'Room #1013'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n northeast:\\n room: 1014\\n west:\\n room: 1007\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:07-04:00\",\"description\":\"create room 1014\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n southwest: 1013\\nid: 1014\\nname: 'Room #1014'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:47:08-04:00\",\"description\":\"update room 1014 (add exit northeast to 1015)\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"exits:\\n southwest: 1013\\nid: 1014\\nname: 'Room #1014'\\n\",\"new_content\":\"id: 1014\\nname: 'Room #1014'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n northeast:\\n room: 1015\\n southwest:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:08-04:00\",\"description\":\"create room 1015\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n southwest: 1014\\nid: 1015\\nname: 'Room #1015'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:47:09-04:00\",\"description\":\"update room 1015 (add exit northwest to 1018)\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"exits:\\n southwest: 1014\\nid: 1015\\nname: 'Room #1015'\\n\",\"new_content\":\"id: 1015\\nname: 'Room #1015'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n northwest:\\n room: 1018\\n southwest:\\n room: 1014\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:09-04:00\",\"description\":\"create room 1018\",\"file_path\":\"data/rooms/intro/1018.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n southeast: 1015\\nid: 1018\\nname: 'Room #1018'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:47:09-04:00\",\"description\":\"link 1018 west 1016\",\"file_path\":\"data/rooms/intro/1018.yaml\",\"old_content\":\"exits:\\n southeast: 1015\\nid: 1018\\nname: 'Room #1018'\\n\",\"new_content\":\"id: 1018\\nname: 'Room #1018'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n southeast:\\n room: 1015\\n west:\\n room: 1016\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:09-04:00\",\"description\":\"link 1016 east 1018 (reverse)\",\"file_path\":\"data/rooms/intro/1016.yaml\",\"old_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n south:\\n room: 1009\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1016\\nname: New Room\\ncolor: \\\"97\\\"\\ndescription:\\n - text: A featureless room.\\nexits:\\n down:\\n room: 1017\\n east:\\n room: 1018\\n south:\\n room: 1009\\n southwest:\\n room: 1005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:17-04:00\",\"description\":\"update room 1018\",\"file_path\":\"data/rooms/intro/1018.yaml\",\"old_content\":\"id: 1018\\nname: 'Room #1018'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n southeast:\\n room: 1015\\n west:\\n room: 1016\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n southeast:\\n room: 1015\\n west:\\n room: 1016\\nhazard: \\\"\\\"\\nid: 1018\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1018'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:21-04:00\",\"description\":\"update room 1018\",\"file_path\":\"data/rooms/intro/1018.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n southeast:\\n room: 1015\\n west:\\n room: 1016\\nhazard: \\\"\\\"\\nid: 1018\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1018'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n southeast:\\n room: 1015\\n west:\\n room: 1016\\nhazard: \\\"\\\"\\nid: 1018\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1018'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:25-04:00\",\"description\":\"update room 1018\",\"file_path\":\"data/rooms/intro/1018.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n southeast:\\n room: 1015\\n west:\\n room: 1016\\nhazard: \\\"\\\"\\nid: 1018\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1018'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n southeast:\\n room: 1015\\n west:\\n room: 1016\\nhazard: \\\"\\\"\\nid: 1018\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1018'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:26-04:00\",\"description\":\"update room 1018\",\"file_path\":\"data/rooms/intro/1018.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n southeast:\\n room: 1015\\n west:\\n room: 1016\\nhazard: \\\"\\\"\\nid: 1018\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1018'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: D0\\ndescription: []\\nexits:\\n southeast:\\n room: 1015\\n west:\\n room: 1016\\nhazard: \\\"\\\"\\nid: 1018\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1018'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:33-04:00\",\"description\":\"update room 1015\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"id: 1015\\nname: 'Room #1015'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n northwest:\\n room: 1018\\n southwest:\\n room: 1014\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n northwest:\\n room: 1018\\n southwest:\\n room: 1014\\nhazard: \\\"\\\"\\nid: 1015\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1015'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:34-04:00\",\"description\":\"update room 1015\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n northwest:\\n room: 1018\\n southwest:\\n room: 1014\\nhazard: \\\"\\\"\\nid: 1015\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1015'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: 0C\\ndescription: []\\nexits:\\n northwest:\\n room: 1018\\n southwest:\\n room: 1014\\nhazard: \\\"\\\"\\nid: 1015\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1015'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:36-04:00\",\"description\":\"update room 1015\",\"file_path\":\"data/rooms/intro/1015.yaml\",\"old_content\":\"block_transport: false\\ncolor: 0C\\ndescription: []\\nexits:\\n northwest:\\n room: 1018\\n southwest:\\n room: 1014\\nhazard: \\\"\\\"\\nid: 1015\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1015'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: 0C\\ndescription: []\\nexits:\\n northwest:\\n room: 1018\\n southwest:\\n room: 1014\\nhazard: \\\"\\\"\\nid: 1015\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1015'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:40-04:00\",\"description\":\"update room 1014\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"id: 1014\\nname: 'Room #1014'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n northeast:\\n room: 1015\\n southwest:\\n room: 1013\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n northeast:\\n room: 1015\\n southwest:\\n room: 1013\\nhazard: \\\"\\\"\\nid: 1014\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1014'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:41-04:00\",\"description\":\"update room 1014\",\"file_path\":\"data/rooms/intro/1014.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n northeast:\\n room: 1015\\n southwest:\\n room: 1013\\nhazard: \\\"\\\"\\nid: 1014\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1014'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: D5\\ndescription: []\\nexits:\\n northeast:\\n room: 1015\\n southwest:\\n room: 1013\\nhazard: \\\"\\\"\\nid: 1014\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1014'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:45-04:00\",\"description\":\"update room 1013\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"id: 1013\\nname: 'Room #1013'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n northeast:\\n room: 1014\\n west:\\n room: 1007\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n northeast:\\n room: 1014\\n west:\\n room: 1007\\nhazard: \\\"\\\"\\nid: 1013\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1013'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:46-04:00\",\"description\":\"update room 1013\",\"file_path\":\"data/rooms/intro/1013.yaml\",\"old_content\":\"block_transport: false\\ncolor: \\\"00\\\"\\ndescription: []\\nexits:\\n northeast:\\n room: 1014\\n west:\\n room: 1007\\nhazard: \\\"\\\"\\nid: 1013\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1013'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"new_content\":\"block_transport: false\\ncolor: \\\"72\\\"\\ndescription: []\\nexits:\\n northeast:\\n room: 1014\\n west:\\n room: 1007\\nhazard: \\\"\\\"\\nid: 1013\\nitem_spawns: []\\nmobs: []\\nname: 'Room #1013'\\nobjects: []\\non_enter: []\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:57-04:00\",\"description\":\"update room 2004 (add exit south to 1019)\",\"file_path\":\"data/rooms/intro/2004.yaml\",\"old_content\":\"id: 2004\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 2003\\n northwest:\\n room: 2002\\n west:\\n room: 2005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 2004\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 2003\\n northwest:\\n room: 2002\\n south:\\n room: 1019\\n west:\\n room: 2005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:57-04:00\",\"description\":\"create room 1019\",\"file_path\":\"data/rooms/intro/1019.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n north: 2004\\nid: 1019\\nname: 'Room #1019'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:47:58-04:00\",\"description\":\"update room 1019 (add exit south to 1020)\",\"file_path\":\"data/rooms/intro/1019.yaml\",\"old_content\":\"exits:\\n north: 2004\\nid: 1019\\nname: 'Room #1019'\\n\",\"new_content\":\"id: 1019\\nname: 'Room #1019'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\n south:\\n room: 1020\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:47:58-04:00\",\"description\":\"create room 1020\",\"file_path\":\"data/rooms/intro/1020.yaml\",\"old_content\":\"\",\"new_content\":\"exits:\\n north: 1019\\nid: 1020\\nname: 'Room #1020'\\n\",\"is_delete\":false,\"is_create\":true},{\"time\":\"2026-06-30T03:48:00-04:00\",\"description\":\"unlink 2004 south 1019\",\"file_path\":\"data/rooms/intro/2004.yaml\",\"old_content\":\"id: 2004\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 2003\\n northwest:\\n room: 2002\\n south:\\n room: 1019\\n west:\\n room: 2005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 2004\\nname: Test Room\\ncolor: \\\"\\\"\\ndescription:\\n - text: It's a test room\\nexits:\\n east:\\n room: 1007\\n north:\\n room: 2003\\n northwest:\\n room: 2002\\n west:\\n room: 2005\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false},{\"time\":\"2026-06-30T03:48:00-04:00\",\"description\":\"unlink 1019 north 2004 (reverse)\",\"file_path\":\"data/rooms/intro/1019.yaml\",\"old_content\":\"id: 1019\\nname: 'Room #1019'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n north:\\n room: 2004\\n south:\\n room: 1020\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"new_content\":\"id: 1019\\nname: 'Room #1019'\\ncolor: \\\"\\\"\\ndescription: []\\nexits:\\n south:\\n room: 1020\\nobjects: []\\nitem_spawns: []\\nmobs: []\\non_enter: []\\nhazard: \\\"\\\"\\nblock_transport: false\\ntriggers: []\\n\",\"is_delete\":false,\"is_create\":false}],\"redo\":null}","new_content":"","is_delete":true,"is_create":false}],"redo":null} \ No newline at end of file
diff --git a/internal/admin/static/editor.js b/internal/admin/static/editor.js
index fe0ef10..593bf7f 100644
--- a/internal/admin/static/editor.js
+++ b/internal/admin/static/editor.js
@@ -178,7 +178,6 @@ function saveItem(id) {
}
function deleteItem(id) {
- if (!confirm('Delete ' + editorType + ' "' + id + '"?')) return;
API.del('/api/' + editorType + '/' + encodeURIComponent(id)).then(function() {
notify(editorType + ' ' + id + ' deleted', 'success');
updateUndoBar();
diff --git a/internal/admin/static/mobeditor.js b/internal/admin/static/mobeditor.js
index 29664dc..2c8db21 100644
--- a/internal/admin/static/mobeditor.js
+++ b/internal/admin/static/mobeditor.js
@@ -248,6 +248,8 @@ function renderMobCard(sec, data) {
h += renderMobCoreCard(data);
} else if (sec.id === 'combat') {
h += renderMobCombatCard(data);
+ } else if (sec.id === 'drops') {
+ h += renderMobDropsCard(data);
} else if (sec.isArray) {
h += renderMobArraySection(sec, data);
} else if (sec.subtables) {
@@ -579,6 +581,27 @@ function renderMobSubtable(sec, st, data) {
return h;
}
+function renderMobDropsCard(data) {
+ var h = '';
+ var drops = data.drops || {};
+ var hasRemains = drops.remains !== undefined && drops.remains !== null;
+
+ if (hasRemains) {
+ h += '<div class="obj-sub-row" style="margin-bottom:8px">';
+ h += '<label class="obj-field obj-search"><span>Remains</span><div style="position:relative;width:100%"><input id="f_drops_remains" value="' + escAttr(String(drops.remains || '')) + '" class="search-input" data-search-type="items" data-field-path="drops.remains" placeholder="Search items..."><div class="search-results" style="display:none"></div></div></label>';
+ h += '<button class="btn btn-sm btn-danger obj-sub-remove" onclick="ced_syncDOMToData(mobData);delete mobData.drops.remains;renderMobEditor(mobID,mobData)" style="margin-bottom:0">X</button>';
+ h += '</div>';
+ } else {
+ h += '<button class="btn btn-sm obj-sub-add" onclick="ced_syncDOMToData(mobData);mobData.drops.remains=\'\';renderMobEditor(mobID,mobData)">+ Add Remains</button>';
+ }
+
+ var lootSec = MOB_SECTIONS.find(function(s) { return s.id === 'drops'; });
+ var lootSt = lootSec.subtables[0];
+ h += renderMobLootSubtable(lootSec, lootSt, drops.loot || []);
+
+ return h;
+}
+
function renderMobLootSubtable(sec, st, arr) {
var byKey = {};
st.fields.forEach(function(f) { byKey[f[0]] = f; });
@@ -713,7 +736,7 @@ function mobAddSection() {
size: 'small'
};
} else if (id === 'drops') {
- mobData[sec.path] = {remains:'bones', loot:[]};
+ mobData[sec.path] = {loot:[]};
} else if (id === 'talk') {
mobData[sec.path] = {nodes:{start:{messages:[],options:[]}}};
} else if (id === 'shop') {
diff --git a/internal/admin/templates/layout.html b/internal/admin/templates/layout.html
index f6bd405..2a1ef36 100644
--- a/internal/admin/templates/layout.html
+++ b/internal/admin/templates/layout.html
@@ -19,10 +19,10 @@
<a href="/editor/hazards" class="{{if eq .Page "hazards"}}active{{end}}">Hazards</a>
<a href="/editor/techs" class="{{if eq .Page "techs"}}active{{end}}">Techs</a>
<a href="/editor/modules" class="{{if eq .Page "modules"}}active{{end}}">Modules</a>
+ <a href="/editor/triggers" class="{{if eq .Page "triggers"}}active{{end}}">Triggers</a>
<a href="/editor/players" class="{{if eq .Page "players"}}active{{end}}">Players</a>
<a href="/editor/dashboard" class="{{if eq .Page "dashboard"}}active{{end}}">Dashboard</a>
<a href="/editor/files" class="{{if eq .Page "files"}}active{{end}}">Files</a>
- <a href="/editor/triggers" class="{{if eq .Page "triggers"}}active{{end}}">Triggers</a>
<div class="undo-bar">
<span class="undo-label"></span>
<button class="undo-btn" onclick="doUndo()" title="">⟲ Undo</button>
@@ -39,10 +39,10 @@
{{else if eq .Page "hazards"}}{{template "body-hazards" .}}
{{else if eq .Page "techs"}}{{template "body-techs" .}}
{{else if eq .Page "modules"}}{{template "body-modules" .}}
+{{else if eq .Page "triggers"}}{{template "body-triggers" .}}
{{else if eq .Page "players"}}{{template "body-players" .}}
{{else if eq .Page "dashboard"}}{{template "body-dashboard" .}}
{{else if eq .Page "files"}}{{template "body-files" .}}
-{{else if eq .Page "triggers"}}{{template "body-triggers" .}}
{{else if eq .Page "duplicate-rooms"}}{{template "body-duplicate-rooms" .}}
{{else}}<p style="color:#888;text-align:center;margin-top:60px">Unknown page: {{.Page}}</p>{{end}}
</body>