mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-21 21:17:44 +01:00
@@ -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
|
||||
Reference in New Issue
Block a user