diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index e3103e0d359..ee668ccc729 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -5,7 +5,7 @@ parent_organ = BP_HEAD icon = 'icons/mob/npc/alien.dmi' icon_state = "chitin" - vital = 1 + vital = TRUE /obj/item/organ/internal/brain/xeno name = "thinkpan" diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index fbf9c1ff88c..faec9a7c33a 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -378,7 +378,8 @@ This function restores all organs. /mob/living/carbon/human/proc/get_organ(var/zone) - if(!zone) zone = BP_CHEST + if(!zone) + zone = BP_CHEST if (zone in list(BP_EYES, BP_MOUTH)) zone = BP_HEAD return organs_by_name[zone] diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index de5a4aa5155..af58424ca5a 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -83,10 +83,21 @@ if (istype(buckled_to, /obj/structure/bed)) return - for(var/limb_tag in list(BP_L_LEG,BP_R_LEG,BP_L_FOOT,BP_R_FOOT)) + var/static/support_limbs = list( + BP_L_LEG = BP_R_LEG, + BP_L_FOOT = BP_R_FOOT + ) + var/has_opposite_limb = FALSE + + for(var/limb_tag in list(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT)) var/obj/item/organ/external/E = organs_by_name[limb_tag] if(!E || (E.status & (ORGAN_MUTATED|ORGAN_DEAD)) || E.is_stump()) //should just be !E.is_usable() here but dislocation screws that up. - stance_damage += 2 // let it fail even if just foot&leg + has_opposite_limb = get_organ(support_limbs[limb_tag]) + if(!has_opposite_limb) + stance_damage += 10 //No walking for you with no supporting limb, buddy. + break + else + stance_damage += 2 else if (E.is_malfunctioning()) //malfunctioning only happens intermittently so treat it as a missing limb when it procs stance_damage += 2 @@ -100,20 +111,25 @@ // Canes and crutches help you stand (if the latter is ever added) // One cane mitigates a broken leg+foot, or a missing foot. - // Two canes are needed for a lost leg. If you are missing both legs, canes aren't gonna help you. - if (l_hand && istype(l_hand, /obj/item/cane)) - stance_damage -= 2 - if (r_hand && istype(r_hand, /obj/item/cane)) - stance_damage -= 2 + // No double caning allowed, sorry. Canes also don't work if you're missing a functioning pair of feet or legs. + if(has_opposite_limb) + if(l_hand && istype(l_hand, /obj/item/cane)) + stance_damage -= 2 + else if(r_hand && istype(r_hand, /obj/item/cane)) + stance_damage -= 2 - // standing is poor + //Standing is poor. if(stance_damage >= 4 || (stance_damage >= 2 && prob(5))) if(!(lying || resting)) emote("scream") if(!weakened) custom_emote(VISIBLE_MESSAGE, "collapses!") - Weaken(3) - next_stance_collapse = world.time + (rand(8, 16) SECONDS) + + if(stance_damage <= 5) + Weaken(3) + next_stance_collapse = world.time + (rand(8, 16) SECONDS) + else + Weaken(6) //No legs or feet means you should be really fucked. /mob/living/carbon/human/proc/handle_grasp() if(!l_hand && !r_hand) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b25ba1afa23..4d2f907f660 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -865,10 +865,13 @@ There are several things that need to be remembered: overlays_raw[shoe_layer] = ovr || result_layer else if(footprint_color) // Handles bloody feet. - var/image/bloodsies = image(species.blood_mask, "shoeblood") - bloodsies.color = footprint_color - bloodsies.appearance_flags = RESET_ALPHA - overlays_raw[SHOES_LAYER] = bloodsies + for(var/limb_tag in list(BP_L_FOOT, BP_R_FOOT)) + var/obj/item/organ/external/E = get_organ(limb_tag) + if(E && !E.is_stump()) + var/image/bloodsies = image(species.blood_mask, "shoeblood_[E.limb_name]") + bloodsies.color = footprint_color + bloodsies.appearance_flags = RESET_ALPHA + overlays_raw[SHOES_LAYER] = bloodsies else overlays_raw[SHOES_LAYER] = null overlays_raw[SHOES_LAYER_ALT] = null diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index 198960bfb38..31faf8ca6dc 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -4,7 +4,7 @@ desc = "A piece of juicy meat found in a person's head." organ_tag = BP_BRAIN parent_organ = BP_HEAD - vital = 1 + vital = TRUE icon_state = "brain" force = 1.0 w_class = ITEMSIZE_SMALL diff --git a/code/modules/organs/subtypes/diona.dm b/code/modules/organs/subtypes/diona.dm index 716eaa52ed1..75479d7ab91 100644 --- a/code/modules/organs/subtypes/diona.dm +++ b/code/modules/organs/subtypes/diona.dm @@ -38,7 +38,7 @@ min_broken_damage = 50 w_class = ITEMSIZE_HUGE body_part = UPPER_TORSO - vital = 1 + vital = TRUE parent_organ = null limb_flags = 0 dislocated = -1 diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm index d3378bc697a..60f78243acd 100644 --- a/code/modules/organs/subtypes/machine.dm +++ b/code/modules/organs/subtypes/machine.dm @@ -156,7 +156,7 @@ icon_state = "surge_ipc" organ_tag = "surge" parent_organ = BP_CHEST - vital = 0 + vital = FALSE var/surge_left = 0 var/broken = 0 @@ -342,7 +342,7 @@ name = BP_BRAIN organ_tag = BP_BRAIN parent_organ = BP_CHEST - vital = 1 + vital = TRUE emp_coeff = 0.1 /obj/item/organ/internal/data @@ -351,7 +351,7 @@ parent_organ = BP_GROIN icon = 'icons/obj/cloning.dmi' icon_state = "harddisk" - vital = 0 + vital = FALSE emp_coeff = 0.1 /obj/item/organ/internal/data/Initialize() diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm index 36f9f2d58fc..5dc6a68eeca 100644 --- a/code/modules/organs/subtypes/standard.dm +++ b/code/modules/organs/subtypes/standard.dm @@ -4,13 +4,13 @@ /obj/item/organ/external/chest name = "upper body" - limb_name = "chest" + limb_name = BP_CHEST icon_name = "torso" max_damage = 100 min_broken_damage = 35 w_class = ITEMSIZE_HUGE body_part = UPPER_TORSO - vital = 1 + vital = TRUE amputation_point = "spine" joint = "neck" artery_name = "internal thoracic artery" @@ -29,13 +29,12 @@ /obj/item/organ/external/groin name = "lower body" - limb_name = "groin" + limb_name = BP_GROIN icon_name = "groin" max_damage = 100 min_broken_damage = 35 w_class = ITEMSIZE_LARGE body_part = LOWER_TORSO - vital = 1 parent_organ = BP_CHEST amputation_point = "lumbar" joint = "hip" @@ -51,7 +50,7 @@ return "[owner.get_pronoun("has")] [blood_type] running down their thighs!" /obj/item/organ/external/arm - limb_name = "l_arm" + limb_name = BP_L_ARM name = "left arm" icon_name = "l_arm" max_damage = 50 @@ -73,7 +72,7 @@ return "[owner.get_pronoun("has")] [blood_type] running down their sleeves!" /obj/item/organ/external/arm/right - limb_name = "r_arm" + limb_name = BP_R_ARM name = "right arm" icon_name = "r_arm" body_part = ARM_RIGHT @@ -83,7 +82,7 @@ amputation_point = "right shoulder" /obj/item/organ/external/leg - limb_name = "l_leg" + limb_name = BP_L_LEG name = "left leg" icon_name = "l_leg" max_damage = 50 @@ -106,7 +105,7 @@ return "[owner.get_pronoun("has")] [blood_type] pooling at their feet!" /obj/item/organ/external/leg/right - limb_name = "r_leg" + limb_name = BP_R_LEG name = "right leg" icon_name = "r_leg" body_part = LEG_RIGHT @@ -115,7 +114,7 @@ amputation_point = "right hip" /obj/item/organ/external/foot - limb_name = "l_foot" + limb_name = BP_L_FOOT name = "left foot" icon_name = "l_foot" max_damage = 35 @@ -142,7 +141,7 @@ ..() /obj/item/organ/external/foot/right - limb_name = "r_foot" + limb_name = BP_R_FOOT name = "right foot" icon_name = "r_foot" body_part = FOOT_RIGHT @@ -152,7 +151,7 @@ amputation_point = "right ankle" /obj/item/organ/external/hand - limb_name = "l_hand" + limb_name = BP_L_HAND name = "left hand" icon_name = "l_hand" max_damage = 35 @@ -191,7 +190,7 @@ ..() /obj/item/organ/external/hand/right - limb_name = "r_hand" + limb_name = BP_R_HAND name = "right hand" icon_name = "r_hand" body_part = HAND_RIGHT @@ -200,14 +199,14 @@ amputation_point = "right wrist" /obj/item/organ/external/head - limb_name = "head" + limb_name = BP_HEAD icon_name = "head" name = BP_HEAD max_damage = 75 min_broken_damage = 35 w_class = ITEMSIZE_NORMAL body_part = HEAD | FACE - vital = 1 + vital = TRUE parent_organ = BP_CHEST joint = "jaw" artery_name = "cartoid artery" diff --git a/code/modules/organs/subtypes/xenos.dm b/code/modules/organs/subtypes/xenos.dm index c793af6393d..c7e06f966ce 100644 --- a/code/modules/organs/subtypes/xenos.dm +++ b/code/modules/organs/subtypes/xenos.dm @@ -4,7 +4,6 @@ /obj/item/organ/external/groin/skeleton name = "pelvis" - vital = 0 /obj/item/organ/external/arm/skeleton dislocated = -1 @@ -33,5 +32,5 @@ /obj/item/organ/external/head/skeleton name = "skull" dislocated = -1 - vital = 0 + vital = FALSE diff --git a/html/changelogs/mattatlas-vitalgroin.yml b/html/changelogs/mattatlas-vitalgroin.yml new file mode 100644 index 00000000000..1c921e1abb9 --- /dev/null +++ b/html/changelogs/mattatlas-vitalgroin.yml @@ -0,0 +1,44 @@ +################################ +# 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: + - tweak: "The groin is no longer vital." + - tweak: "Reworks how stance damage works slightly. Having no feet or no legs means you can no longer walk at all. Behaviour with only one foot unchanged." + - tweak: "Canes no longer help you when you have no legs or feet." + - bugfix: "Non-existant feet are no longer bloody." diff --git a/icons/mob/human_races/masks/blood_breeder.dmi b/icons/mob/human_races/masks/blood_breeder.dmi index 32788f1b847..520cc7049a5 100644 Binary files a/icons/mob/human_races/masks/blood_breeder.dmi and b/icons/mob/human_races/masks/blood_breeder.dmi differ diff --git a/icons/mob/human_races/masks/blood_bug.dmi b/icons/mob/human_races/masks/blood_bug.dmi index fdf91d66010..bcd9fb351f1 100644 Binary files a/icons/mob/human_races/masks/blood_bug.dmi and b/icons/mob/human_races/masks/blood_bug.dmi differ diff --git a/icons/mob/human_races/masks/blood_human.dmi b/icons/mob/human_races/masks/blood_human.dmi index dc54991c84d..6cd225e93b3 100644 Binary files a/icons/mob/human_races/masks/blood_human.dmi and b/icons/mob/human_races/masks/blood_human.dmi differ diff --git a/icons/mob/human_races/masks/blood_monkey.dmi b/icons/mob/human_races/masks/blood_monkey.dmi index 5d5dd66d752..92710651e7b 100644 Binary files a/icons/mob/human_races/masks/blood_monkey.dmi and b/icons/mob/human_races/masks/blood_monkey.dmi differ