diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm
index 9ca72e09cceea..09ba57c4ad367 100644
--- a/code/__DEFINES/role_preferences.dm
+++ b/code/__DEFINES/role_preferences.dm
@@ -128,8 +128,6 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_TRAITOR = 0,
ROLE_WIZARD = 14,
- ROLE_DARKSPAWN = 14, //Massmeta edit
-
// Midround
ROLE_ABDUCTOR = 0,
ROLE_ALIEN = 0,
diff --git a/code/__DEFINES/~massmeta_defines/_defines_include.dm b/code/__DEFINES/~massmeta_defines/_defines_include.dm
index fc7c419fd8b94..b964361dc3093 100644
--- a/code/__DEFINES/~massmeta_defines/_defines_include.dm
+++ b/code/__DEFINES/~massmeta_defines/_defines_include.dm
@@ -1,6 +1 @@
-#include "role_preferences.dm"
-#include "status_effects.dm"
-#include "antagonists.dm"
-#include "span.dm"
-#include "say.dm"
#include "inventory.dm"
diff --git a/code/__DEFINES/~massmeta_defines/antagonists.dm b/code/__DEFINES/~massmeta_defines/antagonists.dm
deleted file mode 100644
index 5e17e9f7c0770..0000000000000
--- a/code/__DEFINES/~massmeta_defines/antagonists.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-#define isdarkspawn(A) (A.mind && A.mind.has_antag_datum(/datum/antagonist/darkspawn))
-#define isveil(A) (A.mind && A.mind.has_antag_datum(/datum/antagonist/veil))
-#define is_darkspawn_or_veil(A) (A.mind && isdarkspawn(A) || isveil(A))
-
-#define DARKSPAWN_DIM_LIGHT 0.2 //light of this intensity suppresses healing and causes very slow burn damage
-#define DARKSPAWN_BRIGHT_LIGHT 0.3 //light of this intensity causes rapid burn damage
-
-#define DARKSPAWN_DARK_HEAL 5 //how much damage of each type (with fire damage half rate) is healed in the dark
-#define DARKSPAWN_LIGHT_BURN 7 //how much damage the darkspawn receives per tick in lit areas
-
-#define STATUS_EFFECT_CREEP /datum/status_effect/creep //Provides immunity to lightburn for darkspawn, does nothing to anyone else //Massmeta edit
-#define STATUS_EFFECT_TIME_DILATION /datum/status_effect/time_dilation //Provides immunity to slowdown and halves click-delay/action times //Massmeta edit
-#define STATUS_EFFECT_BROKEN_WILL /datum/status_effect/broken_will //A 30-second sleep effect reduced by 1 second for every point
-#define STATUS_EFFECT_TAGALONG /datum/status_effect/tagalong //allows darkspawn to accompany people's shadows
diff --git a/code/__DEFINES/~massmeta_defines/role_preferences.dm b/code/__DEFINES/~massmeta_defines/role_preferences.dm
deleted file mode 100644
index 29955125f9060..0000000000000
--- a/code/__DEFINES/~massmeta_defines/role_preferences.dm
+++ /dev/null
@@ -1 +0,0 @@
-#define ROLE_DARKSPAWN "darkspawn"
diff --git a/code/__DEFINES/~massmeta_defines/say.dm b/code/__DEFINES/~massmeta_defines/say.dm
deleted file mode 100644
index a1a5d7b611bd7..0000000000000
--- a/code/__DEFINES/~massmeta_defines/say.dm
+++ /dev/null
@@ -1,3 +0,0 @@
-#define MODE_DARKSPAWN "mindlink"
-#define MODE_KEY_DARKSPAWN "w"
-#define MODE_TOKEN_DARKSPAWN ":w"
diff --git a/code/__DEFINES/~massmeta_defines/span.dm b/code/__DEFINES/~massmeta_defines/span.dm
deleted file mode 100644
index 397f1e845bdcf..0000000000000
--- a/code/__DEFINES/~massmeta_defines/span.dm
+++ /dev/null
@@ -1 +0,0 @@
-#define span_velvet(str) ("" + str + "")
diff --git a/code/__DEFINES/~massmeta_defines/status_effects.dm b/code/__DEFINES/~massmeta_defines/status_effects.dm
deleted file mode 100644
index 3543c6a36c25e..0000000000000
--- a/code/__DEFINES/~massmeta_defines/status_effects.dm
+++ /dev/null
@@ -1 +0,0 @@
-#define STATUS_EFFECT_PROGENITORCURSE /datum/status_effect/progenitor_curse
diff --git a/massmeta/code/_globalvars/lists/game_modes.dm b/massmeta/code/_globalvars/lists/game_modes.dm
deleted file mode 100644
index 0c32f4989fc10..0000000000000
--- a/massmeta/code/_globalvars/lists/game_modes.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-GLOBAL_VAR_INIT(required_succs, 20)
-GLOBAL_VAR_INIT(sacrament_done, FALSE)
diff --git a/massmeta/code/datums/mood_events/generic_positive_events.dm b/massmeta/code/datums/mood_events/generic_positive_events.dm
deleted file mode 100644
index ede3d4d868da2..0000000000000
--- a/massmeta/code/datums/mood_events/generic_positive_events.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/datum/mood_event/thrall
- description = "The darkness is true. I love them. I love the masters.\n"
- mood_change = 40
-
-/datum/mood_event/sling
- description = "The keys to reality are within my grasp.\n"
- mood_change = 20
diff --git a/massmeta/code/datums/saymode.dm b/massmeta/code/datums/saymode.dm
deleted file mode 100644
index 051c623100dcc..0000000000000
--- a/massmeta/code/datums/saymode.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/datum/saymode/darkspawn
- key = MODE_KEY_DARKSPAWN
- mode = MODE_DARKSPAWN
-
-/datum/saymode/darkspawn/handle_message(mob/living/user, message, datum/language/language)
- var/datum/mind = user.mind
- if(!mind)
- return TRUE
- if(is_darkspawn_or_veil(user))
- user.log_talk(message, LOG_SAY, tag="darkspawn")
- var/msg = span_velvet("\[Mindlink\] [user.real_name]: \"[message]\"")
- for(var/mob/M in GLOB.player_list)
- if(M in GLOB.dead_mob_list)
- var/link = FOLLOW_LINK(M, user)
- to_chat(M, "[link] [msg]")
- else if(is_darkspawn_or_veil(M))
- var/turf/receiver = get_turf(M)
- var/turf/sender = get_turf(user)
- if(receiver.z != sender.z)
- if(prob(25))
- to_chat(M, span_warning("Your mindlink trembles with words, but they are too far to make out..."))
- continue
- to_chat(M, msg)
- return FALSE
diff --git a/massmeta/code/datums/status_effects/buffs.dm b/massmeta/code/datums/status_effects/buffs.dm
deleted file mode 100644
index 3e59760034c7c..0000000000000
--- a/massmeta/code/datums/status_effects/buffs.dm
+++ /dev/null
@@ -1,82 +0,0 @@
-/datum/status_effect/creep //allows darkspawn to move through lights without lightburn damage //Massmeta edit start
- id = "creep"
- duration = -1
- alert_type = /atom/movable/screen/alert/status_effect/creep
- var/datum/antagonist/darkspawn/darkspawn
-
-/datum/status_effect/creep/get_examine_text()
- return span_warning("[owner.p_they(TRUE)] is surrounded by velvety, gently-waving black shadows!")
-
-/datum/status_effect/creep/on_creation(mob/living/owner, datum/antagonist/darkspawn)
- . = ..()
- if(!.)
- return
- src.darkspawn = darkspawn
-
-//tick instead of process
-/datum/status_effect/creep/tick(seconds_between_ticks)
- if(!darkspawn)
- qdel(src)
- return
- if(!darkspawn.has_psi(5)) //ticks 5 times per second, 5 Psi lost per second (outdate)
- to_chat(owner, "Without the Psi to maintain it, your protective aura vanishes!")
- qdel(src)
- return
- darkspawn.use_psi(5)
-
-/atom/movable/screen/alert/status_effect/creep
- name = "Creep"
- desc = "You are immune to lightburn. Drains 1 Psi per second."
- icon = 'massmeta/icons/mob/actions/actions_darkspawn.dmi'
- icon_state = "creep"
-
-/datum/status_effect/shadow_dance //allows darkspawn to move through lights without lightburn damage //Massmeta edit start
- id = "shadowdance"
- duration = -1
- alert_type = /atom/movable/screen/alert/status_effect/shadow_dance
- var/datum/antagonist/darkspawn/darkspawn
-
-/datum/status_effect/shadow_dance/on_creation(mob/living/owner, datum/antagonist/darkspawn)
- . = ..()
- if(!.)
- return
- src.darkspawn = darkspawn
-
-/datum/status_effect/shadow_dance/tick()
- if(!darkspawn)
- qdel(src)
- return
- if(!darkspawn.has_psi(5))
- to_chat(owner, "You dont have enough psi to mantain the dance!")
- qdel(src)
- return
- darkspawn.use_psi(5)
-
-/atom/movable/screen/alert/status_effect/shadow_dance
- name = "Shadow Dance"
- desc = "You are able to avoid projectiles while in darkness."
- icon = 'icons/mob/actions/actions_minor_antag.dmi'
- icon_state = "ninja_cloak"
-
-/datum/status_effect/time_dilation //used by darkspawn; greatly increases action times etc
- id = "time_dilation"
- duration = 600
- alert_type = /atom/movable/screen/alert/status_effect/time_dilation
-
-/datum/status_effect/time_dilation/get_examine_text()
- return span_warning("[owner.p_they(TRUE)] is moving jerkily and unpredictably!")
-
-/datum/status_effect/time_dilation/on_apply()
- owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/time_dilation)
- owner.add_actionspeed_modifier(/datum/actionspeed_modifier/time_dilation)
- return TRUE
-
-/datum/status_effect/time_dilation/on_remove()
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/time_dilation)
- owner.remove_actionspeed_modifier(/datum/actionspeed_modifier/time_dilation)
-
-/atom/movable/screen/alert/status_effect/time_dilation
- name = "Time Dilation"
- desc = "Your actions are twice as fast, and the delay between them is halved."
- icon = 'massmeta/icons/mob/actions/actions_darkspawn.dmi'
- icon_state = "time_dilation" //Massmeta edit end
diff --git a/massmeta/code/datums/status_effects/debuffs/broken_will.dm b/massmeta/code/datums/status_effects/debuffs/broken_will.dm
deleted file mode 100644
index 72623a0483fae..0000000000000
--- a/massmeta/code/datums/status_effects/debuffs/broken_will.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-//Broken Will: Applied by Devour Will, and functions similarly to Kindle. Induces sleep for 30 seconds, going down by 1 second for every point of damage the target takes.
-/datum/status_effect/broken_will
- id = "broken_will"
- status_type = STATUS_EFFECT_UNIQUE
- tick_interval = 5
- duration = 300
- alert_type = /atom/movable/screen/alert/status_effect/broken_will
- var/old_health
-
-/datum/status_effect/broken_will/get_examine_text()
- return "[owner.p_they(TRUE)] is in a deep, deathlike sleep, with no signs of awareness to anything around them."
-
-/datum/status_effect/broken_will/tick()
- owner.Unconscious(15)
- if(!old_health)
- old_health = owner.health
- var/health_difference = old_health - owner.health
- if(!health_difference)
- return
- owner.visible_message("[owner] jerks in their sleep as they're harmed!")
- to_chat(owner, "Something hits you, pulling you towards wakefulness!")
- health_difference *= 10 //1 point of damage = 1 second = 10 deciseconds
- duration -= health_difference
- old_health = owner.health
-
-/atom/movable/screen/alert/status_effect/broken_will
- name = "Broken Will"
- desc = "..."
- icon_state = "broken_will"
- alerttooltipstyle = "alien"
diff --git a/massmeta/code/datums/status_effects/debuffs/debuffs.dm b/massmeta/code/datums/status_effects/debuffs/debuffs.dm
deleted file mode 100644
index 405fb7f4139f8..0000000000000
--- a/massmeta/code/datums/status_effects/debuffs/debuffs.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/datum/status_effect/progenitor_curse
- duration = 200
- tick_interval = 5
-
-/datum/status_effect/progenitor_curse/tick()
- if(owner.stat == DEAD)
- return
- var/grab_dir = turn(owner.dir, rand(-180, 180)) //grab them from a random direction
- var/turf/spawn_turf = get_ranged_target_turf(owner, grab_dir, 5)
- if(spawn_turf)
- grasp(spawn_turf)
-
-/datum/status_effect/progenitor_curse/proc/grasp(turf/spawn_turf)
- set waitfor = FALSE
- new/obj/effect/temp_visual/dir_setting/curse/grasp_portal(spawn_turf, owner.dir)
- playsound(spawn_turf, 'sound/effects/curse2.ogg', 80, 1, -1)
- var/obj/projectile/curse_hand/progenitor/C = new (spawn_turf)
- C.preparePixelProjectile(owner, spawn_turf)
- C.fire()
diff --git a/massmeta/code/datums/status_effects/neutral.dm b/massmeta/code/datums/status_effects/neutral.dm
deleted file mode 100644
index c6d6ec59a0f4a..0000000000000
--- a/massmeta/code/datums/status_effects/neutral.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/datum/status_effect/tagalong //applied to darkspawns while they accompany someone //yogs start: darkspawn
- id = "tagalong"
- duration = 3000
- tick_interval = 1 //as fast as possible
- alert_type = /atom/movable/screen/alert/status_effect/tagalong
- var/mob/living/shadowing
- var/turf/cached_location //we store this so if the mob is somehow gibbed we aren't put into nullspace
-
-/datum/status_effect/tagalong/on_creation(mob/living/owner, mob/living/tag)
- . = ..()
- if(!.)
- return
- shadowing = tag
-
-/datum/status_effect/tagalong/on_remove()
- if(owner.loc == shadowing)
- owner.forceMove(cached_location ? cached_location : get_turf(owner))
- shadowing.visible_message("[owner] breaks away from [shadowing]'s shadow!", \
- "You feel a sense of freezing cold pass through you!")
- to_chat(owner, "You break away from [shadowing].")
- playsound(owner, 'massmeta/sounds/magic/devour_will_form.ogg', 50, TRUE)
- owner.setDir(SOUTH)
-
-//tick instead of process
-/datum/status_effect/tagalong/tick(seconds_between_ticks)
- if(!shadowing)
- owner.forceMove(cached_location)
- qdel(src)
- return
- cached_location = get_turf(shadowing)
- if(cached_location.get_lumcount() < DARKSPAWN_DIM_LIGHT)
- owner.forceMove(cached_location)
- shadowing.visible_message("[owner] suddenly appears from the dark!")
- to_chat(owner, "You are forced out of [shadowing]'s shadow!")
- owner.Knockdown(30)
- qdel(src)
- var/obj/item/I = owner.get_active_held_item()
- if(I)
- to_chat(owner, "Equipping an item forces you out!")
- if(istype(I, /obj/item/dark_bead))
- to_chat(owner, "[I] crackles with feedback, briefly disorienting you!")
- owner.Stun(5) //short delay so they can't click as soon as they're out
- qdel(src)
-
-/atom/movable/screen/alert/status_effect/agalong
- name = "Tagalong"
- desc = "You are accompanying TARGET_NAME. Use the Tagalong ability to break away at any time."
- icon_state = "shadow_mend"
-
-/atom/movable/screen/alert/status_effect/tagalong/MouseEntered()
- var/datum/status_effect/tagalong/tagalong = attached_effect
- desc = replacetext(desc, "TARGET_NAME", tagalong.shadowing.real_name)
- ..()
- desc = initial(desc) //yogs end
diff --git a/massmeta/code/modules/actionspeed/modifiers/status_effects.dm b/massmeta/code/modules/actionspeed/modifiers/status_effects.dm
deleted file mode 100644
index d07e81a6d9ca1..0000000000000
--- a/massmeta/code/modules/actionspeed/modifiers/status_effects.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/datum/actionspeed_modifier/time_dilation
- multiplicative_slowdown = -0.5
diff --git a/massmeta/code/modules/antagonists/darkspawn/crawling_shadows.dm b/massmeta/code/modules/antagonists/darkspawn/crawling_shadows.dm
deleted file mode 100644
index 8a818f224f8f9..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/crawling_shadows.dm
+++ /dev/null
@@ -1,141 +0,0 @@
-/mob/living/simple_animal/hostile/crawling_shadows
- name = "crawling shadows"
- desc = "A formless mass of blackness with two huge, clawed hands and piercing white eyes."
- icon = 'icons/effects/effects.dmi' //Placeholder sprite
- icon_state = "blank_dspawn"
- icon_living = "blank_dspawn"
- response_help_continuous = "backs away from"
- response_help_simple = "backs away from"
- response_disarm_continuous = "shoves away"
- response_disarm_simple = "shove away"
- response_harm_continuous = "flails at"
- response_harm_simple = "flail at"
- speed = 0
- maxHealth = 125
- health = 125
-
- lighting_cutoff_red = 20
- lighting_cutoff_green = 10
- lighting_cutoff_blue = 40
-
- sight = SEE_MOBS
-
- harm_intent_damage = 5
- obj_damage = 50
- melee_damage_lower = 5 //it has a built in stun if you want to kill someone kill them like a man
- melee_damage_upper = 5
- attack_verb_continuous = "claws"
- attack_verb_simple = "claw"
- attack_sound = 'sound/magic/demon_attack1.ogg'
- speak_emote = list("whispers")
-
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = INFINITY
-
- movement_type = FLYING
- pressure_resistance = INFINITY
- see_in_dark = 8
- see_invisible = SEE_INVISIBLE_MINIMUM
- gold_core_spawnable = FALSE
-
- del_on_death = TRUE
-
- var/move_count = 0 //For spooky sound effects
- var/knocking_out = FALSE
- var/mob/living/darkspawn_mob
-
-/mob/living/simple_animal/hostile/crawling_shadows/New()
- ..()
- addtimer(CALLBACK(src, PROC_REF(check_darkspawn)), 1)
- ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
-
-/mob/living/simple_animal/hostile/crawling_shadows/Destroy()
- if(darkspawn_mob && mind)
- visible_message(span_warning("[src] transforms into a humanoid figure!"), span_warning("You return to your normal form."))
- playsound(src, 'massmeta/sounds/magic/devour_will_end.ogg', 50, 1)
- if(mind)
- mind.transfer_to(darkspawn_mob)
- darkspawn_mob.forceMove(get_turf(src))
- darkspawn_mob.status_flags &= ~GODMODE
- return ..()
-
-/mob/living/simple_animal/hostile/crawling_shadows/Move()
- move_count++
- if(move_count >= 5)
- playsound(src, "crawling_shadows_walk", 25, 0)
- move_count = 0
- ..()
-
-/mob/living/simple_animal/hostile/crawling_shadows/Life()
- ..()
- var/turf/T = get_turf(src)
- var/lums = T.get_lumcount()
- if(lums < DARKSPAWN_BRIGHT_LIGHT)
- invisibility = INVISIBILITY_OBSERVER //Invisible in complete darkness
- speed = -1 //Faster, too
- alpha = 255
- else
- invisibility = initial(invisibility)
- speed = 0
- alpha = min(lums * 60, 255) //Slowly becomes more visible in brighter light
-
-/mob/living/simple_animal/hostile/crawling_shadows/death(gibbed)
- if(darkspawn_mob)
- mind.transfer_to(darkspawn_mob)
- ..(gibbed)
-
-/mob/living/simple_animal/hostile/crawling_shadows/proc/check_darkspawn()
- if(!darkspawn_mob)
- qdel(src)
- return
- darkspawn_mob.forceMove(src)
- darkspawn_mob.status_flags |= GODMODE
- darkspawn_mob.mind.transfer_to(src)
- to_chat(src, span_warning("This will last for around a minute."))
- var/datum/action/innate/darkspawn/end_shadows/E = new
- E.Grant(src)
- QDEL_IN(src, 600)
-
-/mob/living/simple_animal/hostile/crawling_shadows/AttackingTarget()
- if(ishuman(target) && !knocking_out)
- var/mob/living/carbon/human/H = target
- if(H.stat)
- return ..()
- knocking_out = TRUE
- visible_message(span_warning("[src] pick up [H] and dangle \him in the air!"), span_notice("You pluck [H] from the ground..."))
- to_chat(H, span_userdanger("[src] grab you and dangle you in the air!"))
- H.Stun(30)
- H.pixel_y += 4
- if(!do_after(src, 1 SECONDS, target))
- H.pixel_y -= 4
- knocking_out = FALSE
- return
- visible_message(span_warning("[src] gently press a hand against [H]'s face, and \he falls limp..."), span_notice("You quietly incapacitate [H]."))
- H.pixel_y -= 4
- to_chat(H, span_userdanger("[src] press a hand to your face, and docility comes over you..."))
- H.Paralyze(60)
- knocking_out = FALSE
- return TRUE
- else if(istype(target, /obj/machinery/door))
- forceMove(get_turf(target))
- visible_message(span_warning("Shadows creep through [target]..."), span_notice("You slip through [target]."))
- return
- ..()
-
-
-/datum/action/innate/darkspawn/end_shadows
- name = "End Crawling Shadows"
- id = "end_shadows"
- desc = "Reverts you to your humanoid form."
- button_icon_state = "crawling_shadows"
- blacklisted = TRUE
-
-/datum/action/innate/darkspawn/end_shadows/Activate()
- qdel(owner) //edgi
- qdel(src)
-
-/datum/action/innate/darkspawn/end_shadows/IsAvailable(feedback = FALSE)
- if(istype(owner, /mob/living/simple_animal/hostile/crawling_shadows))
- return TRUE
- return FALSE
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn.dm
deleted file mode 100644
index 64bf4db6d7128..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn.dm
+++ /dev/null
@@ -1,400 +0,0 @@
-#define MUNDANE 0
-#define DIVULGED 1
-#define PROGENITOR 2
-
-//aka Shadowlings/umbrages/whatever
-/datum/antagonist/darkspawn
- name = "Darkspawn"
- roundend_category = "darkspawn"
- antagpanel_category = "Darkspawn"
- job_rank = ROLE_DARKSPAWN
- hud_icon = 'massmeta/icons/mob/darkspawn_hud.dmi'
- antag_hud_name = "darkspawn"
- var/darkspawn_state = MUNDANE //0 for normal crew, 1 for divulged, and 2 for progenitor
- antag_moodlet = /datum/mood_event/sling
-
- //Psi variables
- var/psi = 100 //Psi is the resource used for darkspawn powers
- var/psi_cap = 100 //Max Psi by default
- var/psi_regen = 20 //How much Psi will regenerate after using an ability
- var/psi_regen_delay = 5 //How many ticks need to pass before Psi regenerates
- var/psi_regen_ticks = 0 //When this hits 0, regenerate Psi and return to psi_regen_delay
-
- //Lucidity variables
- var/lucidity = 3 //Lucidity is used to buy abilities and is gained by using Devour Will
- var/lucidity_drained = 0 //How much lucidity has been drained from unique players
-
- //Ability and upgrade variables
- var/list/abilities = list() //An associative list ("id" = ability datum) containing the abilities the darkspawn has
- var/list/upgrades = list() //An associative list ("id" = null or TRUE) containing the passive upgrades the darkspawn has
-
-
-// Antagonist datum things like assignment //
-
-/datum/antagonist/darkspawn/on_gain()
- owner.special_role = "darkspawn"
- owner.current.hud_used.psi_counter.invisibility = 0
- update_psi_hud()
- add_ability("divulge")
- addtimer(CALLBACK(src, PROC_REF(begin_force_divulge)), 23 MINUTES) //this won't trigger if they've divulged when the proc runs
- START_PROCESSING(SSprocessing, src)
- var/datum/objective/darkspawn/O = new
- objectives += O
- O.update_explanation_text()
- owner.announce_objectives()
- return ..()
-
-/datum/antagonist/darkspawn/on_removal()
- owner.special_role = null
- adjust_darkspawn_hud(FALSE)
- owner.current.hud_used.psi_counter.invisibility = initial(owner.current.hud_used.psi_counter.invisibility)
- owner.current.hud_used.psi_counter.maptext = ""
- STOP_PROCESSING(SSprocessing, src)
- return ..()
-
-/datum/antagonist/darkspawn/apply_innate_effects(mob/living/mob_override)
- var/mob/living/current_mob = mob_override || owner.current
- handle_clown_mutation(current_mob, mob_override ? null : "Our powers allow us to overcome our clownish nature, allowing us to wield weapons with impunity.")
- adjust_darkspawn_hud(TRUE)
- current_mob.grant_language(/datum/language/darkspawn)
- add_team_hud(current_mob)
-
-/datum/antagonist/darkspawn/remove_innate_effects(mob/living/mob_override)
- var/mob/living/current_mob = mob_override || owner.current
- handle_clown_mutation(current_mob, removing = FALSE)
- adjust_darkspawn_hud(FALSE)
- current_mob.remove_language(/datum/language/darkspawn)
-
-/datum/antagonist/darkspawn/add_team_hud(mob/target)
- QDEL_NULL(team_hud_ref)
-
- team_hud_ref = WEAKREF(target.add_alt_appearance(
- /datum/atom_hud/alternate_appearance/basic/has_antagonist,
- "antag_team_hud_[REF(src)]",
- image(hud_icon, target, antag_hud_name),
- ))
-
- var/datum/atom_hud/alternate_appearance/basic/has_antagonist/hud = team_hud_ref.resolve()
-
- var/list/mob/living/mob_list = list()
- for(var/datum/mind/darkspawn as anything in get_antag_minds(/datum/antagonist/darkspawn))
- mob_list += darkspawn.current
-
- for(var/datum/mind/veil as anything in get_antag_minds(/datum/antagonist/veil))
- mob_list += veil.current
-
- for (var/datum/atom_hud/alternate_appearance/basic/has_antagonist/antag_hud as anything in GLOB.has_antagonist_huds)
- if(!(antag_hud.target in mob_list))
- continue
- antag_hud.show_to(target)
- hud.show_to(antag_hud.target)
-
-//Round end stuff
-/datum/antagonist/darkspawn/proc/check_darkspawn_death()
- for(var/DM in get_antag_minds(/datum/antagonist/darkspawn))
- var/datum/mind/dark_mind = DM
- if(istype(dark_mind))
- if((dark_mind) && (dark_mind.current.stat != DEAD) && ishuman(dark_mind.current))
- return FALSE
- return TRUE
-
-/datum/antagonist/darkspawn/roundend_report()
- return "[owner ? printplayer(owner) : "Unnamed Darkspawn"]"
-
-/datum/antagonist/darkspawn/roundend_report_header()
- if(GLOB.sacrament_done)
- return "The darkspawn have completed the Sacrament!
"
- else if(!GLOB.sacrament_done && check_darkspawn_death())
- return "The darkspawn have been killed by the crew!
"
- else if(!GLOB.sacrament_done && SSshuttle.emergency.mode >= SHUTTLE_ESCAPE)
- return "The crew escaped the station before the darkspawn could complete the Sacrament!
"
- else
- return "The darkspawn have failed!
"
-
-//Admin panel stuff
-
-/datum/antagonist/darkspawn/antag_panel_data()
- . = "Abilities:
"
- for(var/V in abilities)
- var/datum/action/innate/darkspawn/D = has_ability(V)
- if(D && istype(D))
- . += "[D.name] ([D.id])
"
- . += "
Upgrades:
"
- for(var/V in upgrades)
- . += "[V]
"
-
-/datum/antagonist/darkspawn/get_admin_commands()
- . = ..()
- .["Give Ability"] = CALLBACK(src,PROC_REF(admin_give_ability))
- .["Take Ability"] = CALLBACK(src,PROC_REF(admin_take_ability))
- if(darkspawn_state == MUNDANE)
- .["Divulge"] = CALLBACK(src, PROC_REF(divulge))
- .["Force-Divulge (Obvious)"] = CALLBACK(src, PROC_REF(force_divulge))
- else if(darkspawn_state == DIVULGED)
- .["Give Upgrade"] = CALLBACK(src, PROC_REF(admin_give_upgrade))
- .["[psi]/[psi_cap] Psi"] = CALLBACK(src, PROC_REF(admin_edit_psi))
- .["[lucidity] Lucidity"] = CALLBACK(src, PROC_REF(admin_edit_lucidity))
- .["[lucidity_drained] / [GLOB.required_succs] Unique Lucidity"] = CALLBACK(src, PROC_REF(admin_edit_lucidity_drained))
- .["Sacrament (ENDS THE ROUND)"] = CALLBACK(src, PROC_REF(sacrament))
-
-/datum/antagonist/darkspawn/proc/admin_give_ability(mob/admin)
- var/id = stripped_input(admin, "Enter an ability ID, for \"all\" to give all of them.", "Give Ability")
- if(!id)
- return
- if(has_ability(id))
- to_chat(admin, span_warning("[owner.current] already has this ability!"))
- return
- if(id != "all")
- add_ability(id)
- to_chat(admin, span_notice("Gave [owner.current] the ability \"[id]\"."))
- else
- for(var/V in subtypesof(/datum/action/innate/darkspawn))
- var/datum/action/innate/darkspawn/D = V
- if(!has_ability(initial(D.id)) && !initial(D.blacklisted))
- add_ability(initial(D.id))
- to_chat(admin, span_notice("Gave [owner.current] all abilities."))
-
-/datum/antagonist/darkspawn/proc/admin_take_ability(mob/admin)
- var/id = stripped_input(admin, "Enter an ability ID.", "Take Ability")
- if(!id)
- return
- if(!has_ability(id))
- to_chat(admin, span_warning("[owner.current] does not have this ability!"))
- return
- remove_ability(id)
- to_chat(admin, span_danger("Took from [owner.current] the ability \"[id]\"."))
-
-/datum/antagonist/darkspawn/proc/admin_give_upgrade(mob/admin)
- var/id = stripped_input(admin, "Enter an upgrade ID, for \"all\" to give all of them.", "Give Upgrade")
- if(!id)
- return
- if(has_upgrade(id))
- to_chat(admin, span_warning("[owner.current] already has this upgrade!"))
- return
- if(id != "all")
- add_upgrade(id)
- to_chat(admin, span_notice("Gave [owner.current] the upgrade \"[id]\"."))
- else
- for(var/V in subtypesof(/datum/darkspawn_upgrade))
- var/datum/darkspawn_upgrade/D = V
- if(!has_upgrade(initial(D.id)))
- add_upgrade(initial(D.id))
- to_chat(admin, span_notice("Gave [owner.current] all upgrades."))
-
-/datum/antagonist/darkspawn/proc/admin_edit_psi(mob/admin)
- var/new_psi = input(admin, "Enter a new psi amount. (Current: [psi]/[psi_cap])", "Change Psi", psi) as null|num
- if(!new_psi)
- return
- new_psi = clamp(new_psi, 0, psi_cap)
- psi = new_psi
-
-/datum/antagonist/darkspawn/proc/admin_edit_lucidity(mob/admin)
- var/newcidity = input(admin, "Enter a new lucidity amount. (Current: [lucidity])", "Change Lucidity", lucidity) as null|num
- if(!newcidity)
- return
- newcidity = max(0, newcidity)
- lucidity = newcidity
-
-/datum/antagonist/darkspawn/proc/admin_edit_lucidity_drained(mob/admin)
- var/newcidity = input(admin, "Enter a new lucidity amount. (Current: [lucidity_drained])", "Change Lucidity Drained", lucidity_drained) as null|num
- if(!newcidity)
- return
- newcidity = max(0, newcidity)
- lucidity_drained = newcidity
-
-/datum/antagonist/darkspawn/greet()
- to_chat(owner.current, "You are a darkspawn!")
- to_chat(owner.current, "Append :w or .w before your message to silently speak with any other darkspawn.")
- to_chat(owner.current, "When you're ready, retreat to a hidden location and Divulge to shed your human skin.")
- to_chat(owner.current, span_boldwarning("If you do not do this within twenty five minutes, this will happen involuntarily. Prepare quickly."))
- to_chat(owner.current, "Remember that this will make you die in the light and heal in the dark - keep to the shadows.")
- owner.current.playsound_local(get_turf(owner.current), 'massmeta/sounds/ambience/antag/darkspawn.ogg', 50, FALSE)
-
-/datum/objective/darkspawn
- explanation_text = "Become lucid and perform the Sacrament."
-
-/datum/objective/darkspawn/update_explanation_text()
- explanation_text = "Become lucid and perform the Sacrament. You will need to devour [GLOB.required_succs] different people's wills and purchase all passive upgrades to do so."
-
-/datum/objective/darkspawn/check_completion()
- if(..())
- return TRUE
- return (GLOB.sacrament_done)
-
-/datum/antagonist/darkspawn/proc/adjust_darkspawn_hud(add_hud)
- return
-
-// Darkspawn-related things like Psi //
-
-/datum/antagonist/darkspawn/process(seconds_per_tick) //This is here since it controls most of the Psi stuff
- psi = min(psi, psi_cap)
- if(psi != psi_cap)
- psi_regen_ticks--
- if(!psi_regen_ticks)
- regenerate_psi()
- update_psi_hud()
-
-/datum/antagonist/darkspawn/proc/has_psi(amt)
- return psi >= amt
-
-/datum/antagonist/darkspawn/proc/use_psi(amt)
- if(!has_psi(amt))
- return
- psi_regen_ticks = psi_regen_delay
- psi -= amt
- psi = round(psi, 0.2)
- update_psi_hud()
- return TRUE
-
-/datum/antagonist/darkspawn/proc/regenerate_psi()
- psi = min(psi + 20, psi_cap)
- psi_regen_ticks = psi_regen_delay
- return TRUE
-
-/datum/antagonist/darkspawn/proc/update_psi_hud()
- if(!owner.current || !owner.current.hud_used)
- return
- var/atom/movable/screen/counter = owner.current.hud_used.psi_counter
- counter.invisibility = 0
- counter.maptext = "
[psi]
"
-
-/datum/antagonist/darkspawn/proc/regain_abilities()
- for(var/A in abilities)
- var/datum/action/innate/darkspawn/ability = abilities[A]
- if(ability)
- ability.Remove(ability.owner)
- ability.Grant(owner.current)
-
-/datum/antagonist/darkspawn/proc/has_ability(id)
- if(isnull(abilities[id]))
- return
- return abilities[id]
-
-/datum/antagonist/darkspawn/proc/add_ability(id, silent, no_cost)
- if(has_ability(id))
- return
- for(var/V in subtypesof(/datum/action/innate/darkspawn))
- var/datum/action/innate/darkspawn/D = V
- if(initial(D.id) == id)
- var/datum/action/innate/darkspawn/action = new D
- action.Grant(owner.current)
- action.darkspawn = src
- abilities[id] = action
- if(!silent)
- to_chat(owner.current, span_velvet("You have learned the [action.name] ability."))
- if(!no_cost)
- lucidity = max(0, lucidity - action.lucidity_price)
- return TRUE
-
-/datum/antagonist/darkspawn/proc/remove_ability(id, silent)
- if(!has_ability(id))
- return
- var/datum/action/innate/darkspawn/D = abilities[id]
- if(!silent)
- to_chat(owner.current, span_velvet("You have lost the [D.name] ability."))
- D.Remove(owner.current)
- abilities -= D
- QDEL_NULL(D)
- return TRUE
-
-/datum/antagonist/darkspawn/proc/has_upgrade(id)
- return upgrades[id]
-
-/datum/antagonist/darkspawn/proc/add_upgrade(id, silent, no_cost)
- if(has_upgrade(id))
- return
- for(var/V in subtypesof(/datum/darkspawn_upgrade))
- var/datum/darkspawn_upgrade/_U = V
- if(initial(_U.id) == id)
- var/datum/darkspawn_upgrade/U = new _U(src)
- upgrades[id] = TRUE
- if(!silent)
- to_chat(owner.current, "You have adapted the \"[U.name]\" upgrade.")
- if(!no_cost)
- lucidity = max(0, lucidity - initial(U.lucidity_price))
- U.unlock()
-
-/datum/antagonist/darkspawn/proc/begin_force_divulge()
- if(darkspawn_state != MUNDANE)
- return
- to_chat(owner.current, span_userdanger("You feel the skin you're wearing crackling like paper - you will forcefully divulge soon! Get somewhere hidden and dark!"))
- owner.current.playsound_local(owner.current, 'massmeta/sounds/magic/divulge_01.ogg', 50, FALSE, pressure_affected = FALSE)
- addtimer(CALLBACK(src, PROC_REF(force_divulge)), 1200)
-
-/datum/antagonist/darkspawn/proc/force_divulge()
- if(darkspawn_state != MUNDANE)
- return
- var/mob/living/carbon/C = owner.current
- if(C && !ishuman(C))
- C.humanize()
- var/mob/living/carbon/human/H = owner.current
- if(!H)
- owner.current.gib(TRUE)
- H.visible_message(span_boldwarning("[H]'s skin begins to slough off in sheets!"), \
- span_userdanger("You can't maintain your disguise any more! It begins sloughing off!"))
- playsound(H, 'massmeta/sounds/creatures/darkspawn_force_divulge.ogg', 50, FALSE)
- H.do_jitter_animation(1000)
- var/processed_message = span_velvet("\[Mindlink\] [H.real_name] has not divulged in time and is now forcefully divulging.")
- for(var/mob/M in GLOB.player_list)
- if(M.stat != DEAD && isdarkspawn(M))
- to_chat(M, processed_message)
- deadchat_broadcast(processed_message, null, H)
- addtimer(CALLBACK(src, PROC_REF(divulge)), 25)
- addtimer(CALLBACK(TYPE_PROC_REF(/atom, visible_message), H, span_boldwarning("[H]'s skin sloughs off, revealing black flesh covered in symbols!"), \
- span_userdanger("You have forcefully divulged!")), 25)
-
-/datum/antagonist/darkspawn/proc/divulge()
- if(darkspawn_state >= DIVULGED)
- return
- var/mob/living/carbon/human/user = owner.current
- to_chat(user, "Your mind has expanded. The Psi Web is now available. Avoid the light. Keep to the shadows. Your time will come.")
- user.fully_heal()
- user.set_species(/datum/species/darkspawn)
- show_to_ghosts = TRUE
- add_ability("psi_web", TRUE)
- add_ability("sacrament", TRUE)
- add_ability("devour_will", TRUE)
- add_ability("pass", TRUE)
- remove_ability("divulge", TRUE)
- darkspawn_state = DIVULGED
-
-/datum/antagonist/darkspawn/proc/sacrament()
- var/mob/living/carbon/human/user = owner.current
- if(SSsecurity_level != SEC_LEVEL_DELTA)
- SSsecurity_level.set_level(SEC_LEVEL_DELTA)
- sound_to_playing_players('sound/machines/alarm.ogg')
- addtimer(CALLBACK(src, PROC_REF(sacrament_shuttle_call)), 50)
- for(var/V in abilities)
- remove_ability(abilities[V], TRUE)
- for(var/datum/action/innate/darkspawn/leftover_ability in user.actions)
- leftover_ability.Remove(user)
- QDEL_NULL(leftover_ability)
- // Spawn the cosmic progenitor
- var/mob/living/simple_animal/hostile/darkspawn_progenitor/progenitor = new(get_turf(user))
- user.status_flags |= GODMODE
- user.mind.transfer_to(progenitor)
- var/datum/action/cooldown/spell/pointed/progenitor_curse/curse = new ()
- curse.Grant(progenitor)
- sound_to_playing_players('massmeta/sounds/magic/sacrament_complete.ogg', 50, FALSE, pressure_affected = FALSE)
- psi = 9999
- psi_cap = 9999
- psi_regen = 9999
- psi_regen_delay = 1
- GLOB.sacrament_done = TRUE
- darkspawn_state = PROGENITOR
- QDEL_IN(user, 5)
-
-/datum/antagonist/darkspawn/proc/sacrament_shuttle_call()
- SSshuttle.emergency.request(null, 0, null, FALSE, 0.1)
-
-/datum/antagonist/darkspawn/get_preview_icon()
- var/icon/darkspawn_icon = icon('massmeta/icons/mob/darkspawn_progenitor.dmi', "darkspawn_progenitor")
-
- darkspawn_icon.Scale(ANTAGONIST_PREVIEW_ICON_SIZE, ANTAGONIST_PREVIEW_ICON_SIZE)
-
- return darkspawn_icon
-
-
-#undef MUNDANE
-#undef DIVULGED
-#undef PROGENITOR
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/__psi_web.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/__psi_web.dm
deleted file mode 100644
index 6760c188cb6b0..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/__psi_web.dm
+++ /dev/null
@@ -1,99 +0,0 @@
-//Used to access the Psi Web to buy abilities.
-//Accesses the Psi Web, which darkspawn use to purchase abilities using lucidity. Lucidity is drained from people using the Devour Will ability.
-/datum/action/innate/darkspawn/psi_web
- name = "Psi Web"
- id = "psi_web"
- desc = "Access the Mindlink directly to unlock and upgrade your supernatural powers."
- button_icon_state = "psi_web"
- check_flags = AB_CHECK_CONSCIOUS
- blacklisted = TRUE
- psi_cost = 0
- var/datum/psi_web/psi_datum
-
-/datum/action/innate/darkspawn/psi_web/New()
- . = ..()
- if(!psi_datum)
- psi_datum = new /datum/psi_web()
-
-/datum/action/innate/darkspawn/psi_web/Grant(mob/living/our_mob)
- . = ..()
- if(our_mob.mind.has_antag_datum(/datum/antagonist/darkspawn))
- psi_datum.darkspawn = our_mob.mind.has_antag_datum(/datum/antagonist/darkspawn)
-
-/datum/action/innate/darkspawn/psi_web/Activate()
- to_chat(usr, "You retreat inwards and touch the Mindlink...")
- if(!psi_datum.darkspawn && src.darkspawn)
- psi_datum.darkspawn = src.darkspawn
- psi_datum.ui_interact(owner)
- return TRUE
-
-/datum/psi_web
- var/name = "Psi Web"
- var/datum/antagonist/darkspawn/darkspawn
-
-/datum/psi_web/ui_state(mob/user)
- return GLOB.always_state
-
-/datum/psi_web/ui_status(mob/user, datum/ui_state/state)
- if(!darkspawn)
- return UI_CLOSE
- return UI_INTERACTIVE
-
-/datum/psi_web/ui_interact(mob/user, datum/tgui/ui)
- ui = SStgui.try_update_ui(user, src, ui)
- if(!ui)
- ui = new(user, src, "PsiWeb", name)
- ui.open()
-
-/datum/psi_web/ui_data(mob/user)
- var/list/data = list()
-
- data["lucidity"] = "[darkspawn.lucidity] | [darkspawn.lucidity_drained] / 20 unique drained total"
-
- var/list/abilities = list()
- var/list/upgrades = list()
-
- for(var/path in subtypesof(/datum/action/innate/darkspawn))
- var/datum/action/innate/darkspawn/ability = path
-
- if(initial(ability.blacklisted))
- continue
-
- var/list/AL = list() //This is mostly copy-pasted from the cellular emporium, but it should be fine regardless
- AL["name"] = initial(ability.name)
- AL["id"] = initial(ability.id)
- AL["desc"] = initial(ability.desc)
- AL["psi_cost"] = "[initial(ability.psi_cost)][initial(ability.psi_addendum)]"
- AL["lucidity_cost"] = initial(ability.lucidity_price)
- AL["owned"] = darkspawn.has_ability(initial(ability.id))
- AL["can_purchase"] = !AL["owned"] && darkspawn.lucidity >= initial(ability.lucidity_price)
-
- abilities += list(AL)
-
- data["abilities"] = abilities
-
- for(var/path in subtypesof(/datum/darkspawn_upgrade))
- var/datum/darkspawn_upgrade/upgrade = path
-
- var/list/DE = list()
- DE["name"] = initial(upgrade.name)
- DE["id"] = initial(upgrade.id)
- DE["desc"] = initial(upgrade.desc)
- DE["lucidity_cost"] = initial(upgrade.lucidity_price)
- DE["owned"] = darkspawn.has_upgrade(initial(upgrade.id))
- DE["can_purchase"] = !DE["owned"] && darkspawn.lucidity >= initial(upgrade.lucidity_price)
-
- upgrades += list(DE)
-
- data["upgrades"] = upgrades
-
- return data
-
-/datum/psi_web/ui_act(action, params)
- if(..())
- return
- switch(action)
- if("unlock")
- darkspawn.add_ability(params["id"])
- if("upgrade")
- darkspawn.add_upgrade(params["id"])
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/_divulge.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/_divulge.dm
deleted file mode 100644
index 598ec9499bf1e..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/_divulge.dm
+++ /dev/null
@@ -1,98 +0,0 @@
-//A channeled ability that turns the darkspawn into their main form.
-/datum/action/innate/darkspawn/divulge
- name = "Divulge"
- id = "divulge"
- desc = "Sheds your human disguise. This is obvious and so should be done in a secluded area. You cannot reverse this."
- button_icon_state = "divulge"
- check_flags = AB_CHECK_INCAPACITATED | AB_CHECK_CONSCIOUS | AB_CHECK_LYING
- blacklisted = TRUE
-
-/datum/action/innate/darkspawn/divulge/Activate()
- set waitfor = FALSE
- var/mob/living/carbon/human/user = usr
- var/turf/spot = get_turf(user)
- if(!ishuman(user))
- to_chat(user, span_warning("You need to be human-er to do that!"))
- return
- if(isethereal(user))
- user.set_light(0)
- if(spot.get_lumcount() > DARKSPAWN_DIM_LIGHT)
- to_chat(user, span_warning("You are only able to divulge in darkness!"))
- return
- var/answer = tgui_alert(user, "You are ready to divulge. Are you sure?", "Divulge", list("Yes", "No"))
- if(answer == "No")
- return
- in_use = TRUE
- if(istype(user.dna.species, /datum/species/pod))
- to_chat(user, span_notice("Your disguise is stabilized by the divulgance..."))
- user.reagents.add_reagent(/datum/reagent/medicine/salbutamol,20)
- if(istype(user.dna.species, /datum/species/plasmaman))
- to_chat(user, span_notice("Your bones harden to protect you from the atmosphere..."))
- user.set_species(/datum/species/skeleton)
- user.visible_message("[user] flaps their wings.", span_velvet("You begin creating a psychic barrier around yourself..."))
- if(!do_after(user, 3 SECONDS, user))
- in_use = FALSE
- return
- var/image/alert_overlay = image('massmeta/icons/mob/actions/actions_darkspawn.dmi', "divulge")
- notify_ghosts(
- "Darkspawn [user.real_name] has begun divulging at [get_area(user)]! ",
- source = user,
- ghost_sound = 'massmeta/sounds/magic/devour_will_victim.ogg',
- alert_overlay = alert_overlay,
- //action = NOTIFY_ORBIT
- )
- user.visible_message(span_warning("A vortex of violet energies surrounds [user]!"), span_velvet("Your barrier will keep you shielded to a point.."))
- user.visible_message(span_danger("[user] slowly rises into the air, their belongings falling away, and begins to shimmer..."), \
- "You begin the removal of your human disguise. You will be completely vulnerable during this time.")
- user.setDir(SOUTH)
- for(var/obj/item/I in user)
- user.dropItemToGround(I)
- for(var/turf/T in RANGE_TURFS(1, user))
- new/obj/structure/psionic_barrier(T, 500)
- for(var/stage in 1 to 3)
- switch(stage)
- if(1)
- user.visible_message(span_userdanger("Vibrations pass through the air. [user]'s eyes begin to glow a deep violet."), \
- span_velvet("Psi floods into your consciousness. You feel your mind growing more powerful... expanding."))
- playsound(user, 'massmeta/sounds/magic/divulge_01.ogg', 30, 0)
- if(2)
- user.visible_message(span_userdanger("Gravity fluctuates. Psychic tendrils extend outward and feel blindly around the area."), \
- span_velvet("Gravity around you fluctuates. You tentatively reach out, feel with your mind."))
- user.Shake(0, 3, 750) //50 loops in a second times 15 seconds = 750 loops
- playsound(user, 'massmeta/sounds/magic/divulge_02.ogg', 40, 0)
- if(3)
- user.visible_message(span_userdanger("Sigils form along [user]'s body. \His skin blackens as \he glows a blinding purple."), \
- span_velvet("Your body begins to warp. Sigils etch themselves upon your flesh."))
- animate(user, color = list(rgb(0, 0, 0), rgb(0, 0, 0), rgb(0, 0, 0), rgb(0, 0, 0)), time = 15 SECONDS) //Produces a slow skin-blackening effect
- playsound(user, 'massmeta/sounds/magic/divulge_03.ogg', 50, 0)
- if(!do_after(user, 15 SECONDS, user))
- user.visible_message(span_warning("[user] falls to the ground!"), span_userdanger("Your transformation was interrupted!"))
- animate(user, color = initial(user.color), pixel_y = initial(user.pixel_y), time = 1 SECONDS)
- in_use = FALSE
- return
- playsound(user, 'massmeta/sounds/magic/divulge_ending.ogg', 50, 0)
- user.visible_message(span_userdanger("[user] rises into the air, crackling with power!"), "Your mind...! can't--- THINK--")
- animate(user, pixel_y = user.pixel_y + 8, time = 6 SECONDS)
- sleep(4.5 SECONDS)
- user.Shake(5, 5, 11 SECONDS)
- for(var/i in 1 to 20)
- to_chat(user, "[pick("I- I- I-", "Mind-", "Sigils-", "Can't think-", "POWER-","TAKE-", "M-M-MOOORE-")]")
- sleep(0.11 SECONDS) //Spooky flavor message spam
- user.visible_message(span_userdanger("A tremendous shockwave emanates from [user]!"), "YOU ARE FREE!!")
- playsound(user, 'massmeta/sounds/magic/divulge_end.ogg', 50, 0)
- animate(user, color = initial(user.color), pixel_y = initial(user.pixel_y), time = 3 SECONDS)
- for(var/mob/living/L in view(7, user))
- if(L == user)
- continue
- L.flash_act(1, 1)
- L.Knockdown(5 SECONDS)
- var/old_name = user.real_name
- darkspawn.divulge()
- var/processed_message = span_velvet("\[Mindlink\] [old_name] has removed their human disguise and is now [user.real_name].")
- for(var/T in GLOB.alive_mob_list)
- var/mob/M = T
- if(is_darkspawn_or_veil(M))
- to_chat(M, processed_message)
- for(var/T in GLOB.dead_mob_list)
- var/mob/M = T
- to_chat(M, "(F) [processed_message]")
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/_sacrament.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/_sacrament.dm
deleted file mode 100644
index 1b7c7868ed7d8..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/_sacrament.dm
+++ /dev/null
@@ -1,91 +0,0 @@
-//Turns the darkspawn into a progenitor.
-/datum/action/innate/darkspawn/sacrament
- name = "Sacrament"
- id = "sacrament"
- desc = "Ascends into a progenitor. Unless someone else has performed the Sacrament, you must have drained lucidity from 15-30 (check your objective) different people for this to work, and purchased all passive upgrades."
- button_icon_state = "sacrament"
- check_flags = AB_CHECK_INCAPACITATED | AB_CHECK_CONSCIOUS
- blacklisted = TRUE //baseline
- var/datum/looping_sound/sacrament/soundloop
-
-/datum/action/innate/darkspawn/sacrament/Activate()
- if(GLOB.sacrament_done)
- darkspawn.sacrament()
- return
- if(!darkspawn || darkspawn.lucidity_drained < GLOB.required_succs)
- to_chat(usr, span_warning("You do not have enough unique lucidity! ([darkspawn.lucidity_drained] / [GLOB.required_succs])"))
- return
- var/list/unpurchased_upgrades = list()
- for(var/V in subtypesof(/datum/darkspawn_upgrade))
- var/datum/darkspawn_upgrade/D = V
- if(!darkspawn.has_upgrade(initial(D.id)))
- unpurchased_upgrades += initial(D.name)
- if(unpurchased_upgrades.len)
- var/upgrade_string = unpurchased_upgrades.Join(", ")
- to_chat(usr, "[span_warning("You have not purchased all passive upgrades! You are missing:")] [span_danger("[upgrade_string].")]")
- return
- if(alert(usr, "The Sacrament is ready! Are you prepared?", name, "Yes", "No") == "No")
- return
- in_use = TRUE
- var/mob/living/carbon/human/user = usr
- user.visible_message(span_warning("[user]'s sigils flare as energy swirls around them..."), span_velvet("You begin creating a psychic barrier around yourself..."))
- playsound(user, 'massmeta/sounds/magic/sacrament_begin.ogg', 50, FALSE)
- if(!do_after(user, 3 SECONDS, user))
- in_use = FALSE
- return
- var/image/alert_overlay = image('massmeta/icons/mob/actions/actions_darkspawn.dmi', "sacrament")
- notify_ghosts(
- "Darkspawn [user.real_name] has begun the Sacrament at [get_area(user)]! ",
- source = user, ghost_sound = 'massmeta/sounds/magic/devour_will_victim.ogg',
- alert_overlay = alert_overlay,
- //action = NOTIFY_ORBIT
- )
- user.visible_message(span_warning("A vortex of violet energies surrounds [user]!"), span_velvet("Your barrier will protect you."))
- user.visible_message(span_danger("[user] suddenly jolts into the air, pulsing with screaming violet light."), \
- "You begin the Sacrament.")
- soundloop = new(GLOB.player_list, TRUE, TRUE)
- for(var/turf/T in RANGE_TURFS(2, user))
- new/obj/structure/psionic_barrier(T, 340)
- for(var/stage in 1 to 2)
- soundloop.stage = stage
- switch(stage)
- if(1)
- user.visible_message(span_userdanger("[user]'s sigils howl out light. Their limbs twist and move, glowing cracks forming across their chitin."), \
- span_velvet("Power... power... flooding through you, the dreams and thoughts of those you've touched whispering in your ears..."))
- for(var/mob/M in GLOB.player_list)
- M.playsound_local(M, 'massmeta/sounds/magic/sacrament_01.ogg', 20, FALSE, pressure_affected = FALSE)
- if(M != user)
- to_chat(M, span_warning("What is that sound...?"))
- if(2)
- user.visible_message(span_userdanger("[user] begins to... grow.."), \
- span_velvet("Yes! Yes! You feel the weak mortal shell coming apart!"))
- for(var/mob/M in GLOB.player_list)
- M.playsound_local(M, 'massmeta/sounds/magic/sacrament_02.ogg', 20, FALSE, pressure_affected = FALSE)
- animate(user, transform = matrix() * 2, time = 15 SECONDS)
- if(!do_after(user, 15 SECONDS, user))
- user.visible_message(span_warning("[user] falls to the ground!"), span_userdanger("Your transformation was interrupted!"))
- animate(user, transform = matrix(), pixel_y = initial(user.pixel_y), time = 3 SECONDS)
- in_use = FALSE
- QDEL_NULL(soundloop)
- return
- for(var/mob/M in GLOB.player_list)
- M.playsound_local(M, 'massmeta/sounds/magic/sacrament_ending.ogg', 75, FALSE, pressure_affected = FALSE)
- soundloop.stage = 3
- user.visible_message(span_userdanger("[user] rises into the air, crackling with power!"), "AND THE WEAK WILL KNOW FEAR--")
- for(var/turf/T in range(7, owner))
- if(prob(25))
- addtimer(CALLBACK(src, PROC_REF(unleashed_psi), T), rand(0.1, 4) SECONDS)
- addtimer(CALLBACK(src, PROC_REF(shatter_lights)), 3.5 SECONDS)
- QDEL_IN(soundloop, 39)
- animate(user, pixel_y = user.pixel_y + 20, time = 4 SECONDS)
- addtimer(CALLBACK(darkspawn, TYPE_PROC_REF(/datum/antagonist/darkspawn, sacrament)), 4 SECONDS)
-
-/datum/action/innate/darkspawn/sacrament/proc/unleashed_psi(turf/T)
- playsound(T, 'massmeta/sounds/magic/divulge_end.ogg', 25, FALSE)
- new/obj/effect/temp_visual/revenant/cracks(T)
-
-/datum/action/innate/darkspawn/sacrament/proc/shatter_lights()
- if(GLOB.sacrament_done)
- return
- for(var/obj/machinery/light/light in SSmachines.processing)
- light.break_light_tube()
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/crawling_shadows.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/crawling_shadows.dm
deleted file mode 100644
index eaaa5113d77b4..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/crawling_shadows.dm
+++ /dev/null
@@ -1,27 +0,0 @@
-/* this shit is fucking buggy
-//Assumes a stealthier form for sixty seconds or until cancelled.
-/datum/action/innate/darkspawn/crawling_shadows
- name = "Crawling Shadows"
- id = "crawling_shadows"
- desc = "Assumes a shadowy form for a minute that can crawl through vents and squeeze through the cracks in doors. You can also knock people out by attacking them."
- button_icon_state = "crawling_shadows"
- check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS
- psi_cost = 60
- lucidity_price = 2 //probably going to replace creep with this
-
-/datum/action/innate/darkspawn/crawling_shadows/IsAvailable(feedback = FALSE)
- var/mob/living/L = owner
- if(L.has_status_effect(STATUS_EFFECT_TAGALONG))
- if(feedback)
- owner.balloon_alert(owner, "not available!")
- return
- return ..()
-
-/datum/action/innate/darkspawn/crawling_shadows/Activate()
- owner.visible_message(span_warning("[owner] falls to the ground and transforms into a shadowy creature!"), "sa iahz sepd zwng\n\
- [span_notice("You assume a stealthier form.")]")
- playsound(owner, 'massmeta/sounds/magic/devour_will_end.ogg', 50, 1)
- var/mob/living/simple_animal/hostile/crawling_shadows/CS = new /mob/living/simple_animal/hostile/crawling_shadows(get_turf(owner))
- CS.darkspawn_mob = owner
- return TRUE
-*/
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/creep.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/creep.dm
deleted file mode 100644
index 3f874537e2107..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/creep.dm
+++ /dev/null
@@ -1,31 +0,0 @@
-//Allows you to move through light unimpeded while active. Drains 5 Psi per second.
-/datum/action/innate/darkspawn/creep
- name = "Creep"
- id = "creep"
- desc = "Grants immunity to lightburn while active. Can be toggled on and off. Drains 5 Psi per second."
- button_icon_state = "creep"
- check_flags = AB_CHECK_CONSCIOUS
- psi_cost = 5
- psi_addendum = " to activate and per second"
- lucidity_price = 2
-
-/datum/action/innate/darkspawn/creep/IsAvailable(feedback = FALSE)
- if(istype(owner, /mob/living/simple_animal/hostile/crawling_shadows))
- return
- return ..()
-
-/datum/action/innate/darkspawn/creep/process()
- var/mob/living/L = owner
- active = L.has_status_effect(STATUS_EFFECT_CREEP)
-
-/datum/action/innate/darkspawn/creep/Activate()
- var/mob/living/L = owner
- owner.visible_message(span_warning("Velvety shadows coalesce around [owner]!"), span_velvet("odeahz
You begin using Psi to shield yourself from lightburn."))
- playsound(owner, 'massmeta/sounds/magic/devour_will_victim.ogg', 50, TRUE)
- L.apply_status_effect(STATUS_EFFECT_CREEP, darkspawn)
-
-/datum/action/innate/darkspawn/creep/Deactivate()
- var/mob/living/L = owner
- to_chat(owner, span_velvet("You release your grip on the shadows."))
- playsound(owner, 'massmeta/sounds/magic/devour_will_end.ogg', 50, TRUE)
- L.remove_status_effect(STATUS_EFFECT_CREEP)
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/demented_outburst.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/demented_outburst.dm
deleted file mode 100644
index 116878639e954..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/demented_outburst.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-//Emits a shockwave that blasts everyone and everything nearby far away. People close to the user are deafened and stunned.
-/datum/action/innate/darkspawn/demented_outburst
- name = "Demented Outburst"
- id = "demented_outburst"
- desc = "Deafens and confuses listeners after a five-second charge period, knocking away everyone nearby. Costs 50 Psi."
- button_icon_state = "demented_outburst"
- check_flags = AB_CHECK_CONSCIOUS
- psi_cost = 50 //big boom = big cost
- lucidity_price = 2
-
-/datum/action/innate/darkspawn/demented_outburst/Activate()
- in_use = TRUE
- owner.visible_message(span_boldwarning("[owner] begins to growl as their chitin hardens..."), "cap...
\
- [span_danger("You begin harnessing your power...")]")
- playsound(owner, 'massmeta/sounds/magic/demented_outburst_charge.ogg', 50, 0)
- addtimer(CALLBACK(src, PROC_REF(outburst), owner), 50)
- addtimer(CALLBACK(src, PROC_REF(reset)), 50)
- return TRUE
-
-/datum/action/innate/darkspawn/demented_outburst/IsAvailable(feedback = FALSE)
- if(istype(owner, /mob/living/simple_animal/hostile/crawling_shadows))
- return
- return ..()
-
-/datum/action/innate/darkspawn/demented_outburst/proc/outburst()
- in_use = FALSE
- if(!owner || owner.stat)
- return
- owner.visible_message(span_userdanger("[owner] lets out a deafening scream!"), "WSWU!
\
- [span_danger("You let out a deafening outburst!")]")
- playsound(owner, 'massmeta/sounds/magic/demented_outburst_scream.ogg', 75, 0)
- var/list/thrown_atoms = list()
- for(var/turf/T in view(5, owner))
- for(var/atom/movable/AM in T)
- thrown_atoms += AM
- for(var/V in thrown_atoms)
- var/atom/movable/AM = V
- if(AM == owner || AM.anchored)
- continue
- var/distance = get_dist(owner, AM)
- var/turf/target = get_edge_target_turf(owner, get_dir(owner, get_step_away(AM, owner)))
- AM.throw_at(target, ((clamp((5 - (clamp(distance - 2, 0, distance))), 3, 5))), 1, owner)
- if(iscarbon(AM))
- var/mob/living/carbon/C = AM
- if(distance <= 1) //you done fucked up now
- C.visible_message(span_warning("The blast sends [C] flying!"), span_userdanger("The force sends you flying!"))
- C.Paralyze(50)
- C.Knockdown(50)
- C.adjustBruteLoss(10)
- C.soundbang_act(1, 5, 15, 5)
- else if(distance <= 3)
- C.visible_message(span_warning("The blast knocks [C] off their feet!"), span_userdanger("The force bowls you over!"))
- C.Paralyze(25)
- C.Knockdown(30)
- C.soundbang_act(1, 3, 5, 0)
- if(iscyborg(AM))
- var/mob/living/silicon/robot/R = AM
- R.visible_message(span_warning("The blast sends [R] flying!"), span_userdanger("The force sends you flying!"))
- R.Paralyze(100) //fuck borgs
- R.soundbang_act(1, 5, 15, 5)
- return TRUE
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/devour_will.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/devour_will.dm
deleted file mode 100644
index c5d03214a1b52..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/devour_will.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-//After a brief charge-up, equips a temporary dark bead that can be used on a human to knock them out and drain their will, making them vulnerable to conversion.
-/datum/action/innate/darkspawn/devour_will
- name = "Devour Will"
- id = "devour_will"
- desc = "Creates a dark bead that can be used on a human to fully recharge Psi, gain one lucidity, and knock them unconscious. The victim will be stunned for the duration of the channel, being interrupted \
- will knock both you and the victim down. Costs 5 Psi."
- button_icon_state = "devour_will"
- check_flags = AB_CHECK_HANDS_BLOCKED | AB_CHECK_INCAPACITATED | AB_CHECK_LYING | AB_CHECK_CONSCIOUS
- psi_cost = 5
- blacklisted = TRUE
- var/list/victims //A list of people we've used the bead on recently; we can't drain them again so soon
- var/last_victim
-
-/datum/action/innate/darkspawn/devour_will/New()
- ..()
- victims = list()
-
-/datum/action/innate/darkspawn/devour_will/IsAvailable(feedback = FALSE)
- if(!owner || istype(owner, /mob/living/simple_animal/hostile/crawling_shadows) ||istype(owner, /mob/living/simple_animal/hostile/darkspawn_progenitor) || !owner.get_empty_held_indexes())
- return
- return ..()
-
-/datum/action/innate/darkspawn/devour_will/Activate()
- owner.visible_message(span_warning("A glowing black orb appears in [owner]'s hand!"), "pwga...iejz
\
- You form a dark bead in your hand.")
- playsound(owner, 'massmeta/sounds/magic/devour_will_form.ogg', 50, 1)
- var/obj/item/dark_bead/B = new
- owner.put_in_hands(B)
- B.linked_ability = src
- return TRUE
-
-/datum/action/innate/darkspawn/devour_will/proc/make_eligible(mob/living/L)
- if(!L || !victims[L])
- return
- victims[L] = FALSE
- to_chat(owner, span_notice("[L] has recovered from their draining and is vulnerable to Devour Will again."))
- return TRUE
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/pass.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/pass.dm
deleted file mode 100644
index 579ba1f42d34c..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/pass.dm
+++ /dev/null
@@ -1,50 +0,0 @@
-//Equips umbral tendrils with many uses.
-/datum/action/innate/darkspawn/pass
- name = "Pass"
- id = "pass"
- desc = "Twists an active arm into tendrils with many important uses. Examine the tendrils to see a list of uses."
- button_icon_state = "pass"
- check_flags = AB_CHECK_HANDS_BLOCKED | AB_CHECK_CONSCIOUS
- blacklisted = TRUE //baseline
-
-/datum/action/innate/darkspawn/pass/IsAvailable(feedback = FALSE)
- if(istype(owner, /mob/living/simple_animal/hostile/crawling_shadows) || istype(owner, /mob/living/simple_animal/hostile/darkspawn_progenitor) || !owner.get_empty_held_indexes() && !active)
- return
- return ..()
-
-/datum/action/innate/darkspawn/pass/process()
- ..()
- active = locate(/obj/item/umbral_tendrils) in owner
- if(darkspawn.upgrades["twin_tendrils"])
- name = "Twinned Pass"
- desc = "Twists one or both of your arms into tendrils with many uses."
-
-/datum/action/innate/darkspawn/pass/Activate()
- var/mob/living/carbon/C = owner
- if(!(C.mobility_flags & MOBILITY_STAND))
- to_chat(owner, span_warning("Stand up first!"))
- return
- var/list/hands_free = owner.get_empty_held_indexes()
- if(!darkspawn.upgrades["twin_tendrils"] || hands_free.len < 2)
- owner.visible_message(span_warning("[owner]'s arm contorts into tentacles!"), "ikna
\
- [span_notice("You transform your arm into umbral tendrils. Examine them to see possible uses.")]")
- playsound(owner, 'massmeta/sounds/magic/pass_create.ogg', 50, 1)
- var/obj/item/umbral_tendrils/T = new(owner, darkspawn)
- owner.put_in_hands(T)
- else
- owner.visible_message(span_warning("[owner]'s arms contort into tentacles!"), "ikna ikna
\
- You transform both arms into umbral tendrils. Examine them to see possible uses.")
- playsound(owner, 'massmeta/sounds/magic/pass_create.ogg', 50, TRUE)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), owner, 'massmeta/sounds/magic/pass_create.ogg', 50, TRUE), 1)
- for(var/i in 1 to 2)
- var/obj/item/umbral_tendrils/T = new(owner, darkspawn)
- owner.put_in_hands(T)
- return TRUE
-
-/datum/action/innate/darkspawn/pass/Deactivate()
- owner.visible_message(span_warning("[owner]'s tentacles transform back!"), "haoo
\
- [span_notice("You dispel the tendrils.")]")
- playsound(owner, 'massmeta/sounds/magic/pass_dispel.ogg', 50, 1)
- for(var/obj/item/umbral_tendrils/T in owner)
- qdel(T)
- return TRUE
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/shadow_dance.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/shadow_dance.dm
deleted file mode 100644
index bd1ff26d9608d..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/shadow_dance.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-//Allows you to move through light unimpeded while active. Drains 5 Psi per second.
-/datum/action/innate/darkspawn/shadow_dance
- name = "Shadow Dance"
- id = "shadowdance"
- desc = "Allows you to avoid projectiles while in darkness. Can be toggled on and off. Drains 5 Psi per second."
- button_icon = 'icons/mob/actions/actions_minor_antag.dmi'
- button_icon_state = "ninja_cloak"
- check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS
- psi_cost = 10
- psi_addendum = " to activate and 5 per second"
- lucidity_price = 2
-
-/datum/action/innate/darkspawn/shadow_dance/IsAvailable(feedback = FALSE)
- if(istype(owner, /mob/living/simple_animal/hostile/crawling_shadows))
- return
- return ..()
-
-/datum/action/innate/darkspawn/shadow_dance/process()
- var/mob/living/L = owner
- active = L.has_status_effect(/datum/status_effect/shadow_dance)
-
-/datum/action/innate/darkspawn/shadow_dance/Activate()
- var/mob/living/L = owner
- playsound(owner, 'massmeta/sounds/magic/devour_will_victim.ogg', 50, TRUE)
- L.apply_status_effect(/datum/status_effect/shadow_dance, darkspawn)
-
-/datum/action/innate/darkspawn/shadow_dance/Deactivate()
- var/mob/living/L = owner
- playsound(owner, 'massmeta/sounds/magic/devour_will_end.ogg', 50, TRUE)
- L.remove_status_effect(/datum/status_effect/shadow_dance)
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/silver_tongue.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/silver_tongue.dm
deleted file mode 100644
index 3275c2ed60e6a..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/silver_tongue.dm
+++ /dev/null
@@ -1,58 +0,0 @@
-//Can be used on a communications console to recall the shuttle. Leaves visible evidence.
-/datum/action/innate/darkspawn/silver_tongue
- name = "Silver Tongue"
- id = "silver_tongue"
- desc = "When used near a communications console, allows you to forcefully transmit a message to Central Command, initiating a shuttle recall. Only usable if the shuttle is inbound. Costs 60 Psi."
- button_icon_state = "silver_tongue"
- check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
- psi_cost = 60
- lucidity_price = 1 //Very niche, so low cost
-
-/datum/action/innate/darkspawn/silver_tongue/IsAvailable(feedback = FALSE)
- if(SSshuttle.emergency.mode != SHUTTLE_CALL)
- return
- return ..()
-
-/datum/action/innate/darkspawn/silver_tongue/Activate()
- in_use = TRUE
- var/obj/machinery/computer/communications/C = locate() in range(1, owner)
- if(!C)
- to_chat(owner, span_warning("There are no communications consoles nearby"))
- return
- if(C.is_operational)
- to_chat(owner, span_warning("[C] is depowered."))
- return
- owner.visible_message(span_warning("[owner] briefly touches [src]'s screen, and the keys begin to move by themselves!"), \
- "[pick("Oknnu. Pda ywlpwej swo hkccaz ej.", "Pda aiancajyu eo kran. Oknnu bkn swopejc ukqn peia.", "We swo knzanaz xu Hws Psk. Whh ckkz jks.")]
\
- [span_velvet("You begin transmitting a recall message to Central Command...")]")
- play_recall_sounds(C)
- if(!do_after(owner, 8 SECONDS, C))
- in_use = FALSE
- return
- if(!C)
- in_use = FALSE
- return
- if(C.is_operational)
- to_chat(owner, span_warning("[C] has lost power."))
- in_use = FALSE
- return
- in_use = FALSE
- SSshuttle.emergency.cancel()
- to_chat(owner, span_velvet("The ruse was a success. The shuttle is on its way back."))
- return TRUE
-
-/datum/action/innate/darkspawn/silver_tongue/proc/play_recall_sounds(obj/machinery/C) //neato sound effects
- set waitfor = FALSE
- for(var/i in 1 to 4)
- sleep(1 SECONDS)
- if(!C || C.is_operational)
- return
- playsound(C, "terminal_type", 50, TRUE)
- if(prob(25))
- playsound(C, 'sound/machines/terminal_alert.ogg', 50, FALSE)
- do_sparks(5, TRUE, get_turf(C))
- playsound(C, 'sound/machines/terminal_prompt.ogg', 50, FALSE)
- sleep(0.5 SECONDS)
- if(!C || C.is_operational)
- return
- playsound(C, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE)
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/simulacrum.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/simulacrum.dm
deleted file mode 100644
index 1f0b71d308868..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/simulacrum.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-//Creates an illusionary copy of the caster that runs in their direction for ten seconds and then vanishes.
-/datum/action/innate/darkspawn/simulacrum
- name = "Simulacrum"
- id = "simulacrum"
- desc = "Creates an illusion that closely resembles you. The illusion will run forward for ten seconds. Costs 20 Psi."
- button_icon_state = "simulacrum"
- check_flags = AB_CHECK_CONSCIOUS
- psi_cost = 20
- lucidity_price = 1
-
-/datum/action/innate/darkspawn/simulacrum/Activate()
- if(isliving(owner.loc))
- var/mob/living/L = owner.loc
- L.visible_message(span_warning("[owner] breaks away from [L]'s shadow!"), \
- span_userdanger("You feel a sense of freezing cold pass through you!"))
- to_chat(owner, span_velvet("zayaera
You create an illusion of yourself."))
- else
- owner.visible_message(span_warning("[owner] splits in two!"), \
- span_velvet("zayaera
You create an illusion of yourself."))
- playsound(owner, 'massmeta/sounds/magic/devour_will_form.ogg', 50, 1)
- var/obj/effect/simulacrum/simulacrum = new(get_turf(owner))
- simulacrum.mimic(owner)
- return TRUE
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/tagalong.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/tagalong.dm
deleted file mode 100644
index 266a88842076c..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/tagalong.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-//Melds with a mob's shadow, allowing the caster to "shadow" (HA) them while they're not in darkness.
-/datum/action/innate/darkspawn/tagalong
- name = "Tagalong"
- id = "tagalong"
- desc = "Melds with a target's shadow, causing you to invisibly follow them. Only works in lit areas, and you will be forced out if you hold any items. Costs 30 Psi."
- button_icon_state = "tagalong"
- check_flags = AB_CHECK_CONSCIOUS
- psi_cost = 30
- psi_addendum = ", but is free to cancel"
- lucidity_price = 2
- var/datum/status_effect/tagalong/tagalong
-
-/datum/action/innate/darkspawn/tagalong/IsAvailable(feedback = FALSE)
- if(istype(owner, /mob/living/simple_animal/hostile/crawling_shadows))
- return
- return ..()
-
-/datum/action/innate/darkspawn/tagalong/process()
- psi_cost = 30 * isnull(tagalong)
-
-/datum/action/innate/darkspawn/tagalong/Activate()
- if(tagalong)
- QDEL_NULL(tagalong)
- return
- if(owner.get_active_held_item() || owner.get_inactive_held_item())
- to_chat(owner, span_warning("Your hands must be empty to accompany someone!"))
- return
- var/list/targets = list()
- var/mob/living/target
- var/turf/T
- for(var/mob/living/L in range(7, owner) - owner)
- T = get_turf(L)
- if(!isdarkspawn(L) && L.stat != DEAD && T.get_lumcount() >= DARKSPAWN_DIM_LIGHT)
- targets += L
- if(!targets.len)
- to_chat(owner, span_warning("There is nobody nearby in any lit areas!"))
- return
- if(targets.len == 1)
- target = targets[1]
- else
- target = input(owner, "Choose a target to accompany.", "Tagalong") as null|anything in targets
- if(!target)
- return
- var/mob/living/L = owner
- tagalong = L.apply_status_effect(STATUS_EFFECT_TAGALONG, target)
- to_chat(owner, "iahz
\
- You slip into [target]'s shadow. This will last five minutes, until canceled, or you are forced out.")
- owner.forceMove(target)
- return TRUE
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/time_dilation.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/time_dilation.dm
deleted file mode 100644
index b4577e6009ee2..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/time_dilation.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-//Greatly speeds up reflexes and recovery, at a massive Psi cost.
-/datum/action/innate/darkspawn/time_dilation
- name = "Time Dilation"
- id = "time_dilation"
- desc = "Greatly increases reaction times and action speed, and provides immunity to slowdown. This lasts for 1 minute. Costs 75 Psi."
- button_icon_state = "time_dilation"
- check_flags = AB_CHECK_CONSCIOUS
- psi_cost = 75
- lucidity_price = 3
-
-/datum/action/innate/darkspawn/time_dilation/IsAvailable(feedback = FALSE)
- if(..() && !istype(owner, /mob/living/simple_animal/hostile/crawling_shadows))
- var/mob/living/L = owner
- return !L.has_status_effect(STATUS_EFFECT_TIME_DILATION)
-
-/datum/action/innate/darkspawn/time_dilation/Activate()
- var/mob/living/L = owner
- L.apply_status_effect(STATUS_EFFECT_TIME_DILATION)
- L.visible_message(span_warning("[L] howls as their body moves at wild speeds!"), \
- span_velvet("ckppw ck bwop
Your sigils howl out light as your body moves at incredible speed!"))
- playsound(L, 'massmeta/sounds/creatures/darkspawn_howl.ogg', 50, TRUE)
- return TRUE
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/veil_mind.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/veil_mind.dm
deleted file mode 100644
index a44b97e10a002..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_abilities/veil_mind.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-//Converts people within three tiles of the caster into veils. Also confuses noneligible targets and stuns silicons.
-/datum/action/innate/darkspawn/veil_mind
- name = "Veil Mind"
- id = "veil_mind"
- desc = "Converts nearby eligible targets into veils. To be eligible, they must be alive and recently drained by Devour Will."
- button_icon_state = "veil_mind"
- check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS
- psi_cost = 60 //since this is only useful when cast directly after a succ it should be pretty expensive
- lucidity_price = 2
-
-/datum/action/innate/darkspawn/veil_mind/Activate()
- var/mob/living/carbon/human/H = owner
- if(!H.can_speak())
- to_chat(H, span_warning("You can't speak!"))
- return
- owner.visible_message(span_warning("[owner]'s sigils flare as they inhale..."), "dawn kqn okjc...
\
- [span_notice("You take a deep breath...")]")
- playsound(owner, 'massmeta/sounds/ambience/antag/veil_mind_gasp.ogg', 25)
- if(!do_after(owner, 1 SECONDS, owner))
- return
- owner.visible_message(span_boldwarning("[owner] lets out a chilling cry!"), "...wjz oanra
\
- [span_notice("You veil the minds of everyone nearby.")]")
- playsound(owner, 'massmeta/sounds/ambience/antag/veil_mind_scream.ogg', 100)
- for(var/mob/living/L in view(3, owner))
- if(L == owner)
- continue
- if(issilicon(L))
- to_chat(L, span_userdanger("$@!) ERR: RECEPTOR OVERLOAD ^!"))
- SEND_SOUND(L, sound('sound/misc/interference.ogg', volume = 50))
- L.emote("alarm")
- L.Stun(20)
- L.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/static)
- L.clear_fullscreen("flash", 10)
- else
- if(HAS_TRAIT(L, TRAIT_DEAF))
- to_chat(L, span_warning("...but you can't hear it!"))
- else
- if(L.has_status_effect(STATUS_EFFECT_BROKEN_WILL))
- if(L.add_veil())
- to_chat(owner, span_velvet("[L.real_name] has become a veil!"))
- else
- to_chat(L, span_boldwarning("...and it scrambles your thoughts!"))
- L.dir = pick(GLOB.cardinals)
- L.adjust_confusion(2 SECONDS)
- return TRUE
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_ability.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_ability.dm
deleted file mode 100644
index 6e516f9021c27..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_ability.dm
+++ /dev/null
@@ -1,51 +0,0 @@
-/datum/action/innate/darkspawn
- name = "darkspawn ability"
- var/id //The ability's ID, for giving, taking and such
- desc = "This probably shouldn't exist."
- button_icon = 'massmeta/icons/mob/actions/actions_darkspawn.dmi'
- background_icon_state = "bg_alien"
- buttontooltipstyle = "alien"
-
- var/psi_cost = 0 //How much psi the ability costs to use
- var/psi_addendum = "" //If applicable, descriptive text shown after the cost
- var/lucidity_price = 0 //How much lucidity the ability costs to buy; if this is 0, it isn't listed on the catalog
- var/blacklisted = FALSE //If the ability can't be gained from the psi web
- var/in_use = FALSE //For channeled/cast-time abilities
- var/datum/antagonist/darkspawn/darkspawn //Linked antag datum for drawing lucidity and psi
-
-/datum/action/innate/darkspawn/New()
- ..()
- START_PROCESSING(SSfastprocess, src)
-
-/datum/action/innate/darkspawn/Destroy()
- STOP_PROCESSING(SSfastprocess, src)
- return ..()
-
-/datum/action/innate/darkspawn/Trigger(trigger_flags)
- var/activated = FALSE
- if(!IsAvailable(TRUE))
- return
- if(!active)
- activated = Activate()
- else
- activated = Deactivate()
- if(darkspawn)
- darkspawn.use_psi(psi_cost * activated)
-
-/datum/action/innate/darkspawn/IsAvailable(feedback = FALSE)
- if(!darkspawn)
- if(feedback)
- owner.balloon_alert(owner, "not a darkspawn!")
- return
- if(!darkspawn.has_psi(psi_cost))
- if(feedback)
- owner.balloon_alert(owner, "not enough psi!")
- return
- if(in_use)
- if(feedback)
- owner.balloon_alert(owner, "already using!")
- return
- . = ..()
-
-/datum/action/innate/darkspawn/proc/reset()
- in_use = FALSE
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/dark_bead.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/dark_bead.dm
deleted file mode 100644
index 8bad9c40e4972..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/dark_bead.dm
+++ /dev/null
@@ -1,114 +0,0 @@
-//Formed by the Devour Will ability.
-/obj/item/dark_bead
- name = "dark bead"
- desc = "A glowing black orb. It's fading fast."
- icon = 'massmeta/icons/obj/darkspawn_items.dmi'
- icon_state = "dark_bead"
- inhand_icon_state = "disintegrate"
- resistance_flags = FIRE_PROOF | LAVA_PROOF | UNACIDABLE | INDESTRUCTIBLE
- item_flags = DROPDEL
- w_class = 5
- light_color = "#21007F"
- light_power = 0.3
- light_range = 2
- var/eating = FALSE //If we're devouring someone's will
- var/datum/action/innate/darkspawn/devour_will/linked_ability //The ability that keeps data for us
- var/full_restore = TRUE
-
-/obj/item/dark_bead/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
- animate(src, alpha = 50, time = 5 SECONDS)
- QDEL_IN(src, 5 SECONDS)
-
-/obj/item/dark_bead/Destroy(force)
- if(isliving(loc) && !eating && !force)
- to_chat(loc, span_warning("You were too slow! [src] faded away..."))
- if(!eating || force)
- . = ..()
- else
- return QDEL_HINT_LETMELIVE
-
-/obj/item/dark_bead/attack(mob/living/carbon/L, mob/living/user)
- var/datum/antagonist/darkspawn/darkspawn = isdarkspawn(user)
- if(!darkspawn || eating || L == user) //no eating urself ;)))))))
- return
- if(!istype(L, /mob/living/carbon))
- to_chat(user, "[L]'s mind is not powerful enough to be of use.")
- return
- linked_ability = darkspawn.has_ability("devour_will")
- if(!linked_ability) //how did you even get this?
- qdel(src)
- return
- if(!L.mind || isdarkspawn(L))
- to_chat(user, span_warning("You cannot drain allies or the mindless."))
- return
- if(!L.health || L.stat)
- to_chat(user, span_warning("[L] is too weak to drain."))
- return
- if(linked_ability.victims[L])
- to_chat(user, span_warning("[L] must be given time to recover from their last draining."))
- return
- if(linked_ability.last_victim == L.ckey)
- to_chat(user, span_warning("[L]'s mind is still too scrambled. Drain someone else first."))
- return
- if(isveil(L))
- full_restore = FALSE
- to_chat(user, span_warning("[L] has been veiled and will not produce as much psi as an unmodified victim."))
- eating = TRUE
- L.Stun(5 SECONDS)
- user.Immobilize(1 SECONDS) // So they don't accidentally move while beading
- ADD_TRAIT(L, TRAIT_PARALYSIS, "bead-trait")
- if(user.loc != L)
- user.visible_message(span_warning("[user] grabs [L] and leans in close..."), "cera qo...
\
- [span_danger("You begin siphoning [L]'s mental energy...")]")
- to_chat(L, span_userdanger("AAAAAAAAAAAAAA-"))
- L.adjust_silence(4 SECONDS)
- playsound(L, 'massmeta/sounds/magic/devour_will.ogg', 65, FALSE) //T A S T Y S O U L S
- if(!do_after(user, 3 SECONDS, L))
- REMOVE_TRAIT(L, TRAIT_PARALYSIS, "bead-trait")
- user.Knockdown(3 SECONDS)
- to_chat(L, span_boldwarning("All right. You're all right."))
- L.Knockdown(3 SECONDS)
- qdel(src, force = TRUE)
- return
- else
- L.visible_message("[L] suddenly howls and clutches as their face as violet light screams from their eyes!", \
- "AAAAAAAAAAAAAAA-")
- to_chat(user, span_velvet("cera qo...
You begin siphoning [L]'s will..."))
- playsound(L, 'massmeta/sounds/magic/devour_will_long.ogg', 65, FALSE)
- if(!do_after(user, 5 SECONDS, L))
- REMOVE_TRAIT(L, TRAIT_PARALYSIS, "bead-trait")
- user.Knockdown(5 SECONDS)
- to_chat(L, span_boldwarning("All right. You're all right."))
- L.Knockdown(5 SECONDS)
- qdel(src, force = TRUE)
- return
- REMOVE_TRAIT(L, TRAIT_PARALYSIS, "bead-trait")
- user.visible_message(span_warning("[user] gently lowers [L] to the ground..."), "...aranupdejc
\
- You devour [L]'s will. Your Psi has been [!full_restore ? "partially restored." : "fully restored.\n\
- Additionally, you have gained one lucidity. Use it to purchase and upgrade abilities."]
\
- [span_warning("[L] is now severely weakened and will take some time to recover.")] \
- [span_warning("Additionally, you can not drain them again without first draining someone else.")]")
- playsound(L, 'massmeta/sounds/magic/devour_will_victim.ogg', 50, FALSE)
- if(full_restore)
- darkspawn.psi = darkspawn.psi_cap
- else //no getting free lucidity from veils that wouldn't be fun. They'll still count towards winning though.
- darkspawn.psi += 20
- if(linked_ability.victims[L] == FALSE)
- to_chat(user, " You have already drained this individual previously, and their lucidity will not contribute any more to the sacrament!")
- else
- to_chat(user, " This individual's lucidity brings you one step closer to the sacrament...")
- darkspawn.lucidity++
- darkspawn.lucidity_drained++
- darkspawn.update_psi_hud()
- linked_ability.victims[L] = TRUE
- linked_ability.last_victim = L.ckey
- to_chat(L, span_userdanger("You suddenly feel... empty. Thoughts try to form, but flit away. You slip into a deep, deep slumber..."))
- L.playsound_local(L, 'massmeta/sounds/magic/devour_will_end.ogg', 75, FALSE)
- L.Unconscious(15)
- L.adjust_stutter(20 SECONDS)
- L.apply_status_effect(STATUS_EFFECT_BROKEN_WILL)
- addtimer(CALLBACK(linked_ability, TYPE_PROC_REF(/datum/action/innate/darkspawn/devour_will, make_eligible), L), 600)
- qdel(src, force = TRUE)
- return TRUE
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/psionic_barrier.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/psionic_barrier.dm
deleted file mode 100644
index 897f01763b5ca..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/psionic_barrier.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-//Created during Divulge. Has a regenerating health pool and protects the darkspawn from harm.
-/obj/structure/psionic_barrier
- name = "psionic barrier"
- desc = "Shimmering violet particles dancing in the air. They're impossible to move past."
- //atom_integrity = 200 //we have max_integrity already
- max_integrity = 200
- icon = 'icons/effects/effects.dmi'
- icon_state = "purplesparkles"
- resistance_flags = FIRE_PROOF | LAVA_PROOF | UNACIDABLE
- anchored = TRUE
- opacity = FALSE
- density = TRUE
- mouse_opacity = MOUSE_OPACITY_OPAQUE
- light_color = "#21007F"
- light_power = 0.3
- light_range = 2
-
-/obj/structure/psionic_barrier/Initialize(mapload, time = 500)
- . = ..()
- START_PROCESSING(SSprocessing, src)
- QDEL_IN(src, time)
-
-/obj/structure/psionic_barrier/Destroy()
- if(!atom_integrity)
- visible_message(span_warning("[src] vanishes in a burst of violet energy!"))
- playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 50, TRUE)
- new/obj/effect/temp_visual/revenant/cracks(get_turf(src))
- STOP_PROCESSING(SSprocessing, src)
- return ..()
-
-/obj/structure/psionic_barrier/process()
- atom_integrity = max(0, min(max_integrity, atom_integrity + 1))
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/simulacrum.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/simulacrum.dm
deleted file mode 100644
index b1cc3644da02a..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/simulacrum.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-//Created from the Simulacrum ability. Runs in a straight line until destroyed.
-/obj/effect/simulacrum
- name = "an illusion!"
- desc = "What are you hiding?!"
- icon_state = "static"
- density = TRUE
- max_integrity = 25 // was atom_integrity
- var/mob/living/mimicking
-
-/obj/effect/simulacrum/Initialize()
- . = ..()
- START_PROCESSING(SSfastprocess, src)
- QDEL_IN(src, 100)
-
-/obj/effect/simulacrum/Destroy()
- STOP_PROCESSING(SSfastprocess, src)
- return ..()
-
-/*/obj/effect/simulacrum/examine(mob/user) //I can't currently get this to work properly
- if(mimicking)
- mimicking.examine(user)
- return
- . = ..() */
-
-/obj/effect/simulacrum/process()
- var/turf/T = get_step(src, dir)
- Move(T)
-
-/obj/effect/simulacrum/proc/mimic(mob/living/L)
- mimicking = L
- name = L.name
- desc = "A lifelike illusion of [L]."
- icon = L.icon
- icon_state = L.icon_state
- overlays = L.overlays
- setDir(L.dir)
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/umbral_tendrils.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/umbral_tendrils.dm
deleted file mode 100644
index a87dbfaf0aca7..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_objects/umbral_tendrils.dm
+++ /dev/null
@@ -1,209 +0,0 @@
-//Created by Pass.
-/obj/item/umbral_tendrils
- name = "umbral tendrils"
- desc = "A mass of pulsing, chitonous tendrils with exposed violet flesh."
- force = 15
- icon = 'massmeta/icons/obj/darkspawn_items.dmi'
- icon_state = "umbral_tendrils"
- worn_icon_state= "umbral_tendrils"
- lefthand_file = 'massmeta/icons/mob/inhands/antag/darkspawn_lefthand.dmi'
- righthand_file = 'massmeta/icons/mob/inhands/antag/darkspawn_righthand.dmi'
- hitsound = 'massmeta/sounds/magic/pass_attack.ogg'
- attack_verb_continuous = list("impales", "tentacles", "torns")
- attack_verb_simple = list("impale", "tentacle", "torn")
- item_flags = ABSTRACT | DROPDEL
-
- COOLDOWN_DECLARE(tentacle_swing)
-
- var/datum/antagonist/darkspawn/darkspawn
- var/obj/item/umbral_tendrils/twin
- var/ranged_mode = FALSE
-
-/obj/item/umbral_tendrils/Initialize(mapload, new_darkspawn)
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
- AddElement(/datum/element/light_eater)
- darkspawn = new_darkspawn
- for(var/obj/item/umbral_tendrils/U in loc)
- if(U != src)
- twin = U
- U.twin = src
- force = 12
- U.force = 12
- U.ranged_mode = ranged_mode
-
-/obj/item/umbral_tendrils/Destroy()
- if(!QDELETED(twin))
- qdel(twin)
- . = ..()
-
-/obj/item/umbral_tendrils/examine(mob/user)
- . = ..()
- if(isobserver(user) || isdarkspawn(user))
- . += "Functions:"
- . += span_velvet("Rightclick: Click on an airlock to force it open for 15 Psi (or 30 if it's bolted.)")
- . += span_velvet("The tendrils will break any lights hit in melee,")
- . += span_velvet("The tendrils will shatter light fixtures instantly, as opposed to in several attacks.")
- . += span_velvet("Also functions to pry open depowered airlocks if combat mode is off")
- . += span_velvet("Use [src] inhand to toggle ranged attacks. Ranged attacks are currently [ranged_mode ? "on" : "off"]")
- . += span_velvet("Ranged, combat mode off: Click on an open tile within seven tiles to jump to it for 10 Psi.")
- . += span_velvet("Ranged, combat mode on: Fire a projectile that travels up to five tiles, knocking down[twin ? " and pulling forwards" : ""] the first creature struck.")
-
-/obj/item/umbral_tendrils/attack_self(mob/user)
- ranged_mode = !ranged_mode
- user.balloon_alert(user, "ranged mode [ranged_mode ? "on" : "off"]")
-
-/obj/item/umbral_tendrils/attack(mob/living/target, mob/living/user, twinned_attack = TRUE)
- set waitfor = FALSE
- ..()
- //sleep(0.1 SECONDS) - SHOULD_NOT_SLEEP
- if(twin && twinned_attack && user.Adjacent(target))
- twin.attack(target, user, FALSE)
-
-/obj/item/umbral_tendrils/afterattack(atom/target, mob/living/user, proximity)
- if(!darkspawn)
- return ..()
- if(proximity)
- if(istype(target, /obj/structure/table))
- var/obj/structure/table/T = target
- T.deconstruct(FALSE)
- return
- else if(istype(target, /obj/machinery/door/airlock))
- var/obj/machinery/door/airlock/opening = target
-
- if((!opening.requiresID() || opening.allowed(user)) && opening.hasPower()) //This is to prevent stupid shit like hitting a door with an arm blade, the door opening because you have acces and still getting a "the airlocks motors resist our efforts to force it" message, power requirement is so this doesn't stop unpowered doors from being pried open if you have access
- return
- if(opening.locked || opening.welded)
- if(!user.combat_mode)
- opening.balloon_alert(user, "bolted!")
- return
- while(opening.get_integrity() > opening.max_integrity * 0.25 && !QDELETED(src))
- if(twin)
- if(!do_after(user, rand(4, 6), target = opening))
- darkspawn.use_psi(30)
- qdel(src)
- return
- else
- if(!do_after(user, rand(8, 10), target = opening))
- darkspawn.use_psi(30)
- qdel(src)
- return
- playsound(src, 'massmeta/sounds/magic/pass_smash_door.ogg', 50, TRUE)
- opening.take_damage(max_integrity / rand(8, 15))
- to_chat(user, "klaj.")
- opening.ex_act(EXPLODE_DEVASTATE)
- user.visible_message("[user] slams down [opening]!", "KLAJ.")
- darkspawn.use_psi(30)
- qdel(src)
- return
-
- if(opening.hasPower())
- if(!user.combat_mode) //Don't pry forced without combat mode
- return
- user.visible_message(span_warning("[user] jams [src] into the airlock and starts prying it open!"), span_warning("We start forcing the [opening] open."), \
- span_hear("You hear a metal screeching sound."))
- playsound(opening, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE)
- if(!twin)
- if(!do_after(user, 75, target = opening))
- return
- else
- if(!do_after(user, 50, target = opening))
- return
- darkspawn.use_psi(15)
- //user.say("Heeeeeeeeeerrre's Johnny!")
- user.visible_message(span_warning("[user] forces the airlock to open with [user.p_their()] [src]!"), span_warning("We force the [opening] to open."), \
- span_hear("You hear a metal screeching sound."))
- opening.open(BYPASS_DOOR_CHECKS)
- // Double hit structures if duality
- if(!QDELETED(target) && (isstructure(target) || ismachinery(target)) && twin && user.get_active_held_item() == src)
- target.attackby(twin, user)
- return ..()
-
- if(ranged_mode)
- if(!user.combat_mode)
- if(isopenturf(target))
- tendril_jump(user, target)
- if(user.combat_mode)
- if(!COOLDOWN_FINISHED(src, tentacle_swing))
- user.balloon_alert(user, "on cooldown!")
- return
- tendril_swing(user, target)
-
-/obj/item/umbral_tendrils/proc/tendril_jump(mob/living/user, turf/open/target) //throws the user towards the target turf
- if(!darkspawn.has_psi(10))
- to_chat(user, span_warning("You need at least 10 Psi to jump!"))
- return
- if(!(target in view(7, user)))
- to_chat(user, span_warning("You can't access that area, or it's too far away!"))
- return
- to_chat(user, span_velvet("You pull yourself towards [target]."))
- playsound(user, 'sound/magic/tail_swing.ogg', 10, TRUE)
- user.throw_at(target, 5, 3, gentle = TRUE)
- darkspawn.use_psi(10)
-
-/obj/item/umbral_tendrils/proc/tendril_swing(mob/living/user, mob/living/target) //swing the tendrils to knock someone down
- if(isliving(target) && target.body_position == LYING_DOWN)
- to_chat(user, span_warning("[target] is already knocked down!"))
- return
- user.visible_message(span_warning("[user] draws back [src] and swings them towards [target]!"), \
- span_velvet("opehhjaoo
You swing your tendrils towards [target]!"))
- playsound(user, 'sound/magic/tail_swing.ogg', 50, TRUE)
- var/obj/projectile/umbral_tendrils/T = new(get_turf(user))
- T.preparePixelProjectile(target, user)
- T.twinned = twin
- T.firer = user
- T.fire()
- attack_self(user)
- COOLDOWN_START(src, tentacle_swing, 2 SECONDS)
-
-/obj/projectile/umbral_tendrils
- name = "umbral tendrils"
- icon_state = "cursehand0"
- hitsound = 'massmeta/sounds/magic/pass_attack.ogg'
- layer = LARGE_MOB_LAYER
- damage = 0
- knockdown = 40
- speed = 1
- range = 5
- var/twinned = FALSE
- var/beam
-
-/obj/projectile/umbral_tendrils/fire(setAngle)
- beam = firer.Beam(src, icon_state = "curse0", time = INFINITY, maxdistance = INFINITY)
- ..()
-
-/obj/projectile/umbral_tendrils/Destroy()
- qdel(beam)
- . = ..()
-
-/obj/projectile/umbral_tendrils/on_hit(atom/target, blocked, pierce_hit)
- . = ..()
- if(blocked >= 100)
- return
- . = TRUE
- if(isliving(target))
- var/mob/living/L = target
- if(!iscyborg(target))
- playsound(target, 'massmeta/sounds/magic/pass_attack.ogg', 50, TRUE)
- if(!twinned)
- target.visible_message(span_warning("[firer]'s [name] slam into [target], knocking them off their feet!"), \
- span_userdanger("You're knocked off your feet!"))
- L.Knockdown(6 SECONDS)
- else
- L.Immobilize(0.15 SECONDS) // so they cant cancel the throw by moving
- //why use target instead of L?
- L.throw_at(get_step_towards(firer, target), 7, 2, gentle = TRUE) //pull them towards us!
- target.visible_message(span_warning("[firer]'s [name] slam into [target] and drag them across the ground!"), \
- span_userdanger("You're suddenly dragged across the floor!"))
- L.Knockdown(8 SECONDS) //these can't hit people who are already on the ground but they can be spammed to all shit
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), target, 'massmeta/sounds/magic/pass_attack.ogg', 50, TRUE), 1)
- else
- var/mob/living/silicon/robot/R = target
- R.toggle_headlamp(TRUE) //disable headlamps
- target.visible_message(span_warning("[firer]'s [name] smashes into [target]'s chassis!"), \
- span_userdanger("Heavy percussive impact detected. Recalibrating motor input."))
- R.playsound_local(target, 'sound/misc/interference.ogg', 25, FALSE)
- playsound(R, 'sound/effects/bang.ogg', 50, TRUE)
- R.Paralyze(40) //this is the only real anti-borg spell get
- R.adjustBruteLoss(10)
-
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_organs.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_organs.dm
deleted file mode 100644
index 51720c405e5d1..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_organs.dm
+++ /dev/null
@@ -1,26 +0,0 @@
-/obj/item/organ/internal/brain/darkspawn
- name = "tumorous mass"
- desc = "A fleshy growth that was dug out of the skull of a Nightmare."
-
-/obj/item/organ/internal/brain/shadow/nightmare/on_insert(mob/living/carbon/brain_owner)
- . = ..()
- RegisterSignal(brain_owner, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(dodge_bullets))
-
-/obj/item/organ/internal/brain/shadow/nightmare/on_remove(mob/living/carbon/brain_owner)
- . = ..()
- UnregisterSignal(brain_owner, COMSIG_ATOM_PRE_BULLET_ACT)
-
-/obj/item/organ/internal/brain/darkspawn/proc/dodge_bullets(mob/living/carbon/human/source, obj/projectile/hitting_projectile, def_zone)
- SIGNAL_HANDLER
- var/turf/dodge_turf = source.loc
- if((!istype(dodge_turf) || dodge_turf.get_lumcount() >= SHADOW_SPECIES_LIGHT_THRESHOLD) && !source.has_status_effect(/datum/status_effect/shadow_dance))
- return NONE
- source.visible_message(
- span_danger("[source] dances in the shadows, evading [hitting_projectile]!"),
- span_danger("You evade [hitting_projectile] with the cover of darkness!"),
- )
- playsound(source, SFX_BULLET_MISS, 75, TRUE)
- return COMPONENT_BULLET_PIERCED
-
-/obj/item/organ/internal/eyes/shadow/darkspawn
- sight_flags = SEE_MOBS
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_progenitor.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_progenitor.dm
deleted file mode 100644
index 1bd7f7a05d5da..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_progenitor.dm
+++ /dev/null
@@ -1,111 +0,0 @@
-/mob/living/simple_animal/hostile/darkspawn_progenitor
- name = "cosmic progenitor"
- desc = "..."
- icon = 'massmeta/icons/mob/darkspawn_progenitor.dmi'
- icon_state = "darkspawn_progenitor"
- icon_living = "darkspawn_progenitor"
- health = INFINITY
- maxHealth = INFINITY
- attack_verb_continuous = "rips apart"
- attack_verb_simple = "rip apart"
- attack_sound = 'massmeta/sounds/creatures/progenitor_attack.ogg'
- friendly_verb_continuous = "stares down"
- friendly_verb_simple = "stare down"
- speak_emote = list("roars")
- armour_penetration = 100
- melee_damage_lower = 40
- melee_damage_upper = 40
- move_to_delay = 10
- speed = 1
- pixel_x = -48
- pixel_y = -32
- sentience_type = SENTIENCE_BOSS
- environment_smash = ENVIRONMENT_SMASH_RWALLS
- obj_damage = 100
- light_range = 15
- light_color = "#21007F"
- weather_immunities = list("lava", "ash")
- move_force = MOVE_FORCE_OVERPOWERING
- move_resist = MOVE_FORCE_OVERPOWERING
- pull_force = MOVE_FORCE_OVERPOWERING
- mob_size = MOB_SIZE_LARGE
- layer = LARGE_MOB_LAYER
- movement_type = FLYING
- var/time_to_next_roar = 0
-
-/mob/living/simple_animal/hostile/darkspawn_progenitor/Initialize()
- . = ..()
- var/datum/action/small_sprite/progenitor/smolgenitor_sprite = new /datum/action/small_sprite/progenitor
- smolgenitor_sprite.Grant(src)
- ADD_TRAIT(src, TRAIT_HOLY, "ohgodohfuck") //sorry no magic
- ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT)
- ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_MOVEMENT, INNATE_TRAIT)
- ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT)
- alpha = 0
- animate(src, alpha = 255, time = 1 SECONDS)
- var/obj/item/radio/headset/silicon/ai/radio = new(src) //so the progenitor can hear people's screams over radio
- radio.wires.cut(WIRE_TX) //but not talk over it
-
-/mob/living/simple_animal/hostile/darkspawn_progenitor/AttackingTarget()
- if(istype(target, /obj/machinery/door) || istype(target, /obj/structure/door_assembly))
- playsound(target, 'massmeta/sounds/magic/pass_smash_door.ogg', 100, FALSE)
- obj_damage = 60
- . = ..()
-
-/mob/living/simple_animal/hostile/darkspawn_progenitor/Login()
- ..()
- time_to_next_roar = world.time + 30 SECONDS
-
-/mob/living/simple_animal/hostile/darkspawn_progenitor/Life()
- ..()
- if(time_to_next_roar + 10 SECONDS <= world.time) //gives time to roar manually if you like want to do that
- roar()
-
-/mob/living/simple_animal/hostile/darkspawn_progenitor/say(message, bubble_type,var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null, filterproof = FALSE, message_range = 7, datum/saymode/saymode = null)
- ..()
- if(time_to_next_roar <= world.time)
- roar()
-
-/mob/living/simple_animal/hostile/darkspawn_progenitor/proc/roar()
- playsound(src, 'massmeta/sounds/creatures/progenitor_roar.ogg', 50, TRUE)
- for(var/mob/M in GLOB.player_list)
- if(get_dist(M, src) > 7)
- M.playsound_local(src, 'massmeta/sounds/creatures/progenitor_distant.ogg', 25, FALSE) //falloff = 5
- else if(isliving(M))
- var/mob/living/L = M
- if(L != src) //OH GOD OH FUCK I'M SCARING MYSELF
- to_chat(M, span_boldannounce("You stand paralyzed in the shadow of the cold as it descends from on high."))
- L.Stun(20)
- time_to_next_roar = world.time + 30 SECONDS
-
-/datum/action/cooldown/spell/pointed/progenitor_curse
- name = "Viscerate Mind"
- desc = "Unleash a powerful psionic barrage into the mind of the target."
- cooldown_time = 5 SECONDS
- button_icon = 'massmeta/icons/mob/actions/actions_darkspawn.dmi'
- button_icon_state = "veil_mind"
- background_icon_state = "bg_alien"
- spell_requirements = NONE //Go fuck yourself
-
-/datum/action/cooldown/spell/pointed/progenitor_curse/is_valid_target(atom/cast_on)
- return ..() && ishuman(cast_on)
-
-/datum/action/cooldown/spell/pointed/progenitor_curse/cast(mob/living/carbon/human/cast_on)
- . = ..()
- var/zoinks = pick(0.1, 0.5, 1)//like, this isn't even my final form!
- usr.visible_message(span_warning("[usr]'s sigils flare as it glances at [cast_on]!"), \
- span_velvet("You direct [zoinks]% of your psionic power into [cast_on]'s mind!."))
- cast_on.apply_status_effect(STATUS_EFFECT_PROGENITORCURSE)
-
-/mob/living/simple_animal/hostile/darkspawn_progenitor/narsie_act()
- return
-
-/mob/living/simple_animal/hostile/darkspawn_progenitor/singularity_act()
- return
-
-/mob/living/simple_animal/hostile/darkspawn_progenitor/ex_act() //sorry no bombs
- return
-
-/datum/action/small_sprite/progenitor
- button_icon = 'massmeta/icons/mob/mob.dmi'
- button_icon_state = "smol_progenitor"
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_species.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_species.dm
deleted file mode 100644
index 8f8226f0e9c41..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_species.dm
+++ /dev/null
@@ -1,102 +0,0 @@
-/datum/species/darkspawn
- name = "Darkspawn"
- id = "darkspawn"
- examine_limb_id = SPECIES_SHADOW
- sexes = FALSE
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE
- siemens_coeff = 0
- death_sound = 'massmeta/sounds/creatures/darkspawn_death.ogg'
- damage_modifier = 40
- //brutemod = 0.9
- heatmod = 1.5
- no_equip_flags = ITEM_SLOT_HEAD | ITEM_SLOT_MASK | ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_FEET | ITEM_SLOT_ICLOTHING | ITEM_SLOT_SUITSTORE
- inherent_traits = list(
- //NOTRANSSTING, i guess it should be here but its no longer exist
- //NOEYESPRITES,
- TRAIT_GENELESS,
- TRAIT_NO_DNA_COPY,
- TRAIT_NO_UNDERWEAR,
- TRAIT_ADVANCEDTOOLUSER,
- TRAIT_CAN_STRIP,
- TRAIT_RESISTCOLD,
- TRAIT_NOBREATH,
- TRAIT_RESISTHIGHPRESSURE,
- TRAIT_RESISTLOWPRESSURE,
- TRAIT_RADIMMUNE,
- TRAIT_VIRUSIMMUNE,
- TRAIT_PIERCEIMMUNE,
- TRAIT_NODISMEMBER,
- TRAIT_NOHUNGER,
- TRAIT_NOBLOOD,
- TRAIT_NOGUNS,
- )
- bodypart_overrides = list(
- BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/darkspawn,
- BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/darkspawn,
- BODY_ZONE_HEAD = /obj/item/bodypart/head/darkspawn,
- BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/darkspawn,
- BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/darkspawn,
- BODY_ZONE_CHEST = /obj/item/bodypart/chest/darkspawn,
- )
- mutanteyes = /obj/item/organ/internal/eyes/shadow/darkspawn
- mutantbrain = /obj/item/organ/internal/brain/darkspawn
- var/list/upgrades = list()
-
-/datum/species/darkspawn/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.real_name = "[pick(GLOB.nightmare_names)]"
- C.name = C.real_name
- if(C.mind)
- C.mind.name = C.real_name
- C.dna.real_name = C.real_name
-
-/datum/species/darkspawn/on_species_loss(mob/living/carbon/C)
- . = ..()
-
-/datum/species/darkspawn/spec_life(mob/living/carbon/human/H)
- . = ..()
- handle_upgrades(H)
- var/turf/T = H.loc
- if(istype(T) && H.stat != DEAD)
- var/light_amount = T.get_lumcount()
- if(light_amount < DARKSPAWN_DIM_LIGHT) //rapid healing and stun reduction in the darkness
- var/healing_amount = DARKSPAWN_DARK_HEAL
- if(upgrades["dark_healing"])
- healing_amount *= 1.25
- H.adjustBruteLoss(-healing_amount)
- H.adjustFireLoss(-healing_amount * 0.5)
- H.adjustToxLoss(-healing_amount)
- H.adjustStaminaLoss(-healing_amount * 20)
- H.AdjustStun(-healing_amount * 4)
- H.AdjustKnockdown(-healing_amount * 4)
- H.AdjustUnconscious(-healing_amount * 4)
- H.SetSleeping(0)
- H.setOrganLoss(ORGAN_SLOT_BRAIN,0)
- else if(light_amount < DARKSPAWN_BRIGHT_LIGHT && !upgrades["light_resistance"]) //not bright, but still dim
- H.adjustFireLoss(1)
- else if(light_amount > DARKSPAWN_BRIGHT_LIGHT && !H.has_status_effect(STATUS_EFFECT_CREEP)) //but quick death in the light
- if(upgrades["spacewalking"] && isspaceturf(T))
- return
- else if(!upgrades["light_resistance"])
- to_chat(H, "The light burns you!")
- H.playsound_local(H, 'sound/weapons/sear.ogg', max(40, 65 * light_amount), TRUE)
- H.adjustFireLoss(DARKSPAWN_LIGHT_BURN)
- else
- to_chat(H, "The light singes you!")
- H.playsound_local(H, 'sound/weapons/sear.ogg', max(30, 50 * light_amount), TRUE)
- H.adjustFireLoss(DARKSPAWN_LIGHT_BURN * 0.5)
-
-/* moved to species death_sound
-/datum/species/darkspawn/spec_death(gibbed, mob/living/carbon/human/H)
- playsound(H, 'massmeta/sounds/creatures/darkspawn_death.ogg', 50, FALSE)
-*/
-
-/datum/species/darkspawn/proc/handle_upgrades(mob/living/carbon/human/H)
- var/datum/antagonist/darkspawn/darkspawn
- if(H.mind)
- darkspawn = H.mind.has_antag_datum(/datum/antagonist/darkspawn)
- if(darkspawn)
- upgrades = darkspawn.upgrades
-
-/mob/living/carbon/human/species/darkspawn
- race = /datum/species/darkspawn //God knows why would you need it but ok
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrade.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrade.dm
deleted file mode 100644
index e30405cb0a53f..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrade.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-//Passive upgrades. These are applied as soon as they're purchased and then delete themselves.
-/datum/darkspawn_upgrade
- var/name = "darkspawn upgrade"
- var/desc = "This is an upgrade."
- var/id
- var/lucidity_price = 0 //How much lucidity an upgrade costs to buy
- var/datum/antagonist/darkspawn/darkspawn //The datum buying this upgrade
-
-/datum/darkspawn_upgrade/New(darkspawn_datum)
- ..()
- darkspawn = darkspawn_datum
-
-/datum/darkspawn_upgrade/proc/unlock()
- if(!darkspawn)
- return
- apply_effects()
- qdel(src)
- return TRUE
-
-/datum/darkspawn_upgrade/proc/apply_effects()
- return
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/dark_healing.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/dark_healing.dm
deleted file mode 100644
index f77c20eaf20a5..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/dark_healing.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-//Increases healing in darkness by 25%.
-//Check species_types/darkspawn.dm for effects.
-/datum/darkspawn_upgrade/dark_healing
- name = "\'Mending\' Sigil"
- id = "dark_healing"
- desc = "The Naykranu sigil, representing perseverence, is etched onto the back. Unlocking this sigil increases your healing in darkness by 25%."
- lucidity_price = 1
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/light_resistance.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/light_resistance.dm
deleted file mode 100644
index e4e60b9f1c6f8..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/light_resistance.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-//Halves lightburn damage and gives resistance to dim light.
-//Check species_types/darkspawn.dm for effects.
-/datum/darkspawn_upgrade/light_resistance
- name = "\'Lightward\' Sigil"
- id = "light_resistance"
- desc = "The Lnkpayp sigil, representing imperviousness, is etched onto the abdomen. Unlocking this sigil halves light damage taken and protects from dim light."
- lucidity_price = 2
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/psi_cap.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/psi_cap.dm
deleted file mode 100644
index c85e8bda23e72..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/psi_cap.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-//Increases max Psi by 25.
-/datum/darkspawn_upgrade/psi_cap
- name = "\'Psi\' Sigils"
- id = "psi_cap"
- desc = "The Atlwjz sigils, representing Psi, are etched onto the forehead. Unlocking these sigils increases your maximum Psi by 25."
- lucidity_price = 2
-
-/datum/darkspawn_upgrade/psi_cap/apply_effects()
- darkspawn.psi_cap += 25
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/psi_regen.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/psi_regen.dm
deleted file mode 100644
index 6aead6117cc3a..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/psi_regen.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-//Decreases the Psi regeneration delay by 3 ticks and increases Psi regeneration threshold to 25.
-/datum/darkspawn_upgrade/psi_regen
- name = "\'Recovery\' Sigil"
- id = "psi_regen"
- desc = "The Mqeygjao sigil, representing swiftness, is etched onto the forehead. Unlocking this sigil causes your Psi to regenerate 3 ticks sooner, and you will regenerate up to 25 Psi instead of 20."
- lucidity_price = 1
-
-/datum/darkspawn_upgrade/psi_regen/apply_effects()
- darkspawn.psi_regen = 25
- darkspawn.psi_regen_delay -= 3
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/spacewalking.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/spacewalking.dm
deleted file mode 100644
index f8bd4ef550735..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/spacewalking.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-//Provides immunity to starlight.
-/datum/darkspawn_upgrade/spacewalking
- name = "\'Starlight\' Sigils"
- id = "spacewalking"
- desc = "The Jaxqhw sigils, representing the void, are etched multiple times across the body. Unlocking these sigils provides the ability to walk freely in space without fear of starlight."
- lucidity_price = 3
diff --git a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/twin_tendrils.dm b/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/twin_tendrils.dm
deleted file mode 100644
index 4bf95bf71d7d7..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/darkspawn_upgrades/twin_tendrils.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-//Using Pass will now form two tendrils if possible.
-//Attacking with one set of tendrils will attack with the other.
-//This also speeds up most actions they have.
-//Check pass.dm and umbral_tendrils.dm for effects.
-/datum/darkspawn_upgrade/twin_tendrils
- name = "\'Duality\' Sigils"
- id = "twin_tendrils"
- desc = "The Zkqxha sigils, representing duality, are etched onto the arms. Unlocking these sigils causes Pass to form tendrils in both hands if possible, which empowers both."
- lucidity_price = 1
diff --git a/massmeta/code/modules/antagonists/darkspawn/hud.dm b/massmeta/code/modules/antagonists/darkspawn/hud.dm
deleted file mode 100644
index 11d5c2fd69260..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/hud.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-/atom/movable/screen/darkspawn_psi
- name = "psi"
- icon = 'massmeta/icons/mob/screen_gen.dmi'
- icon_state = "psi_counter"
- screen_loc = ui_lingchemdisplay
- invisibility = INVISIBILITY_ABSTRACT
-
-/datum/hud
- var/atom/movable/screen/darkspawn_psi/psi_counter
-
-/datum/hud/New(mob/owner, ui_style = 'icons/hud/screen_midnight.dmi')
- . = ..()
- psi_counter = new /atom/movable/screen/darkspawn_psi
-
-/datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/hud/screen_midnight.dmi')
- . = ..()
- psi_counter = new /atom/movable/screen/darkspawn_psi
- infodisplay += psi_counter
-
-/datum/hud/Destroy()
- . = ..()
- psi_counter = null
diff --git a/massmeta/code/modules/antagonists/darkspawn/looping_sounds.dm b/massmeta/code/modules/antagonists/darkspawn/looping_sounds.dm
deleted file mode 100644
index d61e44a61d674..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/looping_sounds.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/datum/looping_sound/sacrament
- mid_sounds = list('massmeta/sounds/magic/sacrament_heartbeat_01.ogg' = 1, 'massmeta/sounds/magic/sacrament_heartbeat_02.ogg' = 1, 'massmeta/sounds/magic/sacrament_heartbeat_03.ogg' = 1)
- mid_length = 10
- volume = 30
- var/stage = 1
-
-/datum/looping_sound/sacrament/get_sound(looped)
- mid_length = 12 - (stage * 2)
- volume = 30 + (stage * 10)
- return ..(looped)
diff --git a/massmeta/code/modules/antagonists/darkspawn/veil.dm b/massmeta/code/modules/antagonists/darkspawn/veil.dm
deleted file mode 100644
index 4e318cda7f04c..0000000000000
--- a/massmeta/code/modules/antagonists/darkspawn/veil.dm
+++ /dev/null
@@ -1,133 +0,0 @@
-/datum/antagonist/veil
- name = "Darkspawn Veil"
- job_rank = ROLE_DARKSPAWN
- roundend_category = "veils"
- antagpanel_category = "Darkspawn"
- antag_moodlet = /datum/mood_event/thrall
- hud_icon = 'massmeta/icons/mob/darkspawn_hud.dmi'
- antag_hud_name = "veil"
- var/mutable_appearance/veil_sigils
-
-/datum/antagonist/veil/on_gain()
- . = ..()
- owner.special_role = "veil"
- message_admins("[key_name_admin(owner.current)] was veiled by a darkspawn!")
- log_game("[key_name(owner.current)] was veiled by a darkspawn!")
- var/datum/objective/veil/O = new
- objectives += O
- O.update_explanation_text()
- owner.announce_objectives()
-
-/datum/antagonist/veil/on_removal()
- message_admins("[key_name_admin(owner.current)] was deveiled!")
- log_game("[key_name(owner.current)] was deveiled!")
- owner.special_role = null
- var/mob/living/M = owner.current
- if(issilicon(M))
- M.audible_message(span_notice("[M] lets out a short blip, followed by a low-pitched beep."))
- to_chat(M,span_userdanger("You have been turned into a[ iscyborg(M) ? " cyborg" : "n AI" ]! You are no longer a thrall! Though you try, you cannot remember anything about your servitude..."))
- else
- M.visible_message(span_big("[M] looks like their mind is their own again!"))
- to_chat(M,span_userdanger("A piercing white light floods your eyes. Your mind is your own again! Though you try, you cannot remember anything about the darkspawn or your time under their command..."))
- to_chat(owner, span_notice("As your mind is released from their grasp, you feel your strength returning."))
- M.update_sight()
- return ..()
-
-/datum/antagonist/veil/apply_innate_effects(mob/living/mob_override)
- var/mob/living/current_mob = mob_override || owner.current
- veil_sigils = mutable_appearance('massmeta/icons/mob/actions/actions_darkspawn.dmi', "veil_sigils", -UNDER_SUIT_LAYER) //show them sigils
- current_mob.add_overlay(veil_sigils)
- current_mob.maxHealth -= 40
- RegisterSignal(current_mob, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
- add_team_hud(current_mob)
-
-/datum/antagonist/veil/remove_innate_effects(mob/living/mob_override)
- owner.current.maxHealth += 40
- var/mob/living/current_mob = mob_override || owner.current
- UnregisterSignal(current_mob, COMSIG_ATOM_EXAMINE)
- current_mob.maxHealth += 40
- current_mob.cut_overlay(veil_sigils)
-
-/datum/antagonist/veil/add_team_hud(mob/target)
- QDEL_NULL(team_hud_ref)
-
- team_hud_ref = WEAKREF(target.add_alt_appearance(
- /datum/atom_hud/alternate_appearance/basic/has_antagonist,
- "antag_team_hud_[REF(src)]",
- image(hud_icon, target, antag_hud_name),
- ))
-
- var/datum/atom_hud/alternate_appearance/basic/has_antagonist/hud = team_hud_ref.resolve()
-
- var/list/mob/living/mob_list = list()
- for(var/datum/mind/darkspawn as anything in get_antag_minds(/datum/antagonist/darkspawn))
- mob_list += darkspawn.current
-
- for(var/datum/mind/veil as anything in get_antag_minds(/datum/antagonist/veil))
- mob_list += veil.current
-
- for (var/datum/atom_hud/alternate_appearance/basic/has_antagonist/antag_hud as anything in GLOB.has_antagonist_huds)
- if(!(antag_hud.target in mob_list))
- continue
- antag_hud.show_to(target)
- hud.show_to(antag_hud.target)
-
-/datum/antagonist/veil/proc/on_examine(datum/source, mob/examiner, examine_text)
- SIGNAL_HANDLER
- if(!veil_sigils)
- return
- var/mob/living/carbon/human/human_owner = owner.current
- if(!istype(human_owner) || QDELETED(human_owner))
- return
- if(!human_owner.glasses || !human_owner.wear_suit)
- examine_text += "[human_owner.p_they(TRUE)] have their whole body covered in sigils!\n"
-
-/datum/antagonist/veil/greet()
- to_chat(owner, "ukq wna ieja jks" )
- to_chat(owner, "Your mind goes numb. Your thoughts go blank. You feel utterly empty. \n\
- A consciousness brushes against your own. You dream. \n\
- Of a vast, empty Void in the deep of space. \n\
- Something lies in the Void. Ancient. Unknowable. It watches you with hungry eyes. \n\
- Eyes filled with stars. \n\
- You feel the vast consciousness slowly consume your own and the veil falls away. \n\
- Serve the darkspawn above all else. Your former allegiances are now forfeit. Their goal is yours, and yours is theirs.")
- to_chat(owner, "Use :w or .w before your messages to speak over the Mindlink. This only works across your current z-level.")
- to_chat(owner, "Ask for help from your masters or fellows if you're new to this role.")
- to_chat(owner, span_danger("Your drained will has left you feeble and weak! You will go down with many fewer hits!"))
- SEND_SOUND(owner.current, sound ('massmeta/sounds/ambience/antag/become_veil.ogg', volume = 50))
- flash_color(owner, flash_color = "#21007F", flash_time = 100)
-
-/datum/antagonist/veil/roundend_report()
- return "[printplayer(owner)]"
-
-/mob/living/proc/add_veil()
- if(!istype(mind))
- return FALSE
- if(HAS_TRAIT(src, TRAIT_MINDSHIELD))
- src.visible_message("[src] seems to resist an unseen force!")
- to_chat(src, "Your mind goes numb. Your thoughts go blank. You feel utterly empty. \n\
- A mind brushes against your own. You dream.\n\
- Of a vast, empty Void in the deep of space.\n\
- Something lies in the Void. Ancient. Unknowable. It watches you with hungry eyes. \n\
- Eyes filled with stars.\n\
- It needs to die.")
- return FALSE
- return mind.add_antag_datum(/datum/antagonist/veil)
-
-/mob/living/proc/remove_veil()
- if(!istype(mind))
- return FALSE
- return mind.remove_antag_datum(/datum/antagonist/veil)
-
-/datum/antagonist/veil/on_mindshield(mob/implanter, mob/living/mob_override)
- owner.current.remove_veil()
- owner.current.log_message("has been deconverted from being a Veil by [implanter]!", LOG_ATTACK, color="#960000")
- return COMPONENT_MINDSHIELD_DECONVERTED
-
-/datum/objective/veil
- explanation_text = "Help your masters, Darkspawns, to complete The Sacrament."
-
-/datum/objective/veil/check_completion()
- if(..())
- return TRUE
- return (GLOB.sacrament_done)
diff --git a/massmeta/code/modules/dynamic_rulesets/darkspawn_ruleset.dm b/massmeta/code/modules/dynamic_rulesets/darkspawn_ruleset.dm
deleted file mode 100644
index 917c118f38cbc..0000000000000
--- a/massmeta/code/modules/dynamic_rulesets/darkspawn_ruleset.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-//////////////////////////////////////////////
-// //
-// DARKSPAWN //
-// //
-//////////////////////////////////////////////
-
-/datum/dynamic_ruleset/roundstart/darkspawn
- name = "Darkspawn"
- antag_flag = ROLE_DARKSPAWN
- antag_datum = /datum/antagonist/darkspawn
- minimum_required_age = 20
- protected_roles = list(JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_HEAD_OF_SECURITY, JOB_CAPTAIN)
- restricted_roles = list(JOB_AI, JOB_CYBORG)
- required_candidates = 3
- weight = 0 //W.I.P.
- cost = 20
- scaling_cost = 20
- antag_cap = list(3,3,3,3,3,3,3,3,3,3)
- requirements = list(80,75,70,65,50,30,30,30,25,20)
- minimum_players = 30
-
-/datum/dynamic_ruleset/roundstart/darkspawn/pre_execute(population)
- . = ..()
- var/num_darkspawn = antag_cap[indice_pop] * (scaled_times + 1)
- for (var/i = 1 to num_darkspawn)
- if(candidates.len <= 0)
- break
- var/mob/M = pick_n_take(candidates)
- assigned += M.mind
- M.mind.special_role = ROLE_DARKSPAWN
- M.mind.restricted_roles = restricted_roles
- log_game("[key_name(M)] has been selected as a Darkspawn")
- return TRUE
diff --git a/massmeta/code/modules/languages/darkspeak.dm b/massmeta/code/modules/languages/darkspeak.dm
deleted file mode 100644
index d7c53d08ee4a6..0000000000000
--- a/massmeta/code/modules/languages/darkspeak.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-//point of note: a lot of the darkspawns' abilities cause them to hear stuff
-//this stuff is plain English run through rot22; you can translate it back with rot4
-//the darkspeak language doesn't fall under this, though
-/datum/language/darkspawn
- name = "Darkspeak"
- desc = "A language used by the darkspawn. Even with harsh syllables, it rolls silkily off the tongue."
- syllables = list("ko", "ii", "ma", "an", "sah", "lo", "na")
- flags = NO_STUTTER
- key = "a"
- default_priority = 10
- space_chance = 40
- icon = 'massmeta/icons/misc/language.dmi'
- icon_state = "darkspeak"
diff --git a/massmeta/code/modules/movespeed/modifiers/status_effects.dm b/massmeta/code/modules/movespeed/modifiers/status_effects.dm
deleted file mode 100644
index ce94f19f2f17a..0000000000000
--- a/massmeta/code/modules/movespeed/modifiers/status_effects.dm
+++ /dev/null
@@ -1,3 +0,0 @@
-/datum/movespeed_modifier/status_effect/time_dilation
- multiplicative_slowdown = -0.5
- blacklisted_movetypes = (FLYING|FLOATING)
diff --git a/massmeta/code/modules/projectiles/projectile/special/curse.dm b/massmeta/code/modules/projectiles/projectile/special/curse.dm
deleted file mode 100644
index a5d0356dfdf46..0000000000000
--- a/massmeta/code/modules/projectiles/projectile/special/curse.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/obj/projectile/curse_hand/progenitor
- name = "psionic barrage"
- damage_type = BRAIN
- paralyze = 0
diff --git a/massmeta/code/modules/surgery/organs/bodyparts/species_parts/misc_bodyparts.dm b/massmeta/code/modules/surgery/organs/bodyparts/species_parts/misc_bodyparts.dm
deleted file mode 100644
index c3d365e775e25..0000000000000
--- a/massmeta/code/modules/surgery/organs/bodyparts/species_parts/misc_bodyparts.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-///DARKSPAWN
-/obj/item/bodypart/head/darkspawn
- biological_state = BIO_INORGANIC
- limb_id = "darkspawn"
- is_dimorphic = FALSE
- should_draw_greyscale = FALSE
- icon_static = 'massmeta/icons/mob/species/darkspawn/darkspawn_parts.dmi'
-
-/obj/item/bodypart/chest/darkspawn
- biological_state = BIO_INORGANIC
- limb_id = "darkspawn"
- is_dimorphic = FALSE
- should_draw_greyscale = FALSE
- icon_static = 'massmeta/icons/mob/species/darkspawn/darkspawn_parts.dmi'
-
-/obj/item/bodypart/arm/left/darkspawn
- biological_state = BIO_INORGANIC
- limb_id = "darkspawn"
- should_draw_greyscale = FALSE
- icon_static = 'massmeta/icons/mob/species/darkspawn/darkspawn_parts.dmi'
-
-/obj/item/bodypart/arm/right/darkspawn
- biological_state = BIO_INORGANIC
- limb_id = "darkspawn"
- should_draw_greyscale = FALSE
- icon_static = 'massmeta/icons/mob/species/darkspawn/darkspawn_parts.dmi'
-
-/obj/item/bodypart/leg/left/darkspawn
- biological_state = BIO_INORGANIC
- limb_id = "darkspawn"
- should_draw_greyscale = FALSE
- icon_static = 'massmeta/icons/mob/species/darkspawn/darkspawn_parts.dmi'
-
-/obj/item/bodypart/leg/right/darkspawn
- biological_state = BIO_INORGANIC
- limb_id = "darkspawn"
- should_draw_greyscale = FALSE
- icon_static = 'massmeta/icons/mob/species/darkspawn/darkspawn_parts.dmi'
diff --git a/massmeta/icons/misc/language.dmi b/massmeta/icons/misc/language.dmi
deleted file mode 100644
index a452a404f7435..0000000000000
Binary files a/massmeta/icons/misc/language.dmi and /dev/null differ
diff --git a/massmeta/icons/mob/actions/actions_darkspawn.dmi b/massmeta/icons/mob/actions/actions_darkspawn.dmi
deleted file mode 100644
index b2534e1d1699a..0000000000000
Binary files a/massmeta/icons/mob/actions/actions_darkspawn.dmi and /dev/null differ
diff --git a/massmeta/icons/mob/darkspawn_hud.dmi b/massmeta/icons/mob/darkspawn_hud.dmi
deleted file mode 100644
index f53ee1e1f26f7..0000000000000
Binary files a/massmeta/icons/mob/darkspawn_hud.dmi and /dev/null differ
diff --git a/massmeta/icons/mob/darkspawn_progenitor.dmi b/massmeta/icons/mob/darkspawn_progenitor.dmi
deleted file mode 100644
index 1e5bb2cac9a2f..0000000000000
Binary files a/massmeta/icons/mob/darkspawn_progenitor.dmi and /dev/null differ
diff --git a/massmeta/icons/mob/inhands/antag/darkspawn_lefthand.dmi b/massmeta/icons/mob/inhands/antag/darkspawn_lefthand.dmi
deleted file mode 100644
index a7da23303f58b..0000000000000
Binary files a/massmeta/icons/mob/inhands/antag/darkspawn_lefthand.dmi and /dev/null differ
diff --git a/massmeta/icons/mob/inhands/antag/darkspawn_righthand.dmi b/massmeta/icons/mob/inhands/antag/darkspawn_righthand.dmi
deleted file mode 100644
index 7c327f39eb911..0000000000000
Binary files a/massmeta/icons/mob/inhands/antag/darkspawn_righthand.dmi and /dev/null differ
diff --git a/massmeta/icons/mob/mob.dmi b/massmeta/icons/mob/mob.dmi
deleted file mode 100644
index dbe40fd3ac83c..0000000000000
Binary files a/massmeta/icons/mob/mob.dmi and /dev/null differ
diff --git a/massmeta/icons/mob/screen_alert.dmi b/massmeta/icons/mob/screen_alert.dmi
deleted file mode 100644
index 7accc4ac3aa0c..0000000000000
Binary files a/massmeta/icons/mob/screen_alert.dmi and /dev/null differ
diff --git a/massmeta/icons/mob/screen_gen.dmi b/massmeta/icons/mob/screen_gen.dmi
deleted file mode 100644
index fd1182c1d325f..0000000000000
Binary files a/massmeta/icons/mob/screen_gen.dmi and /dev/null differ
diff --git a/massmeta/icons/mob/species/darkspawn/darkspawn_parts.dmi b/massmeta/icons/mob/species/darkspawn/darkspawn_parts.dmi
deleted file mode 100644
index 19bfedfd84944..0000000000000
Binary files a/massmeta/icons/mob/species/darkspawn/darkspawn_parts.dmi and /dev/null differ
diff --git a/massmeta/icons/obj/darkspawn_items.dmi b/massmeta/icons/obj/darkspawn_items.dmi
deleted file mode 100644
index f5cff3fae4492..0000000000000
Binary files a/massmeta/icons/obj/darkspawn_items.dmi and /dev/null differ
diff --git a/massmeta/includes.dm b/massmeta/includes.dm
index bd6b4dc8bb405..dabc07a7575d9 100644
--- a/massmeta/includes.dm
+++ b/massmeta/includes.dm
@@ -2,7 +2,6 @@
#include "code\_globalvars\lists\names.dm"
#include "code\__HELPERS\names.dm"
#include "interface\interface.dm"
-#include "code\_globalvars\lists\game_modes.dm"
#include "code\modules\clothing\clothing.dm"
#include "code\modules\reagents\chemistry\drinks.dm"
#include "code\modules\reagents\containers\cups.dm"
@@ -29,52 +28,6 @@
#include "code\modules\antags\uplink_items.dm"
#include "code\obj\items\clothing\belt.dm"
#include "code\modules\announcers.dm"
-#include "code\modules\surgery\organs\bodyparts\species_parts\misc_bodyparts.dm"
-#include "code\modules\projectiles\projectile\special\curse.dm"
-#include "code\modules\movespeed\modifiers\status_effects.dm"
-#include "code\modules\actionspeed\modifiers\status_effects.dm"
-#include "code\datums\status_effects\debuffs\debuffs.dm"
-#include "code\datums\status_effects\debuffs\broken_will.dm"
-#include "code\datums\status_effects\neutral.dm"
-#include "code\datums\status_effects\buffs.dm"
-#include "code\datums\mood_events\generic_positive_events.dm"
-#include "code\datums\saymode.dm"
-#include "code\modules\antagonists\darkspawn\crawling_shadows.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_ability.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_progenitor.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_species.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_upgrade.dm"
-#include "code\modules\antagonists\darkspawn\hud.dm"
-#include "code\modules\antagonists\darkspawn\looping_sounds.dm"
-#include "code\modules\antagonists\darkspawn\veil.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\__psi_web.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\_divulge.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\_sacrament.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\crawling_shadows.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\creep.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\demented_outburst.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\devour_will.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\pass.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\silver_tongue.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\simulacrum.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\tagalong.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\time_dilation.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\veil_mind.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_abilities\shadow_dance.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_objects\dark_bead.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_objects\psionic_barrier.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_objects\simulacrum.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_objects\umbral_tendrils.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_organs.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_upgrades\dark_healing.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_upgrades\light_resistance.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_upgrades\psi_cap.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_upgrades\psi_regen.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_upgrades\spacewalking.dm"
-#include "code\modules\antagonists\darkspawn\darkspawn_upgrades\twin_tendrils.dm"
-#include "code\modules\dynamic_rulesets\darkspawn_ruleset.dm"
-#include "code\modules\languages\darkspeak.dm"
#include "code\modules\reagents\chemistry\reagents\nitrium.dm"
#include "code\game\objects\items\maintenance_loot.dm"
#include "code\modules\mob\living\simple_animal\hostile\megafauna\colossus.dm"
diff --git a/massmeta/sounds/ambience/antag/become_veil.ogg b/massmeta/sounds/ambience/antag/become_veil.ogg
deleted file mode 100644
index de8379d2cbd16..0000000000000
Binary files a/massmeta/sounds/ambience/antag/become_veil.ogg and /dev/null differ
diff --git a/massmeta/sounds/ambience/antag/darkspawn.ogg b/massmeta/sounds/ambience/antag/darkspawn.ogg
deleted file mode 100644
index de8379d2cbd16..0000000000000
Binary files a/massmeta/sounds/ambience/antag/darkspawn.ogg and /dev/null differ
diff --git a/massmeta/sounds/ambience/antag/veil_mind_gasp.ogg b/massmeta/sounds/ambience/antag/veil_mind_gasp.ogg
deleted file mode 100644
index cdcc26ea38717..0000000000000
Binary files a/massmeta/sounds/ambience/antag/veil_mind_gasp.ogg and /dev/null differ
diff --git a/massmeta/sounds/ambience/antag/veil_mind_scream.ogg b/massmeta/sounds/ambience/antag/veil_mind_scream.ogg
deleted file mode 100644
index 2b49bdfb8c7ca..0000000000000
Binary files a/massmeta/sounds/ambience/antag/veil_mind_scream.ogg and /dev/null differ
diff --git a/massmeta/sounds/creatures/crawlingshadows/crawling_shadows_walk_01.ogg b/massmeta/sounds/creatures/crawlingshadows/crawling_shadows_walk_01.ogg
deleted file mode 100644
index a3b53c4ef4049..0000000000000
Binary files a/massmeta/sounds/creatures/crawlingshadows/crawling_shadows_walk_01.ogg and /dev/null differ
diff --git a/massmeta/sounds/creatures/crawlingshadows/crawling_shadows_walk_02.ogg b/massmeta/sounds/creatures/crawlingshadows/crawling_shadows_walk_02.ogg
deleted file mode 100644
index 65f14e622a0b7..0000000000000
Binary files a/massmeta/sounds/creatures/crawlingshadows/crawling_shadows_walk_02.ogg and /dev/null differ
diff --git a/massmeta/sounds/creatures/crawlingshadows/crawling_shadows_walk_03.ogg b/massmeta/sounds/creatures/crawlingshadows/crawling_shadows_walk_03.ogg
deleted file mode 100644
index d4affc1ec4127..0000000000000
Binary files a/massmeta/sounds/creatures/crawlingshadows/crawling_shadows_walk_03.ogg and /dev/null differ
diff --git a/massmeta/sounds/creatures/darkspawn_death.ogg b/massmeta/sounds/creatures/darkspawn_death.ogg
deleted file mode 100644
index a46a95ef85c89..0000000000000
Binary files a/massmeta/sounds/creatures/darkspawn_death.ogg and /dev/null differ
diff --git a/massmeta/sounds/creatures/darkspawn_force_divulge.ogg b/massmeta/sounds/creatures/darkspawn_force_divulge.ogg
deleted file mode 100644
index 9413832011c16..0000000000000
Binary files a/massmeta/sounds/creatures/darkspawn_force_divulge.ogg and /dev/null differ
diff --git a/massmeta/sounds/creatures/darkspawn_howl.ogg b/massmeta/sounds/creatures/darkspawn_howl.ogg
deleted file mode 100644
index 2b49bdfb8c7ca..0000000000000
Binary files a/massmeta/sounds/creatures/darkspawn_howl.ogg and /dev/null differ
diff --git a/massmeta/sounds/creatures/progenitor_attack.ogg b/massmeta/sounds/creatures/progenitor_attack.ogg
deleted file mode 100644
index df36a2e212a85..0000000000000
Binary files a/massmeta/sounds/creatures/progenitor_attack.ogg and /dev/null differ
diff --git a/massmeta/sounds/creatures/progenitor_distant.ogg b/massmeta/sounds/creatures/progenitor_distant.ogg
deleted file mode 100644
index f5bb61dc10b10..0000000000000
Binary files a/massmeta/sounds/creatures/progenitor_distant.ogg and /dev/null differ
diff --git a/massmeta/sounds/creatures/progenitor_roar.ogg b/massmeta/sounds/creatures/progenitor_roar.ogg
deleted file mode 100644
index 04d9d4bddb147..0000000000000
Binary files a/massmeta/sounds/creatures/progenitor_roar.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/demented_outburst_charge.ogg b/massmeta/sounds/magic/demented_outburst_charge.ogg
deleted file mode 100644
index 1ffb667c7cf0b..0000000000000
Binary files a/massmeta/sounds/magic/demented_outburst_charge.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/demented_outburst_scream.ogg b/massmeta/sounds/magic/demented_outburst_scream.ogg
deleted file mode 100644
index e83115df42675..0000000000000
Binary files a/massmeta/sounds/magic/demented_outburst_scream.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/devour_will.ogg b/massmeta/sounds/magic/devour_will.ogg
deleted file mode 100644
index e7d7af8581d7d..0000000000000
Binary files a/massmeta/sounds/magic/devour_will.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/devour_will_begin.ogg b/massmeta/sounds/magic/devour_will_begin.ogg
deleted file mode 100644
index 91f5c92319b1e..0000000000000
Binary files a/massmeta/sounds/magic/devour_will_begin.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/devour_will_end.ogg b/massmeta/sounds/magic/devour_will_end.ogg
deleted file mode 100644
index 4316a80bffb54..0000000000000
Binary files a/massmeta/sounds/magic/devour_will_end.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/devour_will_form.ogg b/massmeta/sounds/magic/devour_will_form.ogg
deleted file mode 100644
index fb740ab16b08f..0000000000000
Binary files a/massmeta/sounds/magic/devour_will_form.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/devour_will_long.ogg b/massmeta/sounds/magic/devour_will_long.ogg
deleted file mode 100644
index cb7945c5f238d..0000000000000
Binary files a/massmeta/sounds/magic/devour_will_long.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/devour_will_victim.ogg b/massmeta/sounds/magic/devour_will_victim.ogg
deleted file mode 100644
index b66f8c23079cf..0000000000000
Binary files a/massmeta/sounds/magic/devour_will_victim.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/divulge_01.ogg b/massmeta/sounds/magic/divulge_01.ogg
deleted file mode 100644
index 280ce9b2db0b2..0000000000000
Binary files a/massmeta/sounds/magic/divulge_01.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/divulge_02.ogg b/massmeta/sounds/magic/divulge_02.ogg
deleted file mode 100644
index 927adb8e64520..0000000000000
Binary files a/massmeta/sounds/magic/divulge_02.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/divulge_03.ogg b/massmeta/sounds/magic/divulge_03.ogg
deleted file mode 100644
index ec1f2959737f1..0000000000000
Binary files a/massmeta/sounds/magic/divulge_03.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/divulge_end.ogg b/massmeta/sounds/magic/divulge_end.ogg
deleted file mode 100644
index 6a43af7b09361..0000000000000
Binary files a/massmeta/sounds/magic/divulge_end.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/divulge_ending.ogg b/massmeta/sounds/magic/divulge_ending.ogg
deleted file mode 100644
index 328c2afc6f0b3..0000000000000
Binary files a/massmeta/sounds/magic/divulge_ending.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/pass_attack.ogg b/massmeta/sounds/magic/pass_attack.ogg
deleted file mode 100644
index b54fe8988ec14..0000000000000
Binary files a/massmeta/sounds/magic/pass_attack.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/pass_create.ogg b/massmeta/sounds/magic/pass_create.ogg
deleted file mode 100644
index 2de6eba44c41f..0000000000000
Binary files a/massmeta/sounds/magic/pass_create.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/pass_dispel.ogg b/massmeta/sounds/magic/pass_dispel.ogg
deleted file mode 100644
index d55c6d81410d4..0000000000000
Binary files a/massmeta/sounds/magic/pass_dispel.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/pass_grab.ogg b/massmeta/sounds/magic/pass_grab.ogg
deleted file mode 100644
index 2a84452baa83c..0000000000000
Binary files a/massmeta/sounds/magic/pass_grab.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/pass_smash_door.ogg b/massmeta/sounds/magic/pass_smash_door.ogg
deleted file mode 100644
index 35ec82b7b0ce5..0000000000000
Binary files a/massmeta/sounds/magic/pass_smash_door.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/sacrament_01.ogg b/massmeta/sounds/magic/sacrament_01.ogg
deleted file mode 100644
index 0e3d5c775d00e..0000000000000
Binary files a/massmeta/sounds/magic/sacrament_01.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/sacrament_02.ogg b/massmeta/sounds/magic/sacrament_02.ogg
deleted file mode 100644
index 54dca65528b3e..0000000000000
Binary files a/massmeta/sounds/magic/sacrament_02.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/sacrament_begin.ogg b/massmeta/sounds/magic/sacrament_begin.ogg
deleted file mode 100644
index d4eabc83321cb..0000000000000
Binary files a/massmeta/sounds/magic/sacrament_begin.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/sacrament_complete.ogg b/massmeta/sounds/magic/sacrament_complete.ogg
deleted file mode 100644
index 910afc793f4e3..0000000000000
Binary files a/massmeta/sounds/magic/sacrament_complete.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/sacrament_ending.ogg b/massmeta/sounds/magic/sacrament_ending.ogg
deleted file mode 100644
index 8efd0ce27980b..0000000000000
Binary files a/massmeta/sounds/magic/sacrament_ending.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/sacrament_heartbeat_01.ogg b/massmeta/sounds/magic/sacrament_heartbeat_01.ogg
deleted file mode 100644
index a3b631156bdab..0000000000000
Binary files a/massmeta/sounds/magic/sacrament_heartbeat_01.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/sacrament_heartbeat_02.ogg b/massmeta/sounds/magic/sacrament_heartbeat_02.ogg
deleted file mode 100644
index 26358b7659c34..0000000000000
Binary files a/massmeta/sounds/magic/sacrament_heartbeat_02.ogg and /dev/null differ
diff --git a/massmeta/sounds/magic/sacrament_heartbeat_03.ogg b/massmeta/sounds/magic/sacrament_heartbeat_03.ogg
deleted file mode 100644
index 70fa76d29910f..0000000000000
Binary files a/massmeta/sounds/magic/sacrament_heartbeat_03.ogg and /dev/null differ
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
index cb31380df579e..0d62901c17a9a 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
@@ -475,10 +475,6 @@ em {
color: #ff5050;
}
-.velvet {
- color: #dfafb4;
-}
-
.info {
color: #9ab0ff;
}
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
index 61cdf4991bc86..759b07cfbd85e 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
@@ -507,10 +507,6 @@ h2.alert {
color: #ff5050;
}
-.velvet {
- color: #631f3a;
-}
-
.info {
color: #0000cc;
}
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/darkspawn.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/darkspawn.ts
deleted file mode 100644
index a19787ee311f6..0000000000000
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/darkspawn.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { Antagonist, Category } from "../base";
-import { multiline } from "common/string";
-
-export const DARKSPAWN_MECHANICAL_DESCRIPTION
- = multiline`
- Finish what you and your fellow kin started eons ago.
- Ascend to godhood with two others by harvesting the sparks of the infirm.
- The sigils hunger, and you must respond.
- `;
-
-
-const Darkspawn: Antagonist = {
- key: "darkspawn",
- name: "Darkspawn",
- description: [
- multiline`
- It’s hard to recall what you once were. Star cycles passed again and again as you slumbered in the Void.
- Eventually, the emptiness touched something.
- You fabricated a shoddy disguise from your first victim, and now countless minds tug at your attention.
- `,
- DARKSPAWN_MECHANICAL_DESCRIPTION,
- ],
- category: Category.Roundstart,
- priority: -1,
-};
-
-export default Darkspawn;
diff --git a/tgui/packages/tgui/interfaces/PsiWeb.jsx b/tgui/packages/tgui/interfaces/PsiWeb.jsx
deleted file mode 100644
index 24dcdebcc248a..0000000000000
--- a/tgui/packages/tgui/interfaces/PsiWeb.jsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import { useBackend } from '../backend';
-import { Button, LabeledList, Section, Box } from '../components';
-import { Window } from '../layouts';
-
-export const PsiWeb = (props, context) => {
- const { act, data } = useBackend(context);
- return (
-
-
-
-
-
- {data.lucidity}
-
-
-
-
-
- {data.abilities.map(ability => (
-
-
- {ability.desc}
- Psi use cost: {ability.psi_cost}
- Cost to unlock: {ability.lucidity_cost}
-
- ))}
-
-
-
-
- {data.upgrades.map(upgrade => (
-
-
- {upgrade.desc}
- Cost to unlock: {upgrade.lucidity_cost}
-
- ))}
-
-
-
-
- );
-};