diff --git a/code/game/objects/items/weapons/agent_id.dm b/code/game/objects/items/weapons/agent_id.dm
index 31de21cca64a6..5eea728393b59 100644
--- a/code/game/objects/items/weapons/agent_id.dm
+++ b/code/game/objects/items/weapons/agent_id.dm
@@ -50,16 +50,16 @@
icon_state = "syndie"
assignment = "Syndicate Overlord"
untrackable = TRUE
+ can_id_flash = FALSE //This can ID flash, this just prevents it from always flashing.
access = list(ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER, ACCESS_SYNDICATE_COMMAND, ACCESS_EXTERNAL_AIRLOCKS)
-/obj/item/card/id/syndicate/afterattack__legacy__attackchain(atom/target, mob/user, proximity_flag, params)
- if(!proximity_flag)
- return
+/obj/item/card/id/syndicate/interact_with_atom(atom/target, mob/living/user, list/modifiers)
if(istype(target, /obj/item/card/id))
var/obj/item/card/id/I = target
if(isliving(user) && user?.mind?.special_role)
to_chat(usr, "The card's microscanners activate as you pass it over [I], copying its access.")
access |= I.access //Don't copy access if user isn't an antag -- to prevent metagaming
+ return ITEM_INTERACT_SUCCESS
/obj/item/card/id/syndicate/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
if(..())
@@ -127,8 +127,8 @@
ui = new(user, src, "AgentCard", name)
ui.open()
-/obj/item/card/id/syndicate/attack_self__legacy__attackchain(mob/user)
- if(!ishuman(user))
+/obj/item/card/id/syndicate/activate_self(mob/user)
+ if(..() || !ishuman(user))
return
if(!registered_human)
registered_human = user
@@ -289,12 +289,11 @@
if(isAntag(user))
. += "Similar to an agent ID, this ID card can be used to copy accesses, but it lacks the customization and anti-tracking capabilities of an agent ID."
-/obj/item/card/id/syndi_scan_only/afterattack__legacy__attackchain(atom/O, mob/user, proximity_flag, params)
- if(!proximity_flag)
- return
- if(istype(O, /obj/item/card/id))
- var/obj/item/card/id/I = O
+/obj/item/card/id/syndi_scan_only/interact_with_atom(atom/target, mob/living/user, list/modifiers)
+ if(istype(target, /obj/item/card/id))
+ var/obj/item/card/id/I = target
if(isliving(user) && user.mind)
if(user.mind.special_role)
to_chat(user, "The card's microscanners activate as you pass it over [I], copying its access.")
access |= I.access // Don't copy access if user isn't an antag -- to prevent metagaming
+ return ITEM_INTERACT_SUCCESS
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 716ed73ca8350..264c12bdad4ea 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -11,6 +11,7 @@
desc = "A card."
icon = 'icons/obj/card.dmi'
w_class = WEIGHT_CLASS_TINY
+ new_attack_chain = TRUE
var/associated_account_number = 0
var/list/files = list()
@@ -38,14 +39,10 @@
flags = NOBLUDGEON
flags_2 = NO_MAT_REDEMPTION_2
-/obj/item/card/emag/attack__legacy__attackchain()
- return
-/obj/item/card/emag/afterattack__legacy__attackchain(atom/target, mob/user, proximity)
- var/atom/A = target
- if(!proximity)
- return
- A.emag_act(user)
+/obj/item/card/emag/interact_with_atom(atom/target, mob/living/user, list/modifiers)
+ target.emag_act(user)
+ return ITEM_INTERACT_SUCCESS
/obj/item/card/emag/magic_key
name = "magic key"
@@ -53,14 +50,15 @@
icon_state = "magic_key"
origin_tech = "magnets=2"
-/obj/item/card/emag/magic_key/afterattack__legacy__attackchain(atom/target, mob/user, proximity)
+/obj/item/card/emag/magic_key/interact_with_atom(atom/target, mob/living/user, list/modifiers)
if(!isairlock(target))
- return
+ return ITEM_INTERACT_BLOCKING
var/obj/machinery/door/D = target
D.locked = FALSE
- update_icon()
- . = ..()
+ D.update_icon()
+ D.emag_act(user)
qdel(src)
+ return ITEM_INTERACT_SUCCESS
/obj/item/card/cmag
desc = "It's a card coated in a slurry of electromagnetic bananium."
@@ -75,13 +73,9 @@
. = ..()
AddComponent(/datum/component/slippery, src, 16 SECONDS, 100)
-/obj/item/card/cmag/attack__legacy__attackchain()
- return
-
-/obj/item/card/cmag/afterattack__legacy__attackchain(atom/target, mob/user, proximity)
- if(!proximity)
- return
+/obj/item/card/cmag/interact_with_atom(atom/target, mob/living/user, list/modifiers)
target.cmag_act(user)
+ return ITEM_INTERACT_SUCCESS
/obj/item/card/id
name = "identification card"
@@ -117,6 +111,9 @@
var/dat
var/stamped = 0
+ /// Can we flash the ID?
+ var/can_id_flash = TRUE
+
var/obj/item/card/id/guest/guest_pass = null // Guest pass attached to the ID
/obj/item/card/id/New()
@@ -151,13 +148,11 @@
popup.set_content(dat)
popup.open()
-/obj/item/card/id/attack_self__legacy__attackchain(mob/user as mob)
- user.visible_message("[user] shows you: [bicon(src)] [name]. The assignment on the card: [assignment]",\
- "You flash your ID card: [bicon(src)] [name]. The assignment on the card: [assignment]")
- if(mining_points)
- to_chat(user, "There's [mining_points] Mining Points loaded onto this card. This card has earned [total_mining_points] Mining Points this Shift!")
- add_fingerprint(user)
- return
+/obj/item/card/id/activate_self/activate_self(mob/user)
+ if(..())
+ return
+ if(can_id_flash)
+ flash_card(user)
/obj/item/card/id/proc/UpdateName()
name = "[registered_name]'s ID Card ([assignment])"
@@ -751,7 +746,9 @@
access = list(ACCESS_FREE_GOLEMS, ACCESS_ROBOTICS, ACCESS_CLOWN, ACCESS_MIME, ACCESS_XENOBIOLOGY) //access to robots/mechs
var/registered = FALSE
-/obj/item/card/id/golem/attack_self__legacy__attackchain(mob/user as mob)
+/obj/item/card/id/golem/activate_self(mob/user)
+ if(..())
+ return
if(!registered && ishuman(user))
registered_name = user.real_name
SetOwnerInfo(user)
@@ -760,9 +757,8 @@
UpdateName()
desc = "A card used to claim mining points and buy gear."
registered = TRUE
+ can_id_flash = TRUE
to_chat(user, "The ID is now registered as yours.")
- else
- ..()
/obj/item/card/id/data
icon_state = "data"
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 660934f55a128..ba96626bb6184 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -501,16 +501,17 @@
icon_state = "data"
var/points = 500
-/obj/item/card/mining_point_card/attackby__legacy__attackchain(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/card/id))
+/obj/item/card/mining_point_card/attack_by(obj/item/attacking, mob/user, params)
+ if(..())
+ return FINISH_ATTACK
+ if(istype(attacking, /obj/item/card/id))
if(points)
- var/obj/item/card/id/C = I
+ var/obj/item/card/id/C = attacking
C.mining_points += points
to_chat(user, "You transfer [points] points to [C].")
points = 0
else
to_chat(user, "There's no points left on [src].")
- ..()
/obj/item/card/mining_point_card/examine(mob/user)
. = ..()