From 332dd3c30979cf37dbdd486de0ec2fb3f15178c8 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Tue, 6 Aug 2024 18:24:43 -0400
Subject: [PATCH 01/14] added signals
---
.../dcs/signals/signals_atom/signals_atom_attack.dm | 2 ++
.../dcs/signals/signals_obj/signals_item/signals_item.dm | 5 +++++
code/_onclick/ai.dm | 4 +++-
code/game/machinery/_machinery.dm | 3 +++
code/game/objects/items.dm | 3 +++
code/modules/jobs/access.dm | 4 ++--
6 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
index 91094391ed1d1..62c50fb569093 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
@@ -8,6 +8,8 @@
#define COMPONENT_NO_AFTERATTACK (1<<0)
///from base of atom/attack_hulk(): (/mob/living/carbon/human)
#define COMSIG_ATOM_HULK_ATTACK "hulk_attack"
+///from base of atom/attack_ai(): (/mob/user)
+#define COMSIG_ATOM_ATTACK_AI "attack_ai"
///from base of atom/animal_attack(): (/mob/user)
#define COMSIG_ATOM_ATTACK_ANIMAL "attack_animal"
//from base of atom/attack_basic_mob(): (/mob/user)
diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm
index 555630211a3a4..0c8430299fe33 100644
--- a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm
+++ b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm
@@ -54,6 +54,11 @@
#define COMSIG_ITEM_ATTACK_EFFECT "item_effect_attacked"
+///from the base of obj/item/proc/GetAccess(): ()
+#define COMSIG_ITEM_GET_ACCESS "item_get_access"
+///from the base of obj/item/proc/GetID(): ()
+#define COMSIG_ITEM_GET_ID "item_get_id"
+
//////////////////////////////
// /obj/effect/mine signals
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 082665ccea657..d17f5af0bfa40 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -95,7 +95,9 @@
A.attack_ai(src)
/atom/proc/attack_ai(mob/user)
- return
+ if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_AI, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
+ return TRUE
+ return FALSE
/*
Since the AI handles shift, ctrl, and alt-click differently
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 7e6497177ac85..1a0deefdcee41 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -475,6 +475,9 @@ Class Procs:
return _try_interact(user)
/obj/machinery/attack_ai(mob/user)
+ . = ..()
+ if(.)
+ return
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
return FALSE
if(iscyborg(user))// For some reason attack_robot doesn't work
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 5a21f635f38b8..6531e11f603f3 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -538,6 +538,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
attack_paw(A)
/obj/item/attack_ai(mob/user)
+ . = ..()
+ if(.)
+ return
if(istype(src.loc, /obj/item/robot_module))
//If the item is part of a cyborg module, equip it
if(!iscyborg(user))
diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm
index b69ca5b25fe06..7297256668376 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -45,10 +45,10 @@
return TRUE
/obj/item/proc/GetAccess()
- return list()
+ . = SEND_SIGNAL(src, COMSIG_ITEM_GET_ACCESS) || list()
/obj/item/proc/GetID()
- return null
+ . = SEND_SIGNAL(src, COMSIG_ITEM_GET_ID)
/obj/item/proc/RemoveID()
return null
From 7af0ed23b0810b69c5d14fc6412f55c54adee168 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Tue, 6 Aug 2024 19:42:30 -0400
Subject: [PATCH 02/14] attack_robot()
---
.../dcs/signals/signals_atom/signals_atom_attack.dm | 2 ++
code/_onclick/cyborg.dm | 5 +++--
code/game/machinery/_machinery.dm | 3 +++
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
index 62c50fb569093..72ac753677f7c 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
@@ -27,3 +27,5 @@
#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand"
///from base of atom/attack_paw(): (mob/user)
#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw"
+///from base of atom/attack_robot(): (mob/user)
+#define COMSIG_ATOM_ATTACK_ROBOT "atom_attack_robot"
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index f9dfef70633f7..46b752836e392 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -182,5 +182,6 @@
A.attack_robot(src)
/atom/proc/attack_robot(mob/user)
- attack_ai(user)
- return
+ if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ROBOT, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
+ return TRUE
+ return FALSE
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 1a0deefdcee41..a4197e81c4640 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -462,6 +462,9 @@ Class Procs:
user.visible_message("[user] smashes [src] with [user.p_their()] paws[damage ? "." : ", without leaving a mark!"]", null, null, COMBAT_MESSAGE_RANGE)
/obj/machinery/attack_robot(mob/user)
+ . = ..()
+ if(.)
+ return
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
return FALSE
if(Adjacent(user) && can_buckle && has_buckled_mobs()) //so that borgs (but not AIs, sadly (perhaps in a future PR?)) can unbuckle people from machines
From 4701f503a5eb0bf6fb121cc66f9ce21a2d366d07 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Tue, 6 Aug 2024 22:28:48 -0400
Subject: [PATCH 03/14] attack_robot()
---
code/_onclick/cyborg.dm | 1 -
code/game/machinery/_machinery.dm | 11 +++++++----
code/game/machinery/cell_charger.dm | 3 +++
code/game/machinery/cloning.dm | 6 +++---
code/game/machinery/computer/apc_control.dm | 3 +++
code/game/machinery/cryopod.dm | 3 +++
code/game/machinery/dish_drive.dm | 3 +++
code/game/machinery/doors/airlock.dm | 3 +++
code/game/machinery/flasher.dm | 2 ++
code/game/machinery/igniter.dm | 5 +++--
code/game/machinery/navbeacon.dm | 3 +++
.../porta_turret/portable_turret_construct.dm | 3 +++
.../machinery/porta_turret/portable_turret_cover.dm | 3 +++
code/game/machinery/status_display.dm | 2 --
code/game/machinery/syndicatebeacon.dm | 2 ++
code/game/objects/items.dm | 3 +++
code/game/objects/items/devices/powersink.dm | 3 +++
code/game/objects/items/devices/radio/intercom.dm | 3 +++
code/game/objects/structures/barsigns.dm | 3 +++
code/game/objects/structures/fireaxe.dm | 4 ++++
code/game/objects/structures/mineral_doors.dm | 10 ++++------
code/game/turfs/open/floor/light_floor.dm | 3 +++
code/modules/awaymissions/super_secret_room.dm | 3 +++
.../food_and_drinks/kitchen_machinery/deep_fryer.dm | 3 +++
.../food_and_drinks/kitchen_machinery/grill.dm | 3 +++
code/modules/holodeck/items.dm | 4 ++++
.../modular_computers/computers/item/computer.dm | 3 +++
.../modular_computers/computers/item/tablet.dm | 4 ++++
code/modules/power/lighting/light.dm | 6 +++++-
code/modules/power/port_gen.dm | 3 +++
code/modules/station_goals/bluespace_tap.dm | 3 +++
31 files changed, 95 insertions(+), 19 deletions(-)
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index f9dfef70633f7..10a38c68ff8e2 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -182,5 +182,4 @@
A.attack_robot(src)
/atom/proc/attack_robot(mob/user)
- attack_ai(user)
return
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 7e6497177ac85..c2bc4631e20c7 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -462,6 +462,9 @@ Class Procs:
user.visible_message("[user] smashes [src] with [user.p_their()] paws[damage ? "." : ", without leaving a mark!"]", null, null, COMBAT_MESSAGE_RANGE)
/obj/machinery/attack_robot(mob/user)
+ if(isAI(user))
+ CRASH("An AI just tried to run attack_robot().") // They should not be running the same procs anymore.
+ . = ..()
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
return FALSE
if(Adjacent(user) && can_buckle && has_buckled_mobs()) //so that borgs (but not AIs, sadly (perhaps in a future PR?)) can unbuckle people from machines
@@ -475,12 +478,12 @@ Class Procs:
return _try_interact(user)
/obj/machinery/attack_ai(mob/user)
+ if(iscyborg(user))
+ CRASH("A cyborg just tried to run attack_ai().") // They should not be running the same procs anymore.
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
return FALSE
- if(iscyborg(user))// For some reason attack_robot doesn't work
- return attack_robot(user)
- else
- return _try_interact(user)
+
+ return _try_interact(user)
/obj/machinery/_try_interact(mob/user)
if((interaction_flags_machine & INTERACT_MACHINE_WIRES_IF_OPEN) && panel_open && (attempt_wire_interaction(user) == WIRE_INTERACTION_BLOCK))
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index bd0a164f12229..a6c8745580659 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -106,6 +106,9 @@
/obj/machinery/cell_charger/attack_ai(mob/user)
return
+/obj/machinery/cell_charger/attack_robot(mob/user)
+ return
+
/obj/machinery/cell_charger/emp_act(severity)
. = ..()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 5b5afdc06a34e..e3e8c70d95d85 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -108,6 +108,9 @@
/obj/machinery/clonepod/attack_ai(mob/user)
return attack_hand(user)
+/obj/machinery/clonepod/attack_robot(mob/user)
+ return attack_hand(user)
+
/obj/machinery/clonepod/examine(mob/user)
. = ..()
. += "The linking device can be scanned with a multitool. It can be emptied by Alt-Clicking it."
@@ -179,9 +182,6 @@
if(mob_occupant)
. = (100 * ((mob_occupant.health + 100) / (heal_level + 100)))
-/obj/machinery/clonepod/attack_ai(mob/user)
- return examine(user)
-
//Start growing a human clone in the pod!
/obj/machinery/clonepod/proc/growclone(clonename, ui, mutation_index, mindref, last_death, datum/species/mrace, list/features, factions, datum/bank_account/insurance, list/traumas, body_only, experimental)
var/result = CLONING_SUCCESS
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index 8f2b84866db50..3c31180093025 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -36,6 +36,9 @@
return
..(user)
+/obj/machinery/computer/apc_control/attack_robot(mob/user)
+ attack_ai(user)
+
/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
return APC.get_virtual_z_level() == get_virtual_z_level() && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.machine_stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 17214114501de..ec5bbb8baf491 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -46,6 +46,9 @@ GLOBAL_LIST_EMPTY(cryopod_computers)
/obj/machinery/computer/cryopod/attack_ai()
attack_hand()
+/obj/machinery/computer/cryopod/attack_robot()
+ attack_hand()
+
/obj/machinery/computer/cryopod/attack_hand(mob/user = usr)
if(machine_stat & (NOPOWER|BROKEN))
return
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index bd5eb18709cb2..67afeaaf41238 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -110,6 +110,9 @@
to_chat(user, "You send a disposal transmission signal to [src].")
do_the_dishes(TRUE)
+/obj/machinery/dish_drive/attack_robot(mob/user)
+ attack_ai(user)
+
/obj/machinery/dish_drive/AltClick(mob/living/user)
if(user.canUseTopic(src, !issilicon(user)))
do_the_dishes(TRUE)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 89bc71c57e7d8..32c5355d77e90 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -785,6 +785,9 @@
ui_interact(user)
+/obj/machinery/door/airlock/attack_robot(mob/user)
+ attack_robot(user)
+
/obj/machinery/door/airlock/proc/hack(mob/user)
set waitfor = 0
if(!aiHacking)
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 50d8a0fc21d7f..ba79d9d24282d 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -92,6 +92,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26)
if (anchored)
return flash()
+/obj/machinery/flasher/attack_robot()
+
/obj/machinery/flasher/eminence_act(mob/living/simple_animal/eminence/eminence)
. = ..()
to_chat(usr, "You begin manipulating [src]!")
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index dcce9b812b5a1..fe17d6f6e8f41 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -119,8 +119,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/sparker, 26)
/obj/machinery/sparker/attack_ai()
if (anchored)
return ignite()
- else
- return
+
+/obj/machinery/sparker/attack_robot()
+ return attack_ai()
/obj/machinery/sparker/proc/ignite()
if (!(powered()))
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 35e77322e7adc..d179859a81848 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -98,6 +98,9 @@
/obj/machinery/navbeacon/attack_ai(mob/user)
interact(user, 1)
+/obj/machinery/navbeacon/attack_robot(mob/user)
+ return attack_ai(user)
+
/obj/machinery/navbeacon/attack_paw()
return
diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm
index 163c46d1bb6ef..f058d56ac5fe2 100644
--- a/code/game/machinery/porta_turret/portable_turret_construct.dm
+++ b/code/game/machinery/porta_turret/portable_turret_construct.dm
@@ -187,3 +187,6 @@
/obj/machinery/porta_turret_construct/attack_ai()
return
+
+/obj/machinery/porta_turret_construct/attack_robot()
+ return
diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm
index 14feee213eafd..6fb33e5728929 100644
--- a/code/game/machinery/porta_turret/portable_turret_cover.dm
+++ b/code/game/machinery/porta_turret/portable_turret_cover.dm
@@ -30,6 +30,9 @@
return parent_turret.attack_ai(user)
+/obj/machinery/porta_turret_cover/attack_robot(mob/user)
+ return attack_ai(user)
+
/obj/machinery/porta_turret_cover/attack_hand(mob/user)
. = ..()
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 3c0e11ff55ac8..2531835a64906 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -450,8 +450,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/ai, 32)
. = ..()
/obj/machinery/status_display/ai/attack_ai(mob/living/silicon/ai/user)
- if(!isAI(user))
- return
var/list/choices = list()
for(var/emotion_const in emotion_map)
var/icon_state = emotion_map[emotion_const]
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index 61320e077e3b7..d3553e1522d6a 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -45,6 +45,8 @@
/obj/machinery/power/singularity_beacon/attack_ai(mob/user)
return
+/obj/machinery/power/singularity_beacon/attack_robot(mob/user)
+ return
/obj/machinery/power/singularity_beacon/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 5a21f635f38b8..6531e11f603f3 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -538,6 +538,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
attack_paw(A)
/obj/item/attack_ai(mob/user)
+ . = ..()
+ if(.)
+ return
if(istype(src.loc, /obj/item/robot_module))
//If the item is part of a cyborg module, equip it
if(!iscyborg(user))
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index f57c077bbdac2..9437ec6d32bfd 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -103,6 +103,9 @@
/obj/item/powersink/attack_ai()
return
+/obj/item/powersink/attack_robot()
+ return
+
/obj/item/powersink/attack_hand(mob/user)
. = ..()
if(.)
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index e448d54434215..6368b6da18ad3 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -57,6 +57,9 @@
/obj/item/radio/intercom/attack_ai(mob/user)
interact(user)
+/obj/item/radio/intercom/attack_robot(mob/user)
+ interact(user)
+
/obj/item/radio/intercom/attack_paw(mob/user)
return attack_hand(user)
diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm
index d47d71b3fa1d0..ac894e7be446f 100644
--- a/code/game/objects/structures/barsigns.dm
+++ b/code/game/objects/structures/barsigns.dm
@@ -62,6 +62,9 @@
/obj/structure/sign/barsign/attack_ai(mob/user)
return attack_hand(user)
+/obj/structure/sign/barsign/attack_robot(mob/user)
+ return attack_hand(user)
+
/obj/structure/sign/barsign/attack_hand(mob/user)
. = ..()
if(.)
diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm
index b417c19d64091..e843d4bac7ac7 100644
--- a/code/game/objects/structures/fireaxe.dm
+++ b/code/game/objects/structures/fireaxe.dm
@@ -135,6 +135,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
toggle_lock(user)
return
+/obj/structure/fireaxecabinet/attack_robot(mob/user)
+ toggle_lock(user)
+ return
+
/obj/structure/fireaxecabinet/attack_tk(mob/user)
. = COMPONENT_CANCEL_ATTACK_CHAIN
if(locked)
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 4a9790843926e..0f28eb2d11f3f 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -40,12 +40,10 @@
if(!door_opened)
return TryToSwitchState(AM)
-/obj/structure/mineral_door/attack_ai(mob/user) //those aren't machinery, they're just big fucking slabs of a mineral
- if(isAI(user)) //so the AI can't open it
- return
- else if(iscyborg(user)) //but cyborgs can
- if(get_dist(user,src) <= 1) //not remotely though
- return TryToSwitchState(user)
+/obj/structure/mineral_door/attack_robot(mob/user) //those aren't machinery, they're just big fucking slabs of a mineral
+ // so the AI can't open it but cyborgs can
+ if(get_dist(user,src) <= 1) //not remotely though
+ return TryToSwitchState(user)
/obj/structure/mineral_door/attack_paw(mob/user)
return attack_hand(user)
diff --git a/code/game/turfs/open/floor/light_floor.dm b/code/game/turfs/open/floor/light_floor.dm
index fd865cb614321..5a369429a4845 100644
--- a/code/game/turfs/open/floor/light_floor.dm
+++ b/code/game/turfs/open/floor/light_floor.dm
@@ -78,6 +78,9 @@
/turf/open/floor/light/attack_ai(mob/user)
return attack_hand(user)
+/turf/open/floor/light/attack_robot(mob/user)
+ return attack_hand(user)
+
/turf/open/floor/light/attackby(obj/item/C, mob/user, params)
if(..())
return
diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm
index e9f3fb75689b1..f74af0f952a39 100644
--- a/code/modules/awaymissions/super_secret_room.dm
+++ b/code/modules/awaymissions/super_secret_room.dm
@@ -104,6 +104,9 @@
/obj/structure/speaking_tile/attack_ai(mob/user)
return interact(user)
+/obj/structure/speaking_tile/attack_robot(mob/living/user)
+ return interact(user)
+
/obj/structure/speaking_tile/attack_slime(mob/user)
return interact(user)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 0c2e5a6b9d993..50b1bbe701f07 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -219,6 +219,9 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list(
/obj/machinery/deepfryer/attack_ai(mob/user)
return
+/obj/machinery/deepfryer/attack_robot(mob/user)
+ return
+
/obj/machinery/deepfryer/attack_hand(mob/user)
if(frying)
to_chat(user, "You eject [frying] from [src].")
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
index 3963ffa3cfb0e..ee8e6710122ac 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
@@ -117,6 +117,9 @@
/obj/machinery/grill/attack_ai(mob/user)
return
+/obj/machinery/grill/attack_robot(mob/user)
+ return
+
/obj/machinery/grill/attack_hand(mob/user)
if(grilled_item)
to_chat(user, "You take out [grilled_item] from [src].")
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index 3510e090af54d..23f8c028e8669 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -161,6 +161,10 @@
to_chat(user, "The station AI is not to interact with these devices.")
return
+/obj/machinery/readybutton/attack_robot(mob/user as mob)
+ to_chat(user, "The station AI is not to interact with these devices.")
+ return
+
/obj/machinery/readybutton/attack_paw(mob/user as mob)
to_chat(user, "You are too primitive to use this device!")
return
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index f5285829b4d6a..637b7fefd9131 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -238,6 +238,9 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
/obj/item/modular_computer/attack_ai(mob/user)
return attack_self(user)
+/obj/item/modular_computer/attack_robot(mob/living/user)
+ return attack_self(user)
+
/obj/item/modular_computer/attack_ghost(mob/dead/observer/user)
. = ..()
if(.)
diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm
index 59011959d44b6..e04ed26e1833f 100644
--- a/code/modules/modular_computers/computers/item/tablet.dm
+++ b/code/modules/modular_computers/computers/item/tablet.dm
@@ -388,6 +388,10 @@
to_chat(user, "It doesn't feel right to snoop around like that...")
return // we don't want ais or cyborgs using a private role tablet
+/obj/item/modular_computer/tablet/pda/attack_robot(mob/user)
+ attack_ai(user)
+ return
+
/obj/item/modular_computer/tablet/pda/Initialize(mapload)
. = ..()
install_component(new /obj/item/computer_hardware/hard_drive/small/pda)
diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm
index d761ec5a1d4e3..b934fa5ac312a 100644
--- a/code/modules/power/lighting/light.dm
+++ b/code/modules/power/lighting/light.dm
@@ -160,7 +160,7 @@
if(on && turning_on)
return
-
+
var/area/local_area = get_area(src)
if(emergency_mode || (local_area?.fire))
. += mutable_appearance(overlayicon, "[base_state]_emergency")
@@ -484,6 +484,10 @@
update(FALSE)
return
+/obj/machinery/light/attack_robot(mob/user)
+ attack_ai(user)
+ return
+
// attack with hand - remove tube/bulb
// if hands aren't protected and the light is on, burn the player
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 904f497ce06de..5b1d7220a41e3 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -221,6 +221,9 @@
/obj/machinery/power/port_gen/pacman/attack_ai(mob/user)
interact(user)
+/obj/machinery/power/port_gen/pacman/attack_robot(mob/user)
+ interact(user)
+
/obj/machinery/power/port_gen/pacman/attack_paw(mob/user)
interact(user)
diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm
index d40fbd2649085..aee4829f8415a 100644
--- a/code/modules/station_goals/bluespace_tap.dm
+++ b/code/modules/station_goals/bluespace_tap.dm
@@ -365,6 +365,9 @@
/obj/machinery/power/bluespace_tap/attack_ai(mob/user)
ui_interact(user)
+/obj/machinery/power/bluespace_tap/attack_robot(mob/user)
+ ui_interact(user)
+
/**
* Produces the product with the desired key and increases product cost accordingly
*/
From df1053d8553594c15250f5f0af5c432391dfb572 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Tue, 6 Aug 2024 22:35:54 -0400
Subject: [PATCH 04/14] add the . = ..()
---
code/game/machinery/_machinery.dm | 1 +
1 file changed, 1 insertion(+)
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index c2bc4631e20c7..c837274b9e54f 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -480,6 +480,7 @@ Class Procs:
/obj/machinery/attack_ai(mob/user)
if(iscyborg(user))
CRASH("A cyborg just tried to run attack_ai().") // They should not be running the same procs anymore.
+ . = ..()
if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user))
return FALSE
From 0eb1f448ff566367acd8aff15007ad96be525324 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Thu, 8 Aug 2024 21:59:18 -0400
Subject: [PATCH 05/14] run that back
---
.../dcs/signals/signals_obj/signals_item/signals_item.dm | 5 -----
code/modules/jobs/access.dm | 4 ++--
2 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm
index 0c8430299fe33..555630211a3a4 100644
--- a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm
+++ b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm
@@ -54,11 +54,6 @@
#define COMSIG_ITEM_ATTACK_EFFECT "item_effect_attacked"
-///from the base of obj/item/proc/GetAccess(): ()
-#define COMSIG_ITEM_GET_ACCESS "item_get_access"
-///from the base of obj/item/proc/GetID(): ()
-#define COMSIG_ITEM_GET_ID "item_get_id"
-
//////////////////////////////
// /obj/effect/mine signals
diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm
index 7297256668376..b69ca5b25fe06 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -45,10 +45,10 @@
return TRUE
/obj/item/proc/GetAccess()
- . = SEND_SIGNAL(src, COMSIG_ITEM_GET_ACCESS) || list()
+ return list()
/obj/item/proc/GetID()
- . = SEND_SIGNAL(src, COMSIG_ITEM_GET_ID)
+ return null
/obj/item/proc/RemoveID()
return null
From 56c1067dd09fb0ecbe3febe5d0b8f65e71715ab8 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Fri, 9 Aug 2024 11:28:24 -0400
Subject: [PATCH 06/14] so apparently this is very important for cyborgs to be
able to function
---
code/game/objects/items.dm | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 6531e11f603f3..2f2cabeee1a79 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -537,14 +537,12 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
return
attack_paw(A)
-/obj/item/attack_ai(mob/user)
+/obj/item/attack_robot(mob/living/user)
. = ..()
if(.)
return
if(istype(src.loc, /obj/item/robot_module))
//If the item is part of a cyborg module, equip it
- if(!iscyborg(user))
- return
var/mob/living/silicon/robot/R = user
if(!R.low_power_mode) //can't equip modules with an empty cell.
R.activate_module(src)
From f804bec4bfe6bb01f90ca35109f09d3dcf702390 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Fri, 9 Aug 2024 21:14:42 -0400
Subject: [PATCH 07/14] COMSIG_ATOM_INTERACT and cleaning up interact()
---
.../__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm | 3 +++
code/_onclick/other_mobs.dm | 2 ++
code/game/objects/items.dm | 4 +++-
code/game/objects/items/devices/camera_bug.dm | 3 ---
code/game/objects/items/devices/traitordevices.dm | 4 ----
code/modules/assembly/assembly.dm | 3 ---
code/modules/clothing/ears/_ears.dm | 3 ---
code/modules/instruments/items.dm | 3 ---
code/modules/modular_computers/computers/item/computer_ui.dm | 2 +-
9 files changed, 9 insertions(+), 18 deletions(-)
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
index 72ac753677f7c..c4c545b5359ff 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
@@ -29,3 +29,6 @@
#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw"
///from base of atom/attack_robot(): (mob/user)
#define COMSIG_ATOM_ATTACK_ROBOT "atom_attack_robot"
+
+///from base of atom/interact(): (mob/user)
+#define COMSIG_ATOM_INTERACT "atom_interact"
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index a6559a9ec4c06..8992b6a065ed0 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -78,6 +78,8 @@
return FALSE
/atom/proc/interact(mob/user)
+ if(SEND_SIGNAL(src, COMSIG_ATOM_INTERACT, user))
+ return TRUE
if(interaction_flags_atom & INTERACT_ATOM_NO_FINGERPRINT_INTERACT)
add_hiddenprint(user)
else
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 2f2cabeee1a79..97c32c32cc63e 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -429,8 +429,10 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
. += research_msg.Join()
/obj/item/interact(mob/user)
+ if(SEND_SIGNAL(src, COMSIG_ATOM_INTERACT, user))
+ . = TRUE
add_fingerprint(user)
- ui_interact(user)
+ return ui_interact(user)
/obj/item/ui_act(action, params)
add_fingerprint(usr)
diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm
index b97e1707c6159..41721d51f501c 100644
--- a/code/game/objects/items/devices/camera_bug.dm
+++ b/code/game/objects/items/devices/camera_bug.dm
@@ -47,9 +47,6 @@
tracking = null
return ..()
-/obj/item/camera_bug/interact(mob/user)
- ui_interact(user)
-
/obj/item/camera_bug/ui_interact(mob/user = usr)
. = ..()
var/datum/browser/popup = new(user, "camerabug","Camera Bug",nref=src)
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index 3f9c1d818ea81..c8ffd0ac59e38 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -111,10 +111,6 @@ effective or pretty fucking useless.
/obj/item/healthanalyzer/rad_laser/attack_self(mob/user)
interact(user)
-/obj/item/healthanalyzer/rad_laser/interact(mob/user)
- ui_interact(user)
-
-
/obj/item/healthanalyzer/rad_laser/ui_state(mob/user)
return GLOB.hands_state
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index a3a3e294f76f1..384c38adc9dd5 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -138,9 +138,6 @@
interact(user)
return TRUE
-/obj/item/assembly/interact(mob/user)
- return ui_interact(user)
-
/obj/item/assembly/ui_host(mob/user)
if(holder)
return holder
diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm
index dec80cf4b3ab0..3acb974a557e8 100644
--- a/code/modules/clothing/ears/_ears.dm
+++ b/code/modules/clothing/ears/_ears.dm
@@ -68,9 +68,6 @@
return TRUE
interact(user)
-/obj/item/clothing/ears/headphones/interact(mob/user)
- ui_interact(user)
-
/obj/item/clothing/ears/headphones/ui_interact(mob/living/user)
if(!isliving(user) || user.stat != CONSCIOUS || (HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) && !ispAI(user)))
return
diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm
index a0bcec6999935..55c63d251b338 100644
--- a/code/modules/instruments/items.dm
+++ b/code/modules/instruments/items.dm
@@ -37,9 +37,6 @@
return TRUE
interact(user)
-/obj/item/instrument/interact(mob/user)
- ui_interact(user)
-
/obj/item/instrument/ui_interact(mob/living/user)
if((!isliving(user) || user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) && !ispAI(user))
return
diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm
index e89b34bfde167..2ce4edb106598 100644
--- a/code/modules/modular_computers/computers/item/computer_ui.dm
+++ b/code/modules/modular_computers/computers/item/computer_ui.dm
@@ -1,6 +1,6 @@
/obj/item/modular_computer/interact(mob/user)
if(enabled)
- ui_interact(user)
+ return ..()
else
turn_on(user)
From a6fe63d6a5d52fea271f925f2345452f17f25bee Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Sat, 10 Aug 2024 10:40:24 -0400
Subject: [PATCH 08/14] we should probably return true all the time
---
code/_onclick/other_mobs.dm | 3 ++-
code/game/objects/items.dm | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index 8992b6a065ed0..cd4192c81babe 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -85,7 +85,8 @@
else
add_fingerprint(user)
if(interaction_flags_atom & INTERACT_ATOM_UI_INTERACT)
- return ui_interact(user)
+ ui_interact(user)
+ return TRUE
return FALSE
/mob/living/carbon/RangedAttack(atom/A, mouseparams)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 97c32c32cc63e..2a25bb8c24a00 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -432,7 +432,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
if(SEND_SIGNAL(src, COMSIG_ATOM_INTERACT, user))
. = TRUE
add_fingerprint(user)
- return ui_interact(user)
+ ui_interact(user)
/obj/item/ui_act(action, params)
add_fingerprint(usr)
From 9ad3ce762518d06688d6c799c6534af80b518e73 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Sat, 10 Aug 2024 15:37:37 -0400
Subject: [PATCH 09/14] fixes lockers and crates not being able to be opened
---
code/game/objects/structures/crates_lockers/closets.dm | 1 +
1 file changed, 1 insertion(+)
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index f6d0983296766..8c8d67e3aec7d 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -10,6 +10,7 @@
armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 60, STAMINA = 0, BLEED = 0)
blocks_emissive = EMISSIVE_BLOCK_GENERIC
pass_flags_self = LETPASSCLICKS | PASSSTRUCTURE
+ interaction_flags_atom = NONE
var/contents_initialised = FALSE
var/enable_door_overlay = TRUE
var/has_opened_overlay = TRUE
From 20cf00818d7bc2fec39ffc3e4fc0ddb92fbdb7f5 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Sun, 22 Sep 2024 23:47:26 -0400
Subject: [PATCH 10/14] cleans this up a bit
---
beestation.dme | 1 +
.../dcs/signals/signals_atom/signals_atom_attack.dm | 2 ++
code/_onclick/ai.dm | 2 ++
code/_onclick/cyborg.dm | 2 ++
code/_onclick/silicon.dm | 9 +++++++++
code/game/machinery/announcement_system.dm | 6 ++----
code/game/machinery/buttons.dm | 5 +----
code/game/machinery/cell_charger.dm | 7 ++-----
code/game/machinery/cloning.dm | 5 +----
code/game/machinery/computer/apc_control.dm | 5 +----
code/game/machinery/cryopod.dm | 7 ++-----
code/game/machinery/dish_drive.dm | 6 ++----
code/game/machinery/doors/airlock.dm | 6 ++----
code/game/machinery/doors/firedoor.dm | 5 +----
code/game/machinery/firealarm.dm | 5 +----
code/game/machinery/flasher.dm | 4 +---
code/game/machinery/igniter.dm | 5 +----
code/game/machinery/navbeacon.dm | 5 +----
code/game/machinery/porta_turret/portable_turret.dm | 8 +-------
.../machinery/porta_turret/portable_turret_construct.dm | 7 ++-----
.../game/machinery/porta_turret/portable_turret_cover.dm | 6 +-----
code/game/machinery/syndicatebeacon.dm | 7 ++-----
code/game/objects/items/devices/powersink.dm | 7 ++-----
code/game/objects/items/devices/radio/intercom.dm | 5 +----
code/game/objects/structures/barsigns.dm | 5 +----
code/game/objects/structures/fireaxe.dm | 6 +-----
code/game/objects/structures/morgue.dm | 8 ++++----
code/game/turfs/open/floor/light_floor.dm | 5 +----
code/modules/atmospherics/machinery/other/miner.dm | 2 +-
code/modules/awaymissions/super_secret_room.dm | 5 +----
.../food_and_drinks/kitchen_machinery/deep_fryer.dm | 7 ++-----
code/modules/food_and_drinks/kitchen_machinery/grill.dm | 7 ++-----
code/modules/holodeck/items.dm | 6 +-----
code/modules/mob/living/simple_animal/bot/bot.dm | 2 +-
.../modules/modular_computers/computers/item/computer.dm | 5 +----
code/modules/modular_computers/computers/item/tablet.dm | 6 +-----
code/modules/pool/pool.dm | 7 +------
code/modules/power/lighting/light.dm | 6 +-----
code/modules/power/port_gen.dm | 5 +----
code/modules/shuttle/ferry.dm | 5 +----
code/modules/station_goals/bluespace_tap.dm | 5 +----
41 files changed, 65 insertions(+), 154 deletions(-)
create mode 100644 code/_onclick/silicon.dm
diff --git a/beestation.dme b/beestation.dme
index d4abc6470f3b1..bf204c89c80a7 100644
--- a/beestation.dme
+++ b/beestation.dme
@@ -358,6 +358,7 @@
#include "code\_onclick\other_mobs.dm"
#include "code\_onclick\overmind.dm"
#include "code\_onclick\pai.dm"
+#include "code\_onclick\silicon.dm"
#include "code\_onclick\telekinesis.dm"
#include "code\_onclick\hud\_defines.dm"
#include "code\_onclick\hud\action_button.dm"
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
index c4c545b5359ff..2008f9d67a21f 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
@@ -29,6 +29,8 @@
#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw"
///from base of atom/attack_robot(): (mob/user)
#define COMSIG_ATOM_ATTACK_ROBOT "atom_attack_robot"
+///from base of atom/attack_silicon(): (mob/user)
+#define COMSIG_ATOM_ATTACK_SILICON "atom_attack_silicon"
///from base of atom/interact(): (mob/user)
#define COMSIG_ATOM_INTERACT "atom_interact"
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 54f160dd04a3e..3cdf1c25fedfa 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -97,6 +97,8 @@
/atom/proc/attack_ai(mob/user)
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_AI, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
return TRUE
+ if(attack_silicon(user))
+ return TRUE
return FALSE
/*
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index 3a706f6cb37cc..82b087f26cb14 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -184,4 +184,6 @@
/atom/proc/attack_robot(mob/user)
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ROBOT, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
return TRUE
+ if(attack_silicon(user))
+ return TRUE
return FALSE
diff --git a/code/_onclick/silicon.dm b/code/_onclick/silicon.dm
new file mode 100644
index 0000000000000..877d887fa7c0f
--- /dev/null
+++ b/code/_onclick/silicon.dm
@@ -0,0 +1,9 @@
+/**
+ * Often times, we want functionality to be available to both AIs and Cyborgs.
+ *
+ * returns TRUE if action has been done
+ */
+/atom/proc/attack_silicon(mob/user)
+ if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_SILICON, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
+ return TRUE
+ return FALSE
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index a777feaf0d418..8e6868d461959 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -155,16 +155,14 @@ GLOBAL_LIST_EMPTY(announcement_systems)
update_icon()
. = TRUE
-/obj/machinery/announcement_system/attack_robot(mob/living/silicon/user)
- . = attack_ai(user)
-
-/obj/machinery/announcement_system/attack_ai(mob/user)
+/obj/machinery/announcement_system/attack_silicon(mob/user)
if(!user.canUseTopic(src, !issilicon(user)))
return
if(machine_stat & BROKEN)
to_chat(user, "[src]'s firmware appears to be malfunctioning!")
return
interact(user)
+ return TRUE
/obj/machinery/announcement_system/proc/act_up() //does funny breakage stuff
if(!obj_break()) // if badmins flag this unbreakable or its already broken
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 54182368f4896..a9e89a0ac1e19 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -116,13 +116,10 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/machinery/button)
if(do_after(eminence, 20, target=get_turf(eminence)))
attack_hand(eminence)
-/obj/machinery/button/attack_ai(mob/user)
+/obj/machinery/button/attack_silicon(mob/user)
if(!panel_open)
return attack_hand(user)
-/obj/machinery/button/attack_robot(mob/user)
- return attack_ai(user)
-
/obj/machinery/button/proc/setup_device()
if(id && istype(device, /obj/item/assembly/control))
var/obj/item/assembly/control/A = device
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index a6c8745580659..d44fabf0aa49b 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -103,11 +103,8 @@
removecell()
return COMPONENT_CANCEL_ATTACK_CHAIN
-/obj/machinery/cell_charger/attack_ai(mob/user)
- return
-
-/obj/machinery/cell_charger/attack_robot(mob/user)
- return
+/obj/machinery/cell_charger/attack_silicon(mob/user)
+ return TRUE
/obj/machinery/cell_charger/emp_act(severity)
. = ..()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 23a8e641e1a5d..fa9c1e3481660 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -105,10 +105,7 @@
reagents.reaction(user.loc)
src.reagents.clear_reagents()
-/obj/machinery/clonepod/attack_ai(mob/user)
- return attack_hand(user)
-
-/obj/machinery/clonepod/attack_robot(mob/user)
+/obj/machinery/clonepod/attack_silicon(mob/user)
return attack_hand(user)
/obj/machinery/clonepod/examine(mob/user)
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index 3c31180093025..1b4cf065f1ccc 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -30,15 +30,12 @@
active_apc.remote_control = null
active_apc = null
-/obj/machinery/computer/apc_control/attack_ai(mob/user)
+/obj/machinery/computer/apc_control/attack_silicon(mob/user)
if(!IsAdminGhost(user))
to_chat(user,"[src] does not support AI control.") //You already have APC access, cheater!
return
..(user)
-/obj/machinery/computer/apc_control/attack_robot(mob/user)
- attack_ai(user)
-
/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
return APC.get_virtual_z_level() == get_virtual_z_level() && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.machine_stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 1fc0d35573662..1521b2520e51d 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -43,11 +43,8 @@ GLOBAL_LIST_EMPTY(cryopod_computers)
GLOB.cryopod_computers -= src
..()
-/obj/machinery/computer/cryopod/attack_ai()
- attack_hand()
-
-/obj/machinery/computer/cryopod/attack_robot()
- attack_hand()
+/obj/machinery/computer/cryopod/attack_silicon()
+ return attack_hand()
/obj/machinery/computer/cryopod/attack_hand(mob/user = usr)
if(machine_stat & (NOPOWER|BROKEN))
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index 1c6c0bb8e7431..b06017a24d4e5 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -102,14 +102,12 @@
else
step_towards(I, src)
-/obj/machinery/dish_drive/attack_ai(mob/living/user)
+/obj/machinery/dish_drive/attack_silicon(mob/living/user)
if(machine_stat)
return
to_chat(user, "You send a disposal transmission signal to [src].")
do_the_dishes(TRUE)
-
-/obj/machinery/dish_drive/attack_robot(mob/user)
- attack_ai(user)
+ return TRUE
/obj/machinery/dish_drive/AltClick(mob/living/user)
if(user.canUseTopic(src, !issilicon(user)))
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index ce2d304250e74..9bc1d1aa1b878 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -769,7 +769,7 @@
. += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it."
. += "Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access."
-/obj/machinery/door/airlock/attack_ai(mob/user)
+/obj/machinery/door/airlock/attack_silicon(mob/user)
if(!canAIControl(user))
if(canAIHack())
hack(user)
@@ -784,9 +784,7 @@
return
ui_interact(user)
-
-/obj/machinery/door/airlock/attack_robot(mob/user)
- attack_robot(user)
+ return TRUE
/obj/machinery/door/airlock/proc/hack(mob/user)
set waitfor = 0
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 278110a0b6331..0a2f1083bbc60 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -229,7 +229,7 @@
return ..()
-/obj/machinery/door/firedoor/attack_ai(mob/user)
+/obj/machinery/door/firedoor/attack_silicon(mob/user)
add_fingerprint(user)
if(welded || operating || machine_stat & NOPOWER)
return TRUE
@@ -239,9 +239,6 @@
close()
return TRUE
-/obj/machinery/door/firedoor/attack_robot(mob/user)
- return attack_ai(user)
-
/obj/machinery/door/firedoor/attack_alien(mob/user)
add_fingerprint(user)
if(welded)
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 820bf6fd17ff8..e1a78a1e48294 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -193,10 +193,7 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/machinery/firealarm)
else
alarm(user)
-/obj/machinery/firealarm/attack_ai(mob/user)
- return attack_hand(user)
-
-/obj/machinery/firealarm/attack_robot(mob/user)
+/obj/machinery/firealarm/attack_silicon(mob/user)
return attack_hand(user)
/obj/machinery/firealarm/attackby(obj/item/W, mob/user, params)
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 2dae2ecb2fda9..d27471b9f74ae 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -90,12 +90,10 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/machinery/flasher)
return ..()
//Let the AI trigger them directly.
-/obj/machinery/flasher/attack_ai()
+/obj/machinery/flasher/attack_silicon()
if (anchored)
return flash()
-/obj/machinery/flasher/attack_robot()
-
/obj/machinery/flasher/eminence_act(mob/living/simple_animal/eminence/eminence)
. = ..()
to_chat(usr, "You begin manipulating [src]!")
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index fe17d6f6e8f41..6d3db9ff5ceb2 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -116,13 +116,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/sparker, 26)
update_appearance()
return TRUE
-/obj/machinery/sparker/attack_ai()
+/obj/machinery/sparker/attack_silicon()
if (anchored)
return ignite()
-/obj/machinery/sparker/attack_robot()
- return attack_ai()
-
/obj/machinery/sparker/proc/ignite()
if (!(powered()))
return
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index d179859a81848..3ab494d79723a 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -95,12 +95,9 @@
else
return ..()
-/obj/machinery/navbeacon/attack_ai(mob/user)
+/obj/machinery/navbeacon/attack_silicon(mob/user)
interact(user, 1)
-/obj/machinery/navbeacon/attack_robot(mob/user)
- return attack_ai(user)
-
/obj/machinery/navbeacon/attack_paw()
return
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index 26a7be1621543..e3a51d3871f47 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -941,13 +941,7 @@ DEFINE_BUFFER_HANDLER(/obj/machinery/turretid)
to_chat(user, "You short out the turret controls' access analysis module.")
locked = FALSE
-/obj/machinery/turretid/attack_robot(mob/user)
- if(!ailock)
- return attack_hand(user)
- else
- to_chat(user, "There seems to be a firewall preventing you from accessing this device.")
-
-/obj/machinery/turretid/attack_ai(mob/user)
+/obj/machinery/turretid/attack_silicon(mob/user)
if(!ailock || IsAdminGhost(user))
return attack_hand(user)
else
diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm
index d61ef53a9c04d..95943a20d6e9b 100644
--- a/code/game/machinery/porta_turret/portable_turret_construct.dm
+++ b/code/game/machinery/porta_turret/portable_turret_construct.dm
@@ -185,11 +185,8 @@
new /obj/item/assembly/prox_sensor(loc)
build_step = PTURRET_GUN_EQUIPPED
-/obj/machinery/porta_turret_construct/attack_ai()
- return
-
-/obj/machinery/porta_turret_construct/attack_robot()
- return
+/obj/machinery/porta_turret_construct/attack_silicon()
+ return TRUE
#undef PTURRET_UNSECURED
#undef PTURRET_BOLTED
diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm
index a337b0ea3ae42..8761404d545e4 100644
--- a/code/game/machinery/porta_turret/portable_turret_cover.dm
+++ b/code/game/machinery/porta_turret/portable_turret_cover.dm
@@ -23,17 +23,13 @@
//>necessary
//I'm not fixing it because i'm fucking bored of this code already, but someone should just reroute these to the parent turret's procs.
-/obj/machinery/porta_turret_cover/attack_ai(mob/user)
+/obj/machinery/porta_turret_cover/attack_silicon(mob/user)
. = ..()
if(.)
return
return parent_turret.attack_ai(user)
-/obj/machinery/porta_turret_cover/attack_robot(mob/user)
- return attack_ai(user)
-
-
/obj/machinery/porta_turret_cover/attack_hand(mob/user)
. = ..()
if(.)
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index d3553e1522d6a..1da7a00cab370 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -42,11 +42,8 @@
to_chat(user, "You deactivate the beacon.")
-/obj/machinery/power/singularity_beacon/attack_ai(mob/user)
- return
-
-/obj/machinery/power/singularity_beacon/attack_robot(mob/user)
- return
+/obj/machinery/power/singularity_beacon/attack_silicon(mob/user)
+ return TRUE
/obj/machinery/power/singularity_beacon/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 9437ec6d32bfd..bbd01ccbea583 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -100,11 +100,8 @@
/obj/item/powersink/attack_paw()
return
-/obj/item/powersink/attack_ai()
- return
-
-/obj/item/powersink/attack_robot()
- return
+/obj/item/powersink/attack_silicon()
+ return TRUE
/obj/item/powersink/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 910d817ab737c..e2c4e0d877fb3 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -56,10 +56,7 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/item/radio/intercom)
return
return ..()
-/obj/item/radio/intercom/attack_ai(mob/user)
- interact(user)
-
-/obj/item/radio/intercom/attack_robot(mob/user)
+/obj/item/radio/intercom/attack_silicon(mob/user)
interact(user)
/obj/item/radio/intercom/attack_paw(mob/user)
diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm
index ac894e7be446f..2ca66cc88647d 100644
--- a/code/game/objects/structures/barsigns.dm
+++ b/code/game/objects/structures/barsigns.dm
@@ -59,10 +59,7 @@
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
-/obj/structure/sign/barsign/attack_ai(mob/user)
- return attack_hand(user)
-
-/obj/structure/sign/barsign/attack_robot(mob/user)
+/obj/structure/sign/barsign/attack_silicon(mob/user)
return attack_hand(user)
/obj/structure/sign/barsign/attack_hand(mob/user)
diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm
index e843d4bac7ac7..e4720096c9765 100644
--- a/code/game/objects/structures/fireaxe.dm
+++ b/code/game/objects/structures/fireaxe.dm
@@ -131,11 +131,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
/obj/structure/fireaxecabinet/attack_paw(mob/living/user)
return attack_hand(user)
-/obj/structure/fireaxecabinet/attack_ai(mob/user)
- toggle_lock(user)
- return
-
-/obj/structure/fireaxecabinet/attack_robot(mob/user)
+/obj/structure/fireaxecabinet/attack_silicon(mob/user)
toggle_lock(user)
return
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 282b2bf827d74..d77abbbcbc3a0 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -215,7 +215,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
/obj/structure/bodycontainer/crematorium/attack_robot(mob/user) //Borgs can't use crematoriums without help
to_chat(user, "[src] is locked against you.")
- return
+ return TRUE
/obj/structure/bodycontainer/crematorium/Destroy()
GLOB.crematoriums.Remove(src)
@@ -395,9 +395,9 @@ GLOBAL_LIST_EMPTY(crematoriums)
desc = "Apply body before burning."
icon_state = "cremat"
-/obj/structure/tray/c_tray/attack_robot(mob/user) //copied behaviour from /obj/structure/bodycontainer/crematorium
- to_chat(user, "[src] is locked against you.")
- return
+/obj/structure/tray/c_tray/attack_silicon(mob/user) //copied behaviour from /obj/structure/bodycontainer/crematorium
+ to_chat(user, "\The [src] is locked against you.")
+ return TRUE
/*
* Morgue tray
diff --git a/code/game/turfs/open/floor/light_floor.dm b/code/game/turfs/open/floor/light_floor.dm
index 5a369429a4845..5c24204e41963 100644
--- a/code/game/turfs/open/floor/light_floor.dm
+++ b/code/game/turfs/open/floor/light_floor.dm
@@ -75,10 +75,7 @@
on = FALSE
update_icon()
-/turf/open/floor/light/attack_ai(mob/user)
- return attack_hand(user)
-
-/turf/open/floor/light/attack_robot(mob/user)
+/turf/open/floor/light/attack_silicon(mob/user)
return attack_hand(user)
/turf/open/floor/light/attackby(obj/item/C, mob/user, params)
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index c025855411842..6f7b4260e1439 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -138,7 +138,7 @@
merger.set_temperature(spawn_temp)
O.assume_air(merger)
-/obj/machinery/atmospherics/miner/attack_ai(mob/living/silicon/user)
+/obj/machinery/atmospherics/miner/attack_silicon(mob/living/silicon/user)
if(broken)
to_chat(user, "[src] seems to be broken. Its debug interface outputs: [broken_message]")
..()
diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm
index f74af0f952a39..5b7445ce56b86 100644
--- a/code/modules/awaymissions/super_secret_room.dm
+++ b/code/modules/awaymissions/super_secret_room.dm
@@ -101,10 +101,7 @@
/obj/structure/speaking_tile/attack_larva(mob/user)
return interact(user)
-/obj/structure/speaking_tile/attack_ai(mob/user)
- return interact(user)
-
-/obj/structure/speaking_tile/attack_robot(mob/living/user)
+/obj/structure/speaking_tile/attack_silicon(mob/user)
return interact(user)
/obj/structure/speaking_tile/attack_slime(mob/user)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 5f52b8376387b..38b685bcfde0d 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -199,11 +199,8 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list(
explosion(src, devastation_range = 1, heavy_impact_range = 3, light_impact_range = 5, flame_range = 7)
deconstruct(FALSE)
-/obj/machinery/deepfryer/attack_ai(mob/user)
- return
-
-/obj/machinery/deepfryer/attack_robot(mob/user)
- return
+/obj/machinery/deepfryer/attack_silicon(mob/user)
+ return TRUE
/obj/machinery/deepfryer/attack_hand(mob/user)
if(frying)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
index ee8e6710122ac..7eea5ee3a60d6 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
@@ -114,11 +114,8 @@
new /obj/item/stack/rods(loc, 5)
..()
-/obj/machinery/grill/attack_ai(mob/user)
- return
-
-/obj/machinery/grill/attack_robot(mob/user)
- return
+/obj/machinery/grill/attack_silicon(mob/user)
+ return TRUE
/obj/machinery/grill/attack_hand(mob/user)
if(grilled_item)
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index 23f8c028e8669..89078d5f03e17 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -157,11 +157,7 @@
active_power_usage = 6
power_channel = AREA_USAGE_ENVIRON
-/obj/machinery/readybutton/attack_ai(mob/user as mob)
- to_chat(user, "The station AI is not to interact with these devices.")
- return
-
-/obj/machinery/readybutton/attack_robot(mob/user as mob)
+/obj/machinery/readybutton/attack_silicon(mob/user as mob)
to_chat(user, "The station AI is not to interact with these devices.")
return
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index f4b33a44b3aed..97f7d82503cad 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -310,7 +310,7 @@
else
return ..()
-/mob/living/simple_animal/bot/attack_ai(mob/user)
+/mob/living/simple_animal/bot/attack_silicon(mob/user)
if(!topic_denied(user))
interact(user)
else
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index 36dac40bfafb5..3ceb2011d325c 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -235,10 +235,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
return attack_self(M)
return ..()
-/obj/item/modular_computer/attack_ai(mob/user)
- return attack_self(user)
-
-/obj/item/modular_computer/attack_robot(mob/living/user)
+/obj/item/modular_computer/attack_silicon(mob/user)
return attack_self(user)
/obj/item/modular_computer/attack_ghost(mob/dead/observer/user)
diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm
index 8194762a57b25..d725676716c81 100644
--- a/code/modules/modular_computers/computers/item/tablet.dm
+++ b/code/modules/modular_computers/computers/item/tablet.dm
@@ -384,14 +384,10 @@
add_overlay(mutable_appearance(init_icon, "light_overlay"))
-/obj/item/modular_computer/tablet/pda/attack_ai(mob/user)
+/obj/item/modular_computer/tablet/pda/attack_silicon(mob/user)
to_chat(user, "It doesn't feel right to snoop around like that...")
return // we don't want ais or cyborgs using a private role tablet
-/obj/item/modular_computer/tablet/pda/attack_robot(mob/user)
- attack_ai(user)
- return
-
/obj/item/modular_computer/tablet/pda/Initialize(mapload)
. = ..()
install_component(new /obj/item/computer_hardware/hard_drive/small/pda)
diff --git a/code/modules/pool/pool.dm b/code/modules/pool/pool.dm
index 9639fa63eb569..4725215997a30 100644
--- a/code/modules/pool/pool.dm
+++ b/code/modules/pool/pool.dm
@@ -216,7 +216,6 @@ Place a pool filter somewhere in the pool if you want people to be able to modif
P.splash(user)
/obj/structure/pool_ladder/attack_robot(mob/user)
- . = ..()
attack_hand(user)
GLOBAL_LIST_EMPTY(pool_filters)
@@ -257,11 +256,7 @@ GLOBAL_LIST_EMPTY(pool_filters)
//Brick can set the pool to low temperatures remotely. This will probably be hell on malf!
-/obj/machinery/pool_filter/attack_robot(mob/user)
- . = ..()
- wrench_act(user, null)
-
-/obj/machinery/pool_filter/attack_ai(mob/user)
+/obj/machinery/pool_filter/attack_silicon(mob/user)
. = ..()
wrench_act(user, null)
diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm
index b934fa5ac312a..7a79332566807 100644
--- a/code/modules/power/lighting/light.dm
+++ b/code/modules/power/lighting/light.dm
@@ -478,16 +478,12 @@
// ai attack - make lights flicker, because why not
-/obj/machinery/light/attack_ai(mob/user)
+/obj/machinery/light/attack_silicon(mob/user)
no_emergency = !no_emergency
to_chat(user, "Emergency lights for this fixture have been [no_emergency ? "disabled" : "enabled"].")
update(FALSE)
return
-/obj/machinery/light/attack_robot(mob/user)
- attack_ai(user)
- return
-
// attack with hand - remove tube/bulb
// if hands aren't protected and the light is on, burn the player
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 5b1d7220a41e3..c4c09b2c2bd40 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -218,10 +218,7 @@
..()
emp_act(EMP_HEAVY)
-/obj/machinery/power/port_gen/pacman/attack_ai(mob/user)
- interact(user)
-
-/obj/machinery/power/port_gen/pacman/attack_robot(mob/user)
+/obj/machinery/power/port_gen/pacman/attack_silicon(mob/user)
interact(user)
/obj/machinery/power/port_gen/pacman/attack_paw(mob/user)
diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm
index d6908c05768b7..14d9bfa3f8365 100644
--- a/code/modules/shuttle/ferry.dm
+++ b/code/modules/shuttle/ferry.dm
@@ -17,10 +17,7 @@
return FALSE
return TRUE
-/obj/machinery/computer/shuttle_flight/ferry/attack_ai()
- return allow_silicons ? ..() : FALSE
-
-/obj/machinery/computer/shuttle_flight/ferry/attack_robot()
+/obj/machinery/computer/shuttle_flight/ferry/attack_silicon()
return allow_silicons ? ..() : FALSE
/obj/machinery/computer/shuttle_flight/ferry/request
diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm
index 89d9029a736e4..f06886f63dce4 100644
--- a/code/modules/station_goals/bluespace_tap.dm
+++ b/code/modules/station_goals/bluespace_tap.dm
@@ -362,10 +362,7 @@
/obj/machinery/power/bluespace_tap/attack_ghost(mob/user)
ui_interact(user)
-/obj/machinery/power/bluespace_tap/attack_ai(mob/user)
- ui_interact(user)
-
-/obj/machinery/power/bluespace_tap/attack_robot(mob/user)
+/obj/machinery/power/bluespace_tap/attack_silicon(mob/user)
ui_interact(user)
/**
From 0125d3f7d345e0eb50374e0a6cfdfc9f2b6af74b Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Sun, 22 Sep 2024 23:50:05 -0400
Subject: [PATCH 11/14] cleans things up
---
beestation.dme | 1 +
.../dcs/signals/signals_atom/signals_atom_attack.dm | 4 ++++
code/_onclick/ai.dm | 6 +++++-
code/_onclick/cyborg.dm | 6 +++++-
code/game/machinery/announcement_system.dm | 6 ++----
code/game/machinery/buttons.dm | 5 +----
code/game/machinery/cell_charger.dm | 7 ++-----
code/game/machinery/cloning.dm | 5 +----
code/game/machinery/computer/apc_control.dm | 5 +----
code/game/machinery/cryopod.dm | 7 ++-----
code/game/machinery/dish_drive.dm | 6 ++----
code/game/machinery/doors/airlock.dm | 6 ++----
code/game/machinery/doors/firedoor.dm | 5 +----
code/game/machinery/firealarm.dm | 5 +----
code/game/machinery/flasher.dm | 4 +---
code/game/machinery/igniter.dm | 5 +----
code/game/machinery/navbeacon.dm | 5 +----
code/game/machinery/porta_turret/portable_turret.dm | 8 +-------
.../machinery/porta_turret/portable_turret_construct.dm | 7 ++-----
code/game/machinery/porta_turret/portable_turret_cover.dm | 6 +-----
code/game/machinery/syndicatebeacon.dm | 7 ++-----
code/game/objects/items/devices/powersink.dm | 7 ++-----
code/game/objects/items/devices/radio/intercom.dm | 5 +----
code/game/objects/structures/barsigns.dm | 5 +----
code/game/objects/structures/fireaxe.dm | 6 +-----
code/game/objects/structures/morgue.dm | 8 ++++----
code/game/turfs/open/floor/light_floor.dm | 5 +----
code/modules/atmospherics/machinery/other/miner.dm | 2 +-
code/modules/awaymissions/super_secret_room.dm | 5 +----
.../food_and_drinks/kitchen_machinery/deep_fryer.dm | 7 ++-----
code/modules/food_and_drinks/kitchen_machinery/grill.dm | 7 ++-----
code/modules/holodeck/items.dm | 6 +-----
code/modules/mob/living/simple_animal/bot/bot.dm | 2 +-
code/modules/modular_computers/computers/item/computer.dm | 5 +----
code/modules/modular_computers/computers/item/tablet.dm | 6 +-----
code/modules/pool/pool.dm | 7 +------
code/modules/power/lighting/light.dm | 6 +-----
code/modules/power/port_gen.dm | 5 +----
code/modules/shuttle/ferry.dm | 5 +----
code/modules/station_goals/bluespace_tap.dm | 5 +----
40 files changed, 64 insertions(+), 156 deletions(-)
diff --git a/beestation.dme b/beestation.dme
index d4abc6470f3b1..bf204c89c80a7 100644
--- a/beestation.dme
+++ b/beestation.dme
@@ -358,6 +358,7 @@
#include "code\_onclick\other_mobs.dm"
#include "code\_onclick\overmind.dm"
#include "code\_onclick\pai.dm"
+#include "code\_onclick\silicon.dm"
#include "code\_onclick\telekinesis.dm"
#include "code\_onclick\hud\_defines.dm"
#include "code\_onclick\hud\action_button.dm"
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
index 91094391ed1d1..e4784e7dffd0c 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
@@ -25,3 +25,7 @@
#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand"
///from base of atom/attack_paw(): (mob/user)
#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw"
+///from base of atom/attack_robot(): (mob/user)
+#define COMSIG_ATOM_ATTACK_ROBOT "atom_attack_robot"
+///from base of atom/attack_silicon(): (mob/user)
+#define COMSIG_ATOM_ATTACK_SILICON "atom_attack_silicon"
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 708b157e6a8c8..3cdf1c25fedfa 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -95,7 +95,11 @@
A.attack_ai(src)
/atom/proc/attack_ai(mob/user)
- return
+ if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_AI, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
+ return TRUE
+ if(attack_silicon(user))
+ return TRUE
+ return FALSE
/*
Since the AI handles shift, ctrl, and alt-click differently
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index fc2e4e6a1d40b..82b087f26cb14 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -182,4 +182,8 @@
A.attack_robot(src)
/atom/proc/attack_robot(mob/user)
- return
+ if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ROBOT, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
+ return TRUE
+ if(attack_silicon(user))
+ return TRUE
+ return FALSE
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index a777feaf0d418..8e6868d461959 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -155,16 +155,14 @@ GLOBAL_LIST_EMPTY(announcement_systems)
update_icon()
. = TRUE
-/obj/machinery/announcement_system/attack_robot(mob/living/silicon/user)
- . = attack_ai(user)
-
-/obj/machinery/announcement_system/attack_ai(mob/user)
+/obj/machinery/announcement_system/attack_silicon(mob/user)
if(!user.canUseTopic(src, !issilicon(user)))
return
if(machine_stat & BROKEN)
to_chat(user, "[src]'s firmware appears to be malfunctioning!")
return
interact(user)
+ return TRUE
/obj/machinery/announcement_system/proc/act_up() //does funny breakage stuff
if(!obj_break()) // if badmins flag this unbreakable or its already broken
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 54182368f4896..a9e89a0ac1e19 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -116,13 +116,10 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/machinery/button)
if(do_after(eminence, 20, target=get_turf(eminence)))
attack_hand(eminence)
-/obj/machinery/button/attack_ai(mob/user)
+/obj/machinery/button/attack_silicon(mob/user)
if(!panel_open)
return attack_hand(user)
-/obj/machinery/button/attack_robot(mob/user)
- return attack_ai(user)
-
/obj/machinery/button/proc/setup_device()
if(id && istype(device, /obj/item/assembly/control))
var/obj/item/assembly/control/A = device
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index a6c8745580659..d44fabf0aa49b 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -103,11 +103,8 @@
removecell()
return COMPONENT_CANCEL_ATTACK_CHAIN
-/obj/machinery/cell_charger/attack_ai(mob/user)
- return
-
-/obj/machinery/cell_charger/attack_robot(mob/user)
- return
+/obj/machinery/cell_charger/attack_silicon(mob/user)
+ return TRUE
/obj/machinery/cell_charger/emp_act(severity)
. = ..()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 23a8e641e1a5d..fa9c1e3481660 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -105,10 +105,7 @@
reagents.reaction(user.loc)
src.reagents.clear_reagents()
-/obj/machinery/clonepod/attack_ai(mob/user)
- return attack_hand(user)
-
-/obj/machinery/clonepod/attack_robot(mob/user)
+/obj/machinery/clonepod/attack_silicon(mob/user)
return attack_hand(user)
/obj/machinery/clonepod/examine(mob/user)
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index 3c31180093025..1b4cf065f1ccc 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -30,15 +30,12 @@
active_apc.remote_control = null
active_apc = null
-/obj/machinery/computer/apc_control/attack_ai(mob/user)
+/obj/machinery/computer/apc_control/attack_silicon(mob/user)
if(!IsAdminGhost(user))
to_chat(user,"[src] does not support AI control.") //You already have APC access, cheater!
return
..(user)
-/obj/machinery/computer/apc_control/attack_robot(mob/user)
- attack_ai(user)
-
/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
return APC.get_virtual_z_level() == get_virtual_z_level() && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.machine_stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 1fc0d35573662..1521b2520e51d 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -43,11 +43,8 @@ GLOBAL_LIST_EMPTY(cryopod_computers)
GLOB.cryopod_computers -= src
..()
-/obj/machinery/computer/cryopod/attack_ai()
- attack_hand()
-
-/obj/machinery/computer/cryopod/attack_robot()
- attack_hand()
+/obj/machinery/computer/cryopod/attack_silicon()
+ return attack_hand()
/obj/machinery/computer/cryopod/attack_hand(mob/user = usr)
if(machine_stat & (NOPOWER|BROKEN))
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index 1c6c0bb8e7431..b06017a24d4e5 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -102,14 +102,12 @@
else
step_towards(I, src)
-/obj/machinery/dish_drive/attack_ai(mob/living/user)
+/obj/machinery/dish_drive/attack_silicon(mob/living/user)
if(machine_stat)
return
to_chat(user, "You send a disposal transmission signal to [src].")
do_the_dishes(TRUE)
-
-/obj/machinery/dish_drive/attack_robot(mob/user)
- attack_ai(user)
+ return TRUE
/obj/machinery/dish_drive/AltClick(mob/living/user)
if(user.canUseTopic(src, !issilicon(user)))
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index ce2d304250e74..9bc1d1aa1b878 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -769,7 +769,7 @@
. += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it."
. += "Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access."
-/obj/machinery/door/airlock/attack_ai(mob/user)
+/obj/machinery/door/airlock/attack_silicon(mob/user)
if(!canAIControl(user))
if(canAIHack())
hack(user)
@@ -784,9 +784,7 @@
return
ui_interact(user)
-
-/obj/machinery/door/airlock/attack_robot(mob/user)
- attack_robot(user)
+ return TRUE
/obj/machinery/door/airlock/proc/hack(mob/user)
set waitfor = 0
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 278110a0b6331..0a2f1083bbc60 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -229,7 +229,7 @@
return ..()
-/obj/machinery/door/firedoor/attack_ai(mob/user)
+/obj/machinery/door/firedoor/attack_silicon(mob/user)
add_fingerprint(user)
if(welded || operating || machine_stat & NOPOWER)
return TRUE
@@ -239,9 +239,6 @@
close()
return TRUE
-/obj/machinery/door/firedoor/attack_robot(mob/user)
- return attack_ai(user)
-
/obj/machinery/door/firedoor/attack_alien(mob/user)
add_fingerprint(user)
if(welded)
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 820bf6fd17ff8..e1a78a1e48294 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -193,10 +193,7 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/machinery/firealarm)
else
alarm(user)
-/obj/machinery/firealarm/attack_ai(mob/user)
- return attack_hand(user)
-
-/obj/machinery/firealarm/attack_robot(mob/user)
+/obj/machinery/firealarm/attack_silicon(mob/user)
return attack_hand(user)
/obj/machinery/firealarm/attackby(obj/item/W, mob/user, params)
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 2dae2ecb2fda9..d27471b9f74ae 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -90,12 +90,10 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/machinery/flasher)
return ..()
//Let the AI trigger them directly.
-/obj/machinery/flasher/attack_ai()
+/obj/machinery/flasher/attack_silicon()
if (anchored)
return flash()
-/obj/machinery/flasher/attack_robot()
-
/obj/machinery/flasher/eminence_act(mob/living/simple_animal/eminence/eminence)
. = ..()
to_chat(usr, "You begin manipulating [src]!")
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index fe17d6f6e8f41..6d3db9ff5ceb2 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -116,13 +116,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/sparker, 26)
update_appearance()
return TRUE
-/obj/machinery/sparker/attack_ai()
+/obj/machinery/sparker/attack_silicon()
if (anchored)
return ignite()
-/obj/machinery/sparker/attack_robot()
- return attack_ai()
-
/obj/machinery/sparker/proc/ignite()
if (!(powered()))
return
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index d179859a81848..3ab494d79723a 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -95,12 +95,9 @@
else
return ..()
-/obj/machinery/navbeacon/attack_ai(mob/user)
+/obj/machinery/navbeacon/attack_silicon(mob/user)
interact(user, 1)
-/obj/machinery/navbeacon/attack_robot(mob/user)
- return attack_ai(user)
-
/obj/machinery/navbeacon/attack_paw()
return
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index 26a7be1621543..e3a51d3871f47 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -941,13 +941,7 @@ DEFINE_BUFFER_HANDLER(/obj/machinery/turretid)
to_chat(user, "You short out the turret controls' access analysis module.")
locked = FALSE
-/obj/machinery/turretid/attack_robot(mob/user)
- if(!ailock)
- return attack_hand(user)
- else
- to_chat(user, "There seems to be a firewall preventing you from accessing this device.")
-
-/obj/machinery/turretid/attack_ai(mob/user)
+/obj/machinery/turretid/attack_silicon(mob/user)
if(!ailock || IsAdminGhost(user))
return attack_hand(user)
else
diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm
index d61ef53a9c04d..95943a20d6e9b 100644
--- a/code/game/machinery/porta_turret/portable_turret_construct.dm
+++ b/code/game/machinery/porta_turret/portable_turret_construct.dm
@@ -185,11 +185,8 @@
new /obj/item/assembly/prox_sensor(loc)
build_step = PTURRET_GUN_EQUIPPED
-/obj/machinery/porta_turret_construct/attack_ai()
- return
-
-/obj/machinery/porta_turret_construct/attack_robot()
- return
+/obj/machinery/porta_turret_construct/attack_silicon()
+ return TRUE
#undef PTURRET_UNSECURED
#undef PTURRET_BOLTED
diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm
index a337b0ea3ae42..8761404d545e4 100644
--- a/code/game/machinery/porta_turret/portable_turret_cover.dm
+++ b/code/game/machinery/porta_turret/portable_turret_cover.dm
@@ -23,17 +23,13 @@
//>necessary
//I'm not fixing it because i'm fucking bored of this code already, but someone should just reroute these to the parent turret's procs.
-/obj/machinery/porta_turret_cover/attack_ai(mob/user)
+/obj/machinery/porta_turret_cover/attack_silicon(mob/user)
. = ..()
if(.)
return
return parent_turret.attack_ai(user)
-/obj/machinery/porta_turret_cover/attack_robot(mob/user)
- return attack_ai(user)
-
-
/obj/machinery/porta_turret_cover/attack_hand(mob/user)
. = ..()
if(.)
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index d3553e1522d6a..1da7a00cab370 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -42,11 +42,8 @@
to_chat(user, "You deactivate the beacon.")
-/obj/machinery/power/singularity_beacon/attack_ai(mob/user)
- return
-
-/obj/machinery/power/singularity_beacon/attack_robot(mob/user)
- return
+/obj/machinery/power/singularity_beacon/attack_silicon(mob/user)
+ return TRUE
/obj/machinery/power/singularity_beacon/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 9437ec6d32bfd..bbd01ccbea583 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -100,11 +100,8 @@
/obj/item/powersink/attack_paw()
return
-/obj/item/powersink/attack_ai()
- return
-
-/obj/item/powersink/attack_robot()
- return
+/obj/item/powersink/attack_silicon()
+ return TRUE
/obj/item/powersink/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 910d817ab737c..e2c4e0d877fb3 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -56,10 +56,7 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/item/radio/intercom)
return
return ..()
-/obj/item/radio/intercom/attack_ai(mob/user)
- interact(user)
-
-/obj/item/radio/intercom/attack_robot(mob/user)
+/obj/item/radio/intercom/attack_silicon(mob/user)
interact(user)
/obj/item/radio/intercom/attack_paw(mob/user)
diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm
index ac894e7be446f..2ca66cc88647d 100644
--- a/code/game/objects/structures/barsigns.dm
+++ b/code/game/objects/structures/barsigns.dm
@@ -59,10 +59,7 @@
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
-/obj/structure/sign/barsign/attack_ai(mob/user)
- return attack_hand(user)
-
-/obj/structure/sign/barsign/attack_robot(mob/user)
+/obj/structure/sign/barsign/attack_silicon(mob/user)
return attack_hand(user)
/obj/structure/sign/barsign/attack_hand(mob/user)
diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm
index e843d4bac7ac7..e4720096c9765 100644
--- a/code/game/objects/structures/fireaxe.dm
+++ b/code/game/objects/structures/fireaxe.dm
@@ -131,11 +131,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
/obj/structure/fireaxecabinet/attack_paw(mob/living/user)
return attack_hand(user)
-/obj/structure/fireaxecabinet/attack_ai(mob/user)
- toggle_lock(user)
- return
-
-/obj/structure/fireaxecabinet/attack_robot(mob/user)
+/obj/structure/fireaxecabinet/attack_silicon(mob/user)
toggle_lock(user)
return
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 282b2bf827d74..d77abbbcbc3a0 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -215,7 +215,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
/obj/structure/bodycontainer/crematorium/attack_robot(mob/user) //Borgs can't use crematoriums without help
to_chat(user, "[src] is locked against you.")
- return
+ return TRUE
/obj/structure/bodycontainer/crematorium/Destroy()
GLOB.crematoriums.Remove(src)
@@ -395,9 +395,9 @@ GLOBAL_LIST_EMPTY(crematoriums)
desc = "Apply body before burning."
icon_state = "cremat"
-/obj/structure/tray/c_tray/attack_robot(mob/user) //copied behaviour from /obj/structure/bodycontainer/crematorium
- to_chat(user, "[src] is locked against you.")
- return
+/obj/structure/tray/c_tray/attack_silicon(mob/user) //copied behaviour from /obj/structure/bodycontainer/crematorium
+ to_chat(user, "\The [src] is locked against you.")
+ return TRUE
/*
* Morgue tray
diff --git a/code/game/turfs/open/floor/light_floor.dm b/code/game/turfs/open/floor/light_floor.dm
index 5a369429a4845..5c24204e41963 100644
--- a/code/game/turfs/open/floor/light_floor.dm
+++ b/code/game/turfs/open/floor/light_floor.dm
@@ -75,10 +75,7 @@
on = FALSE
update_icon()
-/turf/open/floor/light/attack_ai(mob/user)
- return attack_hand(user)
-
-/turf/open/floor/light/attack_robot(mob/user)
+/turf/open/floor/light/attack_silicon(mob/user)
return attack_hand(user)
/turf/open/floor/light/attackby(obj/item/C, mob/user, params)
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index c025855411842..6f7b4260e1439 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -138,7 +138,7 @@
merger.set_temperature(spawn_temp)
O.assume_air(merger)
-/obj/machinery/atmospherics/miner/attack_ai(mob/living/silicon/user)
+/obj/machinery/atmospherics/miner/attack_silicon(mob/living/silicon/user)
if(broken)
to_chat(user, "[src] seems to be broken. Its debug interface outputs: [broken_message]")
..()
diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm
index f74af0f952a39..5b7445ce56b86 100644
--- a/code/modules/awaymissions/super_secret_room.dm
+++ b/code/modules/awaymissions/super_secret_room.dm
@@ -101,10 +101,7 @@
/obj/structure/speaking_tile/attack_larva(mob/user)
return interact(user)
-/obj/structure/speaking_tile/attack_ai(mob/user)
- return interact(user)
-
-/obj/structure/speaking_tile/attack_robot(mob/living/user)
+/obj/structure/speaking_tile/attack_silicon(mob/user)
return interact(user)
/obj/structure/speaking_tile/attack_slime(mob/user)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 5f52b8376387b..38b685bcfde0d 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -199,11 +199,8 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list(
explosion(src, devastation_range = 1, heavy_impact_range = 3, light_impact_range = 5, flame_range = 7)
deconstruct(FALSE)
-/obj/machinery/deepfryer/attack_ai(mob/user)
- return
-
-/obj/machinery/deepfryer/attack_robot(mob/user)
- return
+/obj/machinery/deepfryer/attack_silicon(mob/user)
+ return TRUE
/obj/machinery/deepfryer/attack_hand(mob/user)
if(frying)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
index ee8e6710122ac..7eea5ee3a60d6 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
@@ -114,11 +114,8 @@
new /obj/item/stack/rods(loc, 5)
..()
-/obj/machinery/grill/attack_ai(mob/user)
- return
-
-/obj/machinery/grill/attack_robot(mob/user)
- return
+/obj/machinery/grill/attack_silicon(mob/user)
+ return TRUE
/obj/machinery/grill/attack_hand(mob/user)
if(grilled_item)
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index 23f8c028e8669..89078d5f03e17 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -157,11 +157,7 @@
active_power_usage = 6
power_channel = AREA_USAGE_ENVIRON
-/obj/machinery/readybutton/attack_ai(mob/user as mob)
- to_chat(user, "The station AI is not to interact with these devices.")
- return
-
-/obj/machinery/readybutton/attack_robot(mob/user as mob)
+/obj/machinery/readybutton/attack_silicon(mob/user as mob)
to_chat(user, "The station AI is not to interact with these devices.")
return
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index f4b33a44b3aed..97f7d82503cad 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -310,7 +310,7 @@
else
return ..()
-/mob/living/simple_animal/bot/attack_ai(mob/user)
+/mob/living/simple_animal/bot/attack_silicon(mob/user)
if(!topic_denied(user))
interact(user)
else
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index 36dac40bfafb5..3ceb2011d325c 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -235,10 +235,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
return attack_self(M)
return ..()
-/obj/item/modular_computer/attack_ai(mob/user)
- return attack_self(user)
-
-/obj/item/modular_computer/attack_robot(mob/living/user)
+/obj/item/modular_computer/attack_silicon(mob/user)
return attack_self(user)
/obj/item/modular_computer/attack_ghost(mob/dead/observer/user)
diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm
index 8194762a57b25..d725676716c81 100644
--- a/code/modules/modular_computers/computers/item/tablet.dm
+++ b/code/modules/modular_computers/computers/item/tablet.dm
@@ -384,14 +384,10 @@
add_overlay(mutable_appearance(init_icon, "light_overlay"))
-/obj/item/modular_computer/tablet/pda/attack_ai(mob/user)
+/obj/item/modular_computer/tablet/pda/attack_silicon(mob/user)
to_chat(user, "It doesn't feel right to snoop around like that...")
return // we don't want ais or cyborgs using a private role tablet
-/obj/item/modular_computer/tablet/pda/attack_robot(mob/user)
- attack_ai(user)
- return
-
/obj/item/modular_computer/tablet/pda/Initialize(mapload)
. = ..()
install_component(new /obj/item/computer_hardware/hard_drive/small/pda)
diff --git a/code/modules/pool/pool.dm b/code/modules/pool/pool.dm
index 9639fa63eb569..4725215997a30 100644
--- a/code/modules/pool/pool.dm
+++ b/code/modules/pool/pool.dm
@@ -216,7 +216,6 @@ Place a pool filter somewhere in the pool if you want people to be able to modif
P.splash(user)
/obj/structure/pool_ladder/attack_robot(mob/user)
- . = ..()
attack_hand(user)
GLOBAL_LIST_EMPTY(pool_filters)
@@ -257,11 +256,7 @@ GLOBAL_LIST_EMPTY(pool_filters)
//Brick can set the pool to low temperatures remotely. This will probably be hell on malf!
-/obj/machinery/pool_filter/attack_robot(mob/user)
- . = ..()
- wrench_act(user, null)
-
-/obj/machinery/pool_filter/attack_ai(mob/user)
+/obj/machinery/pool_filter/attack_silicon(mob/user)
. = ..()
wrench_act(user, null)
diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm
index b934fa5ac312a..7a79332566807 100644
--- a/code/modules/power/lighting/light.dm
+++ b/code/modules/power/lighting/light.dm
@@ -478,16 +478,12 @@
// ai attack - make lights flicker, because why not
-/obj/machinery/light/attack_ai(mob/user)
+/obj/machinery/light/attack_silicon(mob/user)
no_emergency = !no_emergency
to_chat(user, "Emergency lights for this fixture have been [no_emergency ? "disabled" : "enabled"].")
update(FALSE)
return
-/obj/machinery/light/attack_robot(mob/user)
- attack_ai(user)
- return
-
// attack with hand - remove tube/bulb
// if hands aren't protected and the light is on, burn the player
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 5b1d7220a41e3..c4c09b2c2bd40 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -218,10 +218,7 @@
..()
emp_act(EMP_HEAVY)
-/obj/machinery/power/port_gen/pacman/attack_ai(mob/user)
- interact(user)
-
-/obj/machinery/power/port_gen/pacman/attack_robot(mob/user)
+/obj/machinery/power/port_gen/pacman/attack_silicon(mob/user)
interact(user)
/obj/machinery/power/port_gen/pacman/attack_paw(mob/user)
diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm
index d6908c05768b7..14d9bfa3f8365 100644
--- a/code/modules/shuttle/ferry.dm
+++ b/code/modules/shuttle/ferry.dm
@@ -17,10 +17,7 @@
return FALSE
return TRUE
-/obj/machinery/computer/shuttle_flight/ferry/attack_ai()
- return allow_silicons ? ..() : FALSE
-
-/obj/machinery/computer/shuttle_flight/ferry/attack_robot()
+/obj/machinery/computer/shuttle_flight/ferry/attack_silicon()
return allow_silicons ? ..() : FALSE
/obj/machinery/computer/shuttle_flight/ferry/request
diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm
index 89d9029a736e4..f06886f63dce4 100644
--- a/code/modules/station_goals/bluespace_tap.dm
+++ b/code/modules/station_goals/bluespace_tap.dm
@@ -362,10 +362,7 @@
/obj/machinery/power/bluespace_tap/attack_ghost(mob/user)
ui_interact(user)
-/obj/machinery/power/bluespace_tap/attack_ai(mob/user)
- ui_interact(user)
-
-/obj/machinery/power/bluespace_tap/attack_robot(mob/user)
+/obj/machinery/power/bluespace_tap/attack_silicon(mob/user)
ui_interact(user)
/**
From e95635d7cd10c361be29d40d2184dcf86433b395 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Sun, 22 Sep 2024 23:50:18 -0400
Subject: [PATCH 12/14] forgot this
---
code/_onclick/silicon.dm | 9 +++++++++
1 file changed, 9 insertions(+)
create mode 100644 code/_onclick/silicon.dm
diff --git a/code/_onclick/silicon.dm b/code/_onclick/silicon.dm
new file mode 100644
index 0000000000000..877d887fa7c0f
--- /dev/null
+++ b/code/_onclick/silicon.dm
@@ -0,0 +1,9 @@
+/**
+ * Often times, we want functionality to be available to both AIs and Cyborgs.
+ *
+ * returns TRUE if action has been done
+ */
+/atom/proc/attack_silicon(mob/user)
+ if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_SILICON, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
+ return TRUE
+ return FALSE
From 5338cf0b5a2ac76631663bebe009c4b5606ad294 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Sun, 22 Sep 2024 23:53:00 -0400
Subject: [PATCH 13/14] Revert "cleans this up a bit"
This reverts commit 20cf00818d7bc2fec39ffc3e4fc0ddb92fbdb7f5.
---
beestation.dme | 1 -
.../dcs/signals/signals_atom/signals_atom_attack.dm | 2 --
code/_onclick/ai.dm | 2 --
code/_onclick/cyborg.dm | 2 --
code/_onclick/silicon.dm | 9 ---------
code/game/machinery/announcement_system.dm | 6 ++++--
code/game/machinery/buttons.dm | 5 ++++-
code/game/machinery/cell_charger.dm | 7 +++++--
code/game/machinery/cloning.dm | 5 ++++-
code/game/machinery/computer/apc_control.dm | 5 ++++-
code/game/machinery/cryopod.dm | 7 +++++--
code/game/machinery/dish_drive.dm | 6 ++++--
code/game/machinery/doors/airlock.dm | 6 ++++--
code/game/machinery/doors/firedoor.dm | 5 ++++-
code/game/machinery/firealarm.dm | 5 ++++-
code/game/machinery/flasher.dm | 4 +++-
code/game/machinery/igniter.dm | 5 ++++-
code/game/machinery/navbeacon.dm | 5 ++++-
code/game/machinery/porta_turret/portable_turret.dm | 8 +++++++-
.../machinery/porta_turret/portable_turret_construct.dm | 7 +++++--
.../game/machinery/porta_turret/portable_turret_cover.dm | 6 +++++-
code/game/machinery/syndicatebeacon.dm | 7 +++++--
code/game/objects/items/devices/powersink.dm | 7 +++++--
code/game/objects/items/devices/radio/intercom.dm | 5 ++++-
code/game/objects/structures/barsigns.dm | 5 ++++-
code/game/objects/structures/fireaxe.dm | 6 +++++-
code/game/objects/structures/morgue.dm | 8 ++++----
code/game/turfs/open/floor/light_floor.dm | 5 ++++-
code/modules/atmospherics/machinery/other/miner.dm | 2 +-
code/modules/awaymissions/super_secret_room.dm | 5 ++++-
.../food_and_drinks/kitchen_machinery/deep_fryer.dm | 7 +++++--
code/modules/food_and_drinks/kitchen_machinery/grill.dm | 7 +++++--
code/modules/holodeck/items.dm | 6 +++++-
code/modules/mob/living/simple_animal/bot/bot.dm | 2 +-
.../modules/modular_computers/computers/item/computer.dm | 5 ++++-
code/modules/modular_computers/computers/item/tablet.dm | 6 +++++-
code/modules/pool/pool.dm | 7 ++++++-
code/modules/power/lighting/light.dm | 6 +++++-
code/modules/power/port_gen.dm | 5 ++++-
code/modules/shuttle/ferry.dm | 5 ++++-
code/modules/station_goals/bluespace_tap.dm | 5 ++++-
41 files changed, 154 insertions(+), 65 deletions(-)
delete mode 100644 code/_onclick/silicon.dm
diff --git a/beestation.dme b/beestation.dme
index bf204c89c80a7..d4abc6470f3b1 100644
--- a/beestation.dme
+++ b/beestation.dme
@@ -358,7 +358,6 @@
#include "code\_onclick\other_mobs.dm"
#include "code\_onclick\overmind.dm"
#include "code\_onclick\pai.dm"
-#include "code\_onclick\silicon.dm"
#include "code\_onclick\telekinesis.dm"
#include "code\_onclick\hud\_defines.dm"
#include "code\_onclick\hud\action_button.dm"
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
index 2008f9d67a21f..c4c545b5359ff 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
@@ -29,8 +29,6 @@
#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw"
///from base of atom/attack_robot(): (mob/user)
#define COMSIG_ATOM_ATTACK_ROBOT "atom_attack_robot"
-///from base of atom/attack_silicon(): (mob/user)
-#define COMSIG_ATOM_ATTACK_SILICON "atom_attack_silicon"
///from base of atom/interact(): (mob/user)
#define COMSIG_ATOM_INTERACT "atom_interact"
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 3cdf1c25fedfa..54f160dd04a3e 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -97,8 +97,6 @@
/atom/proc/attack_ai(mob/user)
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_AI, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
return TRUE
- if(attack_silicon(user))
- return TRUE
return FALSE
/*
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index 82b087f26cb14..3a706f6cb37cc 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -184,6 +184,4 @@
/atom/proc/attack_robot(mob/user)
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ROBOT, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
return TRUE
- if(attack_silicon(user))
- return TRUE
return FALSE
diff --git a/code/_onclick/silicon.dm b/code/_onclick/silicon.dm
deleted file mode 100644
index 877d887fa7c0f..0000000000000
--- a/code/_onclick/silicon.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * Often times, we want functionality to be available to both AIs and Cyborgs.
- *
- * returns TRUE if action has been done
- */
-/atom/proc/attack_silicon(mob/user)
- if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_SILICON, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
- return TRUE
- return FALSE
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index 8e6868d461959..a777feaf0d418 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -155,14 +155,16 @@ GLOBAL_LIST_EMPTY(announcement_systems)
update_icon()
. = TRUE
-/obj/machinery/announcement_system/attack_silicon(mob/user)
+/obj/machinery/announcement_system/attack_robot(mob/living/silicon/user)
+ . = attack_ai(user)
+
+/obj/machinery/announcement_system/attack_ai(mob/user)
if(!user.canUseTopic(src, !issilicon(user)))
return
if(machine_stat & BROKEN)
to_chat(user, "[src]'s firmware appears to be malfunctioning!")
return
interact(user)
- return TRUE
/obj/machinery/announcement_system/proc/act_up() //does funny breakage stuff
if(!obj_break()) // if badmins flag this unbreakable or its already broken
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index a9e89a0ac1e19..54182368f4896 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -116,10 +116,13 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/machinery/button)
if(do_after(eminence, 20, target=get_turf(eminence)))
attack_hand(eminence)
-/obj/machinery/button/attack_silicon(mob/user)
+/obj/machinery/button/attack_ai(mob/user)
if(!panel_open)
return attack_hand(user)
+/obj/machinery/button/attack_robot(mob/user)
+ return attack_ai(user)
+
/obj/machinery/button/proc/setup_device()
if(id && istype(device, /obj/item/assembly/control))
var/obj/item/assembly/control/A = device
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index d44fabf0aa49b..a6c8745580659 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -103,8 +103,11 @@
removecell()
return COMPONENT_CANCEL_ATTACK_CHAIN
-/obj/machinery/cell_charger/attack_silicon(mob/user)
- return TRUE
+/obj/machinery/cell_charger/attack_ai(mob/user)
+ return
+
+/obj/machinery/cell_charger/attack_robot(mob/user)
+ return
/obj/machinery/cell_charger/emp_act(severity)
. = ..()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index fa9c1e3481660..23a8e641e1a5d 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -105,7 +105,10 @@
reagents.reaction(user.loc)
src.reagents.clear_reagents()
-/obj/machinery/clonepod/attack_silicon(mob/user)
+/obj/machinery/clonepod/attack_ai(mob/user)
+ return attack_hand(user)
+
+/obj/machinery/clonepod/attack_robot(mob/user)
return attack_hand(user)
/obj/machinery/clonepod/examine(mob/user)
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index 1b4cf065f1ccc..3c31180093025 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -30,12 +30,15 @@
active_apc.remote_control = null
active_apc = null
-/obj/machinery/computer/apc_control/attack_silicon(mob/user)
+/obj/machinery/computer/apc_control/attack_ai(mob/user)
if(!IsAdminGhost(user))
to_chat(user,"[src] does not support AI control.") //You already have APC access, cheater!
return
..(user)
+/obj/machinery/computer/apc_control/attack_robot(mob/user)
+ attack_ai(user)
+
/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
return APC.get_virtual_z_level() == get_virtual_z_level() && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.machine_stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 1521b2520e51d..1fc0d35573662 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -43,8 +43,11 @@ GLOBAL_LIST_EMPTY(cryopod_computers)
GLOB.cryopod_computers -= src
..()
-/obj/machinery/computer/cryopod/attack_silicon()
- return attack_hand()
+/obj/machinery/computer/cryopod/attack_ai()
+ attack_hand()
+
+/obj/machinery/computer/cryopod/attack_robot()
+ attack_hand()
/obj/machinery/computer/cryopod/attack_hand(mob/user = usr)
if(machine_stat & (NOPOWER|BROKEN))
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index b06017a24d4e5..1c6c0bb8e7431 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -102,12 +102,14 @@
else
step_towards(I, src)
-/obj/machinery/dish_drive/attack_silicon(mob/living/user)
+/obj/machinery/dish_drive/attack_ai(mob/living/user)
if(machine_stat)
return
to_chat(user, "You send a disposal transmission signal to [src].")
do_the_dishes(TRUE)
- return TRUE
+
+/obj/machinery/dish_drive/attack_robot(mob/user)
+ attack_ai(user)
/obj/machinery/dish_drive/AltClick(mob/living/user)
if(user.canUseTopic(src, !issilicon(user)))
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 9bc1d1aa1b878..ce2d304250e74 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -769,7 +769,7 @@
. += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it."
. += "Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access."
-/obj/machinery/door/airlock/attack_silicon(mob/user)
+/obj/machinery/door/airlock/attack_ai(mob/user)
if(!canAIControl(user))
if(canAIHack())
hack(user)
@@ -784,7 +784,9 @@
return
ui_interact(user)
- return TRUE
+
+/obj/machinery/door/airlock/attack_robot(mob/user)
+ attack_robot(user)
/obj/machinery/door/airlock/proc/hack(mob/user)
set waitfor = 0
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 0a2f1083bbc60..278110a0b6331 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -229,7 +229,7 @@
return ..()
-/obj/machinery/door/firedoor/attack_silicon(mob/user)
+/obj/machinery/door/firedoor/attack_ai(mob/user)
add_fingerprint(user)
if(welded || operating || machine_stat & NOPOWER)
return TRUE
@@ -239,6 +239,9 @@
close()
return TRUE
+/obj/machinery/door/firedoor/attack_robot(mob/user)
+ return attack_ai(user)
+
/obj/machinery/door/firedoor/attack_alien(mob/user)
add_fingerprint(user)
if(welded)
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index e1a78a1e48294..820bf6fd17ff8 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -193,7 +193,10 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/machinery/firealarm)
else
alarm(user)
-/obj/machinery/firealarm/attack_silicon(mob/user)
+/obj/machinery/firealarm/attack_ai(mob/user)
+ return attack_hand(user)
+
+/obj/machinery/firealarm/attack_robot(mob/user)
return attack_hand(user)
/obj/machinery/firealarm/attackby(obj/item/W, mob/user, params)
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index d27471b9f74ae..2dae2ecb2fda9 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -90,10 +90,12 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/machinery/flasher)
return ..()
//Let the AI trigger them directly.
-/obj/machinery/flasher/attack_silicon()
+/obj/machinery/flasher/attack_ai()
if (anchored)
return flash()
+/obj/machinery/flasher/attack_robot()
+
/obj/machinery/flasher/eminence_act(mob/living/simple_animal/eminence/eminence)
. = ..()
to_chat(usr, "You begin manipulating [src]!")
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 6d3db9ff5ceb2..fe17d6f6e8f41 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -116,10 +116,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/sparker, 26)
update_appearance()
return TRUE
-/obj/machinery/sparker/attack_silicon()
+/obj/machinery/sparker/attack_ai()
if (anchored)
return ignite()
+/obj/machinery/sparker/attack_robot()
+ return attack_ai()
+
/obj/machinery/sparker/proc/ignite()
if (!(powered()))
return
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 3ab494d79723a..d179859a81848 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -95,9 +95,12 @@
else
return ..()
-/obj/machinery/navbeacon/attack_silicon(mob/user)
+/obj/machinery/navbeacon/attack_ai(mob/user)
interact(user, 1)
+/obj/machinery/navbeacon/attack_robot(mob/user)
+ return attack_ai(user)
+
/obj/machinery/navbeacon/attack_paw()
return
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index e3a51d3871f47..26a7be1621543 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -941,7 +941,13 @@ DEFINE_BUFFER_HANDLER(/obj/machinery/turretid)
to_chat(user, "You short out the turret controls' access analysis module.")
locked = FALSE
-/obj/machinery/turretid/attack_silicon(mob/user)
+/obj/machinery/turretid/attack_robot(mob/user)
+ if(!ailock)
+ return attack_hand(user)
+ else
+ to_chat(user, "There seems to be a firewall preventing you from accessing this device.")
+
+/obj/machinery/turretid/attack_ai(mob/user)
if(!ailock || IsAdminGhost(user))
return attack_hand(user)
else
diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm
index 95943a20d6e9b..d61ef53a9c04d 100644
--- a/code/game/machinery/porta_turret/portable_turret_construct.dm
+++ b/code/game/machinery/porta_turret/portable_turret_construct.dm
@@ -185,8 +185,11 @@
new /obj/item/assembly/prox_sensor(loc)
build_step = PTURRET_GUN_EQUIPPED
-/obj/machinery/porta_turret_construct/attack_silicon()
- return TRUE
+/obj/machinery/porta_turret_construct/attack_ai()
+ return
+
+/obj/machinery/porta_turret_construct/attack_robot()
+ return
#undef PTURRET_UNSECURED
#undef PTURRET_BOLTED
diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm
index 8761404d545e4..a337b0ea3ae42 100644
--- a/code/game/machinery/porta_turret/portable_turret_cover.dm
+++ b/code/game/machinery/porta_turret/portable_turret_cover.dm
@@ -23,13 +23,17 @@
//>necessary
//I'm not fixing it because i'm fucking bored of this code already, but someone should just reroute these to the parent turret's procs.
-/obj/machinery/porta_turret_cover/attack_silicon(mob/user)
+/obj/machinery/porta_turret_cover/attack_ai(mob/user)
. = ..()
if(.)
return
return parent_turret.attack_ai(user)
+/obj/machinery/porta_turret_cover/attack_robot(mob/user)
+ return attack_ai(user)
+
+
/obj/machinery/porta_turret_cover/attack_hand(mob/user)
. = ..()
if(.)
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index 1da7a00cab370..d3553e1522d6a 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -42,8 +42,11 @@
to_chat(user, "You deactivate the beacon.")
-/obj/machinery/power/singularity_beacon/attack_silicon(mob/user)
- return TRUE
+/obj/machinery/power/singularity_beacon/attack_ai(mob/user)
+ return
+
+/obj/machinery/power/singularity_beacon/attack_robot(mob/user)
+ return
/obj/machinery/power/singularity_beacon/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index bbd01ccbea583..9437ec6d32bfd 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -100,8 +100,11 @@
/obj/item/powersink/attack_paw()
return
-/obj/item/powersink/attack_silicon()
- return TRUE
+/obj/item/powersink/attack_ai()
+ return
+
+/obj/item/powersink/attack_robot()
+ return
/obj/item/powersink/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index e2c4e0d877fb3..910d817ab737c 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -56,7 +56,10 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/item/radio/intercom)
return
return ..()
-/obj/item/radio/intercom/attack_silicon(mob/user)
+/obj/item/radio/intercom/attack_ai(mob/user)
+ interact(user)
+
+/obj/item/radio/intercom/attack_robot(mob/user)
interact(user)
/obj/item/radio/intercom/attack_paw(mob/user)
diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm
index 2ca66cc88647d..ac894e7be446f 100644
--- a/code/game/objects/structures/barsigns.dm
+++ b/code/game/objects/structures/barsigns.dm
@@ -59,7 +59,10 @@
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
-/obj/structure/sign/barsign/attack_silicon(mob/user)
+/obj/structure/sign/barsign/attack_ai(mob/user)
+ return attack_hand(user)
+
+/obj/structure/sign/barsign/attack_robot(mob/user)
return attack_hand(user)
/obj/structure/sign/barsign/attack_hand(mob/user)
diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm
index e4720096c9765..e843d4bac7ac7 100644
--- a/code/game/objects/structures/fireaxe.dm
+++ b/code/game/objects/structures/fireaxe.dm
@@ -131,7 +131,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32)
/obj/structure/fireaxecabinet/attack_paw(mob/living/user)
return attack_hand(user)
-/obj/structure/fireaxecabinet/attack_silicon(mob/user)
+/obj/structure/fireaxecabinet/attack_ai(mob/user)
+ toggle_lock(user)
+ return
+
+/obj/structure/fireaxecabinet/attack_robot(mob/user)
toggle_lock(user)
return
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index d77abbbcbc3a0..282b2bf827d74 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -215,7 +215,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
/obj/structure/bodycontainer/crematorium/attack_robot(mob/user) //Borgs can't use crematoriums without help
to_chat(user, "[src] is locked against you.")
- return TRUE
+ return
/obj/structure/bodycontainer/crematorium/Destroy()
GLOB.crematoriums.Remove(src)
@@ -395,9 +395,9 @@ GLOBAL_LIST_EMPTY(crematoriums)
desc = "Apply body before burning."
icon_state = "cremat"
-/obj/structure/tray/c_tray/attack_silicon(mob/user) //copied behaviour from /obj/structure/bodycontainer/crematorium
- to_chat(user, "\The [src] is locked against you.")
- return TRUE
+/obj/structure/tray/c_tray/attack_robot(mob/user) //copied behaviour from /obj/structure/bodycontainer/crematorium
+ to_chat(user, "[src] is locked against you.")
+ return
/*
* Morgue tray
diff --git a/code/game/turfs/open/floor/light_floor.dm b/code/game/turfs/open/floor/light_floor.dm
index 5c24204e41963..5a369429a4845 100644
--- a/code/game/turfs/open/floor/light_floor.dm
+++ b/code/game/turfs/open/floor/light_floor.dm
@@ -75,7 +75,10 @@
on = FALSE
update_icon()
-/turf/open/floor/light/attack_silicon(mob/user)
+/turf/open/floor/light/attack_ai(mob/user)
+ return attack_hand(user)
+
+/turf/open/floor/light/attack_robot(mob/user)
return attack_hand(user)
/turf/open/floor/light/attackby(obj/item/C, mob/user, params)
diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm
index 6f7b4260e1439..c025855411842 100644
--- a/code/modules/atmospherics/machinery/other/miner.dm
+++ b/code/modules/atmospherics/machinery/other/miner.dm
@@ -138,7 +138,7 @@
merger.set_temperature(spawn_temp)
O.assume_air(merger)
-/obj/machinery/atmospherics/miner/attack_silicon(mob/living/silicon/user)
+/obj/machinery/atmospherics/miner/attack_ai(mob/living/silicon/user)
if(broken)
to_chat(user, "[src] seems to be broken. Its debug interface outputs: [broken_message]")
..()
diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm
index 5b7445ce56b86..f74af0f952a39 100644
--- a/code/modules/awaymissions/super_secret_room.dm
+++ b/code/modules/awaymissions/super_secret_room.dm
@@ -101,7 +101,10 @@
/obj/structure/speaking_tile/attack_larva(mob/user)
return interact(user)
-/obj/structure/speaking_tile/attack_silicon(mob/user)
+/obj/structure/speaking_tile/attack_ai(mob/user)
+ return interact(user)
+
+/obj/structure/speaking_tile/attack_robot(mob/living/user)
return interact(user)
/obj/structure/speaking_tile/attack_slime(mob/user)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 38b685bcfde0d..5f52b8376387b 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -199,8 +199,11 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list(
explosion(src, devastation_range = 1, heavy_impact_range = 3, light_impact_range = 5, flame_range = 7)
deconstruct(FALSE)
-/obj/machinery/deepfryer/attack_silicon(mob/user)
- return TRUE
+/obj/machinery/deepfryer/attack_ai(mob/user)
+ return
+
+/obj/machinery/deepfryer/attack_robot(mob/user)
+ return
/obj/machinery/deepfryer/attack_hand(mob/user)
if(frying)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
index 7eea5ee3a60d6..ee8e6710122ac 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
@@ -114,8 +114,11 @@
new /obj/item/stack/rods(loc, 5)
..()
-/obj/machinery/grill/attack_silicon(mob/user)
- return TRUE
+/obj/machinery/grill/attack_ai(mob/user)
+ return
+
+/obj/machinery/grill/attack_robot(mob/user)
+ return
/obj/machinery/grill/attack_hand(mob/user)
if(grilled_item)
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index 89078d5f03e17..23f8c028e8669 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -157,7 +157,11 @@
active_power_usage = 6
power_channel = AREA_USAGE_ENVIRON
-/obj/machinery/readybutton/attack_silicon(mob/user as mob)
+/obj/machinery/readybutton/attack_ai(mob/user as mob)
+ to_chat(user, "The station AI is not to interact with these devices.")
+ return
+
+/obj/machinery/readybutton/attack_robot(mob/user as mob)
to_chat(user, "The station AI is not to interact with these devices.")
return
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 97f7d82503cad..f4b33a44b3aed 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -310,7 +310,7 @@
else
return ..()
-/mob/living/simple_animal/bot/attack_silicon(mob/user)
+/mob/living/simple_animal/bot/attack_ai(mob/user)
if(!topic_denied(user))
interact(user)
else
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index 3ceb2011d325c..36dac40bfafb5 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -235,7 +235,10 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
return attack_self(M)
return ..()
-/obj/item/modular_computer/attack_silicon(mob/user)
+/obj/item/modular_computer/attack_ai(mob/user)
+ return attack_self(user)
+
+/obj/item/modular_computer/attack_robot(mob/living/user)
return attack_self(user)
/obj/item/modular_computer/attack_ghost(mob/dead/observer/user)
diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm
index d725676716c81..8194762a57b25 100644
--- a/code/modules/modular_computers/computers/item/tablet.dm
+++ b/code/modules/modular_computers/computers/item/tablet.dm
@@ -384,10 +384,14 @@
add_overlay(mutable_appearance(init_icon, "light_overlay"))
-/obj/item/modular_computer/tablet/pda/attack_silicon(mob/user)
+/obj/item/modular_computer/tablet/pda/attack_ai(mob/user)
to_chat(user, "It doesn't feel right to snoop around like that...")
return // we don't want ais or cyborgs using a private role tablet
+/obj/item/modular_computer/tablet/pda/attack_robot(mob/user)
+ attack_ai(user)
+ return
+
/obj/item/modular_computer/tablet/pda/Initialize(mapload)
. = ..()
install_component(new /obj/item/computer_hardware/hard_drive/small/pda)
diff --git a/code/modules/pool/pool.dm b/code/modules/pool/pool.dm
index 4725215997a30..9639fa63eb569 100644
--- a/code/modules/pool/pool.dm
+++ b/code/modules/pool/pool.dm
@@ -216,6 +216,7 @@ Place a pool filter somewhere in the pool if you want people to be able to modif
P.splash(user)
/obj/structure/pool_ladder/attack_robot(mob/user)
+ . = ..()
attack_hand(user)
GLOBAL_LIST_EMPTY(pool_filters)
@@ -256,7 +257,11 @@ GLOBAL_LIST_EMPTY(pool_filters)
//Brick can set the pool to low temperatures remotely. This will probably be hell on malf!
-/obj/machinery/pool_filter/attack_silicon(mob/user)
+/obj/machinery/pool_filter/attack_robot(mob/user)
+ . = ..()
+ wrench_act(user, null)
+
+/obj/machinery/pool_filter/attack_ai(mob/user)
. = ..()
wrench_act(user, null)
diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm
index 7a79332566807..b934fa5ac312a 100644
--- a/code/modules/power/lighting/light.dm
+++ b/code/modules/power/lighting/light.dm
@@ -478,12 +478,16 @@
// ai attack - make lights flicker, because why not
-/obj/machinery/light/attack_silicon(mob/user)
+/obj/machinery/light/attack_ai(mob/user)
no_emergency = !no_emergency
to_chat(user, "Emergency lights for this fixture have been [no_emergency ? "disabled" : "enabled"].")
update(FALSE)
return
+/obj/machinery/light/attack_robot(mob/user)
+ attack_ai(user)
+ return
+
// attack with hand - remove tube/bulb
// if hands aren't protected and the light is on, burn the player
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index c4c09b2c2bd40..5b1d7220a41e3 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -218,7 +218,10 @@
..()
emp_act(EMP_HEAVY)
-/obj/machinery/power/port_gen/pacman/attack_silicon(mob/user)
+/obj/machinery/power/port_gen/pacman/attack_ai(mob/user)
+ interact(user)
+
+/obj/machinery/power/port_gen/pacman/attack_robot(mob/user)
interact(user)
/obj/machinery/power/port_gen/pacman/attack_paw(mob/user)
diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm
index 14d9bfa3f8365..d6908c05768b7 100644
--- a/code/modules/shuttle/ferry.dm
+++ b/code/modules/shuttle/ferry.dm
@@ -17,7 +17,10 @@
return FALSE
return TRUE
-/obj/machinery/computer/shuttle_flight/ferry/attack_silicon()
+/obj/machinery/computer/shuttle_flight/ferry/attack_ai()
+ return allow_silicons ? ..() : FALSE
+
+/obj/machinery/computer/shuttle_flight/ferry/attack_robot()
return allow_silicons ? ..() : FALSE
/obj/machinery/computer/shuttle_flight/ferry/request
diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm
index f06886f63dce4..89d9029a736e4 100644
--- a/code/modules/station_goals/bluespace_tap.dm
+++ b/code/modules/station_goals/bluespace_tap.dm
@@ -362,7 +362,10 @@
/obj/machinery/power/bluespace_tap/attack_ghost(mob/user)
ui_interact(user)
-/obj/machinery/power/bluespace_tap/attack_silicon(mob/user)
+/obj/machinery/power/bluespace_tap/attack_ai(mob/user)
+ ui_interact(user)
+
+/obj/machinery/power/bluespace_tap/attack_robot(mob/user)
ui_interact(user)
/**
From e99065e887ab9a02c1def28295615f814ca57b06 Mon Sep 17 00:00:00 2001
From: mystery3525 <30960302+mystery3525@users.noreply.github.com>
Date: Wed, 25 Sep 2024 14:31:28 -0400
Subject: [PATCH 14/14] reverts random change
---
.../dcs/signals/signals_atom/signals_atom_attack.dm | 3 +++
code/modules/assembly/assembly.dm | 7 -------
2 files changed, 3 insertions(+), 7 deletions(-)
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
index 4e8c5bcc80bb2..2008f9d67a21f 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm
@@ -31,3 +31,6 @@
#define COMSIG_ATOM_ATTACK_ROBOT "atom_attack_robot"
///from base of atom/attack_silicon(): (mob/user)
#define COMSIG_ATOM_ATTACK_SILICON "atom_attack_silicon"
+
+///from base of atom/interact(): (mob/user)
+#define COMSIG_ATOM_INTERACT "atom_interact"
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index 21c43e5512241..6f9591ef72777 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -146,13 +146,6 @@
. = ..()
. += "\The [src] [secured? "is secured and ready to be used!" : "can be attached to other things."]"
-/obj/item/assembly/attack_self(mob/user)
- if(!user)
- return FALSE
- user.set_machine(src)
- interact(user)
- return TRUE
-
/obj/item/assembly/ui_host(mob/user)
// In order, return:
// - The conencted wiring datum's owner, or