mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 05:30:05 +01:00
[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:
@@ -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), \
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user