diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index 9d941afa7b8..f1898ce9bdf 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -520,6 +520,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
overlay_state = pick(overlay_list)
update_icon()
+/obj/item/lighter/cyborg_unequip(mob/user)
+ if(!lit)
+ return
+ set_lit(FALSE)
+
/obj/item/lighter/suicide_act(mob/living/carbon/user)
if (lit)
user.visible_message("[user] begins holding \the [src]'s flame up to [user.p_their()] face! It looks like [user.p_theyre()] trying to commit suicide!")
diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm
index 6c557d9fbfe..4bc59d88f30 100644
--- a/code/game/objects/items/devices/geiger_counter.dm
+++ b/code/game/objects/items/devices/geiger_counter.dm
@@ -200,9 +200,17 @@
to_chat(user, "You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.")
obj_flags |= EMAGGED
+
+
/obj/item/geiger_counter/cyborg
var/datum/component/mobhook
+/obj/item/geiger_counter/cyborg/cyborg_unequip(mob/user)
+ if(!scanning)
+ return
+ scanning = FALSE
+ update_icon()
+
/obj/item/geiger_counter/cyborg/equipped(mob/user)
. = ..()
if (mobhook && mobhook.parent != user)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index cc3e4932535..2ef1e3e01ae 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -26,13 +26,21 @@ SLIME SCANNER
user.visible_message("[user] begins to emit terahertz-rays into [user.p_their()] brain with [src]! It looks like [user.p_theyre()] trying to commit suicide!")
return TOXLOSS
-/obj/item/t_scanner/attack_self(mob/user)
-
+/obj/item/t_scanner/proc/toggle_on()
on = !on
icon_state = copytext(icon_state, 1, length(icon_state))+"[on]"
-
if(on)
START_PROCESSING(SSobj, src)
+ else
+ STOP_PROCESSING(SSobj, src)
+
+/obj/item/t_scanner/attack_self(mob/user)
+ toggle_on()
+
+/obj/item/t_scanner/cyborg_unequip(mob/user)
+ if(!on)
+ return
+ toggle_on()
/obj/item/t_scanner/process()
if(!on)
diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm
index 89acca4a6c7..4f34048aa45 100644
--- a/code/game/objects/items/melee/energy.dm
+++ b/code/game/objects/items/melee/energy.dm
@@ -139,6 +139,11 @@
sharpness = IS_SHARP
light_color = "#40ceff"
+/obj/item/melee/transforming/energy/sword/cyborg/saw/cyborg_unequip(mob/user)
+ if(!active)
+ return
+ transform_weapon(user, TRUE)
+
/obj/item/melee/transforming/energy/sword/cyborg/saw/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return 0
diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm
index 3d3da08fc14..a628a3c5990 100644
--- a/code/game/objects/items/pinpointer.dm
+++ b/code/game/objects/items/pinpointer.dm
@@ -29,8 +29,11 @@
return ..()
/obj/item/pinpointer/attack_self(mob/living/user)
- active = !active
+ toggle_on()
user.visible_message("[user] [active ? "" : "de"]activates [user.p_their()] pinpointer.", "You [active ? "" : "de"]activate your pinpointer.")
+
+/obj/item/pinpointer/proc/toggle_on()
+ active = !active
playsound(src, 'sound/items/screwdriver2.ogg', 50, 1)
if(active)
START_PROCESSING(SSfastprocess, src)
@@ -94,12 +97,8 @@
/obj/item/pinpointer/crew/attack_self(mob/living/user)
if(active)
- active = FALSE
+ toggle_on()
user.visible_message("[user] deactivates [user.p_their()] pinpointer.", "You deactivate your pinpointer.")
- playsound(src, 'sound/items/screwdriver2.ogg', 50, 1)
- target = null //Restarting the pinpointer forces a target reset
- STOP_PROCESSING(SSfastprocess, src)
- update_icon()
return
var/list/name_counts = list()
@@ -130,11 +129,8 @@
return
target = names[A]
- active = TRUE
+ toggle_on()
user.visible_message("[user] activates [user.p_their()] pinpointer.", "You activate your pinpointer.")
- playsound(src, 'sound/items/screwdriver2.ogg', 50, 1)
- START_PROCESSING(SSfastprocess, src)
- update_icon()
/obj/item/pinpointer/crew/scan_for_target()
if(target)
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index e5e59fd0666..ea0f7c39889 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -304,6 +304,11 @@
desc = "An advanced welder designed to be used in robotic systems."
toolspeed = 0.5
+/obj/item/weldingtool/largetank/cyborg/cyborg_unequip(mob/user)
+ if(!isOn())
+ return
+ switched_on(user)
+
/obj/item/weldingtool/largetank/flamethrower_screwdriver()
return
diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
index ac21716e971..426b13b7e55 100644
--- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm
+++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
@@ -68,6 +68,11 @@
item_flags = NODROP
flags_1 = NONE
+/obj/item/pinpointer/syndicate_cyborg/cyborg_unequip(mob/user)
+ if(!active)
+ return
+ toggle_on()
+
/obj/item/pinpointer/syndicate_cyborg/scan_for_target()
target = null
var/list/possible_targets = list()
diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm
index 9ccb7c0efc8..177ff37ade0 100644
--- a/code/modules/mining/equipment/mineral_scanner.dm
+++ b/code/modules/mining/equipment/mineral_scanner.dm
@@ -43,6 +43,10 @@
var/current_cooldown = 0
var/range = 7
+/obj/item/t_scanner/adv_mining_scanner/cyborg/Initialize()
+ . = ..()
+ toggle_on()
+
/obj/item/t_scanner/adv_mining_scanner/lesser
name = "automatic mining scanner"
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations."
diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm
index a3d5b1ad4f4..f72c92822c9 100644
--- a/code/modules/mob/living/silicon/robot/inventory.dm
+++ b/code/modules/mob/living/silicon/robot/inventory.dm
@@ -5,7 +5,8 @@
/mob/living/silicon/robot/get_active_held_item()
return module_active
-
+/obj/item/proc/cyborg_unequip(mob/user)
+ return
/mob/living/silicon/robot/proc/uneq_module(obj/item/O)
if(!O)
@@ -37,6 +38,7 @@
O.item_flags &= ~DROPDEL //we shouldn't HAVE things with DROPDEL_1 in our modules, but better safe than runtiming horribly
O.forceMove(module) //Return item to module so it appears in its contents, so it can be taken out again.
+ O.cyborg_unequip(src)
hud_used.update_robot_modules_display()
return 1
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 233b360dffc..0b833da96ae 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -525,7 +525,6 @@
/obj/item/weldingtool/mini,
/obj/item/extinguisher/mini,
/obj/item/storage/bag/sheetsnatcher/borg,
- /obj/item/t_scanner/adv_mining_scanner,
/obj/item/gun/energy/kinetic_accelerator/cyborg,
/obj/item/gps/cyborg,
/obj/item/stack/marker_beacon)
@@ -537,6 +536,16 @@
cyborg_base_icon = "miner"
moduleselect_icon = "miner"
hat_offset = 0
+ var/obj/item/t_scanner/adv_mining_scanner/cyborg/mining_scanner //built in memes.
+
+/obj/item/robot_module/miner/rebuild_modules()
+ . = ..()
+ if(!mining_scanner)
+ mining_scanner = new(src)
+
+/obj/item/robot_module/miner/Destroy()
+ QDEL_NULL(mining_scanner)
+ return ..()
/obj/item/robot_module/syndicate
name = "Syndicate Assault"