diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index f0ebefb210a..e7692411b0c 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -157,7 +157,7 @@
return ..(user, distance, "", "It is a [size] item.")
/obj/item/attack_hand(mob/user as mob)
- if (!user) return
+ if (!user || anchored) return
if (hasorgans(user))
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index 9b4db85b166..a4a77104fdf 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -232,12 +232,8 @@
IC.assembly = src
/obj/item/device/electronic_assembly/afterattack(atom/target, mob/user, proximity)
- var/scanned = FALSE
for(var/obj/item/integrated_circuit/input/sensor/S in contents)
- if(S.sense(target))
- scanned = TRUE
- if(scanned)
- visible_message("\The [user] waves \the [src] around [target].")
+ S.sense(target, user)
/obj/item/device/electronic_assembly/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/integrated_circuit))
diff --git a/code/modules/integrated_electronics/core/assemblies/clothing.dm b/code/modules/integrated_electronics/core/assemblies/clothing.dm
index 29f4667550f..71a9c5cd760 100644
--- a/code/modules/integrated_electronics/core/assemblies/clothing.dm
+++ b/code/modules/integrated_electronics/core/assemblies/clothing.dm
@@ -53,18 +53,13 @@
/obj/item/clothing/attackby(obj/item/I, mob/user)
if(IC)
- // This needs to be done in a better way...
- if(I.iscrowbar() || I.isscrewdriver() || istype(I, /obj/item/integrated_circuit) || istype(I, /obj/item/weapon/cell) || istype(I, /obj/item/device/integrated_electronics))
- IC.attackby(I, user)
+ IC.attackby(I, user)
else
..()
/obj/item/clothing/attack_self(mob/user)
if(IC)
- if(IC.opened)
- IC.attack_self(user)
- else
- action_circuit.do_work()
+ IC.attack_self(user)
else
..()
@@ -92,7 +87,7 @@
// Jumpsuit.
/obj/item/clothing/under/circuitry
name = "electronic jumpsuit"
- desc = "It's a wearable case for electronics. This on is a black jumpsuit with wiring weaved into the fabric."
+ desc = "It's a wearable case for electronics. This one is a black jumpsuit with wiring weaved into the fabric."
icon_state = "circuitry"
worn_state = "circuitry"
@@ -117,9 +112,10 @@
if(!A || !proximity)
return 0
- if(istype(action_circuit) && action_circuit.check_then_do_work())
+ if(istype(action_circuit) && action_circuit.check_power())
action_circuit.set_pin_data(IC_OUTPUT, 1, A)
action_circuit.push_data() // we have to not return 1 so we can still do normal stuff like picking things up, etc.
+ action_circuit.activate_pin(1)
return 0
// Glasses.
@@ -128,7 +124,8 @@
desc = "It's a wearable case for electronics. This one is a pair of goggles, with wiring sticking out. \
Could this augment your vision?" // Sadly it won't, or at least not yet.
icon_state = "circuitry"
- item_state = "night" // The on-mob sprite would be identical anyways.
+ item_state = "glasses"
+ off_state = "denight"
/obj/item/clothing/glasses/circuitry/Initialize()
setup_integrated_circuit(/obj/item/device/electronic_assembly/clothing/small)
@@ -138,9 +135,10 @@
if(!A)
return 0
- if(istype(action_circuit) && action_circuit.check_then_do_work())
+ if(istype(action_circuit) && action_circuit.check_power())
action_circuit.set_pin_data(IC_OUTPUT, 1, A)
action_circuit.push_data() // we have to not return 1 so we can still do normal stuff like picking things up, etc.
+ action_circuit.activate_pin(1)
return 0
// Shoes
diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm
index af7553391be..ba9da0f62da 100644
--- a/code/modules/integrated_electronics/subtypes/input.dm
+++ b/code/modules/integrated_electronics/subtypes/input.dm
@@ -189,7 +189,7 @@
power_draw_per_use = 80
/obj/item/integrated_circuit/input/examiner/do_work()
- var/atom/movable/H = get_pin_data_as_type(IC_INPUT, 1, /atom/movable)
+ var/atom/H = get_pin_data_as_type(IC_INPUT, 1, /atom)
var/turf/T = get_turf(src)
if(!istype(H)) //Invalid input
return
@@ -497,8 +497,8 @@
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
power_draw_per_use = 120
-/obj/item/integrated_circuit/input/sensor/proc/sense(var/atom/A)
- if(!src.Adjacent(A))
+/obj/item/integrated_circuit/input/sensor/proc/sense(var/atom/A, mob/user)
+ if(!user.Adjacent(A))
return FALSE
var/ignore_bags = get_pin_data(IC_INPUT, 1)
if(ignore_bags)
@@ -508,6 +508,7 @@
set_pin_data(IC_OUTPUT, 1, A)
push_data()
activate_pin(1)
+ user.visible_message(span("notice", "[user] waves [assembly] around [A]."), span("notice", "You scan [A] with [assembly]."))
return TRUE
/obj/item/integrated_circuit/input/atmo_scanner
@@ -918,7 +919,7 @@
return FALSE
set_pin_data(IC_OUTPUT, 1, A)
push_data()
- to_chat(user, "You scan [A] with [assembly].")
+ user.visible_message(span("notice", "[user] points [assembly] at [A]."), span("notice", "You scan [A] with [assembly]."))
activate_pin(1)
return TRUE
diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm
index 56f31c98df3..332b9629d0b 100644
--- a/code/modules/integrated_electronics/subtypes/manipulation.dm
+++ b/code/modules/integrated_electronics/subtypes/manipulation.dm
@@ -210,7 +210,7 @@
var/mob/living/M = get_pin_data_as_type(IC_INPUT, 1, /mob/living)
if(!istype(M)) //Invalid input
return
- if(!M.Adjacent(T))
+ if(!T.Adjacent(M))
return //Can't reach
to_chat(M, "You feel a sharp shock!")
spark(get_turf(M), 3, 1)
diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm
index 1a46e3495e7..0f85a316982 100644
--- a/code/modules/integrated_electronics/subtypes/reagents.dm
+++ b/code/modules/integrated_electronics/subtypes/reagents.dm
@@ -103,16 +103,16 @@
if(isliving(AM))
var/mob/living/L = AM
var/turf/T = get_turf(AM)
- T.visible_message("[src] is trying to inject [L]!")
+ T.visible_message("[assembly] is trying to inject [L]!")
sleep(3 SECONDS)
if(!L.can_be_injected_by(src))
activate_pin(3)
return
var/contained = reagents.get_reagents()
var/trans = reagents.trans_to_mob(L, transfer_amount, CHEM_BLOOD)
- message_admins("[src] injected \the [L] with [trans]u of [contained].")
+ message_admins("[assembly] injected \the [L] with [trans]u of [contained].")
to_chat(AM, "You feel a tiny prick!")
- visible_message("[src] injects [L]!")
+ visible_message("[assembly] injects [L]!")
else
reagents.trans_to(AM, transfer_amount)
else
@@ -129,7 +129,7 @@
if(!TS.Adjacent(TT))
activate_pin(3)
return
- var/tramount = Clamp(min(transfer_amount, reagents.maximum_volume - reagents.total_volume), 0, reagents.maximum_volume)
+ var/tramount = Clamp(min(transfer_amount, reagents.get_free_space()), 0, reagents.maximum_volume)
if(ismob(target))//Blood!
if(istype(target, /mob/living/carbon))
var/mob/living/carbon/T = target
@@ -145,7 +145,6 @@
else
activate_pin(3)
return
- return
var/datum/reagent/B
if(istype(T, /mob/living/carbon/human))
var/mob/living/carbon/human/H = T
@@ -161,7 +160,7 @@
on_reagent_change()
reagents.handle_reactions()
B = null
- visible_message( "Machine takes a blood sample from [target].")
+ visible_message( "[assembly] takes a blood sample from [target].")
else
activate_pin(3)
return
@@ -222,8 +221,7 @@
source = beaker_slot.get_item(FALSE)
if(!istype(source) || (!istype(target))) //Invalid input
return
- var/turf/T = get_turf(src)
- if((source.Adjacent(T) || istype(beaker_slot)) && target.Adjacent(T))
+ if((src.Adjacent(source) || istype(beaker_slot)) && src.Adjacent(target))
if(!source.reagents || !target.reagents)
return
if(ismob(source) || ismob(target))
diff --git a/html/changelogs/MDP-circfix.yml b/html/changelogs/MDP-circfix.yml
new file mode 100644
index 00000000000..3168f0f9180
--- /dev/null
+++ b/html/changelogs/MDP-circfix.yml
@@ -0,0 +1,4 @@
+author: MoondancerPony
+delete-after: True
+changes:
+ - bugfix: "Fixes a myriad of circuit-related bugs."