From df362db8af86a44b2a9c2fafb20fecf269981472 Mon Sep 17 00:00:00 2001
From: CRUNCH <143041327+Fordoxia@users.noreply.github.com>
Date: Wed, 4 Jun 2025 14:15:57 +0100
Subject: [PATCH] Gives Medical Cyborgs a Holo Stretcher Upgrade (#29352)
* creation
* Update code/game/objects/items/robot/robot_upgrades.dm
Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com>
---------
Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com>
Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
---
.../objects/items/robot/robot_upgrades.dm | 14 ++++
.../structures/stool_bed_chair_nest/bed.dm | 79 +++++++++++++------
.../designs/mechfabricator_designs.dm | 10 +++
3 files changed, 78 insertions(+), 25 deletions(-)
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 8949a55103f..ec0d2af01c4 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -422,6 +422,20 @@
items_to_add = list(/obj/item/kitchen/knife/cheese)
items_to_replace = list(/obj/item/rsf = /obj/item/rsf/executive)
+/***********************/
+// MARK: Medical
+/***********************/
+
+/obj/item/borg/upgrade/holo_stretcher
+ name = "holo stretcher rack upgrade"
+ desc = "An upgrade that allows medical cyborgs to carry holo stretchers in addition to basic roller beds."
+ icon = 'icons/obj/rollerbed.dmi'
+ icon_state = "holo_retracted"
+ origin_tech = "magnets=3;biotech=4;powerstorage=3"
+ require_module = TRUE
+ module_type = /obj/item/robot_module/medical
+ items_to_replace = list(/obj/item/roller_holder = /obj/item/roller_holder/holo)
+
/***********************/
// MARK: Syndicate
/***********************/
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index 2aa7c0db033..d1053079951 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -190,30 +190,27 @@
icon = 'icons/obj/rollerbed.dmi'
icon_state = "folded"
w_class = WEIGHT_CLASS_BULKY
+ new_attack_chain = TRUE
var/extended = /obj/structure/bed/roller
-/obj/item/roller/attack_self__legacy__attackchain(mob/user)
+/obj/item/roller/activate_self(mob/user)
+ if(..())
+ return
+
var/obj/structure/bed/roller/R = new extended(user.loc)
R.add_fingerprint(user)
qdel(src)
-/obj/item/roller/afterattack__legacy__attackchain(atom/target, mob/user, proximity, params)
- if(!proximity)
- return
- if(isturf(target))
- var/turf/T = target
- if(!T.density)
- var/obj/structure/bed/roller/R = new extended(T)
- R.add_fingerprint(user)
- qdel(src)
+/obj/item/roller/interact_with_atom(atom/target, mob/living/user, list/modifiers)
+ if(!isturf(target))
+ return ..()
-/obj/item/roller/attackby__legacy__attackchain(obj/item/W as obj, mob/user as mob, params)
- if(istype(W, /obj/item/roller_holder))
- var/obj/item/roller_holder/RH = W
- if(!RH.held)
- user.visible_message("[user] collects \the [name].", "You collect \the [name].")
- forceMove(RH)
- RH.held = src
+ var/turf/T = target
+ if(!T.density)
+ var/obj/structure/bed/roller/R = new extended(T)
+ R.add_fingerprint(user)
+ qdel(src)
+ return ITEM_INTERACT_COMPLETE
/obj/item/roller/holo
name = "holo stretcher"
@@ -223,9 +220,6 @@
origin_tech = "magnets=3;biotech=4;powerstorage=3"
extended = /obj/structure/bed/roller/holo
-/obj/item/roller/holo/attackby__legacy__attackchain(obj/item/W, mob/user, params)
- return
-
/obj/structure/bed/roller/MouseDrop(over_object, src_location, over_location)
if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src)))
if(!ishuman(usr) || usr.incapacitated())
@@ -243,22 +237,57 @@
desc = "A rack for carrying a collapsed roller bed."
icon = 'icons/obj/rollerbed.dmi'
icon_state = "folded"
+ new_attack_chain = TRUE
var/obj/item/roller/held
+ var/obj/carry_holo = FALSE
/obj/item/roller_holder/New()
..()
held = new /obj/item/roller(src)
-/obj/item/roller_holder/attack_self__legacy__attackchain(mob/user as mob)
- if(!held)
- to_chat(user, "The rack is empty.")
+/obj/item/roller_holder/interact_with_atom(atom/target, mob/living/user, list/modifiers)
+ if(!istype(target, /obj/item/roller))
+ return ..()
+
+ if(istype(target, /obj/item/roller/holo) && !carry_holo)
+ return ITEM_INTERACT_COMPLETE
+
+ if(held)
+ to_chat(user, "[src] is already full!")
+ return ITEM_INTERACT_COMPLETE
+
+ var/obj/item/roller/bed = target
+ user.visible_message(
+ "[user] collects [target].",
+ "You collect [target]."
+ )
+ bed.forceMove(src)
+ held = target
+ return ITEM_INTERACT_COMPLETE
+
+/obj/item/roller_holder/activate_self(mob/user)
+ if(..())
return
- to_chat(user, "You deploy the roller bed.")
- var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(user.loc)
+ if(!held)
+ to_chat(user, "[src] is empty!")
+ return
+
+ to_chat(user, "You deploy [held].")
+ var/obj/structure/bed/roller/R = new held.extended(user.loc)
R.add_fingerprint(user)
QDEL_NULL(held)
+/obj/item/roller_holder/holo
+ name = "holo stretcher rack"
+ desc = "A rack for carrying an undeployed holo stretcher. It can also support a basic roller bed in a pinch."
+ icon_state = "holo_retracted"
+ carry_holo = TRUE
+
+/obj/item/roller_holder/holo/New()
+ ..()
+ held = new /obj/item/roller/holo(src)
+
/*
* Dog beds
*/
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index d8d76c51204..042136fd847 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -1323,6 +1323,16 @@
construction_time = 12 SECONDS
category = list("Cyborg Upgrades")
+/datum/design/borg_upgrade_holo_stretcher
+ name = "Cyborg Upgrade (Holo Stretcher Rack Upgrade)"
+ id = "borg_upgrade_holo_stretcher"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/holo_stretcher
+ req_tech = list("magnets" = 5, "powerstorage" = 4)
+ materials = list(MAT_METAL = 1000, MAT_SILVER = 500, MAT_GLASS = 500, MAT_DIAMOND = 200)
+ construction_time = 12 SECONDS
+ category = list("Cyborg Upgrades")
+
// IPC
/datum/design/ipc_head