diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index b205dd14f6d..9b92da0dbdf 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -325,7 +325,7 @@ desc = "The user's muscles slightly expand. Commonly seen in top-ranking boxers." quality = POSITIVE text_gain_indication = span_notice("You feel strong.") - instability = POSITIVE_INSTABILITY_MINI + instability = POSITIVE_INSTABILITY_MINOR difficulty = 16 mutation_traits = list(TRAIT_STRENGTH) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 1585fa9b83a..a43a7ef0322 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -883,8 +883,22 @@ GLOBAL_LIST_EMPTY(features_by_species) //Someone in a grapple is much more vulnerable to being harmed by punches. var/grappled = (target.pulledby && target.pulledby.grab_state >= GRAB_AGGRESSIVE) - var/damage = rand(attacking_bodypart.unarmed_damage_low, attacking_bodypart.unarmed_damage_high) + // Our lower and upper unarmed damage values. Damage is rolled between these two values. + var/lower_unarmed_damage = attacking_bodypart.unarmed_damage_low + var/upper_unarmed_damage = attacking_bodypart.unarmed_damage_high + + // The presence of TRAIT_STRENGTH increases our upper unarmed damage. This is a damage cap increase. + upper_unarmed_damage += HAS_TRAIT(user, TRAIT_STRENGTH) ? 2 : 0 + + // Out athletics skill is used to set our potential base damage roll. It won't increase our potential damage roll, but will make our unarmed attack more consistent. + // For a normal human arm, this would cap at 10, and for a normal human leg, this would go up to 14. + lower_unarmed_damage = min(lower_unarmed_damage + (user.mind?.get_skill_level(/datum/skill/athletics) || 0), upper_unarmed_damage) + + // The actual damage roll. May still be augmented by further factors. + var/damage = rand(lower_unarmed_damage, upper_unarmed_damage) + // Limb accuracy is used to determine miss probabilities (higher the value, the less likely you are to miss), armor penetration (if entitled) and the possible result from a stagger combo hit. var/limb_accuracy = attacking_bodypart.unarmed_effectiveness + // Limb sharpness determines the type of wounds this unarmed strike could possibly roll. By default, most limbs are blunt and have no sharpness. var/limb_sharpness = attacking_bodypart.unarmed_sharpness if(grappled) @@ -923,7 +937,7 @@ GLOBAL_LIST_EMPTY(features_by_species) var/obj/item/bodypart/affecting = target.get_bodypart(hit_zone) var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases - if(attacking_bodypart.unarmed_damage_low) + if(lower_unarmed_damage) if((target.body_position == LYING_DOWN) || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || staggered || user_drunkenness && HAS_TRAIT(user, TRAIT_DRUNKEN_BRAWLER)) //kicks and attacks against staggered targets never miss (provided your species deals more than 0 damage). Drunken brawlers while drunk also don't miss miss_chance = 0 else @@ -1008,8 +1022,8 @@ GLOBAL_LIST_EMPTY(features_by_species) /// Handles the stagger combo effect of our punch. Follows the same logic as the above proc, target is our owner, user is our attacker. /datum/species/proc/stagger_combo(mob/living/carbon/human/user, mob/living/carbon/human/target, atk_verb = "hit", limb_accuracy = 0, armor_block = 0) - // Randomly determines the effects of our punch. Limb accuracy is a bonus, armor block is a defense - var/roll_them_bones = rand(-20, 20) + limb_accuracy - armor_block + // Randomly determines the effects of our punch. Limb accuracy is a bonus, armor block is a defense, attacker athletics provides a minor to significant bonus. + var/roll_them_bones = rand(-20, 20) + limb_accuracy - armor_block + ((user.mind?.get_skill_modifier(/datum/skill/athletics, SKILL_RANDS_MODIFIER) / 2) || 0) switch(roll_them_bones) if (-INFINITY to 0) //Mostly a gimmie, this one just keeps them staggered briefly