[PORT] New Heretic Path: Cosmic (#20706)
* lets cosmos expand eon become instant * that was too easy sus * wow this works very cool * ok ok * ok ok ok o ko * all done cool * oops forgot * yeah yeah * spell check yippie * yeah spell check * spell check yippie wahoo * nope not really * forgot to update map oops * update update * fix please ok * updates stuff as requested yeah * lets see if this works I guess * ok lets see if this works * rearranged marks for cuackles haha
@@ -116,6 +116,7 @@
|
||||
#define PATH_MIND "Mind"
|
||||
#define PATH_VOID "Void"
|
||||
#define PATH_BLADE "Blade"
|
||||
#define PATH_COSMIC "Cosmic"
|
||||
|
||||
#define TIER_NONE 0
|
||||
#define TIER_PATH 1
|
||||
|
||||
@@ -78,6 +78,8 @@
|
||||
#define MOB_EPIC (1<<7) //megafauna
|
||||
#define MOB_REPTILE (1<<8)
|
||||
#define MOB_SPIRIT (1<<9)
|
||||
#define MOB_SPECIAL (1<<10) //eldritch biggums
|
||||
|
||||
|
||||
/// All the biotypes that matter
|
||||
#define ALL_NON_ROBOTIC (MOB_ORGANIC|MOB_INORGANIC|MOB_UNDEAD)
|
||||
|
||||
36
code/datums/elements/death_explosion.dm
Normal file
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* ## death explosion element!
|
||||
*
|
||||
* Bespoke element that generates an explosion when a mob is killed.
|
||||
*/
|
||||
/datum/element/death_explosion
|
||||
element_flags = ELEMENT_BESPOKE
|
||||
argument_hash_start_idx = 3
|
||||
///The range at which devastating impact happens
|
||||
var/devastation
|
||||
///The range at which heavy impact happens
|
||||
var/heavy_impact
|
||||
///The range at which light impact happens
|
||||
var/light_impact
|
||||
|
||||
/datum/element/death_explosion/Attach(datum/target, devastation = -1, heavy_impact = -1, light_impact = -1)
|
||||
. = ..()
|
||||
if(!isliving(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
src.devastation = devastation
|
||||
src.heavy_impact = heavy_impact
|
||||
src.light_impact = light_impact
|
||||
RegisterSignal(target, COMSIG_LIVING_DEATH, PROC_REF(on_death))
|
||||
|
||||
/datum/element/death_explosion/Detach(datum/target)
|
||||
. = ..()
|
||||
UnregisterSignal(target, COMSIG_LIVING_DEATH)
|
||||
|
||||
/// Triggered when target dies, make an explosion.
|
||||
/datum/element/death_explosion/proc/on_death(mob/living/target, gibbed)
|
||||
SIGNAL_HANDLER
|
||||
explosion(
|
||||
get_turf(target),
|
||||
devastation_range = devastation,
|
||||
heavy_impact_range = heavy_impact,
|
||||
light_impact_range = light_impact)
|
||||
28
code/datums/elements/effect_trail.dm
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* An element used for making a trail of effects appear behind a movable atom when it moves.
|
||||
*/
|
||||
|
||||
/datum/element/effect_trail
|
||||
element_flags = ELEMENT_BESPOKE
|
||||
argument_hash_start_idx = 2
|
||||
/// The effect used for the trail generation.
|
||||
var/chosen_effect
|
||||
|
||||
/datum/element/effect_trail/Attach(datum/target, chosen_effect = /obj/effect/forcefield/cosmic_field)
|
||||
. = ..()
|
||||
if(!ismovable(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(generate_effect))
|
||||
src.chosen_effect = chosen_effect
|
||||
|
||||
/datum/element/effect_trail/Detach(datum/target)
|
||||
. = ..()
|
||||
UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
|
||||
|
||||
/// Generates an effect
|
||||
/datum/element/effect_trail/proc/generate_effect(atom/movable/target_object)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/turf/open/open_turf = get_turf(target_object)
|
||||
if(istype(open_turf))
|
||||
new chosen_effect(open_turf)
|
||||
93
code/datums/elements/regenerator.dm
Normal file
@@ -0,0 +1,93 @@
|
||||
#define REGENERATION_FILTER "healing_glow"
|
||||
|
||||
/**
|
||||
* # Regenerator component
|
||||
*
|
||||
* A mob with this component will regenerate its health over time, as long as it has not received damage
|
||||
* in the last X seconds. Taking any damage will reset this cooldown.
|
||||
*/
|
||||
/datum/component/regenerator
|
||||
/// You will only regain health if you haven't been hurt for this many seconds
|
||||
var/regeneration_delay
|
||||
/// Health to regenerate per second
|
||||
var/health_per_second
|
||||
/// List of damage types we don't care about, in case you want to only remove this with fire damage or something
|
||||
var/list/ignore_damage_types
|
||||
/// Colour of regeneration animation, or none if you don't want one
|
||||
var/outline_colour
|
||||
/// When this timer completes we start restoring health, it is a timer rather than a cooldown so we can do something on its completion
|
||||
var/regeneration_start_timer
|
||||
|
||||
/datum/component/regenerator/Initialize(regeneration_delay = 6 SECONDS, health_per_second = 2, ignore_damage_types = list(STAMINA), outline_colour = COLOR_PALE_GREEN)
|
||||
if (!isliving(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
src.regeneration_delay = regeneration_delay
|
||||
src.health_per_second = health_per_second
|
||||
src.ignore_damage_types = ignore_damage_types
|
||||
src.outline_colour = outline_colour
|
||||
|
||||
/datum/component/regenerator/RegisterWithParent()
|
||||
. = ..()
|
||||
RegisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_take_damage))
|
||||
|
||||
/datum/component/regenerator/UnregisterFromParent()
|
||||
. = ..()
|
||||
if(regeneration_start_timer)
|
||||
deltimer(regeneration_start_timer)
|
||||
UnregisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE)
|
||||
stop_regenerating()
|
||||
|
||||
/datum/component/regenerator/Destroy(force, silent)
|
||||
stop_regenerating()
|
||||
. = ..()
|
||||
if(regeneration_start_timer)
|
||||
deltimer(regeneration_start_timer)
|
||||
|
||||
/// When you take damage, reset the cooldown and start processing
|
||||
/datum/component/regenerator/proc/on_take_damage(datum/source, damage, damagetype)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if (damage <= 0)
|
||||
return
|
||||
if (locate(damagetype) in ignore_damage_types)
|
||||
return
|
||||
stop_regenerating()
|
||||
if(regeneration_start_timer)
|
||||
deltimer(regeneration_start_timer)
|
||||
regeneration_start_timer = addtimer(CALLBACK(src, PROC_REF(start_regenerating)), regeneration_delay, TIMER_STOPPABLE)
|
||||
|
||||
/// Start processing health regeneration, and show animation if provided
|
||||
/datum/component/regenerator/proc/start_regenerating()
|
||||
var/mob/living/living_parent = parent
|
||||
if (living_parent.stat == DEAD)
|
||||
return
|
||||
if (living_parent.health == living_parent.maxHealth)
|
||||
return
|
||||
living_parent.visible_message(span_notice("[living_parent]'s wounds begin to knit closed!"))
|
||||
START_PROCESSING(SSobj, src)
|
||||
if (!outline_colour)
|
||||
return
|
||||
living_parent.add_filter(REGENERATION_FILTER, 2, list("type" = "outline", "color" = outline_colour, "alpha" = 0, "size" = 1))
|
||||
var/filter = living_parent.get_filter(REGENERATION_FILTER)
|
||||
animate(filter, alpha = 200, time = 0.5 SECONDS, loop = -1)
|
||||
animate(alpha = 0, time = 0.5 SECONDS)
|
||||
|
||||
/datum/component/regenerator/proc/stop_regenerating()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
var/mob/living/living_parent = parent
|
||||
var/filter = living_parent.get_filter(REGENERATION_FILTER)
|
||||
animate(filter)
|
||||
living_parent.remove_filter(REGENERATION_FILTER)
|
||||
|
||||
/datum/component/regenerator/process(seconds_per_tick = SSMOBS_DT)
|
||||
var/mob/living/living_parent = parent
|
||||
if (living_parent.stat == DEAD)
|
||||
stop_regenerating()
|
||||
return
|
||||
if (living_parent.health == living_parent.maxHealth)
|
||||
stop_regenerating()
|
||||
return
|
||||
living_parent.heal_overall_damage(health_per_second * seconds_per_tick)
|
||||
|
||||
#undef REGENERATION_FILTER
|
||||
@@ -1560,3 +1560,82 @@
|
||||
return
|
||||
|
||||
addtimer(CALLBACK(src, PROC_REF(create_blade)), blade_recharge_time)
|
||||
|
||||
/datum/status_effect/star_mark
|
||||
id = "star_mark"
|
||||
alert_type = /atom/movable/screen/alert/status_effect/star_mark
|
||||
duration = 30 SECONDS
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
///overlay used to indicate that someone is marked
|
||||
var/mutable_appearance/cosmic_overlay
|
||||
/// icon file for the overlay
|
||||
var/effect_icon = 'icons/effects/eldritch.dmi'
|
||||
/// icon state for the overlay
|
||||
var/effect_icon_state = "cosmic_ring"
|
||||
/// Storage for the spell caster
|
||||
var/datum/weakref/spell_caster
|
||||
|
||||
/atom/movable/screen/alert/status_effect/star_mark
|
||||
name = "Star Mark"
|
||||
desc = "A ring above your head prevents you from entering cosmic fields or teleporting through cosmic runes..."
|
||||
icon_state = "star_mark"
|
||||
|
||||
/datum/status_effect/star_mark/on_creation(mob/living/new_owner, mob/living/new_spell_caster)
|
||||
cosmic_overlay = mutable_appearance(effect_icon, effect_icon_state, BELOW_MOB_LAYER)
|
||||
if(new_spell_caster)
|
||||
spell_caster = WEAKREF(new_spell_caster)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/star_mark/Destroy()
|
||||
QDEL_NULL(cosmic_overlay)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/star_mark/on_apply()
|
||||
if(istype(owner, /mob/living/simple_animal/hostile/eldritch/star_gazer))
|
||||
return FALSE
|
||||
RegisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(update_owner_overlay))
|
||||
owner.update_appearance(UPDATE_OVERLAYS)
|
||||
return TRUE
|
||||
|
||||
/// Updates the overlay of the owner
|
||||
/datum/status_effect/star_mark/proc/update_owner_overlay(atom/source, list/overlays)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
overlays += cosmic_overlay
|
||||
|
||||
/datum/status_effect/star_mark/on_remove()
|
||||
UnregisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS)
|
||||
owner.update_appearance(UPDATE_OVERLAYS)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/star_mark/extended
|
||||
duration = 3 MINUTES
|
||||
|
||||
/datum/status_effect/eldritch/cosmic
|
||||
id = "cosmic_mark"
|
||||
effect_sprite = "emark6"
|
||||
/// For storing the location when the mark got applied.
|
||||
var/obj/effect/cosmic_diamond/cosmic_diamond
|
||||
/// Effect when triggering mark.
|
||||
var/obj/effect/teleport_effect = /obj/effect/temp_visual/cosmic_cloud
|
||||
|
||||
/datum/status_effect/eldritch/cosmic/on_creation(mob/living/new_owner)
|
||||
. = ..()
|
||||
cosmic_diamond = new(get_turf(owner))
|
||||
|
||||
/datum/status_effect/eldritch/cosmic/Destroy()
|
||||
QDEL_NULL(cosmic_diamond)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/eldritch/cosmic/on_effect()
|
||||
new teleport_effect(get_turf(owner))
|
||||
new /obj/effect/forcefield/cosmic_field(get_turf(owner))
|
||||
do_teleport(
|
||||
owner,
|
||||
get_turf(cosmic_diamond),
|
||||
no_effects = TRUE,
|
||||
channel = TELEPORT_CHANNEL_MAGIC,
|
||||
)
|
||||
new teleport_effect(get_turf(owner))
|
||||
owner.Paralyze(2 SECONDS)
|
||||
return ..()
|
||||
|
||||
@@ -61,3 +61,33 @@
|
||||
name = "invisible blockade"
|
||||
desc = "You're gonna be here awhile."
|
||||
initial_duration = 1 MINUTES
|
||||
|
||||
/// The cosmic heretics forcefield
|
||||
/obj/effect/forcefield/cosmic_field
|
||||
name = "Cosmic Field"
|
||||
desc = "A field that cannot be passed by people marked with a cosmic star."
|
||||
icon = 'icons/effects/eldritch.dmi'
|
||||
icon_state = "cosmic_carpet"
|
||||
anchored = TRUE
|
||||
layer = LOW_SIGIL_LAYER
|
||||
density = FALSE
|
||||
initial_duration = 30 SECONDS
|
||||
/// Flags for what antimagic can just ignore our forcefields
|
||||
var/antimagic_flags = MAGIC_RESISTANCE
|
||||
|
||||
/obj/effect/forcefield/cosmic_field/Initialize(mapload, flags = MAGIC_RESISTANCE)
|
||||
. = ..()
|
||||
antimagic_flags = flags
|
||||
|
||||
/obj/effect/forcefield/cosmic_field/CanAllowThrough(atom/movable/mover, border_dir)
|
||||
if(!isliving(mover))
|
||||
return ..()
|
||||
var/mob/living/living_mover = mover
|
||||
if(living_mover.can_block_magic(antimagic_flags, charge_cost = 0))
|
||||
return ..()
|
||||
if(living_mover.has_status_effect(/datum/status_effect/star_mark))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/effect/forcefield/cosmic_field/fast
|
||||
initial_duration = 5 SECONDS
|
||||
|
||||
@@ -30,7 +30,8 @@
|
||||
/datum/eldritch_knowledge/base_rust,
|
||||
/datum/eldritch_knowledge/base_mind,
|
||||
/datum/eldritch_knowledge/base_void,
|
||||
/datum/eldritch_knowledge/base_blade),
|
||||
/datum/eldritch_knowledge/base_blade,
|
||||
/datum/eldritch_knowledge/base_cosmic),
|
||||
TIER_1 = list(
|
||||
/datum/eldritch_knowledge/madness_mask,
|
||||
/datum/eldritch_knowledge/flesh_ghoul,
|
||||
@@ -38,6 +39,7 @@
|
||||
/datum/eldritch_knowledge/spell/mental_obfuscation,
|
||||
/datum/eldritch_knowledge/spell/void_phase,
|
||||
/datum/eldritch_knowledge/blade_dance,
|
||||
/datum/eldritch_knowledge/spell/cosmic_runes,
|
||||
/datum/eldritch_knowledge/armor,
|
||||
/datum/eldritch_knowledge/void_cloak,
|
||||
/datum/eldritch_knowledge/ashen_eyes,
|
||||
@@ -49,7 +51,8 @@
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/blade_mark),
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark),
|
||||
TIER_2 = list(
|
||||
/datum/eldritch_knowledge/spell/volcano_blast,
|
||||
/datum/eldritch_knowledge/raw_prophet,
|
||||
@@ -57,6 +60,7 @@
|
||||
/datum/eldritch_knowledge/spell/assault,
|
||||
/datum/eldritch_knowledge/cold_snap,
|
||||
/datum/eldritch_knowledge/duel_stance,
|
||||
/datum/eldritch_knowledge/spell/star_blast,
|
||||
/datum/eldritch_knowledge/spell/blood_siphon,
|
||||
/datum/eldritch_knowledge/spell/eldritchbolt,
|
||||
/datum/eldritch_knowledge/spell/void_blast),
|
||||
@@ -66,7 +70,8 @@
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade),
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade),
|
||||
TIER_3 = list(
|
||||
/datum/eldritch_knowledge/spell/flame_birth,
|
||||
/datum/eldritch_knowledge/stalker,
|
||||
@@ -74,6 +79,7 @@
|
||||
/datum/eldritch_knowledge/cerebral_control,
|
||||
/datum/eldritch_knowledge/spell/void_pull,
|
||||
/datum/eldritch_knowledge/spell/furious_steel,
|
||||
/datum/eldritch_knowledge/spell/cosmic_expansion,
|
||||
/datum/eldritch_knowledge/ashy,
|
||||
/datum/eldritch_knowledge/rusty,
|
||||
/datum/eldritch_knowledge/spell/cleave,
|
||||
@@ -85,7 +91,8 @@
|
||||
/datum/eldritch_knowledge/rust_final,
|
||||
/datum/eldritch_knowledge/mind_final,
|
||||
/datum/eldritch_knowledge/void_final,
|
||||
/datum/eldritch_knowledge/blade_final))
|
||||
/datum/eldritch_knowledge/blade_final,
|
||||
/datum/eldritch_knowledge/cosmic_final))
|
||||
|
||||
var/static/list/path_to_ui_color = list(
|
||||
PATH_START = "grey",
|
||||
@@ -358,6 +365,9 @@
|
||||
else if(is_flesh())
|
||||
if(transformed)
|
||||
parts += "<span class='greentext big'>THE THIRSTLY SERPENT HAS ASCENDED!</span>"
|
||||
else if(is_cosmic())
|
||||
if(transformed)
|
||||
parts += "<span class='greentext big'>THE STAR GAZER HAS ASCENDED!</span>"
|
||||
else
|
||||
parts += "<span class='greentext big'>THE OATHBREAKER HAS ASCENDED!</span>"
|
||||
else
|
||||
@@ -690,6 +700,37 @@
|
||||
flavor_message += "Your bloodied hand pounds on the nearest wall, a failure of a smith you turned out to be. You pray someone finds your emergency beacon on this abandoned station."
|
||||
else //Dead
|
||||
flavor_message += "You lay there, life draining from your body onto the station around you. The last thing you see is your reflection in your own blade, and then it all goes dark."
|
||||
|
||||
else if(is_cosmic()) //Cosmic epilogues
|
||||
|
||||
if(ascended)
|
||||
message_color = "#FFD700"
|
||||
if(escaped)
|
||||
flavor_message += "As the shuttle docks cosmic radiation pours from the doors, the lifeless corpses of those who dared defy you remain. Unmake the rest of them."
|
||||
else if(alive)
|
||||
flavor_message += "You turn to watch the escape shuttle leave, waving a small goodbye before beginning your new duty: Remaking the cosmos in your image."
|
||||
else //Dead
|
||||
flavor_message += "A loud scream is heard around the cosmos, your death cry will awaken your brothers and sisters, you will be remembered as a martyr."
|
||||
|
||||
else if(cultiewin) //Completed objectives
|
||||
if(escaped)
|
||||
flavor_message += "You completed everything you had set out to do and more on this station, now you must take the art of the cosmos to the rest of humanity."
|
||||
message_color = "#008000"
|
||||
else if(alive)
|
||||
flavor_message += "You feel the great creator look upon you with glee, opening a portal to his realm for you to join it."
|
||||
message_color = "#008000"
|
||||
else //Dead
|
||||
flavor_message += "As your body melts away into the stars, your consciousness carries on to the nearest star, beginning a super nova. A victory, in a sense."
|
||||
message_color = "#517fff"
|
||||
|
||||
else //Failed objectives
|
||||
if(escaped)
|
||||
flavor_message += "You step off the shuttle, knowing your time is limited now that you have failed. Cosmic radiation seeps through your soul, what will you do next?"
|
||||
message_color = "#517fff"
|
||||
else if(alive)
|
||||
flavor_message += "Dragging your feet through what remains of the ruined station, you can only laugh as the stars continue to twinkle in the sky, despite everything."
|
||||
else //Dead
|
||||
flavor_message += "Your skin turns to dust and your bones reduce to raw atoms, you will be forgotten in the new cosmic age."
|
||||
else //Unpledged epilogues
|
||||
|
||||
if(cultiewin) //Completed objectives (WITH NO RESEARCH MIND YOU)
|
||||
@@ -795,6 +836,9 @@
|
||||
/datum/antagonist/heretic/proc/is_blade()
|
||||
return "[lore]" == "Blade"
|
||||
|
||||
/datum/antagonist/heretic/proc/is_cosmic()
|
||||
return "[lore]" == "Cosmic"
|
||||
|
||||
/datum/antagonist/heretic/proc/is_unpledged()
|
||||
return "[lore]" == "Unpledged"
|
||||
|
||||
|
||||
@@ -498,3 +498,54 @@
|
||||
#undef PENANCE_TRAUMA_BASIC
|
||||
#undef TRAUMA_ADV_CAP
|
||||
#undef TRAUMA_BASIC_CAP
|
||||
|
||||
/obj/effect/cosmic_diamond
|
||||
name = "Cosmic Diamond"
|
||||
icon = 'icons/effects/eldritch.dmi'
|
||||
icon_state = "cosmic_diamond"
|
||||
anchored = TRUE
|
||||
|
||||
/obj/effect/temp_visual/cosmic_cloud
|
||||
name = "Cosmic Cloud"
|
||||
icon = 'icons/effects/eldritch.dmi'
|
||||
icon_state = "cosmic_cloud"
|
||||
anchored = TRUE
|
||||
duration = 8
|
||||
|
||||
/obj/effect/temp_visual/cosmic_explosion
|
||||
name = "Cosmic Explosion"
|
||||
icon = 'icons/effects/64x64.dmi'
|
||||
icon_state = "cosmic_explosion"
|
||||
anchored = TRUE
|
||||
duration = 5
|
||||
pixel_x = -16
|
||||
pixel_y = -16
|
||||
|
||||
/obj/effect/temp_visual/space_explosion
|
||||
name = "Space Explosion"
|
||||
icon = 'icons/effects/64x64.dmi'
|
||||
icon_state = "space_explosion"
|
||||
anchored = TRUE
|
||||
duration = 5
|
||||
pixel_x = -16
|
||||
pixel_y = -16
|
||||
|
||||
/obj/effect/temp_visual/cosmic_domain
|
||||
name = "Cosmic Domain"
|
||||
icon = 'icons/effects/160x160.dmi'
|
||||
icon_state = "cosmic_domain"
|
||||
anchored = TRUE
|
||||
duration = 6
|
||||
pixel_x = -64
|
||||
pixel_y = -64
|
||||
|
||||
/obj/effect/temp_visual/cosmic_gem
|
||||
name = "cosmic gem"
|
||||
icon = 'icons/effects/eldritch.dmi'
|
||||
icon_state = "cosmic_gem"
|
||||
duration = 12
|
||||
|
||||
/obj/effect/temp_visual/cosmic_gem/Initialize(mapload)
|
||||
. = ..()
|
||||
pixel_x = rand(-12, 12)
|
||||
pixel_y = rand(-9, 0)
|
||||
|
||||
@@ -187,6 +187,12 @@
|
||||
throwforce = 5
|
||||
block_chance = 10
|
||||
|
||||
/obj/item/melee/sickly_blade/cosmic
|
||||
name = "cosmic blade"
|
||||
desc = "A piece of the cosmos, shaped like a weapon for you to wield"
|
||||
icon_state = "cosmic_blade"
|
||||
item_state = "cosmic_blade"
|
||||
|
||||
/obj/item/melee/sickly_blade/dark/attack(mob/living/M, mob/living/user, secondattack = FALSE)
|
||||
. = ..()
|
||||
var/obj/item/mantis/blade/secondsword = user.get_inactive_held_item()
|
||||
|
||||
@@ -8,21 +8,25 @@
|
||||
/datum/eldritch_knowledge/base_mind,
|
||||
/datum/eldritch_knowledge/base_void,
|
||||
/datum/eldritch_knowledge/base_blade,
|
||||
/datum/eldritch_knowledge/base_cosmic,
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark,
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade,
|
||||
/datum/eldritch_knowledge/rust_final,
|
||||
/datum/eldritch_knowledge/flesh_final,
|
||||
/datum/eldritch_knowledge/mind_final,
|
||||
/datum/eldritch_knowledge/void_final,
|
||||
/datum/eldritch_knowledge/blade_final)
|
||||
/datum/eldritch_knowledge/blade_final,
|
||||
/datum/eldritch_knowledge/cosmic_final)
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/ash_knife)
|
||||
cost = 1
|
||||
route = PATH_ASH
|
||||
@@ -55,7 +59,7 @@
|
||||
if(!iscarbon(target))
|
||||
return
|
||||
var/mob/living/carbon/C = target
|
||||
var/datum/status_effect/eldritch/E = C.has_status_effect(/datum/status_effect/eldritch/rust) || C.has_status_effect(/datum/status_effect/eldritch/ash) || C.has_status_effect(/datum/status_effect/eldritch/flesh) || C.has_status_effect(/datum/status_effect/eldritch/void)
|
||||
var/datum/status_effect/eldritch/E = C.has_status_effect(/datum/status_effect/eldritch/rust) || C.has_status_effect(/datum/status_effect/eldritch/ash) || C.has_status_effect(/datum/status_effect/eldritch/flesh) || C.has_status_effect(/datum/status_effect/eldritch/void) || C.has_status_effect(/datum/status_effect/eldritch/cosmic)
|
||||
if(E)
|
||||
// Also refunds 75% of charge!
|
||||
var/datum/action/cooldown/spell/touch/mansus_grasp/grasp = locate() in user.actions
|
||||
@@ -90,7 +94,8 @@
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/blade_mark)
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark)
|
||||
route = PATH_ASH
|
||||
tier = TIER_MARK
|
||||
|
||||
@@ -153,7 +158,8 @@
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade)
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade)
|
||||
route = PATH_ASH
|
||||
tier = TIER_BLADE
|
||||
|
||||
|
||||
@@ -8,21 +8,25 @@
|
||||
/datum/eldritch_knowledge/base_flesh,
|
||||
/datum/eldritch_knowledge/base_mind,
|
||||
/datum/eldritch_knowledge/base_void,
|
||||
/datum/eldritch_knowledge/base_cosmic,
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark,
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade,
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade,
|
||||
/datum/eldritch_knowledge/ash_final,
|
||||
/datum/eldritch_knowledge/rust_final,
|
||||
/datum/eldritch_knowledge/flesh_final,
|
||||
/datum/eldritch_knowledge/mind_final,
|
||||
/datum/eldritch_knowledge/void_final)
|
||||
/datum/eldritch_knowledge/void_final,
|
||||
/datum/eldritch_knowledge/cosmic_final)
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/dark_knife)
|
||||
cost = 1
|
||||
route = PATH_BLADE
|
||||
@@ -90,14 +94,12 @@
|
||||
target.balloon_alert(source, "backstab!")
|
||||
playsound(get_turf(target), 'sound/weapons/guillotine.ogg', 100, TRUE)
|
||||
|
||||
|
||||
|
||||
/datum/eldritch_knowledge/base_blade/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(!iscarbon(target))
|
||||
return COMPONENT_BLOCK_HAND_USE
|
||||
var/mob/living/carbon/C = target
|
||||
var/datum/status_effect/eldritch/E = C.has_status_effect(/datum/status_effect/eldritch/rust) || C.has_status_effect(/datum/status_effect/eldritch/ash) || C.has_status_effect(/datum/status_effect/eldritch/flesh) || C.has_status_effect(/datum/status_effect/eldritch/void)
|
||||
var/datum/status_effect/eldritch/E = C.has_status_effect(/datum/status_effect/eldritch/rust) || C.has_status_effect(/datum/status_effect/eldritch/ash) || C.has_status_effect(/datum/status_effect/eldritch/flesh) || C.has_status_effect(/datum/status_effect/eldritch/void) || C.has_status_effect(/datum/status_effect/eldritch/cosmic)
|
||||
if(E)
|
||||
// Also refunds 75% of charge!
|
||||
var/datum/action/cooldown/spell/touch/mansus_grasp/grasp = locate() in user.actions
|
||||
@@ -173,7 +175,6 @@
|
||||
span_warning("You lean into [attack_text] and deliver a sudden riposte back at [target]!"),
|
||||
span_hear("You hear a clink, followed by a stab."),
|
||||
)
|
||||
message_admins("successful counter before attack")
|
||||
weapon.melee_attack_chain(source, target)
|
||||
|
||||
/datum/eldritch_knowledge/blade_dance/proc/reset_riposte(mob/living/carbon/human/source)
|
||||
@@ -193,7 +194,8 @@
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark)
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark)
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/eldritch_whetstone)
|
||||
route = PATH_BLADE
|
||||
tier = TIER_MARK
|
||||
@@ -267,7 +269,8 @@
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade)
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade)
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/bone_knife)
|
||||
route = PATH_BLADE
|
||||
tier = TIER_BLADE
|
||||
|
||||
162
code/modules/antagonists/eldritch_cult/knowledge/cosmo_lore.dm
Normal file
@@ -0,0 +1,162 @@
|
||||
/datum/eldritch_knowledge/base_cosmic
|
||||
name = "Eternal Gate"
|
||||
desc = "Opens up the Path of Cosmos to you. \ Allows you to transmute a sheet of plasma and a knife into an Cosmic Blade. \
|
||||
Additionally your grasp will now cause a cosmic ring on your targets, which are affected by your abilities."
|
||||
gain_text = "A nebula appeared in the sky, its infernal birth shone upon me. This was the start of a great transcendence."
|
||||
banned_knowledge = list(
|
||||
/datum/eldritch_knowledge/base_ash,
|
||||
/datum/eldritch_knowledge/base_rust,
|
||||
/datum/eldritch_knowledge/base_flesh,
|
||||
/datum/eldritch_knowledge/base_mind,
|
||||
/datum/eldritch_knowledge/base_void,
|
||||
/datum/eldritch_knowledge/base_blade,
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade,
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/ash_final,
|
||||
/datum/eldritch_knowledge/rust_final,
|
||||
/datum/eldritch_knowledge/flesh_final,
|
||||
/datum/eldritch_knowledge/mind_final,
|
||||
/datum/eldritch_knowledge/void_final,
|
||||
/datum/eldritch_knowledge/blade_final)
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/cosmic_knife)
|
||||
cost = 1
|
||||
route = PATH_COSMIC
|
||||
tier = TIER_PATH
|
||||
|
||||
/datum/eldritch_knowledge/base_cosmic/on_gain(mob/user)
|
||||
. = ..()
|
||||
var/obj/realknife = new /obj/item/melee/sickly_blade/cosmic
|
||||
user.put_in_hands(realknife)
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
|
||||
/datum/eldritch_knowledge/base_cosmic/on_lose(mob/user)
|
||||
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
|
||||
|
||||
/// Aplies the effect of the mansus grasp when it hits a target.
|
||||
/datum/eldritch_knowledge/base_cosmic/proc/on_mansus_grasp(mob/living/source, mob/living/target)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!ishuman(target))
|
||||
return COMPONENT_BLOCK_HAND_USE
|
||||
var/mob/living/carbon/human/human_target = target
|
||||
to_chat(target, span_danger("A cosmic ring appeared above your head!"))
|
||||
human_target.apply_status_effect(/datum/status_effect/star_mark, source)
|
||||
new /obj/effect/forcefield/cosmic_field(get_turf(source))
|
||||
|
||||
/datum/eldritch_knowledge/spell/cosmic_runes
|
||||
name = "T1 - Cosmic Runes"
|
||||
desc = "Grants you Cosmic Runes, a spell that creates two runes linked with each other for easy teleportation. \
|
||||
Only the entity activating the rune will get transported, and it can be used by anyone without a star mark. \
|
||||
However, people with a star mark will get transported along with another person using the rune."
|
||||
gain_text = "The distant stars crept into my dreams, roaring and screaming without reason. \
|
||||
I spoke, and heard my own words echoed back."
|
||||
spell_to_add = /datum/action/cooldown/spell/cosmic_rune
|
||||
cost = 1
|
||||
route = PATH_COSMIC
|
||||
tier = TIER_1
|
||||
|
||||
/datum/eldritch_knowledge/cosmic_mark
|
||||
name = "Grasp Mark - Mark of Cosmos"
|
||||
desc = "Your Mansus Grasp now applies the Mark of Cosmos. The mark is triggered from an attack with your Cosmic Blade. \
|
||||
When triggered, the victim is returned to the location where the mark was originally applied to them. \
|
||||
They will then be paralyzed for 2 seconds."
|
||||
gain_text = "The Beast now whispered to me occasionally, only small tidbits of their circumstances. \
|
||||
I can help them, I have to help them."
|
||||
banned_knowledge = list(
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/blade_mark)
|
||||
route = PATH_COSMIC
|
||||
tier = TIER_MARK
|
||||
|
||||
/datum/eldritch_knowledge/cosmic_mark/on_gain(mob/user)
|
||||
. = ..()
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
|
||||
/datum/eldritch_knowledge/cosmic_mark/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
|
||||
|
||||
/datum/eldritch_knowledge/cosmic_mark/proc/on_mansus_grasp(mob/living/source, mob/living/target)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(isliving(target))
|
||||
var/mob/living/living_target = target
|
||||
living_target.apply_status_effect(/datum/status_effect/eldritch/cosmic, 1)
|
||||
|
||||
/datum/eldritch_knowledge/base_cosmic/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void) || H.has_status_effect(/datum/status_effect/eldritch/cosmic)
|
||||
if(E)
|
||||
E.on_effect()
|
||||
|
||||
/datum/eldritch_knowledge/spell/star_blast
|
||||
name = "T2 - Star Blast"
|
||||
desc = "Fires a projectile that moves very slowly and creates cosmic fields on impact. \
|
||||
Anyone hit by the projectile will receive burn damage, a knockdown, and give people in a three tile range a star mark."
|
||||
gain_text = "The Beast was behind me now at all times, with each sacrifice words of affirmation coursed through me."
|
||||
spell_to_add = /datum/action/cooldown/spell/pointed/projectile/star_blast
|
||||
cost = 1
|
||||
route = PATH_COSMIC
|
||||
tier = TIER_2
|
||||
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade
|
||||
name = "Blade Upgrade - Stellar Sublimation"
|
||||
desc = "Your blade now deals damage to people's cells through cosmic radiation."
|
||||
gain_text = "The Beast took my blades in their hand, I kneeled and felt a sharp pain. \
|
||||
The blades now glistened with fragmented power. I fell to the ground and wept at the beast's feet."
|
||||
banned_knowledge = list(
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade,
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade)
|
||||
route = PATH_COSMIC
|
||||
tier = TIER_BLADE
|
||||
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade/on_eldritch_blade(target,user,proximity_flag,click_parameters)
|
||||
. = ..()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
C.adjustCloneLoss(4)
|
||||
|
||||
/datum/eldritch_knowledge/spell/cosmic_expansion
|
||||
name = "T3- Cosmic Expansion"
|
||||
desc = "Grants you Cosmic Expansion, a spell that creates a 3x3 area of cosmic fields around you. \
|
||||
Nearby beings will also receive a star mark."
|
||||
gain_text = "The ground now shook beneath me. The Beast inhabited me, and their voice was intoxicating."
|
||||
spell_to_add = /datum/action/cooldown/spell/conjure/cosmic_expansion
|
||||
cost = 1
|
||||
route = PATH_COSMIC
|
||||
tier = TIER_3
|
||||
|
||||
/datum/eldritch_knowledge/cosmic_final
|
||||
name = "Ascension Rite - Creator's Gift"
|
||||
desc = "The ascension ritual of the Path of Cosmos. \
|
||||
Bring 3 corpses to a transmutation rune to complete the ritual. \
|
||||
When completed, you may transform into a Star Gazer. \
|
||||
The Star Gazer has an aura that will heal you and damage opponents. \
|
||||
Optionally, you may summon a Star Gazer Ally instead, and gain damage reduction, stun immunity, and space immunity."
|
||||
gain_text = "The Beast held out its hand, I grabbed hold and they pulled me to them. Their body was towering, but it seemed so small and feeble after all their tales compiled in my head. \
|
||||
I clung on to them, they would protect me, and I would protect it. \
|
||||
I closed my eyes with my head laid against their form. I was safe. \
|
||||
WITNESS MY ASCENSION!"
|
||||
cost = 3
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/final/cosmic_final)
|
||||
route = PATH_COSMIC
|
||||
tier = TIER_ASCEND
|
||||
@@ -8,21 +8,25 @@
|
||||
/datum/eldritch_knowledge/base_mind,
|
||||
/datum/eldritch_knowledge/base_void,
|
||||
/datum/eldritch_knowledge/base_blade,
|
||||
/datum/eldritch_knowledge/base_cosmic,
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark,
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade,
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade,
|
||||
/datum/eldritch_knowledge/ash_final,
|
||||
/datum/eldritch_knowledge/rust_final,
|
||||
/datum/eldritch_knowledge/mind_final,
|
||||
/datum/eldritch_knowledge/void_final,
|
||||
/datum/eldritch_knowledge/blade_final)
|
||||
/datum/eldritch_knowledge/blade_final,
|
||||
/datum/eldritch_knowledge/cosmic_final)
|
||||
cost = 1
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/flesh_blade)
|
||||
route = PATH_FLESH
|
||||
@@ -91,7 +95,7 @@
|
||||
if(!ishuman(target))
|
||||
return
|
||||
var/mob/living/carbon/human/human_target = target
|
||||
var/datum/status_effect/eldritch/eldritch_effect = human_target.has_status_effect(/datum/status_effect/eldritch/rust) || human_target.has_status_effect(/datum/status_effect/eldritch/ash) || human_target.has_status_effect(/datum/status_effect/eldritch/flesh) || human_target.has_status_effect(/datum/status_effect/eldritch/void)
|
||||
var/datum/status_effect/eldritch/eldritch_effect = human_target.has_status_effect(/datum/status_effect/eldritch/rust) || human_target.has_status_effect(/datum/status_effect/eldritch/ash) || human_target.has_status_effect(/datum/status_effect/eldritch/flesh) || human_target.has_status_effect(/datum/status_effect/eldritch/void) || human_target.has_status_effect(/datum/status_effect/eldritch/cosmic)
|
||||
if(eldritch_effect)
|
||||
eldritch_effect.on_effect()
|
||||
if(iscarbon(target))
|
||||
@@ -119,7 +123,8 @@
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/blade_mark,)
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark)
|
||||
route = PATH_FLESH
|
||||
tier = TIER_MARK
|
||||
|
||||
@@ -164,7 +169,8 @@
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade)
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade)
|
||||
route = PATH_FLESH
|
||||
tier = TIER_BLADE
|
||||
|
||||
|
||||
@@ -8,21 +8,25 @@
|
||||
/datum/eldritch_knowledge/base_flesh,
|
||||
/datum/eldritch_knowledge/base_void,
|
||||
/datum/eldritch_knowledge/base_blade,
|
||||
/datum/eldritch_knowledge/base_cosmic,
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark,
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade,
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade,
|
||||
/datum/eldritch_knowledge/ash_final,
|
||||
/datum/eldritch_knowledge/rust_final,
|
||||
/datum/eldritch_knowledge/flesh_final,
|
||||
/datum/eldritch_knowledge/void_final,
|
||||
/datum/eldritch_knowledge/blade_final)
|
||||
/datum/eldritch_knowledge/blade_final,
|
||||
/datum/eldritch_knowledge/cosmic_final)
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/mind_knife)
|
||||
cost = 1
|
||||
route = PATH_MIND
|
||||
|
||||
@@ -8,21 +8,25 @@
|
||||
/datum/eldritch_knowledge/base_mind,
|
||||
/datum/eldritch_knowledge/base_void,
|
||||
/datum/eldritch_knowledge/base_blade,
|
||||
/datum/eldritch_knowledge/base_cosmic,
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark,
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade,
|
||||
/datum/eldritch_knowledge/ash_final,
|
||||
/datum/eldritch_knowledge/flesh_final,
|
||||
/datum/eldritch_knowledge/mind_final,
|
||||
/datum/eldritch_knowledge/void_final,
|
||||
/datum/eldritch_knowledge/blade_final)
|
||||
/datum/eldritch_knowledge/blade_final,
|
||||
/datum/eldritch_knowledge/cosmic_final)
|
||||
cost = 1
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/rust_blade)
|
||||
route = PATH_RUST
|
||||
@@ -55,7 +59,7 @@
|
||||
. = ..()
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void)
|
||||
var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void) || H.has_status_effect(/datum/status_effect/eldritch/cosmic)
|
||||
if(E)
|
||||
E.on_effect()
|
||||
H.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_SLOT_EARS,ORGAN_SLOT_EYES,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS,ORGAN_SLOT_STOMACH,ORGAN_SLOT_HEART),25)
|
||||
@@ -106,7 +110,8 @@
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/void_mark,
|
||||
/datum/eldritch_knowledge/blade_mark)
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark)
|
||||
route = PATH_RUST
|
||||
tier = TIER_MARK
|
||||
|
||||
@@ -143,7 +148,8 @@
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade)
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade)
|
||||
route = PATH_RUST
|
||||
tier = TIER_BLADE
|
||||
|
||||
|
||||
@@ -8,21 +8,25 @@
|
||||
/datum/eldritch_knowledge/base_flesh,
|
||||
/datum/eldritch_knowledge/base_mind,
|
||||
/datum/eldritch_knowledge/base_blade,
|
||||
/datum/eldritch_knowledge/base_cosmic,
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark,
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade,
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade,
|
||||
/datum/eldritch_knowledge/ash_final,
|
||||
/datum/eldritch_knowledge/rust_final,
|
||||
/datum/eldritch_knowledge/flesh_final,
|
||||
/datum/eldritch_knowledge/mind_final,
|
||||
/datum/eldritch_knowledge/blade_final)
|
||||
/datum/eldritch_knowledge/blade_final,
|
||||
/datum/eldritch_knowledge/cosmic_final)
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/void_knife)
|
||||
cost = 1
|
||||
route = PATH_VOID
|
||||
@@ -50,7 +54,7 @@
|
||||
. = ..()
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void)
|
||||
var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void) || H.has_status_effect(/datum/status_effect/eldritch/cosmic)
|
||||
if(E)
|
||||
E.on_effect()
|
||||
H.adjust_silence(10)
|
||||
@@ -90,7 +94,8 @@
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/blade_mark)
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark)
|
||||
route = PATH_VOID
|
||||
tier = TIER_MARK
|
||||
|
||||
@@ -146,7 +151,8 @@
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade)
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade)
|
||||
route = PATH_VOID
|
||||
tier = TIER_BLADE
|
||||
|
||||
|
||||
314
code/modules/antagonists/eldritch_cult/magic/cosmo_magic.dm
Normal file
@@ -0,0 +1,314 @@
|
||||
/datum/action/cooldown/spell/cosmic_rune
|
||||
name = "Cosmic Rune"
|
||||
desc = "Creates a cosmic rune at your position, only two can exist at a time. Invoking one rune transports you to the other."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "cosmic_rune"
|
||||
|
||||
sound = 'sound/magic/forcewall.ogg'
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 15 SECONDS
|
||||
|
||||
invocation = "ST'R R'N'"
|
||||
invocation_type = INVOCATION_WHISPER
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION
|
||||
|
||||
/// Storage for the first rune.
|
||||
var/datum/weakref/first_rune
|
||||
/// Storage for the second rune.
|
||||
var/datum/weakref/second_rune
|
||||
/// Rune removal effect.
|
||||
var/obj/effect/rune_remove_effect = /obj/effect/temp_visual/cosmic_rune_fade
|
||||
|
||||
/datum/action/cooldown/spell/cosmic_rune/cast(atom/cast_on)
|
||||
. = ..()
|
||||
var/obj/effect/cosmic_rune/first_rune_resolved = first_rune?.resolve()
|
||||
var/obj/effect/cosmic_rune/second_rune_resolved = second_rune?.resolve()
|
||||
if(first_rune_resolved && second_rune_resolved)
|
||||
var/obj/effect/cosmic_rune/new_rune = new /obj/effect/cosmic_rune(get_turf(cast_on))
|
||||
new rune_remove_effect(get_turf(first_rune_resolved))
|
||||
QDEL_NULL(first_rune_resolved)
|
||||
first_rune = WEAKREF(second_rune_resolved)
|
||||
second_rune = WEAKREF(new_rune)
|
||||
second_rune_resolved.link_rune(new_rune)
|
||||
new_rune.link_rune(second_rune_resolved)
|
||||
return
|
||||
if(!first_rune_resolved)
|
||||
first_rune = make_new_rune(get_turf(cast_on), second_rune_resolved)
|
||||
return
|
||||
if(!second_rune_resolved)
|
||||
second_rune = make_new_rune(get_turf(cast_on), first_rune_resolved)
|
||||
|
||||
/// Returns a weak reference to a new rune, linked to an existing rune if provided
|
||||
/datum/action/cooldown/spell/cosmic_rune/proc/make_new_rune(turf/target_turf, obj/effect/cosmic_rune/other_rune)
|
||||
var/obj/effect/cosmic_rune/new_rune = new /obj/effect/cosmic_rune(target_turf)
|
||||
if(other_rune)
|
||||
other_rune.link_rune(new_rune)
|
||||
new_rune.link_rune(other_rune)
|
||||
return WEAKREF(new_rune)
|
||||
|
||||
/// A rune that allows you to teleport to the location of a linked rune.
|
||||
/obj/effect/cosmic_rune
|
||||
name = "cosmic rune"
|
||||
desc = "A strange rune, that can instantly transport people to another location."
|
||||
anchored = TRUE
|
||||
icon = 'icons/obj/hand_of_god_structures.dmi'
|
||||
icon_state = "cosmic_rune"
|
||||
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
layer = SIGIL_LAYER
|
||||
/// The other rune this rune is linked with
|
||||
var/datum/weakref/linked_rune
|
||||
/// Effect for when someone teleports
|
||||
var/obj/effect/rune_effect = /obj/effect/temp_visual/rune_light
|
||||
|
||||
/obj/effect/cosmic_rune/Initialize(mapload)
|
||||
. = ..()
|
||||
var/image/silicon_image = image(icon = 'icons/obj/hand_of_god_structures.dmi', icon_state = null, loc = src)
|
||||
silicon_image.override = TRUE
|
||||
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "cosmic", silicon_image)
|
||||
|
||||
/obj/effect/cosmic_rune/attack_paw(mob/living/user, list/modifiers)
|
||||
return attack_hand(user, modifiers)
|
||||
|
||||
/obj/effect/cosmic_rune/attack_hand(mob/living/user, list/modifiers)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!linked_rune)
|
||||
balloon_alert(user, "no linked rune!")
|
||||
fail_invoke()
|
||||
return
|
||||
if(!(user in get_turf(src)))
|
||||
balloon_alert(user, "not close enough!")
|
||||
fail_invoke()
|
||||
return
|
||||
if(user.has_status_effect(/datum/status_effect/star_mark))
|
||||
balloon_alert(user, "blocked by star mark!")
|
||||
fail_invoke()
|
||||
return
|
||||
invoke(user)
|
||||
|
||||
/// For invoking the rune
|
||||
/obj/effect/cosmic_rune/proc/invoke(mob/living/user)
|
||||
var/obj/effect/cosmic_rune/linked_rune_resolved = linked_rune?.resolve()
|
||||
new rune_effect(get_turf(src))
|
||||
do_teleport(
|
||||
user,
|
||||
get_turf(linked_rune_resolved),
|
||||
no_effects = TRUE,
|
||||
channel = TELEPORT_CHANNEL_MAGIC,
|
||||
asoundin = 'sound/magic/cosmic_energy.ogg',
|
||||
asoundout = 'sound/magic/cosmic_energy.ogg',
|
||||
)
|
||||
for(var/mob/living/person_on_rune in get_turf(src))
|
||||
if(person_on_rune.has_status_effect(/datum/status_effect/star_mark))
|
||||
do_teleport(person_on_rune, get_turf(linked_rune_resolved), no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC)
|
||||
new rune_effect(get_turf(linked_rune_resolved))
|
||||
|
||||
/// For if someone failed to invoke the rune
|
||||
/obj/effect/cosmic_rune/proc/fail_invoke()
|
||||
visible_message(span_warning("The rune pulses with a small flash of purple light, then returns to normal."))
|
||||
var/oldcolor = rgb(255, 255, 255)
|
||||
color = rgb(150, 50, 200)
|
||||
animate(src, color = oldcolor, time = 5)
|
||||
addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_atom_colour)), 5)
|
||||
|
||||
/// For linking a new rune
|
||||
/obj/effect/cosmic_rune/proc/link_rune(datum/weakref/new_rune)
|
||||
linked_rune = WEAKREF(new_rune)
|
||||
|
||||
/obj/effect/cosmic_rune/Destroy()
|
||||
var/obj/effect/cosmic_rune/linked_rune_resolved = linked_rune?.resolve()
|
||||
if(linked_rune_resolved)
|
||||
linked_rune_resolved.unlink_rune()
|
||||
return ..()
|
||||
|
||||
/// Used for unlinking the other rune if this rune gets destroyed
|
||||
/obj/effect/cosmic_rune/proc/unlink_rune()
|
||||
linked_rune = null
|
||||
|
||||
/obj/effect/temp_visual/cosmic_rune_fade
|
||||
name = "cosmic rune"
|
||||
icon = 'icons/obj/hand_of_god_structures.dmi'
|
||||
icon_state = "cosmic_rune_fade"
|
||||
layer = SIGIL_LAYER
|
||||
anchored = TRUE
|
||||
duration = 5
|
||||
|
||||
/obj/effect/temp_visual/cosmic_rune_fade/Initialize(mapload)
|
||||
. = ..()
|
||||
var/image/silicon_image = image(icon = 'icons/obj/hand_of_god_structures.dmi', icon_state = null, loc = src)
|
||||
silicon_image.override = TRUE
|
||||
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "cosmic", silicon_image)
|
||||
|
||||
/obj/effect/temp_visual/rune_light
|
||||
name = "cosmic rune"
|
||||
icon = 'icons/obj/hand_of_god_structures.dmi'
|
||||
icon_state = "cosmic_rune_light"
|
||||
layer = SIGIL_LAYER
|
||||
anchored = TRUE
|
||||
duration = 5
|
||||
|
||||
/obj/effect/temp_visual/rune_light/Initialize(mapload)
|
||||
. = ..()
|
||||
var/image/silicon_image = image(icon = 'icons/obj/hand_of_god_structures.dmi', icon_state = null, loc = src)
|
||||
silicon_image.override = TRUE
|
||||
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "cosmic", silicon_image)
|
||||
|
||||
|
||||
/datum/action/cooldown/spell/pointed/projectile/star_blast
|
||||
name = "Star Blast"
|
||||
desc = "This spell fires a disk with cosmic energies at a target."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "star_blast"
|
||||
|
||||
sound = 'sound/magic/cosmic_energy.ogg'
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 20 SECONDS
|
||||
|
||||
invocation = "R'T'T' ST'R!"
|
||||
invocation_type = INVOCATION_SHOUT
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION
|
||||
|
||||
active_msg = "You prepare to cast your star blast!"
|
||||
deactive_msg = "You stop swirling cosmic energies from the palm of your hand... for now."
|
||||
cast_range = 12
|
||||
projectile_type = /obj/projectile/magic/star_ball
|
||||
|
||||
/obj/projectile/magic/star_ball
|
||||
name = "star ball"
|
||||
icon_state = "star_ball"
|
||||
damage = 20
|
||||
damage_type = BURN
|
||||
speed = 1
|
||||
range = 100
|
||||
knockdown = 4 SECONDS
|
||||
/// Effect for when the ball hits something
|
||||
var/obj/effect/explosion_effect = /obj/effect/temp_visual/cosmic_explosion
|
||||
/// The range at which people will get marked with a star mark.
|
||||
var/star_mark_range = 3
|
||||
|
||||
/obj/projectile/magic/star_ball/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/effect_trail, /obj/effect/forcefield/cosmic_field/fast)
|
||||
|
||||
/obj/projectile/magic/star_ball/on_hit(atom/target, blocked = 0, pierce_hit)
|
||||
. = ..()
|
||||
var/mob/living/cast_on = firer
|
||||
for(var/mob/living/nearby_mob in range(star_mark_range, target))
|
||||
if(cast_on == nearby_mob)
|
||||
continue
|
||||
nearby_mob.apply_status_effect(/datum/status_effect/star_mark, cast_on)
|
||||
|
||||
/obj/projectile/magic/star_ball/Destroy()
|
||||
playsound(get_turf(src), 'sound/magic/cosmic_energy.ogg', 50, FALSE)
|
||||
for(var/turf/cast_turf as anything in get_turfs())
|
||||
new /obj/effect/forcefield/cosmic_field(cast_turf)
|
||||
return ..()
|
||||
|
||||
/obj/projectile/magic/star_ball/proc/get_turfs()
|
||||
return list(get_turf(src), pick(get_step(src, NORTH), get_step(src, SOUTH)), pick(get_step(src, EAST), get_step(src, WEST)))
|
||||
|
||||
/datum/action/cooldown/spell/conjure/cosmic_expansion
|
||||
name = "Cosmic Expansion"
|
||||
desc = "This spell generates a 3x3 domain of cosmic fields. \
|
||||
Creatures up to 7 tiles away will also recieve a star mark."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "cosmic_domain"
|
||||
|
||||
sound = 'sound/magic/cosmic_expansion.ogg'
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 45 SECONDS
|
||||
|
||||
invocation = "C'SM'S 'XP'ND"
|
||||
invocation_type = INVOCATION_SHOUT
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION
|
||||
|
||||
summon_amount = 9
|
||||
summon_radius = 1
|
||||
summon_type = list(/obj/effect/forcefield/cosmic_field)
|
||||
/// The range at which people will get marked with a star mark.
|
||||
var/star_mark_range = 7
|
||||
/// Effect for when the spell triggers
|
||||
var/obj/effect/expansion_effect = /obj/effect/temp_visual/cosmic_domain
|
||||
/// If the heretic is ascended or not
|
||||
var/ascended = FALSE
|
||||
|
||||
/datum/action/cooldown/spell/conjure/cosmic_expansion/cast(mob/living/cast_on)
|
||||
new expansion_effect(get_turf(cast_on))
|
||||
for(var/mob/living/nearby_mob in range(star_mark_range, cast_on))
|
||||
if(cast_on == nearby_mob)
|
||||
continue
|
||||
nearby_mob.apply_status_effect(/datum/status_effect/star_mark, cast_on)
|
||||
if (ascended)
|
||||
for(var/turf/cast_turf as anything in get_turfs(get_turf(cast_on)))
|
||||
new /obj/effect/forcefield/cosmic_field(cast_turf)
|
||||
return ..()
|
||||
|
||||
/datum/action/cooldown/spell/conjure/cosmic_expansion/proc/get_turfs(turf/target_turf)
|
||||
var/list/target_turfs = list()
|
||||
for (var/direction as anything in GLOB.cardinals)
|
||||
target_turfs += get_ranged_target_turf(target_turf, direction, 2)
|
||||
target_turfs += get_ranged_target_turf(target_turf, direction, 3)
|
||||
return target_turfs
|
||||
|
||||
|
||||
/datum/action/cooldown/spell/conjure/cosmic_expansion/large
|
||||
|
||||
name = "Cosmic Domain"
|
||||
desc = "This spell generates a domain of cosmic fields. \
|
||||
Creatures up to 7 tiles away will also recieve a star mark."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "cosmic_domain"
|
||||
|
||||
sound = 'sound/magic/cosmic_expansion.ogg'
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 30 SECONDS
|
||||
|
||||
invocation = "C'SM'S 'XP'ND"
|
||||
invocation_type = INVOCATION_SHOUT
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION
|
||||
|
||||
summon_amount = 24
|
||||
summon_radius = 2
|
||||
summon_type = list(/obj/effect/forcefield/cosmic_field)
|
||||
|
||||
|
||||
/datum/action/cooldown/spell/pointed/projectile/star_blast/ascended
|
||||
|
||||
name = "Celestial Blast"
|
||||
desc = "This spell fires a disk with cosmic energies at a target."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "star_blast"
|
||||
|
||||
sound = 'sound/magic/cosmic_energy.ogg'
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 10 SECONDS
|
||||
|
||||
invocation = "R'T'T' ST'R!"
|
||||
invocation_type = INVOCATION_SHOUT
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION
|
||||
|
||||
active_msg = "You prepare to cast your celestial blast!"
|
||||
deactive_msg = "You stop swirling cosmic energies from the palm of your hand... for now."
|
||||
cast_range = 12
|
||||
projectile_type = /obj/projectile/magic/star_ball/ascended
|
||||
|
||||
|
||||
/obj/projectile/magic/star_ball/ascended
|
||||
name = "celestial ball"
|
||||
icon_state = "star_ball"
|
||||
damage = 40
|
||||
damage_type = BURN
|
||||
speed = 1
|
||||
range = 100
|
||||
knockdown = 8 SECONDS
|
||||
@@ -0,0 +1,70 @@
|
||||
/datum/eldritch_transmutation/cosmic_knife
|
||||
name = "Cosmic Blade"
|
||||
required_atoms = list(/obj/item/kitchen/knife,/obj/item/stack/sheet/mineral/plasma)
|
||||
result_atoms = list(/obj/item/melee/sickly_blade/cosmic)
|
||||
required_shit_list = "A pierce of plasma and a knife."
|
||||
|
||||
/datum/eldritch_transmutation/final/cosmic_final
|
||||
name = "Creators's Gift"
|
||||
required_atoms = list(/mob/living/carbon/human)
|
||||
required_shit_list = "Three dead bodies."
|
||||
|
||||
/datum/eldritch_transmutation/final/cosmic_final/on_finished_recipe(mob/living/user, list/atoms, loc)
|
||||
var/alert_ = tgui_alert(user, "Do you want to ascend as a Star Gazer? Rejecting this power will empower yourself and summon one as an ally.", "...", list("Yes","No"))
|
||||
user.SetImmobilized(10 HOURS) // no way someone will stand 10 hours in a spot, just so he can move while the alert is still showing.
|
||||
switch(alert_)
|
||||
if("No")
|
||||
var/mob/living/summoned = new /mob/living/simple_animal/hostile/eldritch/star_gazer(loc)
|
||||
message_admins("[summoned.name] is being summoned by [user.real_name] in [loc].")
|
||||
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [summoned.real_name]?", ROLE_HERETIC, null, ROLE_HERETIC, 100,summoned)
|
||||
user.SetImmobilized(0)
|
||||
if(LAZYLEN(candidates) == 0)
|
||||
to_chat(user,span_warning("No ghost could be found..."))
|
||||
qdel(summoned)
|
||||
return FALSE
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.physiology.brute_mod *= 0.5
|
||||
H.physiology.burn_mod *= 0.5
|
||||
H.physiology.stamina_mod = 0
|
||||
H.physiology.stun_mod = 0
|
||||
|
||||
ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT)
|
||||
ADD_TRAIT(user, TRAIT_RESISTHIGHPRESSURE, MAGIC_TRAIT)
|
||||
ADD_TRAIT(user, TRAIT_NOBREATH, MAGIC_TRAIT)
|
||||
var/mob/dead/observer/ghost_candidate = pick(candidates)
|
||||
priority_announce("Immense destabilization of the bluespace veil has been observed. Our scanners report two entitites of immeasurable power. Beginning sector purge. Immediate evacuation is advised.", "Anomaly Alert", ANNOUNCER_SPANOMALIES)
|
||||
|
||||
log_game("[key_name_admin(ghost_candidate)] has taken control of ([key_name_admin(summoned)]).")
|
||||
summoned.ghostize(FALSE)
|
||||
summoned.key = ghost_candidate.key
|
||||
summoned.mind.add_antag_datum(/datum/antagonist/heretic_monster)
|
||||
var/datum/antagonist/heretic_monster/monster = summoned.mind.has_antag_datum(/datum/antagonist/heretic_monster)
|
||||
var/datum/antagonist/heretic/master = user.mind.has_antag_datum(/datum/antagonist/heretic)
|
||||
monster.set_owner(master)
|
||||
master.ascended = TRUE
|
||||
if("Yes")
|
||||
var/mob/living/summoned = new /mob/living/simple_animal/hostile/eldritch/star_gazer(loc,TRUE,10)
|
||||
summoned.ghostize(0)
|
||||
user.SetImmobilized(0)
|
||||
for(var/datum/action/cooldown/spell/spells in user.actions)
|
||||
if(istype(spells, /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash)) //I dont want big mobs to be able to use ash jaunt
|
||||
spells.Remove(user)
|
||||
qdel(spells)
|
||||
priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# Fear the cosmos, for The Creator has ascended! Unmake all of reality! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", ANNOUNCER_SPANOMALIES)
|
||||
var/atom/movable/gravity_lens/shockwave = new(get_turf(user))
|
||||
set_security_level(SEC_LEVEL_GAMMA)
|
||||
|
||||
shockwave.transform = matrix().Scale(0.5)
|
||||
shockwave.pixel_x = -240
|
||||
shockwave.pixel_y = -240
|
||||
animate(shockwave, alpha = 0, transform = matrix().Scale(20), time = 10 SECONDS, easing = QUAD_EASING)
|
||||
QDEL_IN(shockwave, 10.5 SECONDS)
|
||||
log_game("[user.real_name] ascended as [summoned.real_name].")
|
||||
var/mob/living/carbon/carbon_user = user
|
||||
var/datum/antagonist/heretic/ascension = carbon_user.mind.has_antag_datum(/datum/antagonist/heretic)
|
||||
ascension.ascended = TRUE
|
||||
ascension.transformed = TRUE
|
||||
carbon_user.mind.transfer_to(summoned, TRUE)
|
||||
carbon_user.gib()
|
||||
|
||||
return ..()
|
||||
@@ -372,3 +372,51 @@
|
||||
/datum/action/cooldown/spell/shapeshift/eldritch,
|
||||
/datum/action/cooldown/spell/emp/eldritch,
|
||||
)
|
||||
|
||||
/mob/living/simple_animal/hostile/eldritch/star_gazer
|
||||
name = "Star Gazer"
|
||||
desc = "A creature that has been tasked to watch over the stars."
|
||||
icon = 'icons/mob/96x96eldritch_mobs.dmi'
|
||||
icon_state = "star_gazer"
|
||||
icon_living = "star_gazer"
|
||||
pixel_x = -32
|
||||
base_pixel_x = -32
|
||||
mob_biotypes = MOB_HUMANOID | MOB_SPECIAL
|
||||
speed = -0.2
|
||||
maxHealth = 750
|
||||
health = 750
|
||||
|
||||
obj_damage = 400
|
||||
armour_penetration = 20
|
||||
melee_damage_lower = 40
|
||||
melee_damage_upper = 40
|
||||
sentience_type = SENTIENCE_BOSS
|
||||
attack_vis_effect = ATTACK_EFFECT_SLASH
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
speak_emote = list("growls")
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
deathsound = 'sound/magic/cosmic_expansion.ogg'
|
||||
loot = list(/obj/effect/temp_visual/cosmic_domain)
|
||||
|
||||
move_force = MOVE_FORCE_OVERPOWERING
|
||||
move_resist = MOVE_FORCE_OVERPOWERING
|
||||
pull_force = MOVE_FORCE_OVERPOWERING
|
||||
mob_size = MOB_SIZE_HUGE
|
||||
layer = LARGE_MOB_LAYER
|
||||
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
|
||||
|
||||
actions_to_add = list(
|
||||
/datum/action/cooldown/spell/conjure/cosmic_expansion/large,
|
||||
/datum/action/cooldown/spell/pointed/projectile/star_blast/ascended
|
||||
)
|
||||
|
||||
/mob/living/simple_animal/hostile/eldritch/star_gazer/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/death_explosion, 3, 6, 12)
|
||||
AddElement(/datum/element/effect_trail, /obj/effect/forcefield/cosmic_field/fast)
|
||||
AddComponent(/datum/component/regenerator, outline_colour = "#b97a5d")
|
||||
ADD_TRAIT(src, TRAIT_LAVA_IMMUNE, INNATE_TRAIT)
|
||||
ADD_TRAIT(src, TRAIT_ASHSTORM_IMMUNE, INNATE_TRAIT)
|
||||
ADD_TRAIT(src, TRAIT_NO_TELEPORT, MEGAFAUNA_TRAIT)
|
||||
ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT)
|
||||
set_light(4, l_color = "#dcaa5b")
|
||||
|
||||
|
Before Width: | Height: | Size: 610 KiB After Width: | Height: | Size: 628 KiB |
|
Before Width: | Height: | Size: 394 KiB After Width: | Height: | Size: 396 KiB |
|
Before Width: | Height: | Size: 849 KiB After Width: | Height: | Size: 930 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 39 KiB |
BIN
icons/mob/96x96eldritch_mobs.dmi
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 132 KiB |
BIN
sound/magic/cosmic_energy.ogg
Normal file
BIN
sound/magic/cosmic_expansion.ogg
Normal file
@@ -655,11 +655,14 @@
|
||||
#include "code\datums\elements\climbable.dm"
|
||||
#include "code\datums\elements\connect_loc.dm"
|
||||
#include "code\datums\elements\content_barfer.dm"
|
||||
#include "code\datums\elements\death_explosion.dm"
|
||||
#include "code\datums\elements\earhealing.dm"
|
||||
#include "code\datums\elements\effect_trail.dm"
|
||||
#include "code\datums\elements\firestacker.dm"
|
||||
#include "code\datums\elements\frozen.dm"
|
||||
#include "code\datums\elements\life_drain.dm"
|
||||
#include "code\datums\elements\movetype_handler.dm"
|
||||
#include "code\datums\elements\regenerator.dm"
|
||||
#include "code\datums\elements\squish.dm"
|
||||
#include "code\datums\elements\update_icon_blocker.dm"
|
||||
#include "code\datums\helper_datums\events.dm"
|
||||
@@ -1803,12 +1806,14 @@
|
||||
#include "code\modules\antagonists\eldritch_cult\eldritch_transmutations.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\knowledge\ash_lore.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\knowledge\blade_lore.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\knowledge\cosmo_lore.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\knowledge\flesh_lore.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\knowledge\mind_lore.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\knowledge\rust_lore.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\knowledge\void_lore.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\magic\ash_magic.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\magic\blade_magic.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\magic\cosmo_magic.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\magic\flesh_magic.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\magic\general_heretic_magic.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\magic\mind_magic.dm"
|
||||
@@ -1816,6 +1821,7 @@
|
||||
#include "code\modules\antagonists\eldritch_cult\magic\void_magic.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\transmutations\ash_transmutations.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\transmutations\blade_transmutations.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\transmutations\cosmo_transmutations.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\transmutations\flesh_transmutations.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\transmutations\mind_transmutations.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\transmutations\rust_transmutations.dm"
|
||||
|
||||