[MIRROR] [ready]Heretic new path : Path of Void [sprites approved] (#1711)

* [ready]Heretic new path : Path of Void [sprites approved] (#54252)

* E

* E

* E

* E

* E

* E

* VOID FINALLY

* E

* E

* E

* VOID STORM

* e

* Update code/modules/antagonists/eldritch_cult/eldritch_items.dm

Co-authored-by: Rohesie <rohesie@ gmail.com>

* Update code/modules/antagonists/eldritch_cult/eldritch_items.dm

Co-authored-by: Rohesie <rohesie@ gmail.com>

* Update code/modules/antagonists/eldritch_cult/eldritch_magic.dm

Co-authored-by: Rohesie <rohesie@ gmail.com>

* Update code/modules/antagonists/eldritch_cult/eldritch_magic.dm

Co-authored-by: Rohesie <rohesie@ gmail.com>

* E

* FUCKING FINALLY

* E

* E

* Voids Embrace

* E

* E

* E

* E

* some changes

* E

* E

* E

* EEE

* E

* E

* Update code/modules/antagonists/eldritch_cult/eldritch_items.dm

Co-authored-by: necromanceranne <40847847+necromanceranne@ users.noreply.github.com>

* Update code/modules/antagonists/eldritch_cult/eldritch_items.dm

Co-authored-by: necromanceranne <40847847+necromanceranne@ users.noreply.github.com>

* Update code/modules/antagonists/eldritch_cult/eldritch_items.dm

Co-authored-by: necromanceranne <40847847+necromanceranne@ users.noreply.github.com>

* Update code/modules/antagonists/eldritch_cult/eldritch_items.dm

Co-authored-by: necromanceranne <40847847+necromanceranne@ users.noreply.github.com>

* Update code/modules/antagonists/eldritch_cult/eldritch_items.dm

Co-authored-by: girl <11748095+ExcessiveUseOfCobblestone@ users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: ATH1909 <42606352+ATH1909@ users.noreply.github.com>

* E

* E

* E

* MERGE READY UWU

* Update code/modules/clothing/suits/toggles.dm

Co-authored-by: Rohesie <rohesie@ gmail.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@ users.noreply.github.com>
Co-authored-by: girl <11748095+ExcessiveUseOfCobblestone@ users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@ users.noreply.github.com>

* [ready]Heretic new path : Path of Void [sprites approved]

Co-authored-by: EdgeLordExe <42111655+EdgeLordExe@users.noreply.github.com>
Co-authored-by: Rohesie <rohesie@ gmail.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@ users.noreply.github.com>
Co-authored-by: girl <11748095+ExcessiveUseOfCobblestone@ users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@ users.noreply.github.com>
This commit is contained in:
SkyratBot
2020-11-17 21:27:27 +00:00
committed by GitHub
co-authored by Rohesie necromanceranne girl ATH1909 EdgeLordExe
parent b99196b519
commit c9cd05f7cc
49 changed files with 1017 additions and 72 deletions
@@ -38,6 +38,7 @@
current.log_message("has been converted to the cult of the forgotten ones!", LOG_ATTACK, color="#960000")
GLOB.reality_smash_track.AddMind(owner)
START_PROCESSING(SSprocessing,src)
RegisterSignal(owner.current,COMSIG_LIVING_DEATH,.proc/on_death)
if(give_equipment)
equip_cultist()
return ..()
@@ -54,6 +55,8 @@
GLOB.reality_smash_track.RemoveMind(owner)
STOP_PROCESSING(SSprocessing,src)
on_death()
return ..()
@@ -85,10 +88,20 @@
/datum/antagonist/heretic/process()
if(owner.current.stat == DEAD)
return
for(var/X in researched_knowledge)
var/datum/eldritch_knowledge/EK = researched_knowledge[X]
EK.on_life(owner.current)
///What happens to the heretic once he dies, used to remove any custom perks
/datum/antagonist/heretic/proc/on_death()
for(var/X in researched_knowledge)
var/datum/eldritch_knowledge/EK = researched_knowledge[X]
EK.on_death(owner.current)
/datum/antagonist/heretic/proc/forge_primary_objectives()
var/list/assasination = list()
var/list/protection = list()
@@ -311,3 +311,4 @@
var/static/list/postfix = list("Flaw","Presence","Crack","Heat","Cold","Memory","Reminder","Breeze","Grasp","Sight","Whisper","Flow","Touch","Veil","Thought","Imperfection","Blemish","Blush")
name = "\improper" + pick(prefix) + " " + pick(postfix)
@@ -104,12 +104,15 @@
/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)
if(!cultie || !proximity_flag)
if(!cultie)
return
var/list/knowledge = cultie.get_all_knowledge()
for(var/X in knowledge)
var/datum/eldritch_knowledge/eldritch_knowledge_datum = knowledge[X]
eldritch_knowledge_datum.on_eldritch_blade(target,user,proximity_flag,click_parameters)
if(proximity_flag)
eldritch_knowledge_datum.on_eldritch_blade(target,user,proximity_flag,click_parameters)
else
eldritch_knowledge_datum.on_ranged_attack_eldritch_blade(target,user,click_parameters)
/obj/item/melee/sickly_blade/rust
name = "\improper Rusted Blade"
@@ -129,6 +132,12 @@
icon_state = "flesh_blade"
inhand_icon_state = "flesh_blade"
/obj/item/melee/sickly_blade/void
name = "Void Blade"
desc = "Devoid of any substance, this blade reflects nothingness. It is a real depiction of purity, and chaos that ensues after its implementation."
icon_state = "void_blade"
inhand_icon_state = "void_blade"
/obj/item/clothing/neck/eldritch_amulet
name = "Warm Eldritch Medallion"
desc = "A strange medallion. Peering through the crystalline surface, the world around you melts away. You see your own beating heart, and the pulsing of a thousand others."
@@ -169,7 +178,7 @@
inhand_icon_state = "eldritch_armor"
flags_inv = HIDESHOES|HIDEJUMPSUIT
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS
allowed = list(/obj/item/melee/sickly_blade, /obj/item/forbidden_book)
allowed = list(/obj/item/melee/sickly_blade, /obj/item/forbidden_book, /obj/item/living_heart)
hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/eldritch
// slightly better than normal cult robes
armor = list(MELEE = 50, BULLET = 50, LASER = 50,ENERGY = 50, BOMB = 35, BIO = 20, RAD = 0, FIRE = 20, ACID = 20)
@@ -180,3 +189,242 @@
icon = 'icons/obj/eldritch.dmi'
icon_state = "eldrich_flask"
list_reagents = list(/datum/reagent/eldritch = 50)
/obj/item/clothing/head/hooded/cult_hoodie/void
name = "void hood"
icon_state = "void_cloak"
flags_inv = NONE
flags_cover = NONE
desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, with each flash you loose comprehension of what you are seeing."
item_flags = EXAMINE_SKIP
armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
/obj/item/clothing/suit/hooded/cultrobes/void
name = "void cloak"
desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, with each flash you loose comprehension of what you are seeing."
icon_state = "void_cloak"
inhand_icon_state = "void_cloak"
allowed = list(/obj/item/melee/sickly_blade, /obj/item/forbidden_book, /obj/item/living_heart)
hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/void
flags_inv = NONE
// slightly worse than normal cult robes
armor = list(MELEE = 30, BULLET = 30, LASER = 30,ENERGY = 30, BOMB = 15, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
pocket_storage_component_path = /datum/component/storage/concrete/pockets/void_cloak
alternative_mode = TRUE
/obj/item/clothing/suit/hooded/cultrobes/void/ToggleHood()
if(!iscarbon(loc))
return
var/mob/living/carbon/carbon_user = loc
if(IS_HERETIC(carbon_user) || IS_HERETIC_MONSTER(carbon_user))
. = ..()
//We need to account for the hood shenanigans, and that way we can make sure items always fit, even if one of the slots is used by the fucking hood.
if(suittoggled)
to_chat(carbon_user,"<span class='notice'>The light shifts around you making the cloak invisible!</span>")
else
to_chat(carbon_user,"<span class='notice'>The kaleidoscope of colours collapses around you, as the cloak shifts to visibility!</span>")
item_flags = suittoggled ? EXAMINE_SKIP : ~EXAMINE_SKIP
else
to_chat(carbon_user,"<span class='danger'>You can't force the hood onto your head!</span>")
/obj/item/clothing/mask/void_mask
name = "Abyssal Mask"
desc = "Mask created from the suffering of existance, you can look down it's eyes, and notice something gazing back at you."
icon_state = "mad_mask"
inhand_icon_state = "mad_mask"
w_class = WEIGHT_CLASS_SMALL
flags_cover = MASKCOVERSEYES
resistance_flags = FLAMMABLE
flags_inv = HIDEFACE|HIDEFACIALHAIR
///Who is wearing this
var/mob/living/carbon/human/local_user
/obj/item/clothing/mask/void_mask/equipped(mob/user, slot)
. = ..()
if(slot != ITEM_SLOT_MASK)
return
if(ishuman(user) && user.mind && slot == ITEM_SLOT_MASK)
local_user = user
START_PROCESSING(SSobj,src)
if(IS_HERETIC(user) || IS_HERETIC_MONSTER(user))
return
ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
/obj/item/clothing/mask/void_mask/dropped(mob/M)
local_user = null
STOP_PROCESSING(SSobj,src)
REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
return ..()
/obj/item/clothing/mask/void_mask/process(delta_time)
if(!local_user)
return PROCESS_KILL
if((IS_HERETIC(local_user) || IS_HERETIC_MONSTER(local_user)) && HAS_TRAIT(src,TRAIT_NODROP))
REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
for(var/mob/living/carbon/human/human_in_range in spiral_range(9,local_user))
if(IS_HERETIC(human_in_range) || IS_HERETIC_MONSTER(human_in_range))
continue
SEND_SIGNAL(human_in_range,COMSIG_VOID_MASK_ACT,rand(-2,-20)*delta_time)
if(DT_PROB(60,delta_time))
human_in_range.hallucination += 5
if(DT_PROB(40,delta_time))
human_in_range.Jitter(5)
if(DT_PROB(30,delta_time))
human_in_range.emote(pick("giggle","laugh"))
human_in_range.adjustStaminaLoss(10)
if(DT_PROB(25,delta_time))
human_in_range.Dizzy(5)
/obj/item/melee/rune_knife
name = "Carving Knife"
desc = "Cold Steel, pure, perfect, this knife can carve the floor in many ways, but only few can evoke the dangers that lurk beneath reality."
icon = 'icons/obj/eldritch.dmi'
icon_state = "rune_carver"
flags_1 = CONDUCT_1
sharpness = SHARP_EDGED
w_class = WEIGHT_CLASS_SMALL
wound_bonus = 20
force = 10
throwforce = 5
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")
///turfs that you cannot draw carvings on
var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed,/turf/open/space,/turf/open/lava))
///A check to see if you are in process of drawing a rune
var/drawing = FALSE
///A list of current runes
var/list/current_runes = list()
///Max amount of runes
var/max_rune_amt = 3
///Linked action
var/datum/action/innate/rune_shatter/linked_action
/obj/item/melee/rune_knife/examine(mob/user)
. = ..()
. += "This item can carve 'Alert carving' - nearly invisible rune that when stepped on gives you a prompt about where someone stood on it and who it was, doesn't get destroyed by being stepped on."
. += "This item can carve 'Grasping carving' - when stepped on it causes heavy damage to the legs and stuns for 5 seconds."
. += "This item can carve 'Mad carving' - when stepped on it causes dizzyness, jiterryness, temporary blindness, confusion , stuttering and slurring."
/obj/item/melee/rune_knife/Initialize()
. = ..()
linked_action = new(src)
/obj/item/melee/rune_knife/pickup(mob/user)
. = ..()
linked_action.Grant(user, src)
/obj/item/melee/rune_knife/dropped(mob/user, silent)
. = ..()
linked_action.Remove(user, src)
/obj/item/melee/rune_knife/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(!is_type_in_typecache(target,blacklisted_turfs) && !drawing && proximity_flag)
carve_rune(target,user,proximity_flag,click_parameters)
///Action of carving runes, gives you the ability to click on floor and choose a rune of your need.
/obj/item/melee/rune_knife/proc/carve_rune(atom/target, mob/user, proximity_flag, click_parameters)
var/obj/structure/trap/eldritch/elder = locate() in range(1,target)
if(elder)
to_chat(user,"<span class='notice'>You can't draw runes that close to each other!</span>")
return
for(var/X in current_runes)
var/obj/structure/trap/eldritch/eldritch = X
if(QDELETED(eldritch) || !eldritch)
current_runes -= eldritch
if(current_runes.len >= max_rune_amt)
to_chat(user,"<span class='notice'>The blade cannot support more runes!</span>")
return
var/list/pick_list = list()
for(var/E in subtypesof(/obj/structure/trap/eldritch))
var/obj/structure/trap/eldritch/eldritch = E
pick_list[initial(eldritch.name)] = eldritch
drawing = TRUE
var/type = pick_list[input(user,"Choose the rune","Rune") as null|anything in pick_list ]
if(!type)
drawing = FALSE
return
to_chat(user,"<span class='notice'>You start drawing the rune...</span>")
if(!do_after(user,5 SECONDS,target = target))
drawing = FALSE
return
drawing = FALSE
var/obj/structure/trap/eldritch/eldritch = new type(target)
eldritch.set_owner(user)
current_runes += eldritch
/datum/action/innate/rune_shatter
name = "Rune break"
desc = "Destroys all runes that were drawn by this blade."
background_icon_state = "bg_ecult"
button_icon_state = "rune_break"
icon_icon = 'icons/mob/actions/actions_ecult.dmi'
check_flags = AB_CHECK_CONSCIOUS
///Reference to the rune knife it is inside of
var/obj/item/melee/rune_knife/sword
/datum/action/innate/rune_shatter/Grant(mob/user, obj/object)
sword = object
return ..()
/datum/action/innate/rune_shatter/Activate()
for(var/X in sword.current_runes)
var/obj/structure/trap/eldritch/eldritch = X
if(!QDELETED(eldritch) && eldritch)
qdel(eldritch)
/obj/item/eldritch_potion
name = "Brew of Day and Night"
desc = "You should never see this"
icon = 'icons/obj/eldritch.dmi'
///Typepath to the status effect this is supposed to hold
var/status_effect
/obj/item/eldritch_potion/attack_self(mob/user)
. = ..()
to_chat(user,"<span class='notice'>You drink the potion and with the viscous liquid, the glass dematerializes.</span>")
effect(user)
qdel(src)
///The effect of the potion if it has any special one, in general try not to override this and utilize the status_effect var to make custom effects.
/obj/item/eldritch_potion/proc/effect(mob/user)
if(!iscarbon(user))
return
var/mob/living/carbon/carbie = user
carbie.apply_status_effect(status_effect)
/obj/item/eldritch_potion/crucible_soul
name = "Brew of Crucible Soul"
desc = "Allows you to phase through walls for 15 seconds, after the time runs out, you get teleported to your original location."
icon_state = "crucible_soul"
status_effect = /datum/status_effect/crucible_soul
/obj/item/eldritch_potion/duskndawn
name = "Brew of Dusk and Dawn"
desc = "Allows you to see clearly through walls and objects for 60 seconds."
icon_state = "clarity"
status_effect = /datum/status_effect/duskndawn
/obj/item/eldritch_potion/wounded
name = "Brew of Wounded Soldier"
desc = "For the next 60 seconds each wound will heal you, minor wounds heal 1 of it's damage type per second, moderate heal 3 and critical heal 6. You also become immune to damage slowdon."
icon_state = "marshal"
status_effect = /datum/status_effect/marshal
@@ -65,6 +65,14 @@
/datum/eldritch_knowledge/proc/recipe_snowflake_check(list/atoms,loc)
return TRUE
/**
* A proc that handles the code when the mob dies
*
* This proc is primarily used to end any soundloops when the heretic dies
*/
/datum/eldritch_knowledge/proc/on_death(mob/user)
return
/**
* What happens once the recipe is succesfully finished
*
@@ -109,6 +117,14 @@
/datum/eldritch_knowledge/proc/on_eldritch_blade(atom/target,mob/user,proximity_flag,click_parameters)
return
/**
* Sickly blade distant act
*
* Same as [/datum/eldritch_knowledge/proc/on_eldritch_blade] but works on targets that are not in proximity to you.
*/
/datum/eldritch_knowledge/proc/on_ranged_attack_eldritch_blade(atom/target,mob/user,click_parameters)
return
//////////////
///Subtypes///
//////////////
@@ -43,8 +43,8 @@
/obj/item/melee/touch_attack/mansus_fist
name = "Mansus Grasp"
desc = "A sinister looking aura that distorts the flow of reality around it. Causes knockdown and major stamina damage in addition to some brute. It gains additional beneficial effects as you expand your knowledge of the Mansus."
icon_state = "disintegrate"
inhand_icon_state = "disintegrate"
icon_state = "mansus"
inhand_icon_state = "mansus"
catchphrase = "R'CH T'H TR'TH"
/obj/item/melee/touch_attack/mansus_fist/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
@@ -714,3 +714,92 @@
segment_length = armsy.get_length()
qdel(armsy)
return
/obj/effect/proc_holder/spell/pointed/void_blink
name = "Void Phase"
desc = "Let's you blink to your pointed destination, causes 3x3 aoe damage bubble around your pointed destination and your current location. It has a minimum range of 3 tiles and a maximum range of 9 tiles."
invocation_type = INVOCATION_WHISPER
invocation = "RE'L'TY PH'S'E"
clothes_req = FALSE
range = 9
action_background_icon_state = "bg_ecult"
charge_max = 300
action_icon = 'icons/mob/actions/actions_ecult.dmi'
action_icon_state = "voidblink"
selection_type = "range"
/obj/effect/proc_holder/spell/pointed/void_blink/can_target(atom/target, mob/user, silent)
. = ..()
if(get_dist(get_turf(user),get_turf(target)) < 3 )
return FALSE
/obj/effect/proc_holder/spell/pointed/void_blink/cast(list/targets, mob/user)
. = ..()
var/target = targets[1]
var/turf/targeted_turf = get_turf(target)
playsound(user,'sound/magic/voidblink.ogg',100)
playsound(targeted_turf,'sound/magic/voidblink.ogg',100)
new /obj/effect/temp_visual/voidin(user.drop_location())
new /obj/effect/temp_visual/voidout(targeted_turf)
for(var/mob/living/living_mob in range(1,user)-user)
if(IS_HERETIC(living_mob) || IS_HERETIC_MONSTER(living_mob))
continue
living_mob.adjustBruteLoss(40)
for(var/mob/living/living_mob in range(1,targeted_turf)-user)
if(IS_HERETIC(living_mob) || IS_HERETIC_MONSTER(living_mob))
continue
living_mob.adjustBruteLoss(40)
do_teleport(user,targeted_turf,TRUE,no_effects = TRUE)
/obj/effect/temp_visual/voidin
icon = 'icons/effects/96x96.dmi'
icon_state = "void_blink_in"
alpha = 150
duration = 6
pixel_x = -32
pixel_y = -32
/obj/effect/temp_visual/voidout
icon = 'icons/effects/96x96.dmi'
icon_state = "void_blink_out"
alpha = 150
duration = 6
pixel_x = -32
pixel_y = -32
/obj/effect/proc_holder/spell/targeted/void_pull
name = "Void Pull"
desc = "Call the void, this pulls all nearby people closer to you, damages people already around you. If they are 4 tiles or closer they are also knocked down and a micro-stun is applied."
invocation_type = INVOCATION_WHISPER
invocation = "BR'NG F'RTH TH'M T' M'"
clothes_req = FALSE
action_background_icon_state = "bg_ecult"
range = -1
include_user = TRUE
charge_max = 400
action_icon = 'icons/mob/actions/actions_ecult.dmi'
action_icon_state = "voidpull"
/obj/effect/proc_holder/spell/targeted/void_pull/cast(list/targets, mob/user)
. = ..()
for(var/mob/living/living_mob in range(1,user)-user)
if(IS_HERETIC(living_mob) || IS_HERETIC_MONSTER(living_mob))
continue
living_mob.adjustBruteLoss(30)
playsound(user,'sound/magic/voidblink.ogg',100)
new /obj/effect/temp_visual/voidin(user.drop_location())
for(var/mob/living/livies in view(7,user)-user)
if(get_dist(user,livies) < 4)
livies.AdjustKnockdown(3 SECONDS)
livies.AdjustParalyzed(0.5 SECONDS)
for(var/i in 1 to 3)
livies.forceMove(get_step_towards(livies,user))
@@ -7,6 +7,7 @@
job_rank = ROLE_HERETIC
antag_hud_type = ANTAG_HUD_HERETIC
antag_hud_name = "heretic_beast"
show_in_antagpanel = FALSE
var/datum/antagonist/master
/datum/antagonist/heretic_monster/admin_add(datum/mind/new_owner,mob/admin)
@@ -29,6 +30,7 @@
var/datum/objective/master_obj = new
master_obj.owner = src
master_obj.explanation_text = "Assist your master in any way you can!"
master_obj.completed = TRUE
objectives += master_obj
owner.announce_objectives()
to_chat(owner, "<span class='boldannounce'>Your master is [master.owner.current.real_name]</span>")
@@ -0,0 +1,177 @@
/obj/structure/eldritch_crucible
name = "Mawed Crucible"
desc = "Immortalized cast iron, the steel-like teeth holding it in place, it's vile extract has the power of rebirthing things, remaking them from the very beginning."
icon = 'icons/obj/eldritch.dmi'
icon_state = "crucible"
anchored = FALSE
density = TRUE
///How much mass this currently holds
var/current_mass = 5
///Maximum amount of mass
var/max_mass = 5
///Check to see if it is currently being used.
var/in_use = FALSE
/obj/structure/eldritch_crucible/examine(mob/user)
. = ..()
if(!IS_HERETIC(user) && !IS_HERETIC_MONSTER(user))
return
if(current_mass < max_mass)
. += "The Crucible requires [max_mass - current_mass] more organs or bodyparts!"
else
. += "The Crucible is ready to be used!"
. += "You can anchor and reanchor it using Codex Cicatrix!"
. += "It is currently [anchored == FALSE ? "unanchored" : "anchored"]"
. += "This structure can brew 'Brew of Crucible soul' - when used it gives you the ability to phase through matter for 15 seconds, after the time elapses it teleports you back to your original location"
. += "This structure can brew 'Brew of Dusk and Dawn' - when used it gives you xray for 1 minute"
. += "This structure can brew 'Brew of Wounded Soldier' - when used it makes you immune to damage slowdown, additionally you start healing for every wound you have, quickly outpacing the damage caused by them."
/obj/structure/eldritch_crucible/attacked_by(obj/item/I, mob/living/user)
if(istype(I,/obj/item/nullrod))
qdel(src)
return
if(!IS_HERETIC(user) && !IS_HERETIC_MONSTER(user))
if(iscarbon(user))
devour(user)
return
if(istype(I,/obj/item/forbidden_book))
playsound(src, 'sound/misc/desecration-02.ogg', 75, TRUE)
anchored = !anchored
to_chat(user,"<span class='notice'>You [anchored == FALSE ? "unanchor" : "anchor"] the crucible</span>")
return
if(istype(I,/obj/item/bodypart) || istype(I,/obj/item/organ))
//Both organs and bodyparts hold information if they are organic or robotic in the exact same way.
var/obj/item/bodypart/forced = I
if(forced.status != BODYPART_ORGANIC)
return
if(current_mass >= max_mass)
to_chat(user,"<span class='notice'> Crucible is already full!</span>")
return
playsound(src, 'sound/items/eatfood.ogg', 100, TRUE)
to_chat(user,"<span class='notice'>Crucible devours [I.name] and fills itself with a little bit of liquid!</span>")
current_mass++
qdel(I)
update_icon_state()
return
return ..()
/obj/structure/eldritch_crucible/attack_hand(mob/user)
if(!IS_HERETIC(user) && !IS_HERETIC_MONSTER(user))
if(iscarbon(user))
devour(user)
return
if(in_use)
to_chat(user,"<span class='notice'>Crucible is already in use!</span>")
return
if(current_mass < max_mass)
to_chat(user,"<span class='notice'>Crucible isn't full! Bring it more organs or bodyparts!</span>")
return
in_use = TRUE
var/list/lst = list()
for(var/X in subtypesof(/obj/item/eldritch_potion))
var/obj/item/eldritch_potion/potion = X
lst[initial(potion.name)] = potion
var/type = lst[input(user,"Choose your brew","Brew") in lst]
playsound(src, 'sound/misc/desecration-02.ogg', 75, TRUE)
new type(drop_location())
current_mass = 0
in_use = FALSE
update_icon_state()
///Proc that eats the active limb of the victim
/obj/structure/eldritch_crucible/proc/devour(mob/living/carbon/user)
if(HAS_TRAIT(user,TRAIT_NODISMEMBER))
return
playsound(src, 'sound/items/eatfood.ogg', 100, TRUE)
to_chat(user,"<span class='danger'>Crucible grabs your arm and devours it whole!</span>")
var/obj/item/bodypart/arm = user.get_active_hand()
arm.dismember()
qdel(arm)
current_mass += current_mass < max_mass ? 1 : 0
update_icon_state()
/obj/structure/eldritch_crucible/update_icon_state()
. = ..()
if(current_mass == max_mass)
icon_state = "crucible"
else
icon_state = "crucible_empty"
/obj/structure/trap/eldritch
name = "elder carving"
desc = "Collection of unknown symbols, they remind you of days long gone..."
icon = 'icons/obj/eldritch.dmi'
charges = 1
///Owner of the trap
var/mob/owner
/obj/structure/trap/eldritch/Crossed(atom/movable/AM)
if(!isliving(AM))
return ..()
var/mob/living/living_mob = AM
if((owner && living_mob == owner) || IS_HERETIC(living_mob) || IS_HERETIC_MONSTER(living_mob))
return
return ..()
/obj/structure/trap/eldritch/attacked_by(obj/item/I, mob/living/user)
. = ..()
if(istype(I,/obj/item/melee/rune_knife) || istype(I,/obj/item/nullrod))
qdel(src)
///Proc that sets the owner
/obj/structure/trap/eldritch/proc/set_owner(mob/_owner)
owner = _owner
/obj/structure/trap/eldritch/alert
name = "alert carving"
icon_state = "alert_rune"
alpha = 10
/obj/structure/trap/eldritch/alert/trap_effect(mob/living/L)
if(owner)
to_chat(owner,"<span class='big boldwarning'>[L.real_name] has stepped foot on the alert rune in [get_area(src)]!</span>")
return ..()
//this trap can only get destroyed by rune carving knife or nullrod
/obj/structure/trap/eldritch/alert/flare()
return
/obj/structure/trap/eldritch/tentacle
name = "grasping carving"
icon_state = "tentacle_rune"
/obj/structure/trap/eldritch/tentacle/trap_effect(mob/living/L)
if(!iscarbon(L))
return
var/mob/living/carbon/carbon_victim = L
carbon_victim.Paralyze(5 SECONDS)
carbon_victim.apply_damage(20,BRUTE,BODY_ZONE_R_LEG)
carbon_victim.apply_damage(20,BRUTE,BODY_ZONE_L_LEG)
playsound(src, 'sound/magic/demon_attack1.ogg', 75, TRUE)
return ..()
/obj/structure/trap/eldritch/mad
name = "mad carving"
icon_state = "madness_rune"
/obj/structure/trap/eldritch/mad/trap_effect(mob/living/L)
if(!iscarbon(L))
return
var/mob/living/carbon/carbon_victim = L
carbon_victim.adjustStaminaLoss(80)
carbon_victim.silent += 10
carbon_victim.add_confusion(5)
carbon_victim.Jitter(10)
carbon_victim.Dizzy(20)
carbon_victim.blind_eyes(2)
SEND_SIGNAL(carbon_victim, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus)
return ..()
@@ -2,7 +2,7 @@
name = "Nightwatcher's Secret"
desc = "Opens up the Path of Ash to you. Allows you to transmute a match with a kitchen knife, or its derivatives, into an Ashen Blade."
gain_text = "The City Guard know their watch. If you ask them at night, they may tell you about the ashy lantern."
banned_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/final/rust_final,/datum/eldritch_knowledge/final/flesh_final)
banned_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/final/rust_final,/datum/eldritch_knowledge/final/flesh_final,/datum/eldritch_knowledge/final/void_final,/datum/eldritch_knowledge/base_void)
next_knowledge = list(/datum/eldritch_knowledge/ashen_grasp)
required_atoms = list(/obj/item/kitchen/knife,/obj/item/match)
result_atoms = list(/obj/item/melee/sickly_blade/ash)
@@ -42,7 +42,7 @@
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)
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) || C.has_status_effect(/datum/status_effect/eldritch/void)
if(E)
E.on_effect()
for(var/X in user.mind.spell_list)
@@ -65,7 +65,7 @@
gain_text = "The Nightwatcher was a very particular man, always watching in the dead of night. But in spite of his duty, he regularly tranced through the manse with his blazing lantern held high."
desc = "Your Mansus Grasp now applies the Mark of Ash on hit. Attack the afflicted with your Sickly Blade to detonate the mark. Upon detonation, the Mark of Ash causes stamina damage and burn damage, and spreads to an additional nearby opponent. The damage decreases with each spread."
cost = 2
next_knowledge = list(/datum/eldritch_knowledge/curse/blindness)
next_knowledge = list(/datum/eldritch_knowledge/mad_mask)
banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/flesh_mark)
route = PATH_ASH
@@ -76,24 +76,16 @@
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"
/datum/eldritch_knowledge/mad_mask
name = "Mask of Madness"
gain_text = "He walks the world, unnoticed by the masses."
desc = "Curse someone with 2 minutes of complete blindness by sacrificing a pair of eyes and a screwdriver with an object that the victim has touched with their bare hands."
desc = "Allows you to transmute any mask, with a candle and a pair of eyes, to create a mask of madness, It causes passive stamina damage to everyone around the wearer and hallucinations, can be forced on a non believer to make him unable to take it off..."
cost = 1
required_atoms = list(/obj/item/organ/eyes,/obj/item/screwdriver)
result_atoms = list(/obj/item/clothing/mask/void_mask)
required_atoms = list(/obj/item/organ/eyes,/obj/item/clothing/mask,/obj/item/candle)
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
/datum/eldritch_knowledge/curse/blindness/curse(mob/living/chosen_mob)
. = ..()
chosen_mob.become_blind(MAGIC_TRAIT)
/datum/eldritch_knowledge/curse/blindness/uncurse(mob/living/chosen_mob)
. = ..()
chosen_mob.cure_blind(MAGIC_TRAIT)
/datum/eldritch_knowledge/spell/flame_birth
name = "Flame Birth"
gain_text = "The Nightwatcher was a man of principles, and yet his power arose from the chaos he vowed to combat."
@@ -125,7 +117,7 @@
desc = "Curse someone for 2 minutes of vomiting and major organ damage. Using a wirecutter, a pool 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/vomit,/obj/item/organ/heart)
next_knowledge = list(/datum/eldritch_knowledge/curse/blindness,/datum/eldritch_knowledge/spell/area_conversion)
next_knowledge = list(/datum/eldritch_knowledge/mad_mask,/datum/eldritch_knowledge/spell/area_conversion)
timer = 2 MINUTES
/datum/eldritch_knowledge/curse/corrosion/curse(mob/living/chosen_mob)
@@ -142,7 +134,7 @@
desc = "Curse someone for 5 minutes of inability to walk. Sacrifice a knife, a pool of blood, a pair of legs, a hatchet and an item that the victim touched with their bare hands. "
cost = 1
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)
next_knowledge = list(/datum/eldritch_knowledge/mad_mask,/datum/eldritch_knowledge/summon/raw_prophet)
timer = 5 MINUTES
/datum/eldritch_knowledge/curse/paralysis/curse(mob/living/chosen_mob)
@@ -2,7 +2,7 @@
name = "Principle of Hunger"
desc = "Opens up the Path of Flesh to you. Allows you to transmute a pool of blood with a kitchen knife, or its derivatives, into a Flesh Blade."
gain_text = "Hundreds of us starved, but not me... I found strength in my greed."
banned_knowledge = list(/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/final/ash_final,/datum/eldritch_knowledge/final/rust_final)
banned_knowledge = list(/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/final/ash_final,/datum/eldritch_knowledge/final/rust_final,/datum/eldritch_knowledge/final/void_final,/datum/eldritch_knowledge/base_void)
next_knowledge = list(/datum/eldritch_knowledge/flesh_grasp)
required_atoms = list(/obj/item/kitchen/knife,/obj/effect/decal/cleanable/blood)
result_atoms = list(/obj/item/melee/sickly_blade/flesh)
@@ -15,7 +15,7 @@
gain_text = "I found notes of a dark ritual, unfinished... yet still, I pushed forward."
cost = 1
required_atoms = list(/mob/living/carbon/human,/obj/item/reagent_containers/food/snacks/grown/poppy)
next_knowledge = list(/datum/eldritch_knowledge/flesh_mark,/datum/eldritch_knowledge/armor,/datum/eldritch_knowledge/ashen_eyes)
next_knowledge = list(/datum/eldritch_knowledge/flesh_mark,/datum/eldritch_knowledge/void_cloak,/datum/eldritch_knowledge/ashen_eyes)
route = PATH_FLESH
var/max_amt = 2
var/current_amt = 0
@@ -118,7 +118,7 @@
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)
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) || human_target.has_status_effect(/datum/status_effect/eldritch/void)
if(eldritch_effect)
eldritch_effect.on_effect()
if(iscarbon(target))
@@ -173,7 +173,7 @@
cost = 1
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)
next_knowledge = list(/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/rune_carver,/datum/eldritch_knowledge/curse/paralysis)
route = PATH_FLESH
/datum/eldritch_knowledge/summon/stalker
@@ -202,7 +202,7 @@
cost = 1
required_atoms = list(/obj/effect/decal/cleanable/vomit,/obj/item/book,/obj/item/bodypart/head)
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)
next_knowledge = list(/datum/eldritch_knowledge/spell/voidpull,/datum/eldritch_knowledge/spell/entropic_plume)
/datum/eldritch_knowledge/spell/blood_siphon
name = "Blood Siphon"
@@ -210,7 +210,7 @@
desc = "You gain a spell that drains health from your enemies to restores your own."
cost = 1
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)
next_knowledge = list(/datum/eldritch_knowledge/summon/stalker,/datum/eldritch_knowledge/spell/voidpull)
/datum/eldritch_knowledge/final/flesh_final
name = "Priest's Final Hymn"
@@ -2,7 +2,7 @@
name = "Blacksmith's Tale"
desc = "Opens up the Path of Rust to you. Allows you to transmute a kitchen knife, or its derivatives, with any trash item into a Rusty Blade."
gain_text = "'Let me tell you a story', said the Blacksmith, as he gazed deep into his rusty blade."
banned_knowledge = list(/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/final/ash_final,/datum/eldritch_knowledge/final/flesh_final)
banned_knowledge = list(/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/final/ash_final,/datum/eldritch_knowledge/final/flesh_final,/datum/eldritch_knowledge/final/void_final,/datum/eldritch_knowledge/base_void)
next_knowledge = list(/datum/eldritch_knowledge/rust_fist)
required_atoms = list(/obj/item/kitchen/knife,/obj/item/trash)
result_atoms = list(/obj/item/melee/sickly_blade/rust)
@@ -28,7 +28,7 @@
. = ..()
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh)
var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void)
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)
@@ -39,7 +39,7 @@
gain_text = "All wise men know well not to touch the Bound King."
cost = 1
spell_to_add = /obj/effect/proc_holder/spell/aoe_turf/rust_conversion
next_knowledge = list(/datum/eldritch_knowledge/rust_blade_upgrade,/datum/eldritch_knowledge/curse/corrosion,/datum/eldritch_knowledge/spell/blood_siphon)
next_knowledge = list(/datum/eldritch_knowledge/rust_blade_upgrade,/datum/eldritch_knowledge/curse/corrosion,/datum/eldritch_knowledge/crucible)
route = PATH_RUST
/datum/eldritch_knowledge/rust_regen
@@ -108,17 +108,17 @@
desc = "You can now create Eldritch Armor using a table and a gas mask."
gain_text = "The Rusted Hills welcomed the Blacksmith in their generosity."
cost = 1
next_knowledge = list(/datum/eldritch_knowledge/rust_regen,/datum/eldritch_knowledge/flesh_ghoul)
next_knowledge = list(/datum/eldritch_knowledge/rust_regen,/datum/eldritch_knowledge/cold_snap)
required_atoms = list(/obj/structure/table,/obj/item/clothing/mask/gas)
result_atoms = list(/obj/item/clothing/suit/hooded/cultrobes/eldritch)
/datum/eldritch_knowledge/essence
name = "Priest's Ritual"
desc = "You can now transmute a tank of water into a bottle of eldritch water."
desc = "You can now transmute a tank of water and a glass shard into a bottle of eldritch water."
gain_text = "This is an old recipe. The Owl whispered it to me."
cost = 1
next_knowledge = list(/datum/eldritch_knowledge/rust_regen,/datum/eldritch_knowledge/spell/ashen_shift)
required_atoms = list(/obj/structure/reagent_dispensers/watertank)
required_atoms = list(/obj/structure/reagent_dispensers/watertank,/obj/item/shard)
result_atoms = list(/obj/item/reagent_containers/glass/beaker/eldritch)
/datum/eldritch_knowledge/final/rust_final
@@ -0,0 +1,203 @@
/datum/eldritch_knowledge/base_void
name = "Glimmer of Winter"
desc = "Opens up the path of void to you. Allows you to transmute a knife in a sub-zero temperature into a void blade."
gain_text = "I feel a shimmer in the air, atmosphere around me gets colder. I feel my body realizing the emptiness of existance. Something's watching me"
banned_knowledge = list(/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/final/ash_final,/datum/eldritch_knowledge/final/flesh_final,/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/final/rust_final)
next_knowledge = list(/datum/eldritch_knowledge/void_grasp)
required_atoms = list(/obj/item/kitchen/knife)
result_atoms = list(/obj/item/melee/sickly_blade/void)
cost = 1
route = PATH_VOID
/datum/eldritch_knowledge/base_void/recipe_snowflake_check(list/atoms, loc)
. = ..()
var/turf/open/turfie = loc
if(turfie.GetTemperature() > T0C)
return FALSE
/datum/eldritch_knowledge/void_grasp
name = "Grasp of Void"
desc = "Temporarily mutes your victim, also lowers their body temperature."
gain_text = "I found the cold watcher who observes me. The resonance of cold grows within me. This isn't the end of the mystery."
cost = 1
route = PATH_VOID
next_knowledge = list(/datum/eldritch_knowledge/cold_snap)
/datum/eldritch_knowledge/void_grasp/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(!iscarbon(target))
return
var/mob/living/carbon/carbon_target = target
var/turf/open/turfie = get_turf(carbon_target)
turfie.TakeTemperature(-20)
carbon_target.adjust_bodytemperature(-40)
carbon_target.silent += 4
return TRUE
/datum/eldritch_knowledge/void_grasp/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(!ishuman(target))
return
var/mob/living/carbon/human/H = target
var/datum/status_effect/eldritch/E = H.has_status_effect(/datum/status_effect/eldritch/rust) || H.has_status_effect(/datum/status_effect/eldritch/ash) || H.has_status_effect(/datum/status_effect/eldritch/flesh) || H.has_status_effect(/datum/status_effect/eldritch/void)
if(!E)
return
E.on_effect()
H.silent += 3
/datum/eldritch_knowledge/cold_snap
name = "Aristocrat's Way"
desc = "Makes you immune to cold temperatures, you can still take damage from lack of pressure."
gain_text = "I found a thread of cold breath. It lead me to a strange shrine, all made of crystals. Translucent and white, a depiction of a nobleman stood before me."
cost = 1
route = PATH_VOID
next_knowledge = list(/datum/eldritch_knowledge/void_cloak,/datum/eldritch_knowledge/void_mark,/datum/eldritch_knowledge/armor)
/datum/eldritch_knowledge/cold_snap/on_gain(mob/user)
. = ..()
ADD_TRAIT(user,TRAIT_RESISTCOLD,MAGIC_TRAIT)
/datum/eldritch_knowledge/cold_snap/on_lose(mob/user)
. = ..()
REMOVE_TRAIT(user,TRAIT_RESISTCOLD,MAGIC_TRAIT)
/datum/eldritch_knowledge/void_cloak
name = "Void Cloak"
desc = "A cloak that can become invisbile at will, hiding items you store in it. To create it transmute a glass shard, any item of clothing that you can fit over your uniform and any type of bedsheet."
gain_text = "Owl is the keeper of things that quite not are in practice, but in theory are."
cost = 1
next_knowledge = list(/datum/eldritch_knowledge/flesh_ghoul,/datum/eldritch_knowledge/cold_snap)
result_atoms = list(/obj/item/clothing/suit/hooded/cultrobes/void)
required_atoms = list(/obj/item/shard,/obj/item/clothing/suit,/obj/item/bedsheet)
/datum/eldritch_knowledge/void_mark
name = "Mark of Void"
gain_text = "A gust of wind? Maybe a shimmer in the air. Presence is overwhelming, my senses betrayed me, my mind is my enemy."
desc = "Your mansus grasp now applies mark of void status effect. To proc the mark, use your sickly blade on the marked. Mark of void when procced lowers the victims body temperature significantly."
cost = 2
next_knowledge = list(/datum/eldritch_knowledge/spell/void_phase)
banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/ash_mark,/datum/eldritch_knowledge/flesh_mark)
route = PATH_VOID
/datum/eldritch_knowledge/void_mark/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(!isliving(target))
return
. = TRUE
var/mob/living/living_target = target
living_target.apply_status_effect(/datum/status_effect/eldritch/void)
/datum/eldritch_knowledge/spell/void_phase
name = "Void Phase"
gain_text = "Reality bends under the power of memory, for all is fleeting, and what else stays?"
desc = "You gain a long range pointed blink that allows you to instantly teleport to your location, it causes aoe damage around you and your chosen location."
cost = 1
spell_to_add = /obj/effect/proc_holder/spell/pointed/void_blink
next_knowledge = list(/datum/eldritch_knowledge/rune_carver,/datum/eldritch_knowledge/crucible,/datum/eldritch_knowledge/void_blade_upgrade)
route = PATH_VOID
/datum/eldritch_knowledge/rune_carver
name = "Carving Knife"
gain_text = "Etched, carved... eternal. I can carve the monolith and evoke their powers!"
desc = "You can create a carving knife, which allows you to create up to 3 carvings on the floor that have various effects on nonbelievers who walk over them, to create the carving knife transmute a knife with a glass shard and a piece of paper."
cost = 1
next_knowledge = list(/datum/eldritch_knowledge/spell/void_phase,/datum/eldritch_knowledge/summon/raw_prophet)
required_atoms = list(/obj/item/kitchen/knife,/obj/item/shard,/obj/item/paper)
result_atoms = list(/obj/item/melee/rune_knife)
/datum/eldritch_knowledge/crucible
name = "Mawed Crucible"
gain_text = "This is pure agony, i wasn't able to summon the dereliction of the emperor, but i stumbled upon a diffrent recipe..."
desc = "Allows you to create a mawed crucible, eldritch structure that allows you to create potions of various effects, to do so transmute a table with a watertank"
cost = 1
next_knowledge = list(/datum/eldritch_knowledge/spell/void_phase,/datum/eldritch_knowledge/spell/area_conversion)
required_atoms = list(/obj/structure/reagent_dispensers/watertank,/obj/structure/table)
result_atoms = list(/obj/structure/eldritch_crucible)
/datum/eldritch_knowledge/void_blade_upgrade
name = "Seeking blade"
gain_text = "Fleeting memories, fleeting feet. I can mark my way with the frozen blood upon the snow. Covered and forgotten."
desc = "You can now use your blade on a distant marked target to move to them and attack them."
cost = 2
next_knowledge = list(/datum/eldritch_knowledge/spell/voidpull)
banned_knowledge = list(/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/rust_blade_upgrade)
route = PATH_VOID
/datum/eldritch_knowledge/void_blade_upgrade/on_ranged_attack_eldritch_blade(atom/target, mob/user, click_parameters)
. = ..()
if(!ishuman(target) || !iscarbon(user))
return
var/mob/living/carbon/carbon_human = user
var/mob/living/carbon/human/human_target = target
var/datum/status_effect/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) || human_target.has_status_effect(/datum/status_effect/eldritch/void)
if(!effect)
return
var/dir = angle2dir(dir2angle(get_dir(user,human_target))+180)
carbon_human.forceMove(get_step(human_target,dir))
var/obj/item/melee/sickly_blade/blade = carbon_human.get_active_held_item()
blade.melee_attack_chain(carbon_human,human_target)
/datum/eldritch_knowledge/spell/voidpull
name = "Void Pull"
gain_text = "This entity calls itself the aristocrat, I'm close to ending what was started."
desc = "You gain an ability that let's you pull people around you closer to you."
cost = 1
spell_to_add = /obj/effect/proc_holder/spell/targeted/void_pull
next_knowledge = list(/datum/eldritch_knowledge/final/void_final,/datum/eldritch_knowledge/spell/blood_siphon,/datum/eldritch_knowledge/summon/rusty)
route = PATH_VOID
/datum/eldritch_knowledge/final/void_final
name = "Waltz at the End of Time"
desc = "Bring 3 corpses onto the transmutation rune. After you finish the ritual you will automatically silence people around you and will summon a snow storm around you."
gain_text = "The world falls into darkness. I stand in an empty plane, small flakes of ice fall from the sky. Aristocrat stand before me, he motions to me. We will play a waltz to the whispers of dying reality, as the world is destroyed before our eyes."
cost = 3
required_atoms = list(/mob/living/carbon/human)
route = PATH_VOID
///soundloop for the void theme
var/datum/looping_sound/void_loop/sound_loop
///Reference to the ongoing voidstrom that surrounds the heretic
var/datum/weather/void_storm/storm
/datum/eldritch_knowledge/final/void_final/on_finished_recipe(mob/living/user, list/atoms, loc)
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/void_ascension, H)
priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# The nobleman of void [H.real_name] has arrived, step along the Waltz that ends worlds! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", 'sound/ai/spanomalies.ogg')
sound_loop = new(list(user),TRUE,TRUE)
return ..()
/datum/eldritch_knowledge/final/void_final/on_death()
if(sound_loop)
sound_loop.stop()
if(storm)
storm.wind_down()
/datum/eldritch_knowledge/final/void_final/on_life(mob/user)
. = ..()
if(!finished)
return
for(var/mob/living/carbon/livies in spiral_range(7,user)-user)
if(IS_HERETIC_MONSTER(livies) || IS_HERETIC(livies))
return
livies.silent += 1
livies.adjust_bodytemperature(-20)
var/turf/turfie = get_turf(user)
if(!isopenturf(turfie))
return
var/turf/open/open_turfie = turfie
open_turfie.TakeTemperature(-20)
var/area/user_area = get_area(user)
var/turf/user_turf = get_turf(user)
if(!storm)
storm = new /datum/weather/void_storm(list(user_turf.z))
storm.telegraph()
storm.area_type = user_area.type
storm.impacted_areas = list(user_area)
storm.update_areas()
@@ -249,6 +249,7 @@
"ashascend" = 'icons/UI_Icons/Achievements/Misc/ashascend.png',
"fleshascend" = 'icons/UI_Icons/Achievements/Misc/fleshascend.png',
"rustascend" = 'icons/UI_Icons/Achievements/Misc/rustascend.png',
"voidascend" = 'icons/UI_Icons/Achievements/Misc/voidascend.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',
+37 -21
View File
@@ -4,10 +4,13 @@
actions_types = list(/datum/action/item_action/toggle_hood)
var/obj/item/clothing/head/hooded/hood
var/hoodtype = /obj/item/clothing/head/hooded/winterhood //so the chaplain hoodie or other hoodies can override this
///Alternative mode for hiding the hood, instead of storing the hood in the suit it qdels it, useful for when you deal with hooded suit with storage.
var/alternative_mode = FALSE
/obj/item/clothing/suit/hooded/Initialize()
. = ..()
MakeHood()
if(!alternative_mode)
MakeHood()
/obj/item/clothing/suit/hooded/Destroy()
. = ..()
@@ -35,12 +38,18 @@
/obj/item/clothing/suit/hooded/proc/RemoveHood()
src.icon_state = "[initial(icon_state)]"
suittoggled = FALSE
if(ishuman(hood.loc))
var/mob/living/carbon/H = hood.loc
H.transferItemToLoc(hood, src, TRUE)
H.update_inv_wear_suit()
else
hood.forceMove(src)
if(hood)
if(ishuman(hood.loc))
var/mob/living/carbon/human/H = hood.loc
H.transferItemToLoc(hood, src, TRUE)
H.update_inv_wear_suit()
else
hood.forceMove(src)
if(alternative_mode)
QDEL_NULL(hood)
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
@@ -51,21 +60,28 @@
/obj/item/clothing/suit/hooded/proc/ToggleHood()
if(!suittoggled)
if(ishuman(src.loc))
var/mob/living/carbon/human/H = src.loc
if(H.wear_suit != src)
to_chat(H, "<span class='warning'>You must be wearing [src] to put up the hood!</span>")
if(!ishuman(loc))
return
var/mob/living/carbon/human/H = loc
if(H.wear_suit != src)
to_chat(H, "<span class='warning'>You must be wearing [src] to put up the hood!</span>")
return
if(H.head)
to_chat(H, "<span class='warning'>You're already wearing something on your head!</span>")
return
else
if(alternative_mode)
MakeHood()
if(!H.equip_to_slot_if_possible(hood,ITEM_SLOT_HEAD,0,0,1))
if(alternative_mode)
RemoveHood()
return
if(H.head)
to_chat(H, "<span class='warning'>You're already wearing something on your head!</span>")
return
else if(H.equip_to_slot_if_possible(hood,ITEM_SLOT_HEAD,0,0,1))
suittoggled = TRUE
src.icon_state = "[initial(icon_state)]_t"
H.update_inv_wear_suit()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
suittoggled = TRUE
icon_state = "[initial(icon_state)]_t"
H.update_inv_wear_suit()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
else
RemoveHood()
+15 -15
View File
@@ -38,7 +38,7 @@
. += "You can't make out what species they are."
//SKYRAT EDIT CHANGE END
//uniform
if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING))
if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING) && !(w_uniform.item_flags & EXAMINE_SKIP))
//accessory
var/accessory_msg
if(istype(w_uniform, /obj/item/clothing/under))
@@ -48,26 +48,26 @@
. += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]."
//head
if(head && !(obscured & ITEM_SLOT_HEAD))
if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head."
//suit/armor
if(wear_suit)
if(wear_suit && !(wear_suit.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]."
//suit/armor storage
if(s_store && !(obscured & ITEM_SLOT_SUITSTORE))
if(s_store && !(obscured & ITEM_SLOT_SUITSTORE) && !(s_store.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name]."
//back
if(back)
if(back && !(back.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back."
//Hands
for(var/obj/item/I in held_items)
if(!(I.item_flags & ABSTRACT))
if(!(I.item_flags & ABSTRACT) && !(I.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]."
var/datum/component/forensics/FR = GetComponent(/datum/component/forensics)
//gloves
if(gloves && !(obscured & ITEM_SLOT_GLOVES))
if(gloves && !(obscured & ITEM_SLOT_GLOVES) && !(gloves.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands."
else if(FR && length(FR.blood_DNA))
if(num_hands)
@@ -83,33 +83,33 @@
. += "<span class='warning'>[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!</span>"
//belt
if(belt)
if(belt && !(belt.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist."
//shoes
if(shoes && !(obscured & ITEM_SLOT_FEET))
if(shoes && !(obscured & ITEM_SLOT_FEET) && !(shoes.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet."
//mask
if(wear_mask && !(obscured & ITEM_SLOT_MASK))
if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !(wear_mask.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face."
if(wear_neck && !(obscured & ITEM_SLOT_NECK))
if(wear_neck && !(obscured & ITEM_SLOT_NECK) && !(wear_neck.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck."
//eyes
if(!(obscured & ITEM_SLOT_EYES))
if(glasses)
if(!(obscured & ITEM_SLOT_EYES) )
if(glasses && !(glasses.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes."
else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, CULT_EYES))
. += "<span class='warning'><B>[t_His] eyes are glowing an unnatural red!</B></span>"
//ears
if(ears && !(obscured & ITEM_SLOT_EARS))
if(ears && !(obscured & ITEM_SLOT_EARS) && !(ears.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears."
//ID
if(wear_id)
if(wear_id && !(wear_id.item_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)]."
//Status effects