mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 11:34:19 +01:00
Refactors slaughter, shadow, and pulse demons to basic mobs (#30660)
* Refactors slaughter, shadow, and pulse demons to basic mobs * Linters * Fix * Projectile changes * Ensures demons speak common * Update code/modules/mob/living/basic/hostile/demons/demon_powers.dm Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com> --------- Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
/datum/component/cross_shock
|
||||
var/shock_damage
|
||||
var/energy_cost
|
||||
var/delay_between_shocks
|
||||
var/requires_cable
|
||||
|
||||
COOLDOWN_DECLARE(last_shock)
|
||||
|
||||
/datum/component/cross_shock/Initialize(_shock_damage, _energy_cost, _delay_between_shocks, _requires_cable = TRUE)
|
||||
if(ismovable(parent))
|
||||
var/static/list/crossed_connections = list(
|
||||
COMSIG_ATOM_ENTERED = PROC_REF(do_shock),
|
||||
)
|
||||
AddComponent(/datum/component/connect_loc_behalf, parent, crossed_connections)
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_movable_moved))
|
||||
if(ismob(parent))
|
||||
RegisterSignal(parent, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(on_organ_removal))
|
||||
else if(isarea(parent))
|
||||
RegisterSignal(parent, COMSIG_ATOM_EXITED, PROC_REF(do_shock))
|
||||
else if(isturf(parent))
|
||||
RegisterSignal(parent, COMSIG_ATOM_ENTERED, PROC_REF(do_shock))
|
||||
else
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
shock_damage = _shock_damage
|
||||
energy_cost = _energy_cost
|
||||
delay_between_shocks = _delay_between_shocks
|
||||
requires_cable = _requires_cable
|
||||
|
||||
/datum/component/cross_shock/proc/on_movable_moved(atom/source, old_location, direction, forced)
|
||||
SIGNAL_HANDLER // COMSIG_MOVABLE_MOVED
|
||||
if(isturf(source.loc))
|
||||
for(var/mob/living/mob in source.loc)
|
||||
do_shock(src, mob)
|
||||
|
||||
/datum/component/cross_shock/proc/do_shock(atom/source, atom/movable/to_shock)
|
||||
SIGNAL_HANDLER // COMSIG_ATOM_ENTERED
|
||||
if(!COOLDOWN_FINISHED(src, last_shock))
|
||||
return
|
||||
var/mob/living/living_to_shock = to_shock
|
||||
if(!istype(living_to_shock))
|
||||
return
|
||||
if(isliving(parent))
|
||||
var/mob/living/M = parent
|
||||
if(M.stat == DEAD || !IS_HORIZONTAL(M))
|
||||
return
|
||||
if(requires_cable)
|
||||
var/turf/our_turf = get_turf(parent)
|
||||
if(our_turf.transparent_floor || our_turf.intact || HAS_TRAIT(our_turf, TRAIT_TURF_COVERED))
|
||||
return
|
||||
var/obj/structure/cable/our_cable = locate(/obj/structure/cable) in our_turf
|
||||
if(!our_cable || !our_cable.powernet || !our_cable.powernet.available_power)
|
||||
return
|
||||
var/area/to_deduct_from = get_area(our_cable)
|
||||
living_to_shock.electrocute_act(shock_damage, parent)
|
||||
to_deduct_from.powernet.use_active_power(energy_cost)
|
||||
playsound(get_turf(parent), 'sound/effects/eleczap.ogg', 30, TRUE)
|
||||
else
|
||||
living_to_shock.electrocute_act(shock_damage, parent)
|
||||
playsound(get_turf(parent), 'sound/effects/eleczap.ogg', 30, TRUE)
|
||||
COOLDOWN_START(src, last_shock, delay_between_shocks)
|
||||
|
||||
/datum/component/cross_shock/proc/on_organ_removal(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
qdel(src)
|
||||
@@ -81,7 +81,7 @@
|
||||
GM.set_nitrogen(MOLES_N2STANDARD)
|
||||
GM.set_temperature(T20C)
|
||||
return GM
|
||||
|
||||
|
||||
/datum/spell/bloodcrawl/proc/block_hands(mob/living/carbon/C)
|
||||
if(C.l_hand || C.r_hand)
|
||||
to_chat(C, "<span class='warning'>You may not hold items while blood crawling!</span>")
|
||||
@@ -141,7 +141,7 @@
|
||||
)
|
||||
var/sound
|
||||
if(isslaughterdemon(L))
|
||||
var/mob/living/simple_animal/demon/slaughter/SD = L
|
||||
var/mob/living/basic/demon/slaughter/SD = L
|
||||
sound = SD.feast_sound
|
||||
else
|
||||
sound = 'sound/misc/demon_consume.ogg'
|
||||
@@ -171,7 +171,7 @@
|
||||
L.adjustFireLoss(-25)
|
||||
|
||||
if(isslaughterdemon(L))
|
||||
var/mob/living/simple_animal/demon/slaughter/demon = L
|
||||
var/mob/living/basic/demon/slaughter/demon = L
|
||||
demon.devoured++
|
||||
to_chat(victim, "<span class='userdanger'>You feel teeth sink into your flesh, and the--</span>")
|
||||
var/obj/item/organ/internal/regenerative_core/legion/core = victim.get_int_organ(/obj/item/organ/internal/regenerative_core/legion)
|
||||
@@ -236,7 +236,7 @@
|
||||
|
||||
/datum/spell/bloodcrawl/proc/post_phase_out(atom/A, mob/living/L)
|
||||
if(isslaughterdemon(L))
|
||||
var/mob/living/simple_animal/demon/slaughter/S = L
|
||||
var/mob/living/basic/demon/slaughter/S = L
|
||||
S.speed = 0
|
||||
S.boost = world.time + 6 SECONDS
|
||||
var/old_color = L.color
|
||||
@@ -275,7 +275,7 @@
|
||||
action_icon_state = "shadow_crawl"
|
||||
|
||||
/datum/spell/bloodcrawl/shadow_crawl/can_cast(mob/user, charge_check, show_message)
|
||||
var/mob/living/simple_animal/demon/shadow/current_demon = user
|
||||
var/mob/living/basic/demon/shadow/current_demon = user
|
||||
if(!istype(current_demon))
|
||||
return ..()
|
||||
|
||||
@@ -303,10 +303,10 @@
|
||||
|
||||
/datum/spell/bloodcrawl/shadow_crawl/post_phase_in(mob/living/L, obj/effect/dummy/slaughter/holder)
|
||||
..()
|
||||
if(!istype(L, /mob/living/simple_animal/demon/shadow))
|
||||
if(!istype(L, /mob/living/basic/demon/shadow))
|
||||
return
|
||||
var/mob/living/simple_animal/demon/shadow/S = L
|
||||
S.RegisterSignal(holder, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/living/simple_animal/demon/shadow, check_darkness))
|
||||
var/mob/living/basic/demon/shadow/S = L
|
||||
S.RegisterSignal(holder, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/living/basic/demon/shadow, check_darkness))
|
||||
|
||||
#undef BLOODCRAWL
|
||||
#undef BLOODCRAWL_EAT
|
||||
|
||||
Reference in New Issue
Block a user