diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm index c24200adeb0..65a3afaed96 100644 --- a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm +++ b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm @@ -2,9 +2,9 @@ //sets you on fire, does burn damage, explodes into flame when burnt, weak to water /datum/blobstrain/reagent/blazing_oil name = "Blazing Oil" - description = "will do medium burn damage and set targets on fire." + description = "will do medium-high burn damage ignoring armor, and set targets on fire." effectdesc = "will also release bursts of flame when burnt, but takes damage from water." - analyzerdescdamage = "Does medium burn damage and sets targets on fire." + analyzerdescdamage = "Does medium-high burn damage and sets targets on fire." analyzerdesceffect = "Releases fire when burnt, but takes damage from water and other extinguishing liquids." color = "#B68D00" complementary_color = "#BE5532" diff --git a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm index 78b6c804cac..c093f650c77 100644 --- a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm +++ b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm @@ -1,7 +1,7 @@ //does brute, burn, and toxin damage, and cools targets down /datum/blobstrain/reagent/cryogenic_poison name = "Cryogenic Poison" - description = "will inject targets with a freezing poison that does high damage over time." + description = "will inject targets with a freezing poison, applying little impact damage but dealing high damage over time." analyzerdescdamage = "Injects targets with a freezing poison that will gradually solidify the target's internal organs." color = "#8BA6E9" complementary_color = "#7D6EB4" diff --git a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm index dacb75c1923..bf0c5e052ff 100644 --- a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm +++ b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm @@ -3,8 +3,8 @@ // Accumulates junk liberally /datum/blobstrain/debris_devourer name = "Debris Devourer" - description = "will launch accumulated debris into targets." - analyzerdescdamage = "Does medium brute damage and may grab onto melee weapons." + description = "will launch accumulated debris into targets. Does very low brute damage without debris-launching." + analyzerdescdamage = "Does very low brute damage and may grab onto melee weapons." analyzerdesceffect = "Devours loose items left on the station, and releases them when attacking or attacked." color = "#8B1000" complementary_color = "#00558B" diff --git a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm index dd029f65365..e90f7d602c3 100644 --- a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm +++ b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm @@ -1,10 +1,10 @@ //kills unconscious targets and turns them into blob zombies, produces fragile spores when killed. Spore produced by factories are sentient. /datum/blobstrain/reagent/distributed_neurons name = "Distributed Neurons" - description = "will do very low toxin damage and turns unconscious targets into blob zombies." + description = "will do medium-low toxin damage and turns unconscious targets into blob zombies." effectdesc = "will also produce fragile spores when killed. Spores produced by factories are sentient." - shortdesc = "will do very low toxin damage and will kill any unconcious targets when attacked. Spores produced by factories are sentient." - analyzerdescdamage = "Does very low toxin damage and kills unconscious humans." + shortdesc = "will do medium-low toxin damage and will kill any unconcious targets when attacked. Spores produced by factories are sentient." + analyzerdescdamage = "Does medium-low toxin damage and kills unconscious humans." analyzerdesceffect = "Produces spores when killed. Spores produced by factories are sentient." color = "#E88D5D" complementary_color = "#823ABB" diff --git a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm index 6b225400df0..e647d96c281 100644 --- a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm +++ b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm @@ -1,9 +1,9 @@ //does tons of oxygen damage and a little stamina, immune to tesla bolts, weak to EMP /datum/blobstrain/reagent/energized_jelly name = "Energized Jelly" - description = "will cause low stamina and high oxygen damage, and cause targets to be unable to breathe." + description = "will cause high stamina and medium oxygen damage, and cause targets to be unable to breathe." effectdesc = "will also conduct electricity, but takes damage from EMPs." - analyzerdescdamage = "Does low stamina damage, high oxygen damage, and prevents targets from breathing." + analyzerdescdamage = "Does high stamina damage, medium oxygen damage, and prevents targets from breathing." analyzerdesceffect = "Is immune to electricity and will easily conduct it, but is weak to EMPs." color = "#EFD65A" complementary_color = "#00E5B1" diff --git a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm index 98847f37501..e1ae8294df3 100644 --- a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm +++ b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm @@ -1,9 +1,9 @@ //does aoe brute damage when hitting targets, is immune to explosions /datum/blobstrain/reagent/explosive_lattice name = "Explosive Lattice" - description = "will do brute damage in an area around targets." + description = "will attack with small explosions, dealing a medium mix of brute and burn damage to everyone nearby. Spores explode on death." effectdesc = "will also resist explosions, but takes increased damage from fire and other energy sources." - analyzerdescdamage = "Does medium brute damage and causes damage to everyone near its targets. Spores explode on death." + analyzerdescdamage = "Does a medium mix of brute and burn damage in a small explosion around its targets. Spores explode on death." analyzerdesceffect = "Is highly resistant to explosions, but takes increased damage from fire and other energy sources." color = "#8B2500" complementary_color = "#00668B" @@ -22,9 +22,9 @@ var/obj/effect/temp_visual/explosion/fast/effect = new /obj/effect/temp_visual/explosion/fast(get_turf(spore)) effect.alpha = 150 for(var/mob/living/actor in orange(get_turf(spore), 1)) - if(ROLE_BLOB in actor.faction) //no friendly fire + if(ROLE_BLOB in actor.faction) // No friendly fire continue - actor.apply_damage(20, BRUTE, wound_bonus=CANT_WOUND) + actor.take_overall_damage(10, 10) /datum/reagent/blob/explosive_lattice name = "Explosive Lattice" @@ -33,22 +33,42 @@ /datum/reagent/blob/explosive_lattice/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() - var/initial_volume = reac_volume + var/brute_loss = 0 + var/burn_loss = 0 + var/bomb_armor = 0 reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) - if(reac_volume >= 10) //if it's not a spore cloud, bad time incoming + + if(reac_volume >= 10) // If it's not coming from a sporecloud, AOE 'explosion' damage + var/epicenter_turf = get_turf(exposed_mob) var/obj/effect/temp_visual/explosion/fast/ex_effect = new /obj/effect/temp_visual/explosion/fast(get_turf(exposed_mob)) ex_effect.alpha = 150 - for(var/mob/living/nearby_mob in orange(get_turf(exposed_mob), 1)) - if(ROLE_BLOB in nearby_mob.faction) //no friendly fire + + // Total damage to epicenter mob of 0.7*reac_volume, like a mid-tier strain + brute_loss = reac_volume*0.35 + + bomb_armor = exposed_mob.getarmor(null, BOMB) + if(bomb_armor) // Same calculation and proc that ex_act uses on mobs + brute_loss = brute_loss*(2 - round(bomb_armor*0.01, 0.05)) + + burn_loss = brute_loss + + exposed_mob.take_overall_damage(brute_loss, burn_loss) + + for(var/mob/living/nearby_mob in orange(epicenter_turf, 1)) + if(ROLE_BLOB in nearby_mob.faction) // No friendly fire. continue - exposed_mob = nearby_mob - methods = TOUCH - reac_volume = initial_volume - show_message = FALSE - touch_protection = nearby_mob.get_permeability_protection() - var/aoe_volume = ..() - nearby_mob.apply_damage(0.4*aoe_volume, BRUTE, wound_bonus=CANT_WOUND) - if(exposed_mob) - exposed_mob.apply_damage(0.6*reac_volume, BRUTE, wound_bonus=CANT_WOUND) + if(nearby_mob == exposed_mob) // We've already hit the epicenter mob + continue + // AoE damage of 0.5*reac_volume to everyone in a 1 tile range + brute_loss = reac_volume*0.25 + burn_loss = brute_loss + + bomb_armor = nearby_mob.getarmor(null, BOMB) + if(bomb_armor) // Same calculation and prod that ex_act uses on mobs + brute_loss = brute_loss*(2 - round(bomb_armor*0.01, 0.05)) + burn_loss = brute_loss + + nearby_mob.take_overall_damage(brute_loss, burn_loss) + else exposed_mob.apply_damage(0.6*reac_volume, BRUTE, wound_bonus=CANT_WOUND) diff --git a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm index 5ceec1a4cad..cfae2e4e9c8 100644 --- a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm +++ b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm @@ -1,11 +1,11 @@ //does massive brute and burn damage, but can only expand manually /datum/blobstrain/reagent/networked_fibers name = "Networked Fibers" - description = "will do high brute and burn damage and will generate resources quicker, but can only expand manually using the core or nodes." - shortdesc = "will do high brute and burn damage." + description = "will do a high mix of brute and burn damage, and will generate resources quicker, but can only expand manually using the core or nodes." + shortdesc = "will do a high mix of brute and burn damage." effectdesc = "will move your core or node when manually expanding near it." - analyzerdescdamage = "Does high brute and burn damage." - analyzerdesceffect = "Is highly mobile and generates resources rapidly." + analyzerdescdamage = "Does a high mix of brute and burn damage." + analyzerdesceffect = "Is mobile and generates resources rapidly." color = "#4F4441" complementary_color = "#414C4F" reagent = /datum/reagent/blob/networked_fibers diff --git a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm index 76f4f811509..e33013760ba 100644 --- a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm +++ b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm @@ -1,9 +1,9 @@ //does low brute damage, oxygen damage, and stamina damage and wets tiles when damaged /datum/blobstrain/reagent/pressurized_slime name = "Pressurized Slime" - description = "will do low brute, oxygen, and stamina damage, and wet tiles under targets." - effectdesc = "will also wet tiles near blobs that are attacked or killed." - analyzerdescdamage = "Does low brute damage, low oxygen damage, drains stamina, and wets tiles under targets, extinguishing them. Is resistant to brute attacks." + description = "will do low brute and oxygen damage, high stamina damage, and makes tiles under targets very slippery." + effectdesc = "will also make tiles slippery near attacked blobs." + analyzerdescdamage = "Does low brute and oxygen damage, high stamina damage, and makes tiles under targets very slippery, extinguishing them. Is resistant to brute attacks." analyzerdesceffect = "When attacked or killed, lubricates nearby tiles, extinguishing anything on them." color = "#AAAABB" complementary_color = "#BBBBAA" diff --git a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm index 4ca4d513844..8b8f3b563fa 100644 --- a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm +++ b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm @@ -1,22 +1,30 @@ //does brute damage through armor and bio resistance /datum/blobstrain/reagent/reactive_spines name = "Reactive Spines" - description = "will do medium brute damage through armor and bio resistance." + description = "will do high brute damage through armor and bio resistance." effectdesc = "will also react when attacked with burn or brute damage, attacking everything in melee range." - analyzerdescdamage = "Does medium brute damage, ignoring armor and bio resistance." + analyzerdescdamage = "Does high brute damage, ignoring armor and bio resistance." analyzerdesceffect = "When attacked with burn or brute damage it violently lashes out, attacking everything nearby." color = "#9ACD32" complementary_color = "#FFA500" blobbernaut_message = "stabs" message = "The blob stabs you" reagent = /datum/reagent/blob/reactive_spines + COOLDOWN_DECLARE(retaliate_cooldown) /datum/blobstrain/reagent/reactive_spines/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if(damage && ((damage_type == BRUTE) || (damage_type == BURN)) && B.obj_integrity - damage > 0) //is there any damage, is it burn or brute, and will we be alive - if(damage_flag == MELEE) - B.visible_message("The blob retaliates, lashing out!") + if(damage && ((damage_type == BRUTE) || (damage_type == BURN)) && B.obj_integrity - damage > 0 && COOLDOWN_FINISHED(src, retaliate_cooldown)) // Is there any damage, is it burn or brute, will we be alive, and has the cooldown finished? + COOLDOWN_START(src, retaliate_cooldown, 2.5 SECONDS) // 2.5 seconds before auto-retaliate can whack everything within 1 tile again + B.visible_message("The blob retaliates, lashing out!") for(var/atom/A in range(1, B)) - A.blob_act(B) + var/attacked_turf = get_turf(A) + if(isliving(A) && !isblobmonster(A)) // Make sure to inject strain-reagents with automatic attacks when needed. + B.blob_attack_animation(attacked_turf, overmind) + attack_living(A) + + else if(A.blob_act(B)) // After checking for mobs, whack everything else with the standard attack + B.blob_attack_animation(attacked_turf, overmind) // Only play the animation if the attack did something meaningful + return ..() /datum/reagent/blob/reactive_spines diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm index d5d2e363659..d948999a449 100644 --- a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm +++ b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm @@ -1,8 +1,8 @@ //does toxin damage, hallucination, targets think they're not hurt at all /datum/blobstrain/reagent/regenerative_materia name = "Regenerative Materia" - description = "will do toxin damage and cause targets to believe they are fully healed." - analyzerdescdamage = "Does toxin damage and injects a toxin that causes the target to believe they are fully healed. Core regenerates much faster." + description = "will do medium initial toxin damage, injecting a poison which does more toxin damage and makes targets believe they are fully healed. The core regenerates much faster." + analyzerdescdamage = "Does medium initial toxin damage, injecting a poison which does more toxin damage and makes targets believe they are fully healed. Core regenerates much faster." color = "#A88FB7" complementary_color = "#AF7B8D" message_living = ", and you feel alive" diff --git a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm index 081b1f3dd31..14e7980b61a 100644 --- a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm +++ b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm @@ -1,9 +1,9 @@ //does brute damage, bonus damage for each nearby blob, and spreads damage out /datum/blobstrain/reagent/synchronous_mesh name = "Synchronous Mesh" - description = "will do massively increased brute damage for each blob near the target." + description = "will do low brute damage, but each blob nearby attacks the target as well with stacking damage." effectdesc = "will also spread damage between each blob near the attacked blob." - analyzerdescdamage = "Does brute damage, increasing for each blob near the target." + analyzerdescdamage = "Does low brute damage, increasing for each blob near the target." analyzerdesceffect = "When attacked, spreads damage between all blobs near the attacked blob." color = "#65ADA2" complementary_color = "#AD6570"