[MIRROR] Blob: Explosive Lattice now actually works, reactive spines retaliation applies reagent, description consistency (#3458)

* Blob: Explosive Lattice now actually works, reactive spines retaliation applies reagent, description consistency (#56884)

Co-authored-by: Ranged <nickvanderkroon@ gmail.com>
Co-authored-by: Rohesie <rohesie@ gmail.com>

* Blob: Explosive Lattice now actually works, reactive spines retaliation applies reagent, description consistency

Co-authored-by: NotRanged <rangedvdk@gmail.com>
Co-authored-by: Ranged <nickvanderkroon@ gmail.com>
Co-authored-by: Rohesie <rohesie@ gmail.com>
This commit is contained in:
SkyratBot
2021-02-17 13:44:36 +00:00
committed by GitHub
co-authored by Ranged Rohesie NotRanged
parent 0d29bf3c62
commit eeaa35a8aa
11 changed files with 72 additions and 44 deletions
@@ -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"
@@ -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"
@@ -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"
@@ -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"
@@ -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"
@@ -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)
@@ -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
@@ -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"
@@ -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("<span class='boldwarning'>The blob retaliates, lashing out!</span>")
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("<span class='boldwarning'>The blob retaliates, lashing out!</span>")
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
@@ -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 <i>alive</i>"
@@ -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"