From 2e2794c959666fdcc33ddcc6990432da2a855207 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Fri, 26 Feb 2016 23:00:43 -0500 Subject: [PATCH] Adds five new blob chemicals. Draining Spikes, which is reddish pink, does medium brute damage, and drains blood from targets. Shifting Materia, which is tan, does medium brute damage, and shifts position when attacked. Flammable Goo, which is reddish orange, does low burn and toxin damage, and when hit with burn damage, emits a burst of flame. It takes more damage from burn, though. Poisonous Strands, which is lavender and does burn, fire, and toxin damage over a few seconds, instead of instantly. Bluespace Dust, which is bright green, does low toxin damage, irradiates, and may teleport targets. Other changes; Replicating Foam has a lower chance to expand when hit Penetrating Spines is now purple instead of sea green. --- code/game/gamemodes/blob/theblob.dm | 6 +- .../chemistry/reagents/blob_reagents.dm | 120 +++++++++++++++++- 2 files changed, 118 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 61f084ce288..e3a5b63d332 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -39,10 +39,8 @@ if(atmosblock) atmosblock = 0 air_update_turf(1) - var/area/Ablob = get_area(loc) - if(Ablob.blob_allowed) //Only remove for blobs in areas that counted for the win - blobs_legit -= src - blobs -= src //It's still removed from the normal list + blobs_legit -= src //if it was in the legit blobs list, it isn't now + blobs -= src //it's no longer in the all blobs list either playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) //Expand() is no longer broken, no check necessary. return ..() diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm index f6cb1ee4167..67470c6a425 100644 --- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm @@ -41,6 +41,23 @@ if(iscarbon(M)) M.emote("scream") +//does brute and drains blood from humans +/datum/reagent/blob/draining_spikes + name = "Draining Spikes" + id = "draining_spikes" + description = "will do medium brute damage and drain blood." + color = "#AF4150" + complementary_color = "#41AFA0" + blobbernaut_message = "drains" + message_living = ", and you feel lightheaded" + +/datum/reagent/blob/draining_spikes/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) + reac_volume = ..() + M.apply_damage(0.6*reac_volume, BRUTE) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.drip(reac_volume) //will kill at 18 hits(no bio protection) and cause bad effects before that + //does low toxin damage, but creates fragile spores when expanding or killed by weak attacks /datum/reagent/blob/sporing_pods name = "Sporing Pods" @@ -85,7 +102,7 @@ M.apply_damage(0.6*reac_volume, BRUTE) /datum/reagent/blob/replicating_foam/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause) - if(damage > 0 && original_health - damage > 0) + if(damage > 0 && original_health - damage > 0 && prob(75)) var/obj/effect/blob/newB = B.expand() if(newB) newB.health = original_health - damage @@ -97,6 +114,37 @@ if(prob(50)) newB.expand() //do it again! +//does brute damage, shifts away when damaged +/datum/reagent/blob/shifting_materia + name = "Shifting Materia" + id = "shifting_materia" + description = "will do medium brute damage and shift away from damage." + shortdesc = "will do medium brute damage." + color = "#C8963C" + complementary_color = "#3C6EC8" + +/datum/reagent/blob/shifting_materia/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) + reac_volume = ..() + M.apply_damage(0.6*reac_volume, BRUTE) + +/datum/reagent/blob/shifting_materia/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T) + if(istype(B, /obj/effect/blob/normal) || istype(B, /obj/effect/blob/shield)) + newB.forceMove(get_turf(B)) + B.forceMove(T) + +/datum/reagent/blob/shifting_materia/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause) + if(cause && prob(40)) + var/list/blobstopick = list() + for(var/obj/effect/blob/OB in range(1, B)) + blobstopick += OB + if(blobstopick.len) + var/obj/effect/blob/targeted = pick(blobstopick) //randomize the blob chosen, because otherwise it'd tend to the lower left + if(istype(B, /obj/effect/blob/normal) || istype(B, /obj/effect/blob/shield)) + var/turf/T = get_turf(targeted) + targeted.forceMove(get_turf(B)) + B.forceMove(T) //swap the blobs + return ..() + //does low burn and a lot of stamina damage, reacts to stamina damage /datum/reagent/blob/energized_fibers name = "Energized Fibers" @@ -140,6 +188,32 @@ if(iscarbon(M)) M.emote("scream") +//does burn and toxin damage, explodes into flame when hit with burn damage +/datum/reagent/blob/flammable_goo + name = "Flammable Goo" + id = "flammable_goo" + description = "will do low burn damage, medium toxin damage, and ignite when burned." + color = "#BE5532" + complementary_color = "#329BBE" + blobbernaut_message = "splashes" + message = "The blob splashes you with a thin goo" + message_living = ", and you smell a faint, sweet scent" + +/datum/reagent/blob/flammable_goo/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) + reac_volume = ..() + M.apply_damage(0.4*reac_volume, TOX) + if(M) + M.apply_damage(0.2*reac_volume, BURN) + +/datum/reagent/blob/flammable_goo/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause) + if(cause && damage_type == BURN) + for(var/turf/T in range(1, B)) + if(prob(80)) + PoolOrNew(/obj/effect/hotspot, T) + return damage * 1.3 + return ..() + +//does toxin damage, targets think they're not hurt at all /datum/reagent/blob/regenerative_materia name = "Regenerative Materia" id = "regenerative_materia" @@ -224,6 +298,26 @@ if(M) M.adjustStaminaLoss(0.4*reac_volume) +//does brute, fire, and toxin over a few seconds +/datum/reagent/blob/poisonous_strands + name = "Poisonous Strands" + id = "poisonous_strands" + description = "will inject targets with poison." + color = "#7D6EB4" + complementary_color = "#A5B46E" + message_living = ", and you feel like your insides are melting" + +/datum/reagent/blob/poisonous_strands/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) + reac_volume = ..() + if(M.reagents) + M.reagents.add_reagent("poisonous_strands", 0.12*reac_volume) + +/datum/reagent/blob/poisonous_strands/on_mob_life(mob/living/M) + M.adjustBruteLoss(1.5*REM) + M.adjustFireLoss(1.5*REM) + M.adjustToxLoss(1.5*REM) + ..() + //does oxygen damage, randomly pushes or pulls targets /datum/reagent/blob/cyclonic_grid name = "Cyclonic Grid" @@ -352,7 +446,7 @@ return damage * 1.2 //a laser will do 24 damage, which will kill any recently-made normal blob /datum/reagent/blob/electromagnetic_web/death_reaction(obj/effect/blob/B, cause) - if(!isnull(cause)) + if(cause) empulse(B.loc, 2, 3) //less than screen range, so you can stand out of range to avoid it //does brute damage, bonus damage for each nearby blob, and spreads damage out @@ -393,8 +487,8 @@ name = "Penetrating Spines" id = "penetrating_spines" description = "will do medium brute damage through armor." - color = "#408B80" - complementary_color = "#8B404B" + color = "#6E4664" + complementary_color = "#466E50" blobbernaut_message = "stabs" message = "The blob stabs you" @@ -438,6 +532,24 @@ if(prob(50)) T.MakeSlippery(TURF_WET_WATER) +//does low toxin damage, irradiates, and teleports targets around +/datum/reagent/blob/bluespace_dust + name = "Bluespace Dust" + id = "bluespace_dust" + description = "will do low toxin damage, irradiate the target, and may teleport the target away." + color = "#5AB419" + complementary_color = "#7319B4" + blobbernaut_message = "warps" + message_living = ", and you feel disoriented" + +/datum/reagent/blob/bluespace_dust/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) + reac_volume = ..() + if(prob(2*reac_volume)) + do_teleport(M, M, max(rand(0.3, 0.1)*reac_volume, rand(2, 3))) + M.apply_damage(0.4*reac_volume, TOX) + if(M) + M.apply_effect(0.2*reac_volume, IRRADIATE) + //does brute damage and throws or pulls nearby objects at the target /datum/reagent/blob/dark_matter name = "Dark Matter"