removes var/ inside all procs (#19450)

* removes var/ inside all procs

* .

* ugh
This commit is contained in:
Kashargul
2026-05-05 10:55:17 +02:00
committed by GitHub
parent 13162d13a2
commit 5926589c16
1987 changed files with 7376 additions and 7377 deletions
@@ -268,7 +268,7 @@
. += part.size
// Returns true if the circuit made it inside.
/obj/item/electronic_assembly/proc/add_circuit(var/obj/item/integrated_circuit/IC, var/mob/user)
/obj/item/electronic_assembly/proc/add_circuit(obj/item/integrated_circuit/IC, mob/user)
if(!opened)
to_chat(user, span_warning("\The [src] isn't opened, so you can't put anything inside. Try using a crowbar."))
return FALSE
@@ -295,7 +295,7 @@
return TRUE
// Non-interactive version of above that always succeeds, intended for build-in circuits that get added on assembly initialization.
/obj/item/electronic_assembly/proc/force_add_circuit(var/obj/item/integrated_circuit/IC)
/obj/item/electronic_assembly/proc/force_add_circuit(obj/item/integrated_circuit/IC)
IC.forceMove(src)
IC.assembly = src
@@ -313,7 +313,7 @@
for(var/obj/item/integrated_circuit/input/reference_grabber/G in contents)
G.afterattack(target, user, proximity, null)
/obj/item/electronic_assembly/attackby(var/obj/item/I, var/mob/user)
/obj/item/electronic_assembly/attackby(obj/item/I, mob/user)
if(can_anchor && I.has_tool_quality(TOOL_WRENCH))
anchored = !anchored
to_chat(user, span_notice("You've [anchored ? "" : "un"]secured \the [src] to \the [get_turf(src)]."))
@@ -487,5 +487,5 @@
return ..() // Fall back to default behavior if no access_card
// Returns TRUE if I is something that could/should have a valid interaction. Used to tell circuitclothes to hit the circuit with something instead of the clothes
/obj/item/electronic_assembly/proc/is_valid_tool(var/obj/item/I)
/obj/item/electronic_assembly/proc/is_valid_tool(obj/item/I)
return I.has_tool_quality(TOOL_CROWBAR) || I.has_tool_quality(TOOL_SCREWDRIVER) || istype(I, /obj/item/integrated_circuit) || istype(I, /obj/item/cell/device) || istype(I, /obj/item/integrated_electronics)
@@ -44,7 +44,7 @@
if(EA)
EA.attack_self(user)
/obj/item/assembly/electronic_assembly/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
/obj/item/assembly/electronic_assembly/pulsed(radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
if(EA)
for(var/obj/item/integrated_circuit/built_in/device_input/I in EA.contents)
I.do_work()
@@ -1,4 +1,4 @@
/obj/item/integrated_circuit/proc/setup_io(var/list/io_list, var/io_type, var/list/io_default_list)
/obj/item/integrated_circuit/proc/setup_io(list/io_list, io_type, list/io_default_list)
var/list/io_list_copy = io_list.Copy()
io_list.Cut()
var/i = 1
@@ -19,21 +19,21 @@
io_list.Add(new io_type(src, io_entry, default_data))
i++
/obj/item/integrated_circuit/proc/set_pin_data(var/pin_type, var/pin_number, datum/new_data)
/obj/item/integrated_circuit/proc/set_pin_data(pin_type, pin_number, datum/new_data)
if (istype(new_data) && !isweakref(new_data))
new_data = WEAKREF(new_data)
var/datum/integrated_io/pin = get_pin_ref(pin_type, pin_number)
return pin.write_data_to_pin(new_data)
/obj/item/integrated_circuit/proc/get_pin_data(var/pin_type, var/pin_number)
/obj/item/integrated_circuit/proc/get_pin_data(pin_type, pin_number)
var/datum/integrated_io/pin = get_pin_ref(pin_type, pin_number)
return pin.get_data()
/obj/item/integrated_circuit/proc/get_pin_data_as_type(var/pin_type, var/pin_number, var/as_type)
/obj/item/integrated_circuit/proc/get_pin_data_as_type(pin_type, pin_number, as_type)
var/datum/integrated_io/pin = get_pin_ref(pin_type, pin_number)
return pin.data_as_type(as_type)
/obj/item/integrated_circuit/proc/activate_pin(var/pin_number)
/obj/item/integrated_circuit/proc/activate_pin(pin_number)
var/datum/integrated_io/activate/A = activators[pin_number]
A.push_data()
@@ -44,7 +44,7 @@
return data.resolve()
return data
/obj/item/integrated_circuit/proc/get_pin_ref(var/pin_type, var/pin_number)
/obj/item/integrated_circuit/proc/get_pin_ref(pin_type, pin_number)
switch(pin_type)
if(IC_INPUT)
if(pin_number > inputs.len)
@@ -60,7 +60,7 @@
return activators[pin_number]
return null
/obj/item/integrated_circuit/proc/handle_wire(var/datum/integrated_io/pin, var/obj/item/integrated_electronics/tool)
/obj/item/integrated_circuit/proc/handle_wire(datum/integrated_io/pin, obj/item/integrated_electronics/tool)
if(istype(tool, /obj/item/integrated_electronics/wirer))
var/obj/item/integrated_electronics/wirer/wirer = tool
if(pin)
@@ -257,7 +257,7 @@ a creative player the means to solve many problems. Circuits are held inside an
return TRUE // Battery has enough.
return FALSE // Not enough power.
/obj/item/integrated_circuit/proc/check_then_do_work(var/ignore_power = FALSE)
/obj/item/integrated_circuit/proc/check_then_do_work(ignore_power = FALSE)
if(world.time < next_use) // All intergrated circuits have an internal cooldown, to protect from spam.
return
if(power_draw_per_use && !ignore_power)
@@ -25,7 +25,7 @@ D [1]/ ||
var/list/linked = list()
var/io_type = DATA_CHANNEL
/datum/integrated_io/New(var/newloc, var/name, var/new_data)
/datum/integrated_io/New(newloc, name, new_data)
..()
src.name = name
if(!isnull(new_data))
@@ -44,14 +44,14 @@ D [1]/ ||
return holder.tgui_host()
/datum/integrated_io/proc/data_as_type(var/as_type)
/datum/integrated_io/proc/data_as_type(as_type)
if(!isweakref(data))
return
var/datum/weakref/w = data
var/output = w.resolve()
return istype(output, as_type) ? output : null
/datum/integrated_io/proc/display_data(var/input)
/datum/integrated_io/proc/display_data(input)
if(isnull(input))
return "(null)" // Empty data means nothing to show.
@@ -110,7 +110,7 @@ list[](
/datum/integrated_io/activate/scramble()
push_data()
/datum/integrated_io/proc/write_data_to_pin(var/new_data)
/datum/integrated_io/proc/write_data_to_pin(new_data)
if(isnull(new_data) || isnum(new_data) || istext(new_data) || isweakref(new_data)) // Anything else is a type we don't want.
if(istext(new_data))
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
@@ -146,7 +146,7 @@ list[](
//Now that we're removed from them, we gotta remove them from us.
src.linked.Remove(their_io)
/datum/integrated_io/proc/ask_for_data_type(mob/user, var/default, var/list/allowed_data_types = list("string","number","null"))
/datum/integrated_io/proc/ask_for_data_type(mob/user, default, list/allowed_data_types = list("string","number","null"))
var/type_to_use = tgui_input_list(user, "Please choose a type to use.","[src] type setting", allowed_data_types)
if(!holder.check_interactivity(user))
return
@@ -62,7 +62,7 @@
else
return ..()
/obj/item/integrated_circuit_printer/attackby(var/obj/item/O, var/mob/user)
/obj/item/integrated_circuit_printer/attackby(obj/item/O, mob/user)
if(istype(O,/obj/item/stack/material))
var/obj/item/stack/material/stack = O
if(stack.material.name == MAT_STEEL)
@@ -7,7 +7,7 @@
var/new_data = !data
write_data_to_pin(new_data)
/datum/integrated_io/boolean/write_data_to_pin(var/new_data)
/datum/integrated_io/boolean/write_data_to_pin(new_data)
if(new_data == FALSE || new_data == TRUE)
data = new_data
holder.on_data_written()
@@ -19,7 +19,7 @@
/datum/integrated_io/boolean/display_pin_type()
return IC_FORMAT_BOOLEAN
/datum/integrated_io/boolean/display_data(var/input)
/datum/integrated_io/boolean/display_data(input)
if(data == TRUE)
return "(True)"
return "(False)"
@@ -8,7 +8,7 @@
to_chat(user, span_notice("You input [new_data ? "new_data" : "NULL"] into the pin."))
write_data_to_pin(new_data)
/datum/integrated_io/char/write_data_to_pin(var/new_data)
/datum/integrated_io/char/write_data_to_pin(new_data)
if(isnull(new_data) || istext(new_data))
if(length(new_data) > 1)
return
@@ -8,7 +8,7 @@
to_chat(user, span_notice("You input a <font color='[new_data]'>new color</font> into the pin."))
write_data_to_pin(new_data)
/datum/integrated_io/color/write_data_to_pin(var/new_data)
/datum/integrated_io/color/write_data_to_pin(new_data)
// Since this is storing the color as a string hex color code, we need to make sure it's actually one.
if(isnull(new_data) || istext(new_data))
if(istext(new_data))
@@ -38,7 +38,7 @@
/datum/integrated_io/color/display_pin_type()
return IC_FORMAT_COLOR
/datum/integrated_io/color/display_data(var/input)
/datum/integrated_io/color/display_data(input)
if(!isnull(data))
return "(<font color='[data]'>[data]</font>)"
return ..()
@@ -19,7 +19,7 @@
to_chat(user, span_notice("You input [new_data] into the pin."))
write_data_to_pin(new_data)
/datum/integrated_io/dir/write_data_to_pin(var/new_data)
/datum/integrated_io/dir/write_data_to_pin(new_data)
if(isnull(new_data) || (new_data in (GLOB.alldirs + list(UP, DOWN))))
data = new_data
holder.on_data_written()
@@ -27,7 +27,7 @@
/datum/integrated_io/dir/display_pin_type()
return IC_FORMAT_DIR
/datum/integrated_io/dir/display_data(var/input)
/datum/integrated_io/dir/display_data(input)
if(!isnull(data))
return "([dir2text(data)])"
return ..()
@@ -27,19 +27,19 @@
popup.set_content(t)
popup.open()
/datum/integrated_io/list/proc/add_to_list(mob/user, var/new_entry)
/datum/integrated_io/list/proc/add_to_list(mob/user, new_entry)
if(!new_entry && user)
new_entry = ask_for_data_type(user)
if(is_valid(new_entry))
Add(new_entry)
/datum/integrated_io/list/proc/Add(var/new_entry)
/datum/integrated_io/list/proc/Add(new_entry)
var/list/my_list = data
if(my_list.len > IC_MAX_LIST_LENGTH)
my_list.Cut(Start=1,End=2)
my_list.Add(new_entry)
/datum/integrated_io/list/proc/remove_from_list_by_position(mob/user, var/position)
/datum/integrated_io/list/proc/remove_from_list_by_position(mob/user, position)
var/list/my_list = data
if(!my_list.len)
to_chat(user, span_warning("The list is empty, there's nothing to remove."))
@@ -50,7 +50,7 @@
if(target_entry)
my_list.Remove(target_entry)
/datum/integrated_io/list/proc/remove_from_list(mob/user, var/target_entry)
/datum/integrated_io/list/proc/remove_from_list(mob/user, target_entry)
var/list/my_list = data
if(!my_list.len)
to_chat(user, span_warning("The list is empty, there's nothing to remove."))
@@ -60,7 +60,7 @@
if(target_entry)
my_list.Remove(target_entry)
/datum/integrated_io/list/proc/edit_in_list(mob/user, var/target_entry)
/datum/integrated_io/list/proc/edit_in_list(mob/user, target_entry)
var/list/my_list = data
if(!my_list.len)
to_chat(user, span_warning("The list is empty, there's nothing to modify."))
@@ -72,7 +72,7 @@
if(edited_entry)
target_entry = edited_entry
/datum/integrated_io/list/proc/edit_in_list_by_position(mob/user, var/position)
/datum/integrated_io/list/proc/edit_in_list_by_position(mob/user, position)
var/list/my_list = data
if(!my_list.len)
to_chat(user, span_warning("The list is empty, there's nothing to modify."))
@@ -85,7 +85,7 @@
if(edited_entry)
target_entry = edited_entry
/datum/integrated_io/list/proc/swap_inside_list(mob/user, var/first_target, var/second_target)
/datum/integrated_io/list/proc/swap_inside_list(mob/user, first_target, second_target)
var/list/my_list = data
if(my_list.len <= 1)
to_chat(user, span_warning("The list is empty, or too small to do any meaningful swapping."))
@@ -111,7 +111,7 @@
my_list = shuffle(my_list)
push_data()
/datum/integrated_io/list/write_data_to_pin(var/new_data)
/datum/integrated_io/list/write_data_to_pin(new_data)
if(islist(new_data))
var/list/new_list = new_data
data = new_list.Copy()
@@ -9,7 +9,7 @@
to_chat(user, span_notice("You input [new_data] into the pin."))
write_data_to_pin(new_data)
/datum/integrated_io/number/write_data_to_pin(var/new_data)
/datum/integrated_io/number/write_data_to_pin(new_data)
if(isnull(new_data) || isnum(new_data))
data = new_data
holder.on_data_written()
@@ -12,7 +12,7 @@
else
write_data_to_pin(null)
/datum/integrated_io/ref/write_data_to_pin(var/new_data)
/datum/integrated_io/ref/write_data_to_pin(new_data)
if(isnull(new_data) || isweakref(new_data))
data = new_data
holder.on_data_written()
@@ -10,7 +10,7 @@
to_chat(user, span_notice("You input [new_data ? "new_data" : "NULL"] into the pin."))
write_data_to_pin(new_data)
/datum/integrated_io/string/write_data_to_pin(var/new_data)
/datum/integrated_io/string/write_data_to_pin(new_data)
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
if(isnull(new_data) || istext(new_data))
data = new_data
@@ -19,7 +19,7 @@
/obj/item/integrated_electronics/wirer/update_icon()
icon_state = "wirer-[mode]"
/obj/item/integrated_electronics/wirer/proc/wire(var/datum/integrated_io/io, mob/user)
/obj/item/integrated_electronics/wirer/proc/wire(datum/integrated_io/io, mob/user)
if(!io.holder.assembly)
to_chat(user, span_warning("\The [io.holder] needs to be secured inside an assembly first."))
return
@@ -155,7 +155,7 @@
now off."))
accepting_refs = 0
/obj/item/integrated_electronics/debugger/proc/write_data(var/datum/integrated_io/io, mob/user)
/obj/item/integrated_electronics/debugger/proc/write_data(datum/integrated_io/io, mob/user)
if(io.io_type == DATA_CHANNEL)
io.write_data_to_pin(data_to_write)
var/data_to_show = data_to_write
@@ -194,7 +194,7 @@
else
icon_state = "multitool"
/obj/item/multitool/proc/wire(var/datum/integrated_io/io, mob/user)
/obj/item/multitool/proc/wire(datum/integrated_io/io, mob/user)
if(!io.holder.assembly)
to_chat(user, span_warning("\The [io.holder] needs to be secured inside an assembly first."))
return
@@ -224,7 +224,7 @@
update_icon()
/obj/item/multitool/proc/unwire(var/datum/integrated_io/io1, var/datum/integrated_io/io2, mob/user)
/obj/item/multitool/proc/unwire(datum/integrated_io/io1, datum/integrated_io/io2, mob/user)
if(!io1.linked.len || !io2.linked.len)
to_chat(user, span_warning("There is nothing connected to the data channel."))
return
@@ -58,7 +58,7 @@
complexity = 10
spawn_flags = IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/passive/power/metabolic_siphon/proc/test_validity(var/mob/living/carbon/human/host)
/obj/item/integrated_circuit/passive/power/metabolic_siphon/proc/test_validity(mob/living/carbon/human/host)
if(!host || host.isSynthetic() || host.stat == DEAD || host.nutrition <= 10)
return FALSE // Robots and dead people don't have a metabolism.
return TRUE
@@ -80,7 +80,7 @@
more often due to this. This device will fail if used inside organic entities."
spawn_flags = IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/passive/power/metabolic_siphon/synthetic/test_validity(var/mob/living/carbon/human/host)
/obj/item/integrated_circuit/passive/power/metabolic_siphon/synthetic/test_validity(mob/living/carbon/human/host)
if(!host || !host.isSynthetic() || host.stat == DEAD || host.nutrition <= 10)
return FALSE // This time we don't want a metabolism.
return TRUE
@@ -46,7 +46,7 @@
exonet.address = target_address
address_spoofed = TRUE
/obj/item/integrated_circuit/illegal/receive_exonet_message(var/atom/origin_atom, var/origin_address, var/message, var/text)
/obj/item/integrated_circuit/illegal/receive_exonet_message(atom/origin_atom, origin_address, message, text)
set_pin_data(IC_OUTPUT, 1, origin_address)
set_pin_data(IC_OUTPUT, 2, message)
set_pin_data(IC_OUTPUT, 3, text)
@@ -558,7 +558,7 @@
message = "text"
exonet.send_message(target_address, message, text)
/obj/item/integrated_circuit/input/receive_exonet_message(var/atom/origin_atom, var/origin_address, var/message, var/text)
/obj/item/integrated_circuit/input/receive_exonet_message(atom/origin_atom, origin_address, message, text)
set_pin_data(IC_OUTPUT, 1, origin_address)
set_pin_data(IC_OUTPUT, 2, message)
set_pin_data(IC_OUTPUT, 3, text)
@@ -720,7 +720,7 @@
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
power_draw_per_use = 120
/obj/item/integrated_circuit/input/sensor/proc/scan(var/atom/A)
/obj/item/integrated_circuit/input/sensor/proc/scan(atom/A)
var/ignore_bags = get_pin_data(IC_INPUT, 1)
if(ignore_bags)
if(istype(A, /obj/item/storage))
@@ -29,7 +29,7 @@
activate_pin(3)
..()
/obj/item/integrated_circuit/logic/binary/proc/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B)
/obj/item/integrated_circuit/logic/binary/proc/do_compare(datum/integrated_io/A, datum/integrated_io/B)
return FALSE
/obj/item/integrated_circuit/logic/unary
@@ -45,7 +45,7 @@
..()
activate_pin(2)
/obj/item/integrated_circuit/logic/unary/proc/do_check(var/datum/integrated_io/A)
/obj/item/integrated_circuit/logic/unary/proc/do_check(datum/integrated_io/A)
return FALSE
/obj/item/integrated_circuit/logic/binary/equals
@@ -55,7 +55,7 @@
complexity = 1
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/logic/binary/equals/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B)
/obj/item/integrated_circuit/logic/binary/equals/do_compare(datum/integrated_io/A, datum/integrated_io/B)
if(istext(A.data) && istext(B.data)) // Also compare strings to better match circuit description.
return lowertext(A.data) == lowertext(B.data)
return A.data == B.data
@@ -162,7 +162,7 @@
complexity = 1
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/logic/binary/not_equals/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B)
/obj/item/integrated_circuit/logic/binary/not_equals/do_compare(datum/integrated_io/A, datum/integrated_io/B)
if(istext(A.data) && istext(B.data)) // Also compare strings to better match circuit description.
return lowertext(A.data) != lowertext(B.data)
return A.data != B.data
@@ -174,7 +174,7 @@
complexity = 1
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/logic/binary/and/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B)
/obj/item/integrated_circuit/logic/binary/and/do_compare(datum/integrated_io/A, datum/integrated_io/B)
return A.data && B.data
/obj/item/integrated_circuit/logic/binary/or
@@ -184,7 +184,7 @@
complexity = 1
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/logic/binary/or/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B)
/obj/item/integrated_circuit/logic/binary/or/do_compare(datum/integrated_io/A, datum/integrated_io/B)
return A.data || B.data
/obj/item/integrated_circuit/logic/binary/less_than
@@ -194,7 +194,7 @@
complexity = 1
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/logic/binary/less_than/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B)
/obj/item/integrated_circuit/logic/binary/less_than/do_compare(datum/integrated_io/A, datum/integrated_io/B)
return A.data < B.data
/obj/item/integrated_circuit/logic/binary/less_than_or_equal
@@ -204,7 +204,7 @@
complexity = 1
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/logic/binary/less_than_or_equal/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B)
/obj/item/integrated_circuit/logic/binary/less_than_or_equal/do_compare(datum/integrated_io/A, datum/integrated_io/B)
return A.data <= B.data
/obj/item/integrated_circuit/logic/binary/greater_than
@@ -214,7 +214,7 @@
complexity = 1
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/logic/binary/greater_than/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B)
/obj/item/integrated_circuit/logic/binary/greater_than/do_compare(datum/integrated_io/A, datum/integrated_io/B)
return A.data > B.data
/obj/item/integrated_circuit/logic/binary/greater_than_or_equal
@@ -224,7 +224,7 @@
complexity = 1
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
/obj/item/integrated_circuit/logic/binary/greater_than_or_equal/do_compare(var/datum/integrated_io/A, var/datum/integrated_io/B)
/obj/item/integrated_circuit/logic/binary/greater_than_or_equal/do_compare(datum/integrated_io/A, datum/integrated_io/B)
return A.data >= B.data
/obj/item/integrated_circuit/logic/unary/not
@@ -235,7 +235,7 @@
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
activators = list("invert" = IC_PINTYPE_PULSE_IN, "on inverted" = IC_PINTYPE_PULSE_OUT)
/obj/item/integrated_circuit/logic/unary/not/do_check(var/datum/integrated_io/A)
/obj/item/integrated_circuit/logic/unary/not/do_check(datum/integrated_io/A)
return !A.data
/obj/item/integrated_circuit/logic/toggler // Allows parts of circuits to be toggled on/off.
@@ -29,7 +29,7 @@
installed_gun = null // It will be qdel'd by ..() if still in our contents
return ..()
/obj/item/integrated_circuit/manipulation/weapon_firing/attackby(var/obj/O, var/mob/user)
/obj/item/integrated_circuit/manipulation/weapon_firing/attackby(obj/O, mob/user)
if(istype(O, /obj/item/gun))
var/obj/item/gun/gun = O
if(installed_gun)
@@ -181,7 +181,7 @@
detach_grenade()
. =..()
/obj/item/integrated_circuit/manipulation/grenade/attackby(var/obj/item/grenade/G, var/mob/user)
/obj/item/integrated_circuit/manipulation/grenade/attackby(obj/item/grenade/G, mob/user)
if(istype(G))
if(attached_grenade)
to_chat(user, span_warning("There is already a grenade attached!"))
@@ -213,7 +213,7 @@
log_and_message_admins("activated a grenade assembly. Last touches: Assembly: [holder.forensic_data?.get_lastprint()] Circuit: [forensic_data?.get_lastprint()] Grenade: [attached_grenade.forensic_data?.get_lastprint()]")
// These procs do not relocate the grenade, that's the callers responsibility
/obj/item/integrated_circuit/manipulation/grenade/proc/attach_grenade(var/obj/item/grenade/G)
/obj/item/integrated_circuit/manipulation/grenade/proc/attach_grenade(obj/item/grenade/G)
attached_grenade = G
RegisterSignal(attached_grenade, COMSIG_OBSERVER_DESTROYED, /obj/item/integrated_circuit/manipulation/grenade/proc/detach_grenade)
size += G.w_class