diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm
index 7e8b1c8f38..259082a6ba 100644
--- a/code/controllers/configuration/config_entry.dm
+++ b/code/controllers/configuration/config_entry.dm
@@ -83,7 +83,7 @@
var/auto_trim = TRUE
/datum/config_entry/string/vv_edit_var(var_name, var_value)
- return var_name != "auto_trim" && ..()
+ return var_name != NAMEOF(src, auto_trim) && ..()
/datum/config_entry/string/ValidateAndSet(str_val, during_load)
if(!VASProcCallGuard(str_val))
@@ -110,7 +110,7 @@
return FALSE
/datum/config_entry/number/vv_edit_var(var_name, var_value)
- var/static/list/banned_edits = list("max_val", "min_val", "integer")
+ var/static/list/banned_edits = list(NAMEOF(src, max_val), NAMEOF(src, min_val), NAMEOF(src, integer))
return !(var_name in banned_edits) && ..()
/datum/config_entry/flag
@@ -216,7 +216,7 @@
return FALSE
/datum/config_entry/keyed_list/vv_edit_var(var_name, var_value)
- return var_name != "splitter" && ..()
+ return var_name != NAMEOF(src, splitter) && ..()
/datum/config_entry/keyed_list/proc/preprocess_key(key)
return key
diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm
index a16de2ba4c..4ee3a01956 100644
--- a/code/controllers/subsystem.dm
+++ b/code/controllers/subsystem.dm
@@ -210,10 +210,10 @@
/datum/controller/subsystem/vv_edit_var(var_name, var_value)
switch (var_name)
- if ("can_fire")
+ if (NAMEOF(src, can_fire))
//this is so the subsystem doesn't rapid fire to make up missed ticks causing more lag
if (var_value)
next_fire = world.time + wait
- if ("queued_priority") //editing this breaks things.
- return 0
+ if (NAMEOF(src, queued_priority)) //editing this breaks things.
+ return FALSE
. = ..()
diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm
index d6991a40b4..dc1f246e3d 100644
--- a/code/controllers/subsystem/blackbox.dm
+++ b/code/controllers/subsystem/blackbox.dm
@@ -60,9 +60,9 @@ SUBSYSTEM_DEF(blackbox)
/datum/controller/subsystem/blackbox/vv_edit_var(var_name, var_value)
switch(var_name)
- if("feedback")
+ if(NAMEOF(src, feedback))
return FALSE
- if("sealed")
+ if(NAMEOF(src, sealed))
if(var_value)
return Seal()
return FALSE
diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm
index b19cf47693..bd843f959d 100644
--- a/code/controllers/subsystem/title.dm
+++ b/code/controllers/subsystem/title.dm
@@ -47,7 +47,7 @@ SUBSYSTEM_DEF(title)
. = ..()
if(.)
switch(var_name)
- if("icon")
+ if(NAMEOF(src, icon))
if(splash_turf)
splash_turf.icon = icon
@@ -66,4 +66,4 @@ SUBSYSTEM_DEF(title)
icon = SStitle.icon
splash_turf = SStitle.splash_turf
file_path = SStitle.file_path
- previous_icon = SStitle.previous_icon
\ No newline at end of file
+ previous_icon = SStitle.previous_icon
diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm
index 51dc4ee8f7..7adc634621 100644
--- a/code/datums/components/material_container.dm
+++ b/code/datums/components/material_container.dm
@@ -105,7 +105,7 @@
/// Proc specifically for inserting items, returns the amount of materials entered.
/datum/component/material_container/proc/insert_item(obj/item/I, var/multiplier = 1, stack_amt)
- if(!I)
+ if(QDELETED(I))
return FALSE
multiplier = CEILING(multiplier, 0.01)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 5d29ef1598..47c1e37979 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -741,7 +741,7 @@
flags_1 |= ADMIN_SPAWNED_1
. = ..()
switch(var_name)
- if("color")
+ if(NAMEOF(src, color))
add_atom_colour(color, ADMIN_COLOUR_PRIORITY)
/atom/vv_get_dropdown()
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 9736f473e8..0238529195 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -120,25 +120,25 @@
if((var_name in careful_edits) && (var_value % world.icon_size) != 0)
return FALSE
switch(var_name)
- if("x")
+ if(NAMEOF(src, x))
var/turf/T = locate(var_value, y, z)
if(T)
forceMove(T)
return TRUE
return FALSE
- if("y")
+ if(NAMEOF(src, y))
var/turf/T = locate(x, var_value, z)
if(T)
forceMove(T)
return TRUE
return FALSE
- if("z")
+ if(NAMEOF(src, z))
var/turf/T = locate(x, y, var_value)
if(T)
forceMove(T)
return TRUE
return FALSE
- if("loc")
+ if(NAMEOF(src, loc))
if(istype(var_value, /atom))
forceMove(var_value)
return TRUE
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 8959cd8cc9..68f5c8de08 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -188,7 +188,7 @@
/obj/machinery/door/airlock/vv_edit_var(var_name)
. = ..()
switch (var_name)
- if ("cyclelinkeddir")
+ if (NAMEOF(src, cyclelinkeddir))
cyclelinkairlock()
/obj/machinery/door/airlock/check_access_ntnet(datum/netdata/data)
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 3bb67e2a1c..8937106601 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -287,7 +287,7 @@
if(!.)
return
switch(var_name)
- if("shuttle_id")
+ if(NAMEOF(src, shuttle_id))
update()
/obj/machinery/status_display/shuttle/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override)
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index db82093f0b..5b1b86b9e4 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -224,7 +224,7 @@
. = ..()
if(.)
switch(var_name)
- if("assignment","registered_name")
+ if(NAMEOF(src, assignment),NAMEOF(src, registered_name)) //,NAMEOF(src, registered_age))
update_label()
/obj/item/card/id/attack_self(mob/user)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index ba3eba9bd3..fb3b1535ed 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -37,13 +37,9 @@
if("anchored")
setAnchored(vval)
return TRUE
- if("obj_flags")
+ if(NAMEOF(src, obj_flags))
if ((obj_flags & DANGEROUS_POSSESSION) && !(vval & DANGEROUS_POSSESSION))
return FALSE
- if("control_object")
- var/obj/O = vval
- if(istype(O) && (O.obj_flags & DANGEROUS_POSSESSION))
- return FALSE
return ..()
/obj/Initialize()
diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm
index 65b487bd05..b78826b23b 100644
--- a/code/game/turfs/closed.dm
+++ b/code/game/turfs/closed.dm
@@ -83,7 +83,7 @@
. = ..()
if(.)
switch(var_name)
- if("icon")
+ if(NAMEOF(src, icon))
SStitle.icon = icon
/turf/closed/indestructible/riveted
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index bbd6b55e4f..68b9a8e341 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -55,7 +55,7 @@
if(AH)
message_admins("[key_name_admin(src)] has started replying to [key_name(C, 0, 0)]'s admin help.")
- var/msg = input(src,"Message:", "Private message to [key_name(C, 0, 0)]") as message|null
+ var/msg = stripped_multiline_input(src,"Message:", "Private message to [key_name(C, 0, 0)]")
if (!msg)
message_admins("[key_name_admin(src)] has cancelled their reply to [key_name(C, 0, 0)]'s admin help.")
return
@@ -87,10 +87,10 @@
if(irc)
- if(!ircreplyamount) //to prevent people from spamming irc
+ if(!ircreplyamount) //to prevent people from spamming irc/discord
return
if(!msg)
- msg = input(src,"Message:", "Private message to Administrator") as text|null
+ msg = stripped_multiline_input(src,"Message:", "Private message to Administrator")
if(!msg)
return
@@ -112,7 +112,7 @@
//get message text, limit it's length.and clean/escape html
if(!msg)
- msg = input(src,"Message:", "Private message to [key_name(recipient, 0, 0)]") as message|null
+ msg = stripped_multiline_input(src,"Message:", "Private message to [key_name(recipient, 0, 0)]")
msg = trim(msg)
if(!msg)
return
@@ -191,7 +191,7 @@
spawn() //so we don't hold the caller proc up
var/sender = src
var/sendername = key
- var/reply = input(recipient, msg,"Admin PM from-[sendername]", "") as text|null //show message and await a reply
+ var/reply = stripped_multiline_input(recipient, msg,"Admin PM from-[sendername]", "") //show message and await a reply
if(recipient && reply)
if(sender)
recipient.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them
diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm
index d0e36394ab..e559313aff 100644
--- a/code/modules/antagonists/swarmer/swarmer.dm
+++ b/code/modules/antagonists/swarmer/swarmer.dm
@@ -399,13 +399,13 @@
return FALSE
/obj/structure/lattice/catwalk/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
- . = ..()
var/turf/here = get_turf(src)
for(var/A in here.contents)
var/obj/structure/cable/C = A
if(istype(C))
to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.")
return FALSE
+ return ..()
/obj/item/deactivated_swarmer/IntegrateAmount()
return 50
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 8ae002dd2f..0d98fcecd6 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -891,13 +891,13 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
/client/vv_edit_var(var_name, var_value)
switch (var_name)
- if ("holder")
+ if (NAMEOF(src, holder))
return FALSE
- if ("ckey")
+ if (NAMEOF(src, ckey))
return FALSE
- if ("key")
+ if (NAMEOF(src, key))
return FALSE
- if("view")
+ if(NAMEOF(src, view))
change_view(var_value)
return TRUE
. = ..()
diff --git a/code/modules/lighting/lighting_area.dm b/code/modules/lighting/lighting_area.dm
index 58e9a4337a..7e54456483 100644
--- a/code/modules/lighting/lighting_area.dm
+++ b/code/modules/lighting/lighting_area.dm
@@ -24,7 +24,7 @@
/area/vv_edit_var(var_name, var_value)
switch(var_name)
- if("dynamic_lighting")
+ if(NAMEOF(src, dynamic_lighting))
set_dynamic_lighting(var_value)
return TRUE
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm
index 779dd9c3ea..71702bef12 100644
--- a/code/modules/lighting/lighting_atom.dm
+++ b/code/modules/lighting/lighting_atom.dm
@@ -89,17 +89,17 @@
/atom/vv_edit_var(var_name, var_value)
switch (var_name)
- if ("light_range")
+ if (NAMEOF(src, light_range))
set_light(l_range=var_value)
datum_flags |= DF_VAR_EDITED
return TRUE
- if ("light_power")
+ if (NAMEOF(src, light_power))
set_light(l_power=var_value)
datum_flags |= DF_VAR_EDITED
return TRUE
- if ("light_color")
+ if (NAMEOF(src, light_color))
set_light(l_color=var_value)
datum_flags |= DF_VAR_EDITED
return TRUE
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 512fa8f3e4..940ee089e5 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -98,6 +98,8 @@
process_ore(AM)
/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O)
+ if(QDELETED(O))
+ return
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
var/material_amount = materials.get_item_material_amount(O)
if(!materials.has_space(material_amount))
diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm
index a7b7a84b27..8a6193ec0c 100644
--- a/code/modules/mining/machine_redemption.dm
+++ b/code/modules/mining/machine_redemption.dm
@@ -57,6 +57,8 @@
. += "The status display reads: Smelting [ore_multiplier] sheet(s) per piece of ore.
Reward point generation at [point_upgrade*100]%.
Ore pickup speed at [ore_pickup_rate]."
/obj/machinery/mineral/ore_redemption/proc/smelt_ore(obj/item/stack/ore/O)
+ if(QDELETED(O))
+ return
var/datum/component/material_container/mat_container = materials.mat_container
if (!mat_container)
return
diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm
index 5a83955bce..a5ff27e75e 100644
--- a/code/modules/mining/machine_stacking.dm
+++ b/code/modules/mining/machine_stacking.dm
@@ -92,6 +92,8 @@
return ..()
/obj/machinery/mineral/stacking_machine/HasProximity(atom/movable/AM)
+ if(QDELETED(AM))
+ return
if(istype(AM, /obj/item/stack/sheet) && AM.loc == get_step(src, input_dir))
process_sheet(AM)
@@ -104,6 +106,8 @@
return TRUE
/obj/machinery/mineral/stacking_machine/proc/process_sheet(obj/item/stack/sheet/inp)
+ if(QDELETED(inp))
+ return
var/key = inp.merge_type
var/obj/item/stack/sheet/storage = stack_list[key]
if(!storage) //It's the first of this sheet added
diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm
index 84c6c416b7..f8e34d8fd7 100644
--- a/code/modules/mining/mint.dm
+++ b/code/modules/mining/mint.dm
@@ -123,3 +123,5 @@
bag_to_use = new(src) //make a new bag if we can't find or use the old one.
unload_mineral(bag_to_use) //just forcemove memes.
O.forceMove(bag_to_use) //don't bother sending the signal, the new bag is empty and all that.
+
+ SSblackbox.record_feedback("amount", "coins_minted", 1)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 397af1b9d0..d10616d9eb 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -837,13 +837,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/dead/observer/vv_edit_var(var_name, var_value)
. = ..()
switch(var_name)
- if("icon")
+ if(NAMEOF(src, icon))
ghostimage_default.icon = icon
ghostimage_simple.icon = icon
- if("icon_state")
+ if(NAMEOF(src, icon_state))
ghostimage_default.icon_state = icon_state
ghostimage_simple.icon_state = icon_state
- if("fun_verbs")
+ if(NAMEOF(src, fun_verbs))
if(fun_verbs)
verbs += /mob/dead/observer/verb/boo
verbs += /mob/dead/observer/verb/possess
@@ -925,7 +925,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/dead/observer/vv_edit_var(var_name, var_value)
. = ..()
- if(var_name == "invisibility")
+ if(var_name == NAMEOF(src, invisibility))
set_invisibility(invisibility) // updates light
/proc/set_observer_default_invisibility(amount, message=null)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index c7ed6e743d..892518d6ba 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1196,30 +1196,29 @@
/mob/living/vv_edit_var(var_name, var_value)
switch(var_name)
- if ("maxHealth")
+ if (NAMEOF(src, maxHealth))
if (!isnum(var_value) || var_value <= 0)
return FALSE
- if("stat")
+ if(NAMEOF(src, stat))
if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life
GLOB.dead_mob_list -= src
GLOB.alive_mob_list += src
if((stat < DEAD) && (var_value == DEAD))//Kill he
GLOB.alive_mob_list -= src
GLOB.dead_mob_list += src
+ if(NAMEOF(src, health)) //this doesn't work. gotta use procs instead.
+ return FALSE
. = ..()
switch(var_name)
- if("eye_blind")
+ if(NAMEOF(src, eye_blind))
set_blindness(var_value)
- if("eye_damage")
- var/obj/item/organ/eyes/E = getorganslot(ORGAN_SLOT_EYES)
- E?.setOrganDamage(var_value)
- if("eye_blurry")
+ if(NAMEOF(src, eye_blurry))
set_blurriness(var_value)
- if("maxHealth")
+ if(NAMEOF(src, maxHealth))
updatehealth()
- if("resize")
+ if(NAMEOF(src, resize))
update_transform()
- if("lighting_alpha")
+ if(NAMEOF(src, lighting_alpha))
sync_lighting_plane_alpha()
/mob/living/proc/do_adrenaline(
diff --git a/code/modules/movespeed/_movespeed_modifier.dm b/code/modules/movespeed/_movespeed_modifier.dm
index 0976f4d067..a338919c4b 100644
--- a/code/modules/movespeed/_movespeed_modifier.dm
+++ b/code/modules/movespeed/_movespeed_modifier.dm
@@ -144,6 +144,10 @@ GLOBAL_LIST_EMPTY(movespeed_modification_cache)
/// Handles the special case of editing the movement var
/mob/vv_edit_var(var_name, var_value)
+ if(var_name == NAMEOF(src, control_object))
+ var/obj/O = var_name
+ if(!istype(O) || (O.obj_flags & DANGEROUS_POSSESSION))
+ return FALSE
var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown))
var/diff
if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value))
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index a599ec9deb..c32afab342 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -50,6 +50,14 @@
name = "folder - '[inputvalue]'"
+/obj/item/folder/Destroy()
+ for(var/obj/important_thing in contents)
+ if(!(important_thing.resistance_flags & INDESTRUCTIBLE))
+ continue
+ important_thing.forceMove(drop_location()) //don't destroy round critical content such as objective documents.
+ return ..()
+
+
/obj/item/folder/attack_self(mob/user)
var/dat = "