diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index ea883c5637..16d61c29f9 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -37,7 +37,7 @@ D.apply_damage(damage, STAMINA, affecting, armor_block) log_combat(A, D, "punched (boxing) ") - if(D.getStaminaLoss() > 100) + if(D.getStaminaLoss() > 100 && istype(D.mind?.martial_art, /datum/martial_art/boxing)) var/knockout_prob = (D.getStaminaLoss() + rand(-15,15))*0.75 if((D.stat != DEAD) && prob(knockout_prob)) D.visible_message("[A] has knocked [D] out with a haymaker!", \ diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 938f6531f1..b9ff07fe46 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -580,7 +580,7 @@ /mob/living/carbon/update_stamina() var/stam = getStaminaLoss() if(stam > DAMAGE_PRECISION) - var/total_health = (health - stam) + var/total_health = (maxHealth - stam) if(total_health <= crit_threshold && !stat) if(CHECK_MOBILITY(src, MOBILITY_STAND)) to_chat(src, "You're too exhausted to keep going...") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 57667293e7..f12ac14ece 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -769,7 +769,7 @@ return else if(hud_used.healths) - var/health_amount = health - CLAMP(getStaminaLoss()-50, 0, 80)//CIT CHANGE - makes staminaloss have less of an impact on the health hud + var/health_amount = min(health, maxHealth - CLAMP(getStaminaLoss()-50, 0, 80))//CIT CHANGE - makes staminaloss have less of an impact on the health hud if(..(health_amount)) //not dead switch(hal_screwyhud) if(SCREWYHUD_CRIT) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 9a8882a0be..a6689927f5 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -62,9 +62,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/coldmod = 1 // multiplier for cold damage var/heatmod = 1 // multiplier for heat damage var/stunmod = 1 // multiplier for stun duration - var/punchdamagelow = 0 //lowest possible punch damage - var/punchdamagehigh = 9 //highest possible punch damage - var/punchstunthreshold = 9//damage at which punches from this race will stun //yes it should be to the attacked race but it's not useful that way even if it's logical + var/punchdamagelow = 1 //lowest possible punch damage. if this is set to 0, punches will always miss + var/punchdamagehigh = 10 //highest possible punch damage + var/punchstunthreshold = 10//damage at which punches from this race will stun //yes it should be to the attacked race but it's not useful that way even if it's logical var/siemens_coeff = 1 //base electrocution coefficient var/damage_overlay_type = "human" //what kind of damage overlays (if any) appear on our species when wounded? var/fixed_mut_color = "" //to use MUTCOLOR with a fixed color that's independent of dna.feature["mcolor"] @@ -1464,15 +1464,15 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) else var/atk_verb = user.dna.species.attack_verb - if(target.lying) - atk_verb = "kick" + if(!(target.mobility_flags & MOBILITY_STAND)) + atk_verb = ATTACK_EFFECT_KICK switch(atk_verb) - if("kick") + if(ATTACK_EFFECT_KICK) user.do_attack_animation(target, ATTACK_EFFECT_KICK) - if("slash") + if(ATTACK_EFFECT_CLAW) user.do_attack_animation(target, ATTACK_EFFECT_CLAW) - if("smash") + if(ATTACK_EFFECT_SMASH) user.do_attack_animation(target, ATTACK_EFFECT_SMASH) else user.do_attack_animation(target, ATTACK_EFFECT_PUNCH) @@ -1492,10 +1492,19 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(user.zone_selected)) - if(!damage || !affecting) - playsound(target.loc, user.dna.species.miss_sound, 25, 1, -1) - target.visible_message("[user] has attempted to [atk_verb] [target]!",\ - "[user] has attempted to [atk_verb] [target]!", null, COMBAT_MESSAGE_RANGE) + 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(user.dna.species.punchdamagelow) + if(atk_verb == ATTACK_EFFECT_KICK) //kicks never miss (provided your species deals more than 0 damage) + miss_chance = 0 + else + miss_chance = min((user.dna.species.punchdamagehigh/user.dna.species.punchdamagelow) + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 100) //old base chance for a miss + various damage. capped at 100 to prevent weirdness in prob() + + if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted + playsound(target.loc, user.dna.species.miss_sound, 25, TRUE, -1) + target.visible_message("[user]'s [atk_verb] misses [target]!", \ + "You avoid [user]'s [atk_verb]!", "You hear a swoosh!", COMBAT_MESSAGE_RANGE, user) + to_chat(user, "Your [atk_verb] misses [target]!") + log_combat(user, target, "attempted to punch") return FALSE @@ -1512,14 +1521,25 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(user.limb_destroyer) target.dismembering_strike(user, affecting.body_zone) - target.apply_damage(damage, BRUTE, affecting, armor_block) - log_combat(user, target, "punched") + + if(atk_verb == ATTACK_EFFECT_KICK)//kicks deal 1.5x raw damage + 0.5x stamina damage + target.apply_damage(damage*1.5, BRUTE, affecting, armor_block) + target.apply_damage(damage*0.5, STAMINA, affecting, armor_block) + log_combat(user, target, "kicked") + else//other attacks deal full raw damage + 2x in stamina damage + target.apply_damage(damage, BRUTE, affecting, armor_block) + target.apply_damage(damage*2, STAMINA, affecting, armor_block) + log_combat(user, target, "punched") + if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold) - target.visible_message("[user] has knocked [target] down!", \ - "[user] has knocked [target] down!", null, COMBAT_MESSAGE_RANGE) - target.apply_effect(80, EFFECT_KNOCKDOWN, armor_block) + target.visible_message("[user] knocks [target] down!", \ + "You're knocked down by [user]!", "You hear aggressive shuffling followed by a loud thud!", COMBAT_MESSAGE_RANGE, user) + to_chat(user, "You knock [target] down!") + var/knockdown_duration = 40 + (target.getStaminaLoss() + (target.getBruteLoss()*0.5))*0.8 - armor_block + target.DefaultCombatKnockdown(knockdown_duration) target.forcesay(GLOB.hit_appends) - else if(target.lying) + log_combat(user, target, "got a stun punch with their previous punch") + else if(!(target.mobility_flags & MOBILITY_STAND)) target.forcesay(GLOB.hit_appends) /datum/species/proc/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target) diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 0b634ba2d8..bf090302c8 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -467,7 +467,9 @@ if(H.physiology) H.physiology.stamina_mod *= 0.5 if(H.dna && H.dna.species) - H.dna.species.punchdamagehigh *= 5 + H.dna.species.punchdamagehigh *= 4 + H.dna.species.punchdamagelow *= 4 + H.dna.species.punchstunthreshold *= 2 /datum/reagent/drug/skooma/on_mob_end_metabolize(mob/living/L) . = ..() @@ -478,7 +480,9 @@ if(H.physiology) H.physiology.stamina_mod *= 2 if(H.dna && H.dna.species) - H.dna.species.punchdamagehigh *= 0.2 + H.dna.species.punchdamagehigh *= 0.25 + H.dna.species.punchdamagelow *= 0.25 + H.dna.species.punchstunthreshold *= 0.5 /datum/reagent/drug/skooma/on_mob_life(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1*REM) diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index f26898f2c5..8e79771b62 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -23,7 +23,7 @@ var/disabled = BODYPART_NOT_DISABLED //If disabled, limb is as good as missing var/body_damage_coeff = 1 //Multiplier of the limb's damage that gets applied to the mob - var/stam_damage_coeff = 0.5 + var/stam_damage_coeff = 0.75 var/brutestate = 0 var/burnstate = 0 var/brute_dam = 0