diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index d3ba0a96a81..06925300da6 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -65,24 +65,42 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
- if(!affecting.bandage())
+ if(affecting.is_bandaged())
user << "The wounds on [M]'s [affecting.name] have already been bandaged."
return 1
else
+ user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \
+ "You start treating [M]'s [affecting.name]." )
+ var/used = 0
for (var/datum/wound/W in affecting.wounds)
if (W.internal)
continue
+ if(W.bandaged)
+ continue
+ if(used == amount)
+ break
+ if(!do_mob(user, M, W.damage/5))
+ user << "You must stand still to bandage wounds."
+ break
if (W.current_stage <= W.max_bleeding_stage)
- user.visible_message("\The [user] bandages [W.desc] on [M]'s [affecting.name].", \
- "You bandage [W.desc] on [M]'s [affecting.name]." )
+ user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \
+ "You bandage \a [W.desc] on [M]'s [affecting.name]." )
//H.add_side_effect("Itch")
else if (istype(W,/datum/wound/bruise))
- user.visible_message("\The [user] places a bruise patch over [W.desc] on [M]'s [affecting.name].", \
- "You place a bruise patch over [W.desc] on [M]'s [affecting.name]." )
+ user.visible_message("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].", \
+ "You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]." )
else
- user.visible_message("\The [user] places a bandaid over [W.desc] on [M]'s [affecting.name].", \
- "You place a bandaid over [W.desc] on [M]'s [affecting.name]." )
- use(1)
+ user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].", \
+ "You place a bandaid over \a [W.desc] on [M]'s [affecting.name]." )
+ W.bandage()
+ used++
+ affecting.update_damages()
+ if(used == amount)
+ if(affecting.is_bandaged())
+ user << "\The [src] is used up."
+ else
+ user << "\The [src] is used up, but there are more wounds to treat on \the [affecting.name]."
+ use(used)
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
if (do_surgery(H,user,src))
@@ -108,13 +126,19 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
- if(!affecting.salve())
+ if(affecting.is_salved())
user << "The wounds on [M]'s [affecting.name] have already been salved."
return 1
else
- user.visible_message("[user] salves wounds on [M]'s [affecting.name].", \
- "You salve wounds on [M]'s [affecting.name]." )
+ user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \
+ "You start salving the wounds on [M]'s [affecting.name]." )
+ if(!do_mob(user, M, 10))
+ user << "You must stand still to salve wounds."
+ return 1
+ user.visible_message("[user] salved wounds on [M]'s [affecting.name].", \
+ "You salved wounds on [M]'s [affecting.name]." )
use(1)
+ affecting.salve()
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
if (do_surgery(H,user,src))
@@ -127,7 +151,7 @@
singular_name = "advanced trauma kit"
desc = "An advanced trauma kit for severe injuries."
icon_state = "traumakit"
- heal_brute = 12
+ heal_brute = 0
origin_tech = list(TECH_BIO = 1)
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
@@ -139,29 +163,44 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
- var/bandaged = affecting.bandage()
- var/disinfected = affecting.disinfect()
-
- if(!(bandaged || disinfected))
+ if(affecting.is_bandaged() && affecting.is_disinfected())
user << "The wounds on [M]'s [affecting.name] have already been treated."
return 1
else
+ user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \
+ "You start treating [M]'s [affecting.name]." )
+ var/used = 0
for (var/datum/wound/W in affecting.wounds)
if (W.internal)
continue
+ if (W.bandaged && W.disinfected)
+ continue
+ if(used == amount)
+ break
+ if(!do_mob(user, M, W.damage/5))
+ user << "You must stand still to bandage wounds."
+ break
if (W.current_stage <= W.max_bleeding_stage)
- user.visible_message("\The [user] cleans [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \
- "You clean and seal [W.desc] on [M]'s [affecting.name]." )
+ user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \
+ "You clean and seal \a [W.desc] on [M]'s [affecting.name]." )
//H.add_side_effect("Itch")
else if (istype(W,/datum/wound/bruise))
- user.visible_message("\The [user] places a medical patch over [W.desc] on [M]'s [affecting.name].", \
- "You place a medical patch over [W.desc] on [M]'s [affecting.name]." )
+ user.visible_message("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].", \
+ "You place a medical patch over \a [W.desc] on [M]'s [affecting.name]." )
else
- user.visible_message("\The [user] smears some bioglue over [W.desc] on [M]'s [affecting.name].", \
- "You smear some bioglue over [W.desc] on [M]'s [affecting.name]." )
- if (bandaged)
- affecting.heal_damage(heal_brute,0)
- use(1)
+ user.visible_message("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].", \
+ "You smear some bioglue over \a [W.desc] on [M]'s [affecting.name]." )
+ W.bandage()
+ W.disinfect()
+ W.heal_damage(heal_brute)
+ used++
+ affecting.update_damages()
+ if(used == amount)
+ if(affecting.is_bandaged())
+ user << "\The [src] is used up."
+ else
+ user << "\The [src] is used up, but there are more wounds to treat on \the [affecting.name]."
+ use(used)
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
if (do_surgery(H,user,src))
@@ -174,7 +213,7 @@
singular_name = "advanced burn kit"
desc = "An advanced treatment kit for severe burns."
icon_state = "burnkit"
- heal_burn = 12
+ heal_burn = 0
origin_tech = list(TECH_BIO = 1)
@@ -187,14 +226,20 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
- if(!affecting.salve())
+ if(affecting.is_salved())
user << "The wounds on [M]'s [affecting.name] have already been salved."
return 1
else
+ user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \
+ "You start salving the wounds on [M]'s [affecting.name]." )
+ if(!do_mob(user, M, 10))
+ user << "You must stand still to salve wounds."
+ return 1
user.visible_message( "[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.", \
"You cover wounds on [M]'s [affecting.name] with regenerative membrane." )
affecting.heal_damage(0,heal_burn)
use(1)
+ affecting.salve()
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
if (do_surgery(H,user,src))
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index ed81beb42bb..d535971a215 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -807,15 +807,46 @@ Note that amputating the affected organ does in fact remove the infection from t
"\The [holder.legcuffed.name] falls off you.")
holder.drop_from_inventory(holder.legcuffed)
+// checks if all wounds on the organ are bandaged
+/obj/item/organ/external/proc/is_bandaged()
+ for(var/datum/wound/W in wounds)
+ if(W.internal) continue
+ if(!W.bandaged)
+ return 0
+ return 1
+
+// checks if all wounds on the organ are salved
+/obj/item/organ/external/proc/is_salved()
+ for(var/datum/wound/W in wounds)
+ if(W.internal) continue
+ if(!W.salved)
+ return 0
+ return 1
+
+// checks if all wounds on the organ are disinfected
+/obj/item/organ/external/proc/is_disinfected()
+ for(var/datum/wound/W in wounds)
+ if(W.internal) continue
+ if(!W.disinfected)
+ return 0
+ return 1
+
/obj/item/organ/external/proc/bandage()
var/rval = 0
- src.status &= ~ORGAN_BLEEDING
+ status &= ~ORGAN_BLEEDING
for(var/datum/wound/W in wounds)
if(W.internal) continue
rval |= !W.bandaged
W.bandaged = 1
return rval
+/obj/item/organ/external/proc/salve()
+ var/rval = 0
+ for(var/datum/wound/W in wounds)
+ rval |= !W.salved
+ W.salved = 1
+ return rval
+
/obj/item/organ/external/proc/disinfect()
var/rval = 0
for(var/datum/wound/W in wounds)
@@ -834,13 +865,6 @@ Note that amputating the affected organ does in fact remove the infection from t
W.clamped = 1
return rval
-/obj/item/organ/external/proc/salve()
- var/rval = 0
- for(var/datum/wound/W in wounds)
- rval |= !W.salved
- W.salved = 1
- return rval
-
/obj/item/organ/external/proc/fracture()
if(status & ORGAN_ROBOT)
return //ORGAN_BROKEN doesn't have the same meaning for robot limbs
diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm
index 850f5114c03..7d89a07d67c 100644
--- a/code/modules/organs/wound.dm
+++ b/code/modules/organs/wound.dm
@@ -140,6 +140,15 @@
return 0
+ proc/bandage()
+ bandaged = 1
+
+ proc/salve()
+ salved = 1
+
+ proc/disinfect()
+ disinfected = 1
+
// heal the given amount of damage, and if the given amount of damage was more
// than what needed to be healed, return how much heal was left
// set @heals_internal to also heal internal organ damage
@@ -318,15 +327,15 @@ datum/wound/cut/massive
/datum/wound/lost_limb/New(var/obj/item/organ/external/lost_limb, var/losstype, var/clean)
var/damage_amt = lost_limb.max_damage
if(clean) damage_amt /= 2
-
+
switch(losstype)
if(DROPLIMB_EDGE, DROPLIMB_BLUNT)
damage_type = CUT
max_bleeding_stage = 3 //clotted stump and above can bleed.
stages = list(
"ripped stump" = damage_amt*1.3,
- "bloody stump" = damage_amt,
- "clotted stump" = damage_amt*0.5,
+ "bloody stump" = damage_amt,
+ "clotted stump" = damage_amt*0.5,
"scarred stump" = 0
)
if(DROPLIMB_BURN)
@@ -337,7 +346,7 @@ datum/wound/cut/massive
"scarred stump" = damage_amt*0.5,
"scarred stump" = 0
)
-
+
..(damage_amt)
/datum/wound/lost_limb/can_merge(var/datum/wound/other)
diff --git a/html/changelogs/Hubblenaut-master.yml b/html/changelogs/Hubblenaut-master.yml
new file mode 100644
index 00000000000..f40f1412d3e
--- /dev/null
+++ b/html/changelogs/Hubblenaut-master.yml
@@ -0,0 +1,38 @@
+################################
+# 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
+#################################
+
+# Your name.
+author: Hubblenaut
+
+# 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:
+ - tweak: "Bruise packs are now applied per wound, not per limb."
+ - tweak: "Bruise packs now use a delay depending on wound severity for applying."
+ - rscdel: "Removed instant healing ability from advanced bruise packs and ointment."
\ No newline at end of file