diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 2f5ec34b07b..f8e59280f9b 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -131,7 +131,6 @@
occupant:UI = UI // set interface preference
ghost.client.mob = src.occupant
- src.occupant.attack_log |= ghost.attack_log //THE LEGACY MUST LIVE ON
src.occupant.hud_used = new/obj/hud( src.occupant )
// probably redundant because previous line calls mob/Login() which does this line of code
// but until this is proven useless keep it for safety - Doohl
diff --git a/code/game/machinery/morgue.dm b/code/game/machinery/morgue.dm
index b9163171b59..dfe83add053 100644
--- a/code/game/machinery/morgue.dm
+++ b/code/game/machinery/morgue.dm
@@ -275,9 +275,10 @@
for (var/obj/item/W in M)
if (prob(10))
W.loc = src
- M.attack_log += "\[[time_stamp()]\] Has been cremated by [user]/[user.ckey]" //One shall not simply cremate a mob unnoticed!
- user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]"
- log_attack("\[[time_stamp()]\] [user]/[user.ckey] gibbed [M]/[M.ckey]")
+ //Logging for this runtimes and causes the cremator to lock up
+ //M.attack_log += "\[[time_stamp()]\] Has been cremated by [user]/[user.ckey]" //No point when the mob's about to be deleted
+ //user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]"
+ //log_attack("\[[time_stamp()]\] [user]/[user.ckey] gibbed [M]/[M.ckey]")
M.death(1)
M.ghostize()
del(M)
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index d0ce867c724..f699084e97d 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -131,6 +131,14 @@
del(src)
return
+/obj/machinery/shield/emp_act(severity)
+ switch(severity)
+ if(1)
+ del(src)
+ if(2)
+ if(prob(50))
+ del(src)
+
/obj/machinery/shield/blob_act()
del(src)
@@ -177,12 +185,14 @@
opacity = 0
anchored = 0
pressure_resistance = 2*ONE_ATMOSPHERE
- var/active = 0
+ req_access = list(access_engine)
var/const/max_health = 100
var/health = max_health
+ var/active = 0
var/malfunction = 0 //Malfunction causes parts of the shield to slowly dissapate
var/list/deployed_shields = list()
var/is_open = 0 //Whether or not the wires are exposed
+ var/locked = 0
/obj/machinery/shieldgen/Del()
for(var/obj/machinery/shield/shield_tile in deployed_shields)
@@ -247,7 +257,26 @@
src.checkhp()
return
+/obj/machinery/shieldgen/emp_act(severity)
+ switch(severity)
+ if(1)
+ src.health /= 2 //cut health in half
+ malfunction = 1
+ locked = pick(0,1)
+ if(2)
+ if(prob(50))
+ src.health *= 0.3 //chop off a third of the health
+ malfunction = 1
+ checkhp()
+
/obj/machinery/shieldgen/attack_hand(mob/user as mob)
+ if(locked)
+ user << "The machine is locked, you are unable to use it."
+ return
+ if(is_open)
+ user << "The panel must be closed before operating this machine."
+ return
+
if (src.active)
user.visible_message("\blue \icon[src] [user] deactivated the shield generator.", \
"\blue \icon[src] You deactivate the shield generator.", \
@@ -279,7 +308,7 @@
else if(istype(W, /obj/item/weapon/cable_coil) && malfunction && is_open)
var/obj/item/weapon/cable_coil/coil = W
- user << "\blue You begin to repair the cables."
+ user << "\blue You begin to replace the wires."
//if(do_after(user, min(60, round( ((maxhealth/health)*10)+(malfunction*10) ))) //Take longer to repair heavier damage
if(do_after(user, 30))
if(!src || !coil) return
@@ -290,17 +319,30 @@
update_icon()
else if(istype(W, /obj/item/weapon/wrench))
- if(istype(get_turf(src), /turf/space)) return //No wrenching these in space!
- playsound(src.loc, 'Ratchet.ogg', 100, 1)
+ if(locked)
+ user << "The bolts are covered, unlocking this would retract the covers."
+ return
if(anchored)
+ playsound(src.loc, 'Ratchet.ogg', 100, 1)
user << "\blue You unsecure the [src] from the floor!"
if(active)
- user << "The [src] shuts off!"
+ user << "\blue The [src] shuts off!"
src.shields_down()
anchored = 0
else
+ if(istype(get_turf(src), /turf/space)) return //No wrenching these in space!
+ playsound(src.loc, 'Ratchet.ogg', 100, 1)
user << "\blue You secure the [src] to the floor!"
anchored = 1
+
+
+ else if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))
+ if(src.allowed(user))
+ src.locked = !src.locked
+ user << "The controls are now [src.locked ? "locked." : "unlocked."]"
+ else
+ user << "\red Access denied."
+
else
..()
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 60a447e6e0b..b8424dd4e0c 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -576,8 +576,8 @@ var/global/BSACooldown = 0
if (href_list["removejobban"])
if ((src.rank in list("Game Admin", "Game Master" )))
var/t = href_list["removejobban"]
- if(input(alert("Do you want to unjobban [t]?","Unjobban confirmation", "Yes", "No") == "Yes")) //No more misclicks! Unless you do it twice.
- if(t)
+ if(t)
+ if(input(alert("Do you want to unjobban [t]?","Unjobban confirmation", "Yes", "No") == "Yes") && t) //No more misclicks! Unless you do it twice.
log_admin("[key_name(usr)] removed [t]")
message_admins("\blue [key_name_admin(usr)] removed [t]", 1)
jobban_remove(t)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 2f148b8aa23..ccf6540413f 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -36,7 +36,6 @@ Works together with spawning an observer, noted above.
if(client)
client.screen.len = null//Clear the hud, just to be sure.
var/mob/dead/observer/ghost = new(src,transfer_mind)//Transfer safety to observer spawning proc.
- ghost.attack_log |= attack_log
if(transfer_mind)//When a body is destroyed.
if(mind)
mind.transfer_to(ghost)
@@ -45,7 +44,7 @@ Works together with spawning an observer, noted above.
else//Else just modify their key and connect them.
ghost.key = key
- verbs -= /client/proc/ghost
+ verbs -= /mob/proc/ghost
if (ghost.client)
ghost.client.eye = ghost
@@ -60,7 +59,7 @@ Works together with spawning an observer, noted above.
/*
This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues.
*/
-/client/proc/ghost()
+/mob/proc/ghost()
set category = "Ghost"
set name = "Ghost"
set desc = "You cannot be revived as a ghost."
@@ -69,11 +68,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
src << "Only dead people and admins get to ghost, and admins don't use this verb to ghost while alive."
return*/
if(key)
- var/mob/dead/observer/ghost = new(mob) //Duh.
- ghost.loc = get_turf(mob) //This is to prevent ghosts from appearing at the arrival shuttle.
- ghost.attack_log |= mob.attack_log //THE LEGACY MUST LIVE ON
+ var/mob/dead/observer/ghost = new(src)
ghost.key = key
- verbs -= /client/proc/ghost
+ verbs -= /mob/proc/ghost
if (ghost.client)
ghost.client.eye = ghost
return
@@ -148,10 +145,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
if(corpse.ajourn)
corpse.ajourn=0
- corpse.attack_log |= attack_log //copy the ghost's attack log to the corpse. THE LEGACY MUST LIVE ON
client.mob = corpse
if (corpse.stat==2)
- verbs += /client/proc/ghost
+ verbs += /mob/proc/ghost
del(src)
/mob/dead/observer/proc/dead_tele()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/death.dm b/code/modules/mob/living/carbon/alien/humanoid/death.dm
index 8683becafb6..3a48378c4c1 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/death.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/death.dm
@@ -25,7 +25,7 @@
if (src.key)
spawn(10)
if(src.key && src.stat == 2)
- src.client.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
tod = worldtime2text() //weasellos time of death patch
if (mind) mind.store_memory("Time of death: [tod]", 0)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/login.dm b/code/modules/mob/living/carbon/alien/humanoid/login.dm
index 827778a4c25..686f36c08dc 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/login.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/login.dm
@@ -7,7 +7,7 @@
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == DEAD)
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return
/*
@@ -99,7 +99,7 @@
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == 2)
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return
diff --git a/code/modules/mob/living/carbon/alien/larva/death.dm b/code/modules/mob/living/carbon/alien/larva/death.dm
index c90f074b0ea..8e2fe185497 100644
--- a/code/modules/mob/living/carbon/alien/larva/death.dm
+++ b/code/modules/mob/living/carbon/alien/larva/death.dm
@@ -23,7 +23,7 @@
if (src.client)
spawn(10)
if(src.client && src.stat == 2)
- src.client.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
if(mind) // Skie - Added check that there's someone controlling the alien
tod = worldtime2text() //weasellos time of death patch
diff --git a/code/modules/mob/living/carbon/alien/larva/login.dm b/code/modules/mob/living/carbon/alien/larva/login.dm
index 1278daa2bb3..eeff902cce7 100644
--- a/code/modules/mob/living/carbon/alien/larva/login.dm
+++ b/code/modules/mob/living/carbon/alien/larva/login.dm
@@ -5,6 +5,6 @@
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == 2)
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index bea5b7b1e45..9b30ff5d76d 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -40,7 +40,7 @@
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (!container || !istype(container, /obj/item/device/mmi))
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return
diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm
index 131c0f61838..30967cf43c5 100644
--- a/code/modules/mob/living/carbon/brain/death.dm
+++ b/code/modules/mob/living/carbon/brain/death.dm
@@ -20,5 +20,5 @@
if (key)
spawn(50)
if(key && stat == 2)
- src.client.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return ..(gibbed)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 9148ef5ff74..945266c4c38 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -79,11 +79,9 @@
//This is where the suicide assemblies checks would go
if (client)
- //world <<"Woo, there's a client!"
spawn(10)
if(client && src.stat == 2)
- //world <<"You're sooooooo dead, let's ghost!"
- client.verbs += /client/proc/ghost
+ verbs += /mob/proc/ghost
tod = worldtime2text() //weasellos time of death patch
if(mind)
diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm
index a32d445f838..07c78011584 100644
--- a/code/modules/mob/living/carbon/human/login.dm
+++ b/code/modules/mob/living/carbon/human/login.dm
@@ -7,6 +7,6 @@
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == DEAD)
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return
diff --git a/code/modules/mob/living/carbon/metroid/death.dm b/code/modules/mob/living/carbon/metroid/death.dm
index 3241bbb94b9..2356f425505 100644
--- a/code/modules/mob/living/carbon/metroid/death.dm
+++ b/code/modules/mob/living/carbon/metroid/death.dm
@@ -37,6 +37,6 @@
if (src.key)
spawn(50)
if(src.key && src.stat == 2)
- src.client.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return ..(gibbed)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/metroid/login.dm b/code/modules/mob/living/carbon/metroid/login.dm
index eac13bbfae6..831c6e10044 100644
--- a/code/modules/mob/living/carbon/metroid/login.dm
+++ b/code/modules/mob/living/carbon/metroid/login.dm
@@ -7,6 +7,6 @@
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == DEAD)
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return
diff --git a/code/modules/mob/living/carbon/monkey/death.dm b/code/modules/mob/living/carbon/monkey/death.dm
index 99e99b9a5b8..a150d7c2bf5 100644
--- a/code/modules/mob/living/carbon/monkey/death.dm
+++ b/code/modules/mob/living/carbon/monkey/death.dm
@@ -67,6 +67,6 @@
if (src.key)
spawn(50)
if(src.key && src.stat == 2)
- src.client.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return ..(gibbed)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/monkey/login.dm b/code/modules/mob/living/carbon/monkey/login.dm
index a1cc1b1b844..0a0c216129c 100644
--- a/code/modules/mob/living/carbon/monkey/login.dm
+++ b/code/modules/mob/living/carbon/monkey/login.dm
@@ -7,5 +7,5 @@
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == DEAD)
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return
diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm
index 9bdc49ee17a..636d27a6ac3 100644
--- a/code/modules/mob/living/silicon/ai/death.dm
+++ b/code/modules/mob/living/silicon/ai/death.dm
@@ -13,16 +13,22 @@
var/callshuttle = 0
for(var/obj/machinery/computer/communications/commconsole in world)
+ if(commconsole.z == 2)
+ continue
if(istype(commconsole.loc,/turf))
break
callshuttle++
for(var/obj/item/weapon/circuitboard/communications/commboard in world)
+ if(commboard.z == 2)
+ continue
if(istype(commboard.loc,/turf) || istype(commboard.loc,/obj/item/weapon/storage))
break
callshuttle++
for(var/mob/living/silicon/ai/shuttlecaller in world)
+ if(shuttlecaller.z == 2)
+ continue
if(!shuttlecaller.stat && shuttlecaller.client && istype(shuttlecaller.loc,/turf))
break
callshuttle++
@@ -53,5 +59,5 @@
if (key)
spawn(50)
if(key && stat == 2)
- client.verbs += /client/proc/ghost
+ client.verbs += /mob/proc/ghost
return ..(gibbed)
diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm
index 2e32d8d2a88..8e1c1c1f081 100644
--- a/code/modules/mob/living/silicon/ai/login.dm
+++ b/code/modules/mob/living/silicon/ai/login.dm
@@ -22,7 +22,7 @@
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == 2)
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
else
for(var/obj/machinery/ai_status_display/O in world) //change status
spawn(0)
diff --git a/code/modules/mob/living/silicon/ai/logout.dm b/code/modules/mob/living/silicon/ai/logout.dm
index 13daf5d31bd..cf32ea51dae 100644
--- a/code/modules/mob/living/silicon/ai/logout.dm
+++ b/code/modules/mob/living/silicon/ai/logout.dm
@@ -8,5 +8,5 @@
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == 2)
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm
index da0b5dce4e9..397a403a2b8 100644
--- a/code/modules/mob/living/silicon/robot/death.dm
+++ b/code/modules/mob/living/silicon/robot/death.dm
@@ -72,5 +72,5 @@
if (src.key)
spawn(50)
if(src.key && src.stat == 2)
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
return ..(gibbed)
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm
index f9439a0b14e..898c15e4b14 100644
--- a/code/modules/mob/living/silicon/robot/login.dm
+++ b/code/modules/mob/living/silicon/robot/login.dm
@@ -7,7 +7,7 @@
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == 2)
- src.verbs += /client/proc/ghost
+ src.verbs += /mob/proc/ghost
if(src.real_name == "Cyborg")
src.ident = rand(1, 999)
src.real_name += " "