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 ^![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} -
-
-
- ); -};