From c935c05b83270722538f2cb0da8cdc2c71f4d630 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 24 Sep 2020 20:25:26 +0200 Subject: [PATCH] [MIRROR] HERETICS: Balancing Mega patch - Changes to ash, flesh ascension and much more!. (#954) * HERETICS: Balancing Mega patch - Changes to ash, flesh ascension and much more!. (#53655) * HERETICS: Balancing Mega patch - Changes to ash, flesh ascension and much more!. Co-authored-by: EdgeLordExe <42111655+EdgeLordExe@users.noreply.github.com> --- code/__DEFINES/achievements.dm | 3 + code/__DEFINES/status_effects.dm | 2 + code/datums/achievements/misc_achievements.dm | 18 ++++ .../mood_events/generic_negative_events.dm | 2 +- .../eldritch_cult/eldritch_antag.dm | 48 +++------ .../eldritch_cult/eldritch_book.dm | 4 +- .../eldritch_cult/eldritch_effects.dm | 14 ++- .../eldritch_cult/eldritch_items.dm | 64 ++++++++++-- .../eldritch_cult/eldritch_knowledge.dm | 20 ++-- .../eldritch_cult/eldritch_magic.dm | 79 ++++++++++++--- .../eldritch_cult/eldritch_monster_antag.dm | 1 + .../eldritch_cult/knowledge/ash_lore.dm | 48 ++++----- .../eldritch_cult/knowledge/flesh_lore.dm | 93 ++++++++---------- .../eldritch_cult/knowledge/rust_lore.dm | 17 ++-- code/modules/asset_cache/asset_list_items.dm | 3 + .../living/simple_animal/eldritch_demons.dm | 63 ++++++++---- .../UI_Icons/Achievements/Misc/ashascend.png | Bin 0 -> 9641 bytes .../Achievements/Misc/fleshascend.png | Bin 0 -> 8138 bytes .../UI_Icons/Achievements/Misc/rustascend.png | Bin 0 -> 8390 bytes icons/mob/actions/actions_ecult.dmi | Bin 52885 -> 62566 bytes 20 files changed, 299 insertions(+), 180 deletions(-) create mode 100644 icons/UI_Icons/Achievements/Misc/ashascend.png create mode 100644 icons/UI_Icons/Achievements/Misc/fleshascend.png create mode 100644 icons/UI_Icons/Achievements/Misc/rustascend.png 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 0000000000000000000000000000000000000000..5e60d45678595bbf20023ea31c4695df0c014fa6 GIT binary patch literal 9641 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 literal 0 HcmV?d00001 diff --git a/icons/UI_Icons/Achievements/Misc/rustascend.png b/icons/UI_Icons/Achievements/Misc/rustascend.png new file mode 100644 index 0000000000000000000000000000000000000000..910cde22f9934248ab235736e4fcc249a0acbed6 GIT binary patch literal 8390 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 delta 13966 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