diff --git a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm index d910f5d7673..91b8ea9bc11 100644 --- a/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm +++ b/_maps/RandomRuins/AnywhereRuins/golem_ship.dmm @@ -217,7 +217,7 @@ /area/ruin/powered/golem_ship) "ok" = ( /obj/structure/table, -/obj/item/stack/sticky_tape{ +/obj/item/stack/medical/wrap/sticky_tape{ pixel_y = 12; pixel_x = 4 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm index cc9f5e7a295..3c228756225 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm @@ -14,8 +14,8 @@ /area/ruin/powered/snow_biodome) "ad" = ( /obj/structure/table, -/obj/item/stack/medical/gauze, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/ruin/powered/snow_biodome) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm index 2b4b18d6c68..1213c3684d7 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm @@ -380,7 +380,7 @@ /turf/open/misc/asteroid/basalt/wasteland, /area/ruin/unpowered/elephant_graveyard) "Cp" = ( -/obj/item/stack/medical/gauze/improvised, +/obj/item/stack/medical/wrap/gauze/improvised, /obj/effect/decal/cleanable/dirt, /turf/open/misc/asteroid/basalt/wasteland, /area/ruin/unpowered/elephant_graveyard) diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm index 8900f33d7f8..db55bfe5f94 100644 --- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm @@ -1075,7 +1075,7 @@ /area/ruin/space/has_grav/dangerous_research/lab) "oJ" = ( /obj/item/stack/medical/bandage, -/obj/item/stack/medical/gauze/twelve, +/obj/item/stack/medical/wrap/gauze/twelve, /obj/item/reagent_containers/hypospray/medipen/blood_loss, /obj/effect/spawner/random/medical/injector, /obj/effect/turf_decal/tile/dark_red/anticorner{ diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index ced8c535a3f..d15e2954126 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -645,8 +645,8 @@ /obj/structure/table, /obj/item/healthanalyzer, /obj/item/healthanalyzer, -/obj/item/stack/medical/gauze, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, +/obj/item/stack/medical/wrap/gauze, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/deepstorage/armory) "de" = ( diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm index 20bd5e3613c..a7eb36e8456 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm @@ -904,7 +904,7 @@ /obj/item/stack/tile/bamboo/tatami{ amount = 40 }, -/obj/item/stack/sticky_tape{ +/obj/item/stack/medical/wrap/sticky_tape{ pixel_y = -2 }, /obj/effect/decal/cleanable/plastic, diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm index b67d0f00080..2541fa7c568 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm @@ -305,8 +305,8 @@ "zH" = ( /obj/structure/closet/cardboard, /obj/item/stack/medical/suture, -/obj/item/stack/medical/gauze, -/obj/item/stack/sticky_tape/surgical, +/obj/item/stack/medical/wrap/gauze, +/obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/structure/broken_flooring/corner, /obj/item/organ/cyberimp/arm/toolkit/surgery, /obj/item/organ/cyberimp/eyes/hud/medical, @@ -409,7 +409,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/garbagetruck/medicalwaste) "EJ" = ( -/obj/item/stack/sticky_tape/surgical, +/obj/item/stack/medical/wrap/sticky_tape/surgical, /turf/open/floor/plating, /area/ruin/space/has_grav/garbagetruck/medicalwaste) "Go" = ( diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm index 21136cc1089..63dcd2f3b13 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm @@ -332,7 +332,7 @@ /obj/item/boxcutter{ pixel_x = 10 }, -/obj/item/stack/sticky_tape{ +/obj/item/stack/medical/wrap/sticky_tape{ pixel_x = -5 }, /obj/structure/closet/crate/preopen, diff --git a/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm b/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm index 6464c4901fd..6c30451bba8 100644 --- a/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm +++ b/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm @@ -1056,7 +1056,7 @@ "Ue" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/reinforced/plastitaniumglass, -/obj/item/stack/sticky_tape/pointy/super, +/obj/item/stack/medical/wrap/sticky_tape/pointy/super, /obj/structure/cable, /turf/open/floor/iron/dark/airless, /area/ruin/space) diff --git a/_maps/RandomZLevels/TheBeach.dmm b/_maps/RandomZLevels/TheBeach.dmm index cc06de9ed5d..1cecb4bebfe 100644 --- a/_maps/RandomZLevels/TheBeach.dmm +++ b/_maps/RandomZLevels/TheBeach.dmm @@ -726,7 +726,7 @@ pixel_y = 1; pixel_x = 18 }, -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ pixel_x = -15; pixel_y = 10 }, diff --git a/_maps/RandomZLevels/heretic.dmm b/_maps/RandomZLevels/heretic.dmm index 768ce5698b6..831b608268a 100644 --- a/_maps/RandomZLevels/heretic.dmm +++ b/_maps/RandomZLevels/heretic.dmm @@ -434,8 +434,8 @@ /obj/structure/table, /obj/item/healthanalyzer, /obj/item/healthanalyzer, -/obj/item/stack/medical/gauze, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, +/obj/item/stack/medical/wrap/gauze, /turf/open/floor/iron/dark, /area/awaymission/caves/heretic_laboratory) "cz" = ( @@ -1030,11 +1030,11 @@ /area/awaymission/beach/heretic) "fK" = ( /obj/structure/table, -/obj/item/stack/sticky_tape{ +/obj/item/stack/medical/wrap/sticky_tape{ pixel_x = 6; pixel_y = 5 }, -/obj/item/stack/sticky_tape{ +/obj/item/stack/medical/wrap/sticky_tape{ pixel_x = -6; pixel_y = 5 }, @@ -1385,7 +1385,7 @@ /area/awaymission/beach/heretic) "ho" = ( /obj/structure/table/glass, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/mesh, /obj/effect/turf_decal/siding{ dir = 6 @@ -3929,7 +3929,7 @@ "uM" = ( /obj/structure/table/glass, /obj/item/storage/medkit/regular, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/suture, /obj/effect/turf_decal/siding{ dir = 10 @@ -5603,7 +5603,7 @@ /area/awaymission/beach/heretic) "Dz" = ( /obj/structure/table/glass, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/mesh, /obj/item/stack/medical/suture, /obj/effect/turf_decal/siding{ diff --git a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm index 9cde40b8d1a..42a2ae3b778 100644 --- a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm +++ b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm @@ -18570,7 +18570,7 @@ /area/station/maintenance/port/aft) "eVY" = ( /obj/structure/cable, -/obj/item/stack/sticky_tape{ +/obj/item/stack/medical/wrap/sticky_tape{ pixel_x = 12; pixel_y = 14 }, @@ -43394,7 +43394,7 @@ "lzW" = ( /obj/structure/table/glass, /obj/item/clothing/gloves/latex/nitrile, -/obj/item/stack/sticky_tape/surgical{ +/obj/item/stack/medical/wrap/sticky_tape/surgical{ pixel_x = -4; pixel_y = 5 }, @@ -57984,12 +57984,12 @@ /turf/open/floor/iron/textured, /area/station/cargo/storage) "pux" = ( -/obj/item/stack/sticky_tape{ +/obj/item/stack/medical/wrap/sticky_tape{ pixel_x = 8; pixel_y = 14 }, /obj/structure/table, -/obj/item/stack/sticky_tape{ +/obj/item/stack/medical/wrap/sticky_tape{ pixel_x = -4; pixel_y = 11 }, @@ -66934,7 +66934,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 }, -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ pixel_x = 8 }, /obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 393f2d8931b..237d3778b78 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -10533,10 +10533,10 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/rd) "czO" = ( -/obj/item/stack/sticky_tape/surgical, +/obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/structure/table/glass, /obj/item/radio/intercom/directional/north, -/obj/item/stack/sticky_tape/surgical, +/obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/item/stack/medical/bone_gel, /obj/machinery/light/directional/north, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -15629,7 +15629,7 @@ /area/station/commons/fitness/recreation) "dOc" = ( /obj/structure/table, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/mesh, /obj/item/stack/medical/suture, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -39739,7 +39739,7 @@ /area/station/science/research) "jKm" = ( /obj/structure/rack, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/suture, /obj/item/stack/medical/mesh, /obj/item/reagent_containers/syringe/epinephrine{ @@ -48399,7 +48399,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/port) "lQX" = ( -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/suture, /obj/machinery/camera/directional/north{ c_tag = "Medbay - Treatment Center"; @@ -65669,7 +65669,7 @@ /turf/open/floor/plating, /area/station/medical/abandoned) "qgs" = ( -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/mesh, /obj/structure/table/reinforced/rglass, /obj/effect/turf_decal/tile/blue/fourcorners, diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 1c11ddaab68..1dc2cef08cc 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -574,6 +574,16 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/iron, /area/station/commons/dorms) +"akI" = ( +/obj/structure/table/glass, +/obj/item/stack/medical/wrap/gauze{ + pixel_x = 2 + }, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/suture, +/obj/effect/turf_decal/tile/blue/full, +/turf/open/floor/iron/large, +/area/station/medical/treatment_center) "akK" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -4051,13 +4061,6 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating/icemoon, /area/station/engineering/atmos) -"bec" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "ben" = ( /obj/machinery/bluespace_beacon, /obj/effect/turf_decal/stripes/line{ @@ -8603,10 +8606,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/mining) -"coc" = ( -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "cod" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -8738,10 +8737,6 @@ "cpY" = ( /turf/closed/wall, /area/station/service/kitchen) -"cqa" = ( -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "cqb" = ( /obj/machinery/food_cart, /obj/structure/extinguisher_cabinet/directional/east, @@ -9665,10 +9660,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"cDt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "cDv" = ( /obj/item/stack/rods/fifty, /obj/structure/rack, @@ -12064,6 +12055,26 @@ /obj/structure/sign/nanotrasen/directional/east, /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) +"dkM" = ( +/obj/structure/table/glass, +/obj/item/stack/medical/wrap/gauze{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/item/stack/medical/mesh{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/stack/medical/suture, +/obj/item/reagent_containers/cup/bottle/epinephrine, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = 6 + }, +/obj/item/reagent_containers/syringe, +/obj/machinery/defibrillator_mount/directional/east, +/obj/effect/turf_decal/tile/blue/full, +/turf/open/floor/iron/large, +/area/station/medical/treatment_center) "dkT" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 1 @@ -22000,10 +22011,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/commons/storage/art) -"gfV" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "gga" = ( /obj/machinery/light/small/directional/west, /obj/effect/spawner/random/trash/hobo_squat, @@ -25458,13 +25465,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/textured, /area/station/maintenance/starboard/fore) -"hfo" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/status_display/evac/directional/east, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "hfs" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood, @@ -28397,6 +28397,13 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/plating, /area/station/medical/virology) +"hXg" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/circuit_workshop) "hXC" = ( /obj/structure/chair{ dir = 8 @@ -29406,6 +29413,14 @@ }, /turf/open/floor/plating, /area/station/command/heads_quarters/qm) +"ikS" = ( +/obj/structure/cable, +/obj/structure/table/glass, +/obj/item/stack/medical/wrap/sticky_tape/surgical, +/obj/item/stack/medical/bone_gel, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron/white, +/area/station/medical/surgery/fore) "ikW" = ( /obj/structure/railing/corner{ dir = 8 @@ -33792,6 +33807,13 @@ /obj/structure/flora/grass/both/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"jAA" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "jAF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -34850,13 +34872,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"jPf" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/dark, -/area/station/engineering/circuit_workshop) "jPh" = ( /obj/structure/grille/broken, /obj/structure/disposalpipe/segment, @@ -36573,6 +36588,19 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) +"koa" = ( +/obj/machinery/light/cold/directional/north, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/circuit_workshop) "kod" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/blue{ @@ -38518,6 +38546,13 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/security/processing) +"kOP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/engineering/circuit_workshop) "kOR" = ( /obj/structure/railing/wooden_fence, /obj/item/flashlight/lantern/on, @@ -39469,13 +39504,6 @@ /obj/effect/decal/cleanable/confetti, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"lbF" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/engineering/lobby) "lch" = ( /obj/machinery/computer/monitor{ dir = 1; @@ -39488,16 +39516,6 @@ /obj/machinery/gateway/centerstation, /turf/open/floor/iron/dark/smooth_large, /area/station/command/gateway) -"lco" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/structure/railing/corner/end/flip{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "lcs" = ( /obj/structure/reagent_dispensers/plumbed{ dir = 4 @@ -40144,6 +40162,10 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark/textured, /area/station/security/range) +"lmp" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "lms" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -40422,11 +40444,6 @@ "lpM" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/captain) -"lpQ" = ( -/obj/effect/landmark/start/hangover, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "lpS" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -41994,6 +42011,14 @@ /obj/machinery/wall_healer/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"lNx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "lNy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44705,6 +44730,10 @@ /obj/machinery/light/small/directional/north, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"mCF" = ( +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "mCP" = ( /obj/machinery/light/small/red/directional/south, /obj/structure/chair{ @@ -47614,6 +47643,24 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"nvw" = ( +/obj/structure/table/glass, +/obj/item/stack/medical/wrap/gauze{ + pixel_x = 1 + }, +/obj/item/stack/medical/mesh, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "chemistry_access_shutters"; + name = "Chemistry Access Shutter Control"; + req_access = list("medical") + }, +/obj/item/stack/medical/suture, +/obj/effect/turf_decal/tile/blue/full, +/turf/open/floor/iron/large, +/area/station/medical/treatment_center) "nvx" = ( /obj/machinery/airalarm/directional/east, /obj/effect/landmark/event_spawn, @@ -49207,19 +49254,6 @@ /obj/structure/sign/warning/cold_temp/directional/north, /turf/open/floor/iron/smooth_large, /area/station/science/cytology) -"nPr" = ( -/obj/machinery/light/cold/directional/north, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/circuit_workshop) "nPs" = ( /obj/structure/bodycontainer/morgue, /obj/machinery/camera/directional/south{ @@ -50265,16 +50299,6 @@ /obj/machinery/computer/pandemic, /turf/open/floor/iron/white, /area/station/medical/virology) -"oeW" = ( -/obj/structure/table/glass, -/obj/item/stack/medical/gauze{ - pixel_x = 2 - }, -/obj/item/stack/medical/mesh, -/obj/item/stack/medical/suture, -/obj/effect/turf_decal/tile/blue/full, -/turf/open/floor/iron/large, -/area/station/medical/treatment_center) "ofc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/pink/visible, /turf/open/floor/plating, @@ -54502,19 +54526,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/break_room) -"pjP" = ( -/obj/structure/cable, -/obj/structure/table/glass, -/obj/item/stack/sticky_tape/surgical, -/obj/item/stack/medical/bone_gel, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/machinery/camera/directional/south{ - c_tag = "Surgery B"; - network = list("ss13","medbay") - }, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/surgery/aft) "pkf" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 @@ -54737,6 +54748,11 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/glass/reinforced, /area/station/science/xenobiology) +"pnF" = ( +/obj/effect/landmark/start/hangover, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "pnG" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster/directional/north, @@ -54958,14 +54974,6 @@ "prg" = ( /turf/open/floor/wood, /area/station/service/library) -"prm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "prs" = ( /obj/docking_port/stationary{ dir = 8; @@ -58217,6 +58225,16 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/lockers) +"qkP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "qkR" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/chem_master, @@ -66142,26 +66160,6 @@ /obj/structure/sign/departments/cargo/directional/west, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"svq" = ( -/obj/structure/table/glass, -/obj/item/stack/medical/gauze{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/item/stack/medical/mesh{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/stack/medical/suture, -/obj/item/reagent_containers/cup/bottle/epinephrine, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = 6 - }, -/obj/item/reagent_containers/syringe, -/obj/machinery/defibrillator_mount/directional/east, -/obj/effect/turf_decal/tile/blue/full, -/turf/open/floor/iron/large, -/area/station/medical/treatment_center) "svx" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/tile/blue{ @@ -66815,24 +66813,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"sEK" = ( -/obj/structure/table/glass, -/obj/item/stack/medical/gauze{ - pixel_x = 1 - }, -/obj/item/stack/medical/mesh, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/button/door/directional/west{ - id = "chemistry_access_shutters"; - name = "Chemistry Access Shutter Control"; - req_access = list("medical") - }, -/obj/item/stack/medical/suture, -/obj/effect/turf_decal/tile/blue/full, -/turf/open/floor/iron/large, -/area/station/medical/treatment_center) "sEN" = ( /obj/machinery/atmospherics/components/unary/passive_vent/layer2{ dir = 8 @@ -68549,13 +68529,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron, /area/station/science/xenobiology) -"tfC" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/circuit_workshop) "tfM" = ( /obj/structure/chair/office/light{ dir = 1 @@ -69084,6 +69057,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"tmt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "tmw" = ( /obj/structure/closet/firecloset, /turf/open/floor/iron, @@ -71602,14 +71579,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/eva/lower) -"tYA" = ( -/obj/structure/cable, -/obj/structure/table/glass, -/obj/item/stack/sticky_tape/surgical, -/obj/item/stack/medical/bone_gel, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/surgery/fore) "tYE" = ( /obj/machinery/biogenerator, /obj/effect/turf_decal/tile/green/half/contrasted{ @@ -75170,6 +75139,10 @@ }, /turf/open/floor/cult, /area/station/service/chapel/office) +"vct" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "vcx" = ( /obj/machinery/newscaster/directional/east, /obj/structure/sink/directional/west, @@ -75908,6 +75881,13 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"vop" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/lobby) "vos" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76819,6 +76799,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/construction) +"vAJ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "vAP" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -77106,6 +77093,19 @@ /obj/effect/mapping_helpers/mail_sorting/medbay/virology, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"vFZ" = ( +/obj/structure/cable, +/obj/structure/table/glass, +/obj/item/stack/medical/wrap/sticky_tape/surgical, +/obj/item/stack/medical/bone_gel, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/camera/directional/south{ + c_tag = "Surgery B"; + network = list("ss13","medbay") + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/surgery/aft) "vGw" = ( /obj/structure/transit_tube/station/reverse, /obj/structure/sign/warning/secure_area/directional/north, @@ -82737,11 +82737,6 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"xob" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/engineering/lobby) "xow" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/firealarm/directional/west, @@ -82970,6 +82965,10 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/prison/rec) +"xrL" = ( +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "xrS" = ( /obj/structure/ladder, /obj/effect/turf_decal/stripes/box, @@ -84303,10 +84302,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"xJY" = ( -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "xKb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/window/reinforced/spawner/directional/south, @@ -86018,6 +86013,11 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) +"ykE" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/lobby) "ykG" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, @@ -182392,7 +182392,7 @@ xMq bID qhL iEQ -xob +ykE gjq eJf gjq @@ -182649,7 +182649,7 @@ iDt bID iWW thq -xob +ykE gjq eJf gjq @@ -182904,8 +182904,8 @@ thA iDt scw bID -gfV -lpQ +lmp +pnF bID bID bID @@ -183161,7 +183161,7 @@ thA thA ppY bID -cqa +xrL jJI tiJ uSA @@ -183418,7 +183418,7 @@ thA thA iDt bID -coc +mCF jJI eEn bCy @@ -183427,8 +183427,8 @@ iub iub dOb oWy -nPr -tfC +koa +hXg oxD aEz vJm @@ -183678,14 +183678,14 @@ bID bID jJI qrt -lco -bec -prm -bec +qkP +jAA +lNx +jAA gzL jsw nYl -jPf +kOP twu wJW oWy @@ -183933,13 +183933,13 @@ iDt iDt ppY bID -lbF +vop bID -xJY +vct iWW muJ -cDt -hfo +tmt +vAJ oWy qtu gTx @@ -253300,7 +253300,7 @@ cTV bOp lwQ qfi -sEK +nvw eHg ahL wVw @@ -255356,14 +255356,14 @@ hDq pZm lwQ gkX -oeW +akI aTZ fle pyu oul wRG rsR -svq +dkM oio kQM upO @@ -258195,11 +258195,11 @@ uKj dDw cyr qgu -tYA +ikS vds uhG liz -pjP +vFZ mFE nEc klk diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 5f2afb80981..fcfef778c10 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -2192,7 +2192,7 @@ /area/station/service/kitchen) "aNQ" = ( /obj/structure/table, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/mesh, /obj/item/stack/medical/suture, /obj/machinery/power/apc/auto_name/directional/north, @@ -37484,7 +37484,7 @@ req_access = list("surgery") }, /obj/structure/table/reinforced, -/obj/item/stack/sticky_tape/surgical, +/obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/item/stack/medical/bone_gel, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/structure/window/reinforced/spawner/directional/north, @@ -40811,7 +40811,7 @@ pixel_x = -4; pixel_y = 8 }, -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ pixel_x = 8 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49926,7 +49926,7 @@ "rbs" = ( /obj/structure/table, /obj/item/stack/medical/mesh, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/suture, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 diff --git a/_maps/map_files/NebulaStation/NebulaStation.dmm b/_maps/map_files/NebulaStation/NebulaStation.dmm index e927ecbc6bb..5aefe75d4fa 100644 --- a/_maps/map_files/NebulaStation/NebulaStation.dmm +++ b/_maps/map_files/NebulaStation/NebulaStation.dmm @@ -72120,8 +72120,8 @@ dir = 4 }, /obj/structure/table/glass, -/obj/item/stack/medical/gauze, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/mesh, /obj/item/stack/medical/mesh, /obj/item/stack/medical/suture, @@ -116905,7 +116905,7 @@ pixel_y = 12; pixel_x = 8 }, -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ pixel_x = 5 }, /obj/effect/turf_decal/tile/blue/full, @@ -138208,7 +138208,7 @@ /obj/effect/turf_decal/siding/dark, /obj/effect/turf_decal/trimline/dark_blue/filled/line, /obj/structure/rack, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/mesh, /obj/item/stack/medical/suture, /obj/item/reagent_containers/syringe/epinephrine{ @@ -147443,7 +147443,7 @@ dir = 6 }, /obj/structure/table/glass, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/mesh, /obj/item/stack/medical/suture, /obj/effect/turf_decal/trimline/blue/corner{ diff --git a/_maps/map_files/tramstation/maintenance_modules/medsciupper_3.dmm b/_maps/map_files/tramstation/maintenance_modules/medsciupper_3.dmm index c921b68dbb9..b7298d8f1f1 100644 --- a/_maps/map_files/tramstation/maintenance_modules/medsciupper_3.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/medsciupper_3.dmm @@ -247,7 +247,7 @@ pixel_y = 10; pixel_x = -6 }, -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ pixel_y = -2; pixel_x = 5 }, diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index e8af5cfc03f..6edd7fc9d11 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -8605,7 +8605,7 @@ "bVY" = ( /obj/structure/table/glass, /obj/item/stack/medical/mesh, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -14495,7 +14495,7 @@ /obj/machinery/firealarm/directional/south, /obj/structure/table/glass, /obj/item/stack/medical/mesh, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "dRY" = ( @@ -14828,7 +14828,7 @@ pixel_x = -4; pixel_y = 8 }, -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ pixel_x = 8 }, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -23246,7 +23246,7 @@ /area/station/commons/fitness/recreation) "hfd" = ( /obj/structure/table/glass, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/suture, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -49644,7 +49644,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 }, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/mesh, /obj/item/radio/intercom/directional/east, /obj/machinery/light/cold/directional/north, diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 9fd655eda86..2a439748deb 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -16631,7 +16631,7 @@ dir = 1 }, /obj/structure/table, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/suture, /obj/item/stack/medical/mesh, /obj/machinery/power/apc/auto_name/directional/north, @@ -44593,7 +44593,7 @@ pixel_x = -4; pixel_y = 8 }, -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ pixel_x = 8 }, /obj/item/reagent_containers/syringe, diff --git a/_maps/minigame/deathmatch/maint_mania.dmm b/_maps/minigame/deathmatch/maint_mania.dmm index 984da1f698c..db3742238d0 100644 --- a/_maps/minigame/deathmatch/maint_mania.dmm +++ b/_maps/minigame/deathmatch/maint_mania.dmm @@ -64,7 +64,7 @@ /turf/open/indestructible, /area/deathmatch) "jY" = ( -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ amount = 1 }, /turf/open/indestructible, diff --git a/_maps/minigame/deathmatch/sunrise.dmm b/_maps/minigame/deathmatch/sunrise.dmm index 756f9f668d1..8439b75b08d 100644 --- a/_maps/minigame/deathmatch/sunrise.dmm +++ b/_maps/minigame/deathmatch/sunrise.dmm @@ -272,7 +272,7 @@ "qu" = ( /obj/structure/table/wood, /obj/item/retractor, -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ pixel_x = 4; pixel_y = 1 }, diff --git a/_maps/shuttles/emergency_cruise.dmm b/_maps/shuttles/emergency_cruise.dmm index 6b9fb38b134..301a1bcf2e0 100644 --- a/_maps/shuttles/emergency_cruise.dmm +++ b/_maps/shuttles/emergency_cruise.dmm @@ -875,7 +875,7 @@ /area/shuttle/escape) "lz" = ( /obj/structure/table/reinforced/rglass, -/obj/item/stack/medical/gauze/twelve{ +/obj/item/stack/medical/wrap/gauze/twelve{ pixel_x = -2; pixel_y = 6 }, diff --git a/_maps/shuttles/emergency_lance.dmm b/_maps/shuttles/emergency_lance.dmm index c7690ad3832..31bbe51b2d4 100644 --- a/_maps/shuttles/emergency_lance.dmm +++ b/_maps/shuttles/emergency_lance.dmm @@ -92,7 +92,7 @@ "cM" = ( /obj/effect/turf_decal/bot_white, /obj/structure/rack, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/ointment{ pixel_x = 5 diff --git a/_maps/shuttles/emergency_luxury.dmm b/_maps/shuttles/emergency_luxury.dmm index cdb6ce920cc..d821b680beb 100644 --- a/_maps/shuttles/emergency_luxury.dmm +++ b/_maps/shuttles/emergency_luxury.dmm @@ -980,7 +980,7 @@ /obj/effect/decal/cleanable/blood/old, /obj/item/reagent_containers/cup/glass/bottle/whiskey, /obj/item/reagent_containers/cup/bottle/ethanol, -/obj/item/stack/medical/gauze/improvised, +/obj/item/stack/medical/wrap/gauze/improvised, /obj/item/bot_assembly/medbot, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index b2fdab9a9a9..614fa2127ba 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -690,7 +690,7 @@ /area/shuttle/escape) "Ld" = ( /obj/structure/table, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/ointment, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index 7b96165e014..7883827c9e5 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -1289,7 +1289,7 @@ /obj/effect/turf_decal/bot_white, /obj/structure/rack, /obj/effect/decal/cleanable/dirt, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/ointment{ pixel_x = 5 diff --git a/_maps/shuttles/infiltrator_advanced.dmm b/_maps/shuttles/infiltrator_advanced.dmm index 296a65fe8bf..988b06f2c7f 100644 --- a/_maps/shuttles/infiltrator_advanced.dmm +++ b/_maps/shuttles/infiltrator_advanced.dmm @@ -378,7 +378,7 @@ /obj/item/storage/box/bodybags{ pixel_y = 6 }, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/bruise_pack{ pixel_x = 6 }, diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index 394fb3b91af..b1b00f10d57 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -290,7 +290,7 @@ /area/shuttle/syndicate/medical) "bu" = ( /obj/structure/table/reinforced, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/ointment, /obj/effect/turf_decal/tile/blue{ diff --git a/_maps/shuttles/infiltrator_clown.dmm b/_maps/shuttles/infiltrator_clown.dmm index 4b783ecf448..091e2efc6be 100644 --- a/_maps/shuttles/infiltrator_clown.dmm +++ b/_maps/shuttles/infiltrator_clown.dmm @@ -290,7 +290,7 @@ /area/shuttle/syndicate/medical) "bu" = ( /obj/structure/table/reinforced, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/ointment, /obj/effect/turf_decal/tile/blue{ diff --git a/_maps/shuttles/whiteship_birdshot.dmm b/_maps/shuttles/whiteship_birdshot.dmm index 8f64e40dbec..54fb35f123d 100644 --- a/_maps/shuttles/whiteship_birdshot.dmm +++ b/_maps/shuttles/whiteship_birdshot.dmm @@ -1038,7 +1038,7 @@ /obj/item/tank/internals/anesthetic{ pixel_x = -3 }, -/obj/item/stack/sticky_tape/surgical, +/obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/item/clothing/mask/breath/medical{ pixel_y = 3 }, diff --git a/_maps/templates/holodeck_medicalsim.dmm b/_maps/templates/holodeck_medicalsim.dmm index 269b9c41f01..11cb6662f49 100644 --- a/_maps/templates/holodeck_medicalsim.dmm +++ b/_maps/templates/holodeck_medicalsim.dmm @@ -112,7 +112,7 @@ /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/retractor, /obj/item/cautery, /turf/open/floor/holofloor{ diff --git a/_maps/templates/lazy_templates/wizard_den.dmm b/_maps/templates/lazy_templates/wizard_den.dmm index a909cc94c23..c851314e682 100644 --- a/_maps/templates/lazy_templates/wizard_den.dmm +++ b/_maps/templates/lazy_templates/wizard_den.dmm @@ -751,7 +751,7 @@ "RY" = ( /obj/item/cautery/alien, /obj/structure/closet/crate, -/obj/item/stack/sticky_tape/super, +/obj/item/stack/medical/wrap/sticky_tape/super, /obj/item/clothing/head/wizard/tape, /obj/item/bikehorn/golden{ pixel_x = -8; diff --git a/_maps/virtual_domains/heretic_hunt.dmm b/_maps/virtual_domains/heretic_hunt.dmm index ce7e20749d5..b7b84fbc39a 100644 --- a/_maps/virtual_domains/heretic_hunt.dmm +++ b/_maps/virtual_domains/heretic_hunt.dmm @@ -386,7 +386,7 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/stack/medical/gauze/improvised{ +/obj/item/stack/medical/wrap/gauze/improvised{ pixel_y = -2 }, /turf/open/floor/plating, @@ -573,7 +573,7 @@ /obj/machinery/defibrillator_mount/directional/west, /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/item/stack/medical/gauze/improvised, +/obj/item/stack/medical/wrap/gauze/improvised, /obj/effect/turf_decal/siding/blue{ dir = 4 }, @@ -1112,7 +1112,7 @@ "NN" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/structure/table/glass, -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ pixel_y = 4 }, /obj/effect/turf_decal/siding/blue{ @@ -1152,7 +1152,7 @@ /obj/effect/turf_decal/siding/blue/end{ dir = 1 }, -/obj/item/stack/medical/gauze/improvised, +/obj/item/stack/medical/wrap/gauze/improvised, /obj/structure/cable, /turf/open/floor/plastic, /area/virtual_domain) diff --git a/_maps/virtual_domains/island_brawl.dmm b/_maps/virtual_domains/island_brawl.dmm index 07003db1aa5..31a65f790ab 100644 --- a/_maps/virtual_domains/island_brawl.dmm +++ b/_maps/virtual_domains/island_brawl.dmm @@ -3088,7 +3088,7 @@ pixel_y = 1; pixel_x = 18 }, -/obj/item/stack/medical/gauze{ +/obj/item/stack/medical/wrap/gauze{ pixel_x = -15; pixel_y = 10 }, diff --git a/_maps/virtual_domains/meta_central.dmm b/_maps/virtual_domains/meta_central.dmm index e7f6e003b35..003785055e6 100644 --- a/_maps/virtual_domains/meta_central.dmm +++ b/_maps/virtual_domains/meta_central.dmm @@ -3010,7 +3010,7 @@ "zg" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/structure/table/glass, -/obj/item/stack/medical/gauze, +/obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/mesh, /obj/item/stack/medical/suture, /turf/open/floor/plating, diff --git a/code/__DEFINES/bodyparts.dm b/code/__DEFINES/bodyparts.dm index ffeff072f45..9bdc517a6ac 100644 --- a/code/__DEFINES/bodyparts.dm +++ b/code/__DEFINES/bodyparts.dm @@ -182,3 +182,9 @@ DEFINE_BITFIELD(surgery_state, list( #define UNCLAMPED_VESSELS_BLEEDING 1.5 /// How much blood is lost from clamped vessels or cut organs? #define CLAMPED_VESSELS_BLEEDING 0.2 + +// Limb item categories +/// Gauze slot, asserted to be wrap items +#define LIMB_ITEM_GAUZE "gauze" +/// Tourniquet slot +#define LIMB_ITEM_TOURNIQUET "tourniquet" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm index a632a7dd222..b23710935a7 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -32,9 +32,9 @@ ///from /obj/item/bodypart/proc/receive_damage, sent from the limb owner (limb, brute, burn) #define COMSIG_CARBON_LIMB_DAMAGED "carbon_limb_damaged" #define COMPONENT_PREVENT_LIMB_DAMAGE (1 << 0) -/// from /obj/item/bodypart/proc/apply_gauze(/obj/item/stack/gauze): (/obj/item/stack/medical/gauze/applied_gauze, /obj/item/stack/medical/gauze/stack_used) +/// from /obj/item/bodypart/proc/apply_gauze(/obj/item/stack/gauze): (/obj/item/stack/medical/wrap/gauze/applied_gauze, /obj/item/stack/medical/wrap/gauze/stack_used) #define COMSIG_BODYPART_GAUZED "bodypart_gauzed" -/// from /obj/item/stack/medical/gauze/Destroy(): (/obj/item/stack/medical/gauze/removed_gauze) +/// from /obj/item/stack/medical/wrap/gauze/Destroy(): (/obj/item/stack/medical/wrap/gauze/removed_gauze) #define COMSIG_BODYPART_UNGAUZED "bodypart_ungauzed" /// Called from bodypart changing owner, which could be on attach or detachment. Either argument can be null. (mob/living/carbon/new_owner, mob/living/carbon/old_owner) diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index d666a93f0d6..14ff38bf3d0 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -639,6 +639,11 @@ /// Sent from /obj/item/mob_holder/purple_raptor/proc/toggle_wings() : (mob/living/carbon/human/user) #define COMSIG_RAPTOR_WINGS_CLOSED "raptor_wings_closed" +/// Sent from /obj/item/bodypart/limb/proc/apply_item(): (obj/item/bodypart/limb) +#define COMSIG_ITEM_APPLIED_TO_LIMB "item_applied_to_limb" +/// Sent from /obj/item/bodypart/limb/proc/Exited(): (obj/item/bodypart/limb) +#define COMSIG_ITEM_UNAPPLIED_FROM_LIMB "item_removed_from_limb" + /// Sent from /obj/effect/rune/convert/try_sacrifice_item(obj/effect/rune/convert/rune) #define COMSIG_ITEM_CULT_SACRIFICE "item_cult_sacrifice" #define COMPONENT_SACRIFICE_SUCCESSFUL (1<<0) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 638d1068b2c..5421fb971c7 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -148,7 +148,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items /obj/item/grenade/smokebomb = 1, /obj/item/radio/off = 1, /obj/item/stack/spacecash/c10 = 1, - /obj/item/stack/sticky_tape = 1, + /obj/item/stack/medical/wrap/sticky_tape = 1, /obj/item/tank/internals/emergency_oxygen = 1, /obj/item/paper/paperslip/fishing_tip = 1, @@ -214,7 +214,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items list(//medical and chemicals list(//basic healing items - /obj/item/stack/medical/gauze = 1, + /obj/item/stack/medical/wrap/gauze = 1, /obj/item/stack/medical/mesh = 1, /obj/item/stack/medical/suture = 1, /obj/item/stack/medical/bandage = 1, diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm index f5aa18b8f25..dfc12eef865 100644 --- a/code/datums/components/crafting/equipment.dm +++ b/code/datums/components/crafting/equipment.dm @@ -18,7 +18,7 @@ result = /obj/item/shield/improvised reqs = list( /obj/item/stack/sheet/iron = 10, - /obj/item/stack/sticky_tape = 2, + /obj/item/stack/medical/wrap/sticky_tape = 2, ) time = 4 SECONDS category = CAT_EQUIPMENT @@ -249,7 +249,7 @@ name = "Improvised Gripper Gloves" reqs = list( /obj/item/clothing/gloves/fingerless = 1, - /obj/item/stack/sticky_tape = 1, + /obj/item/stack/medical/wrap/sticky_tape = 1, ) result = /obj/item/clothing/gloves/tackler/offbrand category = CAT_EQUIPMENT diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index 86cf1d3b151..57139147fd8 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -25,7 +25,7 @@ result = /obj/item/weaponcrafting/receiver reqs = list( /obj/item/stack/sheet/iron = 5, - /obj/item/stack/sticky_tape = 1, + /obj/item/stack/medical/wrap/sticky_tape = 1, /obj/item/screwdriver = 1, /obj/item/assembly/mousetrap = 1, ) @@ -38,7 +38,7 @@ result = /obj/item/weaponcrafting/stock reqs = list( /obj/item/stack/sheet/mineral/wood = 8, - /obj/item/stack/sticky_tape = 1, + /obj/item/stack/medical/wrap/sticky_tape = 1, ) time = 5 SECONDS category = CAT_WEAPON_RANGED @@ -49,7 +49,7 @@ result = /obj/item/gun_maintenance_supplies/makeshift reqs = list( /obj/item/stack/sheet/iron = 5, - /obj/item/stack/sticky_tape = 1, + /obj/item/stack/medical/wrap/sticky_tape = 1, /obj/item/pipe = 1, /obj/item/stack/sheet/cloth = 2, ) @@ -195,7 +195,7 @@ /obj/item/pipe = 2, /obj/item/weaponcrafting/stock = 1, /obj/item/storage/toolbox = 1, // for the screws - /obj/item/stack/sticky_tape = 1, + /obj/item/stack/medical/wrap/sticky_tape = 1, ) tool_behaviors = list(TOOL_SCREWDRIVER) time = 5 SECONDS @@ -210,7 +210,7 @@ /obj/item/stock_parts/servo = 2, /obj/item/stack/sheet/mineral/wood = 4, /obj/item/storage/toolbox = 1, // for the screws - /obj/item/stack/sticky_tape = 1, + /obj/item/stack/medical/wrap/sticky_tape = 1, ) tool_paths = list(/obj/item/hatchet) tool_behaviors = list(TOOL_SCREWDRIVER) diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm index 8dd96407a2b..c41659c64a8 100644 --- a/code/datums/components/crafting/tailoring.dm +++ b/code/datums/components/crafting/tailoring.dm @@ -505,7 +505,7 @@ result = /obj/item/clothing/suit/pillow_suit time = 2 SECONDS reqs = list( - /obj/item/stack/sticky_tape = 10, + /obj/item/stack/medical/wrap/sticky_tape = 10, /obj/item/pillow = 5, ) category = CAT_CLOTHING @@ -516,7 +516,7 @@ tool_behaviors = list(TOOL_WIRECUTTER, TOOL_KNIFE) time = 2 SECONDS reqs = list( - /obj/item/stack/sticky_tape = 5, + /obj/item/stack/medical/wrap/sticky_tape = 5, /obj/item/pillow = 1, ) category = CAT_CLOTHING diff --git a/code/datums/components/crafting/tools.dm b/code/datums/components/crafting/tools.dm index 7cf73e9421a..29ea7a60010 100644 --- a/code/datums/components/crafting/tools.dm +++ b/code/datums/components/crafting/tools.dm @@ -43,7 +43,7 @@ reqs = list( /obj/item/crowbar = 1, /obj/item/knife = 1, - /obj/item/stack/sticky_tape = 1, + /obj/item/stack/medical/wrap/sticky_tape = 1, ) result = /obj/item/pickaxe/improvised category = CAT_TOOLS @@ -142,4 +142,3 @@ crafting_flags = CRAFT_SKIP_MATERIALS_PARITY tool_behaviors = list(TOOL_SCREWDRIVER) category = CAT_TOOLS - diff --git a/code/datums/components/limb_applicable.dm b/code/datums/components/limb_applicable.dm new file mode 100644 index 00000000000..006b2f91ff5 --- /dev/null +++ b/code/datums/components/limb_applicable.dm @@ -0,0 +1,97 @@ +/** + * ## Limb Applicable + * + * Allows item to be attached to limbs by clicking on humans with them while limb targeting + * + * The item then goes in the limb's contents, where it will be added to the limb's applied_items list + * The applied_items is indexed by category so you can easily check for the presence of a given item or category of item + */ +/datum/component/limb_applicable + /// List of body zones we can apply parent to + var/list/valid_zones + /// Category that the parent is applied to + /// Defaults to REF(parent), ie, you can apply any number of this item to a limb + /// Setting it to a category will prevent multiple items of that category being applied unless override_existing is TRUE + var/apply_category + /// If TRUE, replaces existing items with new ones + /// If FALSE, application will fail if an item of the same category is already applied + var/override_existing + /// Callback to determine if parent can be applied. (Return FALSE to block application) + var/datum/callback/can_apply + /// Callback invoked after application + var/datum/callback/on_apply + +/datum/component/limb_applicable/Initialize( + list/valid_zones = GLOB.all_body_zones.Copy(), + apply_category, + override_existing = TRUE, + datum/callback/can_apply, + datum/callback/on_apply, +) + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + + src.valid_zones = valid_zones + src.apply_category = apply_category || REF(parent) + src.override_existing = override_existing + src.can_apply = can_apply + src.on_apply = on_apply + + +/datum/component/limb_applicable/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(on_apply)) + RegisterSignal(parent, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, PROC_REF(add_context)) + + var/obj/item/applying_item = parent + applying_item.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1 + +/datum/component/limb_applicable/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM) + UnregisterSignal(parent, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET) + +/datum/component/limb_applicable/proc/add_context(obj/item/source, list/context, atom/target, mob/living/user) + if(isliving(target)) + context[SCREENTIP_CONTEXT_LMB] = "Apply [source.name]" + return CONTEXTUAL_SCREENTIP_SET + return NONE + +/datum/component/limb_applicable/proc/on_apply(datum/source, mob/user, atom/interacting_with) + SIGNAL_HANDLER + + if(!isliving(interacting_with)) + return NONE + + INVOKE_ASYNC(src, PROC_REF(on_apply_async), user, interacting_with) + return ITEM_INTERACT_BLOCKING + +/datum/component/limb_applicable/proc/on_apply_async(mob/user, atom/interacting_with) + var/mob/living/target = interacting_with + var/obj/item/bodypart/applying_to = target.get_bodypart(deprecise_zone(user.zone_selected)) + if(isnull(applying_to)) + target.balloon_alert(user, "no bodypart!") + return + + if(!(applying_to.body_zone in src.valid_zones)) + target.balloon_alert(user, "can't be applied there!") + return + + if(!override_existing) + var/obj/item/existing = LAZYACCESS(applying_to.applied_items, apply_category) + if(!isnull(existing)) + target.balloon_alert(user, "something is already there!") + return + + if(can_apply && !can_apply.Invoke(user, target, applying_to)) + return + + var/obj/item/applying = parent + if(isstack(parent)) + var/obj/item/stack/stack_parent = parent + applying = stack_parent.split_stack(1) + + else if(!user.temporarilyRemoveItemFromInventory(applying)) + target.balloon_alert(user, "can't part with [applying.name]!") + return + + applying_to.apply_item(applying, apply_category, override_existing) + on_apply?.Invoke(user, target, applying_to) diff --git a/code/datums/storage/subtypes/belts.dm b/code/datums/storage/subtypes/belts.dm index 763131eb98e..5bd5c9fbfa8 100644 --- a/code/datums/storage/subtypes/belts.dm +++ b/code/datums/storage/subtypes/belts.dm @@ -61,7 +61,7 @@ /obj/item/scalpel, /obj/item/shears, /obj/item/stack/medical, - /obj/item/stack/sticky_tape, //surgical tape + /obj/item/stack/medical/wrap/sticky_tape, //surgical tape /obj/item/stamp, /obj/item/sensor_device, /obj/item/storage/fancy/cigarettes, diff --git a/code/datums/storage/subtypes/medkits.dm b/code/datums/storage/subtypes/medkits.dm index 28e8208c18c..e0f13da8bb2 100644 --- a/code/datums/storage/subtypes/medkits.dm +++ b/code/datums/storage/subtypes/medkits.dm @@ -30,7 +30,7 @@ //stacks /obj/item/stack/medical, - /obj/item/stack/sticky_tape, + /obj/item/stack/medical/wrap/sticky_tape, //containers /obj/item/reagent_containers/applicator, diff --git a/code/datums/storage/subtypes/others/misc.dm b/code/datums/storage/subtypes/others/misc.dm index 1b1011b769d..2ef02380fa1 100644 --- a/code/datums/storage/subtypes/others/misc.dm +++ b/code/datums/storage/subtypes/others/misc.dm @@ -34,7 +34,7 @@ /obj/item/scalpel, /obj/item/shears, /obj/item/stack/medical/bone_gel, - /obj/item/stack/sticky_tape/surgical, + /obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/item/surgical_drapes, /obj/item/surgicaldrill, /obj/item/blood_scanner, diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index bed3a0b019c..f6a0f0abaeb 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -299,7 +299,7 @@ . = limb if(limb) // if we're nulling limb, we're basically detaching from it, so we should remove ourselves in that case - UnregisterSignal(limb, list(COMSIG_QDELETING, COMSIG_BODYPART_GAUZED, COMSIG_BODYPART_UNGAUZED, COMSIG_BODYPART_UPDATING_SURGERY_STATE)) + UnregisterSignal(limb, COMSIG_BODYPART_UPDATING_SURGERY_STATE) LAZYREMOVE(limb.wounds, src) if (!destroying) limb.update_wounds(replaced) @@ -314,7 +314,6 @@ if (limb) RegisterSignal(limb, COMSIG_QDELETING, PROC_REF(source_died)) - RegisterSignals(limb, list(COMSIG_BODYPART_GAUZED, COMSIG_BODYPART_UNGAUZED), PROC_REF(gauze_state_changed)) if (disabling) limb.add_traits(list(TRAIT_PARALYSIS, TRAIT_DISABLED_BY_WOUND), REF(src)) @@ -452,31 +451,23 @@ return 0 -/// Signal proc for if gauze has been applied or removed from our limb. -/datum/wound/proc/gauze_state_changed() - SIGNAL_HANDLER - - if (wound_flags & ACCEPTS_GAUZE) - update_inefficiencies() - /// Updates our limping and interaction penalties in accordance with our gauze. /datum/wound/proc/update_inefficiencies(replaced_or_replacing = FALSE) + SHOULD_NOT_SLEEP(TRUE) + if (wound_flags & ACCEPTS_GAUZE) + var/splint_factor = limb.get_splint_factor() if(limb.body_zone in list(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - if(limb.current_gauze?.splint_factor) - limp_slowdown = initial(limp_slowdown) * limb.current_gauze.splint_factor - limp_chance = initial(limp_chance) * limb.current_gauze.splint_factor - else - limp_slowdown = initial(limp_slowdown) - limp_chance = initial(limp_chance) + limp_slowdown = initial(limp_slowdown) * splint_factor + limp_chance = initial(limp_chance) * splint_factor else if(limb.body_zone in GLOB.arm_zones) - if(limb.current_gauze?.splint_factor) - set_interaction_efficiency_penalty(1 + ((get_effective_actionspeed_modifier()) * limb.current_gauze.splint_factor)) + if(splint_factor < 1) + set_interaction_efficiency_penalty(1 + (get_effective_actionspeed_modifier() * splint_factor)) else set_interaction_efficiency_penalty(initial(interaction_efficiency_penalty)) if(initial(disabling)) - set_disabling(isnull(limb.current_gauze)) + set_disabling(splint_factor < 1) limb.update_wounds(replaced_or_replacing) @@ -655,9 +646,10 @@ /datum/wound/proc/get_wound_description(mob/user) var/desc - if ((wound_flags & ACCEPTS_GAUZE) && limb.current_gauze) + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE) + if ((wound_flags & ACCEPTS_GAUZE) && current_gauze) var/sling_condition = get_gauze_condition() - desc = "[victim.p_Their()] [limb.plaintext_zone] is [sling_condition] fastened in a sling of [limb.current_gauze.name]" + desc = "[victim.p_Their()] [limb.plaintext_zone] is [sling_condition] fastened in a sling of [current_gauze.name]" else desc = "[victim.p_Their()] [limb.plaintext_zone] [examine_desc]" @@ -695,10 +687,11 @@ /datum/wound/proc/get_gauze_condition() SHOULD_BE_PURE(TRUE) - if (!limb.current_gauze) + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE) + if (!current_gauze) return null - switch(limb.current_gauze.absorption_capacity) + switch(current_gauze.absorption_capacity) if(0 to 1.25) return "just barely" if(1.25 to 2.75) diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index a2307a927d5..f6ba5f3acb9 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -163,7 +163,7 @@ victim.apply_damage(rand(1, 3) * (severity - 1) * gun.weapon_weight, BRUTE, limb, wound_bonus = CANT_WOUND, wound_clothing = FALSE) if(!HAS_TRAIT(victim, TRAIT_ANALGESIA)) - bonus_spread_values[MAX_BONUS_SPREAD_INDEX] += (15 * severity * (limb.current_gauze?.splint_factor || 1)) + bonus_spread_values[MAX_BONUS_SPREAD_INDEX] += (15 * severity * limb.get_splint_factor()) /datum/wound/blunt/bone/receive_damage(wounding_type, wounding_dmg, wound_bonus) if(!victim || wounding_dmg < WOUND_MINIMUM_DAMAGE || !victim.can_bleed()) @@ -202,7 +202,8 @@ /datum/wound/blunt/bone/modify_desc_before_span(desc) . = ..() - if (!limb.current_gauze) + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE) + if (!current_gauze) if(taped) . += ", [span_notice("and appears to be reforming itself under some surgical tape!")]" else if(gelled) @@ -381,7 +382,7 @@ limp_slowdown = 6 limp_chance = 60 series_threshold_penalty = 30 - treatable_by = list(/obj/item/stack/sticky_tape/surgical, /obj/item/stack/medical/bone_gel) + treatable_by = list(/obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/item/stack/medical/bone_gel) status_effect_type = /datum/status_effect/wound/blunt/bone/severe scar_keyword = "bluntsevere" brain_trauma_group = BRAIN_TRAUMA_MILD @@ -422,7 +423,7 @@ sound_effect = 'sound/effects/wounds/crack2.ogg' threshold_penalty = 15 disabling = TRUE - treatable_by = list(/obj/item/stack/sticky_tape/surgical, /obj/item/stack/medical/bone_gel) + treatable_by = list(/obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/item/stack/medical/bone_gel) status_effect_type = /datum/status_effect/wound/blunt/bone/critical scar_keyword = "bluntcritical" brain_trauma_group = BRAIN_TRAUMA_SEVERE @@ -509,7 +510,7 @@ return TRUE /// if someone is using surgical tape on our wound -/datum/wound/blunt/bone/proc/tape(obj/item/stack/sticky_tape/surgical/I, mob/user) +/datum/wound/blunt/bone/proc/tape(obj/item/stack/medical/wrap/sticky_tape/surgical/I, mob/user) if(!gelled) to_chat(user, span_warning("[user == victim ? "Your" : "[victim]'s"] [limb.plaintext_zone] must be coated with bone gel to perform this emergency operation!")) return TRUE @@ -543,7 +544,7 @@ /datum/wound/blunt/bone/treat(obj/item/tool, mob/user) if(istype(tool, /obj/item/stack/medical/bone_gel)) gel(tool, user) - if(istype(tool, /obj/item/stack/sticky_tape/surgical)) + if(istype(tool, /obj/item/stack/medical/wrap/sticky_tape/surgical)) tape(tool, user) /datum/wound/blunt/bone/get_scanner_description(mob/user) diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm index 7877f1b955c..e6a83b85690 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -58,11 +58,13 @@ sanitization = max(sanitization - 0.15, 0) if(infection_rate <= 0.15 && prob(50)) infection_rate += 0.001 - if(limb.current_gauze) + + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE) + if(current_gauze) limb.seep_gauze(WOUND_BURN_SANITIZATION_RATE * seconds_per_tick) if(flesh_healing > 0) // good bandages multiply the length of flesh healing - var/bandage_factor = limb.current_gauze?.burn_cleanliness_bonus || 1 + var/bandage_factor = current_gauze?.burn_cleanliness_bonus || 1 flesh_damage = max(flesh_damage - (0.5 * seconds_per_tick), 0) flesh_healing = max(flesh_healing - (0.5 * bandage_factor * seconds_per_tick), 0) // good bandages multiply the length of flesh healing @@ -78,7 +80,7 @@ // sanitization is checked after the clearing check but before the actual ill-effects, because we freeze the effects of infection while we have sanitization if(sanitization > 0) - var/bandage_factor = limb.current_gauze?.burn_cleanliness_bonus || 1 + var/bandage_factor = current_gauze?.burn_cleanliness_bonus || 1 infection = max(infection - (WOUND_BURN_SANITIZATION_RATE * seconds_per_tick), 0) sanitization = max(sanitization - (WOUND_BURN_SANITIZATION_RATE * bandage_factor * seconds_per_tick), 0) return @@ -151,9 +153,10 @@ return span_deadsay("[victim.p_Their()] [limb.plaintext_zone] has locked up completely and is non-functional.") var/list/condition = list("[victim.p_Their()] [limb.plaintext_zone] [examine_desc]") - if(limb.current_gauze) + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE) + if(current_gauze) var/bandage_condition - switch(limb.current_gauze.absorption_capacity) + switch(current_gauze.absorption_capacity) if(0 to 1.25) bandage_condition = "nearly ruined" if(1.25 to 2.75) @@ -163,7 +166,7 @@ if(4 to INFINITY) bandage_condition = "clean" - condition += " underneath a dressing of [bandage_condition] [limb.current_gauze.name]." + condition += " underneath a dressing of [bandage_condition] [current_gauze.name]." else switch(infection) if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE) diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index 953dfcdac2f..a55bf97c2ce 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -54,9 +54,7 @@ /datum/wound/pierce/bleed/receive_damage(wounding_type, wounding_dmg, wound_bonus) if(victim.stat == DEAD || (wounding_dmg < 5) || !limb.can_bleed() || !victim.get_blood_volume() || !prob(internal_bleeding_chance + wounding_dmg)) return - if(limb.current_gauze?.splint_factor) - wounding_dmg *= (1 - limb.current_gauze.splint_factor) - var/blood_bled = rand(1, wounding_dmg * internal_bleeding_coefficient) // 12 brute toolbox can cause up to 15/18/21 bloodloss on mod/sev/crit + var/blood_bled = rand(1, limb.get_splint_factor() * internal_bleeding_coefficient) // 12 brute toolbox can cause up to 15/18/21 bloodloss on mod/sev/crit switch(blood_bled) if(1 to 6) victim.bleed(blood_bled, TRUE) @@ -91,7 +89,7 @@ return BLOOD_FLOW_STEADY if(HAS_TRAIT(victim, TRAIT_BLOOD_FOUNTAIN)) return BLOOD_FLOW_INCREASING - if(limb.current_gauze || clot_rate > 0) + if(LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE) || clot_rate > 0) return BLOOD_FLOW_DECREASING if(clot_rate < 0) return BLOOD_FLOW_INCREASING @@ -114,12 +112,11 @@ adjust_blood_flow(0.25 * seconds_per_tick) // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first //gauze always reduces blood flow, even for non bleeders - if(limb.current_gauze) - if(clot_rate > 0) - adjust_blood_flow(-clot_rate * seconds_per_tick) - var/gauze_power = limb.current_gauze.absorption_rate + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE) + if(current_gauze) + var/gauze_power = current_gauze.absorption_rate limb.seep_gauze(gauze_power * seconds_per_tick) - adjust_blood_flow(-gauze_power * gauzed_clot_rate * seconds_per_tick) + adjust_blood_flow((-clot_rate * seconds_per_tick) + (-gauze_power * gauzed_clot_rate * seconds_per_tick)) //otherwise, only clot if it's a bleeder else if(limb.can_bleed()) adjust_blood_flow(-clot_rate * seconds_per_tick) diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index 3e43a1081d0..d7c5392e93b 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -94,12 +94,13 @@ return ..() /datum/wound/slash/flesh/get_wound_description(mob/user) - if(!limb.current_gauze) + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE) + if(!current_gauze) return ..() var/list/msg = list("The cuts on [victim.p_their()] [limb.plaintext_zone] are wrapped with ") // how much life we have left in these bandages - switch(limb.current_gauze.absorption_capacity) + switch(current_gauze.absorption_capacity) if(0 to 1.25) msg += "nearly ruined" if(1.25 to 2.75) @@ -108,7 +109,7 @@ msg += "slightly bloodied" if(4 to INFINITY) msg += "clean" - msg += " [limb.current_gauze.name]!" + msg += " [current_gauze.name]!" return "[msg.Join()]" @@ -126,9 +127,8 @@ // compare with being at 100 brute damage before, where you bled (brute/100 * 2), = 2 blood per tile var/bleed_amt = min(blood_flow * 0.1, 1) // 3 * 3 * 0.1 = 0.9 blood total, less than before! the share here is .3 blood of course. - if(limb.current_gauze) // gauze stops all bleeding from dragging on this limb, but wears the gauze out quicker - limb.seep_gauze(bleed_amt * 0.33) - return + if(limb.seep_gauze(bleed_amt * 0.33)) // gauze stops all bleeding from dragging on this limb, but wears the gauze out quicker + return 0 return bleed_amt @@ -138,7 +138,7 @@ return BLOOD_FLOW_STEADY if(HAS_TRAIT(victim, TRAIT_BLOOD_FOUNTAIN)) return BLOOD_FLOW_INCREASING - if(limb.current_gauze || clot_rate > 0) + if(LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE) || clot_rate > 0) return BLOOD_FLOW_DECREASING if(clot_rate < 0) return BLOOD_FLOW_INCREASING @@ -157,8 +157,9 @@ if(HAS_TRAIT(victim, TRAIT_BLOOD_FOUNTAIN)) adjust_blood_flow(0.25) // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first - if(limb.current_gauze) - var/gauze_power = limb.current_gauze.absorption_rate + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(limb.applied_items, LIMB_ITEM_GAUZE) + if(current_gauze) + var/gauze_power = current_gauze.absorption_rate limb.seep_gauze(gauze_power * seconds_per_tick) adjust_blood_flow(-gauze_power * seconds_per_tick) diff --git a/code/game/machinery/wall_healer.dm b/code/game/machinery/wall_healer.dm index 513faebd37b..4789b59d390 100644 --- a/code/game/machinery/wall_healer.dm +++ b/code/game/machinery/wall_healer.dm @@ -12,7 +12,7 @@ armor_type = /datum/armor/obj_machinery/wall_healer /// Cost per bandage dispensed. Note, always disregarded on red alert. - var/per_bandage_cost = (/obj/item/stack/medical/gauze::custom_price) / (/obj/item/stack/medical/gauze::amount) + var/per_bandage_cost = (/obj/item/stack/medical/wrap/gauze::custom_price) / (/obj/item/stack/medical/wrap/gauze::amount) /// Number of bandages to dispense on rmb. Never recharges but can be restocked. var/num_bandages = 5 /// Lazylist of bandages that have been restocked into the wall healer. @@ -82,7 +82,7 @@ context[SCREENTIP_CONTEXT_LMB] = "Heal self" context[SCREENTIP_CONTEXT_RMB] = "Get gauze" return CONTEXTUAL_SCREENTIP_SET - if(istype(held_item, /obj/item/stack/medical/gauze)) + if(istype(held_item, /obj/item/stack/medical/wrap/gauze)) context[SCREENTIP_CONTEXT_LMB] = "Restock" return CONTEXTUAL_SCREENTIP_SET @@ -335,7 +335,7 @@ to_chat(user, span_warning("You try to retrieve some gauze, but it gets all jammed up in the access port.")) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - var/obj/item/stack/medical/gauze/bandage = LAZYACCESS(stocked_bandages, 1) + var/obj/item/stack/medical/wrap/gauze/bandage = LAZYACCESS(stocked_bandages, 1) if(isnull(bandage)) num_bandages-- bandage = new(user.drop_location(), 1) @@ -352,12 +352,12 @@ /obj/machinery/wall_healer/on_deconstruction(disassembled) var/atom/drop_loc = drop_location() - for(var/obj/item/stack/medical/gauze/bandage as anything in stocked_bandages) + for(var/obj/item/stack/medical/wrap/gauze/bandage as anything in stocked_bandages) bandage.forceMove(drop_loc) - new /obj/item/stack/medical/gauze(drop_loc, num_bandages) + new /obj/item/stack/medical/wrap/gauze(drop_loc, num_bandages) /obj/machinery/wall_healer/item_interaction(mob/living/user, obj/item/tool, list/modifiers) - if(!istype(tool, /obj/item/stack/medical/gauze)) + if(!istype(tool, /obj/item/stack/medical/wrap/gauze)) return NONE if(!user.temporarilyRemoveItemFromInventory(tool)) to_chat(user, span_warning("You try to restock [src] with [tool], but it seems stuck to your hand.")) @@ -369,9 +369,9 @@ visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, vision_distance = 5, ) - var/obj/item/stack/medical/gauze/bandage = tool + var/obj/item/stack/medical/wrap/gauze/bandage = tool while(bandage.amount > 1) - var/obj/item/stack/medical/gauze/split_bandage = bandage.split_stack(1) + var/obj/item/stack/medical/wrap/gauze/split_bandage = bandage.split_stack(1) LAZYADD(stocked_bandages, split_bandage) split_bandage.forceMove(src) LAZYADD(stocked_bandages, bandage) diff --git a/code/game/objects/effects/decals/turfdecal/weakpoint.dm b/code/game/objects/effects/decals/turfdecal/weakpoint.dm index c982cb60a92..47749187b0f 100644 --- a/code/game/objects/effects/decals/turfdecal/weakpoint.dm +++ b/code/game/objects/effects/decals/turfdecal/weakpoint.dm @@ -67,8 +67,8 @@ return ITEM_INTERACT_SUCCESS /obj/effect/weakpoint/item_interaction(mob/living/user, obj/item/tool, list/modifiers) - if(istype(tool, /obj/item/stack/sticky_tape)) - var/obj/item/stack/sticky_tape/duct_tape = tool + if(istype(tool, /obj/item/stack/medical/wrap/sticky_tape)) + var/obj/item/stack/medical/wrap/sticky_tape/duct_tape = tool if(!duct_tape.use(1)) return ITEM_INTERACT_BLOCKING to_chat(user, span_notice("\The [src] is sealed with a little elbow grease and a mound of [duct_tape].")) diff --git a/code/game/objects/effects/spawners/random/medical.dm b/code/game/objects/effects/spawners/random/medical.dm index 2998e9dc670..57b180a02b4 100644 --- a/code/game/objects/effects/spawners/random/medical.dm +++ b/code/game/objects/effects/spawners/random/medical.dm @@ -8,7 +8,7 @@ loot = list( /obj/item/stack/medical/suture, /obj/item/stack/medical/mesh, - /obj/item/stack/medical/gauze, + /obj/item/stack/medical/wrap/gauze, ) /obj/effect/spawner/random/medical/injector diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index f8900240563..d244efb3ad4 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -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, diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 73e3fdd8b65..f231a69cc35 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -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), \ diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 51a224e8d60..cefc8aa6fa2 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -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) diff --git a/code/game/objects/items/stacks/tape.dm b/code/game/objects/items/stacks/tape.dm index a83f1627c74..c219f1d8bd3 100644 --- a/code/game/objects/items/stacks/tape.dm +++ b/code/game/objects/items/stacks/tape.dm @@ -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 diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index be4c3a4bbab..02dfbae7716 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -207,9 +207,9 @@ /obj/item/storage/belt/medical/paramedic/PopulateContents() SSwardrobe.provide_type(/obj/item/sensor_device, src) - SSwardrobe.provide_type(/obj/item/stack/medical/gauze/twelve, src) - SSwardrobe.provide_type(/obj/item/stack/medical/bone_gel, src) - SSwardrobe.provide_type(/obj/item/stack/sticky_tape/surgical, src) + SSwardrobe.provide_type(/obj/item/stack/medical/wrap/gauze/twelve, src) + SSwardrobe.provide_type(/obj/item/tourniquet, src) + SSwardrobe.provide_type(/obj/item/bonesetter, src) SSwardrobe.provide_type(/obj/item/reagent_containers/syringe, src) SSwardrobe.provide_type(/obj/item/reagent_containers/cup/bottle/ammoniated_mercury, src) SSwardrobe.provide_type(/obj/item/reagent_containers/cup/bottle/formaldehyde, src) @@ -218,9 +218,9 @@ /obj/item/storage/belt/medical/paramedic/get_types_to_preload() var/list/to_preload = list() //Yes this is a pain. Yes this is the point to_preload += /obj/item/sensor_device - to_preload += /obj/item/stack/medical/gauze/twelve - to_preload += /obj/item/stack/medical/bone_gel - to_preload += /obj/item/stack/sticky_tape/surgical + to_preload += /obj/item/stack/medical/wrap/gauze/twelve + to_preload += /obj/item/tourniquet + to_preload += /obj/item/bonesetter to_preload += /obj/item/reagent_containers/syringe to_preload += /obj/item/reagent_containers/cup/bottle/ammoniated_mercury to_preload += /obj/item/reagent_containers/cup/bottle/formaldehyde @@ -906,4 +906,3 @@ desc = "An imitation of a design grown by the infamous Tiziran Plasma Fire. Has a trigger mechanism to more forcefully draw the blade." icon_state = "grass_gunsheath" actions_types = list(/datum/action/innate/blade_counter/gunpowered) - diff --git a/code/game/objects/items/storage/boxes/clothes_boxes.dm b/code/game/objects/items/storage/boxes/clothes_boxes.dm index f692354a689..dacd33f90c2 100644 --- a/code/game/objects/items/storage/boxes/clothes_boxes.dm +++ b/code/game/objects/items/storage/boxes/clothes_boxes.dm @@ -47,7 +47,7 @@ new /obj/item/clothing/head/wizard/tape/fake(src) new /obj/item/clothing/suit/wizrobe/tape/fake(src) new /obj/item/staff/tape(src) - new /obj/item/stack/sticky_tape(src) + new /obj/item/stack/medical/wrap/sticky_tape(src) /obj/item/storage/box/fakesyndiesuit name = "boxed replica space suit and helmet" diff --git a/code/game/objects/items/storage/dufflebags.dm b/code/game/objects/items/storage/dufflebags.dm index 15eaf089d30..377dd158a8d 100644 --- a/code/game/objects/items/storage/dufflebags.dm +++ b/code/game/objects/items/storage/dufflebags.dm @@ -287,7 +287,7 @@ new /obj/item/bonesetter(src) new /obj/item/blood_filter(src) new /obj/item/stack/medical/bone_gel(src) - new /obj/item/stack/sticky_tape/surgical(src) + new /obj/item/stack/medical/wrap/sticky_tape/surgical(src) new /obj/item/emergency_bed(src) new /obj/item/clothing/suit/jacket/straight_jacket(src) new /obj/item/clothing/mask/muzzle(src) diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index 2ac03f96f5e..14dad15fa7b 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -43,7 +43,7 @@ if(empty) return var/list/items_inside = list( - /obj/item/stack/medical/gauze = 1, + /obj/item/stack/medical/wrap/gauze = 1, /obj/item/stack/medical/suture = 2, /obj/item/stack/medical/mesh = 2, /obj/item/reagent_containers/hypospray/medipen = 1, @@ -62,7 +62,7 @@ return var/list/items_inside = list( /obj/item/healthanalyzer/simple = 1, - /obj/item/stack/medical/gauze = 1, + /obj/item/stack/medical/wrap/gauze = 1, /obj/item/stack/medical/bandage = 1, /obj/item/stack/medical/ointment = 1, /obj/item/reagent_containers/hypospray/medipen/ekit = 2, @@ -82,7 +82,7 @@ return var/list/items_inside = list( /obj/item/healthanalyzer = 1, - /obj/item/stack/medical/gauze/twelve = 1, + /obj/item/stack/medical/wrap/gauze/twelve = 1, /obj/item/stack/medical/suture = 2, /obj/item/stack/medical/mesh = 2, /obj/item/reagent_containers/hypospray/medipen = 1, @@ -109,12 +109,12 @@ /obj/item/retractor/advanced = 1, /obj/item/cautery/advanced = 1, /obj/item/surgical_drapes = 1, - /obj/item/stack/medical/gauze/twelve = 1, + /obj/item/stack/medical/wrap/gauze/twelve = 1, /obj/item/reagent_containers/medigel/sterilizine = 1, /obj/item/bonesetter = 1, /obj/item/blood_filter = 1, /obj/item/stack/medical/bone_gel = 1, - /obj/item/stack/sticky_tape/surgical = 1, + /obj/item/stack/medical/wrap/sticky_tape/surgical = 1, /obj/item/reagent_containers/syringe = 1, /obj/item/reagent_containers/cup/bottle/sodium_thiopental = 1, ) @@ -131,7 +131,7 @@ if(empty) return var/list/items_inside = list( - /obj/item/stack/medical/gauze = 1, + /obj/item/stack/medical/wrap/gauze = 1, /obj/item/stack/medical/bruise_pack = 3, /obj/item/stack/medical/ointment= 3) generate_items_inside(items_inside,src) @@ -234,7 +234,7 @@ return var/list/items_inside = list( /obj/item/reagent_containers/applicator/patch/libital = 3, - /obj/item/stack/medical/gauze = 1, + /obj/item/stack/medical/wrap/gauze = 1, /obj/item/storage/pill_bottle/probital = 1, /obj/item/reagent_containers/hypospray/medipen/salacid = 1, /obj/item/healthanalyzer/simple = 1, @@ -258,7 +258,7 @@ var/list/items_inside = list( /obj/item/reagent_containers/applicator/patch/synthflesh = 3, /obj/item/reagent_containers/hypospray/medipen/atropine = 2, - /obj/item/stack/medical/gauze = 1, + /obj/item/stack/medical/wrap/gauze = 1, /obj/item/storage/pill_bottle/penacid = 1) generate_items_inside(items_inside,src) @@ -277,7 +277,7 @@ var/list/items_inside = list( /obj/item/healthanalyzer/advanced = 1, /obj/item/reagent_containers/hypospray/medipen/atropine = 1, - /obj/item/stack/medical/gauze = 1, + /obj/item/stack/medical/wrap/gauze = 1, /obj/item/stack/medical/suture/medicated = 2, /obj/item/stack/medical/mesh/advanced = 2, ) @@ -306,7 +306,7 @@ /obj/item/storage/box/bandages = 1, /obj/item/surgical_drapes = 1, /obj/item/reagent_containers/hypospray/medipen/atropine = 2, - /obj/item/stack/medical/gauze = 2, + /obj/item/stack/medical/wrap/gauze = 2, /obj/item/stack/medical/suture/medicated = 2, /obj/item/stack/medical/mesh/advanced = 2, /obj/item/reagent_containers/applicator/patch/libital = 4, @@ -333,7 +333,7 @@ /obj/item/reagent_containers/applicator/patch/libital = 3, /obj/item/reagent_containers/applicator/patch/aiuri = 3, /obj/item/healthanalyzer/advanced = 1, - /obj/item/stack/medical/gauze = 2, + /obj/item/stack/medical/wrap/gauze = 2, /obj/item/mod/module/thread_ripper = 1, /obj/item/mod/module/surgical_processor/preloaded = 1, /obj/item/mod/module/defibrillator/combat = 1, @@ -510,4 +510,3 @@ for(var/i in 1 to atom_storage.max_slots) new /obj/item/reagent_containers/cup/tube(src) update_appearance(UPDATE_ICON_STATE) - diff --git a/code/game/objects/items/tourniquet.dm b/code/game/objects/items/tourniquet.dm new file mode 100644 index 00000000000..8962adbae72 --- /dev/null +++ b/code/game/objects/items/tourniquet.dm @@ -0,0 +1,146 @@ +/obj/item/tourniquet + name = "tourniquet" + desc = "A medical device used to stop severe bleeding from a limb." + icon = 'icons/obj/medical/firstaid.dmi' + icon_state = "tourniquet" + + w_class = WEIGHT_CLASS_SMALL + resistance_flags = FLAMMABLE + max_integrity = 50 + item_flags = NOBLUDGEON + custom_premium_price = PAYCHECK_CREW * 2 + +/obj/item/tourniquet/Initialize(mapload) + . = ..() + AddComponent( \ + /datum/component/limb_applicable, \ + valid_zones = GLOB.limb_zones.Copy() + BODY_ZONE_HEAD, \ + apply_category = LIMB_ITEM_TOURNIQUET, \ + can_apply = CALLBACK(src, PROC_REF(can_apply_tourniquet)), \ + ) + RegisterSignal(src, COMSIG_ITEM_APPLIED_TO_LIMB, PROC_REF(on_applied_to_limb)) + RegisterSignal(src, COMSIG_ITEM_UNAPPLIED_FROM_LIMB, PROC_REF(on_removed_from_limb)) + +/obj/item/tourniquet/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/tourniquet/suicide_act(mob/living/user) + user.visible_message(span_suicide("[user] begins to wrap [src] around [p_their()] neck too tight! It looks like [user.p_theyre()] trying to commit suicide!")) + if(!do_after(user, 5 SECONDS, user)) + return SHAME + var/obj/item/bodypart/head = user.get_bodypart(BODY_ZONE_HEAD) + if(!head || !head.dismember()) + return SHAME + return OXYLOSS + +/obj/item/tourniquet/proc/on_applied_to_limb(datum/source, obj/item/bodypart/limb) + SIGNAL_HANDLER + limb.refresh_bleed_rate() + switch(limb.body_zone) + if(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM) + var/obj/item/bodypart/arm/arm = limb + arm.set_speed_modifiers(arm.interaction_modifier + 0.5, arm.click_cd_modifier + 0.5) + if(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + var/obj/item/bodypart/leg/leg = limb + leg.set_speed_modifier(leg.speed_modifier + 0.5) + if(BODY_ZONE_HEAD) + START_PROCESSING(SSobj, src) + +/obj/item/tourniquet/proc/on_removed_from_limb(datum/source, obj/item/bodypart/limb) + SIGNAL_HANDLER + limb.refresh_bleed_rate() + switch(limb.body_zone) + if(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM) + var/obj/item/bodypart/arm/arm = limb + arm.set_speed_modifiers(arm.interaction_modifier - 0.5, arm.click_cd_modifier - 0.5) + if(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + var/obj/item/bodypart/leg/leg = limb + leg.set_speed_modifier(leg.speed_modifier - 0.5) + if(BODY_ZONE_HEAD) + START_PROCESSING(SSobj, src) + +/obj/item/tourniquet/process(seconds_per_tick) + var/obj/item/bodypart/limb = loc + if(!istype(limb) || isnull(limb.owner)) + return PROCESS_KILL + if(HAS_TRAIT(limb.owner, TRAIT_NOBREATH)) + return // you win this time + + limb.owner.losebreath += 1 * seconds_per_tick // incapable of breathing + limb.owner.apply_damage(1 * seconds_per_tick, OXY, BODY_ZONE_HEAD, forced = TRUE) // no blood getting to brain + if(SPT_PROB(6, seconds_per_tick)) + limb.owner.apply_damage(10, STAMINA, BODY_ZONE_HEAD, forced = TRUE) + if(SPT_PROB(5, seconds_per_tick)) + limb.owner.adjust_eye_blur(4 SECONDS) + if(SPT_PROB(4, seconds_per_tick)) + limb.owner.adjust_dizzy(4 SECONDS) + limb.owner.adjust_confusion(2 SECONDS) + +/obj/item/tourniquet/proc/can_apply_tourniquet(mob/user, mob/living/patient, obj/item/bodypart/limb) + var/speed_multiplier = 2 + var/speed_boosted = FALSE + for(var/datum/wound/woundies as anything in limb.wounds) + if(!woundies.blood_flow) + continue + if(HAS_TRAIT(woundies, TRAIT_WOUND_SCANNED) && limb.body_zone != BODY_ZONE_HEAD) + speed_multiplier = 0.5 + speed_boosted = TRUE + break + speed_multiplier = 1 + + if(limb.body_zone == BODY_ZONE_HEAD) + speed_multiplier *= 2 // are you sure about that? + + else if(user != patient) + speed_multiplier *= 0.5 + + if(limb.body_zone == BODY_ZONE_HEAD) + user.visible_message( + span_warning("[user] begins applying [src] to [user == patient ? p_their() : "[patient]'s"] neck..."), + span_userdanger("You begin applying [src] to [user == patient ? "your" : "[patient]'s"] neck, though you begin wonder if this is a good idea...?"), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + ignored_mobs = patient, + ) + if(user != patient) + patient.show_message( + span_userdanger("[user] begins applying [src] to your neck! That can't be a good idea...!"), + MSG_VISUAL, + span_userdanger("You feel [user] start wrapping something tight around your neck! That can't be a good idea...!"), + ) + + else if(speed_boosted) + user.visible_message( + span_notice("[user] begins expertly applying [src] to [user == patient ? p_their() : "[patient]'s"] own [limb.plaintext_zone]..."), + span_notice("You begin expertly applying [src] to [user == patient ? "your" : "[patient]'s"] own [limb.plaintext_zone], keeping the holo-image indications in mind..."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + ignored_mobs = patient, + ) + if(user != patient) + patient.show_message( + span_notice("[user] begins expertly applying [src] to your [limb.plaintext_zone]..."), + MSG_VISUAL, + span_notice("You feel [user] start wrapping something around your [limb.plaintext_zone] with expert precision..."), + ) + + else + user.visible_message( + span_warning("[user] begins applying [src] to [user == patient ? p_their() : "[patient]'s"] [limb.plaintext_zone]..."), + span_warning("You begin applying [src] to [user == patient ? "your" : "[patient]'s"] [limb.plaintext_zone]..."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + ignored_mobs = patient, + ) + if(user != patient) + patient.show_message( + span_warning("[user] begins applying [src] to your [limb.plaintext_zone]..."), + MSG_VISUAL, + span_warning("You feel [user] start wrapping something around your [limb.plaintext_zone]..."), + ) + + if(!do_after(user, 5 SECONDS * speed_multiplier, patient)) + return FALSE + + // pain from tight wrapping + patient.apply_damage(5, BRUTE, limb, attacking_item = src) + patient.apply_damage(20, STAMINA, limb, attacking_item = src) + return TRUE diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index ddd21237451..b6d364feb5c 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -93,7 +93,7 @@ /obj/item/reagent_containers/cup/bottle/toxin, /obj/item/reagent_containers/cup/beaker/large, /obj/item/reagent_containers/applicator/pill/insulin, - /obj/item/stack/medical/gauze, + /obj/item/stack/medical/wrap/gauze, /obj/item/storage/box/bandages, /obj/item/storage/box/beakers, /obj/item/storage/box/medigels, diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 277e689656b..ddf0b30145f 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -487,7 +487,7 @@ GLOBAL_LIST_INIT(holiday_mail, list()) begin_month = JULY holiday_hat = /obj/item/clothing/head/costume/nursehat holiday_mail = list( - /obj/item/stack/medical/gauze, + /obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/ointment, /obj/item/storage/box/bandages, ) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 1a11895f0af..8a5abd2869a 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -112,6 +112,22 @@ weapon.get_embed().rip_out(usr) return + if(href_list["remove_tourniquet"]) + var/obj/item/bodypart/limb = locate(href_list["remove_tourniquet"]) in bodyparts + var/mob/living/patient = limb?.owner + var/obj/item/tourniquet = LAZYACCESS(limb?.applied_items, LIMB_ITEM_TOURNIQUET) + if(QDELETED(limb) || QDELETED(patient) || QDELETED(tourniquet)) + return + balloon_alert_to_viewers("removing tourniquet...") + if(!do_after(usr, 4 SECONDS, target = src)) + return + if(QDELETED(limb) || QDELETED(patient) || QDELETED(tourniquet) || limb.owner != patient || tourniquet.loc != limb) + return + + balloon_alert_to_viewers("tourniquet removed") + usr.put_in_hands(tourniquet) + return + if(href_list["show_paper_note"]) var/obj/item/paper/paper_note = locate(href_list["show_paper_note"]) if(!paper_note) @@ -931,7 +947,7 @@ ///Updates the bodypart speed modifier based on our bodyparts. /mob/living/carbon/proc/update_bodypart_speed_modifier() var/final_modification = 0 - for(var/obj/item/bodypart/bodypart as anything in bodyparts) + for(var/obj/item/bodypart/leg/bodypart in bodyparts) final_modification += bodypart.speed_modifier add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bodypart, update = TRUE, multiplicative_slowdown = final_modification) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index baf95f04fc4..210c0be8c2a 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -53,13 +53,15 @@ for(var/obj/item/bodypart/body_part as anything in bodyparts) if(body_part.bodypart_disabled) disabled += body_part + + var/treatment_distance = isliving(user) && get_dist(src, user) <= CARBON_EXAMINE_EMBEDDING_MAX_DIST for(var/obj/item/embedded as anything in body_part.embedded_objects) if(embedded.get_embed().stealthy_embed) continue var/harmless = embedded.get_embed().is_harmless() var/stuck_wordage = harmless ? "stuck to" : "embedded in" var/embed_line = "\a [embedded]" - if (get_dist(src, user) <= CARBON_EXAMINE_EMBEDDING_MAX_DIST) + if (treatment_distance) embed_line = "\a [embedded]" var/embed_text = "[t_He] [t_has] [icon2html(embedded, user)] [embed_line] [stuck_wordage] [t_his] [body_part.plaintext_zone]!" if (harmless) @@ -67,6 +69,17 @@ else . += span_boldwarning(embed_text) + var/obj/item/tourniquet/current_tourniquet = LAZYACCESS(body_part.applied_items, LIMB_ITEM_TOURNIQUET) + if(current_tourniquet) + var/tourniquet_href = "\a [current_tourniquet]" + if(treatment_distance) + tourniquet_href = "[tourniquet_href]" + var/tourniquet_msg = "[t_He] [t_has] [icon2html(current_tourniquet, user)] [tourniquet_href] tightly secured around [t_his] [body_part.body_zone == BODY_ZONE_HEAD ? "neck" : body_part.plaintext_zone]." + if(body_part.body_zone == BODY_ZONE_HEAD) + . += span_boldwarning(tourniquet_msg) + else + . += span_notice(tourniquet_msg) + for(var/datum/wound/iter_wound as anything in body_part.wounds) . += span_danger(iter_wound.get_examine_description(user)) diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 83da4418def..1e95ae542ac 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -723,7 +723,7 @@ /obj/item/extinguisher/mini, /obj/item/emergency_bed/silicon, /obj/item/borg/cyborghug/medical, - /obj/item/stack/medical/gauze, + /obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/bone_gel, /obj/item/borg/apparatus/organ_storage, /obj/item/borg/lollipop, @@ -939,7 +939,7 @@ /obj/item/crowbar/cyborg, /obj/item/extinguisher/mini, /obj/item/pinpointer/syndicate_cyborg, - /obj/item/stack/medical/gauze, + /obj/item/stack/medical/wrap/gauze, /obj/item/stack/medical/bone_gel, /obj/item/gun/medbeam, /obj/item/borg/apparatus/organ_storage, diff --git a/code/modules/reagents/reagent_containers/cups/soda.dm b/code/modules/reagents/reagent_containers/cups/soda.dm index 40ab56e6093..51927093e6b 100644 --- a/code/modules/reagents/reagent_containers/cups/soda.dm +++ b/code/modules/reagents/reagent_containers/cups/soda.dm @@ -192,7 +192,7 @@ update_appearance() return ITEM_INTERACT_SUCCESS - if (istype(tool, /obj/item/stack/sticky_tape)) + if (istype(tool, /obj/item/stack/medical/wrap/sticky_tape)) if (tape_color) to_chat(user, span_warning("[src]'s hole is already covered up with tape!")) return ITEM_INTERACT_BLOCKING @@ -201,7 +201,7 @@ to_chat(user, span_warning("[src] hasn't been opened yet!")) return ITEM_INTERACT_BLOCKING - var/obj/item/stack/sticky_tape/tape = tool + var/obj/item/stack/medical/wrap/sticky_tape/tape = tool var/list/tape_colors = SSgreyscale.ParseColorString(tape.greyscale_colors) add_fingerprint(user) if (!tape.use(1)) diff --git a/code/modules/research/designs/autolathe/medsci_designs.dm b/code/modules/research/designs/autolathe/medsci_designs.dm index 7e804c21e6f..f36b37b4170 100644 --- a/code/modules/research/designs/autolathe/medsci_designs.dm +++ b/code/modules/research/designs/autolathe/medsci_designs.dm @@ -52,7 +52,7 @@ id = "surgical_tape" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) - build_path = /obj/item/stack/sticky_tape/surgical + build_path = /obj/item/stack/medical/wrap/sticky_tape/surgical category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, diff --git a/code/modules/research/designs/autolathe/service_designs.dm b/code/modules/research/designs/autolathe/service_designs.dm index 82911ce3caf..cfad5497e20 100644 --- a/code/modules/research/designs/autolathe/service_designs.dm +++ b/code/modules/research/designs/autolathe/service_designs.dm @@ -459,7 +459,7 @@ id = "sticky_tape" build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SMALL_MATERIAL_AMOUNT*5) - build_path = /obj/item/stack/sticky_tape + build_path = /obj/item/stack/medical/wrap/sticky_tape category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT) category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE, diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index b355e379ab2..20a552095ef 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -882,7 +882,7 @@ id = "super_sticky_tape" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/plastic =SHEET_MATERIAL_AMOUNT * 1.5) - build_path = /obj/item/stack/sticky_tape/super + build_path = /obj/item/stack/medical/wrap/sticky_tape/super category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE ) @@ -893,7 +893,7 @@ id = "pointy_tape" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plastic =HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sticky_tape/pointy + build_path = /obj/item/stack/medical/wrap/sticky_tape/pointy category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE ) @@ -904,7 +904,7 @@ id = "super_pointy_tape" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plastic =SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sticky_tape/pointy/super + build_path = /obj/item/stack/medical/wrap/sticky_tape/pointy/super category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE ) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 6d4b1546fc7..c7af5bf0708 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -72,8 +72,6 @@ var/list/embedded_objects /// are we a hand? if so, which one! var/held_index = 0 - /// A speed modifier we apply to the owner when attached, if any. Positive numbers make it move slower, negative numbers make it move faster. - var/speed_modifier = 0 // Limb disabling variables ///Whether it is possible for the limb to be disabled whatsoever. TRUE means that it is possible. @@ -156,10 +154,10 @@ var/cached_bleed_rate = 0 /// How much generic bleedstacks we have on this bodypart var/generic_bleedstacks - /// If we have a gauze wrapping currently applied (not including splints) - var/obj/item/stack/medical/gauze/current_gauze /// If something is currently grasping this bodypart and trying to staunch bleeding (see [/obj/item/hand_item/self_grasp]) var/obj/item/hand_item/self_grasp/grasped_by + /// Lazylist of category to item applied to this limb + var/list/applied_items ///A list of all bodypart overlays to draw var/list/bodypart_overlays = list() @@ -296,7 +294,7 @@ owner = null - QDEL_NULL(current_gauze) + QDEL_LIST_ASSOC_VAL(applied_items) QDEL_LAZYLIST(scars) for(var/atom/movable/movable in contents) @@ -434,14 +432,24 @@ continue var/harmless = embedded_thing.get_embed().is_harmless() var/stuck_wordage = harmless ? "stuck to" : "embedded in" - var/embed_text = "\t There is [icon2html(embedded_thing, examiner)] \a [embedded_thing] [stuck_wordage] your [plaintext_zone]!" + var/embed_text = "\tThere is [icon2html(embedded_thing, examiner)] \a [embedded_thing] [stuck_wordage] your [plaintext_zone]!" if (harmless) check_list += span_italics(span_notice(embed_text)) else check_list += span_boldwarning(embed_text) - if(current_gauze) - check_list += span_notice("\tThere is some [current_gauze.name] wrapped around it.") + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(applied_items, LIMB_ITEM_GAUZE) + var/obj/item/tourniquet/current_tourniquet = LAZYACCESS(applied_items, LIMB_ITEM_TOURNIQUET) + if(current_tourniquet || current_gauze) + if(current_tourniquet) + var/tourniquet_href = "[icon2html(current_tourniquet, examiner)] \a [current_tourniquet]" + var/tourniquet_text = "\tThere is [tourniquet_href] tightly secured around [body_zone == BODY_ZONE_HEAD ? "your neck!" : "it."]" + if(body_zone == BODY_ZONE_HEAD) + check_list += span_boldwarning(tourniquet_text) + else + check_list += span_warning(tourniquet_text) + if(current_gauze) + check_list += span_notice("\tThere is some [current_gauze.name] wrapped around it.") else if(can_bleed()) var/bleed_text = "" switch(cached_bleed_rate) @@ -620,8 +628,6 @@ if(IS_ORGANIC_LIMB(src)) playsound(drop_loc, 'sound/misc/splort.ogg', 50, TRUE, -1) - QDEL_NULL(current_gauze) - for(var/obj/item/organ/bodypart_organ in contents) if(bodypart_organ.organ_flags & ORGAN_UNREMOVABLE) continue @@ -987,8 +993,6 @@ owner = null - if(speed_modifier) - old_owner.update_bodypart_speed_modifier() if(LAZYLEN(bodypart_traits)) old_owner.remove_traits(bodypart_traits, bodypart_trait_source) @@ -1010,8 +1014,6 @@ owner = new_owner - if(speed_modifier) - owner.update_bodypart_speed_modifier() if(LAZYLEN(bodypart_traits)) owner.add_traits(bodypart_traits, bodypart_trait_source) @@ -1519,7 +1521,7 @@ else if(body_zone != BODY_ZONE_CHEST) surgery_bloodloss *= 0.25 // bonus for being gauzed up - if(current_gauze) + if(LAZYACCESS(applied_items, LIMB_ITEM_GAUZE)) surgery_bloodloss *= 0.4 cached_bleed_rate += surgery_bloodloss @@ -1543,6 +1545,9 @@ if(grasped_by) cached_bleed_rate *= 0.7 + if(LAZYACCESS(applied_items, LIMB_ITEM_TOURNIQUET)) + cached_bleed_rate *= 0.1 + // Our bleed overlay is based directly off bleed_rate, so go aheead and update that would you? if(cached_bleed_rate != old_bleed_rate) update_part_wound_overlay() @@ -1590,41 +1595,69 @@ return ((biological_state & BIO_BLOODED) && (!owner || owner.can_bleed())) /** - * apply_gauze() is used to- well, apply gauze to a bodypart + * Inserts an item into the applied items list for this bodypart * - * As of the Wounds 2 PR, all bleeding is now bodypart based rather than the old bleedstacks system, and 90% of standard bleeding comes from flesh wounds (the exception is embedded weapons). - * The same way bleeding is totaled up by bodyparts, gauze now applies to all wounds on the same part. Thus, having a slash wound, a pierce wound, and a broken bone wound would have the gauze - * applying blood staunching to the first two wounds, while also acting as a sling for the third one. Once enough blood has been absorbed or all wounds with the ACCEPTS_GAUZE flag have been cleared, - * the gauze falls off. + * Note: Forcemoves the item to the bodypart's contents when called! * * Arguments: - * * gauze- Just the gauze stack we're taking a sheet from to apply here + * * applying_item - The item to apply + * * category - The category of item being applied (e.g. LIMB_ITEM_GAUZE). If null, defaults to the REF of the applying_item + * * override - If TRUE, will force the application of the item even if an item of the same category is already applied + * + * Returns TRUE if the item was successfully applied + * Returns FALSE if the item was not applied (e.g. an item of the same category is already applied and override is FALSE) */ -/obj/item/bodypart/proc/apply_gauze(obj/item/stack/medical/gauze/new_gauze) - if(!istype(new_gauze) || !new_gauze.absorption_capacity || !new_gauze.use(1)) - return - var/newly_gauzed = !current_gauze - QDEL_NULL(current_gauze) - current_gauze = new new_gauze.type(src, 1) - current_gauze.gauzed_bodypart = src - if(newly_gauzed) - SEND_SIGNAL(src, COMSIG_BODYPART_GAUZED, current_gauze, new_gauze) +/obj/item/bodypart/proc/apply_item(obj/item/applying_item, category, override = FALSE) + if(isnull(category)) + category = REF(applying_item) + + if(!override && LAZYACCESS(applied_items, category)) + return FALSE + + applying_item.forceMove(src) + LAZYSET(applied_items, category, applying_item) + SEND_SIGNAL(applying_item, COMSIG_ITEM_APPLIED_TO_LIMB, src) + return TRUE + +/obj/item/bodypart/Exited(atom/movable/gone, direction) + . = ..() + for(var/category, item in applied_items) + if(item != gone) + continue + LAZYREMOVE(applied_items, category) + SEND_SIGNAL(gone, COMSIG_ITEM_UNAPPLIED_FROM_LIMB, src) /** - * seep_gauze() is for when a gauze wrapping absorbs blood or pus from wounds, lowering its absorption capacity. + * Get how splinted this bodypart is based on applied items * - * The passed amount of seepage is deducted from the bandage's absorption capacity, and if we reach a negative absorption capacity, the bandages falls off and we're left with nothing. + * Multiplier applied to maluses, so lower = better + */ +/obj/item/bodypart/proc/get_splint_factor() + var/factor = 1 + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(applied_items, LIMB_ITEM_GAUZE) + if(current_gauze) + factor *= current_gauze.splint_factor + return factor + +/** + * Attempts to use up some of gauze applied + * If we use up all of the gauze, it is deleted * * Arguments: * * seep_amt - How much absorption capacity we're removing from our current bandages (think, how much blood or pus are we soaking up this tick?) + * + * Return TRUE if we successfully used up some gauze + * Return FALSE if we had no gauze to use up */ /obj/item/bodypart/proc/seep_gauze(seep_amt = 0) + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(applied_items, LIMB_ITEM_GAUZE) if(!current_gauze) - return + return FALSE current_gauze.absorption_capacity -= seep_amt if(current_gauze.absorption_capacity <= 0) owner.visible_message(span_danger("\The [current_gauze.name] on [owner]'s [name] falls away in rags."), span_warning("\The [current_gauze.name] on your [name] falls away in rags."), vision_distance=COMBAT_MESSAGE_RANGE) - QDEL_NULL(current_gauze) + qdel(current_gauze) + return TRUE ///A multi-purpose setter for all things immediately important to the icon and iconstate of the limb. /obj/item/bodypart/proc/change_appearance(icon, id, greyscale, dimorphic) diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 4424cd90bad..c888271cfc2 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -166,6 +166,12 @@ unarmed_damage_high = 10 unarmed_pummeling_bonus = 1.5 body_zone = BODY_ZONE_L_ARM + + /// Actionspeed modifier applied to doafters being done while this arm is active + var/interaction_modifier = 0 + /// Modifier to all click cds while this arm is active + var/click_cd_modifier = 1 + /// Datum describing how to offset things worn on the hands of this arm, note that an x offset won't do anything here var/datum/worn_feature_offset/worn_glove_offset /// Datum describing how to offset things held in the hands of this arm, the x offset IS functional here @@ -180,16 +186,26 @@ QDEL_NULL(held_hand_offset) return ..() +/obj/item/bodypart/arm/proc/set_speed_modifiers(interaction = 0, click = 1) + if(interaction_modifier == interaction && click_cd_modifier == click) + return + + owner?.remove_status_effect(/datum/status_effect/arm_speed_penalty, held_index) + interaction_modifier = interaction + click_cd_modifier = click + if(interaction_modifier != 0 || click_cd_modifier != 1) + owner?.apply_status_effect(/datum/status_effect/arm_speed_penalty, held_index, interaction, click) + /// We need to clear out hand hud items and appearance, so do that here /obj/item/bodypart/arm/clear_ownership(mob/living/carbon/old_owner) - ..() - + . = ..() old_owner.update_worn_gloves() - if(!held_index) return old_owner.on_lost_hand(src) + if(interaction_modifier != 0 || click_cd_modifier != 1) + old_owner.remove_status_effect(/datum/status_effect/arm_speed_penalty, held_index) if(!old_owner.hud_used) return @@ -199,7 +215,7 @@ /// We need to add hand hud items and appearance, so do that here /obj/item/bodypart/arm/apply_ownership(mob/living/carbon/new_owner) - ..() + . = ..() new_owner.update_worn_gloves() @@ -207,6 +223,8 @@ return new_owner.on_added_hand(src, held_index) + if(interaction_modifier != 0 || click_cd_modifier != 1) + new_owner.apply_status_effect(/datum/status_effect/arm_speed_penalty, held_index, interaction_modifier, click_cd_modifier) if(!new_owner.hud_used) return @@ -233,6 +251,63 @@ var/atom/movable/screen/inventory/hand/hand_screen_object = owner.hud_used.hand_slots["[held_index]"] hand_screen_object?.update_appearance() +/datum/status_effect/arm_speed_penalty + id = "arm_speed_penalty" + alert_type = null + status_type = STATUS_EFFECT_MULTIPLE + duration = STATUS_EFFECT_PERMANENT + tick_interval = STATUS_EFFECT_NO_TICK + /// Typepath of the actionspeed modifier applied by this status effect + VAR_FINAL/actionspeed_typepath = /datum/actionspeed_modifier/arm_speed_penalty + /// Index this status effect is applied for + var/hand_index + /// Actionspeed modifier amount + var/actionspeed_mod = 0 + /// Click cd modifier amount + var/click_cd_mod = 1 + +/datum/status_effect/arm_speed_penalty/on_creation(mob/living/new_owner, hand_index, new_actionspeed = 0, new_click_cd = 1) + src.hand_index = hand_index + src.actionspeed_mod = new_actionspeed + src.click_cd_mod = new_click_cd + + switch(hand_index) + if(1) + actionspeed_typepath = /datum/actionspeed_modifier/arm_speed_penalty/left_hand + if(2) + actionspeed_typepath = /datum/actionspeed_modifier/arm_speed_penalty/right_hand + + return ..() + +/datum/status_effect/arm_speed_penalty/before_remove(hand_index) + return (src.hand_index == hand_index) + +/datum/status_effect/arm_speed_penalty/on_apply() + RegisterSignal(owner, COMSIG_MOB_SWAP_HANDS, PROC_REF(on_handswap)) + on_handswap(owner) + return TRUE + +/datum/status_effect/arm_speed_penalty/on_remove() + owner.remove_actionspeed_modifier(actionspeed_typepath) + UnregisterSignal(owner, COMSIG_MOB_SWAP_HANDS) + +/datum/status_effect/arm_speed_penalty/proc/on_handswap(mob/living/carbon/source) + SIGNAL_HANDLER + if(owner.active_hand_index == hand_index) + owner.add_or_update_variable_actionspeed_modifier(actionspeed_typepath, update = TRUE, multiplicative_slowdown = actionspeed_mod) + else + owner.remove_actionspeed_modifier(actionspeed_typepath) + +/datum/status_effect/arm_speed_penalty/nextmove_modifier() + return (owner.active_hand_index == hand_index) ? click_cd_mod : 1 + +/datum/actionspeed_modifier/arm_speed_penalty + variable = TRUE + +/datum/actionspeed_modifier/arm_speed_penalty/left_hand + +/datum/actionspeed_modifier/arm_speed_penalty/right_hand + /obj/item/bodypart/arm/left name = "left arm" desc = "Did you know that the word 'sinister' stems originally from the \ @@ -416,6 +491,8 @@ unarmed_damage_high = 15 unarmed_effectiveness = 15 biological_state = BIO_STANDARD_JOINTED + /// A speed modifier we apply to the owner when attached, if any. Positive numbers make it move slower, negative numbers make it move faster. + var/speed_modifier = 0 /// Datum describing how to offset things worn on the foot of this leg, note that an x offset won't do anything here var/datum/worn_feature_offset/worn_foot_offset /// Used by the bloodysoles component to make footprints @@ -458,6 +535,23 @@ else if(!bodypart_disabled) owner.set_usable_legs(owner.usable_legs + 1) +/obj/item/bodypart/leg/apply_ownership(mob/living/carbon/new_owner) + . = ..() + if(speed_modifier) + new_owner.update_bodypart_speed_modifier() + +/obj/item/bodypart/leg/clear_ownership(mob/living/carbon/old_owner) + . = ..() + if(speed_modifier) + old_owner.update_bodypart_speed_modifier() + +/obj/item/bodypart/leg/proc/set_speed_modifier(new_modifier) + if(speed_modifier == new_modifier) + return + + speed_modifier = new_modifier + owner?.update_bodypart_speed_modifier() + /obj/item/bodypart/leg/left name = "left leg" desc = "Some athletes prefer to tie their left shoelaces first for good \ diff --git a/code/modules/surgery/bodyparts/wounds.dm b/code/modules/surgery/bodyparts/wounds.dm index 07a9c3330bd..dfe4a7d4d4d 100644 --- a/code/modules/surgery/bodyparts/wounds.dm +++ b/code/modules/surgery/bodyparts/wounds.dm @@ -297,12 +297,13 @@ for(var/datum/wound/iter_wound as anything in wounds) dam_mul *= iter_wound.damage_multiplier_penalty + var/obj/item/stack/medical/wrap/current_gauze = LAZYACCESS(applied_items, LIMB_ITEM_GAUZE) if(!LAZYLEN(wounds) && current_gauze && !replaced) // no more wounds = no need for the gauze anymore if (owner) owner.visible_message(span_notice("\The [current_gauze.name] on [owner]'s [name] falls away."), span_notice("\The [current_gauze] on your [plaintext_zone] falls away.")) else visible_message(span_notice("\The [current_gauze.name] on [name] falls away.")) - QDEL_NULL(current_gauze) + qdel(current_gauze) wound_damage_multiplier = dam_mul refresh_bleed_rate() diff --git a/code/modules/surgery/operations/operation_add_limb.dm b/code/modules/surgery/operations/operation_add_limb.dm index ecdd579312e..3f12368ff12 100644 --- a/code/modules/surgery/operations/operation_add_limb.dm +++ b/code/modules/surgery/operations/operation_add_limb.dm @@ -169,8 +169,8 @@ desc = "Ensure that an arbitrary prosthetic is properly attached to a patient's body." implements = list( /obj/item/stack/medical/suture = 1, - /obj/item/stack/sticky_tape/surgical = 1.25, - /obj/item/stack/sticky_tape = 2, + /obj/item/stack/medical/wrap/sticky_tape/surgical = 1.25, + /obj/item/stack/medical/wrap/sticky_tape = 2, ) time = 4.8 SECONDS operation_flags = OPERATION_SELF_OPERABLE | OPERATION_STANDING_ALLOWED | OPERATION_IGNORE_CLOTHES @@ -179,7 +179,7 @@ /datum/surgery_operation/limb/secure_arbitrary_prosthetic/get_default_radial_image() return image(/obj/item/stack/medical/suture) -/datum/surgery_operation/limb/secure_arbitrary_prosthetic/on_preop(obj/item/bodypart/limb, mob/living/surgeon, obj/item/stack/tool, list/operation_args) +/datum/surgery_operation/limb/secure_arbitrary_prosthetic/on_preop(obj/item/bodypart/limb, mob/living/surgeon, obj/item/stack/medical/tool, list/operation_args) display_results( surgeon, limb.owner, @@ -190,7 +190,7 @@ var/obj/item/bodypart/chest = limb.owner.get_bodypart(BODY_ZONE_CHEST) display_pain(limb.owner, "[surgeon] begins to [tool.singular_name] [limb] to your body!", IS_ROBOTIC_LIMB(chest)) -/datum/surgery_operation/limb/secure_arbitrary_prosthetic/on_success(obj/item/bodypart/limb, mob/living/surgeon, obj/item/stack/tool, list/operation_args) +/datum/surgery_operation/limb/secure_arbitrary_prosthetic/on_success(obj/item/bodypart/limb, mob/living/surgeon, obj/item/stack/medical/tool, list/operation_args) display_results( surgeon, limb.owner, diff --git a/code/modules/surgery/operations/operation_bone_repair.dm b/code/modules/surgery/operations/operation_bone_repair.dm index 7f9821a4493..33088956928 100644 --- a/code/modules/surgery/operations/operation_bone_repair.dm +++ b/code/modules/surgery/operations/operation_bone_repair.dm @@ -72,9 +72,9 @@ implements = list( TOOL_BONESET = 1, /obj/item/stack/medical/bone_gel = 1, - /obj/item/stack/sticky_tape/surgical = 1, - /obj/item/stack/sticky_tape/super = 2, - /obj/item/stack/sticky_tape = 3.33, + /obj/item/stack/medical/wrap/sticky_tape/surgical = 1, + /obj/item/stack/medical/wrap/sticky_tape/super = 2, + /obj/item/stack/medical/wrap/sticky_tape = 3.33, ) time = 4 SECONDS any_surgery_states_required = ALL_SURGERY_SKIN_STATES @@ -124,9 +124,9 @@ operation_flags = OPERATION_PRIORITY_NEXT_STEP | OPERATION_NO_PATIENT_REQUIRED implements = list( TOOL_BONESET = 1, - /obj/item/stack/sticky_tape/surgical = 1.66, - /obj/item/stack/sticky_tape/super = 2.5, - /obj/item/stack/sticky_tape = 5, + /obj/item/stack/medical/wrap/sticky_tape/surgical = 1.66, + /obj/item/stack/medical/wrap/sticky_tape/super = 2.5, + /obj/item/stack/medical/wrap/sticky_tape = 5, ) time = 6 SECONDS all_surgery_states_required = SURGERY_SKIN_OPEN @@ -178,9 +178,9 @@ operation_flags = OPERATION_PRIORITY_NEXT_STEP | OPERATION_NO_PATIENT_REQUIRED implements = list( /obj/item/stack/medical/bone_gel = 1, - /obj/item/stack/sticky_tape/surgical = 1, - /obj/item/stack/sticky_tape/super = 2, - /obj/item/stack/sticky_tape = 3.33, + /obj/item/stack/medical/wrap/sticky_tape/surgical = 1, + /obj/item/stack/medical/wrap/sticky_tape/super = 2, + /obj/item/stack/medical/wrap/sticky_tape = 3.33, ) time = 4 SECONDS any_surgery_states_required = ALL_SURGERY_SKIN_STATES @@ -275,9 +275,9 @@ operation_flags = OPERATION_PRIORITY_NEXT_STEP | OPERATION_NO_PATIENT_REQUIRED implements = list( /obj/item/stack/medical/bone_gel = 1, - /obj/item/stack/sticky_tape/surgical = 1, - /obj/item/stack/sticky_tape/super = 2, - /obj/item/stack/sticky_tape = 3.33, + /obj/item/stack/medical/wrap/sticky_tape/surgical = 1, + /obj/item/stack/medical/wrap/sticky_tape/super = 2, + /obj/item/stack/medical/wrap/sticky_tape = 3.33, ) time = 4 SECONDS diff --git a/code/modules/surgery/operations/operation_generic.dm b/code/modules/surgery/operations/operation_generic.dm index c670c09c873..20d106e8d66 100644 --- a/code/modules/surgery/operations/operation_generic.dm +++ b/code/modules/surgery/operations/operation_generic.dm @@ -368,15 +368,15 @@ operation_flags = OPERATION_NO_PATIENT_REQUIRED implements = list( /obj/item/stack/medical/bone_gel = 1, - /obj/item/stack/sticky_tape/surgical = 1, - /obj/item/stack/sticky_tape/super = 2, - /obj/item/stack/sticky_tape = 3.33, + /obj/item/stack/medical/wrap/sticky_tape/surgical = 1, + /obj/item/stack/medical/wrap/sticky_tape/super = 2, + /obj/item/stack/medical/wrap/sticky_tape = 3.33, ) preop_sound = list( /obj/item/stack/medical/bone_gel = 'sound/misc/soggy.ogg', - /obj/item/stack/sticky_tape/surgical = 'sound/items/duct_tape/duct_tape_rip.ogg', - /obj/item/stack/sticky_tape/super = 'sound/items/duct_tape/duct_tape_rip.ogg', - /obj/item/stack/sticky_tape = 'sound/items/duct_tape/duct_tape_rip.ogg', + /obj/item/stack/medical/wrap/sticky_tape/surgical = 'sound/items/duct_tape/duct_tape_rip.ogg', + /obj/item/stack/medical/wrap/sticky_tape/super = 'sound/items/duct_tape/duct_tape_rip.ogg', + /obj/item/stack/medical/wrap/sticky_tape = 'sound/items/duct_tape/duct_tape_rip.ogg', ) time = 4 SECONDS all_surgery_states_required = SURGERY_SKIN_OPEN diff --git a/code/modules/surgery/surgery_tray.dm b/code/modules/surgery/surgery_tray.dm index 7d0653f7bdf..e34c644880f 100644 --- a/code/modules/surgery/surgery_tray.dm +++ b/code/modules/surgery/surgery_tray.dm @@ -178,7 +178,7 @@ /obj/item/retractor, /obj/item/scalpel, /obj/item/stack/medical/bone_gel, - /obj/item/stack/sticky_tape/surgical, + /obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/item/surgical_drapes, /obj/item/surgicaldrill, ) @@ -201,7 +201,7 @@ /obj/item/retractor/cruel, /obj/item/scalpel/cruel, /obj/item/stack/medical/bone_gel, - /obj/item/stack/sticky_tape/surgical, + /obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/item/surgical_drapes, /obj/item/surgicaldrill/cruel, ) @@ -221,7 +221,7 @@ /obj/item/blood_filter, /obj/item/shears, /obj/item/stack/medical/bone_gel, - /obj/item/stack/sticky_tape/surgical, + /obj/item/stack/medical/wrap/sticky_tape/surgical, /obj/item/clothing/mask/surgical, ) diff --git a/code/modules/uplink/uplink_items/device_tools.dm b/code/modules/uplink/uplink_items/device_tools.dm index 9696cd1bbb7..8fc403ea9c8 100644 --- a/code/modules/uplink/uplink_items/device_tools.dm +++ b/code/modules/uplink/uplink_items/device_tools.dm @@ -231,7 +231,7 @@ name = "Super Pointy Tape" desc = "An all-purpose super pointy tape roll. The tape is built with hundreds of tiny metal needles, the roll comes with in 5 pieces. When added to items the \ item that was taped will embed when thrown at people. Taping people's mouthes with it will hurt them if pulled off by someone else." - item = /obj/item/stack/sticky_tape/pointy/super + item = /obj/item/stack/medical/wrap/sticky_tape/pointy/super cost = 1 /datum/uplink_item/device_tools/hacked_module diff --git a/code/modules/vending/assist.dm b/code/modules/vending/assist.dm index 1f368e4afdd..a724d263996 100644 --- a/code/modules/vending/assist.dm +++ b/code/modules/vending/assist.dm @@ -15,7 +15,7 @@ /obj/item/stock_parts/micro_laser = 3, /obj/item/stock_parts/scanning_module = 3, /obj/item/wirecutters = 2, - /obj/item/stack/sticky_tape/duct = 3, + /obj/item/stack/medical/wrap/sticky_tape/duct = 3, ) contraband = list( /obj/item/assembly/health = 2, diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm index 13e30e1783f..3f9894e140c 100644 --- a/code/modules/vending/engivend.dm +++ b/code/modules/vending/engivend.dm @@ -17,7 +17,7 @@ /obj/item/electronics/airalarm = 10, /obj/item/electronics/firealarm = 10, /obj/item/electronics/firelock = 10, - /obj/item/stack/sticky_tape/duct = 10, + /obj/item/stack/medical/wrap/sticky_tape/duct = 10, ) contraband = list( /obj/item/stock_parts/power_store/cell/potato = 3, diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index 0cba3928f67..16e3921c1c3 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -6,12 +6,12 @@ panel_type = "panel11" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" products = list( - /obj/item/stack/medical/gauze = 8, + /obj/item/stack/medical/wrap/gauze = 8, /obj/item/reagent_containers/syringe = 12, /obj/item/reagent_containers/dropper = 3, /obj/item/healthanalyzer = 4, /obj/item/wrench/medical = 1, - /obj/item/stack/sticky_tape/surgical = 3, + /obj/item/stack/medical/wrap/sticky_tape/surgical = 3, /obj/item/healthanalyzer/simple = 4, /obj/item/stack/medical/ointment = 2, /obj/item/stack/medical/suture = 2, @@ -33,6 +33,7 @@ /obj/item/sensor_device = 2, /obj/item/storage/medkit/advanced = 2, /obj/item/shears = 1, + /obj/item/tourniquet = 6, /obj/item/storage/organbox = 1, ) refill_canister = /obj/item/vending_refill/medical @@ -52,12 +53,12 @@ /obj/machinery/vending/medical/infested_frigate products = list( - /obj/item/stack/medical/gauze = 0, + /obj/item/stack/medical/wrap/gauze = 0, /obj/item/reagent_containers/syringe = 7, /obj/item/reagent_containers/dropper = 3, /obj/item/healthanalyzer = 0, /obj/item/wrench/medical = 0, - /obj/item/stack/sticky_tape/surgical = 0, + /obj/item/stack/medical/wrap/sticky_tape/surgical = 0, /obj/item/healthanalyzer/simple = 0, /obj/item/stack/medical/ointment = 0, /obj/item/stack/medical/suture = 1, diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm index 612493db94f..90bb9823e10 100644 --- a/code/modules/vending/medical_wall.dm +++ b/code/modules/vending/medical_wall.dm @@ -9,7 +9,7 @@ /obj/item/stack/medical/bandage = 4, /obj/item/stack/medical/ointment = 2, /obj/item/reagent_containers/applicator/pill/multiver = 2, - /obj/item/stack/medical/gauze = 4, + /obj/item/stack/medical/wrap/gauze = 4, /obj/item/reagent_containers/hypospray/medipen/ekit = 2, /obj/item/healthanalyzer/simple = 2, ) diff --git a/icons/map_icons/items/_item.dmi b/icons/map_icons/items/_item.dmi index f1e1a9f5f02..ce998dbb391 100644 Binary files a/icons/map_icons/items/_item.dmi and b/icons/map_icons/items/_item.dmi differ diff --git a/icons/obj/medical/firstaid.dmi b/icons/obj/medical/firstaid.dmi new file mode 100644 index 00000000000..9744a12f29f Binary files /dev/null and b/icons/obj/medical/firstaid.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 9999e7e906b..8db0f8b03b9 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1229,6 +1229,7 @@ #include "code\datums\components\leash.dm" #include "code\datums\components\life_link.dm" #include "code\datums\components\light_eater.dm" +#include "code\datums\components\limb_applicable.dm" #include "code\datums\components\ling_decoy_brain.dm" #include "code\datums\components\listen_and_repeat.dm" #include "code\datums\components\lock_on_cursor.dm" @@ -2602,6 +2603,7 @@ #include "code\game\objects\items\tail_pin.dm" #include "code\game\objects\items\taster.dm" #include "code\game\objects\items\teleportation.dm" +#include "code\game\objects\items\tourniquet.dm" #include "code\game\objects\items\toy_mechs.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\trash.dm" diff --git a/tools/UpdatePaths/Scripts/95041_tape.txt b/tools/UpdatePaths/Scripts/95041_tape.txt new file mode 100644 index 00000000000..21cf45c7c4a --- /dev/null +++ b/tools/UpdatePaths/Scripts/95041_tape.txt @@ -0,0 +1,2 @@ +/obj/item/stack/sticky_tape/@SUBTYPES : /obj/item/stack/medical/wrap/sticky_tape/@SUBTYPES {@OLD} +/obj/item/stack/medical/gauze/@SUBTYPES : /obj/item/stack/medical/wrap/gauze/@SUBTYPES {@OLD}