Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds shadowflame gout spell to darkspawn warlock + merge thrall buttons #22949

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions code/_onclick/hud/action_button.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions code/datums/status_effects/debuffs/fire_stacks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions yogstation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion yogstation/code/modules/antagonists/darkspawn/_psi_web.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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)
Expand Down Expand Up @@ -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

Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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."
Expand All @@ -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
Expand Down
Loading