mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Adds shadowflame gout spell to darkspawn warlock + merge thrall buttons (#22949)
* work work work * Should be done * linebreaks * Update shadowflame.dm
This commit is contained in:
@@ -59,10 +59,10 @@
|
||||
if(usr.next_click > world.time)
|
||||
return
|
||||
usr.next_click = world.time + 1
|
||||
// var/trigger_flags
|
||||
// if(LAZYACCESS(modifiers, RIGHT_CLICK)) FUCK COMBAT MODE!!!!
|
||||
// trigger_flags |= TRIGGER_SECONDARY_ACTION
|
||||
linked_action.Trigger()
|
||||
var/trigger_flags
|
||||
if(LAZYACCESS(modifiers, RIGHT_CLICK))
|
||||
trigger_flags |= TRIGGER_SECONDARY_ACTION
|
||||
linked_action.Trigger(trigger_flags)
|
||||
SEND_SOUND(usr, get_sfx(SFX_TERMINAL_TYPE))
|
||||
transform = turn(matrix() * 0.9, pick(-8, 8))
|
||||
alpha = 200
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
id = "fire_stacks" //fire_stacks and wet_stacks should have different IDs or else has_status_effect won't work
|
||||
remove_on_fullheal = TRUE
|
||||
|
||||
enemy_types = list(/datum/status_effect/fire_handler/wet_stacks)
|
||||
enemy_types = list(/datum/status_effect/fire_handler/wet_stacks, /datum/status_effect/fire_handler/shadowflame)
|
||||
stack_modifier = 1
|
||||
|
||||
/// If we're on fire
|
||||
@@ -278,7 +278,7 @@
|
||||
/datum/status_effect/fire_handler/wet_stacks
|
||||
id = "wet_stacks"
|
||||
|
||||
enemy_types = list(/datum/status_effect/fire_handler/fire_stacks)
|
||||
enemy_types = list(/datum/status_effect/fire_handler/fire_stacks, /datum/status_effect/fire_handler/shadowflame)
|
||||
stack_modifier = -1
|
||||
|
||||
/datum/status_effect/fire_handler/wet_stacks/tick(delta_time, times_fired)
|
||||
|
||||
@@ -4238,6 +4238,7 @@
|
||||
#include "yogstation\code\modules\antagonists\darkspawn\darkspawn_objects\scout_traps.dm"
|
||||
#include "yogstation\code\modules\antagonists\darkspawn\darkspawn_objects\shadow_caster.dm"
|
||||
#include "yogstation\code\modules\antagonists\darkspawn\darkspawn_objects\shadow_step.dm"
|
||||
#include "yogstation\code\modules\antagonists\darkspawn\darkspawn_objects\shadowflame.dm"
|
||||
#include "yogstation\code\modules\antagonists\darkspawn\darkspawn_objects\thrall_tumor.dm"
|
||||
#include "yogstation\code\modules\antagonists\darkspawn\darkspawn_objects\umbral_tendrils.dm"
|
||||
#include "yogstation\code\modules\antagonists\darkspawn\darkspawn_objects\veil_camera.dm"
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
name = "warlock innate abilities"
|
||||
desc = "apartment \"complex\"... really? I find it quite simple"
|
||||
shadow_flags = DARKSPAWN_WARLOCK
|
||||
learned_abilities = list(/datum/action/cooldown/spell/touch/thrall_mind, /datum/action/cooldown/spell/release_thrall, /datum/action/cooldown/spell/pointed/darkspawn_build/thrall_cam, /datum/action/cooldown/spell/pointed/darkspawn_build/thrall_eye, /datum/action/cooldown/spell/toggle/dark_staff)
|
||||
learned_abilities = list(/datum/action/cooldown/spell/touch/thrall_mind, /datum/action/cooldown/spell/pointed/darkspawn_build/thrall_cam, /datum/action/cooldown/spell/pointed/darkspawn_build/thrall_eye, /datum/action/cooldown/spell/toggle/dark_staff)
|
||||
|
||||
/datum/psi_web/warlock/on_gain()
|
||||
darkspawn.psi_cap *= 2
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/datum/action/cooldown/spell/touch/devour_will
|
||||
name = "Devour Will"
|
||||
desc = "Creates a dark bead that can be used on a human to begin draining the lucidity and willpower from a living target, knocking them unconscious for a time. Being interrupted will knock you down for a time."
|
||||
desc = "Creates a dark bead that can be used on a human to begin draining the lucidity and willpower from a living target, knocking them unconscious for a time.<br>Being interrupted will knock you down for a time."
|
||||
panel = "Darkspawn"
|
||||
button_icon = 'yogstation/icons/mob/actions/actions_darkspawn.dmi'
|
||||
sound = null
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/datum/action/cooldown/spell/touch/thrall_mind
|
||||
name = "Thrall mind"
|
||||
desc = "Consume 1 willpower to thrall a target's mind. To be eligible, they must be alive and recently drained by Devour Will. Can also be used to revive deceased thralls."
|
||||
desc = "Consume 1 willpower to thrall a target's mind.<br>To be eligible, they must be alive and recently drained by Devour Will.<br>Can also be used to revive deceased thralls.<br>Right-click to release thralls from your control."
|
||||
button_icon = 'yogstation/icons/mob/actions/actions_darkspawn.dmi'
|
||||
background_icon_state = "bg_alien"
|
||||
overlay_icon_state = "bg_alien_border"
|
||||
@@ -19,6 +19,12 @@
|
||||
///Willpower spent by the darkspawn datum to thrall a mind
|
||||
var/willpower_cost = 1
|
||||
|
||||
/datum/action/cooldown/spell/touch/thrall_mind/Trigger(trigger_flags, atom/target)
|
||||
if(trigger_flags & TRIGGER_SECONDARY_ACTION)
|
||||
release_thrall()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/datum/action/cooldown/spell/touch/thrall_mind/can_cast_spell(feedback)
|
||||
var/datum/antagonist/darkspawn/master = isdarkspawn(owner)
|
||||
if(master && master.willpower < willpower_cost)
|
||||
@@ -116,34 +122,10 @@
|
||||
to_chat(owner, span_velvet("Your power is incapable of controlling <b>[target].</b>"))
|
||||
return TRUE
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------Get rid of a thrall-----------------------//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/datum/action/cooldown/spell/release_thrall
|
||||
name = "Release thrall"
|
||||
desc = "Release a thrall from your control, freeing your power to be redistributed and restoring a portion of the spent willpower."
|
||||
button_icon = 'yogstation/icons/mob/actions/actions_darkspawn.dmi'
|
||||
background_icon_state = "bg_alien"
|
||||
overlay_icon_state = "bg_alien_border"
|
||||
buttontooltipstyle = "alien"
|
||||
button_icon_state = "veiling_touch"
|
||||
antimagic_flags = NONE
|
||||
panel = "Darkspawn"
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
spell_requirements = SPELL_CASTABLE_AS_BRAIN
|
||||
|
||||
/datum/action/cooldown/spell/release_thrall/can_cast_spell(feedback)
|
||||
var/datum/antagonist/darkspawn/dude = isdarkspawn(owner)
|
||||
if(dude && istype(dude))
|
||||
var/datum/team/darkspawn/team = dude.get_team()
|
||||
if(team &&!LAZYLEN(team.thralls))
|
||||
if(feedback)
|
||||
to_chat(owner, "You have no thralls to release.")
|
||||
return
|
||||
return ..()
|
||||
|
||||
/datum/action/cooldown/spell/release_thrall/cast(atom/cast_on)
|
||||
. = ..()
|
||||
/**
|
||||
* Release a thrall if right click
|
||||
*/
|
||||
/datum/action/cooldown/spell/touch/thrall_mind/proc/release_thrall()
|
||||
if(!isdarkspawn(owner))
|
||||
return
|
||||
|
||||
@@ -153,6 +135,10 @@
|
||||
|
||||
var/datum/team/darkspawn/team = dude.get_team()
|
||||
|
||||
if(!LAZYLEN(team.thralls))
|
||||
to_chat(owner, "You have no thralls to release.")
|
||||
return
|
||||
|
||||
var/loser = tgui_input_list(owner, "Select a thrall to release from your control.", "Release a thrall", team.thralls)
|
||||
if(!loser || !istype(loser, /datum/mind))
|
||||
return
|
||||
|
||||
@@ -552,6 +552,8 @@
|
||||
name = "echoing void"
|
||||
icon = 'yogstation/icons/effects/effects.dmi'
|
||||
icon_state = "nothing"
|
||||
anchored = TRUE
|
||||
move_resist = INFINITY
|
||||
|
||||
/obj/effect/temp_visual/darkspawn/chasm //a slow field that eventually explodes
|
||||
icon_state = "consuming"
|
||||
@@ -693,3 +695,42 @@
|
||||
|
||||
/datum/action/cooldown/spell/pointed/null_burst/proc/spawn_ground(turf/target)
|
||||
new /obj/effect/temp_visual/darkspawn/chasm(target)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//----------------------I stole genetics fire breath--------------------//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/datum/action/cooldown/spell/cone/staggered/shadowflame
|
||||
name = "Shadowflame Gout"
|
||||
desc = "Release a burst of shadowflame, rapidly sapping the heat of any individual."
|
||||
button_icon = 'yogstation/icons/mob/actions/actions_darkspawn.dmi'
|
||||
background_icon_state = "bg_alien"
|
||||
overlay_icon_state = "bg_alien_border"
|
||||
buttontooltipstyle = "alien"
|
||||
button_icon_state = "veiling_touch"
|
||||
panel = "Darkspawn"
|
||||
sound = 'sound/magic/demon_dies.ogg'
|
||||
|
||||
school = SCHOOL_EVOCATION
|
||||
invocation_type = INVOCATION_NONE
|
||||
spell_requirements = NONE
|
||||
antimagic_flags = MAGIC_RESISTANCE_MIND
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
cooldown_time = 60 SECONDS
|
||||
resource_costs = list(ANTAG_RESOURCE_DARKSPAWN = 100) //dangerous, high CC, and area denial
|
||||
|
||||
delay_between_level = 0.3 SECONDS //longer delay
|
||||
cone_levels = 5 //longer cone
|
||||
respect_density = TRUE
|
||||
|
||||
/datum/action/cooldown/spell/cone/staggered/shadowflame/do_turf_cone_effect(turf/target_turf, atom/caster, level)
|
||||
target_turf.extinguish_turf()
|
||||
new /obj/effect/temp_visual/darkspawn/shadowflame(target_turf) // for style
|
||||
|
||||
/datum/action/cooldown/spell/cone/staggered/shadowflame/do_mob_cone_effect(mob/living/target_mob, atom/caster, level)
|
||||
target_mob.set_wet_stacks(20, /datum/status_effect/fire_handler/shadowflame)
|
||||
|
||||
/datum/action/cooldown/spell/cone/staggered/shadowflame/calculate_cone_shape(current_level)
|
||||
// This makes the cone shoot out into a 3 wide column of flames.
|
||||
// You may be wondering, "that equation doesn't seem like it'd make a 3 wide column"
|
||||
// well it does, and that's all that matters.
|
||||
return (2 * current_level) - 1
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//--------------------------Cold Fire instead of hot--------------------//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/obj/effect/dummy/lighting_obj/moblight/shadowflame
|
||||
name = "fire"
|
||||
light_power = -1
|
||||
light_range = LIGHT_RANGE_FIRE
|
||||
light_color = COLOR_VELVET
|
||||
|
||||
/datum/status_effect/fire_handler/shadowflame
|
||||
id = "shadowflame"
|
||||
override_types = list(/datum/status_effect/fire_handler/fire_stacks, /datum/status_effect/fire_handler/wet_stacks)
|
||||
stack_modifier = -1
|
||||
/// Reference to the mob light emitter itself
|
||||
var/obj/effect/dummy/lighting_obj/moblight
|
||||
/// Type of mob light emitter we use when on fire
|
||||
var/moblight_type = /obj/effect/dummy/lighting_obj/moblight/shadowflame
|
||||
//how cold this fire is
|
||||
var/temperature = 0
|
||||
|
||||
/datum/status_effect/fire_handler/shadowflame/on_apply()
|
||||
. = ..()
|
||||
owner.add_emitter(/obj/emitter/fire/shadow, "shadowflame")
|
||||
|
||||
/datum/status_effect/fire_handler/shadowflame/on_remove()
|
||||
owner.remove_emitter("shadowflame")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/fire_handler/shadowflame/tick(delta_time, times_fired)
|
||||
adjust_stacks(-0.75 * delta_time SECONDS) //change this number to make it last a shorter duration
|
||||
if(stacks <= 0)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(is_team_darkspawn(owner) || !ishuman(owner))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/victim = owner
|
||||
var/thermal_multiplier = 1 - victim.get_cold_protection(temperature)
|
||||
|
||||
var/calculated_cooling = (BODYTEMP_COOLING_MAX - (stacks * 12)) * 0.5 * (delta_time SECONDS) * thermal_multiplier
|
||||
victim.adjust_bodytemperature(calculated_cooling, temperature)
|
||||
|
||||
if(HAS_TRAIT(victim, TRAIT_RESISTCOLD) || !calculated_cooling)
|
||||
SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "on_fire")
|
||||
else
|
||||
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
|
||||
|
||||
/// Cold purple turf fire
|
||||
/obj/effect/temp_visual/darkspawn/shadowflame
|
||||
icon = 'icons/effects/turf_fire.dmi'
|
||||
icon_state = "white_big"
|
||||
layer = GASFIRE_LAYER
|
||||
light_system = MOVABLE_LIGHT //we make it a movable light because static lights colour is handled weirdly
|
||||
light_power = -1
|
||||
light_range = LIGHT_RANGE_FIRE
|
||||
light_color = COLOR_VELVET
|
||||
color = COLOR_DARKSPAWN_PSI
|
||||
mouse_opacity = FALSE
|
||||
duration = 10 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/darkspawn/shadowflame/Initialize(mapload)
|
||||
. = ..()
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
|
||||
/obj/effect/temp_visual/darkspawn/shadowflame/Destroy()
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/temp_visual/darkspawn/shadowflame/process(delta_time)
|
||||
var/turf/placement = get_turf(src)
|
||||
for(var/mob/living/target_mob in placement.contents)
|
||||
target_mob.set_wet_stacks(20, /datum/status_effect/fire_handler/shadowflame)
|
||||
|
||||
/obj/emitter/fire/shadow
|
||||
pixel_y = -16 //so it aligns with the floor
|
||||
fire_colour = COLOR_VELVET
|
||||
@@ -147,7 +147,7 @@
|
||||
desc = "Empower your staff with the ability to consume the light of anything shot."
|
||||
lore_description = "The Aaah'ryt sigil, representing consumption, is etched onto the staff."
|
||||
icon_state = "lighteater_sign"
|
||||
willpower_cost = 2
|
||||
willpower_cost = 1
|
||||
shadow_flags = DARKSPAWN_WARLOCK
|
||||
menu_tab = STORE_OFFENSE
|
||||
flag_to_add = STAFF_UPGRADE_LIGHTEATER
|
||||
@@ -193,6 +193,16 @@
|
||||
menu_tab = STORE_OFFENSE
|
||||
learned_abilities = list(/datum/action/cooldown/spell/pointed/darkspawn_build/abyssal_call)
|
||||
|
||||
/datum/psi_web/shadowflame
|
||||
name = "Shadowflame Gout"
|
||||
desc = "Release a burst of shadowflame, rapidly sapping the heat of any individual."
|
||||
lore_description = "An abhorrent inversion of the natural laws of thermodynamics."
|
||||
icon_state = "veiling_touch" //needs an icon
|
||||
willpower_cost = 2
|
||||
shadow_flags = DARKSPAWN_WARLOCK
|
||||
menu_tab = STORE_OFFENSE
|
||||
learned_abilities = list(/datum/action/cooldown/spell/cone/staggered/shadowflame)
|
||||
|
||||
/datum/psi_web/shadow_beam
|
||||
name = "Void Beam"
|
||||
desc = "After a short delay, fire a huge beam of void terrain across the entire station."
|
||||
@@ -207,7 +217,7 @@
|
||||
name = "Null Burst"
|
||||
desc = "After a short delay, create an explosion of void terrain at the targeted location."
|
||||
lore_description = "Tears a portion of reality into the void for a short duration."
|
||||
icon_state = "null_burst" //needs an icon
|
||||
icon_state = "null_burst"
|
||||
willpower_cost = 3
|
||||
shadow_flags = DARKSPAWN_WARLOCK
|
||||
menu_tab = STORE_OFFENSE
|
||||
|
||||
Reference in New Issue
Block a user