diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm
index 0499beb69a8..7ac7e93f00b 100644
--- a/code/__DEFINES/achievements.dm
+++ b/code/__DEFINES/achievements.dm
@@ -26,6 +26,9 @@
#define MEDAL_GOTTEM "GOTTEM"
#define MEDAL_ASCENSION "Ascension"
#define MEDAL_FRENCHING "FrenchingTheBubble"
+#define MEDAL_ASH_ASCENSION "Ash"
+#define MEDAL_FLESH_ASCENSION "Flesh"
+#define MEDAL_RUST_ASCENSION "Rust"
//Skill medal hub IDs
#define MEDAL_LEGENDARY_MINER "Legendary Miner"
diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm
index 31002789930..b81f97c635d 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -119,6 +119,8 @@
#define STASIS_MACHINE_EFFECT "stasis_machine"
+#define STASIS_ASCENSION_EFFECT "heretic_ascension"
+
// Stasis helpers
#define IS_IN_STASIS(mob) (mob.has_status_effect(STATUS_EFFECT_STASIS))
diff --git a/code/datums/achievements/misc_achievements.dm b/code/datums/achievements/misc_achievements.dm
index 3957c52dc78..b9ab38b0688 100644
--- a/code/datums/achievements/misc_achievements.dm
+++ b/code/datums/achievements/misc_achievements.dm
@@ -123,3 +123,21 @@
desc = "Just a taste, for science!"
database_id = MEDAL_FRENCHING
icon = "frenching"
+
+/datum/award/achievement/misc/ash_ascension
+ name = "Nightwatcher's Eyes"
+ desc = "You've risen above the flames, became one with the ashes. You've been reborn as one with the Nightwatcher."
+ database_id = MEDAL_ASH_ASCENSION
+ icon = "ashascend"
+
+/datum/award/achievement/misc/flesh_ascension
+ name = "Vortex of Arms"
+ desc = "You've became something more, something greater. A piece of the emperor resides within you, and you within him."
+ database_id = MEDAL_FLESH_ASCENSION
+ icon = "fleshascend"
+
+/datum/award/achievement/misc/rust_ascension
+ name = "Hills of Rust"
+ desc = "You've summoned a piece of the Hill of rust, and so the Hills welcome you."
+ database_id = MEDAL_RUST_ASCENSION
+ icon = "rustascend"
diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm
index 0334ec757e3..4c7e5edf86c 100644
--- a/code/datums/mood_events/generic_negative_events.dm
+++ b/code/datums/mood_events/generic_negative_events.dm
@@ -235,7 +235,7 @@
timeout = 1 MINUTES
/datum/mood_event/gates_of_mansus
- description = "LIVING IN A PERFORMANCE IS WORSE THAN DEATH\n"
+ description = "I HAD A GLIMPSE OF THE HORROR BEYOND THIS WORLD. REALITY UNCOILED BEFORE MY EYES!\n"
mood_change = -25
timeout = 4 MINUTES
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm
index abb84a14961..b8a5abd9032 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm
@@ -6,6 +6,7 @@
job_rank = ROLE_HERETIC
antag_hud_type = ANTAG_HUD_HERETIC
antag_hud_name = "heretic"
+ can_hijack = HIJACK_HIJACKER
var/give_equipment = TRUE
var/list/researched_knowledge = list()
var/total_sacrifices = 0
@@ -91,8 +92,9 @@
/datum/antagonist/heretic/proc/forge_primary_objectives()
var/list/assasination = list()
var/list/protection = list()
+ var/choose_list = list("assasinate","hjiack","protect","glory")
for(var/i in 1 to 2)
- var/pck = pick("assasinate","stalk","protect")
+ var/pck = pick(choose_list)
switch(pck)
if("assasinate")
var/datum/objective/assassinate/A = new
@@ -101,11 +103,18 @@
A.find_target(owners,protection)
assasination += A.target
objectives += A
- if("stalk")
- var/datum/objective/stalk/S = new
- S.owner = owner
- S.find_target()
- objectives += S
+ if("hjiack")
+ var/datum/objective/hijack/hijack = new
+ hijack.owner = owner
+ objectives += hijack
+ choose_list -= "hijack"
+ choose_list -= "glory"
+ if("glory")
+ var/datum/objective/martyr/martyrdom = new
+ martyrdom.owner = owner
+ objectives += martyrdom
+ choose_list -= "hijack"
+ choose_list -= "glory"
if("protect")
var/datum/objective/protect/P = new
P.owner = owner
@@ -210,33 +219,6 @@
// Objectives //
////////////////
-/datum/objective/stalk
- name = "spendtime"
- var/timer = 5 MINUTES
-
-/datum/objective/stalk/process(delta_time)
- if(owner?.current.stat != DEAD && target?.current.stat != DEAD && (target in view(5,owner.current)))
- timer -= delta_time * 10 // timer is in deciseconds
- ///we don't want to process after the counter reaches 0, otherwise it is wasted processing
- if(timer <= 0)
- STOP_PROCESSING(SSprocessing,src)
-
-/datum/objective/stalk/Destroy(force, ...)
- STOP_PROCESSING(SSprocessing,src)
- return ..()
-
-/datum/objective/stalk/update_explanation_text()
- //we want to start processing after we set the timer
- timer += rand(-3 MINUTES, 3 MINUTES)
- START_PROCESSING(SSprocessing,src)
- if(target?.current)
- explanation_text = "Stalk [target.name] for at least [DisplayTimeText(timer)] while they're alive."
- else
- explanation_text = "Free Objective"
-
-/datum/objective/stalk/check_completion()
- return timer <= 0 || explanation_text == "Free Objective"
-
/datum/objective/sacrifice_ecult
name = "sacrifice"
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_book.dm b/code/modules/antagonists/eldritch_cult/eldritch_book.dm
index f3135fe6599..890520876e7 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_book.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_book.dm
@@ -40,7 +40,7 @@
///Gives you a charge and destroys a corresponding influence
/obj/item/forbidden_book/proc/get_power_from_influence(atom/target, mob/user)
var/obj/effect/reality_smash/RS = target
- to_chat(target, "You start drawing power from influence...")
+ to_chat(user, "You start drawing power from influence...")
if(do_after(user,10 SECONDS,TRUE,RS))
qdel(RS)
charge += 1
@@ -50,7 +50,7 @@
for(var/turf/T in range(1,target))
if(is_type_in_typecache(T, blacklisted_turfs))
- to_chat(target, "The terrain doesn't support runes!")
+ to_chat(user, "The terrain doesn't support runes!")
return
var/A = get_turf(target)
to_chat(user, "You start drawing a rune...")
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm
index 0715764434c..70999092c4b 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm
@@ -142,7 +142,7 @@
/datum/reality_smash_tracker/proc/_Generate()
var/targ_len = length(targets)
var/smash_len = length(smashes)
- var/number = targ_len * 6 - smash_len
+ var/number = max(targ_len * (4-(targ_len-1)) - smash_len,1)
for(var/i in 0 to number)
@@ -188,6 +188,15 @@
icon_state = "pierced_illusion"
anchored = TRUE
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ alpha = 0
+
+/obj/effect/broken_illusion/Initialize()
+ . = ..()
+ addtimer(CALLBACK(src,.proc/show_presence),15 SECONDS)
+
+///Makes this obj appear out of nothing
+/obj/effect/broken_illusion/proc/show_presence()
+ animate(src,alpha = 255,time = 15 SECONDS)
/obj/effect/broken_illusion/attack_hand(mob/living/user)
if(!ishuman(user))
@@ -230,7 +239,8 @@
if(!IS_HERETIC(user) && ishuman(user))
var/mob/living/carbon/human/human_user = user
to_chat(human_user,"Your brain hurts when you look at this!")
- human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN,10)
+ human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN,10,190)
+ SEND_SIGNAL(human_user, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus)
/obj/effect/reality_smash
name = "/improper reality smash"
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
index 85294d4c853..5021282ac98 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
@@ -16,20 +16,51 @@
return
var/dist = get_dist(user.loc,target.loc)
var/dir = get_dir(user.loc,target.loc)
-
- switch(dist)
- if(0 to 15)
- to_chat(user,"[target.real_name] is near you. They are to the [dir2text(dir)] of you!")
- if(16 to 31)
- to_chat(user,"[target.real_name] is somewhere in your vicinty. They are to the [dir2text(dir)] of you!")
- if(32 to 127)
- to_chat(user,"[target.real_name] is far away from you. They are to the [dir2text(dir)] of you!")
- else
- to_chat(user,"[target.real_name] is beyond our reach.")
+ if(user.z != target.z)
+ to_chat(user,"[target.real_name] is on another plane of existance!")
+ else
+ switch(dist)
+ if(0 to 15)
+ to_chat(user,"[target.real_name] is near you. They are to the [dir2text(dir)] of you!")
+ if(16 to 31)
+ to_chat(user,"[target.real_name] is somewhere in your vicinty. They are to the [dir2text(dir)] of you!")
+ if(32 to 127)
+ to_chat(user,"[target.real_name] is far away from you. They are to the [dir2text(dir)] of you!")
+ else
+ to_chat(user,"[target.real_name] is beyond our reach.")
if(target.stat == DEAD)
to_chat(user,"[target.real_name] is dead. Bring them onto a transmutation rune!")
+/datum/action/innate/heretic_shatter
+ name = "Shattering Offer"
+ desc = "By breaking your blade you are noticed by the hill or rust and are granted an escape from a dire sitatuion. (Teleports you to a random safe z turf on your current z level but destroys your blade.)"
+ background_icon_state = "bg_ecult"
+ button_icon_state = "shatter"
+ icon_icon = 'icons/mob/actions/actions_ecult.dmi'
+ check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN
+ var/mob/living/carbon/human/holder
+ var/obj/item/melee/sickly_blade/sword
+
+/datum/action/innate/heretic_shatter/Grant(mob/user, obj/object)
+ sword = object
+ holder = user
+ //i know what im doing
+ return ..()
+
+/datum/action/innate/heretic_shatter/IsAvailable()
+ if(IS_HERETIC(holder) || IS_HERETIC_MONSTER(holder))
+ return TRUE
+ else
+ return FALSE
+
+/datum/action/innate/heretic_shatter/Activate()
+ var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE)
+ do_teleport(holder,safe_turf,forceMove = TRUE)
+ to_chat(holder," You feel a gust of energy flow through your body, Rusted Hills heard your call...")
+ qdel(sword)
+
+
/obj/item/melee/sickly_blade
name = "Sickly blade"
desc = "A sickly green crescent blade, decorated with an ornamental eye. You feel like you're being watched..."
@@ -48,6 +79,11 @@
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend")
+ var/datum/action/innate/heretic_shatter/linked_action
+
+/obj/item/melee/sickly_blade/Initialize()
+ . = ..()
+ linked_action = new(src)
/obj/item/melee/sickly_blade/attack(mob/living/M, mob/living/user)
if(!(IS_HERETIC(user) || IS_HERETIC_MONSTER(user)))
@@ -57,6 +93,14 @@
return FALSE
return ..()
+/obj/item/melee/sickly_blade/pickup(mob/user)
+ . = ..()
+ linked_action.Grant(user, src)
+
+/obj/item/melee/sickly_blade/dropped(mob/user, silent)
+ . = ..()
+ linked_action.Remove(user, src)
+
/obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
var/datum/antagonist/heretic/cultie = user.mind.has_antag_datum(/datum/antagonist/heretic)
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm b/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm
index c7103e5c5f7..dde0835cb93 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm
@@ -106,7 +106,7 @@
*
* Gives addtional effects to sickly blade weapon
*/
-/datum/eldritch_knowledge/proc/on_eldritch_blade(target,user,proximity_flag,click_parameters)
+/datum/eldritch_knowledge/proc/on_eldritch_blade(atom/target,mob/user,proximity_flag,click_parameters)
return
//////////////
@@ -128,6 +128,7 @@
/datum/eldritch_knowledge/curse
var/timer = 5 MINUTES
var/list/fingerprints = list()
+ var/list/dna = list()
/datum/eldritch_knowledge/curse/recipe_snowflake_check(list/atoms, loc)
fingerprints = list()
@@ -150,7 +151,7 @@
compiled_list[human_to_check.real_name] = human_to_check
if(compiled_list.len == 0)
- to_chat(user, "The items don't posses required fingerprints.")
+ to_chat(user, "The items don't posses required fingerprints or dna.")
return FALSE
var/chosen_mob = input("Select the person you wish to curse","Your target") as null|anything in sortList(compiled_list, /proc/cmp_mob_realname_dsc)
@@ -192,6 +193,7 @@
//Ascension knowledge
/datum/eldritch_knowledge/final
+
var/finished = FALSE
/datum/eldritch_knowledge/final/recipe_snowflake_check(list/atoms, loc,selected_atoms)
@@ -207,6 +209,8 @@
/datum/eldritch_knowledge/final/on_finished_recipe(mob/living/user, list/atoms, loc)
finished = TRUE
+ var/datum/antagonist/heretic/ascension = user.mind.has_antag_datum(/datum/antagonist/heretic)
+ ascension.ascended = TRUE
return TRUE
/datum/eldritch_knowledge/final/cleanup_atoms(list/atoms)
@@ -256,18 +260,22 @@
if(!istype(X,/obj/item/forbidden_book))
continue
var/obj/item/forbidden_book/FB = X
- FB.charge++
+ FB.charge += 2
break
if(!LH.target)
var/datum/objective/A = new
A.owner = user.mind
- var/datum/mind/targeted = A.find_target()//easy way, i dont feel like copy pasting that entire block of code
- LH.target = targeted.current
+ var/list/targets = list()
+ for(var/i in 0 to 3)
+ var/datum/mind/targeted = A.find_target()//easy way, i dont feel like copy pasting that entire block of code
+ if(!targeted)
+ break
+ targets[targeted.current.real_name] = targeted.current
+ LH.target = targets[input(user,"Choose your next target","Target") in targets]
qdel(A)
if(LH.target)
to_chat(user,"Your new target has been selected, go and sacrifice [LH.target.real_name]!")
-
else
to_chat(user,"target could not be found for living heart.")
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm
index f745cd7107f..9202a792c99 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm
@@ -34,7 +34,7 @@
desc = "Touch spell that let's you channel the power of the old gods through you."
hand_path = /obj/item/melee/touch_attack/mansus_fist
school = "evocation"
- charge_max = 150
+ charge_max = 100
clothes_req = FALSE
action_icon = 'icons/mob/actions/actions_ecult.dmi'
action_icon_state = "mansus_grasp"
@@ -103,10 +103,9 @@
desc = "Spreads rust onto nearby turfs."
range = 2
-/obj/effect/proc_holder/spell/targeted/touch/blood_siphon
+/obj/effect/proc_holder/spell/pointed/blood_siphon
name = "Blood Siphon"
desc = "Touch spell that heals you while damaging the enemy, has a chance to transfer wounds between you and your enemy."
- hand_path = /obj/item/melee/touch_attack/blood_siphon
school = "evocation"
charge_max = 150
clothes_req = FALSE
@@ -115,17 +114,11 @@
action_icon = 'icons/mob/actions/actions_ecult.dmi'
action_icon_state = "blood_siphon"
action_background_icon_state = "bg_ecult"
+ range = 9
-/obj/item/melee/touch_attack/blood_siphon
- name = "Blood Siphon"
- desc = "A sinister looking aura that distorts the flow of reality around it."
- icon_state = "disintegrate"
- inhand_icon_state = "disintegrate"
- catchphrase = "R'BRTH"
-
-/obj/item/melee/touch_attack/blood_siphon/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
- if(!proximity_flag)
- return
+/obj/effect/proc_holder/spell/pointed/blood_siphon/cast(list/targets, mob/user)
+ . = ..()
+ var/target = targets[1]
playsound(user, 'sound/magic/demon_attack1.ogg', 75, TRUE)
if(ishuman(target))
var/mob/living/carbon/human/tar = target
@@ -154,7 +147,17 @@
carbon_target.blood_volume -= 20
if(carbon_user.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all
carbon_user.blood_volume += 20
- return ..()
+ return
+
+/obj/effect/proc_holder/spell/pointed/blood_siphon/can_target(atom/target, mob/user, silent)
+ . = ..()
+ if(!.)
+ return FALSE
+ if(!istype(target,/mob/living))
+ if(!silent)
+ to_chat(user, "You are unable to siphon [target]!")
+ return FALSE
+ return TRUE
/obj/effect/proc_holder/spell/targeted/projectile/dumbfire/rust_wave
name = "Patron's Reach"
@@ -409,7 +412,7 @@
new /obj/effect/hotspot(T)
T.hotspot_expose(700,50,1)
for(var/mob/living/livies in T.contents - centre)
- livies.adjustFireLoss(10)
+ livies.adjustFireLoss(5)
_range++
sleep(3)
@@ -458,7 +461,7 @@
new /obj/effect/hotspot(T)
T.hotspot_expose(700, 250 * delta_time, 1)
for(var/mob/living/livies in T.contents - current_user)
- livies.adjustFireLoss(25 * delta_time)
+ livies.adjustFireLoss(2.5 * delta_time)
/obj/effect/proc_holder/spell/targeted/worm_contract
@@ -477,6 +480,7 @@
. = ..()
if(!istype(user,/mob/living/simple_animal/hostile/eldritch/armsy))
to_chat(user, "You try to contract your muscles but nothing happens...")
+ return
var/mob/living/simple_animal/hostile/eldritch/armsy/armsy = user
armsy.contract_next_chain_into_single_tile()
@@ -667,3 +671,46 @@
return 3
else
return 2
+
+/obj/effect/proc_holder/spell/targeted/shed_human_form
+ name = "Shed form"
+ desc = "Shed your fragile form, become one with the arms, become one with the emperor."
+ invocation_type = INVOCATION_SHOUT
+ invocation = "REALITY UNCOIL!"
+ clothes_req = FALSE
+ action_background_icon_state = "bg_ecult"
+ range = -1
+ include_user = TRUE
+ charge_max = 100
+ action_icon = 'icons/mob/actions/actions_ecult.dmi'
+ action_icon_state = "worm_ascend"
+ var/segment_length = 10
+
+/obj/effect/proc_holder/spell/targeted/shed_human_form/cast(list/targets, mob/user)
+ . = ..()
+ var/mob/living/target = user
+ var/mob/living/mob_inside = locate() in target.contents - target
+
+ if(!mob_inside)
+ var/mob/living/simple_animal/hostile/eldritch/armsy/prime/outside = new(user.loc,TRUE,segment_length)
+ target.mind.transfer_to(outside, TRUE)
+ target.forceMove(outside)
+ target.apply_status_effect(STATUS_EFFECT_STASIS,STASIS_ASCENSION_EFFECT)
+ for(var/mob/living/carbon/human/humie in view(9,outside)-target)
+ if(IS_HERETIC(humie) || IS_HERETIC_MONSTER(humie))
+ continue
+ SEND_SIGNAL(humie, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus)
+ ///They see the very reality uncoil before their eyes.
+ if(prob(25))
+ var/trauma = pick(subtypesof(BRAIN_TRAUMA_MILD) + subtypesof(BRAIN_TRAUMA_SEVERE))
+ humie.gain_trauma(new trauma(), TRAUMA_RESILIENCE_LOBOTOMY)
+ return
+
+ if(iscarbon(mob_inside))
+ var/mob/living/simple_animal/hostile/eldritch/armsy/prime/armsy = target
+ if(mob_inside.remove_status_effect(STATUS_EFFECT_STASIS,STASIS_ASCENSION_EFFECT))
+ mob_inside.forceMove(armsy.loc)
+ armsy.mind.transfer_to(mob_inside, TRUE)
+ segment_length = armsy.get_length()
+ qdel(armsy)
+ return
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm
index 0629c70f832..e61a96ddd44 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm
@@ -2,6 +2,7 @@
/datum/antagonist/heretic_monster
name = "Eldritch Horror"
roundend_category = "Heretics"
+ can_hijack = HIJACK_NEUTRAL
antagpanel_category = "Heretic Beast"
antag_moodlet = /datum/mood_event/heretics
job_rank = ROLE_HERETIC
diff --git a/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm
index 9dcde854237..fdcf3a3dc1c 100644
--- a/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm
+++ b/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm
@@ -30,22 +30,26 @@
. = ..()
if(!iscarbon(target))
return
+ var/mob/living/carbon/C = target
+ var/atom/throw_target = get_edge_target_turf(C, user.dir)
+ if(!C.anchored)
+ . = TRUE
+ C.throw_at(throw_target, rand(4,8), 14, user)
+ return
+/datum/eldritch_knowledge/ashen_grasp/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters)
+ . = ..()
+ if(!iscarbon(target))
+ return
var/mob/living/carbon/C = target
var/datum/status_effect/eldritch/E = C.has_status_effect(/datum/status_effect/eldritch/rust) || C.has_status_effect(/datum/status_effect/eldritch/ash) || C.has_status_effect(/datum/status_effect/eldritch/flesh)
if(E)
- . = TRUE
E.on_effect()
for(var/X in user.mind.spell_list)
if(!istype(X,/obj/effect/proc_holder/spell/targeted/touch/mansus_grasp))
continue
var/obj/effect/proc_holder/spell/targeted/touch/mansus_grasp/MG = X
MG.charge_counter = min(round(MG.charge_counter + MG.charge_max * 0.75),MG.charge_max) // refunds 75% of charge.
- var/atom/throw_target = get_edge_target_turf(C, user.dir)
- if(!C.anchored)
- . = TRUE
- C.throw_at(throw_target, rand(4,8), 14, user)
- return
/datum/eldritch_knowledge/ashen_eyes
name = "Ashen Eyes"
@@ -59,24 +63,25 @@
/datum/eldritch_knowledge/ash_mark
name = "Mark of ash"
gain_text = "Nightwatcher was a very particular man, always watching, in the night. In spite of his duty, he has tranced through the manse, with his blazing lantern."
- desc = "Your sickly blade now applies ash mark on hit. Use your mansus grasp to proc the mark. Mark of Ash causes stamina damage, and fire loss, and spreads to a nearby carbon. Damage decreases with how many times the mark has spread."
+ desc = "Your mansus grasp now applies ash mark on hit. Use your sickly blade to proc the mark. Mark of Ash causes stamina damage, and fire loss, and spreads to a nearby carbon. Damage decreases with how many times the mark has spread."
cost = 2
next_knowledge = list(/datum/eldritch_knowledge/curse/blindness)
banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/flesh_mark)
route = PATH_ASH
-/datum/eldritch_knowledge/ash_mark/on_eldritch_blade(target,user,proximity_flag,click_parameters)
+/datum/eldritch_knowledge/ash_mark/on_mansus_grasp(target,user,proximity_flag,click_parameters)
. = ..()
if(isliving(target))
+ . = TRUE
var/mob/living/living_target = target
living_target.apply_status_effect(/datum/status_effect/eldritch/ash,5)
/datum/eldritch_knowledge/curse/blindness
name = "Curse of blindness"
gain_text = "He walks through the world, unnoticed by the masses."
- desc = "Curse someone with 2 minutes of complete blindness by sacrificing a pair of eyes, a screwdriver and a pool of blood, with an object that the victim has touched with their bare hands."
+ desc = "Curse someone with 2 minutes of complete blindness by sacrificing a pair of eyes, a screwdriver, with an object that the victim has touched with their bare hands."
cost = 1
- required_atoms = list(/obj/item/organ/eyes,/obj/item/screwdriver,/obj/effect/decal/cleanable/blood)
+ required_atoms = list(/obj/item/organ/eyes,/obj/item/screwdriver)
next_knowledge = list(/datum/eldritch_knowledge/curse/corrosion,/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/curse/paralysis)
timer = 2 MINUTES
route = PATH_ASH
@@ -107,7 +112,7 @@
banned_knowledge = list(/datum/eldritch_knowledge/rust_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade)
route = PATH_ASH
-/datum/eldritch_knowledge/ash_blade_upgrade/on_eldritch_blade(target,user,proximity_flag,click_parameters)
+/datum/eldritch_knowledge/ash_blade_upgrade/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/C = target
@@ -119,7 +124,7 @@
gain_text = "Cursed land, cursed man, cursed mind."
desc = "Curse someone for 2 minutes of vomiting and major organ damage. Using a wirecutter, a spill of blood, a heart, left arm and a right arm, and an item that the victim touched with their bare hands."
cost = 1
- required_atoms = list(/obj/item/wirecutters,/obj/effect/decal/cleanable/blood,/obj/item/organ/heart,/obj/item/bodypart/l_arm,/obj/item/bodypart/r_arm)
+ required_atoms = list(/obj/item/wirecutters,/obj/effect/decal/cleanable/vomit,/obj/item/organ/heart)
next_knowledge = list(/datum/eldritch_knowledge/curse/blindness,/datum/eldritch_knowledge/spell/area_conversion)
timer = 2 MINUTES
@@ -136,7 +141,7 @@
gain_text = "Corrupt their flesh, make them bleed."
desc = "Curse someone for 5 minutes of inability to walk. Using a knife, pool of blood, left leg, right leg, a hatchet and an item that the victim touched with their bare hands. "
cost = 1
- required_atoms = list(/obj/item/kitchen/knife,/obj/effect/decal/cleanable/blood,/obj/item/bodypart/l_leg,/obj/item/bodypart/r_leg,/obj/item/hatchet)
+ required_atoms = list(/obj/item/bodypart/l_leg,/obj/item/bodypart/r_leg,/obj/item/hatchet)
next_knowledge = list(/datum/eldritch_knowledge/curse/blindness,/datum/eldritch_knowledge/summon/raw_prophet)
timer = 5 MINUTES
@@ -167,7 +172,7 @@
required_atoms = list(/mob/living/carbon/human)
cost = 3
route = PATH_ASH
- var/list/trait_list = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_BOMBIMMUNE)
+ var/list/trait_list = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE)
/datum/eldritch_knowledge/final/ash_final/on_finished_recipe(mob/living/user, list/atoms, loc)
priority_announce("$^@*$^@(#&$(@^$^@# Fear the blaze, for Ashlord [user.real_name] has come! $^@*$^@(#&$(@^$^@#","#$^@*$^@(#&$(@^$^@#", 'sound/ai/spanomalies.ogg')
@@ -176,20 +181,7 @@
var/mob/living/carbon/human/H = user
H.physiology.brute_mod *= 0.5
H.physiology.burn_mod *= 0.5
- var/datum/antagonist/heretic/ascension = H.mind.has_antag_datum(/datum/antagonist/heretic)
- ascension.ascended = TRUE
+ H.client?.give_award(/datum/award/achievement/misc/ash_ascension, H)
for(var/X in trait_list)
ADD_TRAIT(user,X,MAGIC_TRAIT)
return ..()
-
-/datum/eldritch_knowledge/final/ash_final/on_life(mob/user)
- . = ..()
- if(!finished)
- return
- var/turf/L = get_turf(user)
- var/datum/gas_mixture/env = L.return_air()
- for(var/turf/T in range(1,user))
- env = T.return_air()
- env.temperature += 25
- T.air_update_turf()
- L.air_update_turf()
diff --git a/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm
index f5a196c9bb5..38f6c5324b9 100644
--- a/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm
+++ b/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm
@@ -79,15 +79,7 @@
if(!ishuman(target) || target == user)
return
var/mob/living/carbon/human/human_target = target
- var/datum/status_effect/eldritch/eldritch_effect = human_target.has_status_effect(/datum/status_effect/eldritch/rust) || human_target.has_status_effect(/datum/status_effect/eldritch/ash) || human_target.has_status_effect(/datum/status_effect/eldritch/flesh)
- if(eldritch_effect)
- . = TRUE
- eldritch_effect.on_effect()
- if(iscarbon(target))
- var/mob/living/carbon/carbon_target = target
- var/obj/item/bodypart/bodypart = pick(carbon_target.bodyparts)
- var/datum/wound/slash/severe/crit_wound = new
- crit_wound.apply_wound(bodypart)
+
if(QDELETED(human_target) || human_target.stat != DEAD)
return
@@ -121,6 +113,19 @@
heretic_monster.set_owner(master)
return
+/datum/eldritch_knowledge/flesh_grasp/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters)
+ . = ..()
+ if(!ishuman(target))
+ return
+ var/mob/living/carbon/human/human_target = target
+ var/datum/status_effect/eldritch/eldritch_effect = human_target.has_status_effect(/datum/status_effect/eldritch/rust) || human_target.has_status_effect(/datum/status_effect/eldritch/ash) || human_target.has_status_effect(/datum/status_effect/eldritch/flesh)
+ if(eldritch_effect)
+ eldritch_effect.on_effect()
+ if(iscarbon(target))
+ var/mob/living/carbon/carbon_target = target
+ var/obj/item/bodypart/bodypart = pick(carbon_target.bodyparts)
+ var/datum/wound/slash/severe/crit_wound = new
+ crit_wound.apply_wound(bodypart)
/datum/eldritch_knowledge/flesh_grasp/proc/remove_ghoul(datum/source)
var/mob/living/carbon/human/humie = source
@@ -131,15 +136,16 @@
/datum/eldritch_knowledge/flesh_mark
name = "Mark of flesh"
gain_text = "I saw them, the marked ones. The screams.. the silence."
- desc = "Your sickly blade now applies mark of flesh status effect. To proc the mark, use your mansus grasp on the marked. Mark of flesh when procced causeds additional bleeding."
+ desc = "Your mansus grasp now applies mark of flesh status effect. To proc the mark, use your sickly blade on the marked. Mark of flesh when procced causeds additional bleeding."
cost = 2
next_knowledge = list(/datum/eldritch_knowledge/summon/raw_prophet)
banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/ash_mark)
route = PATH_FLESH
-/datum/eldritch_knowledge/flesh_mark/on_eldritch_blade(target,user,proximity_flag,click_parameters)
+/datum/eldritch_knowledge/flesh_mark/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(isliving(target))
+ . = TRUE
var/mob/living/living_target = target
living_target.apply_status_effect(/datum/status_effect/eldritch/flesh)
@@ -152,7 +158,7 @@
banned_knowledge = list(/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/rust_blade_upgrade)
route = PATH_FLESH
-/datum/eldritch_knowledge/flesh_blade_upgrade/on_eldritch_blade(target,user,proximity_flag,click_parameters)
+/datum/eldritch_knowledge/flesh_blade_upgrade/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/carbon_target = target
@@ -165,7 +171,7 @@
gain_text = "Uncanny man, walks alone in the valley between the worlds , I was able to call his aid."
desc = "You can now summon a Raw Prophet using eyes, a left arm, right arm and a pool of blood. Raw prophets have increased seeing range, as well as Xray. But are very fragile and weak."
cost = 1
- required_atoms = list(/obj/item/organ/eyes,/obj/item/bodypart/l_arm,/obj/item/bodypart/r_arm,/obj/effect/decal/cleanable/blood)
+ required_atoms = list(/obj/item/organ/eyes,/obj/effect/decal/cleanable/blood,/obj/item/bodypart/l_arm)
mob_to_summon = /mob/living/simple_animal/hostile/eldritch/raw_prophet
next_knowledge = list(/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/spell/blood_siphon,/datum/eldritch_knowledge/curse/paralysis)
route = PATH_FLESH
@@ -173,9 +179,9 @@
/datum/eldritch_knowledge/summon/stalker
name = "Lonely Ritual"
gain_text = "I was able to combine my greed and desires to summon an eldritch beast i have not seen before. Ever shapeshifting mass of flesh, it well knew my goals."
- desc = "You can now summon a Stalker using a knife, a flower, a pen and a piece of paper. Stalkers can shapeshift into harmeless animals and get close to the victim."
+ desc = "You can now summon a Stalker using a knife, a candle, a pen and a piece of paper. Stalkers can shapeshift into harmeless animals and get close to the victim."
cost = 1
- required_atoms = list(/obj/item/kitchen/knife,/obj/item/reagent_containers/food/snacks/grown/poppy,/obj/item/pen,/obj/item/paper)
+ required_atoms = list(/obj/item/kitchen/knife,/obj/item/pen,/obj/item/paper,/obj/item/candle)
mob_to_summon = /mob/living/simple_animal/hostile/eldritch/stalker
next_knowledge = list(/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/summon/rusty,/datum/eldritch_knowledge/final/flesh_final)
route = PATH_FLESH
@@ -192,9 +198,9 @@
/datum/eldritch_knowledge/summon/rusty
name = "Rusted Ritual"
gain_text = "I combined principle of hunger with desire of corruption. The Rusted Hills call my name."
- desc = "You can now summon a Rust Walker transmutating vomit pool, a head and a book."
+ desc = "You can now summon a Rust Walker transmutating vomit pool and a book."
cost = 1
- required_atoms = list(/obj/effect/decal/cleanable/vomit,/obj/item/bodypart/head,/obj/item/book)
+ required_atoms = list(/obj/effect/decal/cleanable/vomit,/obj/item/book)
mob_to_summon = /mob/living/simple_animal/hostile/eldritch/rust_spirit
next_knowledge = list(/datum/eldritch_knowledge/summon/stalker,/datum/eldritch_knowledge/spell/entropic_plume)
@@ -203,50 +209,29 @@
gain_text = "Our blood is all the same after all, the Marshal told me."
desc = "You gain a spell that drains enemies health and restores yours."
cost = 1
- spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/blood_siphon
+ spell_to_add = /obj/effect/proc_holder/spell/pointed/blood_siphon
next_knowledge = list(/datum/eldritch_knowledge/summon/raw_prophet,/datum/eldritch_knowledge/spell/area_conversion)
/datum/eldritch_knowledge/final/flesh_final
name = "Priest's Final Hymn"
gain_text = "Man of this world. Hear me! For the time of the lord of arms has come! Emperor of Flesh guides my army!"
- desc = "Bring 3 bodies onto a transmutation rune to either ascend as a terror of the night prime or you can summon a regular terror of the night."
+ desc = "Bring 3 bodies onto a transmutation rune to gain the ability of shedding your human form, and gaining untold power."
required_atoms = list(/mob/living/carbon/human)
cost = 3
route = PATH_FLESH
/datum/eldritch_knowledge/final/flesh_final/on_finished_recipe(mob/living/user, list/atoms, loc)
- var/alert_ = alert(user,"Do you want to ascend as the lord of the night or just summon a terror of the night?","...","Yes","No")
- user.SetImmobilized(10 HOURS) // no way someone will stand 10 hours in a spot, just so he can move while the alert is still showing.
- switch(alert_)
- if("No")
- var/mob/living/summoned = new /mob/living/simple_animal/hostile/eldritch/armsy(loc)
- message_admins("[summoned.name] is being summoned by [user.real_name] in [loc]")
- var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [summoned.real_name]", ROLE_HERETIC, null, ROLE_HERETIC, 100,summoned)
- user.SetImmobilized(0)
- if(LAZYLEN(candidates) == 0)
- to_chat(user,"No ghost could be found...")
- qdel(summoned)
- return FALSE
- var/mob/dead/observer/ghost_candidate = pick(candidates)
- priority_announce("$^@*$^@(#&$(@^$^@# Fear the dark, for vassal of arms has ascended! Terror of the night has come! $^@*$^@(#&$(@^$^@#","#$^@*$^@(#&$(@^$^@#", 'sound/ai/spanomalies.ogg')
- log_game("[key_name_admin(ghost_candidate)] has taken control of ([key_name_admin(summoned)]).")
- summoned.ghostize(FALSE)
- summoned.key = ghost_candidate.key
- summoned.mind.add_antag_datum(/datum/antagonist/heretic_monster)
- var/datum/antagonist/heretic_monster/monster = summoned.mind.has_antag_datum(/datum/antagonist/heretic_monster)
- var/datum/antagonist/heretic/master = user.mind.has_antag_datum(/datum/antagonist/heretic)
- monster.set_owner(master)
- master.ascended = TRUE
- if("Yes")
- var/mob/living/summoned = new /mob/living/simple_animal/hostile/eldritch/armsy/prime(loc,TRUE,10)
- summoned.ghostize(0)
- user.SetImmobilized(0)
- priority_announce("$^@*$^@(#&$(@^$^@# Fear the dark, for lord of arms has ascended! Lord of the night has come! $^@*$^@(#&$(@^$^@#","#$^@*$^@(#&$(@^$^@#", 'sound/ai/spanomalies.ogg')
- log_game("[user.real_name] ascended as [summoned.real_name]")
- var/mob/living/carbon/carbon_user = user
- var/datum/antagonist/heretic/ascension = carbon_user.mind.has_antag_datum(/datum/antagonist/heretic)
- ascension.ascended = TRUE
- carbon_user.mind.transfer_to(summoned, TRUE)
- carbon_user.gib()
-
- return ..()
+ . = ..()
+ priority_announce("$^@*$^@(#&$(@^$^@# Ever coiling vortex, Reality unfoiled. KING OF ARMS [user.real_name] has come! Fear the ever twisting hand! $^@*$^@(#&$(@^$^@#","#$^@*$^@(#&$(@^$^@#", 'sound/ai/spanomalies.ogg')
+ user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shed_human_form)
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ H.physiology.brute_mod *= 0.5
+ H.physiology.burn_mod *= 0.5
+ H.client?.give_award(/datum/award/achievement/misc/flesh_ascension, H)
+ var/datum/antagonist/heretic/heretic = user.mind.has_antag_datum(/datum/antagonist/heretic)
+ var/datum/eldritch_knowledge/flesh_grasp/ghoul1 = heretic.get_knowledge(/datum/eldritch_knowledge/flesh_grasp)
+ ghoul1.ghoul_amt *= 3
+ var/datum/eldritch_knowledge/flesh_ghoul/ghoul2 = heretic.get_knowledge(/datum/eldritch_knowledge/flesh_ghoul)
+ ghoul2.max_amt *= 3
diff --git a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm
index bc2b7f0cb92..9b4caaec8bf 100644
--- a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm
+++ b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm
@@ -20,6 +20,11 @@
route = PATH_RUST
/datum/eldritch_knowledge/rust_fist/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters)
+ . = ..()
+ target.rust_heretic_act()
+ return TRUE
+
+/datum/eldritch_knowledge/rust_fist/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(ishuman(target))
var/mob/living/carbon/human/H = target
@@ -27,8 +32,6 @@
if(E)
E.on_effect()
H.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_SLOT_EARS,ORGAN_SLOT_EYES,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS,ORGAN_SLOT_STOMACH,ORGAN_SLOT_HEART),25)
- target.rust_heretic_act()
- return TRUE
/datum/eldritch_knowledge/spell/area_conversion
name = "Agressive Spread"
@@ -62,16 +65,17 @@
/datum/eldritch_knowledge/rust_mark
name = "Mark of Rust"
- desc = "Your eldritch blade now applies a rust mark. Rust mark has a chance to deal between 0 to 200 damage to 75% of enemies items. To Detonate the mark use your mansus grasp on it."
+ desc = "Your mansus grasp now applies a rust mark. Rust mark has a chance to deal between 0 to 200 damage to 75% of enemies items. To Detonate the mark use your eldritch blade on it."
gain_text = "Rusted Hills help those in dire need at a cost."
cost = 2
next_knowledge = list(/datum/eldritch_knowledge/spell/area_conversion)
banned_knowledge = list(/datum/eldritch_knowledge/ash_mark,/datum/eldritch_knowledge/flesh_mark)
route = PATH_RUST
-/datum/eldritch_knowledge/rust_mark/on_eldritch_blade(target,user,proximity_flag,click_parameters)
+/datum/eldritch_knowledge/rust_mark/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(isliving(target))
+ . = TRUE
var/mob/living/living_target = target
living_target.apply_status_effect(/datum/status_effect/eldritch/rust)
@@ -84,7 +88,7 @@
banned_knowledge = list(/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade)
route = PATH_RUST
-/datum/eldritch_knowledge/rust_blade_upgrade/on_eldritch_blade(target,user,proximity_flag,click_parameters)
+/datum/eldritch_knowledge/rust_blade_upgrade/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/carbon_target = target
@@ -129,10 +133,9 @@
var/mob/living/carbon/human/H = user
H.physiology.brute_mod *= 0.5
H.physiology.burn_mod *= 0.5
+ H.client?.give_award(/datum/award/achievement/misc/rust_ascension, H)
priority_announce("$^@*$^@(#&$(@^$^@# Fear the decay, for Rustbringer [user.real_name] has come! $^@*$^@(#&$(@^$^@#","#$^@*$^@(#&$(@^$^@#", 'sound/ai/spanomalies.ogg')
new /datum/rust_spread(loc)
- var/datum/antagonist/heretic/ascension = H.mind.has_antag_datum(/datum/antagonist/heretic)
- ascension.ascended = TRUE
return ..()
diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm
index 991fa0f2fb0..fb2d05c1f7c 100644
--- a/code/modules/asset_cache/asset_list_items.dm
+++ b/code/modules/asset_cache/asset_list_items.dm
@@ -245,6 +245,9 @@
"rule8" = 'icons/UI_Icons/Achievements/Misc/rule8.png',
"snail" = 'icons/UI_Icons/Achievements/Misc/snail.png',
"ascension" = 'icons/UI_Icons/Achievements/Misc/ascension.png',
+ "ashascend" = 'icons/UI_Icons/Achievements/Misc/ashascend.png',
+ "fleshascend" = 'icons/UI_Icons/Achievements/Misc/fleshascend.png',
+ "rustascend" = 'icons/UI_Icons/Achievements/Misc/rustascend.png',
"mining" = 'icons/UI_Icons/Achievements/Skills/mining.png',
"assistant" = 'icons/UI_Icons/Achievements/Mafia/assistant.png',
"changeling" = 'icons/UI_Icons/Achievements/Mafia/changeling.png',
diff --git a/code/modules/mob/living/simple_animal/eldritch_demons.dm b/code/modules/mob/living/simple_animal/eldritch_demons.dm
index 45329c78b71..418c5afa4d1 100644
--- a/code/modules/mob/living/simple_animal/eldritch_demons.dm
+++ b/code/modules/mob/living/simple_animal/eldritch_demons.dm
@@ -136,6 +136,8 @@
var/stacks_to_grow = 5
///Currently eaten arms
var/current_stacks = 0
+ ///Does this follow other pieces?
+ var/follow = TRUE
//I tried Initalize but it didnt work, like at all. This proc just wouldnt fire if it was Initalize instead of New
/mob/living/simple_animal/hostile/eldritch/armsy/Initialize(mapload,spawn_more = TRUE,len = 6)
@@ -148,6 +150,9 @@
if(!spawn_more)
return
allow_pulling = TRUE
+ ///sets the hp of the head to be exactly the length times hp, so the head is de facto the hardest to destroy.
+ maxHealth = len * maxHealth
+ health = maxHealth
///next link
var/mob/living/simple_animal/hostile/eldritch/armsy/next
///previous link
@@ -178,6 +183,18 @@
prev.AIStatus = AI_OFF
next = prev
+/mob/living/simple_animal/hostile/eldritch/armsy/adjustBruteLoss(amount, updating_health, forced)
+ if(back)
+ back.adjustBruteLoss(amount, updating_health, forced)
+ else
+ return ..()
+
+/mob/living/simple_animal/hostile/eldritch/armsy/adjustFireLoss(amount, updating_health, forced)
+ if(back)
+ back.adjustFireLoss(amount, updating_health, forced)
+ else
+ return ..()
+
//we are literally a vessel of otherworldly destruction, we bring our own gravity unto this plane
/mob/living/simple_animal/hostile/eldritch/armsy/has_gravity(turf/T)
return TRUE
@@ -193,8 +210,15 @@
back.contract_next_chain_into_single_tile()
return
+/mob/living/simple_animal/hostile/eldritch/armsy/proc/get_length()
+ . += 1
+ if(back)
+ . += back.get_length()
+
///Updates the next mob in the chain to move to our last location, fixed the worm if somehow broken.
/mob/living/simple_animal/hostile/eldritch/armsy/proc/update_chain_links()
+ if(!follow)
+ return
gib_trail()
if(back && back.loc != oldloc)
back.Move(oldloc)
@@ -219,34 +243,31 @@
QDEL_NULL(back) // chain destruction baby
return ..()
-
/mob/living/simple_animal/hostile/eldritch/armsy/proc/heal()
- if(health == maxHealth)
- if(back)
- back.heal()
- return
- else
- current_stacks++
- if(current_stacks >= stacks_to_grow)
- var/mob/living/simple_animal/hostile/eldritch/armsy/prev = new type(drop_location(),spawn_more = FALSE)
- icon_state = "armsy_mid"
- icon_living = "armsy_mid"
- back = prev
- prev.icon_state = "armsy_end"
- prev.icon_living = "armsy_end"
- prev.front = src
- prev.AIStatus = AI_OFF
- current_stacks = 0
+ if(back)
+ back.heal()
adjustBruteLoss(-maxHealth * 0.5, FALSE)
adjustFireLoss(-maxHealth * 0.5 ,FALSE)
+ if(health == maxHealth)
+ current_stacks++
+ if(current_stacks >= stacks_to_grow)
+ var/mob/living/simple_animal/hostile/eldritch/armsy/prev = new type(drop_location(),spawn_more = FALSE)
+ icon_state = "armsy_mid"
+ icon_living = "armsy_mid"
+ back = prev
+ prev.icon_state = "armsy_end"
+ prev.icon_living = "armsy_end"
+ prev.front = src
+ prev.AIStatus = AI_OFF
+ current_stacks = 0
+ return
/mob/living/simple_animal/hostile/eldritch/armsy/Shoot(atom/targeted_atom)
target = targeted_atom
AttackingTarget()
-
/mob/living/simple_animal/hostile/eldritch/armsy/AttackingTarget()
if(istype(target,/obj/item/bodypart/r_arm) || istype(target,/obj/item/bodypart/l_arm))
qdel(target)
@@ -286,8 +307,8 @@
real_name = "Master of Decay"
maxHealth = 400
health = 400
- melee_damage_lower = 20
- melee_damage_upper = 25
+ melee_damage_lower = 30
+ melee_damage_upper = 50
/mob/living/simple_animal/hostile/eldritch/armsy/prime/Initialize(mapload,spawn_more = TRUE,len = 9)
. = ..()
@@ -342,7 +363,7 @@
melee_damage_lower = 15
melee_damage_upper = 20
sight = SEE_TURFS
- spells_to_add = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/ash,/obj/effect/proc_holder/spell/pointed/cleave/long,/obj/effect/proc_holder/spell/aoe_turf/fire_cascade)
+ spells_to_add = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/ash,/obj/effect/proc_holder/spell/pointed/cleave,/obj/effect/proc_holder/spell/targeted/fire_sworn)
/mob/living/simple_animal/hostile/eldritch/stalker
name = "Flesh Stalker"
diff --git a/icons/UI_Icons/Achievements/Misc/ashascend.png b/icons/UI_Icons/Achievements/Misc/ashascend.png
new file mode 100644
index 00000000000..5e60d456785
Binary files /dev/null and b/icons/UI_Icons/Achievements/Misc/ashascend.png differ
diff --git a/icons/UI_Icons/Achievements/Misc/fleshascend.png b/icons/UI_Icons/Achievements/Misc/fleshascend.png
new file mode 100644
index 00000000000..109085f8eac
Binary files /dev/null and b/icons/UI_Icons/Achievements/Misc/fleshascend.png differ
diff --git a/icons/UI_Icons/Achievements/Misc/rustascend.png b/icons/UI_Icons/Achievements/Misc/rustascend.png
new file mode 100644
index 00000000000..910cde22f99
Binary files /dev/null and b/icons/UI_Icons/Achievements/Misc/rustascend.png differ
diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi
index 3d198fdbc07..19480f5b0cb 100644
Binary files a/icons/mob/actions/actions_ecult.dmi and b/icons/mob/actions/actions_ecult.dmi differ