mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 00:29:02 +01:00
## About The Pull Request 1. Adds stasis bodybags, unlocked with cryogenics tech These bodybags are portable forms of stasis. However, they wear down with use, only being able to keep someone in stasis for about 2, 3 minutes before falling apart. Bodyparts and organs put in the bodybag are also frozen, allowing you to maintain parts of gibbed people. You can med scan through the walls of the stasis bag as well. Also you can med scan through holographics bodybags. 2. Adds triage cards to the medical vendor Triage cards are small pieces of paper you can write on and stick to people. They're color coded according to severity, and are intended to be used in mass casualty events for prioritizing patients. 3. You can pin paper to bodybags You can pin a sheet of paper to bodybags that people can read, be it autopsy or whatever. 4. Updates paper interaction code slightly We have new procs for allowing interactions rather that snowflakes 5. Other forms of stasis apply tumor suppression Oversight? ## Why It's Good For The Game I made these a while back to just give medical doctors a few more tools to play around with beyond the meta tools. Just to get more immersed into the larp. Otherwise, stasis bodybags gives Paramedics a tangible upgrade(if you can call it that), offering a safer way to retrieve patients ## Changelog 🆑 Melbert add: Adds stasis bodybags, unlocked with cryo tech. They put its occupants (organ or mobs) in stasis, but wear down over time. add: Adds triage cards to the medical vendor, a flavor item docs can use during mass casualty events. qol: You can pin papers to closed bodybags. Keep organized with your autopsies. qol: You can interact with papers in folders and on clipboards qol: All forms of stasis stop brain tumors /🆑
154 lines
6.6 KiB
Plaintext
154 lines
6.6 KiB
Plaintext
|
|
/obj/item/bodybag
|
|
name = "body bag"
|
|
desc = "A folded bag designed for the storage and transportation of cadavers."
|
|
icon = 'icons/obj/medical/bodybag.dmi'
|
|
icon_state = "bodybag_folded"
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
///Stored path we use for spawning a new body bag entity when unfolded.
|
|
var/unfoldedbag_path = /obj/structure/closet/body_bag
|
|
|
|
/obj/item/bodybag/attack_self(mob/user)
|
|
if(user.is_holding(src))
|
|
deploy_bodybag(user, get_turf(user))
|
|
else
|
|
deploy_bodybag(user, get_turf(src))
|
|
|
|
/obj/item/bodybag/interact_with_atom(atom/interacting_with, mob/living/user, flags)
|
|
if(isopenturf(interacting_with))
|
|
deploy_bodybag(user, interacting_with)
|
|
return ITEM_INTERACT_SUCCESS
|
|
return NONE
|
|
|
|
/obj/item/bodybag/attempt_pickup(mob/user)
|
|
// can't pick ourselves up if we are inside of the bodybag, else very weird things may happen
|
|
if(contains(user))
|
|
return TRUE
|
|
return ..()
|
|
|
|
/**
|
|
* Creates a new body bag item when unfolded, at the provided location, replacing the body bag item.
|
|
* * mob/user: User opening the body bag.
|
|
* * atom/location: the place/entity/mob where the body bag is being deployed from.
|
|
*/
|
|
/obj/item/bodybag/proc/deploy_bodybag(mob/user, atom/location)
|
|
var/obj/structure/closet/body_bag/item_bag = new unfoldedbag_path(location)
|
|
item_bag.open(user)
|
|
item_bag.add_fingerprint(user)
|
|
item_bag.foldedbag_instance = src
|
|
moveToNullspace()
|
|
return item_bag
|
|
|
|
/obj/item/bodybag/suicide_act(mob/living/user)
|
|
if(isopenturf(user.loc))
|
|
user.visible_message(span_suicide("[user] is crawling into [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
|
|
var/obj/structure/closet/body_bag/R = new unfoldedbag_path(user.loc)
|
|
R.add_fingerprint(user)
|
|
qdel(src)
|
|
user.forceMove(R)
|
|
playsound(src, 'sound/items/zip/zip.ogg', 15, TRUE, -3)
|
|
return OXYLOSS
|
|
|
|
// Bluespace bodybag
|
|
|
|
/obj/item/bodybag/bluespace
|
|
name = "bluespace body bag"
|
|
desc = "A folded bluespace body bag designed for the storage and transportation of cadavers."
|
|
icon = 'icons/obj/medical/bodybag.dmi'
|
|
icon_state = "bluebodybag_folded"
|
|
unfoldedbag_path = /obj/structure/closet/body_bag/bluespace
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
item_flags = NO_MAT_REDEMPTION
|
|
|
|
/obj/item/bodybag/bluespace/examine(mob/user)
|
|
. = ..()
|
|
if(contents.len)
|
|
var/s = contents.len == 1 ? "" : "s"
|
|
. += span_notice("You can make out the shape[s] of [contents.len] object[s] through the fabric.")
|
|
|
|
/obj/item/bodybag/bluespace/Destroy()
|
|
for(var/atom/movable/A in contents)
|
|
A.forceMove(get_turf(src))
|
|
if(isliving(A))
|
|
to_chat(A, span_notice("You suddenly feel the space around you torn apart! You're free!"))
|
|
return ..()
|
|
|
|
/obj/item/bodybag/bluespace/deploy_bodybag(mob/user, atom/location)
|
|
var/obj/structure/closet/body_bag/item_bag = new unfoldedbag_path(location)
|
|
for(var/atom/movable/inside in contents)
|
|
inside.forceMove(item_bag)
|
|
if(isliving(inside))
|
|
to_chat(inside, span_notice("You suddenly feel air around you! You're free!"))
|
|
item_bag.open(user)
|
|
item_bag.add_fingerprint(user)
|
|
item_bag.foldedbag_instance = src
|
|
moveToNullspace()
|
|
return item_bag
|
|
|
|
/obj/item/bodybag/bluespace/container_resist_act(mob/living/user)
|
|
if(user.incapacitated)
|
|
to_chat(user, span_warning("You can't get out while you're restrained like this!"))
|
|
return
|
|
user.changeNext_move(CLICK_CD_BREAKOUT)
|
|
user.last_special = world.time + CLICK_CD_BREAKOUT
|
|
to_chat(user, span_notice("You claw at the fabric of [src], trying to tear it open..."))
|
|
to_chat(loc, span_warning("Someone starts trying to break free of [src]!"))
|
|
if(!do_after(user, 12 SECONDS, src, timed_action_flags = (IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM)))
|
|
return
|
|
// you are still in the bag? time to go unless you KO'd, honey!
|
|
// if they escape during this time and you rebag them the timer is still clocking down and does NOT reset so they can very easily get out.
|
|
if(user.incapacitated)
|
|
to_chat(loc, span_warning("The pressure subsides. It seems that they've stopped resisting..."))
|
|
return
|
|
loc.visible_message(span_warning("[user] suddenly appears in front of [loc]!"), span_userdanger("[user] breaks free of [src]!"))
|
|
qdel(src)
|
|
|
|
/obj/item/bodybag/environmental
|
|
name = "environmental protection bag"
|
|
desc = "A folded, reinforced bag designed to protect against exoplanetary environmental storms."
|
|
icon = 'icons/obj/medical/bodybag.dmi'
|
|
icon_state = "envirobag_folded"
|
|
unfoldedbag_path = /obj/structure/closet/body_bag/environmental
|
|
w_class = WEIGHT_CLASS_NORMAL //It's reinforced and insulated, like a beefed-up sleeping bag, so it has a higher bulkiness than regular bodybag
|
|
resistance_flags = ACID_PROOF | FIRE_PROOF | FREEZE_PROOF
|
|
|
|
/obj/item/bodybag/environmental/nanotrasen
|
|
name = "elite environmental protection bag"
|
|
desc = "A folded, heavily reinforced, and insulated bag, capable of fully isolating its contents from external factors."
|
|
icon_state = "ntenvirobag_folded"
|
|
unfoldedbag_path = /obj/structure/closet/body_bag/environmental/nanotrasen
|
|
resistance_flags = ACID_PROOF | FIRE_PROOF | FREEZE_PROOF | LAVA_PROOF
|
|
|
|
/obj/item/bodybag/environmental/prisoner
|
|
name = "prisoner transport bag"
|
|
desc = "Intended for transport of prisoners through hazardous environments, this folded environmental protection bag comes with straps to keep an occupant secure."
|
|
icon = 'icons/obj/medical/bodybag.dmi'
|
|
icon_state = "prisonerenvirobag_folded"
|
|
unfoldedbag_path = /obj/structure/closet/body_bag/environmental/prisoner
|
|
|
|
/obj/item/bodybag/environmental/prisoner/pressurized
|
|
name = "pressurized prisoner transport bag"
|
|
unfoldedbag_path = /obj/structure/closet/body_bag/environmental/prisoner/pressurized
|
|
|
|
/obj/item/bodybag/environmental/prisoner/syndicate
|
|
name = "syndicate prisoner transport bag"
|
|
desc = "An alteration of Nanotrasen's environmental protection bag which has been used in several high-profile kidnappings. Designed to keep a victim unconscious, alive, and secured until they are transported to a required location."
|
|
icon = 'icons/obj/medical/bodybag.dmi'
|
|
icon_state = "syndieenvirobag_folded"
|
|
unfoldedbag_path = /obj/structure/closet/body_bag/environmental/prisoner/pressurized/syndicate
|
|
resistance_flags = ACID_PROOF | FIRE_PROOF | FREEZE_PROOF | LAVA_PROOF
|
|
|
|
/obj/item/bodybag/stasis
|
|
name = /obj/structure/closet/body_bag/environmental/stasis::name
|
|
desc = /obj/structure/closet/body_bag/environmental/stasis::desc
|
|
max_integrity = /obj/structure/closet/body_bag/environmental/stasis::max_integrity
|
|
icon = 'icons/obj/medical/bodybag.dmi'
|
|
icon_state = "stasis_bag_folded"
|
|
unfoldedbag_path = /obj/structure/closet/body_bag/environmental/stasis
|
|
|
|
/obj/item/bodybag/stasis/deploy_bodybag(mob/user, atom/location)
|
|
var/obj/structure/closet/body_bag/environmental/stasis/bag = ..()
|
|
bag.last_filter_update = -1
|
|
bag.update_integrity(get_integrity())
|
|
return bag
|