[MDB Ignore] Refactors gauze, adds Tourniquets (#95041)

## About The Pull Request

1. Refactors gauze

Removes gauze var from `/stack`, adds a shared parent between tape and
gauze.
Behavior of "sticking thing on limb" is now a bit more generic, with
there being a component to facilitate it and a framework on `/bodypart`

Closes #92990

2. Adds Tourniquets

A first aid item, when attached to a limb it reduces blood loss from
that limb by 90%.
However while attached you walk slower (if on a leg), interact slower
(if on a arm), and yes, you rapidly die if you put it on your head

Paramedic belts have their starting equipment changed again for the
500th time.
Surgical tape -> Tourniquet
Bone gel -> Bonesetter

<img width="604" height="224" alt="image"
src="https://github.com/user-attachments/assets/443dd5c0-44a3-4ccb-9f6a-c561bbf2fba9"
/>

## Why It's Good For The Game

Adds some more variety for field treatment of bleeding wounds, and in
the future we can add things like "improvised tourniquets" or
"improvised splints" with wooden planks.

## Changelog

🆑 Melbert
add: Adds Tourniquets. While attached to a limb, reduces blood loss from
that limb by 90%, but makes you walk / interact slower. (Or if you put
it on your head, you die.)
add: You can purchase Tourniquets from the premium section of the
medical vendor
add: Paramedic belt setup has changed yet again: Surgical tape replaced
with Tourniquet, Bone gel replaced with Bonesetter.
add: You can use all forms of tape as splint - like Gauze. Will secure a
fracture but won't stop your blood from exiting.
refactor: Refactored gauze entirely, report any strangeness with it (or
tape, or tourniquets)
/🆑
This commit is contained in:
MrMelbert
2026-02-15 08:30:57 +01:00
committed by GitHub
parent 9ab3db9b4a
commit ef28e00690
89 changed files with 1021 additions and 607 deletions
+139 -122
View File
@@ -16,7 +16,22 @@
cost = 250
source = /datum/robot_energy_storage/medical
merge_type = /obj/item/stack/medical
apply_verb = "treating"
/// Verb used when applying this object to someone
var/apply_verb = "applying"
/// If set and this used as a splint for a broken bone wound,
/// This is used as a multiplier for applicable slowdowns (lower = better) (also for speeding up burn recoveries)
var/splint_factor
/// Like splint_factor but for burns instead of bone wounds. This is a multiplier used to speed up burn recoveries
var/burn_cleanliness_bonus
/// How much blood flow this stack can absorb if used as a bandage on a cut wound.
/// note that absorption is how much we lower the flow rate, not the raw amount of blood we suck up
var/absorption_capacity
/// How quickly we lower the blood flow on a cut wound we're bandaging.
/// Expected lifetime of this bandage in seconds is thus absorption_capacity/absorption_rate,
/// or until the cut heals, whichever comes first
var/absorption_rate
/// How long it takes to apply it to yourself
var/self_delay = 5 SECONDS
/// How long it takes to apply it to someone else
@@ -369,12 +384,113 @@
user.visible_message(span_suicide("[user] is bludgeoning [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
/obj/item/stack/medical/gauze
name = "medical gauze"
desc = "A roll of elastic cloth, perfect for stabilizing all kinds of wounds, from cuts and burns, to broken bones. "
/obj/item/stack/medical/wrap
name = "wrap"
desc = "Something you can wrap around someone, like a hug."
gender = PLURAL
singular_name = "medical gauze"
icon_state = "gauze"
apply_verb = "wrapping"
works_on_dead = TRUE
/obj/item/stack/medical/wrap/Initialize(mapload, new_amount, merge, list/mat_override, mat_amt)
. = ..()
AddComponent( \
/datum/component/limb_applicable, \
apply_category = LIMB_ITEM_GAUZE, \
override_existing = TRUE, \
can_apply = CALLBACK(src, PROC_REF(can_gauze_limb)), \
on_apply = CALLBACK(src, PROC_REF(on_gauze_limb)), \
)
RegisterSignals(src, list(COMSIG_ITEM_APPLIED_TO_LIMB, COMSIG_ITEM_UNAPPLIED_FROM_LIMB), PROC_REF(update_wounds))
/obj/item/stack/medical/wrap/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
return NONE // uses component
#define LACKS_WOUND 0
#define HAS_WOUND 1
#define HAS_SCANNED_WOUND 2
/// Callback for limb applicability component
/obj/item/stack/medical/wrap/proc/can_gauze_limb(mob/user, mob/living/patient, obj/item/bodypart/limb)
var/wound_tracker = LACKS_WOUND
for(var/datum/wound/woundies as anything in limb.wounds)
if(!(woundies.wound_flags & ACCEPTS_GAUZE))
continue
if(HAS_TRAIT(woundies, TRAIT_WOUND_SCANNED))
wound_tracker = HAS_SCANNED_WOUND
break
wound_tracker = HAS_WOUND
if(wound_tracker == LACKS_WOUND)
patient.balloon_alert(user, LAZYLEN(limb.wounds) ? "can't gauze!" : "no wounds!")
return FALSE
var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE)
if(current_gauze && (current_gauze.absorption_capacity * 1.2 > absorption_capacity)) // ignore if our new wrap is < 20% better than the current one, so someone doesn't bandage it 5 times in a row
patient.balloon_alert(user, pick("already bandaged!", "bandage is clean!")) // good enough
return FALSE
var/treatment_delay = (user == patient ? self_delay : other_delay)
if(wound_tracker == HAS_SCANNED_WOUND)
treatment_delay *= 0.5
if(user == patient)
user.visible_message(
span_warning("[user] begins expertly wrapping the wounds on [p_their()]'s [limb.plaintext_zone] with [src]..."),
span_warning("You begin quickly wrapping the wounds on your [limb.plaintext_zone] with [src], keeping the holo-image indications in mind..."),
visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
)
else
user.visible_message(
span_warning("[user] begins expertly wrapping the wounds on [patient]'s [limb.plaintext_zone] with [src]..."),
span_warning("You begin quickly wrapping the wounds on [patient]'s [limb.plaintext_zone] with [src], keeping the holo-image indications in mind..."),
visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
)
else
user.visible_message(
span_warning("[user] begins wrapping the wounds on [patient]'s [limb.plaintext_zone] with [src]..."),
span_warning("You begin wrapping the wounds on [user == patient ? "your" : "[patient]'s"] [limb.plaintext_zone] with [src]..."),
visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
)
if(heal_begin_sound)
playsound(src, heal_begin_sound, 75, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE)
if(!do_after(user, treatment_delay, patient))
return FALSE
if(heal_end_sound)
playsound(patient, heal_end_sound, 75, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE)
return TRUE
/// Callback for limb applicability component
/obj/item/stack/medical/wrap/proc/on_gauze_limb(mob/user, mob/living/patient, obj/item/bodypart/limb)
patient.balloon_alert(user, "wrapped [limb.plaintext_zone]")
user.visible_message(
span_green("[user] applies [src] to [patient]'s [limb.plaintext_zone]."),
span_green("You bandage the wounds on [user == patient ? "your" : "[patient]'s"] [limb.plaintext_zone]."),
visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
)
if(limb.cached_bleed_rate)
add_mob_blood(patient)
// Dressing burns provides a "one-time" bonus to sanitization and healing
// However, any notable infection will reduce the effectiveness of this bonus
for(var/datum/wound/burn/flesh/wound in limb.wounds)
wound.sanitization += sanitization * (wound.infection > 0.1 ? 0.2 : 1)
wound.flesh_healing += flesh_regeneration * (wound.infection > 0.1 ? 0 : 1)
/// Used via signal to update wounds
/obj/item/stack/medical/wrap/proc/update_wounds(datum/source, obj/item/bodypart/limb)
SIGNAL_HANDLER
for(var/datum/wound/gauzed as anything in limb.wounds)
gauzed.update_inefficiencies()
#undef LACKS_WOUND
#undef HAS_WOUND
#undef HAS_SCANNED_WOUND
/obj/item/stack/medical/wrap/gauze
name = "medical gauze"
desc = "A roll of elastic cloth, perfect for stabilizing all kinds of wounds, from cuts and burns, to broken bones."
singular_name = "medical gauze"
self_delay = 5 SECONDS
other_delay = 2 SECONDS
max_amount = 12
@@ -386,37 +502,16 @@
flesh_regeneration = 5
splint_factor = 0.7
burn_cleanliness_bonus = 0.35
merge_type = /obj/item/stack/medical/gauze
apply_verb = "wrapping"
works_on_dead = TRUE
var/obj/item/bodypart/gauzed_bodypart
merge_type = /obj/item/stack/medical/wrap/gauze
heal_end_sound = SFX_BANDAGE_END
heal_begin_sound = SFX_BANDAGE_BEGIN
drop_sound = SFX_CLOTH_DROP
pickup_sound = SFX_CLOTH_PICKUP
/obj/item/stack/medical/gauze/Initialize(mapload, new_amount, merge, list/mat_override, mat_amt)
. = ..()
register_context()
/obj/item/stack/medical/gauze/grind_results()
/obj/item/stack/medical/wrap/gauze/grind_results()
return list(/datum/reagent/cellulose = 2)
/obj/item/stack/medical/gauze/Destroy(force)
. = ..()
if (gauzed_bodypart)
gauzed_bodypart.current_gauze = null
SEND_SIGNAL(gauzed_bodypart, COMSIG_BODYPART_UNGAUZED, src)
gauzed_bodypart = null
/obj/item/stack/medical/gauze/add_item_context(obj/item/source, list/context, atom/target, mob/living/user)
if(iscarbon(target))
context[SCREENTIP_CONTEXT_LMB] = "Apply Gauze"
return CONTEXTUAL_SCREENTIP_SET
return NONE
/obj/item/stack/medical/gauze/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
/obj/item/stack/medical/wrap/gauze/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
. = ..()
if(isnull(held_item))
return
@@ -424,111 +519,33 @@
context[SCREENTIP_CONTEXT_LMB] = "Shred Into Cloth"
return CONTEXTUAL_SCREENTIP_SET
/obj/item/stack/medical/gauze/try_heal_checks(mob/living/patient, mob/living/user, healed_zone, silent = FALSE)
var/obj/item/bodypart/limb = patient.get_bodypart(healed_zone)
if(isnull(limb))
if(!silent)
patient.balloon_alert(user, "no [parse_zone(healed_zone)]!")
return FALSE
if(!LAZYLEN(limb.wounds))
if(!silent)
patient.balloon_alert(user, "no wounds!") // good problem to have imo
return FALSE
if(limb.current_gauze && (limb.current_gauze.absorption_capacity * 1.2 > absorption_capacity)) // ignore if our new wrap is < 20% better than the current one, so someone doesn't bandage it 5 times in a row
if(!silent)
patient.balloon_alert(user, pick("already bandaged!", "bandage is clean!")) // good enough
return FALSE
for(var/datum/wound/woundies as anything in limb.wounds)
if(woundies.wound_flags & ACCEPTS_GAUZE)
return TRUE
if(!silent)
patient.balloon_alert(user, "can't gauze!")
return FALSE
// gauze is only relevant for wounds, which are handled in the wounds themselves
/obj/item/stack/medical/gauze/try_heal(mob/living/patient, mob/living/user, healed_zone, silent, auto_change_zone, continuous)
var/obj/item/bodypart/limb = patient.get_bodypart(healed_zone)
var/treatment_delay = (user == patient ? self_delay : other_delay)
var/any_scanned = FALSE
for(var/datum/wound/woundies as anything in limb.wounds)
if(HAS_TRAIT(woundies, TRAIT_WOUND_SCANNED))
any_scanned = TRUE
break
if(any_scanned)
treatment_delay *= 0.5
if(user == patient)
if(!silent)
user.visible_message(
span_warning("[user] begins expertly wrapping the wounds on [p_their()]'s [limb.plaintext_zone] with [src]..."),
span_warning("You begin quickly wrapping the wounds on your [limb.plaintext_zone] with [src], keeping the holo-image indications in mind..."),
visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
)
else
if(!silent)
user.visible_message(
span_warning("[user] begins expertly wrapping the wounds on [patient]'s [limb.plaintext_zone] with [src]..."),
span_warning("You begin quickly wrapping the wounds on [patient]'s [limb.plaintext_zone] with [src], keeping the holo-image indications in mind..."),
visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
)
else
if(!silent)
user.visible_message(
span_warning("[user] begins wrapping the wounds on [patient]'s [limb.plaintext_zone] with [src]..."),
span_warning("You begin wrapping the wounds on [user == patient ? "your" : "[patient]'s"] [limb.plaintext_zone] with [src]..."),
visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
)
playsound(src, heal_begin_sound, 75, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE)
if(!do_after(user, treatment_delay, target = patient))
return
if(!silent)
patient.balloon_alert(user, "wrapped [parse_zone(healed_zone)]")
user.visible_message(
span_green("[user] applies [src] to [patient]'s [limb.plaintext_zone]."),
span_green("You bandage the wounds on [user == patient ? "your" : "[patient]'s"] [limb.plaintext_zone]."),
visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
)
if(heal_end_sound)
playsound(patient, heal_end_sound, 75, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE)
if(limb.cached_bleed_rate)
add_mob_blood(patient)
// Dressing burns provides a "one-time" bonus to sanitization and healing
// However, any notable infection will reduce the effectiveness of this bonus
for(var/datum/wound/burn/flesh/wound in limb.wounds)
wound.sanitization += sanitization * (wound.infection > 0.1 ? 0.2 : 1)
wound.flesh_healing += flesh_regeneration * (wound.infection > 0.1 ? 0 : 1)
limb.apply_gauze(src)
/obj/item/stack/medical/gauze/twelve
/obj/item/stack/medical/wrap/gauze/twelve
amount = 12
/obj/item/stack/medical/gauze/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers)
if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness())
/obj/item/stack/medical/wrap/gauze/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if(tool.tool_behaviour == TOOL_WIRECUTTER || tool.get_sharpness())
if(get_amount() < 2)
balloon_alert(user, "not enough gauze!")
return
new /obj/item/stack/sheet/cloth(I.drop_location())
return ITEM_INTERACT_BLOCKING
new /obj/item/stack/sheet/cloth(tool.drop_location())
if(IsReachableBy(user))
user.visible_message(span_notice("[user] cuts [src] into pieces of cloth with [I]."), \
span_notice("You cut [src] into pieces of cloth with [I]."), \
user.visible_message(span_notice("[user] cuts [src] into pieces of cloth with [tool]."), \
span_notice("You cut [src] into pieces of cloth with [tool]."), \
span_hear("You hear cutting."))
else //telekinesis
visible_message(span_notice("[I] cuts [src] into pieces of cloth."), \
visible_message(span_notice("[tool] cuts [src] into pieces of cloth."), \
blind_message = span_hear("You hear cutting."))
use(2)
else
return ..()
return ITEM_INTERACT_SUCCESS
/obj/item/stack/medical/gauze/suicide_act(mob/living/user)
return NONE
/obj/item/stack/medical/wrap/gauze/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] begins tightening [src] around [user.p_their()] neck! It looks like [user.p_they()] forgot how to use medical supplies!"))
return OXYLOSS
/obj/item/stack/medical/gauze/improvised
/obj/item/stack/medical/wrap/gauze/improvised
name = "improvised gauze"
singular_name = "improvised gauze"
desc = "A roll of cloth roughly cut from something that does a decent job of stabilizing wounds, but less efficiently so than real medical gauze."
@@ -541,7 +558,7 @@
absorption_capacity = 4
sanitization = 1
flesh_regeneration = 3
merge_type = /obj/item/stack/medical/gauze/improvised
merge_type = /obj/item/stack/medical/wrap/gauze/improvised
/*
The idea is for the following medical devices to work like a hybrid of the old brute packs and tend wounds,
@@ -531,7 +531,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
new/datum/stack_recipe("science bag", /obj/item/storage/bag/xeno, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("construction bag", /obj/item/storage/bag/construction, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \
null, \
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6, crafting_flags = NONE, category = CAT_TOOLS), \
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/wrap/gauze/improvised, 1, 2, 6, crafting_flags = NONE, category = CAT_TOOLS), \
new/datum/stack_recipe("rag", /obj/item/rag, 1, crafting_flags = NONE, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3, crafting_flags = NONE, category = CAT_FURNITURE), \
new/datum/stack_recipe("double bedsheet", /obj/item/bedsheet/double, 6, crafting_flags = NONE, category = CAT_FURNITURE), \
+3 -18
View File
@@ -58,21 +58,6 @@
// They're here instead of /stack/medical
// because sticky tape can be used as a makeshift bandage or splint
/// Verb used when applying this object to someone
var/apply_verb = "applying"
/// If set and this used as a splint for a broken bone wound,
/// This is used as a multiplier for applicable slowdowns (lower = better) (also for speeding up burn recoveries)
var/splint_factor
/// Like splint_factor but for burns instead of bone wounds. This is a multiplier used to speed up burn recoveries
var/burn_cleanliness_bonus
/// How much blood flow this stack can absorb if used as a bandage on a cut wound.
/// note that absorption is how much we lower the flow rate, not the raw amount of blood we suck up
var/absorption_capacity
/// How quickly we lower the blood flow on a cut wound we're bandaging.
/// Expected lifetime of this bandage in seconds is thus absorption_capacity/absorption_rate,
/// or until the cut heals, whichever comes first
var/absorption_rate
/// Can this stack be used for contruction of girders?
var/usable_for_construction = FALSE
/// Does this stack require a unique girder in order to make a wall?
@@ -231,12 +216,12 @@
if(novariants)
return ..()
if(amount <= (max_amount * (1/3)))
icon_state = initial(icon_state)
icon_state = post_init_icon_state || initial(icon_state)
return ..()
if (amount <= (max_amount * (2/3)))
icon_state = "[initial(icon_state)]_2"
icon_state = "[post_init_icon_state || initial(icon_state)]_2"
return ..()
icon_state = "[initial(icon_state)]_3"
icon_state = "[post_init_icon_state || initial(icon_state)]_3"
return ..()
/obj/item/stack/examine(mob/user)
+28 -24
View File
@@ -1,22 +1,26 @@
/obj/item/stack/sticky_tape
/obj/item/stack/medical/wrap/sticky_tape
name = "sticky tape"
singular_name = "sticky tape"
desc = "Used for sticking to things for sticking said things to people."
icon = 'icons/map_icons/items/_item.dmi'
icon_state = "/obj/item/stack/sticky_tape"
icon_state = "/obj/item/stack/medical/wrap/sticky_tape"
post_init_icon_state = "tape"
var/prefix = "sticky"
w_class = WEIGHT_CLASS_TINY
full_w_class = WEIGHT_CLASS_TINY
item_flags = NOBLUDGEON
amount = 5
max_amount = 5
resistance_flags = FLAMMABLE
self_delay = 8 SECONDS
other_delay = 5 SECONDS
splint_factor = 0.65
merge_type = /obj/item/stack/sticky_tape
merge_type = /obj/item/stack/medical/wrap/sticky_tape
greyscale_config = /datum/greyscale_config/tape
greyscale_colors = "#B2B2B2#BD6A62"
apply_verb = "taping"
heal_begin_sound = 'sound/items/duct_tape/duct_tape_rip.ogg'
heal_end_sound = 'sound/items/duct_tape/duct_tape_rip.ogg'
/// Prefix applied to the target when wrapped with this tape.
var/prefix = "sticky"
/// Embed applied to the target when wrapped with this tape.
var/conferred_embed = /datum/embedding/sticky_tape
///The tape type you get when ripping off a piece of tape.
var/obj/tape_gag = /obj/item/clothing/mask/muzzle/tape
@@ -27,10 +31,10 @@
ignore_throwspeed_threshold = TRUE
immune_traits = null
/obj/item/stack/sticky_tape/grind_results()
/obj/item/stack/medical/wrap/sticky_tape/grind_results()
return list(/datum/reagent/cellulose = 5)
/obj/item/stack/sticky_tape/attack_hand(mob/user, list/modifiers)
/obj/item/stack/medical/wrap/sticky_tape/attack_hand(mob/user, list/modifiers)
if(user.get_inactive_held_item() == src)
if(is_zero_amount(delete_if_zero = TRUE))
return
@@ -45,11 +49,11 @@
return TRUE
return ..()
/obj/item/stack/sticky_tape/examine(mob/user)
/obj/item/stack/medical/wrap/sticky_tape/examine(mob/user)
. = ..()
. += "[span_notice("You could rip a piece off by using an empty hand.")]"
/obj/item/stack/sticky_tape/interact_with_atom(obj/item/target, mob/living/user, list/modifiers)
/obj/item/stack/medical/wrap/sticky_tape/interact_with_atom(obj/item/target, mob/living/user, list/modifiers)
if(!isitem(target))
return NONE
@@ -86,14 +90,14 @@
return ITEM_INTERACT_SUCCESS
/obj/item/stack/sticky_tape/super
/obj/item/stack/medical/wrap/sticky_tape/super
name = "super sticky tape"
singular_name = "super sticky tape"
desc = "Quite possibly the most mischievous substance in the galaxy. Use with extreme lack of caution."
prefix = "super sticky"
conferred_embed = /datum/embedding/sticky_tape/super
splint_factor = 0.4
merge_type = /obj/item/stack/sticky_tape/super
merge_type = /obj/item/stack/medical/wrap/sticky_tape/super
greyscale_colors = "#4D4D4D#75433F"
tape_gag = /obj/item/clothing/mask/muzzle/tape/super
@@ -101,16 +105,16 @@
embed_chance = 100
fall_chance = 0.1
/obj/item/stack/sticky_tape/pointy
/obj/item/stack/medical/wrap/sticky_tape/pointy
name = "pointy tape"
icon = 'icons/map_icons/items/_item.dmi'
icon_state = "/obj/item/stack/sticky_tape/pointy"
icon_state = "/obj/item/stack/medical/wrap/sticky_tape/pointy"
post_init_icon_state = "tape_spikes"
singular_name = "pointy tape"
desc = "Used for sticking to things for sticking said things inside people."
prefix = "pointy"
conferred_embed = /datum/embedding/pointy_tape
merge_type = /obj/item/stack/sticky_tape/pointy
merge_type = /obj/item/stack/medical/wrap/sticky_tape/pointy
greyscale_config = /datum/greyscale_config/tape/spikes
greyscale_colors = "#E64539#808080#AD2F45"
tape_gag = /obj/item/clothing/mask/muzzle/tape/pointy
@@ -118,20 +122,20 @@
/datum/embedding/pointy_tape
ignore_throwspeed_threshold = TRUE
/obj/item/stack/sticky_tape/pointy/super
/obj/item/stack/medical/wrap/sticky_tape/pointy/super
name = "super pointy tape"
singular_name = "super pointy tape"
desc = "You didn't know tape could look so sinister. Welcome to Space Station 13."
prefix = "super pointy"
conferred_embed = /datum/embedding/pointy_tape/super
merge_type = /obj/item/stack/sticky_tape/pointy/super
merge_type = /obj/item/stack/medical/wrap/sticky_tape/pointy/super
greyscale_colors = "#8C0A00#4F4F4F#300008"
tape_gag = /obj/item/clothing/mask/muzzle/tape/pointy/super
/datum/embedding/pointy_tape/super
embed_chance = 100
/obj/item/stack/sticky_tape/surgical
/obj/item/stack/medical/wrap/sticky_tape/surgical
name = "surgical tape"
singular_name = "surgical tape"
desc = "Made for patching broken bones back together alongside bone gel, not for playing pranks."
@@ -139,23 +143,23 @@
conferred_embed = /datum/embedding/sticky_tape/surgical
splint_factor = 0.5
custom_price = PAYCHECK_CREW
merge_type = /obj/item/stack/sticky_tape/surgical
merge_type = /obj/item/stack/medical/wrap/sticky_tape/surgical
greyscale_colors = "#70BAE7#BD6A62"
tape_gag = /obj/item/clothing/mask/muzzle/tape/surgical
/datum/embedding/sticky_tape/surgical
embed_chance = 30
/obj/item/stack/sticky_tape/surgical/get_surgery_tool_overlay(tray_extended)
/obj/item/stack/medical/wrap/sticky_tape/surgical/get_surgery_tool_overlay(tray_extended)
return "tape" + (tray_extended ? "" : "_out")
/obj/item/stack/sticky_tape/duct
/obj/item/stack/medical/wrap/sticky_tape/duct
name = "duct tape"
singular_name = "duct tape"
desc = "Tape designed for sealing punctures, holes and breakages in objects. Engineers swear by this stuff for practically all kinds of repairs. Maybe a little TOO much..."
prefix = "duct taped"
conferred_embed = /datum/embedding/sticky_tape/duct
merge_type = /obj/item/stack/sticky_tape/duct
merge_type = /obj/item/stack/medical/wrap/sticky_tape/duct
var/object_repair_value = 30
amount = 10
max_amount = 10
@@ -163,7 +167,7 @@
/datum/embedding/sticky_tape/duct
embed_chance = 0 //Wrapping something in duct tape is basically ensuring it never embeds.
/obj/item/stack/sticky_tape/duct/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers)
/obj/item/stack/medical/wrap/sticky_tape/duct/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers)
if(!object_repair_value)
return NONE