"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index b91a848421d..7139f20d91e 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -156,18 +156,6 @@
..()
updateUsrDialog()
-/obj/machinery/microwave/attack_paw(mob/user)
- return src.attack_hand(user)
-
-/obj/machinery/microwave/attack_ai(mob/user)
- return 0
-
-/obj/machinery/microwave/attack_hand(mob/user)
- if(..())
- return
- user.set_machine(src)
- interact(user)
-
/obj/machinery/microwave/AltClick(mob/user)
if(user.canUseTopic(src, BE_CLOSE) && !(operating || broken > 0 || panel_open || !anchored || dirty == 100))
cook()
@@ -176,7 +164,7 @@
* Microwave Menu
********************/
-/obj/machinery/microwave/interact(mob/user) // The microwave Menu
+/obj/machinery/microwave/ui_interact(mob/user) // The microwave Menu
if(panel_open || !anchored)
return
var/dat = "
"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
index 2caf268e1fd..d1896c03fcb 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm
@@ -75,7 +75,10 @@
/obj/machinery/monkey_recycler/attack_hand(mob/user)
- if (src.stat != 0) //NOPOWER etc
+ . = ..()
+ if(.)
+ return
+ if(stat != 0) //NOPOWER etc
return
if(grinded >= required_grind)
to_chat(user, "
The machine hisses loudly as it condenses the grinded monkey meat. After a moment, it dispenses a brand new monkey cube.")
diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
index 6d8797b7a8e..1937ee26954 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
@@ -122,6 +122,9 @@
return ..()
/obj/machinery/processor/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(stat & (NOPOWER|BROKEN))
return
if(src.processing)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index d816504bc53..8be93e88bf3 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -132,18 +132,9 @@
S.remove_from_storage(O,src)
O.forceMove(src)
-/obj/machinery/smartfridge/attack_paw(mob/user)
- return src.attack_hand(user)
-
/obj/machinery/smartfridge/attack_ai(mob/user)
return FALSE
-/obj/machinery/smartfridge/attack_hand(mob/user)
- user.set_machine(src)
- interact(user)
-
-
-
/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm
index 928cc52fa8b..34868a5000c 100644
--- a/code/modules/food_and_drinks/pizzabox.dm
+++ b/code/modules/food_and_drinks/pizzabox.dm
@@ -106,17 +106,16 @@
START_PROCESSING(SSobj, src)
update_icon()
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/pizzabox/attack_hand(mob/user)
if(user.get_inactive_held_item() != src)
- ..()
- return
+ return ..()
if(open)
if(pizza)
user.put_in_hands(pizza)
to_chat(user, "
You take [pizza] out of [src].")
pizza = null
update_icon()
- return
else if(bomb)
if(wires.is_all_cut() && bomb_defused)
user.put_in_hands(bomb)
@@ -137,7 +136,6 @@
to_chat(user, "
You trap [src] with [bomb].")
update_icon()
- return
else if(boxes.len)
var/obj/item/pizzabox/topbox = boxes[boxes.len]
boxes -= topbox
@@ -146,8 +144,6 @@
topbox.update_icon()
update_icon()
user.regenerate_icons()
- return
- ..()
/obj/item/pizzabox/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/pizzabox))
diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm
index 39772b12162..9197e3d0445 100644
--- a/code/modules/games/cas.dm
+++ b/code/modules/games/cas.dm
@@ -59,6 +59,9 @@
shuffle_inplace(cards) // distribute blank cards throughout deck
/obj/item/toy/cards/deck/cas/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(user.lying)
return
if(cards.len == 0)
diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm
index 4acedb4780e..fee60605e3e 100644
--- a/code/modules/holodeck/area_copy.dm
+++ b/code/modules/holodeck/area_copy.dm
@@ -1,9 +1,9 @@
//Vars that will not be copied when using /DuplicateObject
-GLOBAL_LIST_INIT(duplicate_forbidden_vars,list("tag","area","type","loc","locs","vars", "parent","parent_type", "verbs","ckey","key","power_supply","contents","reagents","stat","x","y","z","group","atmos_adjacent_turfs"))
+GLOBAL_LIST_INIT(duplicate_forbidden_vars,list("tag", "datum_components", "area","type","loc","locs","vars", "parent","parent_type", "verbs","ckey","key","power_supply","contents","reagents","stat","x","y","z","group","atmos_adjacent_turfs"))
/proc/DuplicateObject(atom/original, perfectcopy = TRUE, sameloc = FALSE, atom/newloc = null, nerf = FALSE, holoitem=FALSE)
if(!original)
- return null
+ return
var/atom/O
if(sameloc)
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index 1dcab21e16f..d967eebd594 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -108,6 +108,9 @@
visible_message("
[user] dunks [W] into \the [src]!")
/obj/structure/holohoop/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling))
var/mob/living/L = user.pulling
if(user.grab_state < GRAB_AGGRESSIVE)
@@ -165,6 +168,9 @@
to_chat(user, "The device is a solid button, there's nothing you can do with it!")
/obj/machinery/readybutton/attack_hand(mob/user as mob)
+ . = ..()
+ if(.)
+ return
if(user.stat || stat & (NOPOWER|BROKEN))
to_chat(user, "
This device is not powered!")
return
diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm
index cf12ccb3ce2..7075b8502e2 100644
--- a/code/modules/hydroponics/beekeeping/beebox.dm
+++ b/code/modules/hydroponics/beekeeping/beebox.dm
@@ -192,8 +192,8 @@
..()
-
-/obj/structure/beebox/attack_hand(mob/user)
+/obj/structure/beebox/interact(mob/user)
+ . = ..()
if(!user.bee_friendly())
//Time to get stung!
var/bees = FALSE
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index 8939b601381..b69e5e6302d 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -151,10 +151,10 @@
else
to_chat(user, "
You cannot put this in [src.name]!")
-/obj/machinery/biogenerator/interact(mob/user)
+/obj/machinery/biogenerator/ui_interact(mob/user)
if(stat & BROKEN || panel_open)
return
- user.set_machine(src)
+ . = ..()
var/dat
if(processing)
dat += "
Biogenerator is processing! Please wait...
"
@@ -202,15 +202,11 @@
var/datum/browser/popup = new(user, "biogen", name, 350, 520)
popup.set_content(dat)
popup.open()
- return
-
-/obj/machinery/biogenerator/attack_hand(mob/user)
- interact(user)
/obj/machinery/biogenerator/proc/activate()
- if (usr.stat != 0)
+ if (usr.stat != CONSCIOUS)
return
- if (src.stat != 0) //NOPOWER etc
+ if (src.stat != NONE) //NOPOWER etc
return
if(processing)
to_chat(usr, "
The biogenerator is in the process of working.")
@@ -233,7 +229,6 @@
update_icon()
else
menustat = "void"
- return
/obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = 1)
if(materials.len != 1 || materials[1] != MAT_BIOMASS)
diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm
index 70f6f225ecf..6bb000ebe20 100644
--- a/code/modules/hydroponics/gene_modder.dm
+++ b/code/modules/hydroponics/gene_modder.dm
@@ -98,14 +98,8 @@
else
..()
-
-/obj/machinery/plantgenes/attack_hand(mob/user)
- if(..())
- return
- interact(user)
-
-/obj/machinery/plantgenes/interact(mob/user)
- user.set_machine(src)
+/obj/machinery/plantgenes/ui_interact(mob/user)
+ . = ..()
if(!user)
return
diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm
index 419ab3abadb..c01f3ba6efd 100644
--- a/code/modules/hydroponics/grown/chili.dm
+++ b/code/modules/hydroponics/grown/chili.dm
@@ -78,7 +78,9 @@
foodtype = FRUIT
/obj/item/reagent_containers/food/snacks/grown/ghost_chili/attack_hand(mob/user)
- ..()
+ . = ..()
+ if(.)
+ return
if( ismob(loc) )
held_mob = loc
START_PROCESSING(SSobj, src)
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index 1a3db5ef031..73a2ba14f37 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -161,6 +161,9 @@
/obj/structure/bonfire/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(burning)
to_chat(user, "
You need to extinguish [src] before removing the logs!")
return
@@ -173,8 +176,6 @@
new /obj/item/stack/rods(loc, 1)
qdel(src)
return
- ..()
-
/obj/structure/bonfire/proc/CheckOxygen()
if(isopenturf(loc))
diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm
index c471ba8bb1a..1c3509fa4e1 100644
--- a/code/modules/hydroponics/hydroitemdefines.dm
+++ b/code/modules/hydroponics/hydroitemdefines.dm
@@ -131,7 +131,7 @@
playsound(src,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1)
return (BRUTELOSS)
-/obj/item/scythe/pre_attackby(atom/A, mob/living/user, params)
+/obj/item/scythe/pre_attack(atom/A, mob/living/user, params)
if(swiping || !istype(A, /obj/structure/spacevine) || get_turf(A) == get_turf(user))
return ..()
else
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 2bcf03c5957..c3d1b725b8c 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -847,6 +847,9 @@
return ..()
/obj/machinery/hydroponics/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(issilicon(user)) //How does AI know what plant is?
return
if(harvest)
diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm
index b79d0652aa4..9c1cbb4a11a 100644
--- a/code/modules/hydroponics/seed_extractor.dm
+++ b/code/modules/hydroponics/seed_extractor.dm
@@ -119,13 +119,9 @@
src.potency = poten
src.amount = am
-/obj/machinery/seed_extractor/attack_hand(mob/user)
- user.set_machine(src)
- interact(user)
-
-/obj/machinery/seed_extractor/interact(mob/user)
+/obj/machinery/seed_extractor/ui_interact(mob/user)
if (stat)
- return 0
+ return FALSE
var/dat = "
Stored seeds:"
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index e62e26d576d..5226c275eeb 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -106,8 +106,11 @@
if(!draw_power(IC.power_draw_idle))
IC.power_fail()
-
/obj/item/device/electronic_assembly/interact(mob/user)
+ ui_interact(user)
+
+/obj/item/device/electronic_assembly/ui_interact(mob/user)
+ . = ..()
if(!check_interactivity(user))
return
diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm
index 1b99b007650..2f309956f99 100644
--- a/code/modules/integrated_electronics/core/integrated_circuit.dm
+++ b/code/modules/integrated_electronics/core/integrated_circuit.dm
@@ -118,6 +118,10 @@ a creative player the means to solve many problems. Circuits are held inside an
displayed_name = input
/obj/item/integrated_circuit/interact(mob/user)
+ ui_interact(user)
+
+/obj/item/integrated_circuit/ui_interact(mob/user)
+ . = ..()
if(!check_interactivity(user))
return
diff --git a/code/modules/integrated_electronics/core/special_pins/list_pin.dm b/code/modules/integrated_electronics/core/special_pins/list_pin.dm
index 8a6f80ea631..e70927fbddb 100644
--- a/code/modules/integrated_electronics/core/special_pins/list_pin.dm
+++ b/code/modules/integrated_electronics/core/special_pins/list_pin.dm
@@ -7,6 +7,7 @@
interact(user)
/datum/integrated_io/lists/proc/interact(mob/user)
+ . = ..()
var/list/my_list = data
var/t = "
[src]
"
t += "List length: [my_list.len]
"
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 25b091d2c7c..de7edc69b17 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -117,6 +117,9 @@
/obj/structure/bookcase/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(contents.len)
var/obj/item/book/choice = input("Which book would you like to remove from the shelf?") as null|obj in contents
if(choice)
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 269c6ad13f9..9a1fa4ae503 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -28,13 +28,8 @@
var/SQLquery
clockwork = TRUE //it'd look weird
-/obj/machinery/computer/libraryconsole/attack_hand(mob/user)
- if(..())
- return
- interact(user)
-
-/obj/machinery/computer/libraryconsole/interact(mob/user)
- user.set_machine(src)
+/obj/machinery/computer/libraryconsole/ui_interact(mob/user)
+ . = ..()
var/dat = "" //
switch(screenstate)
if(0)
@@ -201,8 +196,8 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums
circuit.name = "Book Inventory Management Console (Machine Board)"
circuit.build_path = /obj/machinery/computer/libraryconsole/bookmanagement
-/obj/machinery/computer/libraryconsole/bookmanagement/interact(mob/user)
- user.set_machine(src)
+/obj/machinery/computer/libraryconsole/bookmanagement/ui_interact(mob/user)
+ . = ..()
var/dat = "" //
switch(screenstate)
if(0)
@@ -511,6 +506,9 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums
return ..()
/obj/machinery/libraryscanner/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
usr.set_machine(src)
var/dat = "" //
if(cache)
diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm
index 174fada464c..3afbb42420e 100644
--- a/code/modules/mining/abandoned_crates.dm
+++ b/code/modules/mining/abandoned_crates.dm
@@ -150,6 +150,7 @@
if(100)
new /obj/item/clothing/head/bearpelt(src)
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/structure/closet/crate/secure/loot/attack_hand(mob/user)
if(locked)
to_chat(user, "
The crate is locked with a Deca-code lock.")
@@ -182,7 +183,7 @@
/obj/structure/closet/crate/secure/loot/AltClick(mob/living/user)
if(!user.canUseTopic(src, BE_CLOSE))
return
- attack_hand(user) //this helps you not blow up so easily by overriding unlocking which results in an immediate boom.
+ return attack_hand(user) //this helps you not blow up so easily by overriding unlocking which results in an immediate boom.
/obj/structure/closet/crate/secure/loot/attackby(obj/item/W, mob/user)
if(locked)
diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm
index fcb8dc9d1d0..ccd97844480 100644
--- a/code/modules/mining/aux_base.dm
+++ b/code/modules/mining/aux_base.dm
@@ -31,11 +31,8 @@ interface with the mining shuttle at the landing site if a mobile beacon is also
. = ..()
locator = new(src)
-/obj/machinery/computer/auxillary_base/attack_hand(mob/user)
- if(..(user))
- return
- add_fingerprint(usr)
-
+/obj/machinery/computer/auxillary_base/ui_interact(mob/user)
+ . = ..()
var/list/options = params2list(possible_destinations)
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
var/dat = "[is_station_level(z) ? "Docking clamps engaged. Standing by." : "Mining Shuttle Uplink: [M ? M.getStatusText() : "*OFFLINE*"]"]
"
@@ -280,6 +277,9 @@ obj/docking_port/stationary/public_mining_dock
var/console_range = 15 //Wifi range of the beacon to find the aux base console
/obj/structure/mining_shuttle_beacon/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(anchored)
to_chat(user, "
Landing zone already set.")
return
diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm
index b1a4d522de2..c735c9d637b 100644
--- a/code/modules/mining/equipment/marker_beacons.dm
+++ b/code/modules/mining/equipment/marker_beacons.dm
@@ -103,6 +103,9 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list(
set_light(light_range, light_power, GLOB.marker_beacon_colors[picked_color])
/obj/structure/marker_beacon/attack_hand(mob/living/user)
+ . = ..()
+ if(.)
+ return
to_chat(user, "
You start picking [src] up...")
if(do_after(user, remove_speed, target = src))
var/obj/item/stack/marker_beacon/M = new(loc)
diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm
index ebc48161559..57efc0f7f5e 100644
--- a/code/modules/mining/equipment/resonator.dm
+++ b/code/modules/mining/equipment/resonator.dm
@@ -42,7 +42,7 @@
new /obj/effect/temp_visual/resonance(T, user, src, burst_time)
user.changeNext_move(CLICK_CD_MELEE)
-/obj/item/resonator/pre_attackby(atom/target, mob/user, params)
+/obj/item/resonator/pre_attack(atom/target, mob/user, params)
if(check_allowed_items(target, 1))
CreateResonance(target, user)
return TRUE
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index 632c9e1cba3..09ce1c0761a 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -150,6 +150,9 @@
return TRUE
/obj/item/device/gps/computer/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
attack_self(user)
//Bed
diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm
index 78417a56d1f..a5b69b18564 100644
--- a/code/modules/mining/laborcamp/laborstacker.dm
+++ b/code/modules/mining/laborcamp/laborstacker.dm
@@ -150,6 +150,9 @@
anchored = TRUE
/obj/machinery/mineral/labor_points_checker/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
user.examinate(src)
/obj/machinery/mineral/labor_points_checker/attackby(obj/item/I, mob/user, params)
diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm
index be12f87fe8a..988c2242796 100644
--- a/code/modules/mining/lavaland/ash_flora.dm
+++ b/code/modules/mining/lavaland/ash_flora.dm
@@ -63,12 +63,13 @@
return ..()
/obj/structure/flora/ash/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(!harvested && !needs_sharp_harvest)
user.visible_message("
[user] starts to harvest from [src].","
You begin to harvest from [src].")
if(do_after(user, harvest_time, target = src))
harvest(user)
- else
- ..()
/obj/structure/flora/ash/tall_shroom //exists only so that the spawning check doesn't allow these spawning near other things
regrowth_time_low = 4200
diff --git a/code/modules/mining/lavaland/ruins/gym.dm b/code/modules/mining/lavaland/ruins/gym.dm
index a10735f6bbd..634c2df859f 100644
--- a/code/modules/mining/lavaland/ruins/gym.dm
+++ b/code/modules/mining/lavaland/ruins/gym.dm
@@ -8,10 +8,15 @@
var/list/hit_sounds = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg',\
'sound/weapons/punch1.ogg', 'sound/weapons/punch2.ogg', 'sound/weapons/punch3.ogg', 'sound/weapons/punch4.ogg')
-/obj/structure/punching_bag/attack_hand(mob/living/user)
+/obj/structure/punching_bag/attack_hand(mob/user as mob)
+ . = ..()
+ if(.)
+ return
flick("[icon_state]2", src)
- playsound(src.loc, pick(src.hit_sounds), 25, 1, -1)
- user.apply_status_effect(STATUS_EFFECT_EXERCISED)
+ playsound(loc, pick(hit_sounds), 25, 1, -1)
+ if(isliving(user))
+ var/mob/living/L = user
+ L.apply_status_effect(STATUS_EFFECT_EXERCISED)
/obj/structure/stacklifter
name = "Weight Machine"
@@ -22,6 +27,9 @@
anchored = TRUE
/obj/structure/stacklifter/attack_hand(mob/living/user)
+ . = ..()
+ if(.)
+ return
if(obj_flags & IN_USE)
to_chat(user, "It's already in use - wait a bit.")
return
@@ -61,6 +69,9 @@
anchored = TRUE
/obj/structure/weightlifter/attack_hand(mob/living/user)
+ . = ..()
+ if(.)
+ return
if(obj_flags & IN_USE)
to_chat(user, "It's already in use - wait a bit.")
return
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index e991fc65aad..bb5347a1523 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -30,8 +30,8 @@
else
return INITIALIZE_HINT_QDEL
-/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user)
-
+/obj/machinery/mineral/processing_unit_console/ui_interact(mob/user)
+ . = ..()
if(!machine)
return
diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm
index a9cec0a01b7..2b6cacc348e 100644
--- a/code/modules/mining/machine_redemption.dm
+++ b/code/modules/mining/machine_redemption.dm
@@ -189,11 +189,6 @@
materials.retrieve_all()
..()
-/obj/machinery/mineral/ore_redemption/attack_hand(mob/user)
- if(..())
- return
- interact(user)
-
/obj/machinery/mineral/ore_redemption/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm
index 44f13d0a4ff..e658f69395d 100644
--- a/code/modules/mining/machine_stacking.dm
+++ b/code/modules/mining/machine_stacking.dm
@@ -19,8 +19,8 @@
else
qdel(src)
-/obj/machinery/mineral/stacking_unit_console/attack_hand(mob/user)
-
+/obj/machinery/mineral/stacking_unit_console/ui_interact(mob/user)
+ . = ..()
var/obj/item/stack/sheet/s
var/dat
@@ -35,8 +35,6 @@
user << browse(dat, "window=console_stacking_machine")
- return
-
/obj/machinery/mineral/stacking_unit_console/Topic(href, href_list)
if(..())
return
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index e06e4d844af..1fd1ff3e38e 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -80,14 +80,9 @@
icon_state = initial(icon_state)
else
icon_state = "[initial(icon_state)]-off"
- return
-/obj/machinery/mineral/equipment_vendor/attack_hand(mob/user)
- if(..())
- return
- interact(user)
-
-/obj/machinery/mineral/equipment_vendor/interact(mob/user)
+/obj/machinery/mineral/equipment_vendor/ui_interact(mob/user)
+ . = ..()
var/dat
dat +="
"
if(istype(inserted_id))
@@ -283,8 +278,7 @@
name = "mining conscription kit"
desc = "A kit containing everything a crewmember needs to support a shaft miner in the field."
-/obj/item/storage/backpack/duffelbag/mining_conscript/Initialize()
- . = ..()
+/obj/item/storage/backpack/duffelbag/mining_conscript/PopulateContents()
new /obj/item/pickaxe/mini(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/device/t_scanner/adv_mining_scanner/lesser(src)
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index ba4850eb476..d188ce26aa9 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -74,12 +74,13 @@
no_destination_swap = 1
var/global/list/dumb_rev_heads = list()
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/machinery/computer/shuttle/mining/attack_hand(mob/user)
if(is_station_level(user.z) && user.mind && is_head_revolutionary(user) && !(user.mind in dumb_rev_heads))
to_chat(user, "
You get a feeling that leaving the station might be a REALLY dumb idea...")
dumb_rev_heads += user.mind
return
- ..()
+ . = ..()
/**********************Mining car (Crate like thing, not the rail car)**************************/
diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm
index 11046990066..c2fe407442f 100644
--- a/code/modules/mining/minebot.dm
+++ b/code/modules/mining/minebot.dm
@@ -115,6 +115,9 @@
..()
/mob/living/simple_animal/hostile/mining_drone/attack_hand(mob/living/carbon/human/M)
+ . = ..()
+ if(.)
+ return
if(M.a_intent == INTENT_HELP)
toggle_mode()
switch(mode)
@@ -123,7 +126,6 @@
if(MINEDRONE_ATTACK)
to_chat(M, "
[src] has been set to attack hostile wildlife.")
return
- ..()
/mob/living/simple_animal/hostile/mining_drone/CanPass(atom/movable/O)
if(istype(O, /obj/item/projectile/kinetic))
diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm
index ca214561631..ec4c9bd7146 100644
--- a/code/modules/mining/mint.dm
+++ b/code/modules/mining/mint.dm
@@ -28,6 +28,9 @@
materials.insert_stack(O, O.amount)
/obj/machinery/mineral/mint/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
var/dat = "
Coin Press"
GET_COMPONENT(materials, /datum/component/material_container)
diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm
index a9c660e5548..a12d56fbbb2 100644
--- a/code/modules/mining/satchel_ore_boxdm.dm
+++ b/code/modules/mining/satchel_ore_boxdm.dm
@@ -34,6 +34,9 @@
. = ..()
/obj/structure/ore_box/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(Adjacent(user))
show_contents(user)
diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm
index b49f8a25707..dbe9e03d09d 100644
--- a/code/modules/mob/living/brain/posibrain.dm
+++ b/code/modules/mob/living/brain/posibrain.dm
@@ -68,6 +68,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
else
visible_message(fail_message)
+//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/item/device/mmi/posibrain/attack_ghost(mob/user)
activate(user)
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index 20036f2fb2a..a5368fc7c05 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -53,14 +53,14 @@
return O.attack_obj(src, user)
/obj/item/clothing/mask/facehugger/attack_alien(mob/user) //can be picked up by aliens
- attack_hand(user)
- return
+ return attack_hand(user)
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/mask/facehugger/attack_hand(mob/user)
if((stat == CONSCIOUS && !sterile) && !isalien(user))
if(Leap(user))
return
- ..()
+ . = ..()
/obj/item/clothing/mask/facehugger/attack(mob/living/M, mob/user)
..()
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 293c21c8ceb..ba782008526 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -108,6 +108,7 @@
/mob/living/carbon/attack_drone(mob/living/simple_animal/drone/user)
return //so we don't call the carbon's attack_hand().
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/mob/living/carbon/attack_hand(mob/living/carbon/human/user)
for(var/thing in diseases)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 31df48e5e54..100790b64e8 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -319,6 +319,10 @@
if(C)
C.post_status("shuttle")
+/mob/living/silicon/ai/can_interact_with(atom/A)
+ . = ..()
+ return . || (istype(loc, /obj/item/device/aicard))? (ISINRANGE(A.x, x - interaction_range, x + interaction_range) && ISINRANGE(A.y, y - interaction_range, y + interaction_range)): GLOB.cameranet.checkTurfVis(get_turf(A))
+
/mob/living/silicon/ai/cancel_camera()
view_core()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 2b1ff82af75..fdb6583a785 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -90,8 +90,6 @@
/obj/item/clothing/head/sombrero,
/obj/item/clothing/head/witchunter_hat)
- var/remote_range = 7 //How far can you interact with machines.
-
can_buckle = TRUE
buckle_lying = FALSE
var/static/list/can_ride_typecache = typecacheof(/mob/living/carbon/human)
@@ -190,6 +188,9 @@
cell = null
return ..()
+/mob/living/silicon/robot/can_interact_with(atom/A)
+ . = ..()
+ return . || in_view_range(src, A)
/mob/living/silicon/robot/proc/pick_module()
if(module.type != /obj/item/robot_module)
@@ -351,6 +352,9 @@
queueAlarm("--- [class] alarm in [A.name] has been cleared.", class, 0)
return !cleared
+/mob/living/silicon/robot/can_interact_with(atom/A)
+ return !low_power_mode && ISINRANGE(A.x, x - interaction_range, x + interaction_range) && ISINRANGE(A.y, y - interaction_range, y + interaction_range)
+
/mob/living/silicon/robot/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weldingtool) && (user.a_intent != INTENT_HARM || user == src))
user.changeNext_move(CLICK_CD_MELEE)
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index 38cce8a2777..e44eede9565 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -52,6 +52,7 @@
return
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/mob/living/silicon/robot/attack_hand(mob/living/carbon/human/user)
add_fingerprint(user)
if(opened && !wiresexposed && !issilicon(user))
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 92aff74e6a8..083ad38caa9 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -40,6 +40,7 @@
var/updating = FALSE //portable camera camerachunk update
var/hack_software = FALSE //Will be able to use hacking actions
+ var/interaction_range = 7 //wireless control range
/mob/living/silicon/Initialize()
. = ..()
@@ -152,17 +153,17 @@
/mob/living/silicon/can_inject(mob/user, error_msg)
if(error_msg)
to_chat(user, "
Their outer shell is too tough.")
- return 0
+ return FALSE
/mob/living/silicon/IsAdvancedToolUser()
- return 1
+ return TRUE
/proc/islinked(mob/living/silicon/robot/bot, mob/living/silicon/ai/ai)
if(!istype(bot) || !istype(ai))
- return 0
- if (bot.connected_ai == ai)
- return 1
- return 0
+ return FALSE
+ if(bot.connected_ai == ai)
+ return TRUE
+ return FALSE
/mob/living/silicon/Topic(href, href_list)
if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm
index 2f81f73feac..7f34ea33057 100644
--- a/code/modules/mob/living/silicon/silicon_defense.dm
+++ b/code/modules/mob/living/silicon/silicon_defense.dm
@@ -63,6 +63,7 @@
return 1
return 0
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/mob/living/silicon/attack_hand(mob/living/carbon/human/M)
switch(M.a_intent)
if ("help")
diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm
index 274a252cc1e..692933f7575 100644
--- a/code/modules/mob/living/simple_animal/bot/construction.dm
+++ b/code/modules/mob/living/simple_animal/bot/construction.dm
@@ -234,8 +234,6 @@
to_chat(user, "
They won't fit in, as there is already stuff inside!")
return
if(T.use(10))
- if(user.s_active)
- user.s_active.close(user)
var/obj/item/bot_assembly/floorbot/B = new
B.toolbox = type
user.put_in_hands(B)
@@ -312,7 +310,6 @@
qdel(S)
qdel(src)
-
/obj/item/bot_assembly/medbot/attackby(obj/item/W, mob/user, params)
..()
switch(build_step)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
index 20062972ecf..c5dd5375d05 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
@@ -12,7 +12,7 @@
icon = 'icons/mob/drone.dmi'
icon_state = "drone_maint_hat"//yes reuse the _hat state.
layer = BELOW_MOB_LAYER
-
+
var/drone_type = /mob/living/simple_animal/drone //Type of drone that will be spawned
var/seasonal_hats = TRUE //If TRUE, and there are no default hats, different holidays will grant different hats
var/static/list/possible_seasonal_hats //This is built automatically in build_seasonal_hats() but can also be edited by admins!
@@ -39,6 +39,7 @@
GLOB.poi_list -= src
. = ..()
+//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/item/drone_shell/attack_ghost(mob/user)
if(jobban_isbanned(user,"drone"))
return
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
index 2ee268014bc..5e62ec0d4ba 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
@@ -29,6 +29,7 @@
if("Nothing")
return
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/mob/living/simple_animal/drone/attack_hand(mob/user)
if(ishuman(user))
if(stat == DEAD || status_flags & GODMODE || !can_be_held)
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index ddbbf4c30c4..87b2812194a 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -656,11 +656,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
/obj/item/storage/box/syndie_kit/guardian
name = "holoparasite injector kit"
-/obj/item/storage/box/syndie_kit/guardian/Initialize()
- . = ..()
+/obj/item/storage/box/syndie_kit/guardian/PopulateContents()
new /obj/item/guardiancreator/tech/choose/traitor(src)
new /obj/item/paper/guides/antag/guardian(src)
- return
/obj/item/guardiancreator/carp
name = "holocarp fishsticks"
diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
index c2595279ffc..fc25ec5ac6a 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
@@ -88,6 +88,7 @@
/obj/guardian_bomb/attackby(mob/living/user)
detonate(user)
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/guardian_bomb/attack_hand(mob/living/user)
detonate(user)
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 70377e65c81..823b5322d34 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -73,8 +73,10 @@
to_chat(src, "
[directive]")
/mob/living/simple_animal/hostile/poison/giant_spider/attack_ghost(mob/user)
- if(!humanize_spider(user))
- return ..()
+ . = ..()
+ if(.)
+ return
+ humanize_spider(user)
/mob/living/simple_animal/hostile/poison/giant_spider/proc/humanize_spider(mob/user)
if(key || !playable_spider)//Someone is in it or the fun police are shutting it down
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index 1cf031b0cce..9ca8dddde8c 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -382,7 +382,9 @@ Difficulty: Very Hard
ActivationReaction(speaker, ACTIVATE_SPEECH)
/obj/machinery/anomalous_crystal/attack_hand(mob/user)
- ..()
+ . = ..()
+ if(.)
+ return
ActivationReaction(user, ACTIVATE_TOUCH)
/obj/machinery/anomalous_crystal/attackby(obj/item/I, mob/user, params)
@@ -576,7 +578,9 @@ Difficulty: Very Hard
notify_ghosts("An anomalous crystal has been activated in [get_area(src)]! This crystal can always be used by ghosts hereafter.", enter_link = "
(Click to enter)", ghost_sound = 'sound/effects/ghost2.ogg', source = src, action = NOTIFY_ATTACK)
/obj/machinery/anomalous_crystal/helpers/attack_ghost(mob/dead/observer/user)
- ..()
+ . = ..()
+ if(.)
+ return
if(ready_to_deploy)
var/be_helper = alert("Become a Lightgeist? (Warning, You can no longer be cloned!)",,"Yes","No")
if(be_helper == "Yes" && !QDELETED(src) && isobserver(user))
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 46e5b4f3b19..f968dc78396 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -299,10 +299,10 @@
return
/mob/living/simple_animal/parrot/attack_paw(mob/living/carbon/monkey/M)
- attack_hand(M)
+ return attack_hand(M)
/mob/living/simple_animal/parrot/attack_alien(mob/living/carbon/alien/M)
- attack_hand(M)
+ return attack_hand(M)
//Simple animals
/mob/living/simple_animal/parrot/attack_animal(mob/living/simple_animal/M)
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 07bb6f7035a..5087825305c 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -232,7 +232,7 @@
var/mob/living/Food = A
if(CanFeedon(Food))
Feedon(Food)
- ..()
+ return ..()
/mob/living/simple_animal/slime/doUnEquip(obj/item/W)
return
@@ -278,8 +278,6 @@
discipline_slime(user)
return ..()
-
-
/mob/living/simple_animal/slime/attack_hand(mob/living/carbon/human/M)
if(buckled)
M.do_attack_animation(src, ATTACK_EFFECT_DISARM)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 32c162d06ae..25fe453d542 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -206,26 +206,26 @@
//unset redraw_mob to prevent the mob from being redrawn at the end.
/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE)
if(!istype(W))
- return 0
+ return FALSE
if(!W.mob_can_equip(src, null, slot, disable_warning, bypass_equip_delay_self))
if(qdel_on_fail)
qdel(W)
else
if(!disable_warning)
- to_chat(src, "
You are unable to equip that!" )
- return 0
+ to_chat(src, "
You are unable to equip that!")
+ return FALSE
equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail.
- return 1
+ return TRUE
-//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task.
+//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't equip need to be done before! Use mob_can_equip() for that task.
//In most cases you will want to use equip_to_slot_if_possible()
/mob/proc/equip_to_slot(obj/item/W, slot)
return
-//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such.
+//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the round starts and when events happen and such.
//Also bypasses equip delay checks, since the mob isn't actually putting it on.
/mob/proc/equip_to_slot_or_del(obj/item/W, slot)
- return equip_to_slot_if_possible(W, slot, 1, 1, 0, 1)
+ return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE)
//puts the item "W" into an appropriate slot in a human's inventory
//returns 0 if it cannot, 1 if successful
@@ -482,7 +482,7 @@
return
/mob/MouseDrop(mob/M)
- ..()
+ . = ..()
if(M != usr)
return
if(usr == src)
@@ -730,6 +730,10 @@
/mob/proc/can_unbuckle()
return 1
+//Can the mob interact() with an atom?
+/mob/proc/can_interact_with(atom/A)
+ return IsAdminGhost(src) || Adjacent(A)
+
//Can the mob see reagents inside of containers?
/mob/proc/can_see_reagents()
if(stat == DEAD) //Ghosts and such can always see reagents
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index ce8d8ce4b9d..e6c96e9f62a 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -161,12 +161,15 @@
var/mob/M = usr
if((!istype(over_object, /obj/screen)) && usr.canUseTopic(src))
return attack_self(M)
- return
+ return ..()
/obj/item/device/modular_computer/attack_ai(mob/user)
return attack_self(user)
/obj/item/device/modular_computer/attack_ghost(mob/dead/observer/user)
+ . = ..()
+ if(.)
+ return
if(enabled)
ui_interact(user)
else if(IsAdminGhost(user))
@@ -207,7 +210,7 @@
// On-click handling. Turns on the computer if it's off and opens the GUI.
-/obj/item/device/modular_computer/attack_self(mob/user)
+/obj/item/device/modular_computer/interact(mob/user)
if(enabled)
ui_interact(user)
else
diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm
index c57bf5f4e33..a1ae1b451e2 100644
--- a/code/modules/modular_computers/computers/item/computer_ui.dm
+++ b/code/modules/modular_computers/computers/item/computer_ui.dm
@@ -1,3 +1,7 @@
+/obj/item/device/modular_computer/attack_self()
+ . = ..()
+ ui_interact()
+
// Operates TGUI
/obj/item/device/modular_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
if(!enabled)
diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm
index 1618b684782..f0970f3ce02 100644
--- a/code/modules/modular_computers/computers/item/laptop.dm
+++ b/code/modules/modular_computers/computers/item/laptop.dm
@@ -53,6 +53,7 @@
try_toggle_open(usr)
/obj/item/device/modular_computer/laptop/MouseDrop(obj/over_object, src_location, over_location)
+ . = ..()
if(over_object == usr || over_object == src)
try_toggle_open(usr)
else if(istype(over_object, /obj/screen/inventory/hand))
@@ -65,12 +66,12 @@
M.put_in_hand(src, H.held_index)
/obj/item/device/modular_computer/laptop/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(screen_on && isturf(loc))
return attack_self(user)
- return ..()
-
-
/obj/item/device/modular_computer/laptop/proc/try_toggle_open(mob/living/user)
if(issilicon(user))
return
diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm
index 03c39ef2774..74ee7b68eaf 100644
--- a/code/modules/modular_computers/computers/machinery/modular_computer.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm
@@ -37,6 +37,9 @@
return ..()
/obj/machinery/modular_computer/attack_ghost(mob/dead/observer/user)
+ . = ..()
+ if(.)
+ return
if(cpu)
cpu.attack_ghost(user)
@@ -92,16 +95,19 @@
if(cpu)
cpu.AltClick(user)
+//ATTACK HAND IGNORING PARENT RETURN VALUE
// On-click handling. Turns on the computer if it's off and opens the GUI.
-/obj/machinery/modular_computer/attack_hand(mob/user)
+/obj/machinery/modular_computer/interact(mob/user)
if(cpu)
- cpu.attack_self(user) // CPU is an item, that's why we route attack_hand to attack_self
+ return cpu.interact(user) // CPU is an item, that's why we route attack_hand to attack_self
+ else
+ return ..()
// Process currently calls handle_power(), may be expanded in future if more things are added.
/obj/machinery/modular_computer/process()
if(cpu)
// Keep names in sync.
- cpu.name = src.name
+ cpu.name = name
cpu.process()
// Used in following function to reduce copypaste
@@ -114,7 +120,6 @@
stat |= NOPOWER
update_icon()
-
// Modular computers can have battery in them, we handle power in previous proc, so prevent this from messing it up for us.
/obj/machinery/modular_computer/power_change()
if(cpu && cpu.use_power()) // If MC_CPU still has a power source, PC wouldn't go offline.
diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm
index 12f7d403c25..55c88fbfcb4 100644
--- a/code/modules/modular_computers/laptop_vendor.dm
+++ b/code/modules/modular_computers/laptop_vendor.dm
@@ -222,24 +222,18 @@
return 1
return 0
-/obj/machinery/lapvend/attack_hand(mob/user)
- ui_interact(user)
-
/obj/machinery/lapvend/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
if(stat & (BROKEN | NOPOWER | MAINT))
if(ui)
ui.close()
return 0
-
-
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
ui = new(user, src, ui_key, "computer_fabricator", "Personal Computer Vendor", 500, 400, state = state)
ui.open()
ui.set_autoupdate(state = 1)
-
/obj/machinery/lapvend/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/stack/spacecash))
var/obj/item/stack/spacecash/c = I
@@ -250,10 +244,8 @@
visible_message("
[usr] inserts [c.value] credits into [src].")
qdel(c)
return
-
return ..()
-
// Simplified payment processing, returns 1 on success.
/obj/machinery/lapvend/proc/process_payment()
if(total_price > credits)
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index 6f7c99dac8c..907fccdc5ba 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -65,12 +65,12 @@
return ..()
-/obj/structure/filingcabinet/attack_hand(mob/user)
+/obj/structure/filingcabinet/ui_interact(mob/user)
+ . = ..()
if(contents.len <= 0)
to_chat(user, "
[src] is empty.")
return
- user.set_machine(src)
var/dat = "
"
var/i
for(i=contents.len, i>=1, i--)
@@ -136,7 +136,8 @@
/obj/structure/filingcabinet/security/attack_hand()
populate()
- ..()
+ . = ..()
+
/obj/structure/filingcabinet/security/attack_tk()
populate()
..()
@@ -165,9 +166,12 @@
P.name = "paper - '[G.fields["name"]]'"
virgin = 0 //tabbing here is correct- it's possible for people to try and use it
//before the records have been generated, so we do this inside the loop.
+
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/structure/filingcabinet/medical/attack_hand()
populate()
- ..()
+ . = ..()
+
/obj/structure/filingcabinet/medical/attack_tk()
populate()
..()
@@ -205,14 +209,14 @@ GLOBAL_LIST_EMPTY(employmentCabinets)
/obj/structure/filingcabinet/employment/proc/addFile(mob/living/carbon/human/employee)
new /obj/item/paper/contract/employment(src, employee)
-/obj/structure/filingcabinet/employment/attack_hand(mob/user)
+/obj/structure/filingcabinet/employment/interact(mob/user)
if(!cooldown)
if(virgin)
fillCurrent()
virgin = 0
cooldown = 1
- ..()
sleep(100) // prevents the devil from just instantly emptying the cabinet, ensuring an easy win.
cooldown = 0
else
to_chat(user, "[src] is jammed, give it a few seconds.")
+ ..()
diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm
index c3ffc14b803..ccc94273498 100644
--- a/code/modules/paperwork/paper_cutter.dm
+++ b/code/modules/paperwork/paper_cutter.dm
@@ -66,8 +66,10 @@
return
..()
-
/obj/item/papercutter/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
add_fingerprint(user)
if(!storedcutter)
to_chat(user, "The cutting blade is gone! You can't use [src] now.")
@@ -88,8 +90,8 @@
new /obj/item/paperslip(get_turf(src))
update_icon()
-
/obj/item/papercutter/MouseDrop(atom/over_object)
+ . = ..()
var/mob/M = usr
if(M.incapacitated() || !Adjacent(M))
return
@@ -102,7 +104,6 @@
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
add_fingerprint(M)
-
/obj/item/paperslip
name = "paper slip"
desc = "A little slip of paper left over after a larger piece was cut. Whoa."
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index 2818f043448..82e7327e8a4 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -40,6 +40,7 @@
..()
/obj/item/paper_bin/MouseDrop(atom/over_object)
+ . = ..()
var/mob/living/M = usr
if(!istype(M) || M.incapacitated() || !Adjacent(M))
return
@@ -53,11 +54,10 @@
add_fingerprint(M)
-
/obj/item/paper_bin/attack_paw(mob/user)
return attack_hand(user)
-
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/paper_bin/attack_hand(mob/user)
if(user.lying)
return
@@ -90,9 +90,8 @@
to_chat(user, "You take [P] out of \the [src].")
else
to_chat(user, "[src] is empty!")
-
add_fingerprint(user)
-
+ return ..()
/obj/item/paper_bin/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/paper))
@@ -142,12 +141,15 @@
icon_state = "paper_bundle"
papertype = /obj/item/paper/natural
resistance_flags = FLAMMABLE
+
/obj/item/paper_bin/bundlenatural/attack_hand(mob/user)
..()
if(total_paper < 1)
qdel(src)
+
/obj/item/paper_bin/bundlenatural/fire_act(exposed_temperature, exposed_volume)
qdel(src)
+
/obj/item/paper_bin/bundlenatural/attackby(obj/item/W, mob/user)
if(W.is_sharp())
to_chat(user, "You snip \the [src], spilling paper everywhere.")
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 6fa13fe8c3c..5c63c559e38 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -30,15 +30,8 @@
var/mob/living/ass //i can't believe i didn't write a stupid-ass comment about this var when i first coded asscopy.
var/busy = FALSE
-/obj/machinery/photocopier/attack_ai(mob/user)
- return attack_hand(user)
-
-/obj/machinery/photocopier/attack_paw(mob/user)
- return attack_hand(user)
-
-/obj/machinery/photocopier/attack_hand(mob/user)
- user.set_machine(src)
-
+/obj/machinery/photocopier/ui_interact(mob/user)
+ . = ..()
var/dat = "Photocopier
"
if(copy || photocopy || doccopy || (ass && (ass.loc == src.loc)))
dat += "Remove Paper
"
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 19a83f9770b..31bcc537e94 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -466,7 +466,7 @@
var/mob/M = target
disk.record.caller_name = M.name
disk.record.set_caller_image(M)
- else
+ else
return
else
captureimage(target, user, flag)
@@ -552,6 +552,7 @@
to_chat(user, "\The [src] already contains a photo.")
..()
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/wallframe/picture/attack_hand(mob/user)
if(user.get_inactive_held_item() != src)
..()
@@ -562,6 +563,7 @@
to_chat(user, "You carefully remove the photo from \the [src].")
displayed = null
update_icon()
+ return ..()
/obj/item/wallframe/picture/attack_self(mob/user)
user.examinate(src)
@@ -631,6 +633,9 @@
..()
/obj/structure/sign/picture_frame/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(framed)
framed.show(user)
diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm
index cfbb3d199bb..96e35164c48 100644
--- a/code/modules/power/antimatter/control.dm
+++ b/code/modules/power/antimatter/control.dm
@@ -9,6 +9,8 @@
idle_power_usage = 100
active_power_usage = 1000
+ interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT | INTERACT_ATOM_REQUIRES_ANCHORED
+
var/list/obj/machinery/am_shielding/linked_shielding
var/list/obj/machinery/am_shielding/linked_cores
var/obj/item/am_containment/fueljar
@@ -207,10 +209,6 @@
stability -= damage/2
check_stability()
-/obj/machinery/power/am_control_unit/attack_hand(mob/user)
- if(anchored)
- interact(user)
-
/obj/machinery/power/am_control_unit/proc/add_shielding(obj/machinery/am_shielding/AMS, AMS_linking = 0)
if(!istype(AMS))
return 0
@@ -283,13 +281,13 @@
/obj/machinery/power/am_control_unit/proc/reset_stored_core_stability_delay()
stored_core_stability_delay = 0
-/obj/machinery/power/am_control_unit/interact(mob/user)
+/obj/machinery/power/am_control_unit/ui_interact(mob/user)
+ . = ..()
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
if(!isAI(user))
user.unset_machine()
user << browse(null, "window=AMcontrol")
return
- user.set_machine(src)
var/dat = ""
dat += "AntiMatter Control Panel
"
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 804276548f0..f764a38d646 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -49,7 +49,7 @@
max_integrity = 200
integrity_failure = 50
resistance_flags = FIRE_PROOF
- interact_open = TRUE
+ interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON
var/lon_range = 1.5
var/area/area
@@ -381,7 +381,7 @@
/obj/machinery/power/apc/attackby(obj/item/W, mob/living/user, params)
if(issilicon(user) && get_dist(src,user)>1)
- return src.attack_hand(user)
+ return attack_hand(user)
if (istype(W, /obj/item/crowbar)) //Using crowbar
if (opened) // a) on open apc
if (has_electronics==1)
@@ -721,6 +721,9 @@
// attack with hand - remove cell (if cover open) or interact with the APC
/obj/machinery/power/apc/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(!user)
return
if(usr == user && opened && (!issilicon(user)))
@@ -734,7 +737,6 @@
return
if((stat & MAINT) && !opened) //no board; no interface
return
- ..()
/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 289c78b7121..94e5f4a28ea 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -533,6 +533,9 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai
add_atom_colour(item_color, FIXED_COLOUR_PRIORITY)
/obj/item/stack/cable_coil/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
var/obj/item/stack/cable_coil/new_cable = ..()
if(istype(new_cable))
new_cable.item_color = item_color
diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm
index 74cecf0b1d4..62abcdb4404 100644
--- a/code/modules/power/floodlight.dm
+++ b/code/modules/power/floodlight.dm
@@ -95,6 +95,9 @@
. = ..()
/obj/machinery/power/floodlight/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
var/current = setting
if(current == 1)
current = light_setting_list.len
@@ -103,10 +106,6 @@
change_setting(current, user)
..()
-/obj/machinery/power/floodlight/attack_ai(mob/user)
- attack_hand(user)
- ..()
-
/obj/machinery/power/floodlight/obj_break(damage_flag)
if(!(flags_1 & NODECONSTRUCT_1))
playsound(loc, 'sound/effects/glassbr3.ogg', 100, 1)
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index 4681eabe207..ce9d2de4db1 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -123,12 +123,6 @@
lastgen -= power_output
..()
-/obj/machinery/power/generator/attack_hand(mob/user)
- if(..())
- user << browse(null, "window=teg")
- return
- interact(user)
-
/obj/machinery/power/generator/proc/get_menu(include_link = 1)
var/t = ""
if(!powernet)
@@ -161,15 +155,12 @@
return t
-/obj/machinery/power/generator/interact(mob/user)
-
- user.set_machine(src)
+/obj/machinery/power/generator/ui_interact(mob/user)
+ . = ..()
var/datum/browser/popup = new(user, "teg", "Thermo-Electric Generator", 460, 300)
popup.set_content(get_menu())
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
- return 1
-
/obj/machinery/power/generator/Topic(href, href_list)
if(..())
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index cb7c9b1a691..29e4a387274 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -116,7 +116,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
power_channel = ENVIRON
sprite_number = 8
use_power = IDLE_POWER_USE
- interact_offline = TRUE
+ interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE
var/on = TRUE
var/breaker = 1
var/list/parts = list()
@@ -219,12 +219,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
return
return ..()
-
-/obj/machinery/gravity_generator/main/attack_hand(mob/user)
- if(!..())
- return interact(user)
-
-/obj/machinery/gravity_generator/main/interact(mob/user)
+/obj/machinery/gravity_generator/main/ui_interact(mob/user)
if(stat & BROKEN)
return
var/dat = "Gravity Generator Breaker: "
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index faad79664eb..68ac434811f 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -568,6 +568,9 @@
// if hands aren't protected and the light is on, burn the player
/obj/machinery/light/attack_hand(mob/living/carbon/human/user)
+ . = ..()
+ if(.)
+ return
user.changeNext_move(CLICK_CD_MELEE)
add_fingerprint(user)
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index dc8e6e07931..cc4000fd42b 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -17,6 +17,8 @@
var/base_icon = "portgen0"
var/datum/looping_sound/generator/soundloop
+ interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT | INTERACT_ATOM_REQUIRES_ANCHORED
+
/obj/machinery/power/port_gen/Initialize()
. = ..()
soundloop = new(list(src), active)
@@ -53,12 +55,6 @@
update_icon()
soundloop.stop()
-/obj/machinery/power/port_gen/attack_hand(mob/user)
- if(..())
- return
- if(!anchored)
- return
-
/obj/machinery/power/port_gen/examine(mob/user)
..()
to_chat(user, "It is[!active?"n't":""] running.")
@@ -211,28 +207,20 @@
obj_flags |= EMAGGED
emp_act(EMP_HEAVY)
-/obj/machinery/power/port_gen/pacman/attack_hand(mob/user)
- ..()
- if (!anchored)
- return
-
- interact(user)
-
/obj/machinery/power/port_gen/pacman/attack_ai(mob/user)
interact(user)
/obj/machinery/power/port_gen/pacman/attack_paw(mob/user)
interact(user)
-/obj/machinery/power/port_gen/pacman/interact(mob/user)
+/obj/machinery/power/port_gen/pacman/ui_interact(mob/user)
+ . = ..()
if (get_dist(src, user) > 1 )
if(!isAI(user))
user.unset_machine()
user << browse(null, "window=port_gen")
return
- user.set_machine(src)
-
var/dat = text("[name]
")
if (active)
dat += text("Generator: On
")
diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm
index f88e713dda7..d458fbf7e2d 100644
--- a/code/modules/power/rtg.dm
+++ b/code/modules/power/rtg.dm
@@ -46,11 +46,11 @@
return
return ..()
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/machinery/power/rtg/attack_hand(mob/user)
if(user.a_intent == INTENT_GRAB && user_buckle_mob(user.pulling, user, check_loc = 0))
return
- ..()
-
+ . = ..()
/obj/machinery/power/rtg/advanced
desc = "An advanced RTG capable of moderating isotope decay, increasing power output but reducing lifetime. It uses plasma-fueled radiation collectors to increase output even further."
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index bd9901460a3..fcbb3661875 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -69,7 +69,8 @@
last_power-=bitcoins_mined
/obj/machinery/power/rad_collector/attack_hand(mob/user)
- if(..())
+ . = ..()
+ if(.)
return
if(anchored)
if(!src.locked)
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 70772f74f90..c8153b4a89e 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -9,6 +9,8 @@
density = FALSE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
use_power = NO_POWER_USE
+ interaction_flags_atom = NONE
+ interaction_flags_machine = NONE
light_range = 4
layer = ABOVE_OBJ_LAYER
var/obj/machinery/field/generator/FG1 = null
@@ -19,6 +21,7 @@
FG2.fields -= src
return ..()
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/machinery/field/containment/attack_hand(mob/user)
if(get_dist(src, user) > 1)
return FALSE
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index fd1989ebf81..d6a27f1483e 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -23,6 +23,7 @@
var/shot_number = 0
var/state = 0
var/locked = FALSE
+ var/allow_switch_interact = TRUE
var/projectile_type = /obj/item/projectile/beam/emitter
@@ -101,13 +102,13 @@
icon_state = initial(icon_state)
-/obj/machinery/power/emitter/attack_hand(mob/user)
- src.add_fingerprint(user)
+/obj/machinery/power/emitter/interact(mob/user)
+ add_fingerprint(user)
if(state == 2)
if(!powernet)
to_chat(user, "The emitter isn't connected to a wire!")
return 1
- if(!src.locked)
+ if(!locked && allow_switch_interact)
if(src.active==1)
src.active = 0
to_chat(user, "You turn off \the [src].")
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index d160209e0cb..0a113859c35 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -65,6 +65,9 @@ field_generator power level display
calc_power()
/obj/machinery/field/generator/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(state == FG_WELDED)
if(get_dist(src, user) <= 1)//Need to actually touch the thing to turn it on
if(active >= FG_CHARGING)
diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm
index 4b4ec71eb68..4cc1143c02b 100644
--- a/code/modules/power/singularity/generator.dm
+++ b/code/modules/power/singularity/generator.dm
@@ -17,10 +17,11 @@
var/energy = 0
var/creation_type = /obj/singularity
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/machinery/the_singularitygen/attack_hand(mob/user)
if(user.a_intent == INTENT_GRAB && user_buckle_mob(user.pulling, user, check_loc = 0))
return
- ..()
+ . = ..()
/obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench))
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index f6b785b3e17..074f8a18e84 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -93,11 +93,10 @@
/proc/cult_ending_helper(var/no_explosion = 0)
Cinematic(CINEMATIC_CULT,world,CALLBACK(GLOBAL_PROC,.ending_helper))
-
+//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/singularity/narsie/large/attack_ghost(mob/dead/observer/user as mob)
makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, user, cultoverride = TRUE, loc_override = src.loc)
-
/obj/singularity/narsie/process()
if(clashing)
return
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 9d5ff2dd815..4d4eb73687f 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -35,6 +35,9 @@
return ..()
/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
if(construction_state == PA_CONSTRUCTION_COMPLETE)
interact(user)
else if(construction_state == PA_CONSTRUCTION_PANEL_OPEN)
@@ -223,13 +226,13 @@
return 1
-/obj/machinery/particle_accelerator/control_box/interact(mob/user)
+/obj/machinery/particle_accelerator/control_box/ui_interact(mob/user)
+ . = ..()
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
if(!issilicon(user))
user.unset_machine()
user << browse(null, "window=pacontrol")
return
- user.set_machine(src)
var/dat = ""
dat += "Close
"
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 3c7d00b3fdd..6fcfcce8f5e 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -58,10 +58,9 @@
last_failed_movement = direct
return 0
-
/obj/singularity/attack_hand(mob/user)
consume(user)
- return 1
+ return TRUE
/obj/singularity/attack_paw(mob/user)
consume(user)
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 81cf66c26a6..f4c11009d10 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -189,10 +189,6 @@
var/tracker = 0
var/glass_type = null
-/obj/item/solar_assembly/attack_hand(mob/user)
- if(!anchored && isturf(loc)) // You can't pick it up
- ..()
-
// Give back the glass type we were supplied with
/obj/item/solar_assembly/proc/give_glass(device_broken)
if(device_broken)
@@ -430,7 +426,7 @@
A.anchored = TRUE
qdel(src)
else if(user.a_intent != INTENT_HARM && !(I.flags_1 & NOBLUDGEON_1))
- src.attack_hand(user)
+ attack_hand(user)
else
return ..()
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 5ed6b84a18f..abebac2b258 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -512,6 +512,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
return
/obj/machinery/power/supermatter_shard/attack_hand(mob/living/user)
+ . = ..()
+ if(.)
+ return
dust_mob(user, cause = "hand")
/obj/machinery/power/supermatter_shard/proc/dust_mob(mob/living/nom, vis_msg, mob_msg, cause)
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index 90dedfa23f4..d8dbb6d2466 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -71,10 +71,10 @@
return ..()
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/machinery/power/tesla_coil/attack_hand(mob/user)
if(user.a_intent == INTENT_GRAB && user_buckle_mob(user.pulling, user, check_loc = 0))
- return
- ..()
+ return ..()
/obj/machinery/power/tesla_coil/tesla_act(var/power)
if(anchored && !panel_open)
@@ -180,10 +180,11 @@
return ..()
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/machinery/power/grounding_rod/attack_hand(mob/user)
if(user.a_intent == INTENT_GRAB && user_buckle_mob(user.pulling, user, check_loc = 0))
return
- ..()
+ . = ..()
/obj/machinery/power/grounding_rod/tesla_act(var/power)
if(anchored && !panel_open)
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index d7f78635b05..7e73c1c9c18 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -227,13 +227,6 @@
updateDialog()
-/obj/machinery/power/turbine/attack_hand(mob/user)
-
- if(..())
- return
-
- interact(user)
-
/obj/machinery/power/turbine/attackby(obj/item/I, mob/user, params)
if(default_deconstruction_screwdriver(user, initial(icon_state), initial(icon_state), I))
return
@@ -255,7 +248,7 @@
default_deconstruction_crowbar(I)
-/obj/machinery/power/turbine/interact(mob/user)
+/obj/machinery/power/turbine/ui_interact(mob/user)
if(!Adjacent(user) || (stat & (NOPOWER|BROKEN)) && !issilicon(user))
user.unset_machine(src)
@@ -321,12 +314,6 @@
else
compressor = locate(/obj/machinery/power/compressor) in range(5, src)
-/obj/machinery/computer/turbine_computer/attack_hand(var/mob/user as mob)
- if(..())
- return
-
- ui_interact(user)
-
/obj/machinery/computer/turbine_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index f83a2d9edde..2c36f142452 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -98,13 +98,13 @@
w_class += S.w_class //so pistols do not fit in pockets when suppressed
update_icon()
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/gun/ballistic/attack_hand(mob/user)
if(loc == user)
if(suppressed && can_unsuppress)
var/obj/item/suppressor/S = suppressed
if(!user.is_holding(src))
- ..()
- return
+ return ..()
to_chat(user, "You unscrew [suppressed] from [src].")
user.put_in_hands(suppressed)
fire_sound = S.oldsound
@@ -112,7 +112,7 @@
suppressed = null
update_icon()
return
- ..()
+ return ..()
/obj/item/gun/ballistic/attack_self(mob/living/user)
var/obj/item/ammo_casing/AC = chambered //Find chambered round
diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm
index f4194f529f9..a174874686a 100644
--- a/code/modules/projectiles/guns/ballistic/automatic.dm
+++ b/code/modules/projectiles/guns/ballistic/automatic.dm
@@ -320,7 +320,7 @@
..()
update_icon()
-
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/gun/ballistic/automatic/l6_saw/attack_hand(mob/user)
if(loc != user)
..()
@@ -337,7 +337,6 @@
to_chat(user, "You remove the magazine from [src].")
playsound(user, 'sound/weapons/magout.ogg', 60, 1)
-
/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, params)
if(!cover_open && istype(A, mag_type))
to_chat(user, "[src]'s cover is closed! You can't insert a new mag.")
diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm
index 48bda4a86e6..cc719f98ee0 100644
--- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm
+++ b/code/modules/projectiles/guns/ballistic/laser_gatling.dm
@@ -29,6 +29,7 @@
/obj/item/minigunpack/process()
overheat = max(0, overheat - heat_diffusion)
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/minigunpack/attack_hand(var/mob/living/carbon/user)
if(src.loc == user)
if(!armed)
@@ -57,6 +58,7 @@
user.dropItemToGround(gun, TRUE)
/obj/item/minigunpack/MouseDrop(atom/over_object)
+ . = ..()
if(armed)
return
if(iscarbon(usr))
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index d49c4a6fa0a..5fcb554c7d7 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -51,7 +51,7 @@
var/last_tick = 1
var/addiction_tick = 1
var/list/datum/reagent/addiction_list = new/list()
- var/flags
+ var/reagents_holder_flags
/datum/reagents/New(maximum=100)
maximum_volume = maximum
@@ -315,9 +315,9 @@
/datum/reagents/proc/set_reacting(react = TRUE)
if(react)
- flags &= ~(REAGENT_NOREACT)
+ reagents_holder_flags &= ~(REAGENT_NOREACT)
else
- flags |= REAGENT_NOREACT
+ reagents_holder_flags |= REAGENT_NOREACT
/datum/reagents/proc/conditional_update_move(atom/A, Running = 0)
var/list/cached_reagents = reagent_list
@@ -337,7 +337,7 @@
var/list/cached_reagents = reagent_list
var/list/cached_reactions = GLOB.chemical_reactions_list
var/datum/cached_my_atom = my_atom
- if(flags & REAGENT_NOREACT)
+ if(reagents_holder_flags & REAGENT_NOREACT)
return //Yup, no reactions here. No siree.
var/reaction_occurred = 0
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 32096125dd6..b6bd9f62ec6 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -7,7 +7,7 @@
icon_state = "dispenser"
use_power = IDLE_POWER_USE
idle_power_usage = 40
- interact_offline = TRUE
+ interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE
resistance_flags = FIRE_PROOF | ACID_PROOF
circuit = /obj/item/circuitboard/machine/chem_dispenser
var/cell_type = /obj/item/stock_parts/cell/high
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index 5930260dab3..3cdaaa0f5f9 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -131,17 +131,8 @@
updateUsrDialog()
return FALSE
-/obj/machinery/reagentgrinder/attack_paw(mob/user)
- return attack_hand(user)
-
-/obj/machinery/reagentgrinder/attack_ai(mob/user)
- return FALSE
-
-/obj/machinery/reagentgrinder/attack_hand(mob/user)
- user.set_machine(src)
- interact(user)
-
-/obj/machinery/reagentgrinder/interact(mob/user) // The microwave Menu //I am reasonably certain that this is not a microwave
+/obj/machinery/reagentgrinder/ui_interact(mob/user) // The microwave Menu //I am reasonably certain that this is not a microwave
+ . = ..()
var/is_chamber_empty = FALSE
var/is_beaker_ready = FALSE
var/processing_chamber = ""
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 62ea18dcd9b..3e7cd539d02 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -36,8 +36,9 @@
mode = !mode
update_icon()
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/reagent_containers/syringe/attack_hand()
- ..()
+ . = ..()
update_icon()
/obj/item/reagent_containers/syringe/attack_paw(mob/user)
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index f0c0ecfb684..4b4c786987b 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -146,6 +146,9 @@
to_chat(user, "There are no paper cups left.")
/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user)
+ . = ..()
+ if(.)
+ return
if(!paper_cups)
to_chat(user, "There aren't any cups left!")
return
@@ -154,7 +157,6 @@
user.put_in_hands(S)
paper_cups--
-
/obj/structure/reagent_dispensers/beerkeg
name = "beer keg"
desc = "Beer is liquid bread, it's good for you..."
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index cca33063c2c..759c048ab63 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -164,9 +164,11 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
// attack with hand, move pulled object onto conveyor
/obj/machinery/conveyor/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
user.Move_Pulled(src)
-
// make the conveyor broken
// also propagate inoperability to any connected conveyor with the same ID
/obj/machinery/conveyor/proc/broken()
@@ -267,6 +269,9 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
// attack with hand, switch position
/obj/machinery/conveyor_switch/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
add_fingerprint(user)
if(position == 0)
if(convdir) //is it a oneway switch
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index 5b9212339a9..99c2784ebf8 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -9,7 +9,7 @@
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
max_integrity = 200
resistance_flags = FIRE_PROOF
- interact_open = TRUE
+ interaction_flags_machine = INTERACT_MACHINE_OPEN
var/datum/gas_mixture/air_contents // internal reservoir
var/full_pressure = FALSE
var/pressure_charging = TRUE
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index a32f5bf576e..a669f23dde6 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -8,7 +8,7 @@
var/giftwrapped = FALSE
var/sortTag = 0
-/obj/structure/bigDelivery/attack_hand(mob/user)
+/obj/structure/bigDelivery/interact(mob/user)
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1)
qdel(src)
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 0e66644c6fd..2125d808abf 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -69,7 +69,6 @@
if(initial(tempCheck.icon_state) != null)
critical_items += I
-
/obj/machinery/rnd/experimentor/Initialize()
. = ..()
@@ -109,8 +108,7 @@
ejectItem()
. = ..(O)
-/obj/machinery/rnd/experimentor/attack_hand(mob/user)
- user.set_machine(src)
+/obj/machinery/rnd/experimentor/ui_interact(mob/user)
var/list/dat = list("")
if(!linked_console)
dat += "Scan for R&D Console"
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 96903c93de4..b8c539b5872 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -1012,13 +1012,8 @@ doesn't have toxins access.
updateUsrDialog()
-/obj/machinery/computer/rdconsole/attack_hand(mob/user)
- if(..())
- return
- interact(user)
-
-/obj/machinery/computer/rdconsole/interact(mob/user)
- user.set_machine(src)
+/obj/machinery/computer/rdconsole/ui_interact(mob/user)
+ . = ..()
var/datum/browser/popup = new(user, "rndconsole", name, 900, 600)
popup.add_stylesheet("techwebs", 'html/browser/techwebs.css')
popup.set_content(generate_ui())
diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm
index 0a8659c795d..0ce53f0e071 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -13,7 +13,6 @@
var/console_link = TRUE //allow console link.
var/requires_console = TRUE
var/disabled = FALSE
- var/shocked = FALSE
var/obj/machinery/computer/rdconsole/linked_console
var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer)
@@ -39,17 +38,7 @@
else
return FALSE
-/obj/machinery/rnd/attack_hand(mob/user)
- if(shocked)
- if(shock(user,50))
- return
- if(panel_open)
- wires.interact(user)
-
/obj/machinery/rnd/attackby(obj/item/O, mob/user, params)
- if (shocked)
- if(shock(user,50))
- return TRUE
if (default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), O))
if(linked_console)
disconnect_console()
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 833bcfaeaee..98da69b6464 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -80,13 +80,6 @@
env.merge(removed)
air_update_turf()
-/obj/machinery/rnd/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves.
- if (disabled)
- return
- if (shocked)
- shock(user,50)
- return
-
/proc/fix_noid_research_servers()
var/list/no_id_servers = list()
var/list/server_ids = list()
@@ -138,10 +131,8 @@
updateUsrDialog()
return
-/obj/machinery/computer/rdservercontrol/attack_hand(mob/user)
- if(..())
- return
- user.set_machine(src)
+/obj/machinery/computer/rdservercontrol/ui_interact(mob/user)
+ . = ..()
var/dat = ""
switch(screen)
@@ -149,8 +140,7 @@
dat += "Connected Servers:
"
for(var/obj/machinery/rnd/server/S in GLOB.machines)
- dat += "[S.name] || "
- dat += "
"
+ dat += "[S.name]
"
//Mining status here
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index 86143559972..ad50f9931aa 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -87,13 +87,13 @@
return
else if(istype(O, /obj/item/storage/bag))
var/obj/item/storage/P = O
- var/loaded = 0
+ var/loaded = FALSE
for(var/obj/G in P.contents)
if(istype(G, /obj/item/reagent_containers/food/snacks/monkeycube))
- loaded = 1
+ loaded = TRUE
monkeys++
qdel(G)
- if (loaded)
+ if(loaded)
to_chat(user, "You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.")
return
else if(istype(O, /obj/item/slimepotion/slime))
diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
index e5c36d09c4e..cf45b91dfe6 100644
--- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
+++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm
@@ -84,11 +84,13 @@
else
return QDEL_HINT_LETMELIVE
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/structure/necropolis_gate/attack_hand(mob/user)
if(locked)
to_chat(user, "It's [open ? "stuck open":"locked"].")
return
toggle_the_gate(user)
+ return ..()
/obj/structure/necropolis_gate/proc/toggle_the_gate(mob/user, legion_damaged)
if(changing_openness)
@@ -151,6 +153,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
else
return QDEL_HINT_LETMELIVE
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/structure/necropolis_gate/legion_gate/attack_hand(mob/user)
if(!open && !changing_openness)
var/safety = alert(user, "You think this might be a bad idea...", "Knock on the door?", "Proceed", "Abort")
@@ -159,7 +162,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
user.visible_message("[user] knocks on [src]...", "You tentatively knock on [src]...")
playsound(user.loc, 'sound/effects/shieldbash.ogg', 100, 1)
sleep(50)
- ..()
+ return ..()
/obj/structure/necropolis_gate/legion_gate/toggle_the_gate(mob/user, legion_damaged)
if(open)
diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm
index 384f22282bf..7dde9a0f9fb 100644
--- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm
+++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm
@@ -9,7 +9,7 @@
density = TRUE
var/win_prob = 5
-/obj/structure/cursed_slot_machine/attack_hand(mob/living/carbon/human/user)
+/obj/structure/cursed_slot_machine/interact(mob/living/carbon/human/user)
if(!istype(user))
return
if(obj_flags & IN_USE)
@@ -58,6 +58,9 @@
qdel(src)
/obj/structure/cursed_money/attack_hand(mob/living/user)
+ . = ..()
+ if(.)
+ return
user.visible_message("[user] opens the bag and \
and removes a die. The bag then vanishes.",
"You open the bag...!\n\
diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm
index 4f2d932b1fc..ee491f17be1 100644
--- a/code/modules/shuttle/computer.dm
+++ b/code/modules/shuttle/computer.dm
@@ -10,11 +10,8 @@
var/admin_controlled
var/no_destination_swap = 0
-/obj/machinery/computer/shuttle/attack_hand(mob/user)
- if(..(user))
- return
- add_fingerprint(usr)
-
+/obj/machinery/computer/shuttle/ui_interact(mob/user)
+ . = ..()
var/list/options = params2list(possible_destinations)
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
var/dat = "Status: [M ? M.getStatusText() : "*Missing*"]
"
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index de669df1437..249cd57f188 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -528,9 +528,6 @@
else
to_chat(usr, "The storage unit will only unlock during a Red or Delta security alert.")
-/obj/item/storage/pod/attack_hand(mob/user)
- return MouseDrop(user)
-
/obj/docking_port/mobile/emergency/backup
name = "backup shuttle"
id = "backup"
diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm
index ea603039bc3..fdf054720f7 100644
--- a/code/modules/shuttle/special.dm
+++ b/code/modules/shuttle/special.dm
@@ -11,6 +11,7 @@
icon_state = "wabbajack_statue"
icon_state_on = "wabbajack_statue_on"
active = FALSE
+ allow_switch_interact = FALSE
var/list/active_tables = list()
var/tables_required = 2
@@ -40,10 +41,6 @@
active = FALSE
update_icon()
-
-/obj/machinery/power/emitter/energycannon/magical/attack_hand(mob/user)
- return
-
/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, params)
return
diff --git a/code/modules/spells/spell_types/spacetime_distortion.dm b/code/modules/spells/spell_types/spacetime_distortion.dm
index eebff54d6be..c46e931aa76 100644
--- a/code/modules/spells/spell_types/spacetime_distortion.dm
+++ b/code/modules/spells/spell_types/spacetime_distortion.dm
@@ -111,6 +111,7 @@
else
walk_link(user)
+//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/effect/cross_action/spacetime_dist/attack_hand(mob/user)
walk_link(user)
diff --git a/code/modules/stock_market/computer.dm b/code/modules/stock_market/computer.dm
index a6429834be9..0db040bb516 100644
--- a/code/modules/stock_market/computer.dm
+++ b/code/modules/stock_market/computer.dm
@@ -8,6 +8,7 @@
var/vmode = 1
circuit = /obj/item/circuitboard/computer/stockexchange
clockwork = TRUE //it'd look weird
+ interaction_flags_atom = INTERACT_ATOM_REQUIRES_DEXTERITY | INTERACT_ATOM_UI_INTERACT | INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_REQUIRES_ANCHORED
light_color = LIGHT_COLOR_GREEN
@@ -20,17 +21,8 @@
return 0
return SSshuttle.points
-/obj/machinery/computer/stockexchange/attack_ai(mob/user)
- return attack_hand(user)
-
-/obj/machinery/computer/stockexchange/attack_robot(mob/user)
- return attack_hand(user)
-
-/obj/machinery/computer/stockexchange/attack_hand(var/mob/user)
- if(..())
- return
- user.machine = src
-
+/obj/machinery/computer/stockexchange/ui_interact(mob/user)
+ . = ..()
var/css={"