diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 420df85b46..79fcf77289 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -221,7 +221,7 @@ its easier to just keep the beam vertical.
/atom/proc/ex_act()
return
-/atom/proc/emag_act(var/remaining_uses, var/mob/user)
+/atom/proc/emag_act(var/remaining_charges, var/mob/user, var/emag_source)
return -1
/atom/proc/blob_act()
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 4900efb291..f644391bf7 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -425,7 +425,7 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
if(botEmagChance)
for(var/obj/machinery/bot/bot in machines)
if(prob(botEmagChance))
- bot.Emag()
+ bot.emag_act(1)
/*
diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm
index 803615adaf..88d8f8dd7e 100644
--- a/code/game/machinery/bots/bots.dm
+++ b/code/game/machinery/bots/bots.dm
@@ -32,15 +32,18 @@
if (src.health <= 0)
src.explode()
-/obj/machinery/bot/proc/Emag(mob/user as mob)
- if(locked)
+/obj/machinery/bot/emag_act(var/remaining_charges, var/user)
+ if(locked && !emagged)
locked = 0
emagged = 1
user << "You short out [src]'s maintenance hatch lock."
log_and_message_admins("emagged [src]'s maintenance hatch lock")
- if(!locked && open)
+ return 1
+
+ if(!locked && open && emagged == 1)
emagged = 2
log_and_message_admins("emagged [src]'s inner circuits")
+ return 1
/obj/machinery/bot/examine(mob/user)
..(user)
@@ -65,8 +68,6 @@
user << "Unable to repair with the maintenance panel closed."
else
user << "[src] does not need a repair."
- else if (istype(W, /obj/item/weapon/card/emag) && emagged < 2)
- Emag(user)
else
if(hasvar(W,"force") && hasvar(W,"damtype"))
switch(W.damtype)
diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm
index 935856269c..efb0a8097a 100644
--- a/code/game/machinery/bots/mulebot.dm
+++ b/code/game/machinery/bots/mulebot.dm
@@ -88,12 +88,7 @@
// cell: insert it
// other: chance to knock rider off bot
/obj/machinery/bot/mulebot/attackby(var/obj/item/I, var/mob/user)
- if(istype(I,/obj/item/weapon/card/emag))
- locked = !locked
- user << "You [locked ? "lock" : "unlock"] the mulebot's controls!"
- flick("mulebot-emagged", src)
- playsound(src.loc, 'sound/effects/sparks1.ogg', 100, 0)
- else if(istype(I,/obj/item/weapon/cell) && open && !cell)
+ if(istype(I,/obj/item/weapon/cell) && open && !cell)
var/obj/item/weapon/cell/C = I
user.drop_item()
C.loc = src
@@ -133,6 +128,12 @@
..()
return
+/obj/machinery/bot/mulebot/emag_act(var/remaining_charges, var/user)
+ locked = !locked
+ user << "You [locked ? "lock" : "unlock"] the mulebot's controls!"
+ flick("mulebot-emagged", src)
+ playsound(src.loc, 'sound/effects/sparks1.ogg', 100, 0)
+ return 1
/obj/machinery/bot/mulebot/ex_act(var/severity)
unload(0)
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 799590e65c..af33673a1f 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -216,13 +216,6 @@
else
locked = 0
user << "System unlocked."
- else if(istype(W, /obj/item/weapon/card/emag))
- if(isnull(occupant))
- return
- user << "You force an emergency ejection."
- locked = 0
- go_out()
- return
else if(istype(W, /obj/item/weapon/reagent_containers/food/snacks/meat))
user << "\The [src] processes \the [W]."
biomass += 50
@@ -252,6 +245,14 @@
else
..()
+/obj/machinery/clonepod/emag_act(var/remaining_charges, var/mob/user)
+ if(isnull(occupant))
+ return
+ user << "You force an emergency ejection."
+ locked = 0
+ go_out()
+ return 1
+
//Put messages in the connected computer's temp var for display.
/obj/machinery/clonepod/proc/connected_message(var/message)
if((isnull(connected)) || (!istype(connected, /obj/machinery/computer/cloning)))
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index d8d2a3bb0e..f579873701 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -221,8 +221,8 @@
return
-/obj/machinery/computer/arcade/attackby(I as obj, user as mob)
- if(istype(I, /obj/item/weapon/card/emag) && !emagged)
+/obj/machinery/computer/arcade/emag_act(var/charges, var/mob/user)
+ if(!emagged)
temp = "If you die in the game, you die for real!"
player_hp = 30
player_mp = 10
@@ -230,17 +230,13 @@
enemy_mp = 20
gameover = 0
blocked = 0
-
emagged = 1
enemy_name = "Cuban Pete"
name = "Outbomb Cuban Pete"
-
src.updateUsrDialog()
- else
- ..()
-
+ return 1
/obj/machinery/computer/arcade/emp_act(severity)
if(stat & (NOPOWER|BROKEN))
diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index 46d2735750..c11108b490 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -31,14 +31,13 @@
return 1
ui_interact(user)
-/obj/machinery/computer/atmoscontrol/attackby(var/obj/item/I as obj, var/mob/user as mob)
- if(istype(I, /obj/item/weapon/card/emag) && !emagged)
- user.visible_message("\The [user] swipes \a [I] through \the [src], causing the screen to flash!",\
- "You swipe your [I] through \the [src], the screen flashing as you gain full control.",\
- "You hear the swipe of a card through a reader, and an electronic warble.")
+/obj/machinery/computer/atmoscontrol/emag_act(var/remaining_carges, var/mob/user)
+ if(!emagged)
+ user.visible_message("\The [user] does something \the [src], causing the screen to flash!",\
+ "You cause the screen to flash as you gain full control.",\
+ "You hear an electronic warble.")
atmos_control.emagged = 1
- return
- return ..()
+ return 1
/obj/machinery/computer/atmoscontrol/ui_interact(var/mob/user)
if(!atmos_control)
diff --git a/code/game/machinery/computer/camera_circuit.dm b/code/game/machinery/computer/camera_circuit.dm
index 25baf81486..4680bb57d1 100644
--- a/code/game/machinery/computer/camera_circuit.dm
+++ b/code/game/machinery/computer/camera_circuit.dm
@@ -7,7 +7,7 @@
var/authorised = 0
var/possibleNets[0]
var/network = ""
- build_path = 0
+ build_path = null
//when adding a new camera network, you should only need to update these two procs
New()
@@ -19,36 +19,24 @@
possibleNets["Medbay"] = access_cmo
proc/updateBuildPath()
- build_path = ""
+ build_path = null
if(authorised && secured)
switch(network)
if("SS13")
- build_path = "/obj/machinery/computer/security"
+ build_path = /obj/machinery/computer/security
if("Engineering")
- build_path = "/obj/machinery/computer/security/engineering"
+ build_path = /obj/machinery/computer/security/engineering
if("Mining")
- build_path = "/obj/machinery/computer/security/mining"
+ build_path = /obj/machinery/computer/security/mining
if("Research")
- build_path = "/obj/machinery/computer/security/research"
+ build_path = /obj/machinery/computer/security/research
if("Medbay")
- build_path = "/obj/machinery/computer/security/medbay"
+ build_path = /obj/machinery/computer/security/medbay
if("Cargo")
- build_path = "/obj/machinery/computer/security/cargo"
+ build_path = /obj/machinery/computer/security/cargo
attackby(var/obj/item/I, var/mob/user)//if(health > 50)
..()
- if(istype(I,/obj/item/weapon/card/emag))
- if(network)
- var/obj/item/weapon/card/emag/E = I
- if(E.uses)
- E.uses--
- else
- return
- authorised = 1
- user << "You authorised the circuit network!"
- updateDialog()
- else
- user << "You must select a camera network circuit!"
else if(istype(I,/obj/item/weapon/screwdriver))
secured = !secured
user.visible_message("The [src] can [secured ? "no longer" : "now"] be modified.")
@@ -107,17 +95,7 @@
else if (possibleNets[network] in I.access)
authorised = 1
if(istype(I,/obj/item/weapon/card/emag))
- if(network)
- var/obj/item/weapon/card/emag/E = I
- if(E.uses)
- E.uses--
- else
- return
- authorised = 1
- usr << "You authorised the circuit network!"
- updateDialog()
- else
- usr << "You must select a camera network circuit!"
+ I.resolve_attackby(src, usr)
else if( href_list["removeauth"] )
authorised = 0
updateDialog()
@@ -125,3 +103,12 @@
updateDialog()
if(istype(src.loc,/mob))
attack_self(src.loc)
+
+/obj/item/weapon/circuitboard/camera/emag_act(var/remaining_charges, var/mob/user)
+ if(network)
+ authorised = 1
+ user << "You authorised the circuit network!"
+ updateDialog()
+ return 1
+ else
+ user << "You must select a camera network circuit!"
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index d2500f36c7..8a8d32a671 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -269,11 +269,11 @@
src.updateUsrDialog()
-/obj/machinery/computer/communications/attackby(var/obj/I as obj, var/mob/user as mob)
- if(istype(I,/obj/item/weapon/card/emag/))
+/obj/machinery/computer/communications/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
src.emagged = 1
user << "You scramble the communication routing circuits!"
- ..()
+ return 1
/obj/machinery/computer/communications/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm
index f775c5f950..779e2a1460 100644
--- a/code/game/machinery/computer/message.dm
+++ b/code/game/machinery/computer/message.dm
@@ -37,24 +37,6 @@
return
if(!istype(user))
return
- if(istype(O,/obj/item/weapon/card/emag/))
- // Will create sparks and print out the console's password. You will then have to wait a while for the console to be back online.
- // It'll take more time if there's more characters in the password..
- if(!emag)
- if(!isnull(src.linkedServer))
- icon_state = hack_icon // An error screen I made in the computers.dmi
- emag = 1
- screen = 2
- spark_system.set_up(5, 0, src)
- src.spark_system.start()
- var/obj/item/weapon/paper/monitorkey/MK = new/obj/item/weapon/paper/monitorkey
- MK.loc = src.loc
- // Will help make emagging the console not so easy to get away with.
- MK.info += "
£%@%(*$%&(£&?*(%&£/{}"
- spawn(100*length(src.linkedServer.decryptkey)) UnmagConsole()
- message = rebootmsg
- else
- user << "A no server error appears on the screen."
if(isscrewdriver(O) && emag)
//Stops people from just unscrewing the monitor and putting it back to get the console working again.
user << "It is too hot to mess with!"
@@ -63,6 +45,26 @@
..()
return
+/obj/machinery/computer/message_monitor/emag_act(var/remaining_charges, var/mob/user)
+ // Will create sparks and print out the console's password. You will then have to wait a while for the console to be back online.
+ // It'll take more time if there's more characters in the password..
+ if(!emag && operable())
+ if(!isnull(src.linkedServer))
+ icon_state = hack_icon // An error screen I made in the computers.dmi
+ emag = 1
+ screen = 2
+ spark_system.set_up(5, 0, src)
+ src.spark_system.start()
+ var/obj/item/weapon/paper/monitorkey/MK = new/obj/item/weapon/paper/monitorkey
+ MK.loc = src.loc
+ // Will help make emagging the console not so easy to get away with.
+ MK.info += "
£%@%(*$%&(£&?*(%&£/{}"
+ spawn(100*length(src.linkedServer.decryptkey)) UnmagConsole()
+ message = rebootmsg
+ return 1
+ else
+ user << "A no server error appears on the screen."
+
/obj/machinery/computer/message_monitor/update_icon()
..()
if(stat & (NOPOWER|BROKEN))
diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm
index 8ff3a8e103..f33e3af833 100644
--- a/code/game/machinery/computer/prisonshuttle.dm
+++ b/code/game/machinery/computer/prisonshuttle.dm
@@ -47,9 +47,6 @@ var/prison_shuttle_timeleft = 0
A.icon_state = "4"
qdel(src)
- else if(istype(I,/obj/item/weapon/card/emag) && (!hacked))
- hacked = 1
- user << "You disable the lock."
else
return src.attack_hand(user)
@@ -235,3 +232,9 @@ var/prison_shuttle_timeleft = 0
start_location.move_contents_to(end_location)
return
+
+/obj/machinery/computer/prison_shuttle/emag_act(var/charges, var/mob/user)
+ if(!hacked)
+ hacked = 1
+ user << "You disable the lock."
+ return 1
diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm
index ea8cf4d726..489934e68a 100644
--- a/code/game/machinery/computer/specops_shuttle.dm
+++ b/code/game/machinery/computer/specops_shuttle.dm
@@ -249,11 +249,8 @@ var/specops_shuttle_timeleft = 0
/obj/machinery/computer/specops_shuttle/attack_ai(var/mob/user as mob)
return attack_hand(user)
-/obj/machinery/computer/specops_shuttle/attackby(I as obj, user as mob)
- if(istype(I,/obj/item/weapon/card/emag))
- user << "The electronic systems in this console are far too advanced for your primitive hacking peripherals."
- else
- return attack_hand(user)
+/obj/machinery/computer/specops_shuttle/emag_act(var/remaining_charges, var/mob/user)
+ user << "The electronic systems in this console are far too advanced for your primitive hacking peripherals."
/obj/machinery/computer/specops_shuttle/attack_hand(var/mob/user as mob)
if(!allowed(user))
diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm
index 9d05249d95..07b4e007a3 100644
--- a/code/game/machinery/computer/supply.dm
+++ b/code/game/machinery/computer/supply.dm
@@ -207,14 +207,11 @@
onclose(user, "computer")
return
-/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob)
- if(istype(I,/obj/item/weapon/card/emag) && !hacked)
+/obj/machinery/computer/supplycomp/emag_act(var/remaining_charges, var/mob/user)
+ if(!hacked)
user << "Special supplies unlocked."
hacked = 1
- return
- else
- ..()
- return
+ return 1
/obj/machinery/computer/supplycomp/Topic(href, href_list)
if(!supply_controller)
diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm
index 3357072c28..333584a921 100644
--- a/code/game/machinery/computer/syndicate_specops_shuttle.dm
+++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm
@@ -185,11 +185,8 @@ var/syndicate_elite_shuttle_timeleft = 0
/obj/machinery/computer/syndicate_elite_shuttle/attack_ai(var/mob/user as mob)
return attack_hand(user)
-/obj/machinery/computer/syndicate_elite_shuttle/attackby(I as obj, user as mob)
- if(istype(I,/obj/item/weapon/card/emag))
- user << "The electronic systems in this console are far too advanced for your primitive hacking peripherals."
- else
- return attack_hand(user)
+/obj/machinery/computer/syndicate_elite_shuttle/emag_act(var/remaining_charges, var/mob/user)
+ user << "The electronic systems in this console are far too advanced for your primitive hacking peripherals."
/obj/machinery/computer/syndicate_elite_shuttle/attack_hand(var/mob/user as mob)
if(!allowed(user))
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index 73501f283d..167190c336 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -186,25 +186,6 @@ for reference:
visible_message("BZZzZZzZZzZT")
return
return
- else if (istype(W, /obj/item/weapon/card/emag))
- if (src.emagged == 0)
- src.emagged = 1
- src.req_access.Cut()
- src.req_one_access.Cut()
- user << "You break the ID authentication lock on \the [src]."
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(2, 1, src)
- s.start()
- visible_message("BZZzZZzZZzZT")
- return
- else if (src.emagged == 1)
- src.emagged = 2
- user << "You short out the anchoring mechanism on \the [src]."
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(2, 1, src)
- s.start()
- visible_message("BZZzZZzZZzZT")
- return
else if (istype(W, /obj/item/weapon/wrench))
if (src.health < src.maxhealth)
src.health = src.maxhealth
@@ -276,3 +257,24 @@ for reference:
explosion(src.loc,-1,-1,0)
if(src)
qdel(src)
+
+
+/obj/machinery/deployable/barrier/emag_act(var/remaining_charges, var/mob/user)
+ if (src.emagged == 0)
+ src.emagged = 1
+ src.req_access.Cut()
+ src.req_one_access.Cut()
+ user << "You break the ID authentication lock on \the [src]."
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(2, 1, src)
+ s.start()
+ visible_message("BZZzZZzZZzZT")
+ return 1
+ else if (src.emagged == 1)
+ src.emagged = 2
+ user << "You short out the anchoring mechanism on \the [src]."
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(2, 1, src)
+ s.start()
+ visible_message("BZZzZZzZZzZT")
+ return 1
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index e010264d4a..4fc7562b3a 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -40,11 +40,14 @@
*/
if(istype(W, /obj/item/device/detective_scanner))
return
- if(istype(W, /obj/item/weapon/card/emag))
+ return src.attack_hand(user)
+
+/obj/machinery/button/remote/emag_act(var/remaining_charges, var/mob/user)
+ if(req_access.len || req_one_access.len)
req_access = list()
req_one_access = list()
playsound(src.loc, "sparks", 100, 1)
- return src.attack_hand(user)
+ return 1
/obj/machinery/button/remote/attack_hand(mob/user as mob)
if(..())
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 9f5a831b16..32b7a5b46b 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -272,13 +272,6 @@
if(src.operating) return
- if(src.density && (operable() && istype(I, /obj/item/weapon/card/emag)))
- do_animate("spark")
- sleep(6)
- open()
- operating = -1
- return 1
-
if(src.allowed(user) && operable())
if(src.density)
open()
@@ -290,6 +283,14 @@
do_animate("deny")
return
+/obj/machinery/door/emag_act(var/remaining_charges)
+ if(density && operable())
+ do_animate("spark")
+ sleep(6)
+ open()
+ operating = -1
+ return 1
+
/obj/machinery/door/proc/take_damage(var/damage)
var/initialhealth = src.health
src.health = max(0, src.health - damage)
diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm
index dce2ab37bd..c87ab1ad35 100644
--- a/code/game/machinery/doors/unpowered.dm
+++ b/code/game/machinery/doors/unpowered.dm
@@ -1,26 +1,25 @@
-/obj/machinery/door/unpowered
- autoclose = 0
- var/locked = 0
-
-
- Bumped(atom/AM)
- if(src.locked)
- return
- ..()
- return
-
-
- attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)) return
- if(src.locked) return
- ..()
- return
-
-
-
-/obj/machinery/door/unpowered/shuttle
- icon = 'icons/turf/shuttle.dmi'
- name = "door"
- icon_state = "door1"
- opacity = 1
- density = 1
\ No newline at end of file
+/obj/machinery/door/unpowered
+ autoclose = 0
+ var/locked = 0
+
+/obj/machinery/door/unpowered/Bumped(atom/AM)
+ if(src.locked)
+ return
+ ..()
+ return
+
+/obj/machinery/door/unpowered/attackby(obj/item/I as obj, mob/user as mob)
+ if(istype(I, /obj/item/weapon/melee/energy/blade)) return
+ if(src.locked) return
+ ..()
+ return
+
+/obj/machinery/door/unpowered/emag_act()
+ return -1
+
+/obj/machinery/door/unpowered/shuttle
+ icon = 'icons/turf/shuttle.dmi'
+ name = "door"
+ icon_state = "door1"
+ opacity = 1
+ density = 1
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index f846af3727..dc3edc9328 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -163,6 +163,14 @@
return
return src.attackby(user, user)
+/obj/machinery/door/window/emag_act(var/remaining_charges, var/mob/user)
+ if (density && operable())
+ operating = -1
+ flick("[src.base_state]spark", src)
+ sleep(6)
+ open()
+ return 1
+
/obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/user as mob)
//If it's in the process of opening/closing, ignore the click
@@ -170,18 +178,14 @@
return
//Emags and ninja swords? You may pass.
- if (src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)))
- src.operating = -1
- if(istype(I, /obj/item/weapon/melee/energy/blade))
+ if (istype(I, /obj/item/weapon/melee/energy/blade))
+ if(emag_act(10, user))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src.loc, "sparks", 50, 1)
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
visible_message("The glass door was sliced open by [user]!")
- flick("[src.base_state]spark", src)
- sleep(6)
- open()
return 1
//If it's emagged, crowbar can pry electronics out.
diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm
index 90305a7a78..65b1f2ca6f 100644
--- a/code/game/machinery/jukebox.dm
+++ b/code/game/machinery/jukebox.dm
@@ -174,17 +174,16 @@ datum/track/New(var/title_name, var/audio)
power_change()
update_icon()
return
- if(istype(W, /obj/item/weapon/card/emag))
- if(!emagged)
- emagged = 1
- StopPlaying()
- visible_message("\the [src] makes a fizzling sound.")
- log_and_message_admins("emagged \the [src]")
- update_icon()
- return
-
return ..()
+/obj/machinery/media/jukebox/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
+ emagged = 1
+ StopPlaying()
+ visible_message("\The [src] makes a fizzling sound.")
+ update_icon()
+ return 1
+
/obj/machinery/media/jukebox/proc/StopPlaying()
var/area/main_area = get_area(src)
// Always kill the current sound
diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm
index 13d55e725b..3d18d80a1e 100644
--- a/code/game/machinery/kitchen/gibber.dm
+++ b/code/game/machinery/kitchen/gibber.dm
@@ -84,16 +84,12 @@
..()
usr << "The safety guard is [emagged ? "disabled" : "enabled"]."
+/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user)
+ emagged = !emagged
+ user << "You [emagged ? "disable" : "enable"] the gibber safety guard."
+ return 1
+
/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user)
-
- if(istype(W,/obj/item/weapon/card))
- if(!allowed(user) && !istype(W,/obj/item/weapon/card/emag))
- user << "Access denied."
- return
- emagged = !emagged
- user << "You [emagged ? "disable" : "enable"] the gibber safety guard."
- return
-
var/obj/item/weapon/grab/G = W
if(!istype(G))
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index 3125b35df6..ecc58a4371 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -235,14 +235,12 @@
user << "\The [src] smartly refuses [O]."
return 1
-/obj/machinery/smartfridge/secure/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(istype(O, /obj/item/weapon/card/emag))
+/obj/machinery/smartfridge/secure/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
emagged = 1
locked = -1
user << "You short out the product lock on [src]."
- return
-
- ..()
+ return 1
/obj/machinery/smartfridge/attack_ai(mob/user as mob)
attack_hand(user)
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 4ea2f416f7..9fa78ee968 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -276,18 +276,6 @@
user << "You remove the turret but did not manage to salvage anything."
qdel(src) // qdel
- if(istype(I, /obj/item/weapon/card/emag) && !emagged)
- //Emagging the turret makes it go bonkers and stun everyone. It also makes
- //the turret shoot much, much faster.
- user << "You short out [src]'s threat assessment circuits."
- visible_message("[src] hums oddly...")
- emagged = 1
- iconholder = 1
- controllock = 1
- enabled = 0 //turns off the turret temporarily
- sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit
- enabled = 1 //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here
-
else if((istype(I, /obj/item/weapon/wrench)))
if(enabled || raised)
user << "You cannot unsecure an active turret!"
@@ -343,6 +331,20 @@
sleep(60)
attacked = 0
..()
+
+/obj/machinery/porta_turret/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
+ //Emagging the turret makes it go bonkers and stun everyone. It also makes
+ //the turret shoot much, much faster.
+ user << "You short out [src]'s threat assessment circuits."
+ visible_message("[src] hums oddly...")
+ emagged = 1
+ iconholder = 1
+ controllock = 1
+ enabled = 0 //turns off the turret temporarily
+ sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit
+ enabled = 1 //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here
+ return 1
/obj/machinery/porta_turret/proc/take_damage(var/force)
health -= force
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index cb487ae58c..1d2344e958 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -708,24 +708,6 @@
src.updateUsrDialog()
return
- else if(istype(I,/obj/item/weapon/card/emag))
-
- if(emagged)
- user << "The cycler has already been subverted."
- return
-
- var/obj/item/weapon/card/emag/E = I
- src.updateUsrDialog()
- E.uses--
-
- //Clear the access reqs, disable the safeties, and open up all paintjobs.
- user << "You run the sequencer across the interface, corrupting the operating protocols."
- departments = list("Engineering","Mining","Medical","Security","Atmos","^%###^%$")
- emagged = 1
- safeties = 0
- req_access = list()
- return
-
else if(istype(I,/obj/item/clothing/head/helmet/space) && !istype(I, /obj/item/clothing/head/helmet/space/rig))
if(locked)
@@ -773,6 +755,20 @@
return
..()
+
+/obj/machinery/suit_cycler/emag_act(var/remaining_charges, var/mob/user)
+ if(emagged)
+ user << "The cycler has already been subverted."
+ return
+
+ //Clear the access reqs, disable the safeties, and open up all paintjobs.
+ user << "You run the sequencer across the interface, corrupting the operating protocols."
+ departments = list("Engineering","Mining","Medical","Security","Atmos","^%###^%$")
+ emagged = 1
+ safeties = 0
+ req_access = list()
+ src.updateUsrDialog()
+ return 1
/obj/machinery/suit_cycler/attack_hand(mob/user as mob)
diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm
index ef3c7d6ea9..2f6165a733 100644
--- a/code/game/machinery/telecomms/logbrowser.dm
+++ b/code/game/machinery/telecomms/logbrowser.dm
@@ -212,9 +212,13 @@
A.icon_state = "4"
A.anchored = 1
qdel(src)
- else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "You you disable the security protocols"
src.updateUsrDialog()
return
+
+/obj/machinery/computer/telecomms/server/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ emagged = 1
+ user << "You you disable the security protocols"
+ src.updateUsrDialog()
+ return 1
diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm
index ca132cc06e..7dd30dd8c3 100644
--- a/code/game/machinery/telecomms/telemonitor.dm
+++ b/code/game/machinery/telecomms/telemonitor.dm
@@ -150,9 +150,13 @@
A.icon_state = "4"
A.anchored = 1
qdel(src)
- else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "You you disable the security protocols"
src.updateUsrDialog()
return
+
+/obj/machinery/computer/telecomms/monitor/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ emagged = 1
+ user << "You you disable the security protocols"
+ src.updateUsrDialog()
+ return 1
diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm
index 6917675653..1123733103 100644
--- a/code/game/machinery/telecomms/traffic_control.dm
+++ b/code/game/machinery/telecomms/traffic_control.dm
@@ -233,9 +233,13 @@
A.icon_state = "4"
A.anchored = 1
qdel(src)
- else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "You you disable the security protocols"
src.updateUsrDialog()
return
+
+/obj/machinery/computer/telecomms/traffic/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ emagged = 1
+ user << "You you disable the security protocols"
+ src.updateUsrDialog()
+ return 1
diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm
index 943242d409..a1e2287f58 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -84,13 +84,6 @@
if(stat & BROKEN)
return
- if(!emagged && istype(W, /obj/item/weapon/card/emag))
- user << "You short out the turret controls' access analysis module."
- emagged = 1
- locked = 0
- ailock = 0
- return
-
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(src.allowed(usr))
if(emagged)
@@ -100,6 +93,14 @@
user << "You [ locked ? "lock" : "unlock"] the panel."
return
return ..()
+
+/obj/machinery/turretid/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
+ user << "You short out the turret controls' access analysis module."
+ emagged = 1
+ locked = 0
+ ailock = 0
+ return 1
/obj/machinery/turretid/attack_ai(mob/user as mob)
if(isLocked(user))
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 43d0f107c0..283c1b6f95 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -176,6 +176,12 @@
return
return
+
+/obj/machinery/vending/emag_act(var/remaining_charges, var/mob/user)
+ if (!emagged)
+ src.emagged = 1
+ user << "You short out the product lock on \the [src]"
+ return 1
/obj/machinery/vending/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -207,10 +213,6 @@
if (I || istype(W, /obj/item/weapon/spacecash))
attack_hand(user)
return
- else if (istype(W, /obj/item/weapon/card/emag))
- src.emagged = 1
- user << "You short out the product lock on \the [src]"
- return
else if(istype(W, /obj/item/weapon/screwdriver))
src.panel_open = !src.panel_open
user << "You [src.panel_open ? "open" : "close"] the maintenance panel."
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 641c86e70e..07c54ceb2b 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -192,27 +192,6 @@
M << "You don't have required permissions to use [src]"
return 0
-
-/obj/machinery/mecha_part_fabricator/proc/emag()
- sleep()
- switch(emagged)
- if(0)
- emagged = 0.5
- src.visible_message("\icon[src] [src] beeps: \"DB error \[Code 0x00F1\]\"")
- sleep(10)
- src.visible_message("\icon[src] [src] beeps: \"Attempting auto-repair\"")
- sleep(15)
- src.visible_message("\icon[src] [src] beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
- sleep(30)
- src.visible_message("\icon[src] [src] beeps: \"User DB truncated. Please contact your Nanotrasen system operator for future assistance.\"")
- req_access = null
- emagged = 1
- if(0.5)
- src.visible_message("\icon[src] [src] beeps: \"DB not responding \[Code 0x0003\]...\"")
- if(1)
- src.visible_message("\icon[src] [src] beeps: \"No records in User DB\"")
- return
-
/obj/machinery/mecha_part_fabricator/proc/convert_part_set(set_name as text)
var/list/parts = part_sets[set_name]
if(istype(parts, /list))
@@ -724,7 +703,26 @@
qdel(res)
return result
-
+/obj/machinery/mecha_part_fabricator/emag_act(var/remaining_charges, var/mob/user)
+ sleep()
+ switch(emagged)
+ if(0)
+ emagged = 0.5
+ src.visible_message("\icon[src] [src] beeps: \"DB error \[Code 0x00F1\]\"")
+ sleep(10)
+ src.visible_message("\icon[src] [src] beeps: \"Attempting auto-repair\"")
+ sleep(15)
+ src.visible_message("\icon[src] [src] beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
+ sleep(30)
+ src.visible_message("\icon[src] [src] beeps: \"User DB truncated. Please contact your Nanotrasen system operator for future assistance.\"")
+ req_access = null
+ emagged = 1
+ return 1
+ if(0.5)
+ src.visible_message("\icon[src] [src] beeps: \"DB not responding \[Code 0x0003\]...\"")
+ if(1)
+ src.visible_message("\icon[src] [src] beeps: \"No records in User DB\"")
+
/obj/machinery/mecha_part_fabricator/attackby(obj/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/screwdriver))
if (!opened)
@@ -771,10 +769,6 @@
user << "You can't load the [src.name] while it's opened."
return 1
- if(istype(W, /obj/item/weapon/card/emag))
- emag()
- return
-
var/material
switch(W.type)
if(/obj/item/stack/material/gold)
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index 3471d1fcfe..a1355ccccc 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -67,10 +67,6 @@
user << "It has [uses] lights remaining."
/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user)
- if(istype(W, /obj/item/weapon/card/emag) && emagged == 0)
- Emag()
- return
-
if(istype(W, /obj/item/stack/material/glass))
var/obj/item/stack/material/glass/G = W
if(uses >= max_uses)
@@ -173,14 +169,11 @@
U << "There is a working [target.fitting] already inserted."
return
-/obj/item/device/lightreplacer/proc/Emag()
+/obj/item/device/lightreplacer/emag_act(var/remaining_charges, var/mob/user)
emagged = !emagged
playsound(src.loc, "sparks", 100, 1)
- if(emagged)
- name = "Shortcircuited [initial(name)]"
- else
- name = initial(name)
update_icon()
+ return 1
//Can you use it?
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
index 2e08de6d81..0357a8b80b 100644
--- a/code/game/objects/items/devices/megaphone.dm
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -46,10 +46,9 @@
spamcheck = 0
return
-/obj/item/device/megaphone/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/weapon/card/emag) && !emagged)
+/obj/item/device/megaphone/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
user << "You overload \the [src]'s voice synthesizer."
emagged = 1
insults = rand(1, 3)//to prevent dickflooding
- return
- return
+ return 1
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 405e77db7a..e59d3e993b 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -48,16 +48,15 @@
timestamp += timerecorded
storedinfo += "*\[[time2text(timerecorded*10,"mm:ss")]\] *[strip_html_properly(recordedtext)]*" //"*" at front as a marker
-/obj/item/device/taperecorder/attackby(obj/item/weapon/W as obj, mob/user as mob)
- ..()
- if(istype(W, /obj/item/weapon/card/emag))
- if(emagged == 0)
- emagged = 1
- recording = 0
- user << "PZZTTPFFFT"
- icon_state = "taperecorderidle"
- else
- user << "It is already emagged!"
+/obj/item/device/taperecorder/emag_act(var/remaining_charges, var/mob/user)
+ if(emagged == 0)
+ emagged = 1
+ recording = 0
+ user << "PZZTTPFFFT"
+ icon_state = "taperecorderidle"
+ return 1
+ else
+ user << "It is already emagged!"
/obj/item/device/taperecorder/proc/explode()
var/turf/T = get_turf(loc)
diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm
index d2627ed094..0ebc4a27e1 100644
--- a/code/game/objects/items/devices/whistle.dm
+++ b/code/game/objects/items/devices/whistle.dm
@@ -47,12 +47,10 @@ obj/item/device/hailer/attack_self(mob/living/carbon/user as mob)
spawn(20)
spamcheck = 0
-/obj/item/device/hailer/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/weapon/card/emag))
- if(isnull(insults))
- user << "You overload \the [src]'s voice synthesizer."
- insults = rand(1, 3)//to prevent dickflooding
- else
- user << "The hailer is fried. You can't even fit the sequencer into the input slot."
+/obj/item/device/hailer/emag_act(var/remaining_charges, var/mob/user)
+ if(isnull(insults))
+ user << "You overload \the [src]'s voice synthesizer."
+ insults = rand(1, 3)//to prevent dickflooding
+ return 1
else
- return .. ()
+ user << "The hailer is fried. You can't even fit the sequencer into the input slot."
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index f4c03bf2bc..96ddeccec6 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -326,12 +326,10 @@
user << "You insert the flash into the eye socket!"
-/obj/item/robot_parts/attackby(obj/item/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/card/emag))
- if(sabotaged)
- user << "[src] is already sabotaged!"
- else
- user << "You slide [W] into the dataport on [src] and short out the safeties."
- sabotaged = 1
- return
- ..()
+/obj/item/robot_parts/emag_act(var/remaining_charges, var/mob/user)
+ if(sabotaged)
+ user << "[src] is already sabotaged!"
+ else
+ user << "You short out the safeties."
+ sabotaged = 1
+ return 1
diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
index 56fbf2bff2..ef6b4c4d57 100644
--- a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
+++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
@@ -36,16 +36,18 @@
/obj/item/weapon/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C)
if (..(C))
network = C.network
+
+/obj/item/weapon/circuitboard/security/emag_act(var/remaining_charges, var/mob/user)
+ if(emagged)
+ user << "Circuit lock is already removed."
+ return
+ user << "You override the circuit lock and open controls."
+ emagged = 1
+ locked = 0
+ return 1
/obj/item/weapon/circuitboard/security/attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I,/obj/item/weapon/card/emag))
- if(emagged)
- user << "Circuit lock is already removed."
- return
- user << "You override the circuit lock and open controls."
- emagged = 1
- locked = 0
- else if(istype(I,/obj/item/weapon/card/id))
+ if(istype(I,/obj/item/weapon/card/id))
if(emagged)
user << "Circuit lock does not respond."
return
diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm
index b5466f7a39..297ac1d4b1 100644
--- a/code/game/objects/items/weapons/storage/lockbox.dm
+++ b/code/game/objects/items/weapons/storage/lockbox.dm
@@ -34,23 +34,13 @@
return
else
user << "Access Denied"
- else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
- broken = 1
- locked = 0
- desc = "It appears to be broken."
- icon_state = src.icon_broken
- if(istype(W, /obj/item/weapon/melee/energy/blade))
+ else if(istype(W, /obj/item/weapon/melee/energy/blade))
+ if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with an energy blade!", "You hear metal being sliced and sparks flying."))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
- for(var/mob/O in viewers(user, 3))
- O.show_message(text("The locker has been sliced open by [] with an energy blade!", user), 1, text("You hear metal being sliced and sparks flying."), 2)
- else
- for(var/mob/O in viewers(user, 3))
- O.show_message(text("The locker has been broken by [] with an electromagnetic card!", user), 1, text("You hear a faint electrical spark."), 2)
-
if(!locked)
..()
else
@@ -65,6 +55,23 @@
..()
return
+/obj/item/weapon/storage/lockbox/emag_act(var/remaining_charges, var/mob/user, var/visual_feedback = "", var/audible_feedback = "")
+ if(!broken)
+ if(visual_feedback)
+ visual_feedback = "[visual_feedback]"
+ else
+ visual_feedback = "The locker has been sliced open by [user] with an electromagnetic card!"
+ if(audible_feedback)
+ audible_feedback = "[audible_feedback]"
+ else
+ audible_feedback = "You hear a faint electrical spark."
+
+ broken = 1
+ locked = 0
+ desc = "It appears to be broken."
+ icon_state = src.icon_broken
+ visible_message(visual_feedback, audible_feedback)
+ return 1
/obj/item/weapon/storage/lockbox/loyalty
name = "lockbox of loyalty implants"
diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm
index ef5d8db334..293d53b9b2 100644
--- a/code/game/objects/items/weapons/storage/secure.dm
+++ b/code/game/objects/items/weapons/storage/secure.dm
@@ -33,22 +33,12 @@
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(locked)
- if ( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && (!src.emagged))
- emagged = 1
- src.overlays += image('icons/obj/storage.dmi', icon_sparking)
- sleep(6)
- src.overlays = null
- overlays += image('icons/obj/storage.dmi', icon_locking)
- locked = 0
- if(istype(W, /obj/item/weapon/melee/energy/blade))
- var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
- spark_system.set_up(5, 0, src.loc)
- spark_system.start()
- playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
- playsound(src.loc, "sparks", 50, 1)
- user << "You slice through the lock on [src]."
- else
- user << "You short out the lock on [src]."
+ if (emag_act(INFINITY, user, "You slice through the lock of \the [src]"))
+ var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
+ spark_system.set_up(5, 0, src.loc)
+ spark_system.start()
+ playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
+ playsound(src.loc, "sparks", 50, 1)
return
if (istype(W, /obj/item/weapon/screwdriver))
@@ -136,6 +126,17 @@
return
return
+/obj/item/weapon/storage/secure/emag_act(var/remaining_charges, var/mob/user, var/feedback)
+ if(!emagged)
+ emagged = 1
+ src.overlays += image('icons/obj/storage.dmi', icon_sparking)
+ sleep(6)
+ src.overlays = null
+ overlays += image('icons/obj/storage.dmi', icon_locking)
+ locked = 0
+ user << (feedback ? feedback : "You short out the lock of \the [src].")
+ return 1
+
// -----------------------------
// Secure Briefcase
// -----------------------------
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index 66609f5661..c732faeeea 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -83,22 +83,26 @@
src.desc = "Owned by [I.registered_name]."
else
user << "Access Denied"
- else if( (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
- broken = 1
- locked = 0
- desc = "It appears to be broken."
- icon_state = src.icon_broken
- if(istype(W, /obj/item/weapon/melee/energy/blade))
+ else if(istype(W, /obj/item/weapon/melee/energy/blade))
+ if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying."))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
- for(var/mob/O in viewers(user, 3))
- O.show_message("The locker has been sliced open by [user] with an energy blade!", 1, "You hear metal being sliced and sparks flying.", 2)
else
user << "Access Denied"
return
+
+/obj/structure/closet/secure_closet/personal/emag_act(var/remaining_charges, var/mob/user, var/visual_feedback, var/audible_feedback)
+ if(!broken)
+ broken = 1
+ locked = 0
+ desc = "It appears to be broken."
+ icon_state = src.icon_broken
+ if(visual_feedback)
+ visible_message("[visual_feedback]", "[audible_feedback]")
+ return 1
/obj/structure/closet/secure_closet/personal/verb/reset()
set src in oview(1) // One square distance
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index 55cd3b51ca..3bc5dfc393 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -78,28 +78,31 @@
user.drop_item()
if(W)
W.loc = src.loc
- else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
- broken = 1
- locked = 0
- desc = "It appears to be broken."
- icon_state = icon_off
- flick(icon_broken, src)
- if(istype(W, /obj/item/weapon/melee/energy/blade))
+ else if(istype(W, /obj/item/weapon/melee/energy/blade))
+ if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying."))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
- for(var/mob/O in viewers(user, 3))
- O.show_message("The locker has been sliced open by [user] with an energy blade!", 1, "You hear metal being sliced and sparks flying.", 2)
- else
- for(var/mob/O in viewers(user, 3))
- O.show_message("The locker has been broken by [user] with an electromagnetic card!", 1, "You hear a faint electrical spark.", 2)
else if(istype(W,/obj/item/weapon/packageWrap) || istype(W,/obj/item/weapon/weldingtool))
return ..(W,user)
else
togglelock(user)
+/obj/structure/closet/secure_closet/attack_hand(var/remaining_charges, var/mob/user, var/visual_feedback, var/audible_feedback)
+ if(!broken)
+ broken = 1
+ locked = 0
+ desc = "It appears to be broken."
+ icon_state = icon_off
+ flick(icon_broken, src)
+
+ if(visual_feedback)
+ visible_message(visual_feedback, audible_feedback)
+ else
+ visible_message("The locker has been broken by [user] with an electromagnetic card!", "You hear a faint electrical spark.")
+
/obj/structure/closet/secure_closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
if(src.locked)
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index ad28bb4019..2e76ad3c88 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -187,7 +187,15 @@
/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(is_type_in_list(W, list(/obj/item/weapon/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/wirecutters)))
return ..()
- if(locked && (istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)))
+ if(istype(W, /obj/item/weapon/melee/energy/blade))
+ emag_act(INFINITY, user)
+ if(!opened)
+ src.togglelock(user)
+ return
+ return ..()
+
+/obj/structure/closet/crate/secure/emag_act(var/remaining_charges, var/mob/user)
+ if(!broken)
overlays.Cut()
overlays += emag
overlays += sparks
@@ -196,11 +204,7 @@
src.locked = 0
src.broken = 1
user << "You unlock \the [src]."
- return
- if(!opened)
- src.togglelock(user)
- return
- return ..()
+ return 1
/obj/structure/closet/crate/secure/emp_act(severity)
for(var/obj/O in src)
diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm
index d9e75f9907..57259824c4 100644
--- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm
@@ -11,20 +11,11 @@
return chest.attackby(W,user)
// Lock or unlock the access panel.
- if(istype(W, /obj/item/weapon/card) || istype(W, /obj/item/device/pda))
-
+ if(W.GetID())
if(subverted)
locked = 0
user << "It looks like the locking system has been shorted out."
return
- else if(istype(W, /obj/item/weapon/card/emag))
- locked_dna = null
- req_access.Cut()
- req_one_access.Cut()
- locked = 0
- subverted = 1
- user << "You short out the access protocol for the suit."
- return
if((!req_access || !req_access.len) && (!req_one_access || !req_one_access.len))
locked = 0
@@ -193,4 +184,14 @@
if(electrified != 0)
if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here.
return
- ..()
\ No newline at end of file
+ ..()
+
+/obj/item/weapon/rig/emag_act(var/remaining_charges, var/mob/user)
+ if(!subverted)
+ locked_dna = null
+ req_access.Cut()
+ req_one_access.Cut()
+ locked = 0
+ subverted = 1
+ user << "You short out the access protocol for the suit."
+ return 1
diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm
index cc6a6f9965..8f4f718637 100644
--- a/code/modules/clothing/under/accessories/badges.dm
+++ b/code/modules/clothing/under/accessories/badges.dm
@@ -55,19 +55,18 @@
user << "Waving around a holobadge before swiping an ID would be pretty pointless."
return
return ..()
+
+/obj/item/clothing/accessory/badge/holo/emag_act(var/remaining_charges, var/mob/user)
+ if (emagged)
+ user << "\The [src] is already cracked."
+ return
+ else
+ emagged = 1
+ user << "You crack the holobadge security checks."
+ return 1
/obj/item/clothing/accessory/badge/holo/attackby(var/obj/item/O as obj, var/mob/user as mob)
-
- if (istype(O, /obj/item/weapon/card/emag))
- if (emagged)
- user << "[src] is already cracked."
- return
- else
- emagged = 1
- user << "You swipe [O] and crack the holobadge security checks."
- return
-
- else if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda))
+ if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda))
var/obj/item/weapon/card/id/id_card = null
diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm
index aac37d104a..07f4c42371 100644
--- a/code/modules/economy/ATM.dm
+++ b/code/modules/economy/ATM.dm
@@ -62,6 +62,22 @@ log transactions
playsound(loc, 'sound/items/polaroid2.ogg', 50, 1)
break
+/obj/machinery/atm/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
+ return
+
+ //short out the machine, shoot sparks, spew money!
+ emagged = 1
+ spark_system.start()
+ spawn_money(rand(100,500),src.loc)
+ //we don't want to grief people by locking their id in an emagged ATM
+ release_held_id(user)
+
+ //display a message to the user
+ var/response = pick("Initiating withdraw. Have a nice day!", "CRITICAL ERROR: Activating cash chamber panic siphon.","PIN Code accepted! Emptying account balance.", "Jackpot!")
+ user << "\icon[src] The [src] beeps: \"[response]\""
+ return 1
+
/obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/card))
if(emagged > 0)
@@ -69,16 +85,7 @@ log transactions
user << "\red \icon[src] CARD READER ERROR. This system has been compromised!"
return
else if(istype(I,/obj/item/weapon/card/emag))
- //short out the machine, shoot sparks, spew money!
- emagged = 1
- spark_system.start()
- spawn_money(rand(100,500),src.loc)
- //we don't want to grief people by locking their id in an emagged ATM
- release_held_id(user)
-
- //display a message to the user
- var/response = pick("Initiating withdraw. Have a nice day!", "CRITICAL ERROR: Activating cash chamber panic siphon.","PIN Code accepted! Emptying account balance.", "Jackpot!")
- user << "\red \icon[src] The [src] beeps: \"[response]\""
+ I.resolve_attackby(src, user)
return
var/obj/item/weapon/card/id/idcard = I
diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm
index 8241190d68..7545252824 100644
--- a/code/modules/events/ion_storm.dm
+++ b/code/modules/events/ion_storm.dm
@@ -90,7 +90,7 @@
if(botEmagChance)
for(var/obj/machinery/bot/bot in world)
if(prob(botEmagChance))
- bot.Emag()
+ bot.emag_act(1)
/datum/event/ionstorm/end()
spawn(rand(5000,8000))
diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm
index 373c75ceea..f14cdb8ebc 100644
--- a/code/modules/holodeck/HolodeckControl.dm
+++ b/code/modules/holodeck/HolodeckControl.dm
@@ -120,17 +120,17 @@
src.updateUsrDialog()
return
-/obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
- if(istype(D, /obj/item/weapon/card/emag))
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- last_to_emag = user //emag again to change the owner
- if (!emagged)
- emagged = 1
- safety_disabled = 1
- update_projections()
- user << "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 maintenance and do not use the simulator."
- log_game("[key_name(usr)] emagged the Holodeck Control Computer")
+/obj/machinery/computer/HolodeckControl/emag_act(var/remaining_charges, var/mob/user as mob)
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ last_to_emag = user //emag again to change the owner
+ if (!emagged)
+ emagged = 1
+ safety_disabled = 1
+ update_projections()
+ user << "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 maintenance and do not use the simulator."
+ log_game("[key_name(usr)] emagged the Holodeck Control Computer")
+ return 1
src.updateUsrDialog()
return
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index f83bcb317f..ac47fd706e 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -236,10 +236,13 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
//dat += "Close
"
user << browse(dat, "window=library")
onclose(user, "library")
+
+/obj/machinery/librarycomp/emag_act(var/remaining_charges, var/mob/user)
+ if (src.density && !src.emagged)
+ src.emagged = 1
+ return 1
/obj/machinery/librarycomp/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (src.density && istype(W, /obj/item/weapon/card/emag))
- src.emagged = 1
if(istype(W, /obj/item/weapon/barcodescanner))
var/obj/item/weapon/barcodescanner/scanner = W
scanner.computer = src
diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm
index 1f8a75bf71..a8caa32e47 100644
--- a/code/modules/mining/abandonedcrates.dm
+++ b/code/modules/mining/abandonedcrates.dm
@@ -171,12 +171,14 @@
return
else
return ..()
+
+/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user)
+ if (locked)
+ user << "The crate unlocks!"
+ locked = 0
/obj/structure/closet/crate/secure/loot/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(locked)
- if (istype(W, /obj/item/weapon/card/emag))
- user << "The crate unlocks!"
- locked = 0
if (istype(W, /obj/item/device/multitool)) // Greetings Urist McProfessor, how about a nice game of cows and bulls?
user << "DECA-CODE LOCK REPORT:"
if (attempts == 1)
diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm
index 649e4e5764..d58af33eef 100644
--- a/code/modules/mob/living/bot/bot.dm
+++ b/code/modules/mob/living/bot/bot.dm
@@ -80,9 +80,6 @@
else
user << "[src] does not need a repair."
return
- else if (istype(O, /obj/item/weapon/card/emag) && !emagged)
- Emag(user)
- return
else
..()
@@ -102,9 +99,8 @@
if(!istype(D, /obj/machinery/door/firedoor) && !istype(D, /obj/machinery/door/blast) && D.check_access(botcard))
D.open()
-/mob/living/bot/proc/Emag(var/mob/user)
- log_and_message_admins("emagged [src]")
- return
+/mob/living/bot/emag_act(var/remaining_charges, var/mob/user)
+ return 0
/mob/living/bot/proc/turn_on()
if(stat)
diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm
index 7331010852..eeb4fb5e0d 100644
--- a/code/modules/mob/living/bot/cleanbot.dm
+++ b/code/modules/mob/living/bot/cleanbot.dm
@@ -232,12 +232,14 @@
usr << "You press the weird button."
attack_hand(usr)
-/mob/living/bot/cleanbot/Emag(var/mob/user)
- ..()
- if(user)
- user << "The [src] buzzes and beeps."
- oddbutton = 1
- screwloose = 1
+/mob/living/bot/cleanbot/emag_act(var/remaining_uses, var/mob/user)
+ . = ..()
+ if(!screwloose || !oddbutton)
+ if(user)
+ user << "The [src] buzzes and beeps."
+ oddbutton = 1
+ screwloose = 1
+ return 1
/mob/living/bot/cleanbot/proc/get_targets()
target_types = list()
diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm
index 7900b38527..d8e0498e6e 100644
--- a/code/modules/mob/living/bot/farmbot.dm
+++ b/code/modules/mob/living/bot/farmbot.dm
@@ -64,13 +64,15 @@
onclose(user, "autofarm")
return
-/mob/living/bot/farmbot/Emag(var/mob/user)
- ..()
- if(user)
- user << "You short out [src]'s plant identifier circuits."
- spawn(rand(30, 50))
- visible_message("[src] buzzes oddly.")
- emagged = 1
+/mob/living/bot/farmbot/emag_act(var/remaining_charges, var/mob/user)
+ . = ..()
+ if(!emagged)
+ if(user)
+ user << "You short out [src]'s plant identifier circuits."
+ spawn(rand(30, 50))
+ visible_message("[src] buzzes oddly.")
+ emagged = 1
+ return 1
/mob/living/bot/farmbot/Topic(href, href_list)
if(..())
diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm
index 8d61d0bb03..d56f30d366 100644
--- a/code/modules/mob/living/bot/floorbot.dm
+++ b/code/modules/mob/living/bot/floorbot.dm
@@ -47,11 +47,13 @@
onclose(user, "autorepair")
return
-/mob/living/bot/floorbot/Emag(var/mob/user)
- ..()
- emagged = 1
- if(user)
- user << "The [src] buzzes and beeps."
+/mob/living/bot/floorbot/emag_act(var/remaining_charges, var/mob/user)
+ . = ..()
+ if(!emagged)
+ emagged = 1
+ if(user)
+ user << "The [src] buzzes and beeps."
+ return 1
/mob/living/bot/floorbot/Topic(href, href_list)
if(..())
diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm
index f3b2a35339..55f2094021 100644
--- a/code/modules/mob/living/bot/medbot.dm
+++ b/code/modules/mob/living/bot/medbot.dm
@@ -219,8 +219,8 @@
attack_hand(usr)
return
-/mob/living/bot/medbot/Emag(var/mob/user)
- ..()
+/mob/living/bot/medbot/emag_act(var/remaining_uses, var/mob/user)
+ . = ..()
if(!emagged)
if(user)
user << "You short out [src]'s reagent synthesis circuits."
@@ -231,6 +231,7 @@
emagged = 1
on = 1
update_icons()
+ . = 1
ignored |= user
/mob/living/bot/medbot/explode()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 40746ff02f..c8ea122367 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -102,41 +102,6 @@
user << "\The [src] is hermetically sealed. You can't open the case."
return
- else if (istype(W, /obj/item/weapon/card/emag))
-
- if(!client || stat == 2)
- user << "There's not much point subverting this heap of junk."
- return
-
- if(emagged)
- src << "\The [user] attempts to load subversive software into you, but your hacked subroutines ignore the attempt."
- user << "You attempt to subvert [src], but the sequencer has no effect."
- return
-
- user << "You swipe the sequencer across [src]'s interface and watch its eyes flicker."
- src << "You feel a sudden burst of malware loaded into your execute-as-root buffer. Your tiny brain methodically parses, loads and executes the script."
-
- var/obj/item/weapon/card/emag/emag = W
- emag.uses--
-
- message_admins("[key_name_admin(user)] emagged drone [key_name_admin(src)]. Laws overridden.")
- log_game("[key_name(user)] emagged drone [key_name(src)]. Laws overridden.")
- var/time = time2text(world.realtime,"hh:mm:ss")
- lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])")
-
- emagged = 1
- lawupdate = 0
- connected_ai = null
- clear_supplied_laws()
- clear_inherent_laws()
- laws = new /datum/ai_laws/syndicate_override
- set_zeroth_law("Only [user.real_name] and people he designates as being such are operatives.")
-
- src << "Obey these laws:"
- laws.show_laws(src)
- src << "ALERT: [user.real_name] is your new master. Obey your new laws and his commands."
- return
-
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(stat == 2)
@@ -172,6 +137,37 @@
return
..()
+
+/mob/living/silicon/robot/drone/emag_act(var/remaining_charges, var/mob/user)
+ if(!client || stat == 2)
+ user << "There's not much point subverting this heap of junk."
+ return
+
+ if(emagged)
+ src << "\The [user] attempts to load subversive software into you, but your hacked subroutines ignore the attempt."
+ user << "You attempt to subvert [src], but the sequencer has no effect."
+ return
+
+ user << "You swipe the sequencer across [src]'s interface and watch its eyes flicker."
+ src << "You feel a sudden burst of malware loaded into your execute-as-root buffer. Your tiny brain methodically parses, loads and executes the script."
+
+ message_admins("[key_name_admin(user)] emagged drone [key_name_admin(src)]. Laws overridden.")
+ log_game("[key_name(user)] emagged drone [key_name(src)]. Laws overridden.")
+ var/time = time2text(world.realtime,"hh:mm:ss")
+ lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])")
+
+ emagged = 1
+ lawupdate = 0
+ connected_ai = null
+ clear_supplied_laws()
+ clear_inherent_laws()
+ laws = new /datum/ai_laws/syndicate_override
+ set_zeroth_law("Only [user.real_name] and people he designates as being such are operatives.")
+
+ src << "Obey these laws:"
+ laws.show_laws(src)
+ src << "ALERT: [user.real_name] is your new master. Obey your new laws and his commands."
+ return 1
//DRONE LIFE/DEATH
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index c7a1d1145c..178692f08d 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -622,71 +622,6 @@
else
user << "\red Access denied."
- else if(istype(W, /obj/item/weapon/card/emag)) // trying to unlock with an emag card
- if(!opened)//Cover is closed
- if(locked)
- if(prob(90))
- var/obj/item/weapon/card/emag/emag = W
- emag.uses--
- user << "You emag the cover lock."
- locked = 0
- else
- user << "You fail to emag the cover lock."
- src << "Hack attempt detected."
- else
- user << "The cover is already unlocked."
- return
-
- if(opened)//Cover is open
- if(emagged) return//Prevents the X has hit Y with Z message also you cant emag them twice
- if(wiresexposed)
- user << "You must close the panel first"
- return
- else
- sleep(6)
- if(prob(50))
- emagged = 1
- lawupdate = 0
- disconnect_from_ai()
- user << "You emag [src]'s interface."
- message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.")
- log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.")
- clear_supplied_laws()
- clear_inherent_laws()
- laws = new /datum/ai_laws/syndicate_override
- var/time = time2text(world.realtime,"hh:mm:ss")
- lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])")
- set_zeroth_law("Only [user.real_name] and people he designates as being such are operatives.")
- src << "\red ALERT: Foreign software detected."
- sleep(5)
- src << "\red Initiating diagnostics..."
- sleep(20)
- src << "\red SynBorg v1.7.1 loaded."
- sleep(5)
- src << "\red LAW SYNCHRONISATION ERROR"
- sleep(5)
- src << "\red Would you like to send a report to NanoTraSoft? Y/N"
- sleep(10)
- src << "\red > N"
- sleep(20)
- src << "\red ERRORERRORERROR"
- src << "Obey these laws:"
- laws.show_laws(src)
- src << "\red \b ALERT: [user.real_name] is your new master. Obey your new laws and his commands."
- if(src.module)
- var/rebuild = 0
- for(var/obj/item/weapon/pickaxe/borgdrill/D in src.module.modules)
- qdel(D)
- rebuild = 1
- if(rebuild)
- src.module.modules += new /obj/item/weapon/pickaxe/diamonddrill(src.module)
- src.module.rebuild()
- updateicon()
- else
- user << "You fail to hack [src]'s interface."
- src << "Hack attempt detected."
- return
-
else if(istype(W, /obj/item/borg/upgrade/))
var/obj/item/borg/upgrade/U = W
if(!opened)
@@ -1097,3 +1032,70 @@
connected_ai.connected_robots |= src
notify_ai(ROBOT_NOTIFICATION_NEW_UNIT)
sync()
+
+/mob/living/silicon/robot/emag_act(var/remaining_charges, var/mob/user)
+ if(!opened)//Cover is closed
+ if(locked)
+ if(prob(90))
+ user << "You emag the cover lock."
+ locked = 0
+ else
+ user << "You fail to emag the cover lock."
+ src << "Hack attempt detected."
+ return 1
+ else
+ user << "The cover is already unlocked."
+ return
+
+ if(opened)//Cover is open
+ if(emagged) return//Prevents the X has hit Y with Z message also you cant emag them twice
+ if(wiresexposed)
+ user << "You must close the panel first"
+ return
+ else
+ sleep(6)
+ if(prob(50))
+ emagged = 1
+ lawupdate = 0
+ disconnect_from_ai()
+ user << "You emag [src]'s interface."
+ message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.")
+ log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.")
+ clear_supplied_laws()
+ clear_inherent_laws()
+ laws = new /datum/ai_laws/syndicate_override
+ var/time = time2text(world.realtime,"hh:mm:ss")
+ lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])")
+ set_zeroth_law("Only [user.real_name] and people he designates as being such are operatives.")
+ . = 1
+ spawn()
+ src << "\red ALERT: Foreign software detected."
+ sleep(5)
+ src << "\red Initiating diagnostics..."
+ sleep(20)
+ src << "\red SynBorg v1.7.1 loaded."
+ sleep(5)
+ src << "\red LAW SYNCHRONISATION ERROR"
+ sleep(5)
+ src << "\red Would you like to send a report to NanoTraSoft? Y/N"
+ sleep(10)
+ src << "\red > N"
+ sleep(20)
+ src << "\red ERRORERRORERROR"
+ src << "Obey these laws:"
+ laws.show_laws(src)
+ src << "\red \b ALERT: [user.real_name] is your new master. Obey your new laws and his commands."
+ if(src.module)
+ var/rebuild = 0
+ for(var/obj/item/weapon/pickaxe/borgdrill/D in src.module.modules)
+ qdel(D)
+ rebuild = 1
+ if(rebuild)
+ src.module.modules += new /obj/item/weapon/pickaxe/diamonddrill(src.module)
+ src.module.rebuild()
+ updateicon()
+ else
+ user << "You fail to hack [src]'s interface."
+ src << "Hack attempt detected."
+ return 1
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index 0631273769..03c311f97f 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -121,21 +121,19 @@
else
user << "\red You swipe your card, with no effect."
return 0
- else if (istype(O, /obj/item/weapon/card/emag))
- if (emagged)
- user << "\red [src] is already overloaded - better run."
- return 0
- else
- var/obj/item/weapon/card/emag/emag = O
- emag.uses--
- emagged = 1
- user << "\blue You short out the security protocols and overload [src]'s cell, priming it to explode in a short time."
- spawn(100) src << "\red Your cell seems to be outputting a lot of power..."
- spawn(200) src << "\red Internal heat sensors are spiking! Something is badly wrong with your cell!"
- spawn(300) src.explode()
else
attacked_with_item(O, user)
+
+/mob/living/simple_animal/spiderbot/emag_act(var/remaining_charges, var/mob/user)
+ if (emagged)
+ user << "[src] is already overloaded - better run."
+ return 0
+ else
+ user << "You short out the security protocols and overload [src]'s cell, priming it to explode in a short time."
+ spawn(100) src << "Your cell seems to be outputting a lot of power..."
+ spawn(200) src << "Internal heat sensors are spiking! Something is badly wrong with your cell!"
+ spawn(300) src.explode()
/mob/living/simple_animal/spiderbot/proc/transfer_personality(var/obj/item/device/mmi/M as obj)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 5222277b7b..67a2010485 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -504,23 +504,6 @@
update_icon()
else
user << "Access denied."
- else if (istype(W, /obj/item/weapon/card/emag) && !(emagged || hacker)) // trying to unlock with an emag card
- if(opened)
- user << "You must close the cover to swipe an ID card."
- else if(wiresexposed)
- user << "You must close the panel first"
- else if(stat & (BROKEN|MAINT))
- user << "Nothing happens."
- else
- flick("apc-spark", src)
- if (do_after(user,6))
- if(prob(50))
- emagged = 1
- locked = 0
- user << "You emag the APC interface."
- update_icon()
- else
- user << "You fail to [ locked ? "unlock" : "lock"] the APC interface."
else if (istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics!=2)
if (src.loc:intact)
user << "You must remove the floor plating in front of the APC first."
@@ -654,6 +637,26 @@
// attack with hand - remove cell (if cover open) or interact with the APC
+/obj/machinery/power/apc/emag_act(var/remaining_charges, var/mob/user)
+ if (!(emagged || hacker)) // trying to unlock with an emag card
+ if(opened)
+ user << "You must close the cover to swipe an ID card."
+ else if(wiresexposed)
+ user << "You must close the panel first"
+ else if(stat & (BROKEN|MAINT))
+ user << "Nothing happens."
+ else
+ flick("apc-spark", src)
+ if (do_after(user,6))
+ if(prob(50))
+ emagged = 1
+ locked = 0
+ user << "You emag the APC interface."
+ update_icon()
+ else
+ user << "You fail to [ locked ? "unlock" : "lock"] the APC interface."
+ return 1
+
/obj/machinery/power/apc/attack_hand(mob/user)
// if (!can_use(user)) This already gets called in interact() and in topic()
// return
diff --git a/code/modules/power/pacman2.dm b/code/modules/power/pacman2.dm
index 1060a466de..592fc97f2d 100644
--- a/code/modules/power/pacman2.dm
+++ b/code/modules/power/pacman2.dm
@@ -76,14 +76,6 @@
user.drop_item()
O.loc = src
user << "\blue You add the phoron tank to the generator."
- else if (istype(O, /obj/item/weapon/card/emag))
- var/obj/item/weapon/card/emag/E = O
- if(E.uses)
- E.uses--
- else
- return
- emagged = 1
- emp_act(1)
else if(!active)
if(istype(O, /obj/item/weapon/wrench))
anchored = !anchored
@@ -172,3 +164,8 @@
if (href_list["action"] == "close")
usr << browse(null, "window=port_gen")
usr.machine = null
+
+/obj/machinery/power/port_gen/pacman2/emag_act(var/remaining_uses, var/mob/user)
+ emagged = 1
+ emp_act(1)
+ return 1
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index a37c41a0aa..e070a5ec90 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -245,6 +245,14 @@
sheets = 0
sheet_left = 0
..()
+
+/obj/machinery/power/port_gen/pacman/emag_act(var/remaining_charges, var/mob/user)
+ if (active && prob(25))
+ explode() //if they're foolish enough to emag while it's running
+
+ if (!emagged)
+ emagged = 1
+ return 1
/obj/machinery/power/port_gen/pacman/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, sheet_path))
@@ -258,10 +266,6 @@
addstack.use(amount)
updateUsrDialog()
return
- else if (istype(O, /obj/item/weapon/card/emag))
- emagged = 1
- if (active && prob(25))
- explode() //if they're foolish enough to emag while it's running
else if(!active)
if(istype(O, /obj/item/weapon/wrench))
diff --git a/code/modules/power/rust/core_gen.dm b/code/modules/power/rust/core_gen.dm
index 78e0a02b15..d469faf61d 100644
--- a/code/modules/power/rust/core_gen.dm
+++ b/code/modules/power/rust/core_gen.dm
@@ -150,15 +150,15 @@ max volume of phoron storeable by the field = the total volume of a number of ti
else
user << "\red Access denied."
return
-
- if(istype(W, /obj/item/weapon/card/emag) && !emagged)
+ ..()
+ return
+
+/obj/machinery/power/rust_core/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
locked = 0
emagged = 1
user.visible_message("[user.name] emags the [src.name].","\red You short out the lock.")
- return
-
- ..()
- return
+ return 1
/obj/machinery/power/rust_core/attack_ai(mob/user)
attack_hand(user)
diff --git a/code/modules/power/rust/fuel_compressor_construction.dm b/code/modules/power/rust/fuel_compressor_construction.dm
index 9f52a2cf7c..fe94e64e36 100644
--- a/code/modules/power/rust/fuel_compressor_construction.dm
+++ b/code/modules/power/rust/fuel_compressor_construction.dm
@@ -14,6 +14,21 @@
//20% easier to read than apc code
pixel_x = (dir & 3)? 0 : (dir == 4 ? 32 : -32)
pixel_y = (dir & 3)? (dir ==1 ? 32 : -32) : 0
+
+/obj/machinery/rust_fuel_compressor/emag_act(var/remaining_charges, var/mob/user)
+ if (!emagged)
+ if(opened)
+ user << "You must close the cover to swipe an ID card."
+ else
+ flick("apc-spark", src)
+ if (do_after(user,6))
+ if(prob(50))
+ emagged = 1
+ locked = 0
+ user << "You emag the port interface."
+ else
+ user << "You fail to [ locked ? "unlock" : "lock"] the compressor interface."
+ return 1
/obj/machinery/rust_fuel_compressor/attackby(obj/item/W, mob/user)
@@ -55,21 +70,6 @@
else
user << "\red Access denied."
return
-
- else if (istype(W, /obj/item/weapon/card/emag) && !emagged) // trying to unlock with an emag card
- if(opened)
- user << "You must close the cover to swipe an ID card."
- else
- flick("apc-spark", src)
- if (do_after(user,6))
- if(prob(50))
- emagged = 1
- locked = 0
- user << "You emag the port interface."
- else
- user << "You fail to [ locked ? "unlock" : "lock"] the compressor interface."
- return
-
else if (istype(W, /obj/item/stack/cable_coil) && opened && !(has_electronics & 2))
var/obj/item/stack/cable_coil/C = W
if(C.amount < 10)
diff --git a/code/modules/power/rust/fuel_injector.dm b/code/modules/power/rust/fuel_injector.dm
index f5467f0f39..24502509d9 100644
--- a/code/modules/power/rust/fuel_injector.dm
+++ b/code/modules/power/rust/fuel_injector.dm
@@ -106,12 +106,6 @@
user << "\red Access denied."
return
- if(istype(W, /obj/item/weapon/card/emag) && !emagged)
- locked = 0
- emagged = 1
- user.visible_message("[user.name] emags the [src.name].","\red You short out the lock.")
- return
-
if(istype(W, /obj/item/weapon/fuel_assembly) && !cur_assembly)
if(emergency_insert_ready)
cur_assembly = W
@@ -122,6 +116,13 @@
..()
return
+
+/obj/machinery/power/rust_fuel_injector/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
+ locked = 0
+ emagged = 1
+ user.visible_message("[user.name] emags the [src.name].","\red You short out the lock.")
+ return 1
/obj/machinery/power/rust_fuel_injector/attack_ai(mob/user)
attack_hand(user)
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 789a6b13d7..ceb41d4588 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -223,13 +223,12 @@
else
user << "Access denied."
return
-
-
- if(istype(W, /obj/item/weapon/card/emag) && !emagged)
+ ..()
+ return
+
+/obj/machinery/power/emitter/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
locked = 0
emagged = 1
user.visible_message("[user.name] emags [src].","You short out the lock.")
- return
-
- ..()
- return
\ No newline at end of file
+ return 1
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index c82c00e4a0..6311470641 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -145,16 +145,19 @@ won't update every console in existence) but it's more of a hassle to do. Also,
user.drop_item()
D.loc = src
user << "You add \the [D] to the machine."
- else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "You you disable the security protocols."
else
//The construction/deconstruction of the console code.
..()
src.updateUsrDialog()
return
+
+/obj/machinery/computer/rdconsole/emp_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ emagged = 1
+ user << "You you disable the security protocols."
+ return 1
/obj/machinery/computer/rdconsole/Topic(href, href_list)
if(..())
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index a2184d6b79..893ef3383f 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -295,13 +295,13 @@
onclose(user, "server_control")
return
-/obj/machinery/computer/rdservercontrol/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
- if(istype(D, /obj/item/weapon/card/emag) && !emagged)
+/obj/machinery/computer/rdservercontrol/emag_act(var/remaining_charges, var/mob/user)
+ if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
- user << "\blue You you disable the security protocols"
- src.updateUsrDialog()
- return ..()
+ user << "You you disable the security protocols."
+ src.updateUsrDialog()
+ return 1
/obj/machinery/r_n_d/server/robotics
name = "Robotics R&D Server"
diff --git a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
index 7450dd0603..5dad9a1eb4 100644
--- a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
+++ b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
@@ -131,7 +131,7 @@
usr.drop_item()
I.loc = src
auth_card = I
- if(attempt_unlock(I))
+ if(attempt_unlock(I, usr))
usr << "You insert [I], the console flashes \'Access granted.\'"
else
usr << "You insert [I], the console flashes \'Access denied.\'"
@@ -215,25 +215,27 @@
else if(istype(W, /obj/item/weapon/card))
var/obj/item/weapon/card/I = W
if(!auth_card)
- if(attempt_unlock(I))
+ if(attempt_unlock(I, user))
user << "You swipe [I], the console flashes \'Access granted.\'"
else
user << "You swipe [I], console flashes \'Access denied.\'"
else
user << "Remove [auth_card] first."
-/obj/machinery/suspension_gen/proc/attempt_unlock(var/obj/item/weapon/card/C)
+/obj/machinery/suspension_gen/proc/attempt_unlock(var/obj/item/weapon/card/C, var/mob/user)
if(!open)
- if(istype(C, /obj/item/weapon/card/emag) && cell.charge > 0)
- //put sparks here
- if(prob(95))
- locked = 0
+ if(istype(C, /obj/item/weapon/card/emag))
+ C.resolve_attackby(src, user)
else if(istype(C, /obj/item/weapon/card/id) && check_access(C))
locked = 0
-
if(!locked)
return 1
+/obj/machinery/suspension_gen/emag_act(var/remaining_charges, var/mob/user)
+ if(cell.charge > 0 && locked)
+ locked = 0
+ return 1
+
//checks for whether the machine can be activated or not should already have occurred by this point
/obj/machinery/suspension_gen/proc/activate()
//depending on the field type, we might pickup certain items
diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm
index 9918afb068..cd6145d2f9 100644
--- a/code/modules/shieldgen/emergency_shield.dm
+++ b/code/modules/shieldgen/emergency_shield.dm
@@ -267,13 +267,15 @@
else
user << "The device must first be secured to the floor."
return
-
-/obj/machinery/shieldgen/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/card/emag))
+
+/obj/machinery/shieldgen/emag_act(var/remaining_charges, var/mob/user)
+ if(!malfunction)
malfunction = 1
update_icon()
+ return 1
- else if(istype(W, /obj/item/weapon/screwdriver))
+/obj/machinery/shieldgen/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
if(is_open)
user << "\blue You close the panel."
diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm
index 0c26178314..45d7e311dd 100644
--- a/code/modules/shieldgen/shield_capacitor.dm
+++ b/code/modules/shieldgen/shield_capacitor.dm
@@ -26,6 +26,16 @@
possible_gen.owned_capacitor = src
break
..()
+
+/obj/machinery/shield_capacitor/emag_act(var/remaining_charges, var/mob/user)
+ if(prob(75))
+ src.locked = !src.locked
+ user << "Controls are now [src.locked ? "locked." : "unlocked."]"
+ . = 1
+ updateDialog()
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
/obj/machinery/shield_capacitor/attackby(obj/item/W, mob/user)
@@ -37,15 +47,6 @@
updateDialog()
else
user << "\red Access denied."
- else if(istype(W, /obj/item/weapon/card/emag))
- if(prob(75))
- src.locked = !src.locked
- user << "Controls are now [src.locked ? "locked." : "unlocked."]"
- updateDialog()
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start()
-
else if(istype(W, /obj/item/weapon/wrench))
src.anchored = !src.anchored
src.visible_message("\blue \icon[src] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].")
diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm
index 544998ce61..90e32d6492 100644
--- a/code/modules/shieldgen/shield_gen.dm
+++ b/code/modules/shieldgen/shield_gen.dm
@@ -44,6 +44,16 @@
field.Remove(D)
D.loc = null
..()
+
+/obj/machinery/shield_gen/emag_act(var/remaining_charges, var/mob/user)
+ if(prob(75))
+ src.locked = !src.locked
+ user << "Controls are now [src.locked ? "locked." : "unlocked."]"
+ . = 1
+ updateDialog()
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
/obj/machinery/shield_gen/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/card/id))
@@ -54,15 +64,6 @@
updateDialog()
else
user << "\red Access denied."
- else if(istype(W, /obj/item/weapon/card/emag))
- if(prob(75))
- src.locked = !src.locked
- user << "Controls are now [src.locked ? "locked." : "unlocked."]"
- updateDialog()
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start()
-
else if(istype(W, /obj/item/weapon/wrench))
src.anchored = !src.anchored
src.visible_message("\blue \icon[src] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user].")
diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm
index 7c0ca83b80..d3824c7986 100644
--- a/code/modules/shuttles/escape_pods.dm
+++ b/code/modules/shuttles/escape_pods.dm
@@ -102,19 +102,15 @@
ui.open()
ui.set_auto_update(1)
-/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/card/emag) && !emagged)
- user << "\blue You emag the [src], arming the escape pod!"
+/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/emag_act(var/remaining_charges, var/mob/user)
+ if (!emagged)
+ user << "You emag the [src], arming the escape pod!"
emagged = 1
if (istype(docking_program, /datum/computer/file/embedded_program/docking/simple/escape_pod))
var/datum/computer/file/embedded_program/docking/simple/escape_pod/P = docking_program
if (!P.armed)
P.arm()
- return
-
- ..()
-
-
+ return 1
//A docking controller program for a simple door based docking port
/datum/computer/file/embedded_program/docking/simple/escape_pod
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index 5cb28c40e6..3ee70b12c7 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -83,15 +83,13 @@
else if(href_list["cancel"])
shuttle.cancel_launch(src)
-/obj/machinery/computer/shuttle_control/attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- if (istype(W, /obj/item/weapon/card/emag))
- src.req_access = list()
- src.req_one_access = list()
+/obj/machinery/computer/shuttle_control/emag_act(var/remaining_charges, var/mob/user)
+ if (!hacked)
+ req_access = list()
+ req_one_access = list()
hacked = 1
- usr << "You short out the console's ID checking system. It's now available to everyone!"
- else
- ..()
+ user << "You short out the console's ID checking system. It's now available to everyone!"
+ return 1
/obj/machinery/computer/shuttle_control/bullet_act(var/obj/item/projectile/Proj)
visible_message("[Proj] ricochets off [src]!")
diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm
index ea572e8fb4..f3323c33d0 100644
--- a/code/modules/shuttles/shuttle_emergency.dm
+++ b/code/modules/shuttles/shuttle_emergency.dm
@@ -155,15 +155,13 @@
return 1
-
-
-
-/obj/machinery/computer/shuttle_control/emergency/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/card/emag) && !emagged)
+/obj/machinery/computer/shuttle_control/emergency/emag_act(var/remaining_charges, var/mob/user)
+ if (!emagged)
user << "You short out \the [src]'s authorization protocols."
emagged = 1
- return
+ return 1
+/obj/machinery/computer/shuttle_control/emergency/attackby(obj/item/weapon/W as obj, mob/user as mob)
read_authorization(W)
..()
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index f28b001fef..953dc519ea 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -100,8 +100,6 @@
user << "[src] does not need a repair."
else
user << "Unable to repair while [src] is off."
- else if(istype(W, /obj/item/weapon/card/emag) && !emagged)
- Emag(user)
else if(hasvar(W,"force") && hasvar(W,"damtype"))
switch(W.damtype)
if("fire")
@@ -186,12 +184,13 @@
set_light(0)
update_icon()
-/obj/vehicle/proc/Emag(mob/user as mob)
- emagged = 1
-
- if(locked)
- locked = 0
- user << "You bypass [src]'s controls."
+/obj/vehicle/emag_act(var/remaining_charges, mob/user as mob)
+ if(!emagged)
+ emagged = 1
+ if(locked)
+ locked = 0
+ user << "You bypass [src]'s controls."
+ return 1
/obj/vehicle/proc/explode()
src.visible_message("\red [src] blows apart!", 1)