Version
v2.17.0.alpha
What happened?
Sorry for the wall of text, I'm trying to be thorough and don't know how much is needed in order to be helpful.
When editing a map, I hid an object on the map by instantiating it within the contents of another object. When the hidden object uses curly braces to override values within it, StrongDMM fails to load the map properly. It can edit the map and save the map perfectly fine, but upon closing and re-opening, I am greeted by a message telling me a host of types are unrecognized and will be removed on save.

On the left, the error with two objects containing customized instantiated objects. On the right, the same map but with one of those objects removed.
I am working on alterations to a map for Scav Station, a Baystation/Nebula fork based on the webcomic Out of Placers, by Valsalia. My character is named Vayryn, and has a personal ship named "The Murphy" docked to the station. I had added a customized energy gun hidden in the toilet's cistern and a toolbelt with personalized tools to her closet. Since neither object has a behavior to pull objects on its tile into its contents, and I didn't want to make alterations to the code side of things, I was using newlist() to create them with contents.
I couldn't find where in the 5,815 KB log file the error happened, so here's some literal lines from the .dmm file to give an idea of the kinds of things that triggered the error.
"iF" = (/obj/structure/hygiene/toilet{contents = newlist(/obj/item/gun/energy/gun/reloadable{self_recharge = 1; name = "Sword of Light"; desc = "It appears to be a modified LAEP90 Perun, a versatile energy based sidearm, capable of switching between low, medium and high power projectile settings. In other words: stun, shock or kill. The name \"Sword of Light\" has been etched into the plate where a serial number should be. <span class='danger'>It gives you a weird vibe.</span>"}),/turf/floor/tiled/freezer,/area/ministation/Murphy/bathroom)
"YK" = (/obj/structure/table/reinforced,/obj/item/toolbox/mechanical,/obj/item/toolbox/electrical,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1; level = 2},/obj/machinery/light/small,/obj/item/belt/utility{desc = "A belt of durable leather, festooned with hooks, slots, and pouches. The name \"Vayryn\" is stamped into the waistband part."; contents = newlist(/obj/item/screwdriver/gold{desc = "Your archetypal flathead screwdriver, with a nice, heavy polymer handle. This one has the name \"Vayryn\" engraved into the handle."; handle_color = "#3366cc"},/obj/item/wirecutters{handle_color = "#89cff0"; desc = "A special pair of pliers with cutting edges. Various brackets and manipulators built into the handle allow it to repair severed wiring. This one has the name \"Vayryn\" engraved into the handle."},/obj/item/wrench{desc = "A good, durable combination wrench, with self-adjusting, universal open- and ring-end mechanisms to match a wide variety of nuts and bolts. This one has the name \"Vayryn\" engraved into the handle."; handle_color = "#800000"},/obj/item/crowbar/gold{desc = "A heavy crowbar, good and solid in your hand. This one has the name \"Vayryn\" engraved into the grip."; handle_color = "#800000"},/obj/item/stack/cable_coil/blue,/obj/item/multitool{desc = "This small, handheld device is made of durable, insulated plastic, and tipped with electrodes, perfect for interfacing with numerous machines. This one has the name \"Vayryn\" engraved onto the back."},/obj/item/weldingtool/largetank{desc = "A portable welding gun with a port for attaching fuel tanks. This one has the name \"Vayryn\" engraved onto the tool, with a clamshell drawn on the tank in marker."})},/turf/floor,/area/ministation/Murphy/maint/Vayryn)
I do not know if the error required the presence of a large amount of objects on the map. It's unlikely an issue was line length, as the "fixed" version has the second example with all the tools sitting on the table with the belt on the tile, so the line length is still roughly the same. The error appears to be triggered by the presence of nested curly braces. Creating a derived gun type in the code (/obj/item/gun/energy/gun/reloadable/vayryn) and inserting that into the toilet cistern via newlist() did not trigger the error.
Lines that do not trigger the error:
"iF" = (/obj/structure/hygiene/toilet{contents = newlist(/obj/item/gun/energy/gun/reloadable/vayryn); w_items = 3},/turf/floor/tiled/freezer,/area/ministation/Murphy/bathroom)
"YK" = (/obj/structure/table/reinforced,/obj/item/toolbox/mechanical,/obj/item/toolbox/electrical,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1; level = 2},/obj/machinery/light/small,/obj/item/screwdriver/gold{desc = "Your archetypal flathead screwdriver, with a nice, heavy polymer handle. This one has the name \"Vayryn\" engraved into the handle."; handle_color = "#3366cc"},/obj/item/wirecutters{handle_color = "#89cff0"; desc = "A special pair of pliers with cutting edges. Various brackets and manipulators built into the handle allow it to repair severed wiring. This one has the name \"Vayryn\" engraved into the handle."},/obj/item/wrench{desc = "A good, durable combination wrench, with self-adjusting, universal open- and ring-end mechanisms to match a wide variety of nuts and bolts. This one has the name \"Vayryn\" engraved into the handle."; handle_color = "#800000"},/obj/item/crowbar/gold{desc = "A heavy crowbar, good and solid in your hand. This one has the name \"Vayryn\" engraved into the grip."; handle_color = "#800000"},/obj/item/stack/cable_coil/blue,/obj/item/multitool{desc = "This small, handheld device is made of durable, insulated plastic, and tipped with electrodes, perfect for interfacing with numerous machines. This one has the name \"Vayryn\" engraved onto the back."},/obj/item/weldingtool/largetank{desc = "A portable welding gun with a port for attaching fuel tanks. This one has the name \"Vayryn\" engraved onto the tool, with a clamshell drawn on the tank in marker."},/turf/floor,/area/ministation/Murphy/maint/Vayryn)
(Previously I had forgotten to include w_items = 3 to the toilet for bookkeeping purposes, and now the belt is on the tile next to the pile of tools.)
I am happy to provide any assistance that would be useful, such as links to a repo or files needed to open maps (like the .dme along with .dmm files).
Reproduction
- Run StrongDMM
- Create an item that has a field to hold objects. In this instance, a toolbelt.
2a. The object should have a variable that contains a list of objects.
2b. In this instance, the Space Station 13 object /obj/item/belt/utility which has contents.
- In the
contents variable, use newlist() to create an object on mapload.
- Use curly braces to give the created object custom parameters.
4a. Such as newlist(/obj/item/screwdriver{desc = "Your archetypal flathead screwdriver, with a nice, heavy polymer handle. This one has the name \"Vayryn\" engraved into the handle."; handle_color = "#3366cc"}) to guarantee a blue-handled screwdriver with a character's name added to the description.
- Save the map.
- Close the map.
- Load the map.
- Be greeted with an error stating multiple types are now unrecognized, and there are holes all over the map where those items used to be.
Relevant log output
Version
v2.17.0.alpha
What happened?
Sorry for the wall of text, I'm trying to be thorough and don't know how much is needed in order to be helpful.
When editing a map, I hid an object on the map by instantiating it within the contents of another object. When the hidden object uses curly braces to override values within it, StrongDMM fails to load the map properly. It can edit the map and save the map perfectly fine, but upon closing and re-opening, I am greeted by a message telling me a host of types are unrecognized and will be removed on save.
I am working on alterations to a map for Scav Station, a Baystation/Nebula fork based on the webcomic Out of Placers, by Valsalia. My character is named Vayryn, and has a personal ship named "The Murphy" docked to the station. I had added a customized energy gun hidden in the toilet's cistern and a toolbelt with personalized tools to her closet. Since neither object has a behavior to pull objects on its tile into its contents, and I didn't want to make alterations to the code side of things, I was using
newlist()to create them with contents.I couldn't find where in the 5,815 KB log file the error happened, so here's some literal lines from the .dmm file to give an idea of the kinds of things that triggered the error.
"iF" = (/obj/structure/hygiene/toilet{contents = newlist(/obj/item/gun/energy/gun/reloadable{self_recharge = 1; name = "Sword of Light"; desc = "It appears to be a modified LAEP90 Perun, a versatile energy based sidearm, capable of switching between low, medium and high power projectile settings. In other words: stun, shock or kill. The name \"Sword of Light\" has been etched into the plate where a serial number should be. <span class='danger'>It gives you a weird vibe.</span>"}),/turf/floor/tiled/freezer,/area/ministation/Murphy/bathroom)"YK" = (/obj/structure/table/reinforced,/obj/item/toolbox/mechanical,/obj/item/toolbox/electrical,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1; level = 2},/obj/machinery/light/small,/obj/item/belt/utility{desc = "A belt of durable leather, festooned with hooks, slots, and pouches. The name \"Vayryn\" is stamped into the waistband part."; contents = newlist(/obj/item/screwdriver/gold{desc = "Your archetypal flathead screwdriver, with a nice, heavy polymer handle. This one has the name \"Vayryn\" engraved into the handle."; handle_color = "#3366cc"},/obj/item/wirecutters{handle_color = "#89cff0"; desc = "A special pair of pliers with cutting edges. Various brackets and manipulators built into the handle allow it to repair severed wiring. This one has the name \"Vayryn\" engraved into the handle."},/obj/item/wrench{desc = "A good, durable combination wrench, with self-adjusting, universal open- and ring-end mechanisms to match a wide variety of nuts and bolts. This one has the name \"Vayryn\" engraved into the handle."; handle_color = "#800000"},/obj/item/crowbar/gold{desc = "A heavy crowbar, good and solid in your hand. This one has the name \"Vayryn\" engraved into the grip."; handle_color = "#800000"},/obj/item/stack/cable_coil/blue,/obj/item/multitool{desc = "This small, handheld device is made of durable, insulated plastic, and tipped with electrodes, perfect for interfacing with numerous machines. This one has the name \"Vayryn\" engraved onto the back."},/obj/item/weldingtool/largetank{desc = "A portable welding gun with a port for attaching fuel tanks. This one has the name \"Vayryn\" engraved onto the tool, with a clamshell drawn on the tank in marker."})},/turf/floor,/area/ministation/Murphy/maint/Vayryn)I do not know if the error required the presence of a large amount of objects on the map. It's unlikely an issue was line length, as the "fixed" version has the second example with all the tools sitting on the table with the belt on the tile, so the line length is still roughly the same. The error appears to be triggered by the presence of nested curly braces. Creating a derived gun type in the code (
/obj/item/gun/energy/gun/reloadable/vayryn) and inserting that into the toilet cistern vianewlist()did not trigger the error.Lines that do not trigger the error:
"iF" = (/obj/structure/hygiene/toilet{contents = newlist(/obj/item/gun/energy/gun/reloadable/vayryn); w_items = 3},/turf/floor/tiled/freezer,/area/ministation/Murphy/bathroom)"YK" = (/obj/structure/table/reinforced,/obj/item/toolbox/mechanical,/obj/item/toolbox/electrical,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1; level = 2},/obj/machinery/light/small,/obj/item/screwdriver/gold{desc = "Your archetypal flathead screwdriver, with a nice, heavy polymer handle. This one has the name \"Vayryn\" engraved into the handle."; handle_color = "#3366cc"},/obj/item/wirecutters{handle_color = "#89cff0"; desc = "A special pair of pliers with cutting edges. Various brackets and manipulators built into the handle allow it to repair severed wiring. This one has the name \"Vayryn\" engraved into the handle."},/obj/item/wrench{desc = "A good, durable combination wrench, with self-adjusting, universal open- and ring-end mechanisms to match a wide variety of nuts and bolts. This one has the name \"Vayryn\" engraved into the handle."; handle_color = "#800000"},/obj/item/crowbar/gold{desc = "A heavy crowbar, good and solid in your hand. This one has the name \"Vayryn\" engraved into the grip."; handle_color = "#800000"},/obj/item/stack/cable_coil/blue,/obj/item/multitool{desc = "This small, handheld device is made of durable, insulated plastic, and tipped with electrodes, perfect for interfacing with numerous machines. This one has the name \"Vayryn\" engraved onto the back."},/obj/item/weldingtool/largetank{desc = "A portable welding gun with a port for attaching fuel tanks. This one has the name \"Vayryn\" engraved onto the tool, with a clamshell drawn on the tank in marker."},/turf/floor,/area/ministation/Murphy/maint/Vayryn)(Previously I had forgotten to include
w_items = 3to the toilet for bookkeeping purposes, and now the belt is on the tile next to the pile of tools.)I am happy to provide any assistance that would be useful, such as links to a repo or files needed to open maps (like the .dme along with .dmm files).
Reproduction
2a. The object should have a variable that contains a list of objects.
2b. In this instance, the Space Station 13 object
/obj/item/belt/utilitywhich hascontents.contentsvariable, usenewlist()to create an object on mapload.4a. Such as
newlist(/obj/item/screwdriver{desc = "Your archetypal flathead screwdriver, with a nice, heavy polymer handle. This one has the name \"Vayryn\" engraved into the handle."; handle_color = "#3366cc"})to guarantee a blue-handled screwdriver with a character's name added to the description.Relevant log output