diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 6dec5fed5c8..04f2926436d 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -242,6 +242,8 @@ its easier to just keep the beam vertical.
/atom/proc/blob_act()
return
+/atom/proc/emag_act()
+ return
/atom/proc/hitby(atom/movable/AM as mob|obj)
if (density)
diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm
index 30ed21fbede..8cf8c77c66c 100644
--- a/code/game/machinery/bots/bots.dm
+++ b/code/game/machinery/bots/bots.dm
@@ -237,8 +237,6 @@
user << "Maintenance panel is now [open ? "opened" : "closed"]."
else
user << "Maintenance panel is locked."
- else if (istype(W, /obj/item/weapon/card/emag) && emagged < 2)
- Emag(user)
else
if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "harm")
if(health >= maxhealth)
@@ -267,7 +265,10 @@
..()
healthcheck()
-
+/obj/machinery/bot/emag_act(user as mob)
+ if (emagged < 2)
+ Emag(user)
+
/obj/machinery/bot/bullet_act(var/obj/item/projectile/Proj)
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
health -= Proj.damage
diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm
index f9016a1061f..19ef2058f43 100644
--- a/code/game/machinery/bots/mulebot.dm
+++ b/code/game/machinery/bots/mulebot.dm
@@ -87,12 +87,7 @@ var/global/mulebot_count = 0
// 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(loc, 'sound/effects/sparks1.ogg', 100, 0)
- else if(istype(I, /obj/item/weapon/card/id) || istype(I, /obj/item/device/pda))
+ if(istype(I, /obj/item/weapon/card/id) || istype(I, /obj/item/device/pda))
if(toggle_lock(user))
user << "Controls [(locked ? "locked" : "unlocked")]."
updateUsrDialog()
@@ -139,7 +134,12 @@ var/global/mulebot_count = 0
..()
return
-
+/obj/machinery/bot/mulebot/emag_act(user as mob)
+ locked = !locked
+ user << "You [locked ? "lock" : "unlock"] the mulebot's controls!"
+ flick("mulebot-emagged", src)
+ playsound(loc, 'sound/effects/sparks1.ogg', 100, 0)
+
/obj/machinery/bot/mulebot/ex_act(var/severity)
unload(0)
switch(severity)
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index cd78210b41f..d8a1d7f941f 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -162,44 +162,15 @@
/obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
-//Warning, uncommenting this can have concequences. For example, deconstructing the computer may cause holographic eswords to never derez
-
-/* if(istype(D, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- if (src.stat & BROKEN)
- user << "\blue The broken glass falls out."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
- var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 3
- A.icon_state = "3"
- A.anchored = 1
- del(src)
- else
- user << "\blue You disconnect the monitor."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 4
- A.icon_state = "4"
- A.anchored = 1
- del(src)
-
-*/
- if(istype(D, /obj/item/weapon/card/emag) && !emagged)
+ return
+
+/obj/machinery/computer/HolodeckControl/emag_act(user as mob)
+ if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
user << "\blue You vastly increase projector power and override the safety and security protocols."
user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator."
log_game("[key_name(usr)] emagged the Holodeck Control Computer")
- src.updateUsrDialog()
- return
/obj/machinery/computer/HolodeckControl/New()
..()
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 5f0592ecf7f..d4da0df2e54 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -272,8 +272,8 @@
return
-/obj/machinery/computer/arcade/battle/attackby(I as obj, user as mob)
- if(istype(I, /obj/item/weapon/card/emag) && !emagged)
+/obj/machinery/computer/arcade/battle/emag_act(user as mob)
+ if(!emagged)
temp = "If you die in the game, you die for real!"
player_hp = 30
player_mp = 10
@@ -287,14 +287,7 @@
enemy_name = "Cuban Pete"
name = "Outbomb Cuban Pete"
-
src.updateUsrDialog()
- else
-
- ..()
-
-
-
/obj/machinery/computer/arcade/orion_trail
name = "The Orion Trail"
diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index fb3c74e292d..bce0006f488 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -37,15 +37,16 @@
return 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("\red \The [user] swipes \a [I] through \the [src], causing the screen to flash!",\
- "\red You swipe your [I] through \the [src], the screen flashing as you gain full control.",\
+/obj/machinery/computer/atmoscontrol/emag_act(user as mob)
+ if(!emagged)
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ H.visible_message("\red \The [user] swipes \a card through \the [src], causing the screen to flash!",\
+ "\red You swipe your card 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.")
emagged = 1
overridden = 1
- return
- return ..()
/obj/machinery/computer/atmoscontrol/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
if(user.stat && !isobserver(user))
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index d80b2f94bb5..3a035c3ef7d 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -55,25 +55,21 @@
// Network configuration
attackby(I as obj, user as mob)
access = list()
- if(istype(I,/obj/item/weapon/card/emag)) // If hit by an emag.
- var/obj/item/weapon/card/emag/E = I
- if(!emagged)
- if(E.uses)
- E.uses--
- emagged = 1
- user << "\blue You have authorized full network access!"
- ui_interact(user)
- else
- ui_interact(user)
- else
- ui_interact(user)
- else if(istype(I,/obj/item/weapon/card/id)) // If hit by a regular ID card.
+ if(istype(I,/obj/item/weapon/card/id)) // If hit by a regular ID card.
var/obj/item/weapon/card/id/E = I
access = E.access
ui_interact(user)
else
..()
+ emag_act(user as mob)
+ if(!emagged)
+ emagged = 1
+ user << "\blue You have authorized full network access!"
+ ui_interact(user)
+ else
+ ui_interact(user)
+
ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(src.z > 6) return
if(stat & (NOPOWER|BROKEN)) return
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 3ac81dfa985..23a085675e5 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -240,12 +240,11 @@ var/shuttle_call/shuttle_calls[0]
return 1
-/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(user as mob)
+ if(!emagged)
src.emagged = 1
user << "You scramble the communication routing circuits!"
- ..()
-
+
/obj/machinery/computer/communications/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
diff --git a/code/game/machinery/computer/honkputer.dm b/code/game/machinery/computer/honkputer.dm
index 9efed74b7c9..118307839c1 100644
--- a/code/game/machinery/computer/honkputer.dm
+++ b/code/game/machinery/computer/honkputer.dm
@@ -57,12 +57,10 @@
src.updateUsrDialog()
-/obj/machinery/computer/HONKputer/attackby(var/obj/I as obj, var/mob/user as mob)
- if(istype(I,/obj/item/weapon/card/emag/))
+/obj/machinery/computer/HONKputer/emag_act(user as mob)
+ if(!emagged)
src.emagged = 1
user << "You scramble the login circuits, allowing anyone to use the console!"
- ..()
-
/obj/machinery/computer/HONKputer/attack_hand(var/mob/user as mob)
if(..())
diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm
index 37ab61fc857..916b99e05c9 100644
--- a/code/game/machinery/computer/message.dm
+++ b/code/game/machinery/computer/message.dm
@@ -41,24 +41,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!"
@@ -66,6 +48,25 @@
..()
return
+
+/obj/machinery/computer/message_monitor/emag_act(user as mob)
+ // 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."
/obj/machinery/computer/message_monitor/update_icon()
..()
diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm
index 0815cf7932a..93b4c91c2c9 100644
--- a/code/game/machinery/computer/shuttle.dm
+++ b/code/game/machinery/computer/shuttle.dm
@@ -56,11 +56,13 @@
world << "\blue All authorizations to shortening time for shuttle launch have been revoked!"
src.authorized.len = 0
src.authorized = list( )
-
- else if (istype(W, /obj/item/weapon/card/emag) && !emagged)
+ return
+
+ emag_act(user as mob)
+ if (!emagged)
var/choice = alert(user, "Would you like to launch the shuttle?","Shuttle control", "Launch", "Cancel")
- if(!emagged && !emergency_shuttle.location() && user.get_active_hand() == W)
+ if(!emagged && !emergency_shuttle.location())
switch(choice)
if("Launch")
world << "\blue Alert: Shuttle launch time shortened to 10 seconds!"
@@ -68,4 +70,3 @@
emagged = 1
if("Cancel")
return
- return
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index c00668a7276..94ded8abee1 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -158,7 +158,7 @@ for reference:
src.icon_state = "barrier[src.locked]"
attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/card/id/))
+ if (istype(W, /obj/item/weapon/card/id))
if (src.allowed(user))
if (src.emagged < 2.0)
src.locked = !src.locked
@@ -177,24 +177,6 @@ for reference:
visible_message("\red BZZzZZzZZzZT")
return
return
- else if (istype(W, /obj/item/weapon/card/emag))
- if (src.emagged == 0)
- src.emagged = 1
- src.req_access = null
- 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("\red 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("\red BZZzZZzZZzZT")
- return
else if (istype(W, /obj/item/weapon/wrench))
if (src.health < src.maxhealth)
src.health = src.maxhealth
@@ -218,6 +200,23 @@ for reference:
if (src.health <= 0)
src.explode()
..()
+
+ emag_act(user as mob)
+ if (!emagged)
+ emagged = 1
+ req_access = null
+ 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("\red BZZzZZzZZzZT")
+ 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("\red BZZzZZzZZzZT")
ex_act(severity)
switch(severity)
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index 2dcb0c0b2e0..84591381582 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -57,11 +57,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/door_control/emag_act(user as mob)
+ if(!emagged)
+ emagged = 1
req_access = list()
req_one_access = list()
playsound(src.loc, "sparks", 100, 1)
- return src.attack_hand(user)
/obj/machinery/door_control/attack_hand(mob/user as mob)
src.add_fingerprint(usr)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 88d72fbf8b9..10123890da7 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -153,10 +153,7 @@
if(!src.requiresID())
user = null
if(src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)))
- flick("door_spark", src)
- sleep(6)
- open()
- operating = -1
+ emag_act(user)
return 1
if(src.allowed(user) || src.emergency == 1)
if(src.density)
@@ -168,6 +165,13 @@
flick("door_deny", src)
return
+/obj/machinery/door/emag_act(user as mob)
+ if(density)
+ flick("door_spark", src)
+ sleep(6)
+ open()
+ operating = -1
+ return 1
/obj/machinery/door/blob_act()
if(prob(40))
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 84563748126..cbb39a73aa7 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -225,21 +225,13 @@
/obj/machinery/door/window/attack_hand(mob/user as mob)
return src.attackby(user, user)
-/obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/living/user as mob)
-
- //If it's in the process of opening/closing, ignore the click
- if (src.operating)
- return
-
- add_fingerprint(user)
-
- //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)))
+/obj/machinery/door/window/emag_act(user as mob, weapon as obj)
+ if(density)
src.operating = -1
flick("[src.base_state]spark", src)
sleep(6)
desc += "
Its access panel is smoking slightly."
- if(istype(I, /obj/item/weapon/melee/energy/blade))
+ if(istype(weapon, /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()
@@ -252,6 +244,19 @@
open()
emagged = 1
return 1
+
+/obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/living/user as mob)
+
+ //If it's in the process of opening/closing, ignore the click
+ if (src.operating)
+ return
+
+ add_fingerprint(user)
+
+ //Ninja swords? You may pass.
+ 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)
diff --git a/code/game/machinery/metaldetector.dm b/code/game/machinery/metaldetector.dm
index 3d7ccb4ab3b..72be4f67785 100644
--- a/code/game/machinery/metaldetector.dm
+++ b/code/game/machinery/metaldetector.dm
@@ -27,11 +27,6 @@
return 1
/obj/machinery/metaldetector/attackby(obj/item/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/card/emag))
- if(!src.emagged)
- src.emagged = 1
- user << "\blue You short out the circuitry."
- return
if(istype(W, /obj/item/weapon/card))
for(var/ID in list(user.equipped(), user:wear_id, user:belt))
if(src.check_access(ID,list("20")))
@@ -46,6 +41,12 @@
else
user << "\red You lack access to the control panel!"
return
+
+/obj/machinery/metaldetector/emag_act(user as mob)
+ if(!emagged)
+ emagged = 1
+ user << "\blue You short out the circuitry."
+ return
/obj/machinery/metaldetector/Crossed(AM as mob|obj)
if(emagged)
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 31da7e13203..5196f96471f 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -307,20 +307,7 @@ Status: []
"},
del(src)
- if ((istype(W, /obj/item/weapon/card/emag)) && (!src.emagged))
- // Emagging the turret makes it go bonkers and stun everyone. It also makes
- // the turret shoot much, much faster.
-
- user << "\red You short out [src]'s threat assessment circuits."
- spawn(0)
- for(var/mob/O in hearers(src, null))
- O.show_message("\red [src] hums oddly...", 1)
- emagged = 1
- src.on = 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
- on = 1 // turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here
-
- else if((istype(W, /obj/item/weapon/wrench)) && (!on))
+ if((istype(W, /obj/item/weapon/wrench)) && (!on))
if(raised) return
// This code handles moving the turret around. After all, it's a portable turret!
@@ -359,7 +346,19 @@ Status: []
"},
attacked = 0
..()
+/obj/machinery/porta_turret/emag_act(user as mob)
+ if(!src.emagged)
+ // Emagging the turret makes it go bonkers and stun everyone. It also makes
+ // the turret shoot much, much faster.
+ user << "\red You short out [src]'s threat assessment circuits."
+ spawn(0)
+ for(var/mob/O in hearers(src, null))
+ O.show_message("\red [src] hums oddly...", 1)
+ emagged = 1
+ src.on = 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
+ on = 1 // turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here
/obj/machinery/porta_turret/bullet_act(var/obj/item/projectile/Proj)
if(on)
diff --git a/code/game/machinery/programmable_unloader.dm b/code/game/machinery/programmable_unloader.dm
index e7039af7f64..f2aaefc03fa 100644
--- a/code/game/machinery/programmable_unloader.dm
+++ b/code/game/machinery/programmable_unloader.dm
@@ -196,19 +196,6 @@
return
/obj/machinery/programmable/attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I,/obj/item/weapon/card/emag))
- if(emagged)
- return
- user << "You swipe the unloader with your card. After a moment's grinding, it beeps in a sinister fashion."
- playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
- emagged = 1
- overrides += emag_overrides
-
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(2, 1, src)
- s.start()
-
- return
if(istype(I,/obj/item/weapon/wrench)) // code borrowed from pipe dispenser
if (unwrenched==0)
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
@@ -281,7 +268,18 @@
I.loc = src
RefreshParts()
+/obj/machinery/programmable/emag_act(user as mob)
+ if(emagged)
+ return
+ user << "You swipe the unloader with your card. After a moment's grinding, it beeps in a sinister fashion."
+ playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
+ emagged = 1
+ overrides += emag_overrides
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(2, 1, src)
+ s.start()
+ return
/obj/machinery/programmable/process()
if (!output || !input)
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index 27e46c668b5..0b3301648bc 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -32,13 +32,7 @@ var/const/SAFETY_COOLDOWN = 100
/obj/machinery/recycler/attackby(var/obj/item/I, var/mob/user)
- if(istype(I, /obj/item/weapon/card/emag) && !emagged)
- emagged = 1
- if(safety_mode)
- safety_mode = 0
- update_icon()
- playsound(src.loc, "sparks", 75, 1, -1)
- else if(istype(I, /obj/item/weapon/screwdriver) && emagged)
+ if(istype(I, /obj/item/weapon/screwdriver) && emagged)
emagged = 0
update_icon()
user << "You reset the crusher to its default factory settings."
@@ -46,6 +40,14 @@ var/const/SAFETY_COOLDOWN = 100
..()
return
add_fingerprint(user)
+
+/obj/machinery/recycler/emag_act(user as mob)
+ if(!emagged)
+ emagged = 1
+ if(safety_mode)
+ safety_mode = 0
+ update_icon()
+ playsound(src.loc, "sparks", 75, 1, -1)
/obj/machinery/recycler/update_icon()
..()
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 1b05e84fe9f..0a0d9c32ebd 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -681,24 +681,6 @@
src.updateUsrDialog()
return
- else if(istype(I,/obj/item/weapon/card/emag))
-
- if(emagged)
- user << "\red 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 << "\red 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))
if(locked)
@@ -748,6 +730,19 @@
return
..()
+
+/obj/machinery/suit_cycler/emag_act(user as mob)
+ if(emagged)
+ user << "\red The cycler has already been subverted."
+ return
+
+ //Clear the access reqs, disable the safeties, and open up all paintjobs.
+ user << "\red 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
/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 9bd46e57ce7..ef50d3ea865 100644
--- a/code/game/machinery/telecomms/logbrowser.dm
+++ b/code/game/machinery/telecomms/logbrowser.dm
@@ -244,9 +244,11 @@
A.icon_state = "4"
A.anchored = 1
del(src)
- else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
+ src.updateUsrDialog()
+ return
+
+ emag_act(user as mob)
+ if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
user << "\blue You you disable the security protocols"
- src.updateUsrDialog()
- return
diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm
index 995d0fc239f..c02ef59e1be 100644
--- a/code/game/machinery/telecomms/telemonitor.dm
+++ b/code/game/machinery/telecomms/telemonitor.dm
@@ -153,9 +153,11 @@
A.icon_state = "4"
A.anchored = 1
del(src)
- else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "\blue You you disable the security protocols"
src.updateUsrDialog()
return
+
+ emag_act(user as mob)
+ if(!emagged)
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ emagged = 1
+ user << "\blue You you disable the security protocols"
\ No newline at end of file
diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm
index fed56a35124..e2b42ddbb44 100644
--- a/code/game/machinery/telecomms/traffic_control.dm
+++ b/code/game/machinery/telecomms/traffic_control.dm
@@ -233,12 +233,14 @@
A.icon_state = "4"
A.anchored = 1
del(src)
- else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
+ src.updateUsrDialog()
+ return
+
+/obj/machinery/computer/telecomms/traffic/emag_act(user as mob)
+ if(!emagged)
playsound(get_turf(src), 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
user << "\blue You you disable the security protocols"
- src.updateUsrDialog()
- return
/obj/machinery/computer/telecomms/traffic/proc/canAccess(var/mob/user)
if(issilicon(user) || in_range(user, src))
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 03a3fa2a3f6..b050fb624e1 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -31,16 +31,7 @@
return power_station
/obj/machinery/computer/teleporter/attackby(I as obj, mob/living/user as mob)
- if(istype(I,/obj/item/weapon/card/emag)) // If hit by an emag.
- var/obj/item/weapon/card/emag/E = I
- if(!emagged)
- if(E.uses)
- E.uses--
- emagged = 1
- user << "\blue The teleporter can now lock on to Syndicate beacons!"
- else
- ui_interact(user)
- else if(istype(I, /obj/item/device/gps))
+ if(istype(I, /obj/item/device/gps))
var/obj/item/device/gps/L = I
if(L.locked_location && !(stat & (NOPOWER|BROKEN)))
user.before_take_item(L)
@@ -53,6 +44,13 @@
else
..()
return
+
+/obj/machinery/computer/teleporter/emag_act(user as mob)
+ if(!emagged)
+ emagged = 1
+ user << "\blue The teleporter can now lock on to Syndicate beacons!"
+ else
+ ui_interact(user)
/obj/machinery/computer/teleporter/attack_paw(mob/user)
usr << "You are too primitive to use this computer."
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index 4f77d7d7c70..90dd7f27d71 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -364,15 +364,6 @@
if (istype(user, /mob/living/silicon))
return src.attack_hand(user)
- if (istype(W, /obj/item/weapon/card/emag) && !emagged)
- user << "\red You short out the turret controls' access analysis module."
- emagged = 1
- locked = 0
- if(user.machine==src)
- src.attack_hand(user)
-
- return
-
else if( get_dist(src, user) == 0 ) // trying to unlock the interface
if (src.allowed(usr))
if(emagged)
@@ -390,6 +381,17 @@
src.attack_hand(user)
else
user << "Access denied."
+
+/obj/machinery/turretid/emag_act(user as mob)
+ if (!emagged)
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ user << "\red You short out the turret controls' access analysis module."
+ emagged = 1
+ locked = 0
+ if(H.machine==src)
+ src.attack_hand(user)
/obj/machinery/turretid/attack_ai(mob/user as mob)
if(!ailock)
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index ff85b1321ff..a7191450c9e 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -244,10 +244,6 @@
break
default_deconstruction_crowbar(W)
- if(istype(W, /obj/item/weapon/card/emag))
- emagged = 1
- user << "You short out the product lock on [src]"
- return
else if(istype(W, /obj/item/weapon/screwdriver) && anchored)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
panel_open = !panel_open
@@ -288,6 +284,12 @@
user << "You should probably unscrew the service panel first."
else
..()
+
+/obj/machinery/vending/emag_act(user as mob)
+ emagged = 1
+ user << "You short out the product lock on [src]"
+ return
+
/**
* Receive payment with cashmoney.
*
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 5b7a50c8594..76d2c03c934 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -513,10 +513,7 @@
return 1
else
user << "You can't load \the [name] while it's opened."
- return 1
-
- if(istype(W,/obj/item/weapon/card/emag))
- emag()
+ return 1
if(istype(W, /obj/item/stack))
var/material
@@ -561,6 +558,9 @@
else
user << "\The [src] cannot hold any more [sname] sheet\s."
return
+
+/obj/machinery/mecha_part_fabricator/emag_act(user as mob)
+ emag()
/obj/machinery/mecha_part_fabricator/proc/material2name(var/ID)
return copytext(ID,2)
\ No newline at end of file
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index e62872c9664..d37f0d0a544 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -697,17 +697,6 @@
/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/card/emag))
- if(istype(src, /obj/mecha/working/ripley) && emagged == 0)
- emagged = 1
- usr << "\blue You slide the [W] through the [src]'s ID slot."
- playsound(src.loc, "sparks", 100, 1)
- src.desc += "\red The mech's equiptment slots spark dangerously!"
- else
- usr <<"\red The [src]'s ID slot rejects the [W]."
- return
-
-
if(istype(W, /obj/item/device/mmi) || istype(W, /obj/item/device/mmi/posibrain))
if(mmi_move_inside(W,user))
user << "[src]-MMI interface initialized successfuly"
@@ -862,6 +851,15 @@
*/
return
+/obj/mecha/emag_act(user as mob)
+ if(istype(src, /obj/mecha/working/ripley) && emagged == 0)
+ emagged = 1
+ usr << "\blue You slide the card through the [src]'s ID slot."
+ playsound(src.loc, "sparks", 100, 1)
+ src.desc += "\red The mech's equiptment slots spark dangerously!"
+ else
+ usr <<"\red The [src]'s ID slot rejects the card."
+ return
/*
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index 63836e9ecc6..80421bac26e 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -72,10 +72,6 @@
usr << "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/sheet/glass))
var/obj/item/stack/sheet/glass/G = W
if(G.amount - decrement >= 0 && uses < max_uses)
@@ -104,7 +100,10 @@
user << "You need a working light."
return
-
+/obj/item/device/lightreplacer/emag_act(user as mob)
+ if(!emagged)
+ Emag()
+
/obj/item/device/lightreplacer/attack_self(mob/user)
/* // This would probably be a bit OP. If you want it though, uncomment the code.
if(isrobot(user))
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
index 0d12f8262b6..910e37d3a5a 100644
--- a/code/game/objects/items/devices/megaphone.dm
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -47,10 +47,8 @@
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(user as mob)
+ if(!emagged)
user << "\red You overload \the [src]'s voice synthesizer."
emagged = 1
insults = rand(1, 3)//to prevent dickflooding
- return
- return
\ No newline at end of file
diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm
index 15f59e66dcb..628a6ee8bba 100644
--- a/code/game/objects/items/devices/radio/beacon.dm
+++ b/code/game/objects/items/devices/radio/beacon.dm
@@ -8,15 +8,11 @@
var/emagged = 0
var/syndicate = 0
-/obj/item/device/radio/beacon/attackby(I as obj, mob/living/user as mob)
- if(istype(I,/obj/item/weapon/card/emag)) // If hit by an emag.
- var/obj/item/weapon/card/emag/E = I
- if(!emagged)
- if(E.uses)
- E.uses--
- emagged = 1
- syndicate = 1
- user << "\blue The This beacon now only be locked on to by emagged teleporters!"
+/obj/item/device/radio/beacon/emag_act(user as mob)
+ if(!emagged)
+ emagged = 1
+ syndicate = 1
+ user << "\blue The This beacon now only be locked on to by emagged teleporters!"
/obj/item/device/radio/beacon/hear_talk()
return
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 555dbe1caea..697c5574a84 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -38,17 +38,15 @@
storedinfo += "\[[time2text(timerecorded*10,"mm:ss")]\] [M.name] says, \"[msg]\""
return
-/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(user as mob)
+ if(!emagged == 0)
+ emagged = 1
+ recording = 0
+ user << "PZZTTPFFFT"
+ icon_state = "taperecorderidle"
+ else
+ user << "It is already emagged!"
+
/obj/item/device/taperecorder/proc/explode()
var/turf/T = get_turf(loc)
if(ismob(loc))
diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm
index 3b26c943acb..3ef104cabbb 100644
--- a/code/game/objects/items/devices/whistle.dm
+++ b/code/game/objects/items/devices/whistle.dm
@@ -24,9 +24,8 @@
spawn(20)
spamcheck = 0
-/obj/item/device/hailer/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/weapon/card/emag) && !emagged)
+/obj/item/device/hailer/emag_act(user as mob)
+ if(!emagged)
user << "\red You overload \the [src]'s voice synthesizer."
emagged = 1
- return
- return
\ No newline at end of file
+
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 0fb733cad2a..dd849488a3b 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -69,58 +69,15 @@
item_state = "card-id"
origin_tech = "magnets=2;syndicate=2"
flags = NOBLUDGEON
- var/uses = 1000000
- // List of devices that cost a use to emag.
- var/list/devices = list(
- /obj/item/robot_parts,
- /obj/item/weapon/storage/lockbox,
- /obj/item/weapon/storage/secure,
- /obj/item/weapon/circuitboard,
- /obj/item/device/eftpos,
- /obj/item/device/lightreplacer,
- /obj/item/device/taperecorder,
- /obj/item/device/hailer,
- /obj/item/clothing/accessory/holobadge,
- /obj/structure/closet/crate/secure,
- /obj/structure/closet/secure_closet,
- /obj/machinery/librarycomp,
- /obj/machinery/computer,
- /obj/machinery/power,
- /obj/machinery/suspension_gen,
- /obj/machinery/shield_capacitor,
- /obj/machinery/shield_gen,
-// /obj/machinery/zero_point_emitter,
- /obj/machinery/clonepod,
- /obj/machinery/deployable,
- /obj/machinery/door_control,
- /obj/machinery/porta_turret,
- /obj/machinery/shieldgen,
- /obj/machinery/turretid,
- /obj/machinery/vending,
- /obj/machinery/bot,
- /obj/machinery/door,
- /obj/machinery/telecomms,
- /obj/machinery/mecha_part_fabricator,
- /obj/vehicle
- )
+/obj/item/weapon/card/emag/attack()
+ return
-/obj/item/weapon/card/emag/afterattack(var/obj/item/weapon/O as obj, mob/user as mob)
-
- for(var/type in devices)
- if(istype(O,type))
- uses--
- break
-
- if(uses<1)
- user.visible_message("[src] fizzles and sparks - it seems it's been used once too often, and is now broken.")
- user.drop_item()
- var/obj/item/weapon/card/emag_broken/junk = new(user.loc)
- junk.add_fingerprint(user)
- del(src)
+/obj/item/weapon/card/emag/afterattack(atom/target, mob/user, proximity)
+ var/atom/A = target
+ if(!proximity)
return
-
- ..()
+ A.emag_act(user)
/obj/item/weapon/card/id
name = "identification card"
@@ -444,4 +401,4 @@
decal_name = "cryptographic sequencer"
decal_desc = "It's a card with a magnetic strip attached to some circuitry."
decal_icon_state = "emag"
- override_name = 1
+ override_name = 1
diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm
index b65a1904116..a1ddb256d89 100644
--- a/code/game/objects/items/weapons/defib.dm
+++ b/code/game/objects/items/weapons/defib.dm
@@ -92,14 +92,6 @@
bcell = W
user << "You install a cell in [src]."
- if(istype(W, /obj/item/weapon/card/emag))
- if(safety)
- safety = 0
- user << "You silently disable [src]'s safety protocols with the [W]."
- else
- safety = 1
- user << "You silently enable [src]'s safety protocols with the [W]."
-
if(istype(W, /obj/item/weapon/screwdriver))
if(bcell)
bcell.updateicon()
@@ -110,7 +102,13 @@
update_icon()
return
-
+/obj/item/weapon/defibrillator/emag_act(user as mob)
+ if(safety)
+ safety = 0
+ user << "You silently disable [src]'s safety protocols with the card."
+ else
+ safety = 1
+ user << "You silently enable [src]'s safety protocols with the card."
/obj/item/weapon/defibrillator/emp_act(severity)
if(bcell)
diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm
index 2a4d03b8f0a..a33fe344e77 100644
--- a/code/game/objects/items/weapons/storage/secure.dm
+++ b/code/game/objects/items/weapons/storage/secure.dm
@@ -34,23 +34,8 @@
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]."
- return
+ if ((istype(W, /obj/item/weapon/melee/energy/blade)) && (!src.emagged))
+ emag_act(user, W)
if (istype(W, /obj/item/weapon/screwdriver))
if (do_after(user, 20))
@@ -79,6 +64,25 @@
// -> storage/attackby() what with handle insertion, etc
..()
+
+ emag_act(user as mob, weapon as obj)
+ 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
+ if(istype(weapon, /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]."
+ return
MouseDrop(over_object, src_location, over_location)
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index 1e0682fa5f0..9ba54e57306 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -189,17 +189,7 @@
user.visible_message("\red [user] displays their NanoTrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.","\red You display your NanoTrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.")
/obj/item/clothing/accessory/holobadge/attackby(var/obj/item/O as obj, var/mob/user as mob)
-
- if (istype(O, /obj/item/weapon/card/emag))
- if (emagged)
- user << "\red [src] is already cracked."
- return
- else
- emagged = 1
- user << "\red 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
@@ -218,6 +208,15 @@
user << "[src] rejects your insufficient access rights."
return
..()
+
+/obj/item/clothing/accessory/holobadge/emag_act(user as mob)
+ if (emagged)
+ user << "\red [src] is already cracked."
+ return
+ else
+ emagged = 1
+ user << "\red You swipe the card and crack the holobadge security checks."
+ return
/obj/item/clothing/accessory/holobadge/attack(mob/living/carbon/human/M, mob/living/user)
if(isliving(user))
diff --git a/code/modules/computer3/component.dm b/code/modules/computer3/component.dm
index 501bbc973eb..ca4639c73bd 100644
--- a/code/modules/computer3/component.dm
+++ b/code/modules/computer3/component.dm
@@ -85,6 +85,15 @@
var/dualslot = 0 // faster than typechecking
attackby_types = list(/obj/item/weapon/card)
+ emag_act(user as mob)
+ if(!writer)
+ usr << "You insert \the card, and the computer grinds, sparks, and beeps. After a moment, the card ejects itself."
+ computer.emagged = 1
+ return 1
+ else
+ usr << "You are unable to insert \the card, as the reader slot is occupied"
+ return 0
+
attackby(var/obj/item/I as obj, var/mob/user as mob)
if(istype(I,/obj/item/weapon/card))
insert(I)
@@ -102,14 +111,6 @@
usr << "This device has only one card slot"
return 0
- if(istype(card,/obj/item/weapon/card/emag)) // emag reader slot
- if(!writer)
- usr << "You insert \the [card], and the computer grinds, sparks, and beeps. After a moment, the card ejects itself."
- computer.emagged = 1
- return 1
- else
- usr << "You are unable to insert \the [card], as the reader slot is occupied"
-
var/mob/living/L = usr
switch(slot)
if(1)
@@ -132,7 +133,6 @@
else
usr << "There is already something in the reader slot."
-
// Usage of insert() preferred, as it also tells result to the user.
proc/equip_to_reader(var/obj/item/weapon/card/card, var/mob/living/L)
if(!reader)
diff --git a/code/modules/computer3/computers/communications.dm b/code/modules/computer3/computers/communications.dm
index 58c7f904f06..37437fdf6aa 100644
--- a/code/modules/computer3/computers/communications.dm
+++ b/code/modules/computer3/computers/communications.dm
@@ -68,9 +68,7 @@
authenticated = 1
if(access_captain in I.GetAccess())
authenticated = 2
- if(istype(I,/obj/item/weapon/card/emag))
- authenticated = 2
- computer.emagged = 1
+
if("logout" in href_list)
authenticated = 0
diff --git a/code/modules/computer3/computers/shuttle.dm b/code/modules/computer3/computers/shuttle.dm
index 5d5fab6528b..9f0619ce321 100644
--- a/code/modules/computer3/computers/shuttle.dm
+++ b/code/modules/computer3/computers/shuttle.dm
@@ -60,11 +60,13 @@
world << "\blue All authorizations to shorting time for shuttle launch have been revoked!"
src.authorized.len = 0
src.authorized = list( )
-
- else if (istype(W, /obj/item/card/emag) && !emagged)
+ return
+
+ emag_act(user as mob)
+ if (!emagged)
var/choice = alert(user, "Would you like to launch the shuttle?","Shuttle control", "Launch", "Cancel")
- if(!emagged && emergency_shuttle.location == 1 && user.get_active_hand() == W)
+ if(!emagged && emergency_shuttle.location == 1)
switch(choice)
if("Launch")
world << "\blue Alert: Shuttle launch time shortened to 10 seconds!"
@@ -72,4 +74,3 @@
emagged = 1
if("Cancel")
return
- return
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index c1fdb193485..66c19bfcda0 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -238,8 +238,6 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
onclose(user, "library")
/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
@@ -248,6 +246,10 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
V.show_message("[src] lets out a low, short blip.", 2)
else
..()
+
+/obj/machinery/librarycomp/emag_act(user as mob)
+ if (src.density)
+ src.emagged = 1
/obj/machinery/librarycomp/Topic(href, href_list)
if(..())
diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm
index 0e0889bc637..ed588a76482 100644
--- a/code/modules/mining/laborcamp/laborstacker.dm
+++ b/code/modules/mining/laborcamp/laborstacker.dm
@@ -63,9 +63,10 @@
/obj/machinery/mineral/labor_claim_console/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/card/id))
return attack_hand(user)
- else if(istype(I, /obj/item/weapon/card/emag))
- return emag(user)
..()
+
+/obj/machinery/mineral/labor_claim_console/emag_act(user as mob)
+ emag(user)
/obj/machinery/mineral/labor_claim_console/proc/emag(mob/user as mob)
if(!emagged)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 5b06aaa9b40..f624a94924a 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -198,7 +198,17 @@ emp_act
I.emp_act(severity)
..()
-
+/mob/living/carbon/human/emag_act(user as mob, var/datum/organ/external/affecting)
+ if(!(affecting.status & ORGAN_ROBOT))
+ user << "\red That limb isn't robotic."
+ return
+ if(affecting.sabotaged)
+ user << "\red [src]'s [affecting.display_name] is already sabotaged!"
+ else
+ user << "\red You sneakily slide the card into the dataport on [src]'s [affecting.display_name] and short out the safeties."
+ affecting.sabotaged = 1
+ return 1
+
//Returns 1 if the attack hit, 0 if it missed.
/mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone)
if(!I || !user) return 0
@@ -236,17 +246,8 @@ emp_act
return 0
if(istype(I,/obj/item/weapon/card/emag))
- if(!(affecting.status & ORGAN_ROBOT))
- user << "\red That limb isn't robotic."
- return
- if(affecting.sabotaged)
- user << "\red [src]'s [affecting.display_name] is already sabotaged!"
- else
- user << "\red You sneakily slide [I] into the dataport on [src]'s [affecting.display_name] and short out the safeties."
- var/obj/item/weapon/card/emag/emag = I
- emag.uses--
- affecting.sabotaged = 1
- return 1
+ emag_act(user, affecting)
+
if(! I.discrete)
if(I.attack_verb.len)
visible_message("\red [src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!")
diff --git a/code/modules/mob/living/silicon/mommi/mommi.dm b/code/modules/mob/living/silicon/mommi/mommi.dm
index 91defdaedfb..9151be4369c 100644
--- a/code/modules/mob/living/silicon/mommi/mommi.dm
+++ b/code/modules/mob/living/silicon/mommi/mommi.dm
@@ -240,68 +240,6 @@ They can only use one tool at a time, they can't choose modules, and they have 1
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))
- user << "You emag the cover lock."
- locked = 0
- else
- user << "You fail to emag the cover lock."
- if(prob(25))
- 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
- connected_ai = null
- 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 Syndicate Agents.")
- src << "\red ALERT: Foreign software detected."
- sleep(5)
- src << "\red Initiating diagnostics..."
- sleep(20)
- src << "\red SynBorg v1.7 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 && istype(src.module, /obj/item/weapon/robot_module/miner))
- for(var/obj/item/weapon/pickaxe/borgdrill/D in src.module.modules)
- del(D)
- src.module.modules += new /obj/item/weapon/pickaxe/diamonddrill(src.module)
- src.module.rebuild()
- updateicon()
- else
- user << "You fail to [ locked ? "unlock" : "lock"] [src]'s interface."
- if(prob(25))
- src << "Hack attempt detected."
- return
-
else if(istype(W, /obj/item/borg/upgrade/))
var/obj/item/borg/upgrade/U = W
if(!opened)
@@ -322,6 +260,68 @@ They can only use one tool at a time, they can't choose modules, and they have 1
else
spark_system.start()
return ..()
+
+/mob/living/silicon/robot/mommi/emag_act(user as mob)
+ 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."
+ if(prob(25))
+ 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
+ connected_ai = null
+ 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 Syndicate Agents.")
+ src << "\red ALERT: Foreign software detected."
+ sleep(5)
+ src << "\red Initiating diagnostics..."
+ sleep(20)
+ src << "\red SynBorg v1.7 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 && istype(src.module, /obj/item/weapon/robot_module/miner))
+ for(var/obj/item/weapon/pickaxe/borgdrill/D in src.module.modules)
+ del(D)
+ src.module.modules += new /obj/item/weapon/pickaxe/diamonddrill(src.module)
+ src.module.rebuild()
+ updateicon()
+ else
+ user << "You fail to [ locked ? "unlock" : "lock"] [src]'s interface."
+ if(prob(25))
+ src << "Hack attempt detected."
+ return
/mob/living/silicon/robot/mommi/attack_hand(mob/user)
add_fingerprint(user)
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 0073729778d..e3a04f2cd0f 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -172,41 +172,6 @@
user << "The machine is hermetically sealed. You can't open the case."
return
- else if (istype(W, /obj/item/weapon/card/emag))
-
- if(!client || stat == 2)
- user << "\red There's not much point subverting this heap of junk."
- return
-
- if(emagged)
- src << "\red [user] attempts to load subversive software into you, but your hacked subroutined ignore the attempt."
- user << "\red You attempt to subvert [src], but the sequencer has no effect."
- return
-
- user << "\red You swipe the sequencer across [src]'s interface and watch its eyes flicker."
- src << "\red 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 Syndicate Agents.")
-
- 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."
- return
-
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(stat == 2)
@@ -242,6 +207,41 @@
return
..()
+
+/mob/living/silicon/robot/drone/emag_act(user as mob)
+ if(!client || stat == 2)
+ user << "\red There's not much point subverting this heap of junk."
+ return
+
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+
+ if(emagged)
+ src << "\red [user] attempts to load subversive software into you, but your hacked subroutined ignore the attempt."
+ user << "\red You attempt to subvert [src], but the sequencer has no effect."
+ return
+
+ user << "\red You swipe the sequencer across [src]'s interface and watch its eyes flicker."
+ src << "\red 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] : [H.name]([H.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 [H.real_name] and people he designates as being such are Syndicate Agents.")
+
+ src << "Obey these laws:"
+ laws.show_laws(src)
+ src << "\red \b ALERT: [H.real_name] is your new master. Obey your new laws and his commands."
+ return
//DRONE LIFE/DEATH
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 1e0a62eedb2..1b8e68dfd79 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -808,72 +808,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."
- if(prob(25))
- 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
- if(user.hud_used)
- user.hud_used.update_robot_modules_display() //Shows/hides the emag item if the inventory screen is already open.
- lawupdate = 0
- connected_ai = null
- 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 Syndicate Agents.")
- src << "\red ALERT: Foreign software detected."
- sleep(5)
- src << "\red Initiating diagnostics..."
- sleep(20)
- src << "\red SynBorg v1.7 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 && istype(src.module, /obj/item/weapon/robot_module/miner))
- for(var/obj/item/weapon/pickaxe/borgdrill/D in src.module.modules)
- del(D)
- src.module.modules += new /obj/item/weapon/pickaxe/diamonddrill(src.module)
- src.module.rebuild()
- updateicon()
- else
- user << "You fail to [ locked ? "unlock" : "lock"] [src]'s interface."
- if(prob(25))
- src << "Hack attempt detected."
- return
-
else if(istype(W, /obj/item/borg/upgrade/))
var/obj/item/borg/upgrade/U = W
if(!opened)
@@ -894,6 +828,73 @@
else
spark_system.start()
return ..()
+
+/mob/living/silicon/robot/emag_act(user as mob)
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = 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."
+ if(prob(25))
+ 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
+ if(H.hud_used)
+ H.hud_used.update_robot_modules_display() //Shows/hides the emag item if the inventory screen is already open.
+ lawupdate = 0
+ connected_ai = null
+ 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] : [H.name]([H.key]) emagged [name]([key])")
+ set_zeroth_law("Only [H.real_name] and people he designates as being such are Syndicate Agents.")
+ src << "\red ALERT: Foreign software detected."
+ sleep(5)
+ src << "\red Initiating diagnostics..."
+ sleep(20)
+ src << "\red SynBorg v1.7 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: [H.real_name] is your new master. Obey your new laws and his commands."
+ if(src.module && istype(src.module, /obj/item/weapon/robot_module/miner))
+ for(var/obj/item/weapon/pickaxe/borgdrill/D in src.module.modules)
+ del(D)
+ src.module.modules += new /obj/item/weapon/pickaxe/diamonddrill(src.module)
+ src.module.rebuild()
+ updateicon()
+ else
+ user << "You fail to [ locked ? "unlock" : "lock"] [src]'s interface."
+ if(prob(25))
+ src << "Hack attempt detected."
+ return
/mob/living/silicon/robot/verb/unlock_own_cover()
set category = "Robot Commands"
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 9b638505e28..acf6333afce 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -471,14 +471,12 @@
icon_living = "borgi"
var/emagged = 0
-/mob/living/simple_animal/corgi/Ian/borgi/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if (istype(O, /obj/item/weapon/card/emag) && !emagged)
+/mob/living/simple_animal/corgi/Ian/borgi/emag_act(user as mob)
+ if (!emagged)
emagged = 1
visible_message("[user] swipes a card through [src].", "You overload [src]s internal reactor.")
spawn (1000)
src.explode()
- return
- ..()
/mob/living/simple_animal/corgi/Ian/borgi/proc/explode()
for(var/mob/M in viewers(src, null))
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index aa64a6fe921..73c4018e3b9 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -125,18 +125,6 @@
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
if(O.force)
@@ -152,6 +140,17 @@
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red [user] gently taps [src] with the [O]. ")
+
+/mob/living/simple_animal/spiderbot/emag_act(user as mob)
+ if (emagged)
+ user << "\red [src] is already overloaded - better run."
+ return 0
+ else
+ 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()
/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 6de3d9cea23..15699572da4 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -458,23 +458,6 @@
update_icon()
else
user << "\red Access denied."
- else if (istype(W, /obj/item/weapon/card/emag) && !(emagged || malfhack)) // 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 << "\red You must remove the floor plating in front of the APC first."
@@ -598,8 +581,26 @@
"\red You hit the [src.name] with your [W.name]!", \
"You hear bang")
+/obj/machinery/power/apc/emag_act(user as mob)
+ if (!(emagged || malfhack)) // 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."
+
// attack with hand - remove cell (if cover open) or interact with the APC
-
/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 89d65a6ae21..9402a4c234f 100644
--- a/code/modules/power/pacman2.dm
+++ b/code/modules/power/pacman2.dm
@@ -81,14 +81,6 @@
user.drop_item()
O.loc = src
user << "\blue You add the plasma 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
@@ -114,6 +106,11 @@
new_frame.state = 2
new_frame.icon_state = "box_1"
del(src)
+
+ emag_act(user as mob)
+ if(!emagged)
+ emagged = 1
+ emp_act(1)
attack_hand(mob/user as mob)
..()
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index a334782cce1..d918ec86711 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -211,9 +211,6 @@ display round(lastgen) and plasmatank amount
addstack.use(amount)
updateUsrDialog()
return
- else if (istype(O, /obj/item/weapon/card/emag))
- emagged = 1
- emp_act(1)
else if(!active)
if(istype(O, /obj/item/weapon/wrench))
if(!anchored && !isinspace())
@@ -239,6 +236,10 @@ display round(lastgen) and plasmatank amount
else if(istype(O, /obj/item/weapon/crowbar) && panel_open)
default_deconstruction_crowbar(O)
+/obj/machinery/power/port_gen/pacman/emag_act(user as mob)
+ emagged = 1
+ emp_act(1)
+
/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob)
..()
if (!anchored)
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 601d7191f7b..8e9e16c9943 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -222,12 +222,14 @@
user << "\red Access denied."
return
-
- if(istype(W, /obj/item/weapon/card/emag) && !emagged)
+ ..()
+ return
+
+/obj/machinery/power/emitter/emag_act(user as mob)
+ if(!emagged)
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
locked = 0
emagged = 1
- user.visible_message("[user.name] emags the [src.name].","\red You short out the lock.")
- return
-
- ..()
- return
\ No newline at end of file
+ H.visible_message("[H.name] emags the [src.name].","\red You short out the lock.")
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 90e7ff47ace..a0a29917995 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -165,16 +165,17 @@ 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 disk to the machine!"
- else if(istype(D,/obj/item/weapon/card/emag))
- if(!emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "You you disable the security protocols"
else
..()
src.updateUsrDialog()
return
+/obj/machinery/computer/rdconsole/emag_act(user as mob)
+ if(!emagged)
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ emagged = 1
+ user << "You you disable the security protocols"
+
/obj/machinery/computer/rdconsole/Topic(href, href_list)
if(..())
return
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 109ab110d71..f6e00bc69b4 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -319,14 +319,12 @@
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(user as mob)
+ if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
user << "\blue You you disable the security protocols"
src.updateUsrDialog()
- return ..()
-
/obj/machinery/r_n_d/server/robotics
name = "Robotics R&D Server"
diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm
index 0261997a9d3..17a97b79fe7 100644
--- a/code/modules/shuttles/escape_pods.dm
+++ b/code/modules/shuttles/escape_pods.dm
@@ -89,19 +89,14 @@
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)
+/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/emag_act(user as mob)
+ if (!emagged)
user << "\blue 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
-
- ..()
-
-
//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 f1ca624e73b..e6e7a8d4112 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -97,15 +97,11 @@
return
shuttle.cancel_launch(user)
-/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()
- hacked = 1
- usr << "You short out the console's ID checking system. It's now available to everyone!"
- else
- ..()
+/obj/machinery/computer/shuttle_control/emag_act(user as mob)
+ src.req_access = list()
+ src.req_one_access = list()
+ hacked = 1
+ usr << "You short out the console's ID checking system. It's now available to everyone!"
/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 b5268fd2ca5..29baa07c1b0 100644
--- a/code/modules/shuttles/shuttle_emergency.dm
+++ b/code/modules/shuttles/shuttle_emergency.dm
@@ -153,14 +153,15 @@
/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)
+ read_authorization(W)
+ ..()
+
+/obj/machinery/computer/shuttle_control/emergency/emag_act(user as mob)
+ if (!emagged)
user << "\blue You short out the [src]'s authorization protocols."
emagged = 1
return
- read_authorization(W)
- ..()
-
/obj/machinery/computer/shuttle_control/emergency/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0]
var/datum/shuttle/ferry/emergency/shuttle = shuttle_controller.shuttles[shuttle_tag]
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 21283526863..42ee7f3786f 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -147,11 +147,12 @@
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
user << " You calibrate the telepad locator."
-/obj/item/weapon/rcs/attackby(obj/item/W, mob/user)
- if(istype(W, /obj/item/weapon/card/emag) && emagged == 0)
+/obj/item/weapon/rcs/emag_act(user as mob)
+ if(!emagged)
emagged = 1
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
user << " You emag the RCS. Click on it to toggle between modes."
- return
\ No newline at end of file
+ return
+
\ No newline at end of file
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index f37ec393860..e4b7986ab1a 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -55,12 +55,6 @@
return
/obj/machinery/computer/telescience/attackby(obj/item/W, mob/user)
- if(istype(W,/obj/item/weapon/card/emag))
- if (emagged == 0)
- user << "\blue You scramble the Telescience authentication key to an unknown signal. You should be able to teleport to more places now!"
- emagged = 1
- else
- user << "\red The machine seems unaffected by the card swipe..."
if(istype(W, /obj/item/bluespace_crystal))
if(crystals.len >= max_crystals)
user << "There are not enough crystal slots."
@@ -86,6 +80,13 @@
updateUsrDialog()
else
..()
+
+/obj/machinery/computer/telescience/emag_act(user as mob)
+ if (!emagged)
+ user << "\blue You scramble the Telescience authentication key to an unknown signal. You should be able to teleport to more places now!"
+ emagged = 1
+ else
+ user << "\red The machine seems unaffected by the card swipe..."
/obj/machinery/computer/telescience/attack_ai(mob/user)
src.attack_hand(user)
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index a929e4499d9..4c62455bf07 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -87,8 +87,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")
@@ -99,6 +97,10 @@
healthcheck()
else
..()
+
+/obj/vehicle/emag_act(user as mob)
+ if(!emagged)
+ Emag(user)
/obj/vehicle/attack_animal(var/mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0) return