Merge pull request #13026 from Anonus/blightmode

Revenant Changes LXIX
This commit is contained in:
duncathan salt
2015-11-15 16:01:11 -06:00
5 changed files with 162 additions and 20 deletions
@@ -101,11 +101,11 @@
update_spooky_icon()
/mob/living/simple_animal/revenant/proc/update_spooky_icon()
if(unreveal_time)
if(revealed)
if(draining)
icon_state = "revenant_draining"
return
if(unstun_time)
if(notransform)
icon_state = "revenant_stun"
return
icon_state = "revenant_revealed"
@@ -183,7 +183,7 @@
reveal(46)
stun(46)
target.visible_message("<span class='warning'>[target] suddenly rises slightly into the air, their skin turning an ashy gray.</span>")
target.Beam(src,icon_state="drain_life",icon='icons/effects/effects.dmi',time=44)
Beam(target,icon_state="drain_life",icon='icons/effects/effects.dmi',time=44)
if(do_after(src, 50, 15, 0, target)) //As one cannot prove the existance of ghosts, ghosts cannot prove the existance of the target they were draining.
change_essence_amount(essence_drained, 0, target)
if(essence_drained <= 90 && target.stat != DEAD)
@@ -261,6 +261,7 @@
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/defile(null))
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/overload(null))
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/malfunction(null))
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/blight(null))
/mob/living/simple_animal/revenant/death()
@@ -17,7 +17,7 @@
if(!msg)
charge_counter = charge_max
return
usr << "<span class='revennotice'><b>You transmit to [M]:</b> [msg]</span>"
user << "<span class='revennotice'><b>You transmit to [M]:</b> [msg]</span>"
M << "<span class='revennotice'><b>An alien voice resonates from all around...</b></span><i> [msg]</I>"
@@ -40,6 +40,10 @@
name = "[initial(name)] ([cast_amount]E)"
/obj/effect/proc_holder/spell/aoe_turf/revenant/can_cast(mob/living/simple_animal/revenant/user = usr)
if(!istype(user)) //Badmins, no. Badmins, don't do it.
if(charge_counter < charge_max)
return 0
return 1
if(user.inhibited)
return 0
if(charge_counter < charge_max)
@@ -52,6 +56,12 @@
return 1
/obj/effect/proc_holder/spell/aoe_turf/revenant/proc/attempt_cast(mob/living/simple_animal/revenant/user = usr)
if(!istype(user)) //If you're not a revenant, it works. Please, please, please don't give this to a non-revenant.
name = "[initial(name)]"
if(locked)
panel = "Revenant Abilities"
locked = 0
return 1
if(locked)
if(!user.castcheck(-unlock_amount))
charge_counter = charge_max
@@ -78,7 +88,7 @@
charge_max = 200
range = 5
stun = 30
cast_amount = 45
cast_amount = 40
var/shock_range = 2
var/shock_damage = 18
action_icon_state = "overload_lights"
@@ -102,8 +112,8 @@
flick("[L.base_state]2", L)
for(var/mob/living/carbon/human/M in view(shock_range, L))
if(M == user)
return
M.Beam(L,icon_state="purple_lightning",icon='icons/effects/effects.dmi',time=5)
continue
L.Beam(M,icon_state="purple_lightning",icon='icons/effects/effects.dmi',time=5)
M.electrocute_act(shock_damage, "[L.name]", safety=1)
var/datum/effect_system/spark_spread/z = new /datum/effect_system/spark_spread
z.set_up(4, 0, M)
@@ -116,12 +126,10 @@
desc = "Twists and corrupts the nearby area as well as dispelling holy auras on floors."
charge_max = 150
range = 3
stun = 10
unlock_amount = 75
cast_amount = 40
cast_amount = 30
action_icon_state = "defile"
var/stamdamage= 25
var/toxdamage = 5
var/confusion = 50
/obj/effect/proc_holder/spell/aoe_turf/revenant/defile/cast(list/targets, mob/living/simple_animal/revenant/user = usr)
if(attempt_cast(user))
@@ -130,24 +138,32 @@
if(T.flags & NOJAUNT)
T.flags -= NOJAUNT
new/obj/effect/overlay/temp/revenant(T)
for(var/mob/living/carbon/human/human in T.contents)
human << "<span class='warning'>You suddenly feel [pick("sick and tired", "tired and confused", "nauseated", "dizzy")].</span>"
human.adjustStaminaLoss(stamdamage)
human.adjustToxLoss(toxdamage)
human.confused += confusion
new/obj/effect/overlay/temp/revenant(human.loc)
if(istype(T, /turf/simulated/floor) && !istype(T, /turf/simulated/floor/plating) && prob(15))
var/turf/simulated/floor/floor = T
if(floor.intact)
floor.builtin_tile.loc = floor
floor.broken = 0
floor.burnt = 0
floor.make_plating(1)
if(!istype(T, /turf/simulated/wall/shuttle) && !istype(T, /turf/simulated/wall/rust) && !istype(T, /turf/simulated/wall/r_wall) && istype(T, /turf/simulated/wall) && prob(15))
new/obj/effect/overlay/temp/revenant(T)
T.ChangeTurf(/turf/simulated/wall/rust)
if(!istype(T, /turf/simulated/wall/r_wall/rust) && istype(T, /turf/simulated/wall/r_wall) && prob(15))
new/obj/effect/overlay/temp/revenant(T)
T.ChangeTurf(/turf/simulated/wall/r_wall/rust)
for(var/obj/structure/closet/closet in T.contents)
closet.open()
for(var/obj/structure/bodycontainer/corpseholder in T.contents)
if(corpseholder.connected.loc == corpseholder)
corpseholder.open()
for(var/obj/machinery/dna_scannernew/dna in T.contents)
dna.open_machine()
for(var/obj/structure/window/window in T.contents)
window.hit(rand(50,90))
if(window && window.fulltile)
new/obj/effect/overlay/temp/revenant/cracks(window.loc)
for(var/obj/machinery/light/light in T.contents)
light.flicker(30) //spooky
light.flicker(20) //spooky
//Malfunction: Makes bad stuff happen to robots and machines.
/obj/effect/proc_holder/spell/aoe_turf/revenant/malfunction
@@ -155,6 +171,7 @@
desc = "Corrupts and damages nearby machines and mechanical objects."
charge_max = 200
range = 4
cast_amount = 45
unlock_amount = 150
action_icon_state = "malfunction"
@@ -170,7 +187,9 @@
bot.open = 1
bot.Emag(null)
for(var/mob/living/carbon/human/human in T.contents)
human << "<span class='warning'>You feel [pick("your sense of direction flicker out", "a stabbing pain in your head", "your mind fill with static")].</span>"
if(human == user)
continue
human << "<span class='revenwarning'>You feel [pick("your sense of direction flicker out", "a stabbing pain in your head", "your mind fill with static")].</span>"
new/obj/effect/overlay/temp/revenant(human.loc)
human.emp_act(1)
for(var/obj/thing in T.contents)
@@ -187,4 +206,65 @@
playsound(S, 'sound/machines/warning-buzzer.ogg', 50, 1)
new/obj/effect/overlay/temp/revenant(S.loc)
S.spark_system.start()
S.emp_act(1)
S.emp_act(1)
//Blight: Infects nearby humans and in general messes living stuff up.
/obj/effect/proc_holder/spell/aoe_turf/revenant/blight
name = "Blight"
desc = "Causes nearby living things to waste away."
charge_max = 200
range = 3
cast_amount = 50
unlock_amount = 200
action_icon_state = "blight"
/obj/effect/proc_holder/spell/aoe_turf/revenant/blight/cast(list/targets, mob/living/simple_animal/revenant/user = usr)
if(attempt_cast(user))
for(var/turf/T in targets)
spawn(0)
for(var/mob/living/mob in T.contents)
if(mob == user)
continue
new/obj/effect/overlay/temp/revenant(mob.loc)
if(iscarbon(mob))
if(ishuman(mob))
var/mob/living/carbon/human/H = mob
if(H.dna && H.dna.species)
H.dna.species.handle_mutant_bodyparts(H,"#1d2953")
H.dna.species.handle_hair(H,"#1d2953")
H.dna.species.update_color(H,"#1d2953")
spawn(20)
if(H && H.dna && H.dna.species)
H.dna.species.handle_mutant_bodyparts(H)
H.dna.species.handle_hair(H)
H.dna.species.update_color(H)
var/blightfound = 0
for(var/datum/disease/revblight/blight in H.viruses)
blightfound = 1
if(blight.stage < 5)
blight.stage++
if(!blightfound)
H.AddDisease(new /datum/disease/revblight)
H << "<span class='revenminor'>You feel [pick("suddenly sick", "a surge of nausea", "like your skin is <span class='italics'>wrong</span>")].</span>"
else
if(mob.reagents)
mob.reagents.add_reagent("plasma", 5)
else
mob.adjustToxLoss(5)
for(var/obj/effect/spacevine/vine in T.contents) //Fucking with botanists, the ability.
vine.color = "#823abb"
new/obj/effect/overlay/temp/revenant(vine.loc)
spawn(20)
if(vine)
qdel(vine)
for(var/obj/effect/glowshroom/shroom in T.contents)
shroom.color = "#823abb"
new/obj/effect/overlay/temp/revenant(shroom.loc)
spawn(20)
if(shroom)
qdel(shroom)
for(var/obj/machinery/hydroponics/tray in T.contents)
new/obj/effect/overlay/temp/revenant(tray.loc)
tray.pestlevel = rand(8, 10)
tray.weedlevel = rand(8, 10)
tray.toxic = rand(45, 55)
@@ -0,0 +1,60 @@
/datum/disease/revblight
name = "Unnatural Wasting"
max_stages = 5
stage_prob = 10
spread_flags = NON_CONTAGIOUS
cure_text = "Holy water or extensive rest."
spread_text = "A burst of unholy energy"
cures = list("holywater")
cure_chance = 50 //higher chance to cure, because revenants are assholes
agent = "Unholy Forces"
viable_mobtypes = list(/mob/living/carbon/human)
disease_flags = CURABLE
permeability_mod = 1
severity = BIOHAZARD
var/stagedamage = 0 //Highest stage reached.
/datum/disease/revblight/stage_act()
if(affected_mob.lying && prob(stage*2))
affected_mob << "<span class='notice'>You feel better.</span>"
cure()
return
if(prob(stage*3))
affected_mob << "<span class='revennotice'>You suddenly feel [pick("sick and tired", "disoriented", "tired and confused", "nauseated", "faint", "dizzy")]...</span>"
affected_mob.confused += 10
affected_mob.adjustStaminaLoss(10)
new/obj/effect/overlay/temp/revenant(affected_mob.loc)
if(stagedamage < stage)
stagedamage++
affected_mob.adjustToxLoss(stage*3) //should, normally, do about 45 toxin damage.
new/obj/effect/overlay/temp/revenant(affected_mob.loc)
..() //So we don't increase a stage before applying the stage damage.
switch(stage)
if(2)
if(prob(45))
affected_mob.adjustStaminaLoss(4)
if(prob(5))
affected_mob.emote("pale")
if(3)
if(prob(10))
affected_mob.emote(pick("pale","shiver"))
if(4)
if(prob(15))
affected_mob.emote(pick("pale","shiver","cries"))
if(5)
affected_mob << "<span class='revenbignotice'>You feel like [pick("nothing's worth it anymore", "nobody ever needed your help", "nothing you did mattered", "everything you tried to do was worthless")].</span>"
affected_mob.adjustStaminaLoss(45)
new/obj/effect/overlay/temp/revenant(affected_mob.loc)
if(affected_mob.dna && affected_mob.dna.species)
affected_mob.dna.species.handle_mutant_bodyparts(affected_mob,"#1d2953")
affected_mob.dna.species.handle_hair(affected_mob,"#1d2953")
affected_mob.dna.species.update_color(affected_mob,"#1d2953")
spawn(100)
if(affected_mob && affected_mob.dna && affected_mob.dna.species)
affected_mob.dna.species.handle_mutant_bodyparts(affected_mob)
affected_mob.dna.species.handle_hair(affected_mob)
affected_mob.dna.species.update_color(affected_mob)
affected_mob.visible_message("<span class='warning'>[affected_mob] looks terrifyingly gaunt...</span>", "<span class='revennotice'>Your skin suddenly looks wrong and awful...</span>")
cure()
else
return