diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 763e2df0802..b47def924e1 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -1,10 +1,11 @@
#define SEC_HUDTYPE "security"
#define MED_HUDTYPE "medical"
-/mob/living/carbon/human/proc/get_covered_body_parts()
+/mob/living/carbon/human/proc/get_covered_body_parts(var/thick)
var/skipbody = 0
for(var/obj/item/clothing/C in list(wear_suit, head, wear_mask, w_uniform, gloves, shoes))
- skipbody |= C.body_parts_covered
+ if(!thick || (C.item_flags & THICKMATERIAL))
+ skipbody |= C.body_parts_covered
return skipbody
/mob/living/carbon/human/proc/get_covered_clothes()
@@ -15,6 +16,7 @@
/mob/living/carbon/human/examine(mob/user)
var/skipbody = get_covered_body_parts()
+ var/skipbody_thick = get_covered_body_parts(TRUE)
var/skipitems = get_covered_clothes()
//exosuits and helmets obscure our view and stuff.
@@ -281,23 +283,26 @@
if(temp.body_part & HEAD)
body_part &= ~HEAD
body_part |= (temp.body_part & FACE) ? HEAD : 0
- if(skipbody & body_part)
+ if(skipbody_thick & body_part)
continue
- if(temp.status & ORGAN_ASSISTED)
+ var/thin_covering = (skipbody & body_part) ? TRUE : FALSE
+ if((temp.status & ORGAN_ASSISTED) && !thin_covering)
if(!(temp.brute_dam + temp.burn_dam))
- //wound_flavor_text["[temp.name]"] = "[get_pronoun("He")] [get_pronoun("has")] a robot [temp.name]!\n"
- // No need to notify about robotic limbs if they're not damaged, really.
continue
else
wound_flavor_text["[temp.name]"] = "[get_pronoun("He")] [get_pronoun("has")] [temp.get_wounds_desc()] on [get_pronoun("his")] [temp.name].
"
- else if(temp.wounds.len > 0 || temp.open)
- if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ])
- var/obj/item/organ/external/parent = organs_by_name[temp.parent_organ]
- wound_flavor_text["[temp.name]"] = "[get_pronoun("He")] [get_pronoun("has")] [temp.get_wounds_desc()] on [get_pronoun("his")] [parent.name].
"
- else
- wound_flavor_text["[temp.name]"] = "[get_pronoun("He")] [get_pronoun("has")] [temp.get_wounds_desc()] on [get_pronoun("his")] [temp.name].
"
+ else if(length(temp.wounds) || temp.open)
+ if(!thin_covering)
+ if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ])
+ var/obj/item/organ/external/parent = organs_by_name[temp.parent_organ]
+ wound_flavor_text["[temp.name]"] = "[get_pronoun("He")] [get_pronoun("has")] [temp.get_wounds_desc()] on [get_pronoun("his")] [parent.name].
"
+ else
+ wound_flavor_text["[temp.name]"] = "[get_pronoun("He")] [get_pronoun("has")] [temp.get_wounds_desc()] on [get_pronoun("his")] [temp.name].
"
if(temp.status & ORGAN_BLEEDING)
- is_bleeding["[temp.name]"] = "[get_pronoun("His")] [temp.name] is bleeding!
"
+ if(thin_covering)
+ is_bleeding["[temp.body_part_class()]"] = "[get_pronoun("He")] [temp.covered_bleed_report(species.blood_type)]
"
+ else
+ is_bleeding["[temp.name]"] = "[get_pronoun("His")] [temp.name] is bleeding!
"
else
wound_flavor_text["[temp.name]"] = ""
if(temp.dislocated == 2)
@@ -309,8 +314,9 @@
//If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext.
for(var/limb in wound_flavor_text)
- msg += wound_flavor_text[limb]
- is_bleeding[limb] = null
+ if(wound_flavor_text[limb])
+ msg += wound_flavor_text[limb]
+ is_bleeding[limb] = null
for(var/limb in is_bleeding)
msg += is_bleeding[limb]
for(var/obj/item/organ/external/organ in src.organs)
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index f3a859f96ce..f13d879aacc 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -36,6 +36,7 @@
var/eyes_icons = 'icons/mob/human_face/eyes.dmi' // DMI file for eyes, mostly for none 32x32 species.
var/has_floating_eyes // Eyes will overlay over darkness (glow)
var/eyes_icon_blend = ICON_ADD // The icon blending mode to use for eyes.
+ var/blood_type = "blood"
var/blood_color = "#A10808" // Red.
var/flesh_color = "#FFC896" // Pink.
var/examine_color // The color of the species' name in the examine text. Defaults to flesh_color if unset.
diff --git a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm
index 6e94de22733..fc01c21cfc5 100644
--- a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm
+++ b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm
@@ -106,6 +106,7 @@
character_color_presets = list("Default Bark" = "#000000", "Light Bark" = "#141414", "Brown Bark" = "#2b1d0e", "Green Bark" = "#001400")
+ blood_type = "sap"
blood_color = COLOR_DIONA_BLOOD
flesh_color = "#907E4A"
diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm
index 2718d84d2c7..b925db62cd9 100644
--- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm
+++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm
@@ -75,6 +75,7 @@
appearance_flags = HAS_SKIN_COLOR | HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_SOCKS
spawn_flags = CAN_JOIN | IS_WHITELISTED | NO_AGE_MINIMUM
+ blood_type = "oil"
blood_color = COLOR_IPC_BLOOD
flesh_color = "#575757"
reagent_tag = IS_MACHINE
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index a1bbe78ec15..b7b4b87c55e 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -692,6 +692,12 @@ Note that amputating the affected organ does in fact remove the infection from t
germ_level++
owner.adjustToxLoss(1)
+/obj/item/organ/external/proc/body_part_class()
+ return null
+
+/obj/item/organ/external/proc/covered_bleed_report(var/blood_type)
+ return "[owner.get_pronoun("has")] [blood_type] soaking through the clothes on their [src]!"
+
//Updating wounds. Handles wound natural I had some free spachealing, internal bleedings and infections
/obj/item/organ/external/proc/update_wounds()
diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm
index 273267a8566..36f9f2d58fc 100644
--- a/code/modules/organs/subtypes/standard.dm
+++ b/code/modules/organs/subtypes/standard.dm
@@ -21,6 +21,12 @@
encased = "ribcage"
augment_limit = 3
+/obj/item/organ/external/chest/body_part_class()
+ return UPPER_TORSO
+
+/obj/item/organ/external/chest/covered_bleed_report(var/blood_type)
+ return "[owner.get_pronoun("has")] [blood_type] running down their thighs!"
+
/obj/item/organ/external/groin
name = "lower body"
limb_name = "groin"
@@ -38,6 +44,12 @@
gendered_icon = 1
augment_limit = 3
+/obj/item/organ/external/groin/body_part_class()
+ return UPPER_TORSO
+
+/obj/item/organ/external/groin/covered_bleed_report(var/blood_type)
+ return "[owner.get_pronoun("has")] [blood_type] running down their thighs!"
+
/obj/item/organ/external/arm
limb_name = "l_arm"
name = "left arm"
@@ -54,6 +66,12 @@
amputation_point = "left shoulder"
augment_limit = 2
+/obj/item/organ/external/arm/body_part_class()
+ return ARMS
+
+/obj/item/organ/external/arm/covered_bleed_report(var/blood_type)
+ return "[owner.get_pronoun("has")] [blood_type] running down their sleeves!"
+
/obj/item/organ/external/arm/right
limb_name = "r_arm"
name = "right arm"
@@ -81,6 +99,12 @@
limb_flags = ORGAN_CAN_AMPUTATE | ORGAN_CAN_BREAK | ORGAN_CAN_MAIM | ORGAN_HAS_TENDON
augment_limit = 2
+/obj/item/organ/external/leg/body_part_class()
+ return LEGS
+
+/obj/item/organ/external/leg/covered_bleed_report(var/blood_type)
+ return "[owner.get_pronoun("has")] [blood_type] pooling at their feet!"
+
/obj/item/organ/external/leg/right
limb_name = "r_leg"
name = "right leg"
@@ -106,6 +130,12 @@
maim_bonus = 1
augment_limit = 1
+/obj/item/organ/external/foot/body_part_class()
+ return LEGS
+
+/obj/item/organ/external/foot/covered_bleed_report(var/blood_type)
+ return "[owner.get_pronoun("has")] [blood_type] pooling at their feet!"
+
/obj/item/organ/external/foot/removed()
if(owner)
owner.drop_from_inventory(owner.shoes)
@@ -137,6 +167,12 @@
maim_bonus = 1
augment_limit = 1
+/obj/item/organ/external/hand/body_part_class()
+ return ARMS
+
+/obj/item/organ/external/hand/covered_bleed_report(var/blood_type)
+ return "[owner.get_pronoun("has")] [blood_type] running down their sleeves!"
+
/obj/item/organ/external/hand/take_damage(brute, burn, damage_flags, used_weapon, list/forbidden_limbs, silent)
. = ..()
owner.update_hud_hands()
@@ -181,6 +217,12 @@
augment_limit = 3
var/can_intake_reagents = 1
+/obj/item/organ/external/head/body_part_class()
+ return HEAD
+
+/obj/item/organ/external/head/covered_bleed_report(var/blood_type)
+ return "[owner.get_pronoun("has")] [blood_type] running down their neck!"
+
/obj/item/organ/external/head/removed()
if(owner)
name = "[owner.real_name]'s head"
diff --git a/html/changelogs/geeves-bleedy_boye.yml b/html/changelogs/geeves-bleedy_boye.yml
new file mode 100644
index 00000000000..687c802ea8d
--- /dev/null
+++ b/html/changelogs/geeves-bleedy_boye.yml
@@ -0,0 +1,6 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - rscadd: "A bleeding bodypart covered by a piece of clothing that isn't thick will now give a rough indication that it's bleeding when its owner is examined."
\ No newline at end of file