diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index a5c65f7cae7..e28bf145b74 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -53,7 +53,11 @@
/obj/machinery/driver_button/attack_ai(mob/user as mob)
- return src.attack_hand(user)
+ return attack_hand(user)
+
+/obj/machinery/driver_button/attack_ghost(mob/user)
+ if(user.can_admin_interact())
+ return attack_hand(user)
/obj/machinery/driver_button/attackby(obj/item/weapon/W, mob/user as mob, params)
@@ -72,7 +76,7 @@
qdel(src)
return 1
- return src.attack_hand(user)
+ return attack_hand(user)
/obj/machinery/driver_button/multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
@@ -84,7 +88,7 @@
/obj/machinery/driver_button/attack_hand(mob/user as mob)
- src.add_fingerprint(usr)
+ add_fingerprint(usr)
if(stat & (NOPOWER|BROKEN))
return
if(active)
@@ -95,8 +99,6 @@
launch_sequence()
- return
-
/obj/machinery/driver_button/proc/launch_sequence()
active = 1
icon_state = "launcheract"
@@ -121,20 +123,20 @@
radio_connection.post_signal(src, signal, filter = RADIO_LOGIC)
for(var/obj/machinery/door/poddoor/M in range(src,range))
- if(M.id_tag == src.id_tag && !M.protected)
+ if(M.id_tag == id_tag && !M.protected)
spawn()
M.open()
sleep(20)
for(var/obj/machinery/mass_driver/M in range(src,range))
- if(M.id_tag == src.id_tag)
+ if(M.id_tag == id_tag)
M.drive()
sleep(50)
for(var/obj/machinery/door/poddoor/M in range(src,range))
- if(M.id_tag == src.id_tag && !M.protected)
+ if(M.id_tag == id_tag && !M.protected)
spawn()
M.close()
return
@@ -163,14 +165,17 @@
idle_power_usage = 2
active_power_usage = 4
-/obj/machinery/ignition_switch/attack_ai(mob/user as mob)
- return src.attack_hand(user)
+/obj/machinery/ignition_switch/attack_ai(mob/user)
+ return attack_hand(user)
+
+/obj/machinery/ignition_switch/attack_ghost(mob/user)
+ if(user.can_admin_interact())
+ return attack_hand(user)
-/obj/machinery/ignition_switch/attackby(obj/item/weapon/W, mob/user as mob, params)
- return src.attack_hand(user)
-
-/obj/machinery/ignition_switch/attack_hand(mob/user as mob)
+/obj/machinery/ignition_switch/attackby(obj/item/weapon/W, mob/user, params)
+ return attack_hand(user)
+/obj/machinery/ignition_switch/attack_hand(mob/user)
if(stat & (NOPOWER|BROKEN))
return
if(active)
@@ -182,12 +187,12 @@
icon_state = "launcheract"
for(var/obj/machinery/sparker/M in world)
- if(M.id == src.id)
+ if(M.id == id)
spawn( 0 )
M.spark()
for(var/obj/machinery/igniter/M in world)
- if(M.id == src.id)
+ if(M.id == id)
use_power(50)
M.on = !( M.on )
M.icon_state = text("igniter[]", M.on)
@@ -195,38 +200,4 @@
sleep(50)
icon_state = "launcherbtt"
- active = 0
-
- return
-
-//////////////////////////////////////
-// Flasher Button //
-//////////////////////////////////////
-
-/obj/machinery/flasher_button
- name = "flasher button"
- desc = "A remote control switch for a mounted flasher."
- icon = 'icons/obj/objects.dmi'
- icon_state = "launcherbtt"
- var/id = null
- var/active = 0
- anchored = 1.0
- use_power = 1
- idle_power_usage = 2
- active_power_usage = 4
-
-//////////////////////////////////////
-// Crematorium Switch //
-//////////////////////////////////////
-
-/obj/machinery/crema_switch
- desc = "Burn baby burn!"
- name = "crematorium igniter"
- icon = 'icons/obj/power.dmi'
- icon_state = "crema_switch"
- anchored = 1.0
- req_access = list(access_crematorium)
- var/on = 0
- var/area/area = null
- var/otherarea = null
- var/id = 1
\ No newline at end of file
+ active = 0
\ No newline at end of file
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index f952f8f2bc3..e9e4a40e465 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -33,7 +33,7 @@
/obj/machinery/door_control/attack_ai(mob/user as mob)
if(wires & 2)
- return src.attack_hand(user)
+ return attack_hand(user)
else
to_chat(user, "Error, no route to host.")
@@ -54,22 +54,26 @@
*/
if(istype(W, /obj/item/device/detective_scanner))
return
- return src.attack_hand(user)
+ return attack_hand(user)
/obj/machinery/door_control/emag_act(user as mob)
if(!emagged)
emagged = 1
req_access = list()
req_one_access = list()
- playsound(src.loc, "sparks", 100, 1)
+ playsound(loc, "sparks", 100, 1)
+
+/obj/machinery/door_control/attack_ghost(mob/user)
+ if(user.can_admin_interact())
+ return attack_hand(user)
/obj/machinery/door_control/attack_hand(mob/user as mob)
- src.add_fingerprint(usr)
+ add_fingerprint(usr)
if(stat & (NOPOWER|BROKEN))
return
- if(!allowed(user) && (wires & 1))
- to_chat(user, "\red Access Denied")
+ if(!allowed(user) && (wires & 1) && !user.can_admin_interact())
+ to_chat(user, "Access Denied.")
flick("doorctrl-denied",src)
return
@@ -79,7 +83,7 @@
if(normaldoorcontrol)
for(var/obj/machinery/door/airlock/D in range(range))
- if(D.id_tag == src.id)
+ if(D.id_tag == id)
if(specialfunctions & OPEN)
if(D.density)
spawn(0)
@@ -110,7 +114,7 @@
else
for(var/obj/machinery/door/poddoor/M in airlocks)
- if(M.id_tag == src.id)
+ if(M.id_tag == id)
if(M.density)
spawn( 0 )
M.open()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 114bada5e19..549c99dfbd1 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -556,17 +556,10 @@ About the new airlock wires panel:
flick("door_deny", src)
return
-/obj/machinery/door/airlock/attack_ai(mob/user as mob)
- ui_interact(user)
-
-/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
- if(!ui)
- ui = new(user, src, ui_key, "door_control.tmpl", "Door Controls - [src]", 600, 375)
- ui.open()
- ui.set_auto_update(1)
-
-/obj/machinery/door/airlock/attack_ai(mob/user as mob)
+/obj/machinery/door/airlock/attack_ghost(mob/user)
+ ui_interact(user)
+
+/obj/machinery/door/airlock/attack_ai(mob/user)
ui_interact(user)
/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
@@ -682,17 +675,17 @@ About the new airlock wires panel:
return
/obj/machinery/door/airlock/CanUseTopic(var/mob/user)
- if(!issilicon(user))
+ if(!issilicon(user) && !isobserver(user))
return STATUS_CLOSE
if(operating < 0) //emagged
to_chat(user, "Unable to interface: Internal error.")
return STATUS_CLOSE
- if(!src.canAIControl())
- if(src.canAIHack(user))
- src.hack(user)
+ if(!canAIControl() && !isobserver(user))
+ if(canAIHack(user))
+ hack(user)
else
- if(src.isAllPowerLoss()) //don't really like how this gets checked a second time, but not sure how else to do it.
+ if(isAllPowerLoss()) //don't really like how this gets checked a second time, but not sure how else to do it.
to_chat(user, "Unable to interface: Connection timed out.")
else
to_chat(user, "Unable to interface: Connection refused.")
@@ -709,27 +702,27 @@ About the new airlock wires panel:
if("idscan")
if(src.isWireCut(AIRLOCK_WIRE_IDSCAN))
to_chat(usr, "The IdScan wire has been cut - IdScan feature permanently disabled.")
- else if(activate && src.aiDisabledIdScanner)
- src.aiDisabledIdScanner = 0
+ else if(activate && aiDisabledIdScanner)
+ aiDisabledIdScanner = 0
to_chat(usr, "IdScan feature has been enabled.")
- else if(!activate && !src.aiDisabledIdScanner)
- src.aiDisabledIdScanner = 1
+ else if(!activate && !aiDisabledIdScanner)
+ aiDisabledIdScanner = 1
to_chat(usr, "IdScan feature has been disabled.")
if("main_power")
if(!main_power_lost_until)
- src.loseMainPower()
+ loseMainPower()
if("backup_power")
if(!backup_power_lost_until)
- src.loseBackupPower()
+ loseBackupPower()
if("bolts")
- if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
+ if(isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
to_chat(usr, "The door bolt control wire has been cut - Door bolts permanently dropped.")
- else if(activate && src.lock())
+ else if(activate && lock())
to_chat(usr, "The door bolts have been dropped.")
- else if(!activate && src.unlock())
+ else if(!activate && unlock())
to_chat(usr, "The door bolts have been raised.")
if("electrify_temporary")
- if(activate && src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
+ if(activate && isWireCut(AIRLOCK_WIRE_ELECTRIFY))
to_chat(usr, text("The electrification wire is cut - Door permanently electrified."))
else if(!activate && electrified_until != 0)
to_chat(usr, "The door is now un-electrified.")
@@ -740,7 +733,7 @@ About the new airlock wires panel:
to_chat(usr, "The door is now electrified for thirty seconds.")
electrify(30)
if("electrify_permanently")
- if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
+ if(isWireCut(AIRLOCK_WIRE_ELECTRIFY))
to_chat(usr, text("The electrification wire is cut - Cannot electrify the door."))
else if(!activate && electrified_until != 0)
to_chat(usr, "The door is now un-electrified.")
@@ -751,9 +744,9 @@ About the new airlock wires panel:
to_chat(usr, "The door is now electrified.")
electrify(-1)
if("open")
- if(src.welded)
+ if(welded)
to_chat(usr, text("The airlock has been welded shut!"))
- else if(src.locked)
+ else if(locked)
to_chat(usr, text("The door bolts are down!"))
else if(activate && density)
open()
@@ -761,33 +754,33 @@ About the new airlock wires panel:
close()
if("safeties")
// Safeties! We don't need no stinking safeties!
- if(src.isWireCut(AIRLOCK_WIRE_SAFETY))
+ if(isWireCut(AIRLOCK_WIRE_SAFETY))
to_chat(usr, text("The safety wire is cut - Cannot secure the door."))
- else if(activate && src.safe)
+ else if(activate && safe)
safe = 0
- else if(!activate && !src.safe)
+ else if(!activate && !safe)
safe = 1
if("timing")
// Door speed control
- if(src.isWireCut(AIRLOCK_WIRE_SPEED))
+ if(isWireCut(AIRLOCK_WIRE_SPEED))
to_chat(usr, text("The timing wire is cut - Cannot alter timing."))
- else if(activate && src.normalspeed)
+ else if(activate && normalspeed)
normalspeed = 0
- else if(!activate && !src.normalspeed)
+ else if(!activate && !normalspeed)
normalspeed = 1
if("lights")
// Bolt lights
- if(src.isWireCut(AIRLOCK_WIRE_LIGHT))
+ if(isWireCut(AIRLOCK_WIRE_LIGHT))
to_chat(usr, "The bolt lights wire has been cut - The door bolt lights are permanently disabled.")
- else if(!activate && src.lights)
+ else if(!activate && lights)
lights = 0
to_chat(usr, "The door bolt lights have been disabled.")
- else if(activate && !src.lights)
+ else if(activate && !lights)
lights = 1
to_chat(usr, "The door bolt lights have been enabled.")
if("emergency")
// Emergency access
- if(src.emergency)
+ if(emergency)
emergency = 0
to_chat(usr, "Emergency access has been disabled.")
else
@@ -800,35 +793,35 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/attackby(C as obj, mob/user as mob, params)
// to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user))
if(!istype(usr, /mob/living/silicon))
- if(src.isElectrified())
- if(src.shock(user, 75))
+ if(isElectrified())
+ if(shock(user, 75))
return
if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll))
return
- src.add_fingerprint(user)
- if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
+ add_fingerprint(user)
+ if((istype(C, /obj/item/weapon/weldingtool) && !( operating ) && density))
var/obj/item/weapon/weldingtool/W = C
if(W.remove_fuel(0,user))
if(frozen)
frozen = 0
- if(!src.welded)
- src.welded = 1
+ if(!welded)
+ welded = 1
else
- src.welded = null
- src.update_icon()
+ welded = null
+ update_icon()
return
else
return
else if(istype(C, /obj/item/weapon/screwdriver))
- src.p_open = !( src.p_open )
- src.update_icon()
+ p_open = !( p_open )
+ update_icon()
else if(istype(C, /obj/item/weapon/wirecutters))
- return src.attack_hand(user)
+ return attack_hand(user)
else if(istype(C, /obj/item/device/multitool))
- return src.attack_hand(user)
+ return attack_hand(user)
else if(istype(C, /obj/item/device/assembly/signaler))
- return src.attack_hand(user)
+ return attack_hand(user)
else if(istype(C, /obj/item/weapon/pai_cable)) // -- TLE
var/obj/item/weapon/pai_cable/cable = C
cable.plugin(src, user)
@@ -838,13 +831,13 @@ About the new airlock wires panel:
beingcrowbarred = 1 //derp, Agouri
else
beingcrowbarred = 0
- if( beingcrowbarred && src.p_open && (operating == -1 || (density && welded && operating != 1 && !src.arePowerSystemsOn() && !src.locked)) )
- playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
+ if( beingcrowbarred && p_open && (operating == -1 || (density && welded && operating != 1 && !arePowerSystemsOn() && !locked)) )
+ playsound(loc, 'sound/items/Crowbar.ogg', 100, 1)
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
if(do_after(user,40, target = src))
to_chat(user, "\blue You removed the airlock electronics!")
- var/obj/structure/door_assembly/da = new assembly_type(src.loc)
+ var/obj/structure/door_assembly/da = new assembly_type(loc)
da.anchored = 1
if(mineral)
da.glass = mineral
@@ -852,23 +845,23 @@ About the new airlock wires panel:
else if(glass && !da.glass)
da.glass = 1
da.state = 1
- da.created_name = src.name
+ da.created_name = name
da.update_state()
var/obj/item/weapon/airlock_electronics/ae
if(!electronics)
- ae = new/obj/item/weapon/airlock_electronics( src.loc )
- if(!src.req_access)
- src.check_access()
- if(src.req_access.len)
- ae.conf_access = src.req_access
- else if(src.req_one_access.len)
- ae.conf_access = src.req_one_access
+ ae = new/obj/item/weapon/airlock_electronics( loc )
+ if(!req_access)
+ check_access()
+ if(req_access.len)
+ ae.conf_access = req_access
+ else if(req_one_access.len)
+ ae.conf_access = req_one_access
ae.one_access = 1
else
ae = electronics
electronics = null
- ae.loc = src.loc
+ ae.loc = loc
if(operating == -1)
ae.icon_state = "door_electronics_smoked"
operating = 0
@@ -917,11 +910,11 @@ About the new airlock wires panel:
return 0
use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people
if(forced)
- playsound(src.loc, 'sound/machines/airlockforced.ogg', 30, 1)
+ playsound(loc, 'sound/machines/airlockforced.ogg', 30, 1)
else
- playsound(src.loc, doorOpen, 30, 1)
- if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density)
- src.closeOther.close()
+ playsound(loc, doorOpen, 30, 1)
+ if(closeOther != null && istype(closeOther, /obj/machinery/door/airlock/) && !closeOther.density)
+ closeOther.close()
return ..()
/obj/machinery/door/airlock/close(var/forced=0, var/override = 0)
@@ -935,16 +928,16 @@ About the new airlock wires panel:
if(safe)
for(var/turf/turf in locs)
if(locate(/mob/living) in turf)
- // playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) //THE BUZZING IT NEVER STOPS -Pete
+ // playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) //THE BUZZING IT NEVER STOPS -Pete
spawn (60)
autoclose()
return
use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people
if(forced)
- playsound(src.loc, 'sound/machines/airlockforced.ogg', 30, 1)
+ playsound(loc, 'sound/machines/airlockforced.ogg', 30, 1)
else
- playsound(src.loc, doorClose, 30, 1)
+ playsound(loc, doorClose, 30, 1)
var/obj/structure/window/killthis = (locate(/obj/structure/window) in get_turf(src))
if(killthis)
killthis.ex_act(2)//Smashin windows
@@ -953,9 +946,9 @@ About the new airlock wires panel:
return 1
operating = 1
do_animate("closing")
- src.layer = 3.1
+ layer = 3.1
if(!override) sleep(5)
- src.density = 1
+ density = 1
if(!safe)
crush()
if(!override) sleep(5)
@@ -977,19 +970,19 @@ About the new airlock wires panel:
if(operating && !forced) return 0
- src.locked = 1
+ locked = 1
playsound(src, boltDown, 30, 0, 3)
update_icon()
return 1
/obj/machinery/door/airlock/proc/unlock(var/forced=0)
- if(!src.locked)
+ if(!locked)
return
if(!forced)
- if(operating || !src.arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) return
+ if(operating || !arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) return
- src.locked = 0
+ locked = 0
playsound(src,boltUp, 30, 0, 3)
update_icon()
return 1
@@ -997,11 +990,11 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/New()
..()
wires = new(src)
- if(src.closeOtherId != null)
+ if(closeOtherId != null)
spawn (5)
for(var/obj/machinery/door/airlock/A in airlocks)
- if(A.closeOtherId == src.closeOtherId && A != src)
- src.closeOther = A
+ if(A.closeOtherId == closeOtherId && A != src)
+ closeOther = A
break
if(frozen)
welded = 1
@@ -1010,8 +1003,8 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/hatch/gamma/attackby(C as obj, mob/user as mob, params)
// to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user))
if(!istype(usr, /mob/living/silicon))
- if(src.isElectrified())
- if(src.shock(user, 75))
+ if(isElectrified())
+ if(shock(user, 75))
return
if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll))
return
@@ -1024,17 +1017,17 @@ About the new airlock wires panel:
to_chat(user, "The hatch is made of an advanced compound that cannot be deconstructed using an RCD.")
return
- src.add_fingerprint(user)
- if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating > 0 ) && src.density))
+ add_fingerprint(user)
+ if((istype(C, /obj/item/weapon/weldingtool) && !( operating > 0 ) && density))
var/obj/item/weapon/weldingtool/W = C
if(W.remove_fuel(0,user))
if(frozen)
frozen = 0
- if(!src.welded)
- src.welded = 1
+ if(!welded)
+ welded = 1
else
- src.welded = null
- src.update_icon()
+ welded = null
+ update_icon()
return
else
return
@@ -1043,23 +1036,23 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/highsecurity/red/attackby(C as obj, mob/user as mob, params)
// to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user))
if(!istype(usr, /mob/living/silicon))
- if(src.isElectrified())
- if(src.shock(user, 75))
+ if(isElectrified())
+ if(shock(user, 75))
return
if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll))
return
- src.add_fingerprint(user)
- if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating > 0 ) && src.density))
+ add_fingerprint(user)
+ if((istype(C, /obj/item/weapon/weldingtool) && !( operating > 0 ) && density))
var/obj/item/weapon/weldingtool/W = C
if(W.remove_fuel(0,user))
if(frozen)
frozen = 0
- if(!src.welded)
- src.welded = 1
+ if(!welded)
+ welded = 1
else
- src.welded = null
- src.update_icon()
+ welded = null
+ update_icon()
return
else
return
@@ -1085,9 +1078,9 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/proc/prison_open()
if(arePowerSystemsOn())
- src.unlock()
- src.open()
- src.lock()
+ unlock()
+ open()
+ lock()
/obj/machinery/door/airlock/hostile_lockdown(mob/origin)
// Must be powered and have working AI wire.
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 0be61cde4b6..66547ff0759 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -172,8 +172,10 @@
//Allows AIs to use door_timer, see human attack_hand function below
/obj/machinery/door_timer/attack_ai(mob/user)
- return attack_hand(user)
+ interact(user)
+/obj/machinery/door_timer/attack_ghost(mob/user)
+ interact(user)
//Allows humans to use door_timer
//Opens dialog window when someone clicks on door timer
@@ -182,7 +184,9 @@
/obj/machinery/door_timer/attack_hand(mob/user)
if(..())
return
-
+ interact(user)
+
+/obj/machinery/door_timer/interact(mob/user)
// Used for the 'time left' display
var/second = round(timeleft() % 60)
var/minute = round((timeleft() - second) / 60)
@@ -239,9 +243,10 @@
// Also updates dialog window and timer icon
/obj/machinery/door_timer/Topic(href, href_list)
if(..())
- return
- if(!allowed(usr))
- return
+ return 1
+
+ if(!allowed(usr) && !usr.can_admin_interact())
+ return 1
usr.set_machine(src)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 7ef5406f1dc..27877c22c72 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -77,7 +77,7 @@
if(istype(AM, /obj/mecha))
var/obj/mecha/mecha = AM
if(density)
- if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access) || emergency == 1))
+ if(mecha.occupant && (allowed(mecha.occupant) || check_access_list(mecha.operation_req_access) || emergency == 1))
open()
else
do_animate("deny")
@@ -111,38 +111,43 @@
do_animate("deny")
return
-/obj/machinery/door/attack_ai(mob/user as mob)
- return src.attack_hand(user)
+/obj/machinery/door/attack_ai(mob/user)
+ return attack_hand(user)
-/obj/machinery/door/attack_hand(mob/user as mob)
- return src.attackby(user, user)
+/obj/machinery/door/attack_ghost(mob/user)
+ if(user.can_admin_interact())
+ return attack_hand(user)
+
+/obj/machinery/door/attack_hand(mob/user)
+ return attackby(user, user)
-/obj/machinery/door/attack_tk(mob/user as mob)
+/obj/machinery/door/attack_tk(mob/user)
if(requiresID() && !allowed(null))
return
..()
-/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob, params)
+/obj/machinery/door/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/detective_scanner))
return
- if(src.operating || isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them.
- src.add_fingerprint(user)
- if(!Adjacent(user))
- user = null
- if(!src.requiresID())
- user = null
- if(src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)))
+
+ if(operating || isrobot(user))
+ return //borgs can't attack doors open because it conflicts with their AI-like interaction with them.
+
+ add_fingerprint(user)
+
+ if(density && istype(I, /obj/item/weapon/melee/energy/blade))
emag_act(user)
return 1
- if(src.allowed(user) || src.emergency == 1)
- if(src.density)
+
+ if(allowed(user) || emergency == 1 || user.can_admin_interact())
+ if(density)
open()
else
close()
return
- if(src.density)
+
+ if(density)
do_animate("deny")
- return
/obj/machinery/door/emag_act(user as mob)
if(density)
@@ -213,11 +218,11 @@
if(!operating) operating = 1
do_animate("opening")
- src.set_opacity(0)
+ set_opacity(0)
sleep(5)
- src.density = 0
+ density = 0
sleep(5)
- src.layer = open_layer
+ layer = open_layer
update_icon()
set_opacity(0)
operating = 0
@@ -242,9 +247,9 @@
autoclose_timer = 0
do_animate("closing")
- src.layer = closed_layer
+ layer = closed_layer
sleep(5)
- src.density = 1
+ density = 1
sleep(5)
update_icon()
if(visible && !glass)
@@ -266,7 +271,7 @@
L.Weaken(5)
else //for simple_animals & borgs
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
- var/turf/simulated/location = src.loc
+ var/turf/simulated/location = loc
if(istype(location, /turf/simulated)) //add_blood doesn't work for borgs/xenos, but add_blood_floor does.
location.add_blood_floor(L)
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 09f4885dc07..f95612e6b89 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -173,12 +173,15 @@
if(alarmed)
nextstate = CLOSED
-/obj/machinery/door/firedoor/attack_ai(mob/user as mob)
+/obj/machinery/door/firedoor/attack_ghost(mob/user as mob)
+ return attack_ai(user)
+
+/obj/machinery/door/firedoor/attack_ai(mob/user)
if(operating || stat & NOPOWER)
return //Already doing something or depowered.
if(blocked)
- to_chat(user, "\red \The [src] is welded solid!")
+ to_chat(user, "\The [src] is welded solid!")
return
var/area/A = get_area_master(src)
@@ -186,11 +189,11 @@
var/alarmed = A.air_doors_activated || A.fire
var/access_granted = 0
- if(isAI(user) || isrobot(user))
+ if(isAI(user) || isrobot(user) || user.can_admin_interact())
access_granted = 1
if(access_granted == 1)
- user.visible_message("\blue \The [src] [density ? "open" : "close"]s for \the [user].",\
+ user.visible_message("\The [src] [density ? "open" : "close"]s for \the [user].",\
"\The [src] [density ? "open" : "close"]s.",\
"You hear a beep, and a door opening.")
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 76f6c7e94d3..7b6752f892b 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -13,9 +13,9 @@
/obj/machinery/door/window/New()
..()
- if(src.req_access && src.req_access.len)
- src.icon_state = "[src.icon_state]"
- src.base_state = src.icon_state
+ if(req_access && req_access.len)
+ icon_state = "[icon_state]"
+ base_state = icon_state
if(!color)
color = color_windows(src)
@@ -33,7 +33,7 @@
/obj/machinery/door/window/proc/open_and_close()
open()
- if(src.check_access(null))
+ if(check_access(null))
sleep(50)
else //secure doors close faster
sleep(20)
@@ -45,10 +45,10 @@
if(!ismob(AM))
if(istype(AM, /obj/mecha))
var/obj/mecha/mecha = AM
- if(mecha.occupant && src.allowed(mecha.occupant))
+ if(mecha.occupant && allowed(mecha.occupant))
open_and_close()
else
- flick(text("[]deny", src.base_state), src)
+ flick(text("[]deny", base_state), src)
return
if(!ticker)
return
@@ -58,16 +58,16 @@
return
/obj/machinery/door/window/bumpopen(mob/user as mob)
- if( operating || !src.density )
+ if( operating || !density )
return
- src.add_fingerprint(user)
- if(!src.requiresID())
+ add_fingerprint(user)
+ if(!requiresID())
user = null
if(allowed(user))
open_and_close()
else
- flick(text("[]deny", src.base_state), src)
+ flick(text("[]deny", base_state), src)
return
/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0)
@@ -97,7 +97,7 @@
return 1
/obj/machinery/door/window/open(var/forced=0)
- if(src.operating == 1) //doors can still open when emag-disabled
+ if(operating == 1) //doors can still open when emag-disabled
return 0
if(!ticker)
return 0
@@ -107,24 +107,24 @@
if(forced < 2)
if(emagged)
return 0
- if(!src.operating) //in case of emag
- src.operating = 1
- flick(text("[]opening", src.base_state), src)
- playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
- src.icon_state = text("[]open", src.base_state)
+ if(!operating) //in case of emag
+ operating = 1
+ flick(text("[]opening", base_state), src)
+ playsound(loc, 'sound/machines/windowdoor.ogg', 100, 1)
+ icon_state = text("[]open", base_state)
sleep(10)
- src.density = 0
-// src.sd_set_opacity(0) //TODO: why is this here? Opaque windoors? ~Carn
+ density = 0
+// sd_set_opacity(0) //TODO: why is this here? Opaque windoors? ~Carn
air_update_turf(1)
update_freelook_sight()
if(operating == 1) //emag again
- src.operating = 0
+ operating = 0
return 1
/obj/machinery/door/window/close(var/forced=0)
- if(src.operating)
+ if(operating)
return 0
if(!forced)
if(stat & NOPOWER)
@@ -132,33 +132,33 @@
if(forced < 2)
if(emagged)
return 0
- src.operating = 1
- flick(text("[]closing", src.base_state), src)
- playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
- src.icon_state = src.base_state
+ operating = 1
+ flick(text("[]closing", base_state), src)
+ playsound(loc, 'sound/machines/windowdoor.ogg', 100, 1)
+ icon_state = base_state
- src.density = 1
-// if(src.visible)
+ density = 1
+// if(visible)
// set_opacity(1) //TODO: why is this here? Opaque windoors? ~Carn
air_update_turf(1)
update_freelook_sight()
sleep(10)
- src.operating = 0
+ operating = 0
return 1
/obj/machinery/door/window/proc/take_damage(var/damage)
- src.health = max(0, src.health - damage)
- if(src.health <= 0)
+ health = max(0, health - damage)
+ if(health <= 0)
var/debris = list(
- new /obj/item/weapon/shard(src.loc),
- new /obj/item/weapon/shard(src.loc),
- new /obj/item/stack/rods(src.loc, 2),
- new /obj/item/stack/cable_coil(src.loc, 2)
+ new /obj/item/weapon/shard(loc),
+ new /obj/item/weapon/shard(loc),
+ new /obj/item/stack/rods(loc, 2),
+ new /obj/item/stack/cable_coil(loc, 2)
)
for(var/obj/fragment in debris)
transfer_fingerprints_to(fragment)
- src.density = 0
+ density = 0
qdel(src)
return
@@ -177,34 +177,37 @@
tforce = 40
else
tforce = AM:throwforce
- playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1)
+ playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1)
take_damage(tforce)
//..() //Does this really need to be here twice? The parent proc doesn't even do anything yet. - Nodrak
return
/obj/machinery/door/window/mech_melee_attack(obj/mecha/M)
if(M.damtype == "brute")
- playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
+ playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
M.occupant_message("You hit [src].")
visible_message("[src] has been hit by [M.name].")
take_damage(M.force)
return
-/obj/machinery/door/window/attack_ai(mob/user as mob)
- return src.attack_hand(user)
+/obj/machinery/door/window/attack_ai(mob/user)
+ return attack_hand(user)
+
+/obj/machinery/door/window/attack_ghost(mob/user)
+ if(user.can_admin_interact())
+ return attack_hand(user)
/obj/machinery/door/window/proc/attack_generic(mob/user as mob, damage = 0)
- if(src.operating)
+ if(operating)
return
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
- playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
- user.visible_message("[user] smashes against the [src.name].", \
- "[user] smashes against the [src.name].")
+ playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
+ user.visible_message("[user] smashes against the [name].", \
+ "[user] smashes against the [name].")
take_damage(damage)
/obj/machinery/door/window/attack_alien(mob/living/user as mob)
-
if(islarva(user))
return
attack_generic(user, 25)
@@ -221,22 +224,21 @@
return
attack_generic(user, 25)
-
/obj/machinery/door/window/attack_hand(mob/user as mob)
- return src.attackby(user, user)
+ return attackby(user, user)
/obj/machinery/door/window/emag_act(user as mob, weapon as obj)
if(density)
- src.operating = -1
- flick("[src.base_state]spark", src)
+ operating = -1
+ flick("[base_state]spark", src)
sleep(6)
desc += "
Its access panel is smoking slightly."
if(istype(weapon, /obj/item/weapon/melee/energy/blade))
var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread()
- spark_system.set_up(5, 0, src.loc)
+ spark_system.set_up(5, 0, loc)
spark_system.start()
- playsound(src.loc, "sparks", 50, 1)
- playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
+ playsound(loc, "sparks", 50, 1)
+ playsound(loc, 'sound/weapons/blade1.ogg', 50, 1)
visible_message(" The glass door was sliced open by [user]!")
open(2)
emagged = 1
@@ -248,33 +250,33 @@
/obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/living/user as mob, params)
//If it's in the process of opening/closing, ignore the click
- if(src.operating)
+ if(operating)
return
add_fingerprint(user)
//Ninja swords? You may pass.
- if(src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)))
+ if(density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)))
emag_act(user,I)
return 1
if(istype(I, /obj/item/weapon/screwdriver))
- if(src.density || src.operating)
+ if(density || operating)
to_chat(user, "You need to open the door to access the maintenance panel.")
return
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- src.p_open = !( src.p_open )
- to_chat(user, "You [p_open ? "open":"close"] the maintenance panel of the [src.name].")
+ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ p_open = !( p_open )
+ to_chat(user, "You [p_open ? "open":"close"] the maintenance panel of the [name].")
return
if(istype(I, /obj/item/weapon/crowbar))
- if(p_open && !src.density && !src.operating)
- playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
- user.visible_message("[user] removes the electronics from the [src.name].", \
- "You start to remove electronics from the [src.name].")
+ if(p_open && !density && !operating)
+ playsound(loc, 'sound/items/Crowbar.ogg', 100, 1)
+ user.visible_message("[user] removes the electronics from the [name].", \
+ "You start to remove electronics from the [name].")
if(do_after(user,40, target = src))
- if(src.p_open && !src.density && !src.operating && src.loc)
- var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(src.loc)
+ if(p_open && !density && !operating && loc)
+ var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(loc)
switch(base_state)
if("left")
WA.facing = "l"
@@ -288,10 +290,10 @@
WA.secure = 1
WA.anchored = 1
WA.state= "02"
- WA.dir = src.dir
- WA.ini_dir = src.dir
+ WA.dir = dir
+ WA.ini_dir = dir
WA.update_icon()
- WA.created_name = src.name
+ WA.created_name = name
if(emagged)
to_chat(user, "You discard the damaged electronics.")
@@ -302,18 +304,18 @@
var/obj/item/weapon/airlock_electronics/ae
if(!electronics)
- ae = new/obj/item/weapon/airlock_electronics( src.loc )
- if(!src.req_access)
- src.check_access()
- if(src.req_access.len)
- ae.conf_access = src.req_access
- else if(src.req_one_access.len)
- ae.conf_access = src.req_one_access
+ ae = new/obj/item/weapon/airlock_electronics( loc )
+ if(!req_access)
+ check_access()
+ if(req_access.len)
+ ae.conf_access = req_access
+ else if(req_one_access.len)
+ ae.conf_access = req_one_access
ae.one_access = 1
else
ae = electronics
electronics = null
- ae.loc = src.loc
+ ae.loc = loc
qdel(src)
return
@@ -322,37 +324,37 @@
//If windoor is unpowered, crowbar, fireaxe and armblade can force it.
if(istype(I, /obj/item/weapon/crowbar) || istype(I, /obj/item/weapon/twohanded/fireaxe))
if(stat & NOPOWER)
- if(src.density)
+ if(density)
open(2)
else
close(2)
return
//If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway)
- if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card) )
+ if(density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card) )
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
if( (I.flags&NOBLUDGEON) || !I.force )
return
var/aforce = I.force
- playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
+ playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
visible_message("\The [src] has been hit by [user] with [I].")
if(I.damtype == BURN || I.damtype == BRUTE)
take_damage(aforce)
return
- if(!src.requiresID())
+ if(!requiresID())
//don't care who they are or what they have, act as if they're NOTHING
user = null
- if(src.allowed(user))
- if(src.density)
+ if(allowed(user) || user.can_admin_interact())
+ if(density)
open()
else
close()
- else if(src.density)
- flick(text("[]deny", src.base_state), src)
+ else if(density)
+ flick(text("[]deny", base_state), src)
return
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 655ffd11634..bbc22aa8b2a 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -25,32 +25,32 @@
/*
/obj/machinery/flasher/New()
sleep(4) //<--- What the fuck are you doing? D=
- src.sd_set_light(2)
+ sd_set_light(2)
*/
/obj/machinery/flasher/power_change()
if( powered() )
stat &= ~NOPOWER
icon_state = "[base_state]1"
-// src.sd_set_light(2)
+// sd_set_light(2)
else
stat |= ~NOPOWER
icon_state = "[base_state]1-p"
-// src.sd_set_light(0)
+// sd_set_light(0)
//Don't want to render prison breaks impossible
/obj/machinery/flasher/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/wirecutters))
add_fingerprint(user)
- src.disable = !src.disable
- if(src.disable)
+ disable = !disable
+ if(disable)
user.visible_message("\red [user] has disconnected the [src]'s flashbulb!", "\red You disconnect the [src]'s flashbulb!")
- if(!src.disable)
+ if(!disable)
user.visible_message("\red [user] has connected the [src]'s flashbulb!", "\red You connect the [src]'s flashbulb!")
//Let the AI trigger them directly.
/obj/machinery/flasher/attack_ai()
- if(src.anchored)
- return src.flash()
+ if(anchored)
+ return flash()
else
return
@@ -58,16 +58,16 @@
if(!(powered()))
return
- if((src.disable) || (src.last_flash && world.time < src.last_flash + 150))
+ if((disable) || (last_flash && world.time < last_flash + 150))
return
- playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
+ playsound(loc, 'sound/weapons/flash.ogg', 100, 1)
flick("[base_state]_flash", src)
- src.last_flash = world.time
+ last_flash = world.time
use_power(1000)
for(var/mob/living/L in viewers(src, null))
- if(get_dist(src, L) > src.range)
+ if(get_dist(src, L) > range)
continue
if(L.flash_eyes(affect_silicon = 1))
@@ -85,35 +85,51 @@
..(severity)
/obj/machinery/flasher/portable/HasProximity(atom/movable/AM as mob|obj)
- if((src.disable) || (src.last_flash && world.time < src.last_flash + 150))
+ if((disable) || (last_flash && world.time < last_flash + 150))
return
if(istype(AM, /mob/living/carbon))
var/mob/living/carbon/M = AM
- if((M.m_intent != "walk") && (src.anchored))
- src.flash()
+ if((M.m_intent != "walk") && (anchored))
+ flash()
/obj/machinery/flasher/portable/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/wrench))
add_fingerprint(user)
- src.anchored = !src.anchored
+ anchored = !anchored
- if(!src.anchored)
+ if(!anchored)
user.show_message(text("\red [src] can now be moved."))
- src.overlays.Cut()
+ overlays.Cut()
- else if(src.anchored)
+ else if(anchored)
user.show_message(text("\red [src] is now secured."))
- src.overlays += "[base_state]-s"
+ overlays += "[base_state]-s"
+// Flasher button
+/obj/machinery/flasher_button
+ name = "flasher button"
+ desc = "A remote control switch for a mounted flasher."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "launcherbtt"
+ var/id = null
+ var/active = 0
+ anchored = 1.0
+ use_power = 1
+ idle_power_usage = 2
+ active_power_usage = 4
+
/obj/machinery/flasher_button/attack_ai(mob/user as mob)
- return src.attack_hand(user)
+ return attack_hand(user)
+
+/obj/machinery/flasher_button/attack_ghost(mob/user)
+ if(user.can_admin_interact())
+ return attack_hand(user)
/obj/machinery/flasher_button/attackby(obj/item/weapon/W, mob/user as mob, params)
- return src.attack_hand(user)
+ return attack_hand(user)
/obj/machinery/flasher_button/attack_hand(mob/user as mob)
-
if(stat & (NOPOWER|BROKEN))
return
if(active)
@@ -125,13 +141,11 @@
icon_state = "launcheract"
for(var/obj/machinery/flasher/M in world)
- if(M.id == src.id)
+ if(M.id == id)
spawn()
M.flash()
sleep(50)
icon_state = "launcherbtt"
- active = 0
-
- return
\ No newline at end of file
+ active = 0
\ No newline at end of file
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index 1d8d9a1e22e..7f2c1706cbc 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -27,22 +27,22 @@
//var/page = null //For newspapers
/datum/feed_message/proc/clear()
- src.author = ""
- src.body = ""
- src.backup_body = ""
- src.backup_author = ""
- src.img = null
- src.backup_img = null
+ author = ""
+ body = ""
+ backup_body = ""
+ backup_author = ""
+ img = null
+ backup_img = null
view_count = 0
/datum/feed_channel/proc/clear()
- src.channel_name = ""
- src.messages = list()
- src.locked = 0
- src.author = ""
- src.backup_author = ""
- src.censored = 0
- src.is_admin_channel = 0
+ channel_name = ""
+ messages = list()
+ locked = 0
+ author = ""
+ backup_author = ""
+ censored = 0
+ is_admin_channel = 0
total_view_count = 0
/datum/feed_channel/proc/announce_news()
@@ -113,10 +113,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
/obj/machinery/newscaster/New() //Constructor, ho~
allCasters += src
- src.paper_remaining = 15 // Will probably change this to something better
+ paper_remaining = 15 // Will probably change this to something better
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) // Let's give it an appropriate unit number
- src.unit_no++
- src.update_icon() //for any custom ones on the map...
+ unit_no++
+ update_icon() //for any custom ones on the map...
..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that
/obj/machinery/newscaster/Destroy()
@@ -129,21 +129,21 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if(!ispowered || isbroken)
icon_state = "newscaster_off"
if(isbroken) //If the thing is smashed, add crack overlay on top of the unpowered sprite.
- src.overlays.Cut()
- src.overlays += image(src.icon, "crack3")
+ overlays.Cut()
+ overlays += image(icon, "crack3")
return
- src.overlays.Cut() //reset overlays
+ overlays.Cut() //reset overlays
if(news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message
icon_state = "newscaster_wanted"
return
if(alert) //new message alert overlay
- src.overlays += "newscaster_alert"
+ overlays += "newscaster_alert"
if(hitstaken > 0) //Cosmetic damage overlay
- src.overlays += image(src.icon, "crack[hitstaken]")
+ overlays += image(icon, "crack[hitstaken]")
icon_state = "newscaster_normal"
return
@@ -151,15 +151,15 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
/obj/machinery/newscaster/power_change()
if(isbroken) //Broken shit can't be powered.
return
- if( src.powered() )
- src.ispowered = 1
+ if( powered() )
+ ispowered = 1
stat &= ~NOPOWER
- src.update_icon()
+ update_icon()
else
spawn(rand(0, 15))
- src.ispowered = 0
+ ispowered = 0
stat |= NOPOWER
- src.update_icon()
+ update_icon()
/obj/machinery/newscaster/ex_act(severity)
@@ -168,36 +168,42 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
qdel(src)
return
if(2.0)
- src.isbroken=1
+ isbroken=1
if(prob(50))
qdel(src)
else
- src.update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in.
+ update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in.
return
else
if(prob(50))
- src.isbroken=1
- src.update_icon()
+ isbroken=1
+ update_icon()
return
return
-/obj/machinery/newscaster/attack_ai(mob/user as mob)
- return src.attack_hand(user)
+/obj/machinery/newscaster/attack_ai(mob/user)
+ return attack_hand(user)
+
+/obj/machinery/newscaster/attack_ghost(mob/user)
+ return attack_hand(user)
-/obj/machinery/newscaster/attack_hand(mob/user as mob) //########### THE MAIN BEEF IS HERE! And in the proc below this...############
- if(!src.ispowered || src.isbroken)
+/obj/machinery/newscaster/attack_hand(mob/user) //########### THE MAIN BEEF IS HERE! And in the proc below this...############
+ interact(user)
+
+/obj/machinery/newscaster/interact(mob/user)
+ if(!ispowered || isbroken)
return
- if(istype(user, /mob/living/carbon/human) || istype(user,/mob/living/silicon) )
- var/mob/living/human_or_robot_user = user
+ if(ishuman(user) || issilicon(user) || isobserver(user))
var/dat
- dat = text("