diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 5fe1256766..19e009ea66 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -8,7 +8,7 @@
var/list/holographic_items = list()
var/damaged = 0
var/last_change = 0
-
+ var/safety = 1
attack_ai(var/mob/user as mob)
return src.attack_hand(user)
@@ -35,7 +35,11 @@
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.
"
- if(emagged)
+ if(!safety)
+ if(issilicon(user) && (emagged))
+ dat += "ERROR: SAFETY PROTOCOLS UNRESPONSIVE
"
+ else if(issilicon(user) && (!emagged))
+ dat += "(Enable Safety Protocols?)
"
dat += "(Begin Atmospheric Burn Simulation)
"
dat += "Ensure the holodeck is empty before testing.
"
dat += "
"
@@ -43,12 +47,11 @@
dat += "Ensure the holodeck is empty before testing.
"
dat += "
"
dat += "Safety Protocols are DISABLED
"
- else
+ else if(safety)
if(issilicon(user))
- dat += "(Override Safety Protocols?)
"
+ dat += "(Disable Safety Protocols?)
"
dat += "
"
dat += "Safety Protocols are ENABLED
"
-
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
@@ -101,7 +104,13 @@
else if(href_list["AIoverride"])
if(!issilicon(usr)) return
- emagged = 1
+ safety = 0
+ log_admin("[usr] ([usr.ckey]) disabled Holodeck Safeties.")
+ message_admins("[usr] ([usr.ckey]) disabled Holodeck Safeties.")
+
+ else if(href_list["AIrelock"])
+ if(!issilicon(usr)) return
+ safety = 1
src.add_fingerprint(usr)
src.updateUsrDialog()
@@ -141,8 +150,11 @@
if(istype(D, /obj/item/weapon/card/emag) && !emagged)
playsound(src.loc, 'sparks4.ogg', 75, 1)
emagged = 1
+ safety = 0
user << "\blue You vastly increase projector power and override the safety and security protocols."
user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintence and do not use the simulator."
+ log_admin("[user] ([user.ckey]) emagged Holodeck Safeties.")
+ message_admins("[user] ([user.ckey]) emagged Holodeck Safeties.")
src.updateUsrDialog()
return
@@ -340,7 +352,17 @@
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(G.state<2)
- user << "\red You need a better grip to do that!"
+ if(ishuman(G.affecting))
+ var/mob/living/carbon/human/H = G.affecting
+ var/datum/organ/external/affecting = H.get_organ("head")
+ affecting.take_damage(4, 0)
+ H.UpdateDamageIcon()
+ H.updatehealth()
+ playsound(src.loc, 'punch1.ogg', 50, 1, -3)
+ src.add_blood(G.affecting)
+ for(var/mob/O in viewers(world.view, src))
+ if (O.client)
+ O << text("\red [] smashes []'s head on the table!", G.assailant, G.affecting)
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 8c4be94eae..a24b4bad41 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -32,7 +32,7 @@
A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x
chassis.use_power(energy_drain)
- A.process()
+ A.fired()
chassis.log_message("Fired from [src.name], targeting [target].")
do_after_cooldown()
return
@@ -215,7 +215,7 @@
A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x
set_ready_state(0)
- A.process()
+ A.fired()
log_message("Fired from [src.name], targeting [target].")
do_after_cooldown()
return
@@ -256,7 +256,7 @@
A.current = curloc
A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x
- A.process()
+ A.fired()
sleep(2)
set_ready_state(0)
log_message("Fired from [src.name], targeting [target].")
diff --git a/code/game/objects/tables_racks.dm b/code/game/objects/tables_racks.dm
index 904f3bb8e1..57fecf8889 100644
--- a/code/game/objects/tables_racks.dm
+++ b/code/game/objects/tables_racks.dm
@@ -149,7 +149,24 @@ TABLE AND RACK OBJECT INTERATIONS
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(G.state<2)
- user << "\red You need a better grip to do that!"
+ if(ishuman(G.affecting))
+ G.affecting.attack_log += text("\[[time_stamp()]\] Has been smashed on a table by [G.assailant.name] ([G.assailant.ckey])")
+ G.assailant.attack_log += text("\[[time_stamp()]\] Smashed [G.affecting.name] ([G.affecting.ckey]) on a table.")
+
+ log_admin("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
+ message_admins("ATTACK: [G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
+ log_attack("[G.assailant] ([G.assailant.ckey]) smashed [G.affecting] ([G.affecting.ckey]) on a table.")
+
+ var/mob/living/carbon/human/H = G.affecting
+ var/datum/organ/external/affecting = H.get_organ("head")
+ affecting.take_damage(4, 0)
+ H.UpdateDamageIcon()
+ H.updatehealth()
+ playsound(src.loc, 'punch1.ogg', 50, 1, -3)
+ src.add_blood(G.affecting)
+ for(var/mob/O in viewers(world.view, src))
+ if (O.client)
+ O << text("\red [] smashes []'s head on the table!", G.assailant, G.affecting)
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm
index 4cc9c33b0a..c0cc284533 100644
--- a/code/modules/mob/screen.dm
+++ b/code/modules/mob/screen.dm
@@ -439,7 +439,8 @@
usr.pulling = null
if("sleep")
if(usr.sleeping && usr.sleeping_willingly)
- return
+ usr.sleeping = 0
+ usr.sleeping_willingly = 0
else if(!usr.sleeping)
usr.sleeping = 20 //Short nap
usr.sleeping_willingly = 1
diff --git a/html/changelog.html b/html/changelog.html
index 9bff742d94..019abf109c 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -62,6 +62,10 @@ should be listed in the changelog upon commit though. Thanks. -->