From a1691ac7e7a803317d82d406d80fbf138997f80f Mon Sep 17 00:00:00 2001 From: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com> Date: Mon, 27 Jul 2020 22:01:24 -0400 Subject: [PATCH] Tones down embedded damage, especially for spears (#52518) * nerfs embeds, spears a bit * fixes comment --- code/__DEFINES/combat.dm | 34 +++++++++++++++++++---------- code/datums/components/embedded.dm | 8 +++---- code/datums/wounds/slash.dm | 2 +- code/game/objects/items/spear.dm | 2 +- code/game/objects/items/weaponry.dm | 2 +- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index db9007686da..b8473e611bc 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -127,18 +127,28 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( //Combat object defines //Embedded objects -#define EMBEDDED_PAIN_CHANCE 15 //Chance for embedded objects to cause pain (damage user) -#define EMBEDDED_ITEM_FALLOUT 5 //Chance for embedded object to fall out (causing pain but removing the object) -#define EMBED_CHANCE 45 //Chance for an object to embed into somebody when thrown (if it's sharp) -#define EMBEDDED_PAIN_MULTIPLIER 2 //Coefficient of multiplication for the damage the item does while embedded (this*item.w_class) -#define EMBEDDED_FALL_PAIN_MULTIPLIER 5 //Coefficient of multiplication for the damage the item does when it falls out (this*item.w_class) -#define EMBEDDED_IMPACT_PAIN_MULTIPLIER 4 //Coefficient of multiplication for the damage the item does when it first embeds (this*item.w_class) -#define EMBED_THROWSPEED_THRESHOLD 4 //The minimum value of an item's throw_speed for it to embed (Unless it has embedded_ignore_throwspeed_threshold set to 1) -#define EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER 8 //Coefficient of multiplication for the damage the item does when removed without a surgery (this*item.w_class) -#define EMBEDDED_UNSAFE_REMOVAL_TIME 30 //A Time in ticks, total removal time = (this*item.w_class) -#define EMBEDDED_JOSTLE_CHANCE 5 //Chance for embedded objects to cause pain every time they move (jostle) -#define EMBEDDED_JOSTLE_PAIN_MULTIPLIER 1 //Coefficient of multiplication for the damage the item does while -#define EMBEDDED_PAIN_STAM_PCT 0.0 //This percentage of all pain will be dealt as stam damage rather than brute (0-1) +///Chance for embedded objects to cause pain (damage user) +#define EMBEDDED_PAIN_CHANCE 15 +///Chance for embedded object to fall out (causing pain but removing the object) +#define EMBEDDED_ITEM_FALLOUT 5 +///Chance for an object to embed into somebody when thrown (if it's sharp) +#define EMBED_CHANCE 45 +///Coefficient of multiplication for the damage the item does while embedded (this*item.w_class) +#define EMBEDDED_PAIN_MULTIPLIER 2 +///Coefficient of multiplication for the damage the item does when it first embeds (this*item.w_class) +#define EMBEDDED_IMPACT_PAIN_MULTIPLIER 4 +///The minimum value of an item's throw_speed for it to embed (Unless it has embedded_ignore_throwspeed_threshold set to 1) +#define EMBED_THROWSPEED_THRESHOLD 4 +///Coefficient of multiplication for the damage the item does when it falls out or is removed without a surgery (this*item.w_class) +#define EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER 6 +///A Time in ticks, total removal time = (this*item.w_class) +#define EMBEDDED_UNSAFE_REMOVAL_TIME 30 +///Chance for embedded objects to cause pain every time they move (jostle) +#define EMBEDDED_JOSTLE_CHANCE 5 +///Coefficient of multiplication for the damage the item does while +#define EMBEDDED_JOSTLE_PAIN_MULTIPLIER 1 +///This percentage of all pain will be dealt as stam damage rather than brute (0-1) +#define EMBEDDED_PAIN_STAM_PCT 0.0 #define EMBED_HARMLESS list("pain_mult" = 0, "jostle_pain_mult" = 0, "ignore_throwspeed_threshold" = TRUE) #define EMBED_HARMLESS_SUPERIOR list("pain_mult" = 0, "jostle_pain_mult" = 0, "ignore_throwspeed_threshold" = TRUE, "embed_chance" = 100, "fall_chance" = 0.1) diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm index 3f8a995e8f0..039486a2bd3 100644 --- a/code/datums/components/embedded.dm +++ b/code/datums/components/embedded.dm @@ -99,7 +99,7 @@ if(damage > 0) var/armor = victim.run_armor_check(limb.body_zone, "melee", "Your armor has protected your [limb.name].", "Your armor has softened a hit to your [limb.name].",I.armour_penetration) - limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, blocked=armor, sharpness = I.get_sharpness()) + limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, blocked=armor, wound_bonus = I.wound_bonus, bare_wound_bonus = I.bare_wound_bonus, sharpness = I.get_sharpness()) /datum/component/embedded/Destroy() var/mob/living/carbon/victim = parent @@ -140,7 +140,7 @@ pain_chance_current *= 0.2 if(harmful && prob(pain_chance_current)) - limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, sharpness=TRUE, wound_bonus = CANT_WOUND) + limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, wound_bonus = CANT_WOUND) to_chat(victim, "[weapon] embedded in your [limb.name] hurts!") var/fall_chance_current = fall_chance @@ -174,7 +174,7 @@ if(harmful) var/damage = weapon.w_class * remove_pain_mult - limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, sharpness=SHARP_EDGED) // can wound + limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, wound_bonus = CANT_WOUND) victim.visible_message("[weapon] falls [harmful ? "out" : "off"] of [victim.name]'s [limb.name]!", "[weapon] falls [harmful ? "out" : "off"] of your [limb.name]!") safeRemove() @@ -194,7 +194,7 @@ return if(harmful) var/damage = weapon.w_class * remove_pain_mult - limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, sharpness=SHARP_EDGED) //It hurts to rip it out, get surgery you dingus. + limb.receive_damage(brute=(1-pain_stam_pct) * damage, stamina=pain_stam_pct * damage, sharpness=SHARP_EDGED) //It hurts to rip it out, get surgery you dingus. unlike the others, this CAN wound + increase slash bloodflow victim.emote("scream") victim.visible_message("[victim] successfully rips [weapon] [harmful ? "out" : "off"] of [victim.p_their()] [limb.name]!", "You successfully remove [weapon] from your [limb.name].") diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index 04675633ce4..dc037f9494e 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -69,7 +69,7 @@ return "[msg.Join()]" /datum/wound/slash/receive_damage(wounding_type, wounding_dmg, wound_bonus) - if(victim.stat != DEAD && wounding_type == WOUND_SLASH) // can't stab dead bodies to make it bleed faster this way + if(victim.stat != DEAD && wound_bonus != CANT_WOUND && wounding_type == WOUND_SLASH) // can't stab dead bodies to make it bleed faster this way blood_flow += 0.05 * wounding_dmg /datum/wound/slash/drag_bleed_amount() diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index cf1ed2fa6dc..be175f78bd3 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -10,7 +10,7 @@ slot_flags = ITEM_SLOT_BACK throwforce = 20 throw_speed = 4 - embedding = list("impact_pain_mult" = 3) + embedding = list("impact_pain_mult" = 2, "remove_pain_mult" = 4, "jostle_chance" = 2.5) armour_penetration = 10 custom_materials = list(/datum/material/iron=1150, /datum/material/glass=2075) hitsound = 'sound/weapons/bladeslice.ogg' diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 5a2c2b8488d..c1d259678bf 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -290,7 +290,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' force = 2 - throwforce = 10 //10 + 2 (WEIGHT_CLASS_SMALL) * 9 (EMBEDDED_IMPACT_PAIN_MULTIPLIER) = 28 damage on hit due to guaranteed embedding + throwforce = 10 //10 + 2 (WEIGHT_CLASS_SMALL) * 4 (EMBEDDED_IMPACT_PAIN_MULTIPLIER) = 18 damage on hit due to guaranteed embedding throw_speed = 4 embedding = list("pain_mult" = 4, "embed_chance" = 100, "fall_chance" = 0) armour_penetration = 40