diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index a6adcd01284..55c23761039 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -25,6 +25,35 @@ M = user return eyestab(M,user) +/obj/item/weapon/material/knife/verb/extract_shrapnel(var/mob/living/carbon/human/H as mob in view(1)) + set name = "Extract Shrapnel" + set category = "Object" + set src in usr + + if(use_check_and_message(usr)) + return + + if(!istype(H)) + return + + for(var/obj/item/weapon/material/shard/shrapnel/S in H.contents) + visible_message("[usr] starts carefully digging out some of the shrapnel in [H == usr ? "themselves" : H]...") + to_chat(H, "It burns!") + if(do_mob(usr, H, 100)) + S.forceMove(H.loc) + log_and_message_admins("has extracted shrapnel out of [key_name(H)]") + else + break + H.apply_damage(30, HALLOSS) + if(prob(25)) + var/obj/item/organ/external/affecting = H.get_organ(H.zone_sel.selecting) + if(affecting) + to_chat(H, "You feel something rip open in your [affecting.name]!") + var/datum/wound/internal_bleeding/I = new(15) + affecting.wounds += I + if(H.can_feel_pain()) + H.emote("scream") + /obj/item/weapon/material/knife/ritual name = "ritual knife" desc = "The unearthly energies that once powered this blade are now dormant." @@ -116,4 +145,4 @@ else to_chat(user, "\The [src] can now be concealed.") update_force() - add_fingerprint(user) \ No newline at end of file + add_fingerprint(user) diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index c20b6be3a63..cbd065effa3 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -6,6 +6,7 @@ * Surgical Drill * Scalpel * Circular Saw + * Tray */ /* @@ -174,3 +175,38 @@ w_class = 2.0 attack_verb = list("attacked", "hit", "bludgeoned") drop_sound = 'sound/items/drop/scrap.ogg' + +/obj/item/weapon/storage/box/tray + name = "surgery tray" + icon = 'icons/obj/storage.dmi' + icon_state = "surgerytray" + force = 2 + w_class = 5.0 + max_storage_space = 30 + attack_verb = list("slammed") + can_hold = list( + /obj/item/weapon/bonesetter, + /obj/item/weapon/cautery, + /obj/item/weapon/circular_saw, + /obj/item/weapon/hemostat, + /obj/item/weapon/retractor, + /obj/item/weapon/scalpel, + /obj/item/weapon/surgicaldrill, + /obj/item/weapon/bonegel, + /obj/item/weapon/FixOVein, + /obj/item/stack/medical/advanced/bruise_pack, + /obj/item/stack/nanopaste + ) + + starts_with = list( + /obj/item/weapon/bonesetter = 1, + /obj/item/weapon/cautery = 1, + /obj/item/weapon/circular_saw = 1, + /obj/item/weapon/hemostat = 1, + /obj/item/weapon/retractor = 1, + /obj/item/weapon/scalpel = 1, + /obj/item/weapon/surgicaldrill = 1, + /obj/item/weapon/bonegel = 1, + /obj/item/weapon/FixOVein = 1, + /obj/item/stack/medical/advanced/bruise_pack = 1, + ) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 61b3da90ebc..0aecce2a5a0 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -1138,7 +1138,10 @@ Note that amputating the affected organ does in fact remove the infection from t var/this_wound_desc = W.desc if(W.damage_type == BURN && W.salved) this_wound_desc = "salved [this_wound_desc]" if(W.bleeding()) this_wound_desc = "bleeding [this_wound_desc]" - else if(W.bandaged) this_wound_desc = "bandaged [this_wound_desc]" + if(W.bandaged == 1) + this_wound_desc = "bandaged [this_wound_desc]" + else if(W.bandaged != 0) + this_wound_desc = "[W.bandaged] [this_wound_desc]" if(W.germ_level > 600) this_wound_desc = "badly infected [this_wound_desc]" else if(W.germ_level > 330) this_wound_desc = "lightly infected [this_wound_desc]" if(wound_descriptors[this_wound_desc]) diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm index 05f2bafcfb2..d73dfb0bf85 100644 --- a/code/modules/organs/wound.dm +++ b/code/modules/organs/wound.dm @@ -142,8 +142,10 @@ return 0 -/datum/wound/proc/bandage() - bandaged = 1 +/datum/wound/proc/bandage(var/examine_desc) + if(!examine_desc) + bandaged = 1 + else bandaged = examine_desc /datum/wound/proc/salve() salved = 1 diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 5383d34ef15..7b28b412bae 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -489,6 +489,57 @@ obj/structure/cable/proc/cableColor(var/colorC) stacktype = /obj/item/stack/cable_coil drop_sound = 'sound/items/drop/accessory.ogg' +/obj/item/stack/cable_coil/attack(mob/living/carbon/M as mob, mob/user as mob) + if(..()) + return 1 + + if(amount <= 10) + to_chat(user, "You don't have enough coils for this!") + + if (ishuman(M)) + var/mob/living/carbon/human/H = M + + var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) + + if(affecting.open == 0) + if(affecting.is_bandaged()) + to_chat(user, "The cuts on [M]'s [affecting.name] have already been closed.") + return 1 + else + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + for(var/datum/wound/W in affecting.wounds) + if(W.internal) + continue + if(W.bandaged) + continue + if(W.current_stage <= W.max_bleeding_stage) + user.visible_message("\The [user] starts carefully suturing the open wound on [M]'s [affecting.name]...", \ + "You start carefully suturing the open wound on [M]'s [affecting.name]... This will take a while.") + if(!do_mob(user, M, 200)) + user.visible_message("[user]'s hand slips and tears open the wound on [M]'s [affecting.name]!", \ + "The wound on your [affecting.name] is torn open!") + M.apply_damage(rand(1,10), BRUTE) + break + user.visible_message("\The [user] barely manages to stitch \a [W.desc] on [M]'s [affecting.name].", \ + "You barely manage to stitch \a [W.desc] on [M]'s [affecting.name]." ) + W.bandage("cable-stitched") + use(10) + H.apply_damage(25, HALLOSS) + if(prob(50)) + var/obj/item/organ/external/O = H.get_organ(user.zone_sel.selecting) + to_chat(H, "Something burns in your [O.name]!") + O.germ_level += rand(400, 600) + else + to_chat(user, "This wound isn't large enough for a stitch!") + affecting.update_damages() + else + if (can_operate(H)) + if (do_surgery(H,user,src)) + return + else + to_chat(user, "You can't suture this kind of wound!") + return + /obj/item/stack/cable_coil/iscoil() return TRUE diff --git a/html/changelogs/mattatlas-stickstonesbones.yml b/html/changelogs/mattatlas-stickstonesbones.yml new file mode 100644 index 00000000000..8279dcb996a --- /dev/null +++ b/html/changelogs/mattatlas-stickstonesbones.yml @@ -0,0 +1,43 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: MattAtlas + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added a surgery tray to medical ORs and robotics. Sprite credit goes to NewOriginalSchwann." + - rscadd: "You can now extract shrapnel from someone or yourself with a material knife. It's painful, though! Use the extract shrapnel verb in the Object tab, or extract-shrapnel." + - rscadd: "Clicking on humans with a cable coil will now stitch their bleeding wounds. Only works if said wounds are bleeding and if they're cuts." diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 45cc027a661..ac9f0d9330b 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm index 8214d97bcb5..69e0240775f 100644 --- a/maps/aurora/aurora-4_mainlevel.dmm +++ b/maps/aurora/aurora-4_mainlevel.dmm @@ -269,6 +269,20 @@ /obj/random/loot, /turf/simulated/floor/plating, /area/maintenance/security_starboard) +"aaE" = ( +/obj/structure/table/standard, +/obj/machinery/camera/network/research{ + c_tag = "Research - Robotics Surgery"; + dir = 8; + network = list("Research","Toxins Test Area") + }, +/obj/effect/floor_decal/corner/mauve/full{ + icon_state = "corner_white_full"; + dir = 1 + }, +/obj/item/weapon/storage/box/tray, +/turf/simulated/floor/tiled/white, +/area/assembly/robotics) "aaF" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/atmospherics/portables_connector{ @@ -818,6 +832,18 @@ "abK" = ( /turf/simulated/wall, /area/maintenance/substation/security) +"abL" = ( +/obj/structure/table/standard, +/obj/machinery/camera/network/medbay{ + c_tag = "Medical - Operating Room 1"; + dir = 2 + }, +/obj/effect/floor_decal/corner/paleblue{ + icon_state = "corner_white"; + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/medical/surgerywing) "abM" = ( /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plating, @@ -911,6 +937,19 @@ /obj/random/loot, /turf/simulated/floor/plating, /area/maintenance/security_starboard) +"abW" = ( +/obj/structure/table/standard, +/obj/machinery/vending/wallmed2{ + pixel_x = 0; + pixel_y = 28 + }, +/obj/effect/floor_decal/corner/paleblue{ + icon_state = "corner_white"; + dir = 5 + }, +/obj/item/weapon/storage/box/tray, +/turf/simulated/floor/tiled/white, +/area/medical/surgerywing) "abX" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin, @@ -1098,6 +1137,41 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/security) +"acq" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/paleblue{ + icon_state = "corner_white_full"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/medical/surgerywing) +"acr" = ( +/obj/structure/table/standard, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1"; + pixel_x = 0 + }, +/obj/effect/floor_decal/corner/paleblue{ + icon_state = "corner_white"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/medical/surgerywing) +"acs" = ( +/obj/structure/table/standard, +/obj/machinery/alarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24; + req_one_access = list(24,11,55) + }, +/obj/effect/floor_decal/corner/paleblue{ + icon_state = "corner_white"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/medical/surgerywing) "act" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -1158,6 +1232,14 @@ }, /turf/simulated/floor/plating, /area/maintenance/security_starboard) +"acz" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/paleblue{ + icon_state = "corner_white"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/medical/surgerywing) "acA" = ( /obj/structure/cable/green{ d1 = 1; @@ -1395,6 +1477,46 @@ }, /turf/simulated/floor/tiled, /area/security/brig) +"acR" = ( +/obj/structure/table/standard, +/obj/machinery/alarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24; + req_one_access = list(24,11,55) + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1"; + pixel_x = 0 + }, +/obj/effect/floor_decal/corner/paleblue{ + icon_state = "corner_white"; + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/medical/surgerywing) +"acS" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/paleblue{ + icon_state = "corner_white"; + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/medical/surgerywing) +"acT" = ( +/obj/structure/table/standard, +/obj/machinery/vending/wallmed2{ + pixel_x = 0; + pixel_y = -28 + }, +/obj/effect/floor_decal/corner/paleblue{ + icon_state = "corner_white"; + dir = 10 + }, +/obj/item/weapon/storage/box/tray, +/turf/simulated/floor/tiled/white, +/area/medical/surgerywing) "acU" = ( /obj/structure/sink/kitchen{ dir = 4; @@ -1486,6 +1608,14 @@ /obj/structure/barricade, /turf/simulated/floor/tiled, /area/maintenance/security_starboard) +"adc" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/paleblue{ + icon_state = "corner_white_full"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/medical/surgerywing) "ade" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -30474,27 +30604,6 @@ }, /turf/simulated/floor/tiled/white, /area/assembly/robotics) -"bbD" = ( -/obj/structure/table/standard, -/obj/item/weapon/bonegel, -/obj/item/weapon/bonesetter, -/obj/item/weapon/cautery, -/obj/item/weapon/circular_saw, -/obj/item/weapon/retractor, -/obj/item/weapon/scalpel, -/obj/machinery/camera/network/research{ - c_tag = "Research - Robotics Surgery"; - dir = 8; - network = list("Research","Toxins Test Area") - }, -/obj/effect/floor_decal/corner/mauve/full{ - icon_state = "corner_white_full"; - dir = 1 - }, -/obj/item/weapon/surgicaldrill, -/obj/item/weapon/hemostat, -/turf/simulated/floor/tiled/white, -/area/assembly/robotics) "bbE" = ( /obj/machinery/alarm{ dir = 4; @@ -43406,43 +43515,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) -"bwv" = ( -/obj/structure/table/standard, -/obj/item/weapon/bonesetter, -/obj/item/weapon/bonegel, -/obj/machinery/camera/network/medbay{ - c_tag = "Medical - Operating Room 1"; - dir = 2 - }, -/obj/effect/floor_decal/corner/paleblue{ - icon_state = "corner_white"; - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgerywing) -"bww" = ( -/obj/structure/table/standard, -/obj/item/weapon/surgicaldrill, -/obj/item/weapon/FixOVein, -/obj/machinery/vending/wallmed2{ - pixel_x = 0; - pixel_y = 28 - }, -/obj/effect/floor_decal/corner/paleblue{ - icon_state = "corner_white"; - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgerywing) -"bwx" = ( -/obj/structure/table/standard, -/obj/item/weapon/retractor, -/obj/effect/floor_decal/corner/paleblue{ - icon_state = "corner_white_full"; - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgerywing) "bwy" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ icon_state = "map_scrubber_on"; @@ -44505,21 +44577,6 @@ /obj/effect/floor_decal/corner/paleblue/diagonal, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) -"bxV" = ( -/obj/structure/table/standard, -/obj/item/weapon/cautery, -/obj/item/weapon/hemostat, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1"; - pixel_x = 0 - }, -/obj/effect/floor_decal/corner/paleblue{ - icon_state = "corner_white"; - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgerywing) "bxY" = ( /obj/effect/floor_decal/corner/paleblue{ icon_state = "corner_white"; @@ -45171,24 +45228,6 @@ /obj/machinery/optable, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) -"bzm" = ( -/obj/structure/table/standard, -/obj/item/weapon/scalpel, -/obj/item/weapon/circular_saw{ - pixel_y = 8 - }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24; - req_one_access = list(24,11,55) - }, -/obj/effect/floor_decal/corner/paleblue{ - icon_state = "corner_white"; - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgerywing) "bzn" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -49123,18 +49162,6 @@ }, /turf/simulated/floor/plating, /area/medical/surgerywing) -"bGJ" = ( -/obj/structure/table/standard, -/obj/item/weapon/scalpel, -/obj/item/weapon/circular_saw{ - pixel_y = 8 - }, -/obj/effect/floor_decal/corner/paleblue{ - icon_state = "corner_white"; - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgerywing) "bGK" = ( /obj/effect/floor_decal/corner/grey, /obj/effect/floor_decal/corner/white{ @@ -49745,27 +49772,6 @@ /obj/effect/floor_decal/corner/paleblue/diagonal, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) -"bHC" = ( -/obj/structure/table/standard, -/obj/item/weapon/cautery, -/obj/item/weapon/hemostat, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24; - req_one_access = list(24,11,55) - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1"; - pixel_x = 0 - }, -/obj/effect/floor_decal/corner/paleblue{ - icon_state = "corner_white"; - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgerywing) "bHD" = ( /obj/structure/cable{ d1 = 2; @@ -50258,43 +50264,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) -"bID" = ( -/obj/structure/table/standard, -/obj/item/weapon/bonesetter, -/obj/item/weapon/bonegel, -/obj/machinery/camera/network/medbay{ - c_tag = "Medical - Operating Room 2"; - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue{ - icon_state = "corner_white"; - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgerywing) -"bIE" = ( -/obj/structure/table/standard, -/obj/item/weapon/surgicaldrill, -/obj/item/weapon/FixOVein, -/obj/machinery/vending/wallmed2{ - pixel_x = 0; - pixel_y = -28 - }, -/obj/effect/floor_decal/corner/paleblue{ - icon_state = "corner_white"; - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgerywing) -"bIF" = ( -/obj/structure/table/standard, -/obj/item/weapon/retractor, -/obj/effect/floor_decal/corner/paleblue{ - icon_state = "corner_white_full"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/medical/surgerywing) "bIH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/red, /obj/machinery/meter{ @@ -95927,7 +95896,7 @@ aWA aYj aZm baE -bbD +aaE bdf beM bgb @@ -107251,7 +107220,7 @@ bmO bmK buo bvz -bwv +abL bxT bzl bAn @@ -107263,7 +107232,7 @@ bvz bAn bzl bxT -bID +acS bvz bFP bBo @@ -107508,7 +107477,7 @@ brV bmJ bup bvz -bww +abW bxU bzk bzk @@ -107520,7 +107489,7 @@ bBj bzk bzk bxU -bIE +acT bvz bDZ bBo @@ -107765,9 +107734,9 @@ brW btm buq bvz -bwx -bxV -bzm +acq +acr +acs bAo bvz bCd @@ -107775,9 +107744,9 @@ bDb bDR bvz bAo -bGJ -bHC -bIF +acz +acR +adc bvz bDZ bBo