Heretic DLC: Path of Moon (#79536)
## About The Pull Request
This pull request adds a new path.
The cross path is between ash and lock.
Credit to Fury McFlurry for the following sprites:
ring_leader_effect
The path goes as follows:
Moonlight Troupe
Grasp of Lunacy
Smile of the moon
> Sidepaths:
Mind Gate
Ashen Eyes
Mark of Moon
Ritual of Knowledge
Lunar Parade
Moonlight Amulette
> Sidepaths:
Curse of Paralasys
Unfathomable Curio
Unsealed Arts
Moonlight blade
Ringleaders Rise
> Sidepaths:
Ashen Ritual
Last Act
Moonlight Troupe:
The first knowledge of path of moon, lets you make Lunar Blades with 2
iron and a knife
Grasp of Lunacy:
The grasp of this path hides your name for 15 seconds after use, but
more importantly it causes the person hit with the grasp
to hallucinate everyone as indistinct human like figures.
Smile of the Moon:
A pointed spell that causes temporary blinding, muting, deafening and
confusing on the person its targeted at, these effects
last longer the less sanity your victim has.
https://github.com/tgstation/tgstation/assets/120136161/db7cfaaa-8fe2-4f20-aa78-c17c17be4d63
Mindgate:
Lock-Moon. This spell causes you and your victim brain damage, the
victim also suffers a short amount of hallucinations
and also 20 oxyloss.
https://github.com/tgstation/tgstation/assets/120136161/11d15acd-11d0-4e7d-a180-6481b18e9fd9
Mark of Moon:
When applied this paths mark pacifies the victim and they remain
pacifist until attacked or until the mark is detonated, when
detonated the victim is left confused.
https://github.com/tgstation/tgstation/assets/120136161/41e601b5-76d4-4765-8b49-ada7de09feb7
Lunar Parade:
A spell that sends out a projectile that causes people hit by it to
follow the projectile whilst being unable to move. The
projectile also bounces around and is really useful to get people off
your back during chases.
https://github.com/tgstation/tgstation/assets/120136161/cddc8390-e8aa-4d68-b1a5-ab181e941a9b
Unfathomable Curio:
Transmute 3 rods, a brain and a belt into an Unfathomable Curio a belt
that can hold blades and items for rituals. Whilst worn
will also veil the heretic, allowing them to take 1 hit without
suffering damage, this veil will recharge quickly outside of
combat. If examined the examiner suffers brain damage and temporary
brain damage, and if a non-heretic uses it once the shield is damaged
the non-heretic user suffers massive brain damage and a permanent
uncurbable brain trauma. Lock-moon
Unsealed Arts:
Allows you to transmute a canvas and an additional item to create a
piece of art, these paintings have different effects depending on the
additional item added. Lock-moon
Possible paintings:
The sister and He Who Wept:
Additional atoms: Eyes.
When a non-heretic looks at the painting they will begin to hallucinate
everyone as heretics.
The First Desire:
Additional atoms: Any bodypart.
Increases the hunger of non-heretics, when examined drops an organ or
body part at the painting.
Great chaparral over rolling hills:
Additional atoms: Any grown food.
Spreads kudzu when placed, when examined grants a flower to the heretic.
Lady out of gates:
Additional atoms: Gloves.
Causes non-heretics to scratch themselves until they remove their
jumpsuit, when examined removes all your mutations.
Climb over the rusted mountain:
Additional atoms: Trash.
Causes non-heretics to rust the floor they walk on and when examined
gives you a cool moodlet
These effects are mitigated for a few minutes when a non-heretic
suffering an effect examines the painting that caused the
effect. Except for great chapparal which spawns kudzu at their feet, and
Lady out of gates which gives them a random negative mutation.
https://github.com/tgstation/tgstation/assets/120136161/1d1bdd2f-cda5-4430-b3af-4742f98a59a8
https://github.com/tgstation/tgstation/assets/120136161/4e843ae4-9786-4e9b-8681-582713f4c789
Moonlight Amulette:
Allows the heretic to transmute 2 sheets of glass, a pair of eyes, a
brain and a tie. If the amulette is used on someone with low
sanity they go berserk attacking everyone if their sanity isnt low
enough it decreases their mood. Optionally you can add a
poppy in the ritual to further decrease their mood on hit.
https://github.com/tgstation/tgstation/assets/120136161/ab820b3f-e7e6-407a-9a1a-93d49c0d7387
Moonlight Blade:
Causes the heretics blades to do brain and sanity damage whilst causing
hallucinations. The blades also cause giggling and
laughter on hit.
Ringleaders Rise:
An AoE spell that deals more brain damage the lower the sanity of the
victim, also causes hallucinations that last longer the
lower the sanity of the victim. If the victims sanity is low enoughit
causes them to go insane, the spell then halves their sanity.
This spell is on a longer cooldown and is more meant to be used as a
payoff or an instigator for a fight. The AoE area is 7 tiles
https://github.com/tgstation/tgstation/assets/120136161/4de85ba2-448a-485c-b739-77fcce86c0cb
Last Act:
The ascension lowers the cooldown of all the heretics spells by 33% and
increases the AoE range of Ringleaders Rise. The main
effect of this ascension is a passive sanity drain and hallucination
aura, if you have low sanity in the aura you will start to suffer
brain damage and if you reach the bottom you gain an aura of
hallucinations thus spreading the moon heretics influence
further. Not only that but roughly 1/5th of the crew will rise in
support of you becoming mini-heretics called acolytes that will attempt
to obey your commands!
I had videos showing off everything but they were too big for github
sadly so I will have to think of some other way to showcase all this
stuff.
This pr also adds a new optional atoms system which means that you can
have rituals that can be improved by adding additional atoms, like for
example moonlight amulette.
Feel free to give some suggestions for further ascension effects.
## Why It's Good For The Game
I feel like heretic is really missing a playstyle around insanity and
this slots neatly in to feel that gap. For being an eldritch antag of
horrors there is surprisingly little interaction with the sanity system
and I feel like this makes up for it, heretic is also missing some
distractions which is where the paintings can really shine and the
hallucinations which breed paranoia.
## Changelog
🆑
add: A new heretic path opens up! Gaze up at the great sky for the path
of the moon opens and the lie shall be slain in pursuit of ultimate
truth!
fix: Fixes the syndicate delusion not working
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
@@ -42,6 +42,7 @@
|
||||
#define MEDAL_BLADE_ASCENSION "Blade"
|
||||
#define MEDAL_COSMOS_ASCENSION "Cosmos"
|
||||
#define MEDAL_LOCK_ASCENSION "Knock"
|
||||
#define MEDAL_MOON_ASCENSION "Moon"
|
||||
#define MEDAL_TOOLBOX_SOUL "Toolsoul"
|
||||
#define MEDAL_HOT_DAMN "Hot Damn!"
|
||||
#define MEDAL_CAYENNE_DISK "Very Important Piscis"
|
||||
|
||||
@@ -84,6 +84,7 @@
|
||||
#define PATH_BLADE "Blade Path"
|
||||
#define PATH_COSMIC "Cosmic Path"
|
||||
#define PATH_LOCK "Lock Path"
|
||||
#define PATH_MOON "Moon Path"
|
||||
|
||||
/// Defines are used in /proc/has_living_heart() to report if the heretic has no heart period, no living heart, or has a living heart.
|
||||
#define HERETIC_NO_HEART_ORGAN -1
|
||||
@@ -222,8 +223,10 @@ GLOBAL_LIST_INIT(ai_employers, list(
|
||||
#define IS_HERETIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic))
|
||||
/// Check if the given mob is a heretic monster.
|
||||
#define IS_HERETIC_MONSTER(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic_monster))
|
||||
/// Checks if the given mob is either a heretic or a heretic monster.
|
||||
#define IS_HERETIC_OR_MONSTER(mob) (IS_HERETIC(mob) || IS_HERETIC_MONSTER(mob))
|
||||
/// Check if the given mob is a lunatic
|
||||
#define IS_LUNATIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/lunatic))
|
||||
/// Checks if the given mob is either a heretic, heretic monster or a lunatic.
|
||||
#define IS_HERETIC_OR_MONSTER(mob) (IS_HERETIC(mob) || IS_HERETIC_MONSTER(mob) || IS_LUNATIC(mob))
|
||||
|
||||
/// Checks if the given mob is a wizard
|
||||
#define IS_WIZARD(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/wizard))
|
||||
|
||||
@@ -1022,6 +1022,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
/// Trait given to foam darts that have an insert in them
|
||||
#define TRAIT_DART_HAS_INSERT "dart_has_insert"
|
||||
|
||||
/// Trait determines if this mob has examined an eldritch painting
|
||||
#define TRAIT_ELDRITCH_PAINTING_EXAMINE "eldritch_painting_examine"
|
||||
|
||||
/// Trait used by the /datum/brain_trauma/severe/flesh_desire trauma to change their preferences of what they eat
|
||||
#define TRAIT_FLESH_DESIRE "flesh_desire"
|
||||
|
||||
///Trait granted by janitor skillchip, allows communication with cleanbots
|
||||
#define TRAIT_CLEANBOT_WHISPERER "cleanbot_whisperer"
|
||||
|
||||
|
||||
@@ -183,6 +183,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
"TRAIT_EASYBLEED" = TRAIT_EASYBLEED,
|
||||
"TRAIT_ECHOLOCATION_EXTRA_RANGE" = TRAIT_ECHOLOCATION_EXTRA_RANGE,
|
||||
"TRAIT_ECHOLOCATION_RECEIVER" = TRAIT_ECHOLOCATION_RECEIVER,
|
||||
"TRAIT_ELDRITCH_PAINTING_EXAMINE" = TRAIT_ELDRITCH_PAINTING_EXAMINE,
|
||||
"TRAIT_ELITE_CHALLENGER" = TRAIT_ELITE_CHALLENGER,
|
||||
"TRAIT_EMOTEMUTE " = TRAIT_EMOTEMUTE,
|
||||
"TRAIT_EMOTEMUTE" = TRAIT_EMOTEMUTE,
|
||||
@@ -200,6 +201,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
"TRAIT_FIST_MINING" = TRAIT_FIST_MINING,
|
||||
"TRAIT_FIXED_HAIRCOLOR" = TRAIT_FIXED_HAIRCOLOR,
|
||||
"TRAIT_FIXED_MUTANT_COLORS" = TRAIT_FIXED_MUTANT_COLORS,
|
||||
"TRAIT_FLESH_DESIRE" = TRAIT_FLESH_DESIRE,
|
||||
"TRAIT_FLOORED" = TRAIT_FLOORED,
|
||||
"TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION" = TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION,
|
||||
"TRAIT_FORCED_GRAVITY" = TRAIT_FORCED_GRAVITY,
|
||||
|
||||
@@ -223,3 +223,4 @@
|
||||
icon_state = "noise"
|
||||
color = "#04a8d1"
|
||||
alpha = 80
|
||||
|
||||
|
||||
@@ -141,6 +141,12 @@
|
||||
database_id = MEDAL_LOCK_ASCENSION
|
||||
icon = "lockascend"
|
||||
|
||||
/datum/award/achievement/misc/moon_ascension
|
||||
name = "The Last Act"
|
||||
desc = "You managed to become the ringleader and slay the lie."
|
||||
database_id = MEDAL_MOON_ASCENSION
|
||||
icon = "moonascend"
|
||||
|
||||
/datum/award/achievement/misc/grand_ritual_finale
|
||||
name = "Archmage"
|
||||
desc = "Made a big impression on the station with your phenomenal cosmic power."
|
||||
|
||||
@@ -330,3 +330,104 @@
|
||||
/datum/brain_trauma/severe/dyslexia/on_lose()
|
||||
REMOVE_TRAIT(owner, TRAIT_ILLITERATE, TRAUMA_TRAIT)
|
||||
..()
|
||||
|
||||
/*
|
||||
* Brain traumas that eldritch paintings apply
|
||||
* This one is for "The Sister and He Who Wept" or /obj/structure/sign/painting/eldritch
|
||||
*/
|
||||
/datum/brain_trauma/severe/weeping
|
||||
name = "The Weeping"
|
||||
desc = "Patient hallucinates everyone as a figure called He Who Wept"
|
||||
scan_desc = "H_E##%%%WEEP6%11S!!,)()"
|
||||
gain_text = span_warning("HE WEEPS AND I WILL SEE HIM ONCE MORE")
|
||||
lose_text = span_notice("You feel the tendrils of something slip from your mind.")
|
||||
random_gain = FALSE
|
||||
/// Our cooldown declare for causing hallucinations
|
||||
COOLDOWN_DECLARE(weeping_hallucinations)
|
||||
|
||||
/datum/brain_trauma/severe/weeping/on_life(seconds_per_tick, times_fired)
|
||||
if(owner.stat != CONSCIOUS || owner.IsSleeping() || owner.IsUnconscious())
|
||||
return
|
||||
// If they have examined a painting recently
|
||||
if(HAS_TRAIT(owner, TRAIT_ELDRITCH_PAINTING_EXAMINE))
|
||||
return
|
||||
if(!COOLDOWN_FINISHED(src, weeping_hallucinations))
|
||||
return
|
||||
owner.cause_hallucination(/datum/hallucination/delusion/preset/heretic, "Caused by The Weeping brain trauma")
|
||||
owner.add_mood_event("eldritch_weeping", /datum/mood_event/eldritch_painting/weeping)
|
||||
COOLDOWN_START(src, weeping_hallucinations, 10 SECONDS)
|
||||
..()
|
||||
|
||||
//This one is for "The First Desire" or /obj/structure/sign/painting/eldritch/desire
|
||||
/datum/brain_trauma/severe/flesh_desire
|
||||
name = "The Desire for Flesh"
|
||||
desc = "Patient appears hungrier and only wishes to eat meats."
|
||||
scan_desc = "H_(82882)G3E:__))9R"
|
||||
gain_text = span_warning("I feel a hunger, only organs and flesh will feed it...")
|
||||
lose_text = span_notice("You no longer feel the hunger for flesh...")
|
||||
random_gain = FALSE
|
||||
/// How much faster we loose hunger
|
||||
var/hunger_rate = 15
|
||||
|
||||
/datum/brain_trauma/severe/flesh_desire/on_gain()
|
||||
// Allows them to eat faster, mainly for flavor
|
||||
ADD_TRAIT(owner, TRAIT_VORACIOUS, REF(src))
|
||||
ADD_TRAIT(owner, TRAIT_FLESH_DESIRE, REF(src))
|
||||
..()
|
||||
|
||||
/datum/brain_trauma/severe/flesh_desire/on_life(seconds_per_tick, times_fired)
|
||||
// Causes them to need to eat at 10x the normal rate
|
||||
owner.adjust_nutrition(-hunger_rate * HUNGER_FACTOR)
|
||||
if(SPT_PROB(10, seconds_per_tick))
|
||||
to_chat(owner, span_notice("You feel a ravenous hunger for flesh..."))
|
||||
owner.overeatduration = max(owner.overeatduration - 200 SECONDS, 0)
|
||||
|
||||
/datum/brain_trauma/severe/flesh_desire/on_lose()
|
||||
REMOVE_TRAIT(owner, TRAIT_VORACIOUS, REF(src))
|
||||
REMOVE_TRAIT(owner, TRAIT_FLESH_DESIRE, REF(src))
|
||||
return ..()
|
||||
|
||||
// This one is for "Lady out of gates" or /obj/item/wallframe/painting/eldritch/beauty
|
||||
/datum/brain_trauma/severe/eldritch_beauty
|
||||
name = "The Pursuit of Perfection"
|
||||
desc = "Patient seems to furiously scratch at their body, the only way to make them cease is for them to remove their jumpsuit."
|
||||
scan_desc = "I_)8(P_E##R&&F(E)C__T)"
|
||||
gain_text = span_warning("I WILL RID MY FLESH FROM IMPERFECTION!! I WILL BE PERFECT WITHOUT MY SUITS!!")
|
||||
lose_text = span_notice("You feel the influence of something slip your mind, and you feel content as you are.")
|
||||
random_gain = FALSE
|
||||
/// How much damage we deal with each scratch
|
||||
var/scratch_damage = 0.5
|
||||
|
||||
/datum/brain_trauma/severe/eldritch_beauty/on_life(seconds_per_tick, times_fired)
|
||||
// Jumpsuits ruin the "perfection" of the body
|
||||
if(!owner.get_item_by_slot(ITEM_SLOT_ICLOTHING))
|
||||
return
|
||||
|
||||
// Scratching code
|
||||
var/obj/item/bodypart/bodypart = owner.get_bodypart(owner.get_random_valid_zone(even_weights = TRUE))
|
||||
if(!(bodypart && IS_ORGANIC_LIMB(bodypart)) && bodypart.bodypart_flags & BODYPART_PSEUDOPART)
|
||||
return
|
||||
if(owner.incapacitated())
|
||||
return
|
||||
bodypart.receive_damage(scratch_damage)
|
||||
if(SPT_PROB(33, seconds_per_tick))
|
||||
to_chat(owner, span_notice("You scratch furiously at [bodypart] to ruin the cloth that hides the beauty!"))
|
||||
|
||||
// This one is for "Climb over the rusted mountain" or /obj/structure/sign/painting/eldritch/rust
|
||||
/datum/brain_trauma/severe/rusting
|
||||
name = "The Rusted Climb"
|
||||
desc = "Patient seems to oxidise things around them at random, and seem to believe they are aiding a creature in climbing a mountin."
|
||||
scan_desc = "C_)L(#_I_##M;B"
|
||||
gain_text = span_warning("The rusted climb shall finish at the peak")
|
||||
lose_text = span_notice("The rusted climb? Whats that? An odd dream to be sure.")
|
||||
random_gain = FALSE
|
||||
|
||||
/datum/brain_trauma/severe/rusting/on_life(seconds_per_tick, times_fired)
|
||||
var/atom/tile = get_turf(owner)
|
||||
// Examining a painting should stop this effect to give counterplay
|
||||
if(HAS_TRAIT(owner, TRAIT_ELDRITCH_PAINTING_EXAMINE))
|
||||
return
|
||||
|
||||
if(SPT_PROB(50, seconds_per_tick))
|
||||
to_chat(owner, span_notice("You feel eldritch energies pulse from your body!"))
|
||||
tile.rust_heretic_act()
|
||||
|
||||
@@ -8,3 +8,4 @@
|
||||
use_reverb = FALSE
|
||||
direct = TRUE
|
||||
sound_channel = CHANNEL_ELEVATOR
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
/datum/looping_sound/moon_parade
|
||||
mid_sounds = list('sound/effects/moon_parade_soundloop.ogg' = 1)
|
||||
mid_length = 0
|
||||
volume = 20
|
||||
@@ -0,0 +1,48 @@
|
||||
// These mood events are related to /obj/structure/sign/painting/eldritch
|
||||
// Names are based on the subtype of painting they belong to
|
||||
|
||||
// Mood applied for ripping the painting
|
||||
/datum/mood_event/eldritch_painting
|
||||
description = "YOU, I SHOULD NOT HAVE DONE THAT!!!"
|
||||
mood_change = -6
|
||||
timeout = 3 MINUTES
|
||||
|
||||
/datum/mood_event/eldritch_painting/weeping
|
||||
description = "HE IS HERE, AND HE WEEPS!"
|
||||
mood_change = -3
|
||||
timeout = 11 SECONDS
|
||||
|
||||
/datum/mood_event/eldritch_painting/weeping_heretic
|
||||
description = "Oh such arts! They truly inspire me!"
|
||||
mood_change = 5
|
||||
timeout = 3 MINUTES
|
||||
|
||||
/datum/mood_event/eldritch_painting/weeping_withdrawl
|
||||
description = "My mind is clear from his influence."
|
||||
mood_change = 1
|
||||
timeout = 3 MINUTES
|
||||
|
||||
/datum/mood_event/eldritch_painting/desire_heretic
|
||||
description = "A part gained, the manus takes and gives. What did it take from me?"
|
||||
mood_change = -2
|
||||
timeout = 3 MINUTES
|
||||
|
||||
/datum/mood_event/eldritch_painting/desire_examine
|
||||
description = "A hunger kept at bay..."
|
||||
mood_change = 3
|
||||
timeout = 3 MINUTES
|
||||
|
||||
/datum/mood_event/eldritch_painting/heretic_vines
|
||||
description = "Oh what a lovely flower!"
|
||||
mood_change = 3
|
||||
timeout = 3 MINUTES
|
||||
|
||||
/datum/mood_event/eldritch_painting/rust_examine
|
||||
description = "The rusted climb can wait..."
|
||||
mood_change = -2
|
||||
timeout = 3 MINUTES
|
||||
|
||||
/datum/mood_event/eldritch_painting/rust_heretic_examine
|
||||
description = "I must hurry the rusted climb!"
|
||||
mood_change = 6
|
||||
timeout = 3 MINUTES
|
||||
@@ -440,6 +440,16 @@
|
||||
description = "I've been here too long! I want to go out and explore space!"
|
||||
mood_change = -3
|
||||
|
||||
/datum/mood_event/moon_insanity
|
||||
description = "THE MOON JUDGES AND FINDS ME WANTING!!!"
|
||||
mood_change = -3
|
||||
timeout = 5 MINUTES
|
||||
|
||||
/datum/mood_event/amulette_insanity
|
||||
description = "I sEe THe LiGHt, It mUsT BE stOPPed"
|
||||
mood_change = -6
|
||||
timeout = 5 MINUTES
|
||||
|
||||
///Wizard cheesy grand finale - what everyone but the wizard gets
|
||||
/datum/mood_event/madness_despair
|
||||
description = "UNWORTHY, UNWORTHY, UNWORTHY!!!"
|
||||
|
||||
@@ -367,6 +367,11 @@
|
||||
mood_change = 2
|
||||
timeout = 5 MINUTES
|
||||
|
||||
/datum/mood_event/moon_smile
|
||||
description = "THE MOON SHOWS ME THE TRUTH AND ITS SMILE IS FACED TOWARDS ME!!!"
|
||||
mood_change = 10
|
||||
timeout = 2 MINUTES
|
||||
|
||||
///Wizard cheesy grand finale - what the wizard gets
|
||||
/datum/mood_event/madness_elation
|
||||
description = "Madness truly is the greatest of blessings..."
|
||||
|
||||
@@ -65,7 +65,9 @@
|
||||
PATH_BLADE = "label", // my favorite color is label
|
||||
PATH_COSMIC = "purple",
|
||||
PATH_LOCK = "yellow",
|
||||
PATH_MOON = "blue",
|
||||
)
|
||||
|
||||
var/static/list/path_to_rune_color = list(
|
||||
PATH_START = COLOR_LIME,
|
||||
PATH_RUST = COLOR_CARGO_BROWN,
|
||||
@@ -75,6 +77,7 @@
|
||||
PATH_BLADE = COLOR_SILVER,
|
||||
PATH_COSMIC = COLOR_PURPLE,
|
||||
PATH_LOCK = COLOR_YELLOW,
|
||||
PATH_MOON = COLOR_BLUE_LIGHT,
|
||||
)
|
||||
|
||||
/datum/antagonist/heretic/Destroy()
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Parses specific items into a more reaadble form.
|
||||
* Parses specific items into a more readble form.
|
||||
* Can be overriden by knoweldge subtypes.
|
||||
*/
|
||||
/datum/heretic_knowledge/proc/parse_required_item(atom/item_path, number_of_things)
|
||||
@@ -126,7 +126,6 @@
|
||||
if(ispath(item_path, /mob/living))
|
||||
return "carcass[number_of_things > 1 ? "es" : ""] of any kind"
|
||||
return "[initial(item_path.name)]\s"
|
||||
|
||||
/**
|
||||
* Called whenever the knowledge's associated ritual is completed successfully.
|
||||
*
|
||||
@@ -144,6 +143,7 @@
|
||||
/datum/heretic_knowledge/proc/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
|
||||
if(!length(result_atoms))
|
||||
return FALSE
|
||||
|
||||
for(var/result in result_atoms)
|
||||
new result(loc)
|
||||
return TRUE
|
||||
@@ -181,7 +181,6 @@
|
||||
continue
|
||||
how_much_to_use = min(required_atoms[requirement], sac_stack.amount)
|
||||
break
|
||||
|
||||
sac_stack.use(how_much_to_use)
|
||||
continue
|
||||
|
||||
|
||||
@@ -0,0 +1,243 @@
|
||||
// The basic eldritch painting
|
||||
/obj/item/wallframe/painting/eldritch
|
||||
name = "The debug and a coder who slept"
|
||||
icon = 'icons/obj/signs.dmi'
|
||||
resistance_flags = FLAMMABLE
|
||||
flags_1 = NONE
|
||||
icon_state = "frame-empty"
|
||||
result_path = /obj/structure/sign/painting/eldritch
|
||||
pixel_shift = 30
|
||||
|
||||
/obj/structure/sign/painting/eldritch
|
||||
name = "The debug and a coder who slept"
|
||||
icon = 'icons/obj/signs.dmi'
|
||||
icon_state = "frame-empty"
|
||||
custom_materials = list(/datum/material/wood =SHEET_MATERIAL_AMOUNT)
|
||||
resistance_flags = FLAMMABLE
|
||||
buildable_sign = FALSE
|
||||
// The list of canvas types accepted by this frame, set to zero here
|
||||
accepted_canvas_types = list()
|
||||
// Set to false since we don't want this to persist
|
||||
persistence_id = FALSE
|
||||
/// The trauma the painting applies
|
||||
var/applied_trauma = /datum/brain_trauma/severe/pacifism
|
||||
/// The text that shows up when you cross the paintings path
|
||||
var/text_to_display = "I should not be seeing this..."
|
||||
/// The range of the paintings effect
|
||||
var/range = 7
|
||||
|
||||
/obj/structure/sign/painting/eldritch/Initialize(mapload, dir, building)
|
||||
. = ..()
|
||||
var/static/list/connections = list(COMSIG_ATOM_ENTERED = PROC_REF(apply_trauma))
|
||||
AddComponent(/datum/component/connect_range, tracked = src, connections = connections, range = range, works_in_containers = FALSE)
|
||||
|
||||
/obj/structure/sign/painting/eldritch/proc/apply_trauma(datum/source, mob/living/carbon/viewer)
|
||||
if (!isliving(viewer) || !can_see(viewer, src, range))
|
||||
return
|
||||
if (!viewer.mind || !viewer.mob_mood || viewer.stat != CONSCIOUS || viewer.is_blind())
|
||||
return
|
||||
// Certain paintings have no applied trauma, so we shouldnt do further effects if they don't
|
||||
if(!applied_trauma)
|
||||
return
|
||||
if (viewer.has_trauma_type(applied_trauma))
|
||||
return
|
||||
if(IS_HERETIC(viewer))
|
||||
return
|
||||
if(viewer.can_block_magic(MAGIC_RESISTANCE))
|
||||
return
|
||||
to_chat(viewer, span_notice(text_to_display))
|
||||
viewer.gain_trauma(applied_trauma, TRAUMA_RESILIENCE_SURGERY)
|
||||
viewer.emote("scream")
|
||||
to_chat(viewer, span_warning("As you gaze upon the painting your mind rends to its truth!"))
|
||||
|
||||
/obj/structure/sign/painting/eldritch/wirecutter_act(mob/living/user, obj/item/I)
|
||||
if(!user.can_block_magic(MAGIC_RESISTANCE))
|
||||
user.add_mood_event("ripped_eldritch_painting", /datum/mood_event/eldritch_painting)
|
||||
to_chat(user, span_notice("Laughter echoes through your mind...."))
|
||||
qdel(src)
|
||||
|
||||
// On examine eldritch paintings give a trait so their effects can not be spammed
|
||||
/obj/structure/sign/painting/eldritch/examine(mob/living/carbon/user)
|
||||
. = ..()
|
||||
if(HAS_TRAIT(user, TRAIT_ELDRITCH_PAINTING_EXAMINE))
|
||||
return
|
||||
|
||||
ADD_TRAIT(user, TRAIT_ELDRITCH_PAINTING_EXAMINE, REF(src))
|
||||
addtimer(TRAIT_CALLBACK_REMOVE(user, TRAIT_ELDRITCH_PAINTING_EXAMINE, REF(src)), 3 MINUTES)
|
||||
examine_effects(user)
|
||||
|
||||
/obj/structure/sign/painting/eldritch/proc/examine_effects(mob/living/carbon/examiner)
|
||||
if(IS_HERETIC(examiner))
|
||||
to_chat(examiner, span_notice("Oh, what arts!"))
|
||||
else
|
||||
to_chat(examiner, span_notice("Kinda strange painting."))
|
||||
|
||||
// The sister and He Who Wept eldritch painting
|
||||
/obj/item/wallframe/painting/eldritch/weeping
|
||||
name = "The sister and He Who Wept"
|
||||
desc = "A beautiful artwork depicting a fair lady and HIM, HE WEEPS, I WILL SEE HIM AGAIN."
|
||||
icon_state = "eldritch_painting_weeping"
|
||||
result_path = /obj/structure/sign/painting/eldritch/weeping
|
||||
|
||||
/obj/structure/sign/painting/eldritch/weeping
|
||||
name = "The sister and He Who Wept"
|
||||
desc = "A beautiful artwork depicting a fair lady and HIM, HE WEEPS, I WILL SEE HIM AGAIN. Destroyable with wirecutters."
|
||||
icon_state = "eldritch_painting_weeping"
|
||||
applied_trauma = /datum/brain_trauma/severe/weeping
|
||||
text_to_display = "Oh what arts! She is so fair, and he...HE WEEPS!!!"
|
||||
|
||||
/obj/structure/sign/painting/eldritch/weeping/examine_effects(mob/living/carbon/examiner)
|
||||
if(!IS_HERETIC(examiner))
|
||||
to_chat(examiner, span_notice("Respite, for now...."))
|
||||
examiner.mob_mood.mood_events.Remove("eldritch_weeping")
|
||||
examiner.add_mood_event("weeping_withdrawl", /datum/mood_event/eldritch_painting/weeping_withdrawl)
|
||||
return
|
||||
|
||||
to_chat(examiner, span_notice("Oh, what arts! Just gazing upon it clears your mind."))
|
||||
examiner.remove_status_effect(/datum/status_effect/hallucination)
|
||||
examiner.add_mood_event("heretic_eldritch_painting", /datum/mood_event/eldritch_painting/weeping_heretic)
|
||||
|
||||
// The First Desire painting, using a lot of the painting/eldritch framework
|
||||
/obj/item/wallframe/painting/eldritch/desire
|
||||
name = "The First Desire"
|
||||
desc = "A painting depicting a platter of flesh, just looking at it makes your stomach knot and mouth froth."
|
||||
icon_state = "eldritch_painting_desire"
|
||||
result_path = /obj/structure/sign/painting/eldritch/desire
|
||||
|
||||
/obj/structure/sign/painting/eldritch/desire
|
||||
name = "The First Desire"
|
||||
desc = "A painting depicting a platter of flesh, just looking at it makes your stomach knot and mouth froth. Destroyable with wirecutters."
|
||||
icon_state = "eldritch_painting_desire"
|
||||
applied_trauma = /datum/brain_trauma/severe/flesh_desire
|
||||
text_to_display = "What an artwork, just looking at it makes me hunger...."
|
||||
|
||||
// The special examine interaction for this painting
|
||||
/obj/structure/sign/painting/eldritch/desire/examine_effects(mob/living/carbon/examiner)
|
||||
if(!IS_HERETIC(examiner))
|
||||
// Gives them some nutrition
|
||||
examiner.adjust_nutrition(50)
|
||||
to_chat(examiner, warning("You feel a searing pain in your stomach!"))
|
||||
examiner.adjustOrganLoss(ORGAN_SLOT_STOMACH, 5)
|
||||
to_chat(examiner, span_notice("You feel less hungry, but more empty somehow?"))
|
||||
examiner.add_mood_event("respite_eldritch_hunger", /datum/mood_event/eldritch_painting/desire_examine)
|
||||
return
|
||||
|
||||
// A list made of the organs and bodyparts the heretic can get
|
||||
var/static/list/random_bodypart_or_organ = list(
|
||||
/obj/item/organ/internal/brain,
|
||||
/obj/item/organ/internal/lungs,
|
||||
/obj/item/organ/internal/eyes,
|
||||
/obj/item/organ/internal/ears,
|
||||
/obj/item/organ/internal/heart,
|
||||
/obj/item/organ/internal/liver,
|
||||
/obj/item/organ/internal/stomach,
|
||||
/obj/item/organ/internal/appendix,
|
||||
/obj/item/bodypart/arm/left,
|
||||
/obj/item/bodypart/arm/right,
|
||||
/obj/item/bodypart/leg/left,
|
||||
/obj/item/bodypart/leg/right
|
||||
)
|
||||
var/organ_or_bodypart_to_spawn = pick(random_bodypart_or_organ)
|
||||
new organ_or_bodypart_to_spawn(drop_location())
|
||||
to_chat(examiner, span_notice("A piece of flesh crawls out of the painting and flops onto the floor."))
|
||||
// Adds a negative mood event to our heretic
|
||||
examiner.add_mood_event("heretic_eldritch_hunger", /datum/mood_event/eldritch_painting/desire_heretic)
|
||||
|
||||
// Great chaparral over rolling hills, this one doesn't have the sensor type
|
||||
/obj/item/wallframe/painting/eldritch/vines
|
||||
name = "Great chaparral over rolling hills"
|
||||
desc = "A painting depicting a massive thicket, it seems to be attempting to crawl through the frame."
|
||||
icon_state = "eldritch_painting_vines"
|
||||
result_path = /obj/structure/sign/painting/eldritch/vines
|
||||
|
||||
/obj/structure/sign/painting/eldritch/vines
|
||||
name = "Great chaparral over rolling hills"
|
||||
desc = "A painting depicting a massive thicket, it seems to be attempting to crawl through the frame. Destroyable with wirecutters."
|
||||
icon_state = "eldritch_painting_vines"
|
||||
applied_trauma = null
|
||||
// A static list of 5 pretty strong mutations, simple to expand for any admins
|
||||
var/list/mutations = list(
|
||||
/datum/spacevine_mutation/hardened,
|
||||
/datum/spacevine_mutation/toxicity,
|
||||
/datum/spacevine_mutation/thorns,
|
||||
/datum/spacevine_mutation/fire_proof,
|
||||
/datum/spacevine_mutation/aggressive_spread,
|
||||
)
|
||||
// Poppy and harebell are used in heretic rituals
|
||||
var/list/items_to_spawn = list(
|
||||
/obj/item/food/grown/poppy,
|
||||
/obj/item/food/grown/harebell,
|
||||
)
|
||||
|
||||
/obj/structure/sign/painting/eldritch/vines/Initialize(mapload, dir, building)
|
||||
. = ..()
|
||||
new /datum/spacevine_controller(get_turf(src), mutations, 0, 10)
|
||||
|
||||
/obj/structure/sign/painting/eldritch/vines/examine_effects(mob/living/carbon/examiner)
|
||||
. = ..()
|
||||
if(!IS_HERETIC(examiner))
|
||||
new /datum/spacevine_controller(get_turf(examiner), mutations, 0, 10)
|
||||
to_chat(examiner, span_notice("The thicket crawls through the frame, and you suddenly find vines beneath you..."))
|
||||
return
|
||||
|
||||
var/item_to_spawn = pick(items_to_spawn)
|
||||
to_chat(examiner, span_notice("You picture yourself in the thicket picking flowers.."))
|
||||
new item_to_spawn(examiner.drop_location())
|
||||
examiner.add_mood_event("heretic_vines", /datum/mood_event/eldritch_painting/heretic_vines)
|
||||
|
||||
|
||||
// Lady out of gates, gives a brain trauma causing the person to scratch themselves
|
||||
/obj/item/wallframe/painting/eldritch/beauty
|
||||
name = "Lady out of gates"
|
||||
desc = "A painting depicting a perfect lady, and I must be perfect like her..."
|
||||
icon_state = "eldritch_painting_beauty"
|
||||
result_path = /obj/structure/sign/painting/eldritch/beauty
|
||||
|
||||
/obj/structure/sign/painting/eldritch/beauty
|
||||
name = "Lady out of gates"
|
||||
desc = "A painting depicting a perfect lady, and I must be perfect like her. Destroyable with wirecutters."
|
||||
icon_state = "eldritch_painting_beauty"
|
||||
applied_trauma = /datum/brain_trauma/severe/eldritch_beauty
|
||||
text_to_display = "Her flesh glows in the pale light, and mine can too...If it wasnt for these imperfections...."
|
||||
// Set to mutadone by default to remove mutations
|
||||
var/list/reagents_to_add = list(/datum/reagent/medicine/mutadone)
|
||||
|
||||
// The special examine interaction for this painting
|
||||
/obj/structure/sign/painting/eldritch/beauty/examine_effects(mob/living/carbon/examiner)
|
||||
. = ..()
|
||||
if(!examiner.has_dna())
|
||||
return
|
||||
|
||||
if(!IS_HERETIC(examiner))
|
||||
to_chat(examiner, "You feel changed, more perfect....")
|
||||
examiner.easy_random_mutate(NEGATIVE + MINOR_NEGATIVE)
|
||||
return
|
||||
|
||||
to_chat(examiner, "Your imperfections shed and you are restored.")
|
||||
examiner.reagents.add_reagent(reagents_to_add, 5)
|
||||
|
||||
// Climb over the rusted mountain, gives a brain trauma causing the person to randomly rust tiles beneath them
|
||||
/obj/item/wallframe/painting/eldritch/rust
|
||||
name = "Climb over the rusted mountain"
|
||||
desc = "A painting depicting something climbing a mountain of rust, it gives you an eerie feeling."
|
||||
icon_state = "eldritch_painting_rust"
|
||||
result_path = /obj/structure/sign/painting/eldritch/rust
|
||||
|
||||
/obj/structure/sign/painting/eldritch/rust
|
||||
name = "Climb over the rusted mountain"
|
||||
desc = "A painting depicting something climbing a mountain of rust, it gives you an eerie feeling. Destroyable with wirecutters."
|
||||
icon_state = "eldritch_painting_rust"
|
||||
applied_trauma = /datum/brain_trauma/severe/rusting
|
||||
text_to_display = "It climbs, and I will aid it...The rust calls and I shall answer..."
|
||||
|
||||
// The special examine interaction for this painting
|
||||
/obj/structure/sign/painting/eldritch/rust/examine_effects(mob/living/carbon/examiner)
|
||||
. = ..()
|
||||
|
||||
if(!IS_HERETIC(examiner))
|
||||
to_chat(examiner, "It can wait...")
|
||||
examiner.add_mood_event("rusted_examine", /datum/mood_event/eldritch_painting/rust_examine)
|
||||
return
|
||||
|
||||
to_chat(examiner, "You see the climber, and are inspired by it!")
|
||||
examiner.add_mood_event("rusted_examine", /datum/mood_event/eldritch_painting/rust_heretic_examine)
|
||||
@@ -145,3 +145,12 @@
|
||||
after_use_message = "The Stewards hear your call..."
|
||||
tool_behaviour = TOOL_CROWBAR
|
||||
toolspeed = 1.3
|
||||
|
||||
// Path of Moon's blade
|
||||
/obj/item/melee/sickly_blade/moon
|
||||
name = "\improper moon blade"
|
||||
desc = "A blade of iron, reflecting the truth of the earth: All join the troupe one day. \
|
||||
A troupe bringing joy, carving smiles on their faces if they want one or not."
|
||||
icon_state = "moon_blade"
|
||||
inhand_icon_state = "moon_blade"
|
||||
after_use_message = "The Moon hears your call..."
|
||||
|
||||
@@ -50,3 +50,36 @@
|
||||
icon = 'icons/obj/antags/eldritch.dmi'
|
||||
icon_state = "eye_medalion"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
|
||||
// The amulette conversion tool used by moon heretics
|
||||
/obj/item/clothing/neck/heretic_focus/moon_amulette
|
||||
name = "Moonlight Amulette"
|
||||
desc = "A piece of the mind, the sight and the moon. Gazing into it makes your head spin and hear whispers of laughter and joy."
|
||||
icon = 'icons/obj/antags/eldritch.dmi'
|
||||
icon_state = "moon_amulette"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
// How much damage does this item do to the targets sanity?
|
||||
var/sanity_damage = 20
|
||||
|
||||
/obj/item/clothing/neck/heretic_focus/moon_amulette/attack(mob/living/target, mob/living/user, params)
|
||||
var/mob/living/carbon/human/hit = target
|
||||
if(!IS_HERETIC(user))
|
||||
user.balloon_alert(user, "you feel a presence watching you")
|
||||
user.add_mood_event("Moon Amulette Insanity", /datum/mood_event/amulette_insanity)
|
||||
user.mob_mood.set_sanity(user.mob_mood.sanity - 50)
|
||||
return
|
||||
if(hit.can_block_magic())
|
||||
return
|
||||
if(!hit.mob_mood)
|
||||
return
|
||||
if(hit.mob_mood.sanity_level < SANITY_LEVEL_CRAZY)
|
||||
user.balloon_alert(user, "their mind is too strong!")
|
||||
hit.add_mood_event("Moon Amulette Insanity", /datum/mood_event/amulette_insanity)
|
||||
hit.mob_mood.set_sanity(hit.mob_mood.sanity - sanity_damage)
|
||||
else
|
||||
user.balloon_alert(user, "their mind bends to see the truth!")
|
||||
hit.apply_status_effect(/datum/status_effect/moon_converted)
|
||||
user.log_message("made [target] insane.", LOG_GAME)
|
||||
hit.log_message("was driven insane by [user]")
|
||||
. = ..()
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
//Item for knock/moon heretic sidepath, it can block 5 hits of damage, acts as storage and if the heretic is examined the examiner suffers brain damage and blindness
|
||||
|
||||
/obj/item/storage/belt/unfathomable_curio
|
||||
name = "Unfathomable Curio"
|
||||
desc = "It. It looks backs. It looks past. It looks in. It sees. It hides. It opens."
|
||||
icon_state = "unfathomable_curio"
|
||||
worn_icon_state = "unfathomable_curio"
|
||||
content_overlays = FALSE
|
||||
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
|
||||
//Vars used for the shield component
|
||||
var/heretic_shield_icon = "unfathomable_shield"
|
||||
var/max_charges = 1
|
||||
var/recharge_start_delay = 60 SECONDS
|
||||
var/charge_increment_delay = 60 SECONDS
|
||||
var/charge_recovery = 1
|
||||
|
||||
/obj/item/storage/belt/unfathomable_curio/Initialize(mapload)
|
||||
. = ..()
|
||||
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
|
||||
atom_storage.max_total_storage = 21
|
||||
atom_storage.set_holdable(list(
|
||||
/obj/item/ammo_box/strilka310/lionhunter,
|
||||
/obj/item/bodypart, // Bodyparts are often used in rituals.
|
||||
/obj/item/clothing/neck/eldritch_amulet,
|
||||
/obj/item/clothing/neck/heretic_focus,
|
||||
/obj/item/codex_cicatrix,
|
||||
/obj/item/eldritch_potion,
|
||||
/obj/item/food/grown/poppy, // Used to regain a Living Heart.
|
||||
/obj/item/food/grown/harebell, // Used to reroll targets
|
||||
/obj/item/melee/rune_carver,
|
||||
/obj/item/melee/sickly_blade,
|
||||
/obj/item/organ, // Organs are also often used in rituals.
|
||||
/obj/item/reagent_containers/cup/beaker/eldritch,
|
||||
/obj/item/stack/sheet/glass, // Glass is often used by moon heretics
|
||||
))
|
||||
|
||||
AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \
|
||||
charge_recovery = charge_recovery, shield_icon = heretic_shield_icon, run_hit_callback = CALLBACK(src, PROC_REF(shield_damaged)))
|
||||
|
||||
|
||||
/obj/item/storage/belt/unfathomable_curio/equipped(mob/user, slot, initial)
|
||||
. = ..()
|
||||
if(!(slot & slot_flags))
|
||||
return
|
||||
|
||||
if(!IS_HERETIC(user))
|
||||
to_chat(user, span_warning("The curio wraps around you, and you feel the beating of something dark inside it..."))
|
||||
|
||||
|
||||
// Our on hit effect
|
||||
/obj/item/storage/belt/unfathomable_curio/proc/shield_damaged(mob/living/carbon/wearer, attack_text, new_current_charges)
|
||||
var/list/brain_traumas = list(
|
||||
/datum/brain_trauma/severe/mute,
|
||||
/datum/brain_trauma/severe/flesh_desire,
|
||||
/datum/brain_trauma/severe/eldritch_beauty,
|
||||
/datum/brain_trauma/severe/paralysis,
|
||||
/datum/brain_trauma/severe/monophobia
|
||||
)
|
||||
wearer.visible_message(span_danger("[wearer]'s veil makes [attack_text] miss, but the force behind the blow causes it to disperse!"))
|
||||
if(IS_HERETIC(wearer))
|
||||
return
|
||||
|
||||
to_chat(wearer, span_warning("Laughter echoes in your mind...."))
|
||||
wearer.adjustOrganLoss(ORGAN_SLOT_BRAIN, 40)
|
||||
wearer.dropItemToGround(src, TRUE)
|
||||
wearer.gain_trauma(pick(brain_traumas) ,TRAUMA_RESILIENCE_ABSOLUTE)
|
||||
|
||||
/obj/item/storage/belt/unfathomable_curio/examine(mob/living/carbon/user)
|
||||
. = ..()
|
||||
if(IS_HERETIC(user))
|
||||
return
|
||||
|
||||
user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
|
||||
user.adjust_temp_blindness(5 SECONDS)
|
||||
. += span_notice("It. It looked. IT WRAPS ITSELF AROUND ME.")
|
||||
|
||||
|
||||
@@ -6,8 +6,7 @@
|
||||
* A Steward's Secret
|
||||
* Grasp of Lock
|
||||
* > Sidepaths:
|
||||
* Ashen Eyes
|
||||
* Codex Cicatrix
|
||||
* Mindgate
|
||||
* Key Keeper’s Burden
|
||||
*
|
||||
* Concierge's Rite
|
||||
@@ -15,8 +14,10 @@
|
||||
* Ritual of Knowledge
|
||||
* Burglar's Finesse
|
||||
* > Sidepaths:
|
||||
* Opening Blast
|
||||
* Apetra Vulnera
|
||||
* Opening Blast
|
||||
* Unfathomable Curio
|
||||
* Unsealed arts
|
||||
*
|
||||
* Opening Blade
|
||||
* Caretaker’s Last Refuge
|
||||
@@ -48,7 +49,6 @@
|
||||
next_knowledge = list(
|
||||
/datum/heretic_knowledge/key_ring,
|
||||
/datum/heretic_knowledge/medallion,
|
||||
/datum/heretic_knowledge/codex_cicatrix,
|
||||
)
|
||||
cost = 1
|
||||
route = PATH_LOCK
|
||||
@@ -147,6 +147,9 @@
|
||||
/datum/heretic_knowledge/spell/apetra_vulnera,
|
||||
/datum/heretic_knowledge/spell/opening_blast,
|
||||
/datum/heretic_knowledge/blade_upgrade/flesh/lock,
|
||||
/datum/heretic_knowledge/unfathomable_curio,
|
||||
/datum/heretic_knowledge/curse/paralysis,
|
||||
/datum/heretic_knowledge/painting,
|
||||
)
|
||||
spell_to_add = /datum/action/cooldown/spell/pointed/burglar_finesse
|
||||
cost = 2
|
||||
|
||||
@@ -0,0 +1,269 @@
|
||||
/**
|
||||
* # The path of Moon.
|
||||
*
|
||||
* Goes as follows:
|
||||
*
|
||||
* Moonlight Troupe
|
||||
* Grasp of Lunacy
|
||||
* Smile of the moon
|
||||
* > Sidepaths:
|
||||
* Mind Gate
|
||||
* Ashen Eyes
|
||||
*
|
||||
* Mark of Moon
|
||||
* Ritual of Knowledge
|
||||
* Lunar Parade
|
||||
* Moonlight Amulette
|
||||
* > Sidepaths:
|
||||
* Curse of Paralasys
|
||||
* Unfathomable Curio
|
||||
* Unsealed Arts
|
||||
*
|
||||
* Moonlight blade
|
||||
* Ringleaders Rise
|
||||
* > Sidepaths:
|
||||
* Ashen Ritual
|
||||
*
|
||||
* Last Act
|
||||
*/
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_moon
|
||||
name = "Moonlight Troupe"
|
||||
desc = "Opens up the Path of Moon to you. \
|
||||
Allows you to transmute 2 sheets of iron and a knife into an Lunar Blade. \
|
||||
You can only create two at a time."
|
||||
gain_text = "Under the light of the moon the laughter echoes."
|
||||
next_knowledge = list(/datum/heretic_knowledge/moon_grasp)
|
||||
required_atoms = list(
|
||||
/obj/item/knife = 1,
|
||||
/obj/item/stack/sheet/iron = 2,
|
||||
)
|
||||
result_atoms = list(/obj/item/melee/sickly_blade/moon)
|
||||
route = PATH_MOON
|
||||
|
||||
/datum/heretic_knowledge/base_moon/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
add_traits(user ,TRAIT_EMPATH, REF(src))
|
||||
|
||||
/datum/heretic_knowledge/moon_grasp
|
||||
name = "Grasp of Lunacy"
|
||||
desc = "Your Mansus Grasp will cause them to hallucinate everyone as lunar mass, \
|
||||
and hides your identity for a short dur ation."
|
||||
gain_text = "The troupe on the side of the moon showed me truth, and I took it."
|
||||
next_knowledge = list(/datum/heretic_knowledge/spell/moon_smile)
|
||||
cost = 1
|
||||
route = PATH_MOON
|
||||
|
||||
/datum/heretic_knowledge/moon_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
|
||||
/datum/heretic_knowledge/moon_grasp/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
|
||||
|
||||
/datum/heretic_knowledge/moon_grasp/proc/on_mansus_grasp(mob/living/source, mob/living/target)
|
||||
SIGNAL_HANDLER
|
||||
source.apply_status_effect(/datum/status_effect/moon_grasp_hide)
|
||||
|
||||
if(!iscarbon(target))
|
||||
return
|
||||
var/mob/living/carbon/carbon_target = target
|
||||
to_chat(carbon_target, span_danger("You hear echoing laughter from above"))
|
||||
carbon_target.cause_hallucination(/datum/hallucination/delusion/preset/moon, "delusion/preset/moon hallucination caused by mansus grasp")
|
||||
carbon_target.mob_mood.set_sanity(carbon_target.mob_mood.sanity-20)
|
||||
|
||||
/datum/heretic_knowledge/spell/moon_smile
|
||||
name = "Smile of the moon"
|
||||
desc = "Grants you Smile of the moon, a ranged spell muting, blinding and deafening the target for a\
|
||||
duration based on their sanity."
|
||||
gain_text = "The moon smiles upon us all and those who see its true side can bring its joy."
|
||||
next_knowledge = list(
|
||||
/datum/heretic_knowledge/mark/moon_mark,
|
||||
/datum/heretic_knowledge/medallion,
|
||||
/datum/heretic_knowledge/spell/mind_gate,
|
||||
)
|
||||
spell_to_add = /datum/action/cooldown/spell/pointed/moon_smile
|
||||
cost = 1
|
||||
route = PATH_MOON
|
||||
|
||||
/datum/heretic_knowledge/mark/moon_mark
|
||||
name = "Mark of Moon"
|
||||
desc = "Your Mansus Grasp now applies the Mark of Moon. The mark is triggered from an attack with your Moon Blade. \
|
||||
When triggered, the victim is confused, and when the mark is applied they are pacified \
|
||||
until attacked."
|
||||
gain_text = "The troupe on the moon would dance all day long \
|
||||
and in that dance the moon would smile upon us \
|
||||
but when the night came its smile would dull forced to gaze on the earth."
|
||||
next_knowledge = list(/datum/heretic_knowledge/knowledge_ritual/moon)
|
||||
route = PATH_MOON
|
||||
mark_type = /datum/status_effect/eldritch/moon
|
||||
|
||||
/datum/heretic_knowledge/mark/moon_mark/trigger_mark(mob/living/source, mob/living/target)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
|
||||
// Also refunds 75% of charge!
|
||||
var/datum/action/cooldown/spell/touch/mansus_grasp/grasp = locate() in source.actions
|
||||
if(grasp)
|
||||
grasp.next_use_time = min(round(grasp.next_use_time - grasp.cooldown_time * 0.75, 0), 0)
|
||||
grasp.build_all_button_icons()
|
||||
|
||||
/datum/heretic_knowledge/knowledge_ritual/moon
|
||||
next_knowledge = list(/datum/heretic_knowledge/spell/moon_parade)
|
||||
route = PATH_MOON
|
||||
|
||||
/datum/heretic_knowledge/spell/moon_parade
|
||||
name = "Lunar Parade"
|
||||
desc = "Grants you Lunar Parade, a spell that - after a short charge - sends a carnival forward \
|
||||
when hitting someone they are forced to join the parade and suffer hallucinations."
|
||||
gain_text = "The music like a reflection of the soul compelled them, like moths to a flame they followed"
|
||||
next_knowledge = list(
|
||||
/datum/heretic_knowledge/moon_amulette,
|
||||
/datum/heretic_knowledge/reroll_targets,
|
||||
/datum/heretic_knowledge/unfathomable_curio,
|
||||
/datum/heretic_knowledge/curse/paralysis,
|
||||
/datum/heretic_knowledge/painting,
|
||||
)
|
||||
spell_to_add = /datum/action/cooldown/spell/pointed/projectile/moon_parade
|
||||
cost = 1
|
||||
route = PATH_MOON
|
||||
|
||||
|
||||
/datum/heretic_knowledge/moon_amulette
|
||||
name = "Moonlight Amulette"
|
||||
desc = "Allows you to transmute 2 sheets of glass, a pair of eyes, a brain and a tie \
|
||||
if the item is used on someone with low sanity they go berserk attacking everyone \
|
||||
, if their sanity isnt low enough it decreases their mood."
|
||||
gain_text = "At the head of the parade he stood, the moon condensed into one mass, a reflection of the soul."
|
||||
next_knowledge = list(/datum/heretic_knowledge/blade_upgrade/moon)
|
||||
required_atoms = list(
|
||||
/obj/item/organ/internal/eyes = 1,
|
||||
/obj/item/organ/internal/brain = 1,
|
||||
/obj/item/stack/sheet/glass = 2,
|
||||
/obj/item/clothing/neck/tie = 1,
|
||||
)
|
||||
result_atoms = list(/obj/item/clothing/neck/heretic_focus/moon_amulette)
|
||||
cost = 1
|
||||
route = PATH_MOON
|
||||
|
||||
/datum/heretic_knowledge/blade_upgrade/moon
|
||||
name = "Moonlight Blade"
|
||||
desc = "Your blade now deals brain damage, causes random hallucinations and does sanity damage."
|
||||
gain_text = "His wit was sharp as a blade, cutting through the lie to bring us joy."
|
||||
next_knowledge = list(/datum/heretic_knowledge/spell/moon_ringleader)
|
||||
cost = 1
|
||||
route = PATH_MOON
|
||||
|
||||
/datum/heretic_knowledge/blade_upgrade/moon/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade)
|
||||
if(source == target)
|
||||
return
|
||||
|
||||
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 100)
|
||||
target.cause_hallucination( \
|
||||
get_random_valid_hallucination_subtype(/datum/hallucination/body), \
|
||||
"upgraded path of moon blades", \
|
||||
)
|
||||
target.emote(pick("giggle", "laugh"))
|
||||
target.mob_mood.set_sanity(target.mob_mood.sanity - 10)
|
||||
|
||||
/datum/heretic_knowledge/spell/moon_ringleader
|
||||
name = "Ringleaders Rise"
|
||||
desc = "Grants you Ringleaders Rise, an aoe spell that deals more brain damage the lower the sanity of everyone in the AoE,\
|
||||
causes hallucinations with those who have less sanity getting more. \
|
||||
If their sanity is low enough turns them insane, the spell then halves their sanity."
|
||||
gain_text = "I grabbed his hand and we rose, those who saw the truth rose with us. \
|
||||
The ringleader pointed up and the dim light of truth illuminated us further."
|
||||
next_knowledge = list(
|
||||
/datum/heretic_knowledge/ultimate/moon_final,
|
||||
/datum/heretic_knowledge/summon/ashy,
|
||||
)
|
||||
spell_to_add = /datum/action/cooldown/spell/aoe/moon_ringleader
|
||||
cost = 1
|
||||
route = PATH_MOON
|
||||
|
||||
/datum/heretic_knowledge/ultimate/moon_final
|
||||
name = "The Last Act"
|
||||
desc = "The ascension ritual of the Path of Moon. \
|
||||
Bring 3 corpses with more than 50 brain damage to a transmutation rune to complete the ritual. \
|
||||
When completed, you become a harbinger of madness gaining and aura of passive sanity decrease \
|
||||
, confusion increase and if their sanity is low enough brain damage and blindness. \
|
||||
1/5th of the crew will turn into acolytes and follow your command, they will all recieve moonlight amulettes."
|
||||
gain_text = "We dived down towards the crowd, his soul splitting off in search of greater venture \
|
||||
for where the Ringleader had started the parade, I shall continue it unto the suns demise \
|
||||
WITNESS MY ASCENSION, THE MOON SMILES ONCE MORE AND FOREVER MORE IT SHALL!"
|
||||
route = PATH_MOON
|
||||
|
||||
/datum/heretic_knowledge/ultimate/moon_final/is_valid_sacrifice(mob/living/sacrifice)
|
||||
|
||||
var/brain_damage = sacrifice.get_organ_loss(ORGAN_SLOT_BRAIN)
|
||||
// Checks if our target has enough brain damage
|
||||
if(brain_damage < 50)
|
||||
return FALSE
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/heretic_knowledge/ultimate/moon_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
|
||||
. = ..()
|
||||
priority_announce("[generate_heretic_text()] Laugh, for the ringleader [user.real_name] has ascended! \
|
||||
The truth shall finally devour the lie! [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES)
|
||||
|
||||
user.client?.give_award(/datum/award/achievement/misc/moon_ascension, user)
|
||||
ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, REF(src))
|
||||
|
||||
RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life))
|
||||
|
||||
// Roughly 1/5th of the station will rise up as lunatics to the heretic
|
||||
for (var/mob/living/carbon/human/crewmate as anything in GLOB.human_list)
|
||||
// How many lunatics we have
|
||||
var/amount_of_lunatics = 0
|
||||
if(isnull(crewmate.mind))
|
||||
continue
|
||||
if(crewmate.stat == DEAD | UNCONSCIOUS)
|
||||
continue
|
||||
if(!is_station_level(crewmate))
|
||||
continue
|
||||
// Heretics, lunatics and monsters shouldn't become lunatics because they either have a master or have a mansus grasp
|
||||
if(IS_HERETIC_OR_MONSTER(crewmate))
|
||||
to_chat(crewmate, span_boldwarning("[user]'s rise is influencing those who are weak willed. Their minds shall rend." ))
|
||||
continue
|
||||
// Mindshielded and anti-magic folks are immune against this effect because this is a magical mind effect
|
||||
if(HAS_TRAIT(crewmate, TRAIT_MINDSHIELD) || crewmate.can_block_magic(MAGIC_RESISTANCE))
|
||||
to_chat(crewmate, span_boldwarning("You feel shielded from something." ))
|
||||
continue
|
||||
if(amount_of_lunatics > length(GLOB.human_list) * 0.2)
|
||||
to_chat(crewmate, span_boldwarning("You feel uneasy, as if for a brief moment something was gazing at you." ))
|
||||
continue
|
||||
var/datum/antagonist/lunatic/lunatic = crewmate.mind.add_antag_datum(/datum/antagonist/lunatic)
|
||||
lunatic.set_master(user.mind, user)
|
||||
var/obj/item/clothing/neck/heretic_focus/moon_amulette/moon_amulette = new
|
||||
crewmate.put_in_active_hand(moon_amulette)
|
||||
crewmate.emote("laugh")
|
||||
|
||||
/datum/heretic_knowledge/ultimate/moon_final/proc/on_life(mob/living/source, seconds_per_tick, times_fired)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
visible_hallucination_pulse(
|
||||
center = get_turf(source),
|
||||
radius = 7,
|
||||
hallucination_duration = 60 SECONDS
|
||||
)
|
||||
|
||||
for(var/mob/living/carbon/carbon_view in view(5, source))
|
||||
var/carbon_sanity = carbon_view.mob_mood.sanity
|
||||
if(carbon_view.stat == DEAD | UNCONSCIOUS)
|
||||
continue
|
||||
if(IS_HERETIC_OR_MONSTER(carbon_view))
|
||||
continue
|
||||
carbon_view.adjust_confusion(2 SECONDS)
|
||||
carbon_view.mob_mood.set_sanity(carbon_sanity - 5)
|
||||
if(carbon_sanity < 30)
|
||||
if(SPT_PROB(20, seconds_per_tick))
|
||||
to_chat(carbon_view, span_warning("you feel your mind beginning to rend!"))
|
||||
carbon_view.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
|
||||
if(carbon_sanity < 10)
|
||||
if(SPT_PROB(20, seconds_per_tick))
|
||||
to_chat(carbon_view, span_warning("it echoes through you!"))
|
||||
visible_hallucination_pulse(
|
||||
center = get_turf(carbon_view),
|
||||
radius = 7,
|
||||
hallucination_duration = 50 SECONDS
|
||||
)
|
||||
carbon_view.adjust_temp_blindness(5 SECONDS)
|
||||
@@ -0,0 +1,100 @@
|
||||
// Sidepaths for knowledge between Knock and Moon.
|
||||
|
||||
/datum/heretic_knowledge/spell/mind_gate
|
||||
name = "Mind Gate"
|
||||
desc = "Grants you Mind Gate, a spell \
|
||||
which deals you 20 brain damage but the target suffers a hallucination,\
|
||||
is left confused for 10 seconds, suffers oxygen loss and brain damage."
|
||||
gain_text = "My mind swings open like a gate, and its insight will let me percieve the truth."
|
||||
next_knowledge = list(
|
||||
/datum/heretic_knowledge/key_ring,
|
||||
/datum/heretic_knowledge/spell/moon_smile,
|
||||
)
|
||||
spell_to_add = /datum/action/cooldown/spell/pointed/mind_gate
|
||||
cost = 1
|
||||
route = PATH_SIDE
|
||||
|
||||
/datum/heretic_knowledge/unfathomable_curio
|
||||
name = "Unfathomable Curio"
|
||||
desc = "Allows you to transmute 3 rods, a brain and a belt into an Unfathomable Curio\
|
||||
, a belt that can hold blades and items for rituals. Whilst worn will also \
|
||||
veil you, allowing you to take 5 hits without suffering damage, this veil will recharge very slowly \
|
||||
outside of combat. When examined the examiner will suffer brain damage and blindness."
|
||||
gain_text = "The mansus holds many a curio, some are not meant for the mortal eye."
|
||||
next_knowledge = list(
|
||||
/datum/heretic_knowledge/spell/burglar_finesse,
|
||||
/datum/heretic_knowledge/spell/moon_parade,
|
||||
)
|
||||
required_atoms = list(
|
||||
/obj/item/organ/internal/brain = 1,
|
||||
/obj/item/stack/rods = 3,
|
||||
/obj/item/storage/belt = 1,
|
||||
)
|
||||
result_atoms = list(/obj/item/storage/belt/unfathomable_curio)
|
||||
cost = 1
|
||||
route = PATH_SIDE
|
||||
|
||||
/datum/heretic_knowledge/painting
|
||||
name = "Unsealed Arts"
|
||||
desc = "Allows you to transmute a canvas and an additional item to create a piece of art, these paintings \
|
||||
have different effects depending on the additional item added. Possible paintings: \
|
||||
The sister and He Who Wept: Eyes. When a non-heretic looks at the painting they will begin to hallucinate everyone as heretics. \
|
||||
The First Desire: Any bodypart. Increases the hunger of non-heretics, when examined drops an organ or body part at your feet. \
|
||||
Great chaparral over rolling hills: Any grown food. Spreads kudzu when placed, when examined grants a flower. \
|
||||
Lady out of gates: Gloves. Causes non-heretics to scratch themselves, when examined removes all your mutations. \
|
||||
Climb over the rusted mountain: Trash. Causes non-heretics to rust the floor they walk on. \
|
||||
These effects are mitigated for a few minutes when a non-heretic suffering an effect examines the painting that caused the effect."
|
||||
gain_text = "A wind of inspiration blows through me, past the walls and past the gate inspirations lie, yet to be depicted. \
|
||||
They yearn for mortal eyes again, and I shall grant that wish."
|
||||
next_knowledge = list(
|
||||
/datum/heretic_knowledge/spell/burglar_finesse,
|
||||
/datum/heretic_knowledge/spell/moon_parade,
|
||||
)
|
||||
required_atoms = list(/obj/item/canvas = 1)
|
||||
result_atoms = list(/obj/item/canvas)
|
||||
cost = 1
|
||||
route = PATH_SIDE
|
||||
|
||||
/datum/heretic_knowledge/painting/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc)
|
||||
if(locate(/obj/item/organ/internal/eyes) in atoms)
|
||||
src.result_atoms = list(/obj/item/wallframe/painting/eldritch/weeping)
|
||||
src.required_atoms = list(
|
||||
/obj/item/canvas = 1,
|
||||
/obj/item/organ/internal/eyes = 1,
|
||||
)
|
||||
return TRUE
|
||||
|
||||
if(locate(/obj/item/bodypart) in atoms)
|
||||
src.result_atoms = list(/obj/item/wallframe/painting/eldritch/desire)
|
||||
src.required_atoms = list(
|
||||
/obj/item/canvas = 1,
|
||||
/obj/item/bodypart = 1,
|
||||
)
|
||||
return TRUE
|
||||
|
||||
if(locate(/obj/item/food/grown) in atoms)
|
||||
src.result_atoms = list(/obj/item/wallframe/painting/eldritch/vines)
|
||||
src.required_atoms = list(
|
||||
/obj/item/canvas = 1,
|
||||
/obj/item/food/grown = 1,
|
||||
)
|
||||
return TRUE
|
||||
|
||||
if(locate(/obj/item/clothing/gloves) in atoms)
|
||||
src.result_atoms = list(/obj/item/wallframe/painting/eldritch/beauty)
|
||||
src.required_atoms = list(
|
||||
/obj/item/canvas = 1,
|
||||
/obj/item/clothing/gloves = 1,
|
||||
)
|
||||
return TRUE
|
||||
|
||||
if(locate(/obj/item/trash) in atoms)
|
||||
src.result_atoms = list(/obj/item/wallframe/painting/eldritch/rust)
|
||||
src.required_atoms = list(
|
||||
/obj/item/canvas = 1,
|
||||
/obj/item/trash = 1,
|
||||
)
|
||||
return TRUE
|
||||
|
||||
user.balloon_alert(user, "no additional atom present!")
|
||||
return FALSE
|
||||
@@ -0,0 +1,91 @@
|
||||
/datum/action/cooldown/lunatic_track
|
||||
name = "Moonlight Echo"
|
||||
desc = "Track your ringleader."
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
background_icon_state = "bg_heretic"
|
||||
button_icon_state = "moon_smile"
|
||||
ranged_mousepointer = 'icons/effects/mouse_pointers/moon_target.dmi'
|
||||
cooldown_time = 4 SECONDS
|
||||
|
||||
/datum/action/cooldown/lunatic_track/Grant(mob/granted)
|
||||
if(!IS_LUNATIC(granted))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/datum/action/cooldown/lunatic_track/Activate(atom/target)
|
||||
var/datum/antagonist/lunatic/lunatic_datum = IS_LUNATIC(owner)
|
||||
var/mob/living/carbon/human/ascended_heretic = lunatic_datum.ascended_body
|
||||
if(!(ascended_heretic))
|
||||
owner.balloon_alert(owner, "what cruel fate, your master is gone...")
|
||||
StartCooldown(1 SECONDS)
|
||||
return FALSE
|
||||
playsound(owner, 'sound/effects/singlebeat.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE)
|
||||
owner.balloon_alert(owner, get_balloon_message(ascended_heretic))
|
||||
|
||||
if(ascended_heretic.stat == DEAD)
|
||||
to_chat(owner, span_hierophant("[ascended_heretic] is dead. Weep for the lie has struck out."))
|
||||
|
||||
StartCooldown()
|
||||
return TRUE
|
||||
|
||||
|
||||
/// Gets the balloon message for the heretic we are tracking.
|
||||
/datum/action/cooldown/lunatic_track/proc/get_balloon_message(mob/living/carbon/human/tracked_mob)
|
||||
var/balloon_message = generate_balloon_message(tracked_mob)
|
||||
if(tracked_mob.stat == DEAD)
|
||||
balloon_message = "they're dead, " + balloon_message
|
||||
|
||||
return balloon_message
|
||||
|
||||
/// Create the text for the balloon message
|
||||
/datum/action/cooldown/lunatic_track/proc/generate_balloon_message(mob/living/carbon/human/tracked_mob)
|
||||
var/balloon_message = "error text!"
|
||||
var/turf/their_turf = get_turf(tracked_mob)
|
||||
var/turf/our_turf = get_turf(owner)
|
||||
var/their_z = their_turf?.z
|
||||
var/our_z = our_turf?.z
|
||||
|
||||
var/dist = get_dist(our_turf, their_turf)
|
||||
var/dir = get_dir(our_turf, their_turf)
|
||||
|
||||
switch(dist)
|
||||
if(0 to 15)
|
||||
balloon_message = "very near, [dir2text(dir)]!"
|
||||
if(16 to 31)
|
||||
balloon_message = "near, [dir2text(dir)]!"
|
||||
if(32 to 127)
|
||||
balloon_message = "far, [dir2text(dir)]!"
|
||||
else
|
||||
balloon_message = "very far!"
|
||||
|
||||
// Early returns here if we don't need to tell them the z-levels
|
||||
if(our_z == their_z)
|
||||
return balloon_message
|
||||
|
||||
if(is_mining_level(their_z))
|
||||
balloon_message = "on lavaland!"
|
||||
return balloon_message
|
||||
|
||||
if(is_away_level(their_z) || is_secret_level(their_z))
|
||||
balloon_message = "beyond the gateway!"
|
||||
return balloon_message
|
||||
|
||||
// We already checked if they are on lavaland or gateway, so if they arent there or on the station we can early return
|
||||
if(!is_station_level(their_z))
|
||||
balloon_message = "on another plane!"
|
||||
return balloon_message
|
||||
|
||||
// They must be on station because we have checked every other z-level, and since we arent on station we should go there
|
||||
if(!is_station_level(our_z))
|
||||
balloon_message = "on station!"
|
||||
return balloon_message
|
||||
|
||||
if(our_z > their_z)
|
||||
balloon_message = "below you!"
|
||||
return balloon_message
|
||||
|
||||
if(our_z < their_z)
|
||||
balloon_message = "above you!"
|
||||
return balloon_message
|
||||
|
||||
return balloon_message
|
||||
@@ -1,7 +1,7 @@
|
||||
// Currently unused.
|
||||
// Currently unused
|
||||
/datum/action/cooldown/spell/touch/mad_touch
|
||||
name = "Touch of Madness"
|
||||
desc = "A touch spell that drains your enemy's sanity."
|
||||
desc = "A touch spell that drains your enemy's sanity and knocks them down."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
return TRUE // This baby can hit anything
|
||||
|
||||
/datum/action/cooldown/spell/touch/mansus_grasp/can_cast_spell(feedback = TRUE)
|
||||
return ..() && !!IS_HERETIC(owner)
|
||||
return ..() && (!!IS_HERETIC(owner) || !!IS_LUNATIC(owner))
|
||||
|
||||
/datum/action/cooldown/spell/touch/mansus_grasp/on_antimagic_triggered(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster)
|
||||
victim.visible_message(
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/datum/action/cooldown/spell/pointed/mind_gate
|
||||
name = "Mind Gate"
|
||||
desc = "Deals you 20 brain damage and the target suffers a hallucination, \
|
||||
is left confused for 10 seconds, and suffers oxygen loss and brain damage."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "mind_gate"
|
||||
|
||||
sound = 'sound/magic/curse.ogg'
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 20 SECONDS
|
||||
|
||||
invocation = "Op' 'oY 'Mi'd"
|
||||
invocation_type = INVOCATION_WHISPER
|
||||
spell_requirements = NONE
|
||||
cast_range = 6
|
||||
|
||||
active_msg = "You prepare to open your mind..."
|
||||
|
||||
/datum/action/cooldown/spell/pointed/mind_gate/can_cast_spell(feedback = TRUE)
|
||||
return ..() && isliving(owner)
|
||||
|
||||
/datum/action/cooldown/spell/pointed/mind_gate/is_valid_target(atom/cast_on)
|
||||
return ..() && ishuman(cast_on)
|
||||
|
||||
/datum/action/cooldown/spell/pointed/mind_gate/cast(mob/living/carbon/human/cast_on, mob/living/carbon/human/owner)
|
||||
. = ..()
|
||||
if(cast_on.can_block_magic(antimagic_flags))
|
||||
to_chat(cast_on, span_notice("Your mind feels closed."))
|
||||
to_chat(owner, span_warning("Their mind doesn't swing open, but neither does yours."))
|
||||
return FALSE
|
||||
|
||||
cast_on.adjust_confusion(10 SECONDS)
|
||||
cast_on.adjustOxyLoss(30)
|
||||
cast_on.cause_hallucination(get_random_valid_hallucination_subtype(/datum/hallucination/body), "Mind gate, cast by [owner]")
|
||||
cast_on.cause_hallucination(/datum/hallucination/delusion/preset/heretic/gate, "Caused by mindgate")
|
||||
cast_on.adjustOrganLoss(ORGAN_SLOT_BRAIN, 30)
|
||||
owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20, 140)
|
||||
@@ -0,0 +1,100 @@
|
||||
/datum/action/cooldown/spell/pointed/projectile/moon_parade
|
||||
name = "Lunar parade"
|
||||
desc = "This unleashes the parade towards a target."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "moon_parade"
|
||||
ranged_mousepointer = 'icons/effects/mouse_pointers/moon_target.dmi'
|
||||
|
||||
sound = 'sound/magic/cosmic_energy.ogg'
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 30 SECONDS
|
||||
|
||||
invocation = "L'N'R P'RAD"
|
||||
invocation_type = INVOCATION_SHOUT
|
||||
spell_requirements = NONE
|
||||
|
||||
active_msg = "You prepare to make them join the parade!"
|
||||
deactive_msg = "You stop the music and halt the parade... for now."
|
||||
cast_range = 12
|
||||
projectile_type = /obj/projectile/moon_parade
|
||||
|
||||
|
||||
/obj/projectile/moon_parade
|
||||
name = "Lunar parade"
|
||||
icon_state = "lunar_parade"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
speed = 1
|
||||
range = 75
|
||||
ricochets_max = 40
|
||||
ricochet_chance = 500
|
||||
ricochet_incidence_leeway = 0
|
||||
pixel_speed_multiplier = 0.2
|
||||
projectile_piercing = PASSMOB|PASSVEHICLE
|
||||
///looping sound datum for our projectile.
|
||||
var/datum/looping_sound/moon_parade/soundloop
|
||||
// A list of the people we hit
|
||||
var/list/mobs_hit = list()
|
||||
|
||||
/obj/projectile/moon_parade/Initialize(mapload)
|
||||
. = ..()
|
||||
soundloop = new(src, TRUE)
|
||||
|
||||
/obj/projectile/moon_parade/prehit_pierce(atom/A)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/caster = firer
|
||||
var/mob/living/victim = A
|
||||
|
||||
if(caster == victim)
|
||||
return PROJECTILE_PIERCE_PHASE
|
||||
|
||||
if(!caster.mind)
|
||||
return PROJECTILE_PIERCE_HIT
|
||||
|
||||
var/datum/antagonist/heretic_monster/monster = victim.mind?.has_antag_datum(/datum/antagonist/heretic_monster)
|
||||
if(monster?.master == caster.mind)
|
||||
return PROJECTILE_PIERCE_PHASE
|
||||
|
||||
var/datum/antagonist/lunatic/lunatic = victim.mind?.has_antag_datum(/datum/antagonist/lunatic)
|
||||
if(lunatic?.ascended_heretic == caster.mind)
|
||||
return PROJECTILE_PIERCE_PHASE
|
||||
|
||||
// Anti-magic destroys the projectile for consistency and counterplay
|
||||
if(victim.can_block_magic(MAGIC_RESISTANCE))
|
||||
visible_message(span_warning("The parade hits [victim] and a sudden wave of clarity comes over you!"))
|
||||
return PROJECTILE_DELETE_WITHOUT_HITTING
|
||||
|
||||
|
||||
/obj/projectile/moon_parade/on_hit(atom/target, blocked = 0, pierce_hit)
|
||||
. = ..()
|
||||
var/mob/living/victim = target
|
||||
|
||||
RegisterSignal(victim, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(moon_block_move), override=TRUE)
|
||||
|
||||
victim.AddComponent(/datum/component/leash, src, distance = 1)
|
||||
victim.balloon_alert(victim,"you feel unable to move away from the parade!")
|
||||
victim.add_mood_event("Moon Insanity", /datum/mood_event/moon_insanity)
|
||||
victim.cause_hallucination(/datum/hallucination/delusion/preset/moon, "delusion/preset/moon hallucination caused by lunar parade")
|
||||
|
||||
//Lowers sanity
|
||||
victim.mob_mood.set_sanity(victim.mob_mood.sanity - 20)
|
||||
|
||||
// Uses weakref to prevent qdeleting them
|
||||
mobs_hit |= WEAKREF(victim)
|
||||
|
||||
/obj/projectile/moon_parade/Destroy()
|
||||
for(var/datum/weakref/mob_ref in mobs_hit)
|
||||
var/mob/living/real_mob = mob_ref.resolve()
|
||||
UnregisterSignal(real_mob, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE)
|
||||
mobs_hit.Cut()
|
||||
soundloop.stop()
|
||||
return ..()
|
||||
|
||||
// Blocks movement in order to make it appear like the character is transfixed to the projectile and wandering after it
|
||||
// Coded this way because its a simple way to hold the illusion compared to other methods
|
||||
/obj/projectile/moon_parade/proc/moon_block_move(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
return COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE
|
||||
@@ -0,0 +1,63 @@
|
||||
/datum/action/cooldown/spell/aoe/moon_ringleader
|
||||
name = "Ringleaders Rise"
|
||||
desc = "Big AoE spell that deals more brain damage the lower the sanity of everyone in the AoE and it also causes hallucinations with those who have less sanity getting more. \
|
||||
If their sanity is low enough they snap and go insane, the spell then halves their sanity."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "moon_ringleader"
|
||||
sound = 'sound/effects/moon_parade.ogg'
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 1 MINUTES
|
||||
|
||||
invocation = "R''S 'E"
|
||||
invocation_type = INVOCATION_SHOUT
|
||||
spell_requirements = NONE
|
||||
|
||||
aoe_radius = 5
|
||||
/// Effect for when the spell triggers
|
||||
var/obj/effect/moon_effect = /obj/effect/temp_visual/moon_ringleader
|
||||
|
||||
/datum/action/cooldown/spell/aoe/moon_ringleader/cast(mob/living/caster)
|
||||
new moon_effect(get_turf(caster))
|
||||
return ..()
|
||||
|
||||
/datum/action/cooldown/spell/aoe/moon_ringleader/get_things_to_cast_on(atom/center, radius_override)
|
||||
var/list/stuff = list()
|
||||
var/list/o_range = orange(center, radius_override || aoe_radius) - list(owner, center)
|
||||
for(var/mob/living/carbon/nearby_mob in o_range)
|
||||
if(nearby_mob.stat == DEAD)
|
||||
continue
|
||||
if(!nearby_mob.mob_mood)
|
||||
continue
|
||||
if(IS_HERETIC_OR_MONSTER(nearby_mob))
|
||||
continue
|
||||
if(nearby_mob.can_block_magic(antimagic_flags))
|
||||
continue
|
||||
|
||||
stuff += nearby_mob
|
||||
|
||||
return stuff
|
||||
|
||||
/datum/action/cooldown/spell/aoe/moon_ringleader/cast_on_thing_in_aoe(mob/living/carbon/victim, mob/living/caster)
|
||||
var/victim_sanity = victim.mob_mood.sanity
|
||||
|
||||
victim.adjustOrganLoss(ORGAN_SLOT_BRAIN, 100 - victim_sanity, 160)
|
||||
repeat_string((120 - victim_sanity) / 10,victim.cause_hallucination(get_random_valid_hallucination_subtype(/datum/hallucination/body),"ringleaders rise"))
|
||||
if(victim_sanity < 15)
|
||||
victim.apply_status_effect(/datum/status_effect/moon_converted)
|
||||
caster.log_message("made [victim] insane.", LOG_GAME)
|
||||
victim.log_message("was driven insane by [caster]")
|
||||
victim.mob_mood.set_sanity(victim_sanity * 0.5)
|
||||
|
||||
/obj/effect/temp_visual/moon_ringleader
|
||||
icon = 'icons/effects/eldritch.dmi'
|
||||
icon_state = "ring_leader_effect"
|
||||
alpha = 180
|
||||
duration = 6
|
||||
|
||||
/obj/effect/temp_visual/moon_ringleader/Initialize(mapload)
|
||||
. = ..()
|
||||
transform = transform.Scale(10)
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/datum/action/cooldown/spell/pointed/moon_smile
|
||||
name = "Smile of the moon"
|
||||
desc = "Lets you turn the gaze of the moon on someone \
|
||||
temporarily blinding, muting, deafening and confusing a single target."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "moon_smile"
|
||||
ranged_mousepointer = 'icons/effects/mouse_pointers/moon_target.dmi'
|
||||
|
||||
sound = 'sound/magic/blind.ogg'
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 20 SECONDS
|
||||
|
||||
invocation = "Mo'N S'M'LE"
|
||||
invocation_type = INVOCATION_SHOUT
|
||||
spell_requirements = NONE
|
||||
cast_range = 6
|
||||
|
||||
active_msg = "You prepare to let them see the true face..."
|
||||
|
||||
/datum/action/cooldown/spell/pointed/moon_smile/can_cast_spell(feedback = TRUE)
|
||||
return ..() && isliving(owner)
|
||||
|
||||
/datum/action/cooldown/spell/pointed/moon_smile/is_valid_target(atom/cast_on)
|
||||
return ..() && ishuman(cast_on)
|
||||
|
||||
/datum/action/cooldown/spell/pointed/moon_smile/cast(mob/living/carbon/human/cast_on)
|
||||
. = ..()
|
||||
/// The duration of these effects are based on sanity, mainly for flavor but also to make it a weaker alpha strike
|
||||
var/moon_smile_duration = (150 - cast_on.mob_mood.sanity) / 10
|
||||
if(cast_on.can_block_magic(antimagic_flags))
|
||||
to_chat(cast_on, span_notice("The moon turns, its smile no longer set on you."))
|
||||
to_chat(owner, span_warning("The moon does not smile upon them."))
|
||||
return FALSE
|
||||
|
||||
playsound(cast_on, 'sound/hallucinations/i_see_you1.ogg', 50, 1)
|
||||
to_chat(cast_on, span_warning("Your eyes cry out in pain, your ears bleed and your lips seal! THE MOON SMILES UPON YOU!"))
|
||||
cast_on.adjust_temp_blindness(moon_smile_duration SECONDS)
|
||||
cast_on.set_eye_blur_if_lower(moon_smile_duration + 2 SECONDS)
|
||||
|
||||
var/obj/item/organ/internal/ears/ears = cast_on.get_organ_slot(ORGAN_SLOT_EARS)
|
||||
ears?.adjustEarDamage(0, moon_smile_duration)
|
||||
|
||||
cast_on.adjust_silence(moon_smile_duration SECONDS)
|
||||
cast_on.add_mood_event("moon_smile", /datum/mood_event/moon_smile)
|
||||
//Lowers sanity
|
||||
cast_on.mob_mood.set_sanity(cast_on.mob_mood.sanity - 20)
|
||||
return TRUE
|
||||
@@ -0,0 +1,49 @@
|
||||
// A type of antagonist created by the moon ascension
|
||||
/datum/antagonist/lunatic
|
||||
name = "\improper Lunatic"
|
||||
hijack_speed = 0
|
||||
antagpanel_category = ANTAG_GROUP_HORRORS
|
||||
show_in_antagpanel = FALSE
|
||||
suicide_cry = "PRAISE THE RINGLEADER!!"
|
||||
antag_moodlet = /datum/mood_event/heretics/lunatic
|
||||
can_assign_self_objectives = FALSE
|
||||
hardcore_random_bonus = FALSE
|
||||
// The mind of the ascended heretic who created us
|
||||
var/datum/mind/ascended_heretic
|
||||
// The body of the ascended heretic who created us
|
||||
var/mob/living/carbon/human/ascended_body
|
||||
|
||||
/// Runs when the moon heretic creates us, used to give the lunatic a master
|
||||
/datum/antagonist/lunatic/proc/set_master(datum/mind/heretic_master, mob/living/carbon/human/heretic_body)
|
||||
src.ascended_heretic = heretic_master
|
||||
src.ascended_body = heretic_body
|
||||
|
||||
var/datum/objective/lunatic_obj = new()
|
||||
lunatic_obj.explanation_text = "Assist your master [heretic_master]."
|
||||
|
||||
to_chat(owner, span_boldnotice("Ruin the lie, save the truth through obeying [heretic_master] the ringleader!"))
|
||||
|
||||
/datum/antagonist/lunatic/greet()
|
||||
owner.current.playsound_local(get_turf(owner.current), 'sound/effects/moon_parade.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
|
||||
return ..()
|
||||
|
||||
/datum/antagonist/lunatic/apply_innate_effects(mob/living/mob_override)
|
||||
var/mob/living/our_mob = mob_override || owner.current
|
||||
handle_clown_mutation(our_mob, "Ancient knowledge from the moon has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
|
||||
our_mob.faction |= FACTION_HERETIC
|
||||
|
||||
var/datum/action/cooldown/lunatic_track/moon_track = new /datum/action/cooldown/lunatic_track()
|
||||
var/datum/action/cooldown/spell/touch/mansus_grasp/mad_touch = new /datum/action/cooldown/spell/touch/mansus_grasp()
|
||||
mad_touch.Grant(our_mob)
|
||||
moon_track.Grant(our_mob)
|
||||
|
||||
/datum/antagonist/lunatic/remove_innate_effects(mob/living/mob_override)
|
||||
var/mob/living/our_mob = mob_override || owner.current
|
||||
handle_clown_mutation(our_mob, removing = FALSE)
|
||||
our_mob.faction -= FACTION_HERETIC
|
||||
|
||||
// Mood event given to moon acolytes
|
||||
/datum/mood_event/heretics/lunatic
|
||||
description = "THE TRUTH REVEALED, THE LIE SLAIN."
|
||||
mood_change = 10
|
||||
|
||||
@@ -237,6 +237,7 @@
|
||||
|
||||
addtimer(CALLBACK(src, PROC_REF(create_blade)), blade_recharge_time)
|
||||
|
||||
|
||||
/datum/status_effect/caretaker_refuge
|
||||
id = "Caretaker’s Last Refuge"
|
||||
status_type = STATUS_EFFECT_REFRESH
|
||||
@@ -292,3 +293,22 @@
|
||||
/datum/status_effect/caretaker_refuge/proc/prevent_cuff(datum/source, mob/attemptee)
|
||||
SIGNAL_HANDLER
|
||||
return COMSIG_CARBON_CUFF_PREVENT
|
||||
|
||||
// Path Of Moon status effect which hides the identity of the heretic
|
||||
/datum/status_effect/moon_grasp_hide
|
||||
id = "Moon Grasp Hide Identity"
|
||||
status_type = STATUS_EFFECT_REFRESH
|
||||
duration = 15 SECONDS
|
||||
alert_type = /atom/movable/screen/alert/status_effect/moon_grasp_hide
|
||||
|
||||
/datum/status_effect/moon_grasp_hide/on_apply()
|
||||
owner.add_traits(list(TRAIT_UNKNOWN, TRAIT_SILENT_FOOTSTEPS), id)
|
||||
return TRUE
|
||||
|
||||
/datum/status_effect/moon_grasp_hide/on_remove()
|
||||
owner.remove_traits(list(TRAIT_UNKNOWN, TRAIT_SILENT_FOOTSTEPS), id)
|
||||
|
||||
/atom/movable/screen/alert/status_effect/moon_grasp_hide
|
||||
name = "Blessing of The Moon"
|
||||
desc = "The Moon clouds their vision, as the sun always has yours."
|
||||
icon_state = "moon_hide"
|
||||
|
||||
@@ -214,3 +214,82 @@
|
||||
/datum/status_effect/heretic_lastresort/on_remove()
|
||||
REMOVE_TRAIT(owner, TRAIT_IGNORESLOWDOWN, TRAIT_STATUS_EFFECT(id))
|
||||
owner.AdjustUnconscious(20 SECONDS, ignore_canstun = TRUE)
|
||||
|
||||
|
||||
|
||||
/// Used by moon heretics to make people mad
|
||||
/datum/status_effect/moon_converted
|
||||
id = "moon converted"
|
||||
alert_type = /atom/movable/screen/alert/status_effect/moon_converted
|
||||
duration = -1
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
///used to track damage
|
||||
var/damage_sustained = 0
|
||||
///overlay used to indicate that someone is marked
|
||||
var/mutable_appearance/moon_insanity_overlay
|
||||
/// icon file for the overlay
|
||||
var/effect_icon = 'icons/effects/eldritch.dmi'
|
||||
/// icon state for the overlay
|
||||
var/effect_icon_state = "moon_insanity_overlay"
|
||||
|
||||
/atom/movable/screen/alert/status_effect/moon_converted
|
||||
name = "Moon Converted"
|
||||
desc = "THEY LIE, THEY ALL LIE!!! SLAY THEM!!! BURN THEM!!! MAKE THEM SEE THE TRUTH!!!"
|
||||
icon_state = "lastresort"
|
||||
|
||||
/datum/status_effect/moon_converted/on_creation()
|
||||
. = ..()
|
||||
moon_insanity_overlay = mutable_appearance(effect_icon, effect_icon_state, ABOVE_MOB_LAYER)
|
||||
|
||||
/datum/status_effect/moon_converted/Destroy()
|
||||
QDEL_NULL(moon_insanity_overlay)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/moon_converted/on_apply()
|
||||
RegisterSignal(owner, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_damaged))
|
||||
// Heals them so people who are in crit can have this affect applied on them and still be of some use for the heretic
|
||||
owner.adjustBruteLoss( -150 + owner.mob_mood.sanity)
|
||||
owner.adjustFireLoss(-150 + owner.mob_mood.sanity)
|
||||
|
||||
to_chat(owner, span_warning(("THE MOON SHOWS YOU THE TRUTH AND THE LIARS WISH TO COVER IT, SLAY THEM ALL!!!</span>")))
|
||||
owner.balloon_alert(owner, "they lie..THEY ALL LIE!!!")
|
||||
owner.AdjustUnconscious(7 SECONDS, ignore_canstun = FALSE)
|
||||
ADD_TRAIT(owner, TRAIT_MUTE, REF(src))
|
||||
RegisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(update_owner_overlay))
|
||||
owner.update_appearance(UPDATE_OVERLAYS)
|
||||
owner.cause_hallucination(/datum/hallucination/delusion/preset/moon, "[id] status effect", duration = duration, affects_us = FALSE, affects_others = TRUE)
|
||||
return TRUE
|
||||
|
||||
/datum/status_effect/moon_converted/proc/on_damaged(datum/source, damage, damagetype)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
// Stamina damage is funky so we will ignore it
|
||||
if(damagetype == STAMINA)
|
||||
return
|
||||
|
||||
damage_sustained += damage
|
||||
|
||||
if (damage_sustained < 75)
|
||||
return
|
||||
qdel(src)
|
||||
|
||||
/datum/status_effect/moon_converted/proc/update_owner_overlay(atom/source, list/overlays)
|
||||
SIGNAL_HANDLER
|
||||
overlays += moon_insanity_overlay
|
||||
|
||||
/datum/status_effect/moon_converted/on_remove()
|
||||
// Span warning and unconscious so they realize they aren't evil anymore
|
||||
to_chat(owner, span_warning("Your mind is cleared from the effect of the manus, your alligiences are as they were before"))
|
||||
REMOVE_TRAIT(owner, TRAIT_MUTE, REF(src))
|
||||
owner.AdjustUnconscious(5 SECONDS, ignore_canstun = FALSE)
|
||||
owner.log_message("[owner] is no longer insane.", LOG_GAME)
|
||||
UnregisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS)
|
||||
UnregisterSignal(owner, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_damaged))
|
||||
owner.update_appearance(UPDATE_OVERLAYS)
|
||||
return ..()
|
||||
|
||||
|
||||
/atom/movable/screen/alert/status_effect/moon_converted
|
||||
name = "Moon Converted"
|
||||
desc = "They LIE, SLAY ALL OF THE THEM!!! THE LIARS OF THE SUN MUST FALL!!!"
|
||||
icon_state = "moon_insanity"
|
||||
|
||||
@@ -260,3 +260,48 @@
|
||||
/datum/status_effect/eldritch/lock/on_remove()
|
||||
REMOVE_TRAIT(owner, TRAIT_ALWAYS_NO_ACCESS, STATUS_EFFECT_TRAIT)
|
||||
return ..()
|
||||
|
||||
// MARK OF MOON
|
||||
|
||||
/datum/status_effect/eldritch/moon
|
||||
effect_icon_state = "emark8"
|
||||
///Used for checking if the pacifism effect should end early
|
||||
var/damage_sustained = 0
|
||||
|
||||
/datum/status_effect/eldritch/moon/on_apply()
|
||||
. = ..()
|
||||
ADD_TRAIT(owner, TRAIT_PACIFISM, id)
|
||||
owner.emote(pick("giggle", "laugh"))
|
||||
owner.balloon_alert(owner, "you feel unable to hurt a soul!")
|
||||
RegisterSignal (owner, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_damaged))
|
||||
return TRUE
|
||||
|
||||
/// Checks for damage so the heretic can't just attack them with another weapon whilst they are unable to fight back
|
||||
/datum/status_effect/eldritch/moon/proc/on_damaged(datum/source, damage, damagetype)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
// The grasp itself deals stamina damage so we will ignore it
|
||||
if(damagetype == STAMINA)
|
||||
return
|
||||
|
||||
damage_sustained += damage
|
||||
|
||||
if(damage_sustained < 15)
|
||||
return
|
||||
|
||||
// Removes the trait in here since we don't wanna destroy the mark before its detonated or allow detonation triggers with other weapons
|
||||
REMOVE_TRAIT(owner, TRAIT_PACIFISM, id)
|
||||
owner.balloon_alert(owner, "you feel able to once again strike!")
|
||||
|
||||
/datum/status_effect/eldritch/moon/on_effect()
|
||||
owner.adjust_confusion(30 SECONDS)
|
||||
owner.emote(pick("giggle", "laugh"))
|
||||
owner.add_mood_event("Moon Insanity", /datum/mood_event/moon_insanity)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/eldritch/moon/on_remove()
|
||||
. = ..()
|
||||
UnregisterSignal (owner, COMSIG_MOB_APPLY_DAMAGE)
|
||||
|
||||
// Incase the trait was not removed earlier
|
||||
REMOVE_TRAIT(owner, TRAIT_PACIFISM, id)
|
||||
|
||||
@@ -120,7 +120,6 @@
|
||||
if(length(banned_atom_types))
|
||||
if(nearby_atom.type in banned_atom_types)
|
||||
continue
|
||||
|
||||
// This item is a valid type. Add it to our selected atoms list.
|
||||
selected_atoms |= nearby_atom
|
||||
// If it's a stack, we gotta see if it has more than one inside,
|
||||
@@ -182,6 +181,7 @@
|
||||
// - If the ritual was success (Returned TRUE), proceede to clean up the atoms involved in the ritual. The result has already been spawned by this point.
|
||||
// - If the ritual failed for some reason (Returned FALSE), likely due to no ghosts taking a role or an error, we shouldn't clean up anything, and reset.
|
||||
var/ritual_result = ritual.on_finished_recipe(user, selected_atoms, loc)
|
||||
|
||||
if(ritual_result)
|
||||
ritual.cleanup_atoms(selected_atoms)
|
||||
|
||||
|
||||
@@ -113,6 +113,16 @@
|
||||
r_hand = /obj/item/gun/energy/recharge/ebow
|
||||
shoes = /obj/item/clothing/shoes/magboots/advance
|
||||
|
||||
/datum/outfit/heretic_hallucination
|
||||
name = "Heretic Hallucination"
|
||||
|
||||
uniform = /obj/item/clothing/under/color/grey
|
||||
suit = /obj/item/clothing/suit/hooded/cultrobes/eldritch
|
||||
neck = /obj/item/clothing/neck/heretic_focus
|
||||
r_hand = /obj/item/melee/touch_attack/mansus_fist
|
||||
head = /obj/item/clothing/head/hooded/cult_hoodie/eldritch
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
|
||||
/datum/outfit/rev_cutout
|
||||
name = "Revolutionary Cutout"
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/hallucination/delusion/start()
|
||||
if(!hallucinator.client || !delusion_icon_file)
|
||||
if(!hallucinator.client)
|
||||
return FALSE
|
||||
|
||||
feedback_details += "Delusion: [delusion_name]"
|
||||
@@ -229,3 +229,31 @@
|
||||
affects_us = FALSE
|
||||
affects_others = TRUE
|
||||
random_hallucination_weight = 0
|
||||
|
||||
/// Hallucination used by the path of moon heretic to turn everyone into a lunar mass
|
||||
/datum/hallucination/delusion/preset/moon
|
||||
delusion_icon_file = 'icons/mob/nonhuman-player/eldritch_mobs.dmi'
|
||||
delusion_icon_state = "moon_mass"
|
||||
delusion_name = "moon"
|
||||
duration = 15 SECONDS
|
||||
affects_others = TRUE
|
||||
random_hallucination_weight = 0
|
||||
|
||||
// Hallucination used by heretic paintings
|
||||
/datum/hallucination/delusion/preset/heretic
|
||||
random_hallucination_weight = 0
|
||||
dynamic_icon = TRUE
|
||||
delusion_name = "Heretic"
|
||||
affects_others = TRUE
|
||||
affects_us = FALSE
|
||||
duration = 11 SECONDS
|
||||
|
||||
/datum/hallucination/delusion/preset/heretic/make_delusion_image(mob/over_who)
|
||||
delusion_icon_file = getFlatIcon(get_dynamic_human_appearance(/datum/outfit/heretic_hallucination, r_hand = NO_REPLACE))
|
||||
return ..()
|
||||
|
||||
/datum/hallucination/delusion/preset/heretic/gate
|
||||
delusion_name = "Mind Gate"
|
||||
duration = 60 SECONDS
|
||||
affects_us = TRUE
|
||||
|
||||
|
||||
@@ -56,6 +56,9 @@
|
||||
// No tongue, no tastin'
|
||||
if(!tongue?.sense_of_taste || HAS_TRAIT(src, TRAIT_AGEUSIA))
|
||||
return NONE
|
||||
// Handled in here since the brain trauma can't modify taste directly (/datum/brain_trauma/severe/flesh_desire)
|
||||
if(HAS_TRAIT(src, TRAIT_FLESH_DESIRE))
|
||||
return GORE | MEAT
|
||||
return tongue.liked_foodtypes
|
||||
|
||||
/**
|
||||
@@ -83,6 +86,8 @@
|
||||
// No tongue, no tastin'
|
||||
if(!tongue)
|
||||
return TOXIC
|
||||
if(HAS_TRAIT(src, TRAIT_FLESH_DESIRE))
|
||||
return VEGETABLES | DAIRY | FRUIT | FRIED
|
||||
return tongue.toxic_foodtypes
|
||||
|
||||
/**
|
||||
|
||||
|
Before Width: | Height: | Size: 946 KiB After Width: | Height: | Size: 938 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 351 B |
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 230 KiB |
@@ -1543,6 +1543,7 @@
|
||||
#include "code\datums\looping_sounds\item_sounds.dm"
|
||||
#include "code\datums\looping_sounds\machinery_sounds.dm"
|
||||
#include "code\datums\looping_sounds\music.dm"
|
||||
#include "code\datums\looping_sounds\projectiles.dm"
|
||||
#include "code\datums\looping_sounds\vents.dm"
|
||||
#include "code\datums\looping_sounds\weather.dm"
|
||||
#include "code\datums\mapgen\CaveGenerator.dm"
|
||||
@@ -1582,6 +1583,7 @@
|
||||
#include "code\datums\mood_events\dna_infuser_events.dm"
|
||||
#include "code\datums\mood_events\drink_events.dm"
|
||||
#include "code\datums\mood_events\drug_events.dm"
|
||||
#include "code\datums\mood_events\eldritch_painting_events.dm"
|
||||
#include "code\datums\mood_events\food_events.dm"
|
||||
#include "code\datums\mood_events\generic_negative_events.dm"
|
||||
#include "code\datums\mood_events\generic_positive_events.dm"
|
||||
@@ -2987,9 +2989,11 @@
|
||||
#include "code\modules\antagonists\heretic\heretic_monsters.dm"
|
||||
#include "code\modules\antagonists\heretic\influences.dm"
|
||||
#include "code\modules\antagonists\heretic\knife_effect.dm"
|
||||
#include "code\modules\antagonists\heretic\moon_lunatic.dm"
|
||||
#include "code\modules\antagonists\heretic\rust_effect.dm"
|
||||
#include "code\modules\antagonists\heretic\transmutation_rune.dm"
|
||||
#include "code\modules\antagonists\heretic\items\eldritch_flask.dm"
|
||||
#include "code\modules\antagonists\heretic\items\eldritch_painting.dm"
|
||||
#include "code\modules\antagonists\heretic\items\forbidden_book.dm"
|
||||
#include "code\modules\antagonists\heretic\items\heretic_armor.dm"
|
||||
#include "code\modules\antagonists\heretic\items\heretic_blades.dm"
|
||||
@@ -2998,18 +3002,21 @@
|
||||
#include "code\modules\antagonists\heretic\items\keyring.dm"
|
||||
#include "code\modules\antagonists\heretic\items\labyrinth_handbook.dm"
|
||||
#include "code\modules\antagonists\heretic\items\madness_mask.dm"
|
||||
#include "code\modules\antagonists\heretic\items\unfathomable_curio.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\ash_lore.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\blade_lore.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\cosmic_lore.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\flesh_lore.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\general_side.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\lock_lore.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\moon_lore.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\rust_lore.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\side_ash_flesh.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\side_blade_rust.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\side_cosmos_ash.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\side_flesh_void.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\side_lock_flesh.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\side_lock_moon.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\side_rust_cosmos.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\side_void_blade.dm"
|
||||
#include "code\modules\antagonists\heretic\knowledge\starting_lore.dm"
|
||||
@@ -3038,10 +3045,15 @@
|
||||
#include "code\modules\antagonists\heretic\magic\flesh_ascension.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\flesh_surgery.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\furious_steel.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\lunatic_track.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\madness_touch.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\manse_link.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\mansus_grasp.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\mind_gate.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\mirror_walk.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\moon_parade.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\moon_ringleader.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\moon_smile.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\nightwatcher_rebirth.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\realignment.dm"
|
||||
#include "code\modules\antagonists\heretic\magic\rust_charge.dm"
|
||||
|
||||