From 2d46829ceb698431535e4870053068eb5be5c5ec Mon Sep 17 00:00:00 2001
From: Toastical <20125180+Toastical@users.noreply.github.com>
Date: Fri, 25 Jul 2025 01:23:45 +0300
Subject: [PATCH] Fix cyborg geiger counter not detecting radiation and migrate
geiger counters to new attack chain (#29753)
* remove rad_protect_contents from cyborgs
* Revert "remove rad_protect_contents from cyborgs"
This reverts commit 8ec9936962987279c91a1db8d7d549c1448c2b96.
* move redirect_rad_act to cyborg geiger counter activate_self
* fix fixing emagged geiger counters
---
.../objects/items/devices/geiger_counter.dm | 74 +++++++++++--------
1 file changed, 43 insertions(+), 31 deletions(-)
diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm
index 0f834296dd8..19e6b6b7c76 100644
--- a/code/game/objects/items/devices/geiger_counter.dm
+++ b/code/game/objects/items/devices/geiger_counter.dm
@@ -34,6 +34,7 @@
var/last_tick_amount_gamma = 0
var/fail_to_receive = 0
var/current_warning = 1
+ new_attack_chain = TRUE
/obj/item/geiger_counter/Initialize(mapload)
. = ..()
@@ -150,26 +151,39 @@
current_tick_amount_gamma += amount
update_icon(UPDATE_ICON_STATE)
-/obj/item/geiger_counter/attack_self__legacy__attackchain(mob/user)
+/obj/item/geiger_counter/activate_self(mob/user)
+ if(..())
+ return FINISH_ATTACK
+
scanning = !scanning
update_icon(UPDATE_ICON_STATE)
to_chat(user, "[bicon(src)] You switch [scanning ? "on" : "off"] [src].")
-/obj/item/geiger_counter/afterattack__legacy__attackchain(atom/target, mob/user)
- . = ..()
- if(user.a_intent == INTENT_HELP)
- if(!emagged)
- user.visible_message("[user] scans [target] with [src].", "You scan [target]'s radiation levels with [src]...")
- addtimer(CALLBACK(src, PROC_REF(scan), target, user), 20, TIMER_UNIQUE) // Let's not have spamming GetAllContents
- else
- user.visible_message("[user] scans [target] with [src].", "You project [src]'s stored radiation into [target]!")
- target.base_rad_act(src, radiation_count_alpha, ALPHA_RAD)
- target.base_rad_act(src, radiation_count_beta, BETA_RAD)
- target.base_rad_act(src, radiation_count_gamma, GAMMA_RAD)
- radiation_count_alpha = 0
- radiation_count_beta = 0
- radiation_count_gamma = 0
- return TRUE
+/obj/item/geiger_counter/interact_with_atom(atom/target, mob/living/user, list/modifiers)
+ if(geiger_act(target, user))
+ return ITEM_INTERACT_COMPLETE
+ return ..()
+
+/obj/item/geiger_counter/ranged_interact_with_atom(atom/target, mob/living/user, list/modifiers)
+ if(geiger_act(target, user))
+ return ITEM_INTERACT_COMPLETE
+ return ..()
+
+/obj/item/geiger_counter/proc/geiger_act(atom/target, mob/living/user)
+ if(user.a_intent != INTENT_HELP || isstorage(target))
+ return FALSE
+ if(!emagged)
+ user.visible_message("[user] scans [target] with [src].", "You scan [target]'s radiation levels with [src]...")
+ addtimer(CALLBACK(src, PROC_REF(scan), target, user), 20, TIMER_UNIQUE) // Let's not have spamming GetAllContents
+ else
+ user.visible_message("[user] scans [target] with [src].", "You project [src]'s stored radiation into [target]!")
+ target.base_rad_act(src, radiation_count_alpha, ALPHA_RAD)
+ target.base_rad_act(src, radiation_count_beta, BETA_RAD)
+ target.base_rad_act(src, radiation_count_gamma, GAMMA_RAD)
+ radiation_count_alpha = 0
+ radiation_count_beta = 0
+ radiation_count_gamma = 0
+ return TRUE
/obj/item/geiger_counter/proc/scan(atom/A, mob/user)
var/rad_strength = get_rad_contamination(A)
@@ -186,13 +200,13 @@
else
to_chat(user, "[bicon(src)] Target is free of radioactive contamination.")
-/obj/item/geiger_counter/attackby__legacy__attackchain(obj/item/I, mob/user, params)
- if(I.tool_behaviour == TOOL_SCREWDRIVER && emagged)
+/obj/item/geiger_counter/screwdriver_act(mob/living/user, obj/item/I)
+ if(emagged)
if(scanning)
to_chat(user, "Turn off [src] before you perform this action!")
return FALSE
user.visible_message("[user] unscrews [src]'s maintenance panel and begins fiddling with its innards...", "You begin resetting [src]...")
- if(!I.use_tool(src, user, 40, I.tool_volume))
+ if(!I.use_tool(src, user, 40, volume = I.tool_volume))
return FALSE
user.visible_message("[user] refastens [src]'s maintenance panel!", "You reset [src] to its factory settings!")
emagged = FALSE
@@ -229,24 +243,22 @@
/obj/item/geiger_counter/cyborg
- var/mob/listeningTo
-/obj/item/geiger_counter/cyborg/equipped(mob/user)
- . = ..()
- if(listeningTo == user)
- return
- if(listeningTo)
- UnregisterSignal(listeningTo, COMSIG_ATOM_RAD_ACT)
- RegisterSignal(user, COMSIG_ATOM_RAD_ACT, PROC_REF(redirect_rad_act))
- listeningTo = user
+/obj/item/geiger_counter/cyborg/activate_self(mob/user)
+ if(..())
+ return FINISH_ATTACK
+
+ if(scanning)
+ RegisterSignal(user, COMSIG_ATOM_RAD_ACT, PROC_REF(redirect_rad_act))
+ else
+ UnregisterSignal(user, COMSIG_ATOM_RAD_ACT)
/obj/item/geiger_counter/cyborg/proc/redirect_rad_act(datum/source, amount, emission_type)
base_rad_act(source, amount, emission_type)
-/obj/item/geiger_counter/cyborg/dropped()
+/obj/item/geiger_counter/cyborg/dropped(mob/user)
. = ..()
- if(listeningTo)
- UnregisterSignal(listeningTo, COMSIG_ATOM_RAD_ACT)
+ UnregisterSignal(user, COMSIG_ATOM_RAD_ACT)
#undef RAD_LEVEL_NORMAL
#undef RAD_LEVEL_MODERATE