mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
[MIRROR] Generally brings about half the heretic antag code up to our code standards, more or less (#5164)
* Generally brings about half the heretic antag code up to our code standards, more or less * Update eldritch_knowledge.dm Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com> Co-authored-by: Gandalf <jzo123@hotmail.com>
This commit is contained in:
co-authored by
tralezab
Gandalf
parent
24e51a83e6
commit
42fadee535
@@ -11,5 +11,5 @@ GLOBAL_DATUM(start_state, /datum/station_state) // Used in round-end report
|
||||
//TODO clear this one up too
|
||||
GLOBAL_DATUM(cult_narsie, /obj/narsie)
|
||||
|
||||
///We want reality_smash_tracker to exist only once and be accesable from anywhere.
|
||||
///We want reality_smash_tracker to exist only once and be accessible from anywhere.
|
||||
GLOBAL_DATUM_INIT(reality_smash_track, /datum/reality_smash_tracker, new)
|
||||
|
||||
@@ -23,10 +23,14 @@
|
||||
to_chat(owner, "<span class='boldannounce'>You are the Heretic!</span><br>\
|
||||
<B>The old ones gave you these tasks to fulfill:</B>")
|
||||
owner.announce_objectives()
|
||||
to_chat(owner, "<span class='cult'>The book whispers softly, its forbidden knowledge walks this plane once again!<br>\
|
||||
Your book allows you to research abilities. Read it very carefully, for you cannot undo what has been done!<br>\
|
||||
You gain charges by either collecting influences or sacrificing people tracked by the living heart.<br> \
|
||||
You can find a basic guide at : https://tgstation13.org/wiki/Heresy_101 </span>")
|
||||
to_chat(owner, "<span class='cult'>The book whispers softly, its forbidden knowledge walks this plane once again!</span>")
|
||||
var/policy = get_policy(ROLE_HERETIC)
|
||||
if(policy)
|
||||
to_chat(owner, policy)
|
||||
|
||||
/datum/antagonist/heretic/farewell()
|
||||
to_chat(owner.current, "<span class='userdanger'>Your mind begins to flare as the otherwordly knowledge escapes your grasp!</span>")
|
||||
owner.announce_objectives()
|
||||
|
||||
/datum/antagonist/heretic/on_gain()
|
||||
var/mob/living/current = owner.current
|
||||
@@ -34,55 +38,53 @@
|
||||
forge_primary_objectives()
|
||||
for(var/eldritch_knowledge in GLOB.heretic_start_knowledge)
|
||||
gain_knowledge(eldritch_knowledge)
|
||||
current.log_message("has been converted to the cult of the forgotten ones!", LOG_ATTACK, color="#960000")
|
||||
current.log_message("has been made into a heretic!", LOG_ATTACK, color="#960000")
|
||||
GLOB.reality_smash_track.AddMind(owner)
|
||||
START_PROCESSING(SSprocessing,src)
|
||||
RegisterSignal(owner.current,COMSIG_LIVING_DEATH,.proc/on_death)
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
RegisterSignal(owner.current, COMSIG_LIVING_DEATH, .proc/on_death)
|
||||
if(give_equipment)
|
||||
equip_cultist()
|
||||
return ..()
|
||||
|
||||
/datum/antagonist/heretic/on_removal()
|
||||
|
||||
for(var/X in researched_knowledge)
|
||||
var/datum/eldritch_knowledge/EK = researched_knowledge[X]
|
||||
EK.on_lose(owner.current)
|
||||
for(var/knowledge_index in researched_knowledge)
|
||||
var/datum/eldritch_knowledge/knowledge = researched_knowledge[knowledge_index]
|
||||
knowledge.on_lose(owner.current)
|
||||
|
||||
owner.current.log_message("is no longer a heretic!", LOG_ATTACK, color="#960000")
|
||||
|
||||
if(!silent)
|
||||
to_chat(owner.current, "<span class='userdanger'>Your mind begins to flare as the otherwordly knowledge escapes your grasp!</span>")
|
||||
owner.current.log_message("has renounced the cult of the old ones!", LOG_ATTACK, color="#960000")
|
||||
GLOB.reality_smash_track.RemoveMind(owner)
|
||||
STOP_PROCESSING(SSprocessing,src)
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
|
||||
on_death()
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/antagonist/heretic/proc/equip_cultist()
|
||||
var/mob/living/carbon/H = owner.current
|
||||
if(!istype(H))
|
||||
var/mob/living/carbon/heretic = owner.current
|
||||
if(!istype(heretic))
|
||||
return
|
||||
. += ecult_give_item(/obj/item/forbidden_book, H)
|
||||
. += ecult_give_item(/obj/item/living_heart, H)
|
||||
. += ecult_give_item(/obj/item/forbidden_book, heretic)
|
||||
. += ecult_give_item(/obj/item/living_heart, heretic)
|
||||
|
||||
/datum/antagonist/heretic/proc/ecult_give_item(obj/item/item_path, mob/living/carbon/human/H)
|
||||
/datum/antagonist/heretic/proc/ecult_give_item(obj/item/item_path, mob/living/carbon/human/heretic)
|
||||
var/list/slots = list(
|
||||
"backpack" = ITEM_SLOT_BACKPACK,
|
||||
"left pocket" = ITEM_SLOT_LPOCKET,
|
||||
"right pocket" = ITEM_SLOT_RPOCKET
|
||||
)
|
||||
|
||||
var/T = new item_path(H)
|
||||
var/T = new item_path(heretic)
|
||||
var/item_name = initial(item_path.name)
|
||||
var/where = H.equip_in_one_of_slots(T, slots)
|
||||
var/where = heretic.equip_in_one_of_slots(T, slots)
|
||||
if(!where)
|
||||
to_chat(H, "<span class='userdanger'>Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).</span>")
|
||||
to_chat(heretic, "<span class='userdanger'>Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).</span>")
|
||||
return FALSE
|
||||
else
|
||||
to_chat(H, "<span class='danger'>You have a [item_name] in your [where].</span>")
|
||||
to_chat(heretic, "<span class='danger'>You have a [item_name] in your [where].</span>")
|
||||
if(where == "backpack")
|
||||
SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H)
|
||||
SEND_SIGNAL(heretic.back, COMSIG_TRY_STORAGE_SHOW, heretic)
|
||||
return TRUE
|
||||
|
||||
/datum/antagonist/heretic/process()
|
||||
@@ -90,16 +92,16 @@
|
||||
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)
|
||||
for(var/knowledge_index in researched_knowledge)
|
||||
var/datum/eldritch_knowledge/knowledge = researched_knowledge[knowledge_index]
|
||||
knowledge.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)
|
||||
for(var/knowledge_index in researched_knowledge)
|
||||
var/datum/eldritch_knowledge/knowledge = researched_knowledge[knowledge_index]
|
||||
knowledge.on_death(owner.current)
|
||||
|
||||
/datum/antagonist/heretic/proc/forge_primary_objectives()
|
||||
var/list/assasination = list()
|
||||
@@ -114,20 +116,20 @@
|
||||
forge_objective(pck1,assasination,protection)
|
||||
forge_objective(pck2,assasination,protection)
|
||||
|
||||
var/datum/objective/sacrifice_ecult/SE = new
|
||||
SE.owner = owner
|
||||
SE.update_explanation_text()
|
||||
objectives += SE
|
||||
var/datum/objective/sacrifice_ecult/sac_objective = new
|
||||
sac_objective.owner = owner
|
||||
sac_objective.update_explanation_text()
|
||||
objectives += sac_objective
|
||||
|
||||
/datum/antagonist/heretic/proc/forge_objective(string,assasination,protection)
|
||||
switch(string)
|
||||
if("assassinate")
|
||||
var/datum/objective/assassinate/A = new
|
||||
A.owner = owner
|
||||
var/list/owners = A.get_owners()
|
||||
A.find_target(owners,protection)
|
||||
assasination += A.target
|
||||
objectives += A
|
||||
var/datum/objective/assassinate/kill = new
|
||||
kill.owner = owner
|
||||
var/list/owners = kill.get_owners()
|
||||
kill.find_target(owners,protection)
|
||||
assasination += kill.target
|
||||
objectives += kill
|
||||
if("hijack")
|
||||
var/datum/objective/hijack/hijack = new
|
||||
hijack.owner = owner
|
||||
@@ -137,12 +139,12 @@
|
||||
martyrdom.owner = owner
|
||||
objectives += martyrdom
|
||||
if("protect")
|
||||
var/datum/objective/protect/P = new
|
||||
P.owner = owner
|
||||
var/list/owners = P.get_owners()
|
||||
P.find_target(owners,assasination)
|
||||
protection += P.target
|
||||
objectives += P
|
||||
var/datum/objective/protect/protect = new
|
||||
protect.owner = owner
|
||||
var/list/owners = protect.get_owners()
|
||||
protect.find_target(owners,assasination)
|
||||
protection += protect.target
|
||||
objectives += protect
|
||||
|
||||
/datum/antagonist/heretic/apply_innate_effects(mob/living/mob_override)
|
||||
. = ..()
|
||||
@@ -195,10 +197,10 @@
|
||||
parts += "<b>Knowledge Researched:</b> "
|
||||
|
||||
var/list/knowledge_message = list()
|
||||
var/list/knowledge = get_all_knowledge()
|
||||
for(var/X in knowledge)
|
||||
var/datum/eldritch_knowledge/EK = knowledge[X]
|
||||
knowledge_message += "[EK.name]"
|
||||
var/list/researched_knowledge = get_all_knowledge()
|
||||
for(var/knowledge_index in researched_knowledge)
|
||||
var/datum/eldritch_knowledge/knowledge = researched_knowledge[knowledge_index]
|
||||
knowledge_message += "[knowledge.name]"
|
||||
parts += knowledge_message.Join(", ")
|
||||
|
||||
return parts.Join("<br>")
|
||||
@@ -206,10 +208,10 @@
|
||||
// Knowledge //
|
||||
////////////////
|
||||
|
||||
/datum/antagonist/heretic/proc/gain_knowledge(datum/eldritch_knowledge/EK)
|
||||
if(get_knowledge(EK))
|
||||
/datum/antagonist/heretic/proc/gain_knowledge(datum/eldritch_knowledge/knowledge)
|
||||
if(get_knowledge(knowledge))
|
||||
return FALSE
|
||||
var/datum/eldritch_knowledge/initialized_knowledge = new EK
|
||||
var/datum/eldritch_knowledge/initialized_knowledge = new knowledge
|
||||
researched_knowledge[initialized_knowledge.type] = initialized_knowledge
|
||||
initialized_knowledge.on_gain(owner.current)
|
||||
return TRUE
|
||||
@@ -217,11 +219,11 @@
|
||||
/datum/antagonist/heretic/proc/get_researchable_knowledge()
|
||||
var/list/researchable_knowledge = list()
|
||||
var/list/banned_knowledge = list()
|
||||
for(var/X in researched_knowledge)
|
||||
var/datum/eldritch_knowledge/EK = researched_knowledge[X]
|
||||
researchable_knowledge |= EK.next_knowledge
|
||||
banned_knowledge |= EK.banned_knowledge
|
||||
banned_knowledge |= EK.type
|
||||
for(var/knowledge_index in researched_knowledge)
|
||||
var/datum/eldritch_knowledge/knowledge = researched_knowledge[knowledge_index]
|
||||
researchable_knowledge |= knowledge.next_knowledge
|
||||
banned_knowledge |= knowledge.banned_knowledge
|
||||
banned_knowledge |= knowledge.type
|
||||
researchable_knowledge -= banned_knowledge
|
||||
return researchable_knowledge
|
||||
|
||||
|
||||
@@ -29,9 +29,8 @@
|
||||
/datum/eldritch_knowledge/New()
|
||||
. = ..()
|
||||
var/list/temp_list
|
||||
for(var/X in required_atoms)
|
||||
var/atom/A = X
|
||||
temp_list += list(typesof(A))
|
||||
for(var/atom/required_atom as anything in required_atoms)
|
||||
temp_list += list(typesof(required_atom))
|
||||
required_atoms = temp_list
|
||||
|
||||
/**
|
||||
@@ -62,7 +61,7 @@
|
||||
*
|
||||
* If you are adding a more complex summoning or something that requires a special check that parses through all the atoms in an area override this.
|
||||
*/
|
||||
/datum/eldritch_knowledge/proc/recipe_snowflake_check(list/atoms,loc)
|
||||
/datum/eldritch_knowledge/proc/recipe_snowflake_check(list/atoms, loc)
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
@@ -78,13 +77,11 @@
|
||||
*
|
||||
* By default this proc creates atoms from result_atoms list. Override this is you want something else to happen.
|
||||
*/
|
||||
/datum/eldritch_knowledge/proc/on_finished_recipe(mob/living/user,list/atoms,loc)
|
||||
if(result_atoms.len == 0)
|
||||
/datum/eldritch_knowledge/proc/on_finished_recipe(mob/living/user, list/atoms, loc)
|
||||
if(!length(result_atoms))
|
||||
return FALSE
|
||||
|
||||
for(var/A in result_atoms)
|
||||
new A(loc)
|
||||
|
||||
for(var/result in result_atoms)
|
||||
new result(loc)
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
@@ -93,11 +90,10 @@
|
||||
* Overide this proc if you dont want ALL ATOMS to be destroyed. useful in many situations.
|
||||
*/
|
||||
/datum/eldritch_knowledge/proc/cleanup_atoms(list/atoms)
|
||||
for(var/X in atoms)
|
||||
var/atom/A = X
|
||||
if(!isliving(A))
|
||||
atoms -= A
|
||||
qdel(A)
|
||||
for(var/atom/sacrificed as anything in atoms)
|
||||
if(!isliving(sacrificed))
|
||||
atoms -= sacrificed
|
||||
qdel(sacrificed)
|
||||
return
|
||||
|
||||
/**
|
||||
@@ -133,8 +129,8 @@
|
||||
var/obj/effect/proc_holder/spell/spell_to_add
|
||||
|
||||
/datum/eldritch_knowledge/spell/on_gain(mob/user)
|
||||
var/obj/effect/proc_holder/S = new spell_to_add
|
||||
user.mind.AddSpell(S)
|
||||
spell_to_add = new
|
||||
user.mind.AddSpell(spell_to_add)
|
||||
return ..()
|
||||
|
||||
/datum/eldritch_knowledge/spell/on_lose(mob/user)
|
||||
@@ -148,9 +144,8 @@
|
||||
|
||||
/datum/eldritch_knowledge/curse/recipe_snowflake_check(list/atoms, loc)
|
||||
fingerprints = list()
|
||||
for(var/X in atoms)
|
||||
var/atom/A = X
|
||||
fingerprints |= A.return_fingerprints()
|
||||
for(var/atom/requirements as anything in atoms)
|
||||
fingerprints |= requirements.return_fingerprints()
|
||||
listclearnulls(fingerprints)
|
||||
if(fingerprints.len == 0)
|
||||
return FALSE
|
||||
@@ -160,8 +155,7 @@
|
||||
|
||||
var/list/compiled_list = list()
|
||||
|
||||
for(var/H in GLOB.human_list)
|
||||
var/mob/living/carbon/human/human_to_check = H
|
||||
for(var/mob/living/carbon/human/human_to_check as anything in GLOB.human_list)
|
||||
if(fingerprints[md5(human_to_check.dna.uni_identity)])
|
||||
compiled_list |= human_to_check.real_name
|
||||
compiled_list[human_to_check.real_name] = human_to_check
|
||||
@@ -187,8 +181,7 @@
|
||||
//Mob to summon
|
||||
var/mob/living/mob_to_summon
|
||||
|
||||
|
||||
/datum/eldritch_knowledge/summon/on_finished_recipe(mob/living/user,list/atoms,loc)
|
||||
/datum/eldritch_knowledge/summon/on_finished_recipe(mob/living/user, list/atoms, loc)
|
||||
//we need to spawn the mob first so that we can use it in pollCandidatesForMob, we will move it from nullspace down the code
|
||||
var/mob/living/summoned = new mob_to_summon(loc)
|
||||
message_admins("[summoned.name] is being summoned by [user.real_name] in [loc]")
|
||||
@@ -197,10 +190,10 @@
|
||||
to_chat(user,"<span class='warning'>No ghost could be found...</span>")
|
||||
qdel(summoned)
|
||||
return FALSE
|
||||
var/mob/dead/observer/C = pick(candidates)
|
||||
log_game("[key_name_admin(C)] has taken control of ([key_name_admin(summoned)]), their master is [user.real_name]")
|
||||
var/mob/dead/observer/picked_candidate = pick(candidates)
|
||||
log_game("[key_name_admin(picked_candidate)] has taken control of ([key_name_admin(summoned)]), their master is [user.real_name]")
|
||||
summoned.ghostize(FALSE)
|
||||
summoned.key = C.key
|
||||
summoned.key = picked_candidate.key
|
||||
summoned.mind.add_antag_datum(/datum/antagonist/heretic_monster)
|
||||
var/datum/antagonist/heretic_monster/heretic_monster = summoned.mind.has_antag_datum(/datum/antagonist/heretic_monster)
|
||||
var/datum/antagonist/heretic/master = user.mind.has_antag_datum(/datum/antagonist/heretic)
|
||||
@@ -212,12 +205,12 @@
|
||||
|
||||
var/finished = FALSE
|
||||
|
||||
/datum/eldritch_knowledge/final/recipe_snowflake_check(list/atoms, loc,selected_atoms)
|
||||
/datum/eldritch_knowledge/final/recipe_snowflake_check(list/atoms, loc, selected_atoms)
|
||||
if(finished)
|
||||
return FALSE
|
||||
var/counter = 0
|
||||
for(var/mob/living/carbon/human/H in atoms)
|
||||
selected_atoms |= H
|
||||
for(var/mob/living/carbon/human/sacrifices in atoms)
|
||||
selected_atoms |= sacrifices
|
||||
counter++
|
||||
if(counter == 3)
|
||||
return TRUE
|
||||
@@ -231,9 +224,9 @@
|
||||
|
||||
/datum/eldritch_knowledge/final/cleanup_atoms(list/atoms)
|
||||
. = ..()
|
||||
for(var/mob/living/carbon/human/H in atoms)
|
||||
atoms -= H
|
||||
H.gib()
|
||||
for(var/mob/living/carbon/human/sacrifices in atoms)
|
||||
atoms -= sacrifices
|
||||
sacrifices.gib()
|
||||
|
||||
|
||||
///////////////
|
||||
@@ -252,41 +245,40 @@
|
||||
|
||||
/datum/eldritch_knowledge/spell/basic/recipe_snowflake_check(list/atoms, loc)
|
||||
. = ..()
|
||||
for(var/obj/item/living_heart/LH in atoms)
|
||||
if(!LH.target)
|
||||
for(var/obj/item/living_heart/heart in atoms)
|
||||
if(!heart.target)
|
||||
return TRUE
|
||||
if(LH.target in atoms)
|
||||
if(heart.target in atoms)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/eldritch_knowledge/spell/basic/on_finished_recipe(mob/living/user, list/atoms, loc)
|
||||
. = TRUE
|
||||
var/mob/living/carbon/carbon_user = user
|
||||
for(var/obj/item/living_heart/LH in atoms)
|
||||
for(var/obj/item/living_heart/heart in atoms)
|
||||
|
||||
if(LH.target && LH.target.stat == DEAD)
|
||||
if(heart.target && heart.target.stat == DEAD)
|
||||
to_chat(carbon_user,"<span class='danger'>Your patrons accepts your offer..</span>")
|
||||
var/mob/living/carbon/human/H = LH.target
|
||||
var/mob/living/carbon/human/current_target = heart.target
|
||||
//SKYRAT EDIT BEGIN: MAKES HERETICS NOT GIB PEOPLE
|
||||
var/obj/item/bodypart/chest/chest = H.get_bodypart(BODY_ZONE_CHEST)
|
||||
var/obj/item/bodypart/chest/chest = current_target.get_bodypart(BODY_ZONE_CHEST)
|
||||
chest.dismember()
|
||||
H.visible_message("<span class='danger'>[H.name] Is quickly surrounded by invisible claws; lacerating their chest open, spilling their organs out!</span>", \
|
||||
"<span class='danger'>You feel claws tear your chest open; spilling your organs out onto the floor!</span>", ignored_mobs=H)
|
||||
current_target.visible_message("<span class='danger'>[current_target.name] Is quickly surrounded by invisible claws; lacerating their chest open, spilling their organs out!</span>", \
|
||||
"<span class='danger'>You feel claws tear your chest open; spilling your organs out onto the floor!</span>", ignored_mobs=current_target)
|
||||
//SKYRAT EDIT END
|
||||
LH.target = null
|
||||
var/datum/antagonist/heretic/EC = carbon_user.mind.has_antag_datum(/datum/antagonist/heretic)
|
||||
heart.target = null
|
||||
var/datum/antagonist/heretic/heretic_datum = carbon_user.mind.has_antag_datum(/datum/antagonist/heretic)
|
||||
|
||||
EC.total_sacrifices++
|
||||
for(var/X in carbon_user.get_all_gear())
|
||||
if(!istype(X,/obj/item/forbidden_book))
|
||||
heretic_datum.total_sacrifices++
|
||||
for(var/obj/item/forbidden_book/book as anything in carbon_user.get_all_gear())
|
||||
if(!istype(book))
|
||||
continue
|
||||
var/obj/item/forbidden_book/FB = X
|
||||
FB.charge += 3 //SKYRAT EDIT: More points for sacrifice
|
||||
book.charge += 2
|
||||
break
|
||||
|
||||
if(!LH.target)
|
||||
var/datum/objective/A = new
|
||||
A.owner = user.mind
|
||||
if(!heart.target)
|
||||
var/datum/objective/temp_objective = new
|
||||
temp_objective.owner = user.mind
|
||||
var/list/datum/team/teams = list()
|
||||
for(var/datum/antagonist/antag as anything in user.mind.antag_datums)
|
||||
var/datum/team/team = antag.get_team()
|
||||
@@ -294,7 +286,7 @@
|
||||
teams |= team
|
||||
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
|
||||
var/datum/mind/targeted = temp_objective.find_target()//easy way, i dont feel like copy pasting that entire block of code
|
||||
var/is_teammate = FALSE
|
||||
for(var/datum/team/team as anything in teams)
|
||||
if(targeted in team.members)
|
||||
@@ -303,12 +295,12 @@
|
||||
if(!targeted)
|
||||
break
|
||||
targets["[targeted.current.real_name] the [targeted.assigned_role][is_teammate ? " (ally)" : ""]"] = targeted.current
|
||||
LH.target = targets[input(user,"Choose your next target","Target") in targets]
|
||||
qdel(A)
|
||||
if(LH.target)
|
||||
to_chat(user,"<span class='warning'>Your new target has been selected, go and sacrifice [LH.target.real_name]!</span>")
|
||||
heart.target = targets[input(user,"Choose your next target","Target") in targets]
|
||||
qdel(temp_objective)
|
||||
if(heart.target)
|
||||
to_chat(user,"<span class='warning'>Your new target has been selected, go and sacrifice [heart.target.real_name]!</span>")
|
||||
else
|
||||
to_chat(user,"<span class='warning'>target could not be found for living heart.</span>")
|
||||
to_chat(user, "<span class='warning'>target could not be found for living heart.</span>")
|
||||
|
||||
/datum/eldritch_knowledge/spell/basic/cleanup_atoms(list/atoms)
|
||||
return
|
||||
|
||||
@@ -2,9 +2,16 @@
|
||||
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,/datum/eldritch_knowledge/final/void_final,/datum/eldritch_knowledge/base_void)
|
||||
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)
|
||||
required_atoms = list(/obj/item/kitchen/knife, /obj/item/match)
|
||||
result_atoms = list(/obj/item/melee/sickly_blade/ash)
|
||||
cost = 1
|
||||
route = PATH_ASH
|
||||
@@ -15,7 +22,11 @@
|
||||
desc = "A short range jaunt that can help you escape from bad situations."
|
||||
cost = 1
|
||||
spell_to_add = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/ash
|
||||
next_knowledge = list(/datum/eldritch_knowledge/ash_mark,/datum/eldritch_knowledge/essence,/datum/eldritch_knowledge/ashen_eyes)
|
||||
next_knowledge = list(
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/essence,
|
||||
/datum/eldritch_knowledge/ashen_eyes
|
||||
)
|
||||
route = PATH_ASH
|
||||
|
||||
/datum/eldritch_knowledge/ashen_grasp
|
||||
@@ -30,26 +41,22 @@
|
||||
. = ..()
|
||||
if(!iscarbon(target))
|
||||
return
|
||||
var/mob/living/carbon/C = target
|
||||
to_chat(C, "<span class='danger'>Your eyes burn horrifically!</span>") //pocket sand! also, this is the message that changeling blind stings use, and no, I'm not ashamed about reusing it
|
||||
C.become_nearsighted(EYE_DAMAGE)
|
||||
C.blind_eyes(5)
|
||||
C.blur_eyes(10)
|
||||
return
|
||||
var/mob/living/carbon/blind_victim = target
|
||||
to_chat(blind_victim, "<span class='danger'>Your eyes burn horrifically!</span>") //pocket sand! also, this is the message that changeling blind stings use, and no, I'm not ashamed about reusing it
|
||||
blind_victim.become_nearsighted(EYE_DAMAGE)
|
||||
blind_victim.blind_eyes(5)
|
||||
blind_victim.blur_eyes(10)
|
||||
|
||||
/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) || C.has_status_effect(/datum/status_effect/eldritch/void)
|
||||
if(E)
|
||||
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/mob/living/carbon/victim = target
|
||||
var/datum/status_effect/eldritch/effect = victim.has_status_effect(/datum/status_effect/eldritch/rust) || victim.has_status_effect(/datum/status_effect/eldritch/ash) || victim.has_status_effect(/datum/status_effect/eldritch/flesh) || victim.has_status_effect(/datum/status_effect/eldritch/void)
|
||||
if(effect)
|
||||
effect.on_effect()
|
||||
for(var/obj/effect/proc_holder/spell/targeted/touch/mansus_grasp/grasp in user.mind.spell_list)
|
||||
grasp.charge_counter = min(round(grasp.charge_counter + grasp.charge_max * 0.75), grasp.charge_max) // refunds 75% of charge.
|
||||
|
||||
/datum/eldritch_knowledge/ashen_eyes
|
||||
name = "Ashen Eyes"
|
||||
@@ -66,7 +73,11 @@
|
||||
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/mad_mask)
|
||||
banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/flesh_mark,/datum/eldritch_knowledge/void_mark)
|
||||
banned_knowledge = list(
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/void_mark
|
||||
)
|
||||
route = PATH_ASH
|
||||
|
||||
/datum/eldritch_knowledge/ash_mark/on_mansus_grasp(target,user,proximity_flag,click_parameters)
|
||||
@@ -74,7 +85,7 @@
|
||||
if(isliving(target))
|
||||
. = TRUE
|
||||
var/mob/living/living_target = target
|
||||
living_target.apply_status_effect(/datum/status_effect/eldritch/ash,5)
|
||||
living_target.apply_status_effect(/datum/status_effect/eldritch/ash, 5)
|
||||
|
||||
/datum/eldritch_knowledge/mad_mask
|
||||
name = "Mask of Madness"
|
||||
@@ -83,7 +94,11 @@
|
||||
cost = 1
|
||||
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)
|
||||
next_knowledge = list(
|
||||
/datum/eldritch_knowledge/curse/corrosion,
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade,
|
||||
/datum/eldritch_knowledge/curse/paralysis
|
||||
)
|
||||
route = PATH_ASH
|
||||
|
||||
/datum/eldritch_knowledge/spell/flame_birth
|
||||
@@ -92,7 +107,11 @@
|
||||
desc = "Short range spell that allows you to curse someone with massive sanity loss."
|
||||
cost = 1
|
||||
spell_to_add = /obj/effect/proc_holder/spell/targeted/fiery_rebirth
|
||||
next_knowledge = list(/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/final/ash_final)
|
||||
next_knowledge = list(
|
||||
/datum/eldritch_knowledge/spell/cleave,
|
||||
/datum/eldritch_knowledge/summon/ashy,
|
||||
/datum/eldritch_knowledge/final/ash_final
|
||||
)
|
||||
route = PATH_ASH
|
||||
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade
|
||||
@@ -101,15 +120,19 @@
|
||||
desc = "Your blade of choice will now light your enemies ablaze."
|
||||
cost = 2
|
||||
next_knowledge = list(/datum/eldritch_knowledge/spell/flame_birth)
|
||||
banned_knowledge = list(/datum/eldritch_knowledge/rust_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/void_blade_upgrade)
|
||||
banned_knowledge = list(
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/void_blade_upgrade
|
||||
)
|
||||
route = PATH_ASH
|
||||
|
||||
/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
|
||||
C.adjust_fire_stacks(1)
|
||||
C.IgniteMob()
|
||||
var/mob/living/carbon/burn_victim = target
|
||||
burn_victim.adjust_fire_stacks(1)
|
||||
burn_victim.IgniteMob()
|
||||
|
||||
/datum/eldritch_knowledge/curse/corrosion
|
||||
name = "Curse of Corrosion"
|
||||
@@ -117,7 +140,10 @@
|
||||
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/mad_mask,/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)
|
||||
@@ -164,16 +190,23 @@
|
||||
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)
|
||||
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 the Ashlord, [user.real_name] has ascended! The flames shall consume all! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", ANNOUNCER_SPANOMALIES)
|
||||
user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/fire_cascade/big)
|
||||
user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/fire_sworn)
|
||||
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/ash_ascension, H)
|
||||
for(var/X in trait_list)
|
||||
ADD_TRAIT(user,X,MAGIC_TRAIT)
|
||||
var/mob/living/carbon/human/ascendant = user
|
||||
ascendant.physiology.brute_mod *= 0.5
|
||||
ascendant.physiology.burn_mod *= 0.5
|
||||
ascendant.client?.give_award(/datum/award/achievement/misc/ash_ascension, ascendant)
|
||||
for(var/trait in trait_list)
|
||||
ADD_TRAIT(user, trait, MAGIC_TRAIT)
|
||||
return ..()
|
||||
|
||||
@@ -2,9 +2,16 @@
|
||||
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,/datum/eldritch_knowledge/final/void_final,/datum/eldritch_knowledge/base_void)
|
||||
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)
|
||||
required_atoms = list(/obj/item/kitchen/knife, /obj/effect/decal/cleanable/blood)
|
||||
result_atoms = list(/obj/item/melee/sickly_blade/flesh)
|
||||
cost = 1
|
||||
route = PATH_FLESH
|
||||
@@ -14,36 +21,37 @@
|
||||
desc = "Allows you to resurrect the dead as voiceless dead by sacrificing them on the transmutation rune with a poppy. Voiceless dead are mute and have 50 HP. You can only have 2 at a time."
|
||||
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/food/grown/poppy)
|
||||
next_knowledge = list(/datum/eldritch_knowledge/flesh_mark,/datum/eldritch_knowledge/void_cloak,/datum/eldritch_knowledge/ashen_eyes)
|
||||
required_atoms = list(/mob/living/carbon/human, /obj/item/food/grown/poppy)
|
||||
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
|
||||
var/list/ghouls = list()
|
||||
|
||||
/datum/eldritch_knowledge/flesh_ghoul/on_finished_recipe(mob/living/user,list/atoms,loc)
|
||||
/datum/eldritch_knowledge/flesh_ghoul/on_finished_recipe(mob/living/user, list/atoms, loc)
|
||||
var/mob/living/carbon/human/humie = locate() in atoms
|
||||
if(QDELETED(humie) || humie.stat != DEAD)
|
||||
return
|
||||
|
||||
if(length(ghouls) >= max_amt)
|
||||
return
|
||||
|
||||
if(HAS_TRAIT(humie,TRAIT_HUSK))
|
||||
return
|
||||
|
||||
humie.grab_ghost()
|
||||
|
||||
if(!humie.mind || !humie.client)
|
||||
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [humie.real_name], a voiceless dead", ROLE_HERETIC, null, ROLE_HERETIC, 50,humie)
|
||||
if(!LAZYLEN(candidates))
|
||||
return
|
||||
var/mob/dead/observer/C = pick(candidates)
|
||||
message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(humie)]) to replace an AFK player.")
|
||||
var/mob/dead/observer/chosen_candidate = pick(candidates)
|
||||
message_admins("[key_name_admin(chosen_candidate)] has taken control of ([key_name_admin(humie)]) to replace an AFK player.")
|
||||
humie.ghostize(0)
|
||||
humie.key = C.key
|
||||
humie.key = chosen_candidate.key
|
||||
|
||||
ADD_TRAIT(humie,TRAIT_MUTE,MAGIC_TRAIT)
|
||||
ADD_TRAIT(humie, TRAIT_MUTE, MAGIC_TRAIT)
|
||||
log_game("[key_name_admin(humie)] has become a voiceless dead, their master is [user.real_name]")
|
||||
humie.revive(full_heal = TRUE, admin_revive = TRUE)
|
||||
humie.setMaxHealth(50)
|
||||
@@ -55,7 +63,7 @@
|
||||
var/datum/antagonist/heretic/master = user.mind.has_antag_datum(/datum/antagonist/heretic)
|
||||
heretic_monster.set_owner(master)
|
||||
atoms -= humie
|
||||
RegisterSignal(humie,COMSIG_LIVING_DEATH,.proc/remove_ghoul)
|
||||
RegisterSignal(humie,COMSIG_LIVING_DEATH, .proc/remove_ghoul)
|
||||
ghouls += humie
|
||||
|
||||
/datum/eldritch_knowledge/flesh_ghoul/proc/remove_ghoul(datum/source)
|
||||
@@ -79,25 +87,18 @@
|
||||
if(!ishuman(target) || target == user)
|
||||
return
|
||||
var/mob/living/carbon/human/human_target = target
|
||||
|
||||
|
||||
if(QDELETED(human_target) || human_target.stat != DEAD)
|
||||
return
|
||||
|
||||
human_target.grab_ghost()
|
||||
|
||||
if(!human_target.mind || !human_target.client)
|
||||
to_chat(user, "<span class='warning'>There is no soul connected to this body...</span>")
|
||||
return
|
||||
|
||||
if(HAS_TRAIT(human_target, TRAIT_HUSK))
|
||||
to_chat(user, "<span class='warning'>You cannot revive a dead ghoul!</span>")
|
||||
return
|
||||
|
||||
if(LAZYLEN(spooky_scaries) >= ghoul_amt)
|
||||
to_chat(user, "<span class='warning'>Your patron cannot support more ghouls on this plane!</span>")
|
||||
return
|
||||
|
||||
LAZYADD(spooky_scaries, human_target)
|
||||
log_game("[key_name_admin(human_target)] has become a ghoul, their master is [user.real_name]")
|
||||
//we change it to true only after we know they passed all the checks
|
||||
@@ -111,7 +112,6 @@
|
||||
var/datum/antagonist/heretic_monster/heretic_monster = human_target.mind.add_antag_datum(/datum/antagonist/heretic_monster)
|
||||
var/datum/antagonist/heretic/master = user.mind.has_antag_datum(/datum/antagonist/heretic)
|
||||
heretic_monster.set_owner(master)
|
||||
return
|
||||
|
||||
/datum/eldritch_knowledge/flesh_grasp/on_eldritch_blade(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
@@ -173,7 +173,11 @@
|
||||
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/rune_carver,/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
|
||||
@@ -183,7 +187,11 @@
|
||||
cost = 1
|
||||
required_atoms = list(/obj/item/pen,/obj/item/organ/eyes,/obj/item/candle,/obj/item/paper)
|
||||
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)
|
||||
next_knowledge = list(
|
||||
/datum/eldritch_knowledge/summon/ashy,
|
||||
/datum/eldritch_knowledge/summon/rusty,
|
||||
/datum/eldritch_knowledge/final/flesh_final
|
||||
)
|
||||
route = PATH_FLESH
|
||||
|
||||
/datum/eldritch_knowledge/summon/ashy
|
||||
@@ -226,12 +234,12 @@
|
||||
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
|
||||
var/mob/living/carbon/human/lord_of_arms = user
|
||||
lord_of_arms.physiology.brute_mod *= 0.5
|
||||
lord_of_arms.physiology.burn_mod *= 0.5
|
||||
lord_of_arms.client?.give_award(/datum/award/achievement/misc/flesh_ascension, lord_of_arms)
|
||||
var/datum/antagonist/heretic/heretic_datum = user.mind.has_antag_datum(/datum/antagonist/heretic)
|
||||
var/datum/eldritch_knowledge/flesh_grasp/grasp_ghoul = heretic_datum.get_knowledge(/datum/eldritch_knowledge/flesh_grasp)
|
||||
grasp_ghoul.ghoul_amt *= 3
|
||||
var/datum/eldritch_knowledge/flesh_ghoul/better_ghoul = heretic_datum.get_knowledge(/datum/eldritch_knowledge/flesh_ghoul)
|
||||
better_ghoul.max_amt *= 3
|
||||
|
||||
@@ -16,7 +16,13 @@
|
||||
cost = 1
|
||||
next_knowledge = list(/datum/eldritch_knowledge/rust_regen)
|
||||
var/rust_force = 500
|
||||
var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed,/turf/open/space,/turf/open/lava,/turf/open/chasm,/turf/open/floor/plating/rust))
|
||||
var/static/list/blacklisted_turfs = typecacheof(list(
|
||||
/turf/closed,
|
||||
/turf/open/space,
|
||||
/turf/open/lava,
|
||||
/turf/open/chasm,
|
||||
/turf/open/floor/plating/rust
|
||||
))
|
||||
route = PATH_RUST
|
||||
|
||||
/datum/eldritch_knowledge/rust_fist/on_mansus_grasp(atom/target, mob/living/user, proximity_flag, click_parameters)
|
||||
@@ -35,11 +41,11 @@
|
||||
/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
|
||||
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)
|
||||
var/mob/living/carbon/human/victim = target
|
||||
var/datum/status_effect/eldritch/effect = victim.has_status_effect(/datum/status_effect/eldritch/rust) || victim.has_status_effect(/datum/status_effect/eldritch/ash) || victim.has_status_effect(/datum/status_effect/eldritch/flesh) || victim.has_status_effect(/datum/status_effect/eldritch/void)
|
||||
if(effect)
|
||||
effect.on_effect()
|
||||
victim.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_SLOT_EARS,ORGAN_SLOT_EYES,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS,ORGAN_SLOT_STOMACH,ORGAN_SLOT_HEART),25)
|
||||
|
||||
/datum/eldritch_knowledge/spell/area_conversion
|
||||
name = "Agressive Spread"
|
||||
@@ -47,7 +53,11 @@
|
||||
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/crucible)
|
||||
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
|
||||
@@ -55,7 +65,11 @@
|
||||
desc = "Passively heals you and provides stun resistance when you are on rusted tiles."
|
||||
gain_text = "The strength was unparalleled, unnatural. The Blacksmith was smiling."
|
||||
cost = 1
|
||||
next_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/armor,/datum/eldritch_knowledge/essence)
|
||||
next_knowledge = list(
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/armor,
|
||||
/datum/eldritch_knowledge/essence
|
||||
)
|
||||
route = PATH_RUST
|
||||
|
||||
/datum/eldritch_knowledge/rust_regen/on_gain(mob/user)
|
||||
@@ -203,7 +217,13 @@
|
||||
var/list/edge_turfs = list()
|
||||
var/list/turfs = list()
|
||||
var/turf/centre
|
||||
var/static/list/blacklisted_turfs = typecacheof(list(/turf/open/indestructible,/turf/closed/indestructible,/turf/open/space,/turf/open/lava,/turf/open/chasm))
|
||||
var/static/list/blacklisted_turfs = typecacheof(list(
|
||||
/turf/open/indestructible,
|
||||
/turf/closed/indestructible,
|
||||
/turf/open/space,
|
||||
/turf/open/lava,
|
||||
/turf/open/chasm
|
||||
))
|
||||
var/spread_per_sec = 6
|
||||
|
||||
|
||||
@@ -224,14 +244,13 @@
|
||||
if(edge_turfs.len < spread_am)
|
||||
compile_turfs()
|
||||
|
||||
var/turf/T
|
||||
var/turf/rust_affected
|
||||
for(var/i in 0 to spread_am)
|
||||
if(!edge_turfs.len)
|
||||
continue
|
||||
T = pick(edge_turfs - turfs)
|
||||
T.rust_heretic_act()
|
||||
turfs += T
|
||||
|
||||
rust_affected = pick(edge_turfs - turfs)
|
||||
rust_affected.rust_heretic_act()
|
||||
turfs += rust_affected
|
||||
|
||||
|
||||
/**
|
||||
@@ -245,8 +264,8 @@
|
||||
var/max_dist = 1
|
||||
for(var/turfie in turfs)
|
||||
if(!istype(turfie,/turf/closed/wall/rust) && !istype(turfie,/turf/closed/wall/r_wall/rust) && !istype(turfie,/turf/open/floor/plating/rust))
|
||||
removal_list +=turfie
|
||||
max_dist = max(max_dist,get_dist(turfie,centre)+1)
|
||||
removal_list += turfie
|
||||
max_dist = max(max_dist, get_dist(turfie,centre) +1)
|
||||
turfs -= removal_list
|
||||
for(var/turfie in spiral_range_turfs(max_dist,centre,FALSE))
|
||||
|
||||
|
||||
@@ -2,7 +2,14 @@
|
||||
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)
|
||||
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)
|
||||
@@ -38,12 +45,12 @@
|
||||
. = ..()
|
||||
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)
|
||||
var/mob/living/carbon/human/victim = target
|
||||
var/datum/status_effect/eldritch/effect = victim.has_status_effect(/datum/status_effect/eldritch/rust) || victim.has_status_effect(/datum/status_effect/eldritch/ash) || victim.has_status_effect(/datum/status_effect/eldritch/flesh) || victim.has_status_effect(/datum/status_effect/eldritch/void)
|
||||
if(!effect)
|
||||
return
|
||||
E.on_effect()
|
||||
H.silent += 3
|
||||
effect.on_effect()
|
||||
victim.silent += 3
|
||||
|
||||
/datum/eldritch_knowledge/cold_snap
|
||||
name = "Aristocrat's Way"
|
||||
@@ -55,12 +62,12 @@
|
||||
|
||||
/datum/eldritch_knowledge/cold_snap/on_gain(mob/user)
|
||||
. = ..()
|
||||
ADD_TRAIT(user,TRAIT_RESISTCOLD,MAGIC_TRAIT)
|
||||
ADD_TRAIT(user, TRAIT_RESISTCOLD, MAGIC_TRAIT)
|
||||
ADD_TRAIT(user, TRAIT_NOBREATH, MAGIC_TRAIT)
|
||||
|
||||
/datum/eldritch_knowledge/cold_snap/on_lose(mob/user)
|
||||
. = ..()
|
||||
REMOVE_TRAIT(user,TRAIT_RESISTCOLD,MAGIC_TRAIT)
|
||||
REMOVE_TRAIT(user, TRAIT_RESISTCOLD, MAGIC_TRAIT)
|
||||
REMOVE_TRAIT(user, TRAIT_NOBREATH, MAGIC_TRAIT)
|
||||
|
||||
/datum/eldritch_knowledge/void_cloak
|
||||
@@ -78,7 +85,11 @@
|
||||
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)
|
||||
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)
|
||||
@@ -95,7 +106,11 @@
|
||||
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)
|
||||
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
|
||||
@@ -122,7 +137,11 @@
|
||||
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)
|
||||
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)
|
||||
@@ -145,7 +164,11 @@
|
||||
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)
|
||||
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
|
||||
@@ -161,12 +184,12 @@
|
||||
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
|
||||
ADD_TRAIT(H, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT)
|
||||
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! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", ANNOUNCER_SPANOMALIES)
|
||||
var/mob/living/carbon/human/waltzing = user
|
||||
waltzing.physiology.brute_mod *= 0.5
|
||||
waltzing.physiology.burn_mod *= 0.5
|
||||
ADD_TRAIT(waltzing, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT)
|
||||
waltzing.client?.give_award(/datum/award/achievement/misc/void_ascension, waltzing)
|
||||
priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# The nobleman of void [waltzing.real_name] has arrived, step along the Waltz that ends worlds! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", ANNOUNCER_SPANOMALIES)
|
||||
|
||||
sound_loop = new(list(user),TRUE,TRUE)
|
||||
return ..()
|
||||
|
||||
Reference in New Issue
Block a user