mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 04:27:35 +01:00
Removes Shadowstep. replace it with 2 powers for each vampire type. (#18951)
* WIP * shadow boxing * garg + hemomancer * dantalion and stuff * oops * some tweaks * sprites, tweaks and TGUI * ready for review * review * forgot some sean comments * oops * prevents people walking over shockwaves * shadow boxing DPS down to 20 * oops * affected review
This commit is contained in:
@@ -98,7 +98,7 @@
|
||||
/datum/status_effect/void_price/refresh()
|
||||
price++
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/status_effect/blooddrunk
|
||||
id = "blooddrunk"
|
||||
duration = 10
|
||||
@@ -478,3 +478,60 @@
|
||||
else
|
||||
to_chat(owner, "<span class='cultitalic'>[pick(un_hopeful_messages)]</span>")
|
||||
|
||||
/datum/status_effect/thrall_net
|
||||
id = "thrall_net"
|
||||
tick_interval = 2 SECONDS
|
||||
duration = -1
|
||||
alert_type = null
|
||||
var/blood_cost_per_tick = 5
|
||||
var/list/target_UIDs = list()
|
||||
var/datum/antagonist/vampire/vamp
|
||||
|
||||
/datum/status_effect/thrall_net/on_creation(mob/living/new_owner, datum/antagonist/vampire/V, ...)
|
||||
. = ..()
|
||||
vamp = V
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
target_UIDs += owner.UID()
|
||||
var/list/view_cache = view(7, owner)
|
||||
for(var/datum/mind/M in owner.mind.som.serv)
|
||||
if(!M.has_antag_datum(/datum/antagonist/mindslave/thrall))
|
||||
continue
|
||||
if(!(M.current in view_cache))
|
||||
continue
|
||||
if(M.current.stat == DEAD)
|
||||
continue
|
||||
target_UIDs += M.current.UID()
|
||||
M.current.Beam(owner, "sendbeam", time = 2 SECONDS, maxdistance = 7)
|
||||
|
||||
/datum/status_effect/thrall_net/tick()
|
||||
var/total_damage = 0
|
||||
var/list/view_cache = view(7, owner)
|
||||
for(var/uid in target_UIDs)
|
||||
var/mob/living/L = locateUID(uid)
|
||||
if(!(L in view_cache) || L.stat == DEAD)
|
||||
target_UIDs -= uid
|
||||
continue
|
||||
total_damage += (L.maxHealth - L.health)
|
||||
L.Beam(owner, "sendbeam", time = 2 SECONDS, maxdistance = 7)
|
||||
|
||||
var/average_damage = total_damage / length(target_UIDs)
|
||||
|
||||
for(var/uid in target_UIDs)
|
||||
var/mob/living/L = locateUID(uid)
|
||||
var/current_damage = L.maxHealth - L.health
|
||||
if(current_damage == average_damage)
|
||||
continue
|
||||
if(current_damage > average_damage)
|
||||
var/heal_amount = current_damage - average_damage
|
||||
L.heal_ordered_damage(heal_amount, list(BRUTE, BURN, TOX, OXY, CLONE))
|
||||
else
|
||||
var/damage_amount = average_damage - current_damage
|
||||
L.adjustFireLoss(damage_amount)
|
||||
|
||||
vamp.bloodusable = max(vamp.bloodusable - blood_cost_per_tick, 0)
|
||||
if(!vamp.bloodusable || length(target_UIDs) <= 1) // if there is one left in the list, its only the vampire.
|
||||
qdel(src)
|
||||
|
||||
/datum/status_effect/thrall_net/on_remove()
|
||||
. = ..()
|
||||
vamp = null
|
||||
|
||||
@@ -247,6 +247,26 @@
|
||||
/datum/status_effect/bluespace_slowdown/on_remove()
|
||||
owner.next_move_modifier /= 2
|
||||
|
||||
/datum/status_effect/shadow_boxing
|
||||
id = "shadow barrage"
|
||||
alert_type = null
|
||||
duration = 10 SECONDS
|
||||
tick_interval = 0.4 SECONDS
|
||||
var/damage = 8
|
||||
var/source_UID
|
||||
|
||||
/datum/status_effect/shadow_boxing/on_creation(mob/living/new_owner, mob/living/source)
|
||||
. = ..()
|
||||
source_UID = source.UID()
|
||||
|
||||
/datum/status_effect/shadow_boxing/tick()
|
||||
var/mob/living/attacker = locateUID(source_UID)
|
||||
if(attacker in view(owner, 2))
|
||||
attacker.do_attack_animation(owner, ATTACK_EFFECT_PUNCH)
|
||||
owner.apply_damage(damage, BRUTE)
|
||||
shadow_to_animation(get_turf(attacker), get_turf(owner), attacker)
|
||||
|
||||
|
||||
// start of `living` level status procs.
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user