diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm
index ab9e8c1cd36..1ff9a1d1cc6 100644
--- a/code/modules/admin/verbs/adminjump.dm
+++ b/code/modules/admin/verbs/adminjump.dm
@@ -1,12 +1,19 @@
+/mob/proc/on_mob_jump()
+ return
+
+/mob/dead/observer/on_mob_jump()
+ following = null
+
/client/proc/Jump(var/area/A in return_sorted_areas())
set name = "Jump to Area"
set desc = "Area to jump to"
set category = "Admin"
- if(!src.holder)
+ if(!check_rights(R_ADMIN, user = src))
src << "Only administrators may use this command."
return
if(config.allow_admin_jump)
+ usr.on_mob_jump()
usr.loc = pick(get_area_turfs(A))
log_admin("[key_name(usr)] jumped to [A]")
@@ -18,12 +25,13 @@
/client/proc/jumptoturf(var/turf/T in world)
set name = "Jump to Turf"
set category = "Admin"
- if(!src.holder)
+ if(!check_rights(R_ADMIN, user = src))
src << "Only administrators may use this command."
return
if(config.allow_admin_jump)
log_admin("[key_name(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]")
message_admins("[key_name_admin(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]", 1)
+ usr.on_mob_jump()
usr.loc = T
feedback_add_details("admin_verb","JT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
@@ -34,7 +42,7 @@
set category = "Admin"
set name = "Jump to Mob"
- if(!src.holder)
+ if(!check_rights(R_ADMIN, user = src))
src << "Only administrators may use this command."
return
@@ -46,6 +54,7 @@
var/turf/T = get_turf(M)
if(T && isturf(T))
feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ A.on_mob_jump()
A.loc = T
else
A << "This mob is not located in the game world."
@@ -56,13 +65,14 @@
set category = "Admin"
set name = "Jump to Coordinate"
- if (!holder)
+ if(!check_rights(R_ADMIN, user = src))
src << "Only administrators may use this command."
return
if (config.allow_admin_jump)
if(src.mob)
var/mob/A = src.mob
+ A.on_mob_jump()
A.x = tx
A.y = ty
A.z = tz
@@ -76,7 +86,7 @@
set category = "Admin"
set name = "Jump to Key"
- if(!src.holder)
+ if(!check_rights(R_ADMIN, user = src))
src << "Only administrators may use this command."
return
@@ -91,6 +101,7 @@
var/mob/M = selection:mob
log_admin("[key_name(usr)] jumped to [key_name(M)]")
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
+ usr.on_mob_jump()
usr.loc = M.loc
feedback_add_details("admin_verb","JK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
@@ -100,12 +111,13 @@
set category = "Admin"
set name = "Get Mob"
set desc = "Mob to teleport"
- if(!src.holder)
+ if(!check_rights(R_ADMIN, user = src))
src << "Only administrators may use this command."
return
if(config.allow_admin_jump)
log_admin("[key_name(usr)] teleported [key_name(M)]")
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]", 1)
+ M.on_mob_jump()
M.loc = get_turf(usr)
feedback_add_details("admin_verb","GM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
@@ -116,7 +128,7 @@
set name = "Get Key"
set desc = "Key to teleport"
- if(!src.holder)
+ if(!check_rights(R_ADMIN, user = src))
src << "Only administrators may use this command."
return
@@ -134,6 +146,7 @@
log_admin("[key_name(usr)] teleported [key_name(M)]")
message_admins("[key_name_admin(usr)] teleported [key_name(M)]", 1)
if(M)
+ M.on_mob_jump()
M.loc = get_turf(usr)
feedback_add_details("admin_verb","GK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
@@ -142,16 +155,17 @@
/client/proc/sendmob(var/mob/M in sortmobs())
set category = "Admin"
set name = "Send Mob"
- if(!src.holder)
+ if(!check_rights(R_ADMIN, user = src))
src << "Only administrators may use this command."
return
var/area/A = input(usr, "Pick an area.", "Pick an area") in return_sorted_areas()
if(A)
if(config.allow_admin_jump)
+ M.on_mob_jump()
M.loc = pick(get_area_turfs(A))
feedback_add_details("admin_verb","SMOB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] teleported [key_name(M)] to [A]")
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]", 1)
else
- alert("Admin jumping disabled")
\ No newline at end of file
+ alert("Admin jumping disabled")
diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm
index 246f37c0e44..aef27243492 100644
--- a/code/modules/clothing/spacesuits/void/void.dm
+++ b/code/modules/clothing/spacesuits/void/void.dm
@@ -83,6 +83,10 @@
if(H.wear_suit != src)
return
+ if(boots)
+ if (H.equip_to_slot_if_possible(boots, slot_shoes))
+ boots.canremove = 0
+
if(helmet)
if(H.head)
M << "You are unable to deploy your suit's helmet as \the [H.head] is in the way."
@@ -90,10 +94,6 @@
M << "Your suit's helmet deploys with a hiss."
helmet.canremove = 0
- if(boots)
- if (H.equip_to_slot_if_possible(boots, slot_shoes))
- boots.canremove = 0
-
if(tank)
if(H.s_store) //In case someone finds a way.
M << "Alarmingly, the valve on your suit's installed tank fails to engage."
@@ -101,6 +101,7 @@
M << "The valve on your suit's installed tank safely engages."
tank.canremove = 0
+
/obj/item/clothing/suit/space/void/dropped()
..()
@@ -151,7 +152,7 @@
helmet.loc = src
else
if(H.head)
- H << "You cannot deploy your helmet while wearing another helmet."
+ H << "You cannot deploy your helmet while wearing \the [H.head]."
return
if(H.equip_to_slot_if_possible(helmet, slot_head))
helmet.pickup(H)
@@ -161,7 +162,7 @@
/obj/item/clothing/suit/space/void/verb/eject_tank()
- set name = "Eject Tank"
+ set name = "Eject Voidsuit Tank"
set category = "Object"
set src in usr
@@ -187,22 +188,26 @@
if(!istype(user,/mob/living)) return
if(istype(src.loc,/mob/living))
- user << "How do you propose to modify a hardsuit while it is being worn?"
+ user << "How do you propose to modify a voidsuit while it is being worn?"
return
if(istype(W,/obj/item/weapon/screwdriver))
- if(tank)
- user << "You pop \the [tank] out of \the [src]'s storage compartment."
- tank.loc = get_turf(src)
- src.tank = null
- else if(helmet)
- user << "You detatch \the [helmet] from \the [src]'s helmet mount."
- helmet.loc = get_turf(src)
- src.helmet = null
- else if (boots)
- user << "You detatch \the [boots] from \the [src]'s boot mounts."
- boots.loc = get_turf(src)
- src.boots = null
+ if(helmet || boots || tank)
+ var/choice = input("What component would you like to remove?") as null|anything in list(helmet,boots,tank)
+ if(!choice) return
+
+ if(choice == tank) //No, a switch doesn't work here. Sorry. ~Techhead
+ user << "You pop \the [tank] out of \the [src]'s storage compartment."
+ tank.loc = get_turf(src)
+ src.tank = null
+ else if(choice == helmet)
+ user << "You detatch \the [helmet] from \the [src]'s helmet mount."
+ helmet.loc = get_turf(src)
+ src.helmet = null
+ else if(choice == boots)
+ user << "You detatch \the [boots] from \the [src]'s boot mounts."
+ boots.loc = get_turf(src)
+ src.boots = null
else
user << "\The [src] does not have anything installed."
return
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 2c338bcfe7a..914576c5ee1 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -672,7 +672,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
mob/dead/observer/MayRespawn(var/feedback = 0)
if(!client)
return 0
- if(mind && mind.current && mind.current.stat != DEAD)
+ if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse)
if(feedback)
src << "Your non-dead body prevent you from respawning."
return 0
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 81ad013f6c2..7840c777aea 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -645,16 +645,20 @@ var/list/ai_verbs_default = list(
set desc = "Augment visual feed with internal sensor overlays"
toggle_sensor_mode()
-/mob/living/silicon/ai/proc/check_unable(var/flags = 0)
+/mob/living/silicon/ai/proc/check_unable(var/flags = 0, var/feedback = 1)
if(stat == DEAD)
- src << "You are dead!"
+ if(feedback) src << "You are dead!"
+ return 1
+
+ if(aiRestorePowerRoutine)
+ if(feedback) src << "You lack power!"
return 1
if((flags & AI_CHECK_WIRELESS) && src.control_disabled)
- src << "Wireless control is disabled!"
+ if(feedback) src << "Wireless control is disabled!"
return 1
if((flags & AI_CHECK_RADIO) && src.aiRadio.disabledAi)
- src << "System Error - Transceiver Disabled!"
+ if(feedback) src << "System Error - Transceiver Disabled!"
return 1
return 0
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index 84d3cfd2298..5200e77f426 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -1,5 +1,5 @@
/mob/living/silicon/ai/Life()
- if (src.stat == 2)
+ if (src.stat == DEAD)
return
else //I'm not removing that shitton of tabs, unneeded as they are. -- Urist
//Being dead doesn't mean your temperature never changes
@@ -33,8 +33,8 @@
aiRestorePowerRoutine = 0 // Necessary if AI activated it's APU AFTER losing primary power.
adjustOxyLoss(-1)
- // Handle EMP-stun
- handle_stunned()
+ handle_stunned() // Handle EMP-stun
+ lying = 0 // Handle lying down
malf_process()
@@ -180,3 +180,4 @@
/mob/living/silicon/ai/rejuvenate()
..()
add_ai_verbs(src)
+
diff --git a/code/modules/nano/interaction/base.dm b/code/modules/nano/interaction/base.dm
index 10cda75162e..602185bb8ab 100644
--- a/code/modules/nano/interaction/base.dm
+++ b/code/modules/nano/interaction/base.dm
@@ -21,7 +21,7 @@
/mob/living/silicon/ai/shared_nano_interaction()
if(lacks_power())
return STATUS_CLOSE
- if (check_unable(1))
+ if (check_unable(1, 0))
return STATUS_CLOSE
return ..()
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 80658f48645..b223a48684a 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -50,7 +50,7 @@
return
if(!affects_dead && M.stat == DEAD)
return
- if(overdose && (location == CHEM_BLOOD))
+ if(overdose && (dose > overdose) && (location == CHEM_BLOOD))
overdose(M, alien)
var/removed = metabolism
if(ingest_met && (location == CHEM_INGEST))