[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
This commit is contained in:
cowbot92
2023-10-24 00:45:30 -04:00
committed by GitHub
parent 0b35292e17
commit baa1815c2c
34 changed files with 1029 additions and 28 deletions

View File

@@ -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

View File

@@ -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)

View 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)

View 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)

View 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

View File

@@ -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 ..()

View File

@@ -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

View File

@@ -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"

View File

@@ -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)

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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

View File

@@ -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 ..()

View File

@@ -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")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 610 KiB

After

Width:  |  Height:  |  Size: 628 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 394 KiB

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 849 KiB

After

Width:  |  Height:  |  Size: 930 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Binary file not shown.

View 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"