diff --git a/code/__HELPERS/duplicating.dm b/code/__HELPERS/duplicating.dm index ff9a18426bc..9e88c5b7914 100644 --- a/code/__HELPERS/duplicating.dm +++ b/code/__HELPERS/duplicating.dm @@ -34,6 +34,7 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars, list( "parent", "parent_type", "power_supply", + "pixloc", "quirks", "reagents", "_signal_procs", @@ -65,14 +66,16 @@ GLOBAL_PROTECT(duplicate_forbidden_vars) var/atom/made_copy = new original.type(spawning_location) - for(var/atom_vars in original.vars - GLOB.duplicate_forbidden_vars) - if(islist(original.vars[atom_vars])) - var/list/var_list = original.vars[atom_vars] - made_copy.vars[atom_vars] = var_list.Copy() - continue - else if(istype(original.vars[atom_vars], /datum) || ismob(original.vars[atom_vars])) + for(var/atom_vars in (original.vars - GLOB.duplicate_forbidden_vars)) + var/var_value = original.vars[atom_vars] + if(isdatum(var_value)) continue // this would reference the original's object, that will break when it is used or deleted. - made_copy.vars[atom_vars] = original.vars[atom_vars] + + if(islist(var_value)) + var/list/var_list = var_value + var_value = var_list.Copy() + + made_copy.vars[atom_vars] = var_value if(isliving(made_copy)) if(iscarbon(made_copy))