diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index c5a34de23ec..010336b68ab 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1020,13 +1020,52 @@
* the object has been admin edited
*/
/atom/vv_edit_var(var_name, var_value)
+ switch(var_name)
+ if(NAMEOF(src, light_range))
+ if(light_system == STATIC_LIGHT)
+ set_light(l_range = var_value)
+ else
+ set_light_range(var_value)
+ . = TRUE
+ if(NAMEOF(src, light_power))
+ if(light_system == STATIC_LIGHT)
+ set_light(l_power = var_value)
+ else
+ set_light_power(var_value)
+ . = TRUE
+ if(NAMEOF(src, light_color))
+ if(light_system == STATIC_LIGHT)
+ set_light(l_color = var_value)
+ else
+ set_light_color(var_value)
+ . = TRUE
+ if(NAMEOF(src, light_on))
+ set_smoothed_icon_state(var_value)
+ . = TRUE
+ if(NAMEOF(src, light_flags))
+ set_light_flags(var_value)
+ . = TRUE
+ if(NAMEOF(src, smoothing_junction))
+ set_smoothed_icon_state(var_value)
+ . = TRUE
+ if(NAMEOF(src, opacity))
+ set_opacity(var_value)
+ . = TRUE
+
+ if(!isnull(.))
+ datum_flags |= DF_VAR_EDITED
+ return
+
if(!GLOB.Debug2)
flags_1 |= ADMIN_SPAWNED_1
+
. = ..()
+
switch(var_name)
if(NAMEOF(src, color))
add_atom_colour(color, ADMIN_COLOUR_PRIORITY)
+
/**
* Return the markup to for the dropdown list for the VV panel for this atom
*
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 0a7d2cc83bd..6a9f17fb13e 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -165,45 +165,56 @@
return FALSE
return T.zPassOut(src, direction, destination) && destination.zPassIn(src, direction, T)
+
/atom/movable/vv_edit_var(var_name, var_value)
- var/static/list/banned_edits = list("step_x", "step_y", "step_size", "bounds")
- var/static/list/careful_edits = list("bound_x", "bound_y", "bound_width", "bound_height")
- if(var_name in banned_edits)
+ var/static/list/banned_edits = list("step_x" = TRUE, "step_y" = TRUE, "step_size" = TRUE, "bounds" = TRUE)
+ var/static/list/careful_edits = list("bound_x" = TRUE, "bound_y" = TRUE, "bound_width" = TRUE, "bound_height" = TRUE)
+ if(banned_edits[var_name])
return FALSE //PLEASE no.
- if((var_name in careful_edits) && (var_value % world.icon_size) != 0)
+ if((careful_edits[var_name]) && (var_value % world.icon_size) != 0)
return FALSE
+
switch(var_name)
- if(NAMEOF(src, anchored))
- set_anchored(var_value)
- return TRUE
if(NAMEOF(src, x))
var/turf/T = locate(var_value, y, z)
if(T)
- forceMove(T)
+ admin_teleport(T)
return TRUE
return FALSE
if(NAMEOF(src, y))
var/turf/T = locate(x, var_value, z)
if(T)
- forceMove(T)
+ admin_teleport(T)
return TRUE
return FALSE
if(NAMEOF(src, z))
var/turf/T = locate(x, y, var_value)
if(T)
- forceMove(T)
+ admin_teleport(T)
return TRUE
return FALSE
if(NAMEOF(src, loc))
- if(istype(var_value, /atom))
- forceMove(var_value)
- return TRUE
- else if(isnull(var_value))
- moveToNullspace()
+ if(isatom(var_value) || isnull(var_value))
+ admin_teleport(var_value)
return TRUE
return FALSE
+ if(NAMEOF(src, anchored))
+ set_anchored(var_value)
+ . = TRUE
+ if(NAMEOF(src, pulledby))
+ set_pulledby(var_value)
+ . = TRUE
+ if(NAMEOF(src, glide_size))
+ set_glide_size(var_value)
+ . = TRUE
+
+ if(!isnull(.))
+ datum_flags |= DF_VAR_EDITED
+ return
+
return ..()
+
/atom/movable/proc/start_pulling(atom/movable/AM, state, force = move_force, supress_message = FALSE)
if(QDELETED(AM))
return FALSE
diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm
index ef56b4cd2a6..9237e7d07ff 100644
--- a/code/modules/admin/verbs/adminjump.dm
+++ b/code/modules/admin/verbs/adminjump.dm
@@ -105,13 +105,26 @@
return
var/atom/loc = get_turf(usr)
- log_admin("[key_name(usr)] teleported [key_name(M)] to [AREACOORD(loc)]")
- var/msg = "[key_name_admin(usr)] teleported [ADMIN_LOOKUPFLW(M)] to [ADMIN_VERBOSEJMP(loc)]"
- message_admins(msg)
- admin_ticket_log(M, msg)
- M.forceMove(loc)
+ M.admin_teleport(loc)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Get Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/// Proc to hook user-enacted teleporting behavior and keep logging of the event.
+/atom/movable/proc/admin_teleport(atom/new_location)
+ if(isnull(new_location))
+ log_admin("[key_name(usr)] teleported [key_name(src)] to nullspace")
+ moveToNullspace()
+ else
+ log_admin("[key_name(usr)] teleported [key_name(src)] to [AREACOORD(loc)]")
+ forceMove(new_location)
+
+/mob/admin_teleport(atom/new_location)
+ var/msg = "[key_name_admin(usr)] teleported [ADMIN_LOOKUPFLW(src)] to [isnull(new_location) ? "nullspace" : ADMIN_VERBOSEJMP(loc)]"
+ message_admins(msg)
+ admin_ticket_log(src, msg)
+ return ..()
+
+
/client/proc/Getkey()
set category = "Admin.Game"
set name = "Get Key"
diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm
index d0c9316e971..8f9bc67bbdb 100644
--- a/code/modules/lighting/lighting_atom.dm
+++ b/code/modules/lighting/lighting_atom.dm
@@ -84,34 +84,6 @@
L = thing
L.source_atom.update_light()
-/atom/vv_edit_var(var_name, var_value)
- switch (var_name)
- if (NAMEOF(src, light_range))
- if(light_system == STATIC_LIGHT)
- set_light(l_range = var_value)
- else
- set_light_range(var_value)
- datum_flags |= DF_VAR_EDITED
- return TRUE
-
- if (NAMEOF(src, light_power))
- if(light_system == STATIC_LIGHT)
- set_light(l_power = var_value)
- else
- set_light_power(var_value)
- datum_flags |= DF_VAR_EDITED
- return TRUE
-
- if (NAMEOF(src, light_color))
- if(light_system == STATIC_LIGHT)
- set_light(l_color = var_value)
- else
- set_light_color(var_value)
- datum_flags |= DF_VAR_EDITED
- return TRUE
-
- return ..()
-
/atom/proc/flash_lighting_fx(_range = FLASH_LIGHT_RANGE, _power = FLASH_LIGHT_POWER, _color = COLOR_WHITE, _duration = FLASH_LIGHT_DURATION)
return
diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm
index c939738f5cb..e0bf49b8e9e 100644
--- a/code/modules/mob/living/brain/MMI.dm
+++ b/code/modules/mob/living/brain/MMI.dm
@@ -74,8 +74,6 @@
var/fubar_brain = newbrain.suicided || brainmob.suiciding //brain is from a suicider
if(!fubar_brain && !(newbrain.organ_flags & ORGAN_FAILING)) // the brain organ hasn't been beaten to death, nor was from a suicider.
brainmob.set_stat(CONSCIOUS) //we manually revive the brain mob
- brainmob.remove_from_dead_mob_list()
- brainmob.add_to_alive_mob_list()
else if(!fubar_brain && newbrain.organ_flags & ORGAN_FAILING) // the brain is damaged, but not from a suicider
to_chat(user, "[src]'s indicator light turns yellow and its brain integrity alarm beeps softly. Perhaps you should check [newbrain] for damage.")
playsound(src, 'sound/machines/synth_no.ogg', 5, TRUE)
@@ -119,8 +117,6 @@
brainmob.set_stat(DEAD)
brainmob.emp_damage = 0
brainmob.reset_perspective() //so the brainmob follows the brain organ instead of the mmi. And to update our vision
- brainmob.remove_from_alive_mob_list() //Get outta here
- brainmob.add_to_dead_mob_list()
brain.brainmob = brainmob //Set the brain to use the brainmob
log_game("[key_name(user)] has ejected the brain of [key_name(brainmob)] from an MMI at [AREACOORD(src)]")
brainmob = null //Set mmi brainmob var to null
diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm
index 10237885e14..852c920b46c 100644
--- a/code/modules/mob/living/brain/posibrain.dm
+++ b/code/modules/mob/living/brain/posibrain.dm
@@ -149,8 +149,6 @@ GLOBAL_VAR(posibrain_notify_cooldown)
to_chat(brainmob, policy)
brainmob.mind.assigned_role = new_role
brainmob.set_stat(CONSCIOUS)
- brainmob.remove_from_dead_mob_list()
- brainmob.add_to_alive_mob_list()
visible_message(new_mob_message)
check_success()
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 5c7ab69a859..f7e7326289d 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -1298,3 +1298,22 @@
set_lying_angle(pick(90, 270))
else
set_lying_angle(new_lying_angle)
+
+
+/mob/living/carbon/vv_edit_var(var_name, var_value)
+ switch(var_name)
+ if(NAMEOF(src, disgust))
+ set_disgust(var_value)
+ . = TRUE
+ if(NAMEOF(src, hal_screwyhud))
+ set_screwyhud(var_value)
+ . = TRUE
+ if(NAMEOF(src, handcuffed))
+ set_handcuffed(var_value)
+ . = TRUE
+
+ if(!isnull(.))
+ datum_flags |= DF_VAR_EDITED
+ return
+
+ return ..()
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index 7bc8514d515..e89d75a4629 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -47,7 +47,6 @@
/mob/living/death(gibbed)
- var/was_dead_before = stat == DEAD
set_stat(DEAD)
unset_machine()
timeofdeath = world.time
@@ -59,9 +58,6 @@
deadchat_broadcast(" has died at [get_area_name(T)].", "[mind.name]", follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
if(mind)
mind.store_memory("Time of death: [tod]", 0)
- remove_from_alive_mob_list()
- if(!gibbed && !was_dead_before)
- add_to_dead_mob_list()
set_drugginess(0)
set_disgust(0)
SetSleeping(0, 0)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index d3f87e84790..061b7f75b84 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -609,8 +609,6 @@
if(full_heal)
fully_heal(admin_revive = admin_revive)
if(stat == DEAD && can_be_revived()) //in some cases you can't revive (e.g. no brain)
- remove_from_dead_mob_list()
- add_to_alive_mob_list()
set_suicide(FALSE)
set_stat(UNCONSCIOUS) //the mob starts unconscious,
updatehealth() //then we check if the mob should wake up.
@@ -1375,26 +1373,52 @@
if (client && ranged_ability?.ranged_mousepointer)
client.mouse_pointer_icon = ranged_ability.ranged_mousepointer
+
/mob/living/vv_edit_var(var_name, var_value)
switch(var_name)
if (NAMEOF(src, maxHealth))
if (!isnum(var_value) || var_value <= 0)
return FALSE
- if(NAMEOF(src, stat))
- if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life
- remove_from_dead_mob_list()
- add_to_alive_mob_list()
- if((stat < DEAD) && (var_value == DEAD))//Kill he
- remove_from_alive_mob_list()
- add_to_dead_mob_list()
if(NAMEOF(src, health)) //this doesn't work. gotta use procs instead.
return FALSE
+ if(NAMEOF(src, druggy))
+ set_drugginess(var_value)
+ . = TRUE
+ if(NAMEOF(src, resting))
+ set_resting(var_value)
+ . = TRUE
+ if(NAMEOF(src, fire_stacks))
+ set_fire_stacks(var_value)
+ . = TRUE
+ if(NAMEOF(src, lying_angle))
+ set_lying_angle(var_value)
+ . = TRUE
+ if(NAMEOF(src, buckled))
+ set_buckled(var_value)
+ . = TRUE
+ if(NAMEOF(src, num_legs))
+ set_num_legs(var_value)
+ . = TRUE
+ if(NAMEOF(src, usable_legs))
+ set_usable_legs(var_value)
+ . = TRUE
+ if(NAMEOF(src, num_hands))
+ set_num_hands(var_value)
+ . = TRUE
+ if(NAMEOF(src, usable_hands))
+ set_usable_hands(var_value)
+ . = TRUE
+ if(NAMEOF(src, body_position))
+ set_body_position(var_value)
+ . = TRUE
+
+ if(!isnull(.))
+ datum_flags |= DF_VAR_EDITED
+ return
+
. = ..()
+
switch(var_name)
- if(NAMEOF(src, eye_blind))
- set_blindness(var_value)
- if(NAMEOF(src, eye_blurry))
- set_blurriness(var_value)
if(NAMEOF(src, maxHealth))
updatehealth()
if(NAMEOF(src, resize))
@@ -1402,6 +1426,7 @@
if(NAMEOF(src, lighting_alpha))
sync_lighting_plane_alpha()
+
/mob/living/vv_get_header()
. = ..()
var/refid = REF(src)
@@ -1618,6 +1643,9 @@
if(HARD_CRIT)
if(stat != UNCONSCIOUS)
cure_blind(UNCONSCIOUS_TRAIT)
+ if(DEAD)
+ remove_from_dead_mob_list()
+ add_to_alive_mob_list()
switch(stat) //Current stat.
if(CONSCIOUS)
if(. >= UNCONSCIOUS)
@@ -1645,6 +1673,8 @@
ADD_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT)
if(DEAD)
REMOVE_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT)
+ remove_from_alive_mob_list()
+ add_to_dead_mob_list()
///Reports the event of the change in value of the buckled variable.
diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm
index 6adcb4949cd..b25372a07e1 100644
--- a/code/modules/mob/living/silicon/pai/death.dm
+++ b/code/modules/mob/living/silicon/pai/death.dm
@@ -6,6 +6,5 @@
clear_fullscreens()
//New pAI's get a brand new mind to prevent meta stuff from their previous life. This new mind causes problems down the line if it's not deleted here.
- remove_from_alive_mob_list()
ghostize()
qdel(src)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index fec709ee4b8..73cc37ebd22 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -193,8 +193,6 @@
if(mmi.brainmob)
if(mmi.brainmob.stat == DEAD)
mmi.brainmob.set_stat(CONSCIOUS)
- mmi.brainmob.remove_from_dead_mob_list()
- mmi.brainmob.add_to_alive_mob_list()
mind.transfer_to(mmi.brainmob)
mmi.update_icon()
else
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index c752f6fe324..a4285d7f396 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1331,3 +1331,47 @@
SEND_SIGNAL(src, COMSIG_MOB_STATCHANGE, new_stat)
. = stat
stat = new_stat
+
+
+/mob/vv_edit_var(var_name, var_value)
+ switch(var_name)
+ if(NAMEOF(src, control_object))
+ var/obj/O = var_value
+ if(!istype(O) || (O.obj_flags & DANGEROUS_POSSESSION))
+ return FALSE
+ if(NAMEOF(src, machine))
+ set_machine(var_value)
+ . = TRUE
+ if(NAMEOF(src, focus))
+ set_focus(var_value)
+ . = TRUE
+ if(NAMEOF(src, nutrition))
+ set_nutrition(var_value)
+ . = TRUE
+ if(NAMEOF(src, stat))
+ set_stat(var_value)
+ . = TRUE
+ if(NAMEOF(src, dizziness))
+ set_dizziness(var_value)
+ . = TRUE
+ if(NAMEOF(src, eye_blind))
+ set_blindness(var_value)
+ . = TRUE
+ if(NAMEOF(src, eye_blurry))
+ set_blurriness(var_value)
+ . = TRUE
+
+ if(!isnull(.))
+ datum_flags |= DF_VAR_EDITED
+ return
+
+ var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown))
+ var/diff
+ if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value))
+ remove_movespeed_modifier(/datum/movespeed_modifier/admin_varedit)
+ diff = var_value - cached_multiplicative_slowdown
+
+ . = ..()
+
+ if(. && slowdown_edit && isnum(diff))
+ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/admin_varedit, multiplicative_slowdown = diff)
diff --git a/code/modules/movespeed/_movespeed_modifier.dm b/code/modules/movespeed/_movespeed_modifier.dm
index 3897a7fa997..248aa137b56 100644
--- a/code/modules/movespeed/_movespeed_modifier.dm
+++ b/code/modules/movespeed/_movespeed_modifier.dm
@@ -142,20 +142,6 @@ GLOBAL_LIST_EMPTY(movespeed_modification_cache)
update_movespeed(TRUE)
return final
-/// 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_value
- 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))
- remove_movespeed_modifier(/datum/movespeed_modifier/admin_varedit)
- diff = var_value - cached_multiplicative_slowdown
- . = ..()
- if(. && slowdown_edit && isnum(diff))
- add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/admin_varedit, multiplicative_slowdown = diff)
///Is there a movespeed modifier for this mob
/mob/proc/has_movespeed_modifier(datum/movespeed_modifier/datum_type_id)