[Semi-Port] New Heretic Path: Knock (#20763)

* woo hoo

haha

* lore next

then we're done

* ok

lore done

* i didnt forget this time

hahaha

* fix lint?

maybe

* linter angy

maybe

* updated comment

time to go raid yippie

* typo

ha

* yes

forgot this

* ok

whatever

* Updates sprites

yay
This commit is contained in:
cowbot92
2023-11-03 15:21:08 -04:00
committed by GitHub
parent 30a7bdaa7a
commit af54f9e6f8
26 changed files with 714 additions and 27 deletions

View File

@@ -117,6 +117,7 @@
#define PATH_VOID "Void" #define PATH_VOID "Void"
#define PATH_BLADE "Blade" #define PATH_BLADE "Blade"
#define PATH_COSMIC "Cosmic" #define PATH_COSMIC "Cosmic"
#define PATH_KNOCK "Knock"
#define TIER_NONE 0 #define TIER_NONE 0
#define TIER_PATH 1 #define TIER_PATH 1

View File

@@ -484,3 +484,5 @@
#define TRAIT_NO_FLOATING_ANIM "no-floating-animation" #define TRAIT_NO_FLOATING_ANIM "no-floating-animation"
/// Used to prevent multiple floating blades from triggering over the same target /// Used to prevent multiple floating blades from triggering over the same target
#define TRAIT_BEING_BLADE_SHIELDED "being_blade_shielded" #define TRAIT_BEING_BLADE_SHIELDED "being_blade_shielded"
/// things with this trait are treated as having no access in /obj/proc/check_access(obj/item)
#define TRAIT_ALWAYS_NO_ACCESS "alwaysnoaccess"

View File

@@ -21,6 +21,7 @@
#define POLL_IGNORE_SPLITPERSONALITY "split_personality" #define POLL_IGNORE_SPLITPERSONALITY "split_personality"
#define POLL_IGNORE_CONTRACTOR_SUPPORT "contractor_support" #define POLL_IGNORE_CONTRACTOR_SUPPORT "contractor_support"
#define POLL_IGNORE_RAGINMAGES "raging_mages" #define POLL_IGNORE_RAGINMAGES "raging_mages"
#define POLL_IGNORE_HERETIC_MONSTER "heretic_monsters"
GLOBAL_LIST_INIT(poll_ignore_desc, list( GLOBAL_LIST_INIT(poll_ignore_desc, list(

View File

@@ -6,6 +6,8 @@ SUBSYSTEM_DEF(machines)
var/list/processing = list() var/list/processing = list()
var/list/currentrun = list() var/list/currentrun = list()
var/list/powernets = list() var/list/powernets = list()
/// Assosciative list of all machines that exist.
VAR_PRIVATE/list/machines_by_type = list()
/datum/controller/subsystem/machines/Initialize() /datum/controller/subsystem/machines/Initialize()
makepowernets() makepowernets()
@@ -67,3 +69,16 @@ SUBSYSTEM_DEF(machines)
processing = SSmachines.processing processing = SSmachines.processing
if (istype(SSmachines.powernets)) if (istype(SSmachines.powernets))
powernets = SSmachines.powernets powernets = SSmachines.powernets
/// Gets a list of all machines that are either the passed type or a subtype.
/datum/controller/subsystem/machines/proc/get_machines_by_type_and_subtypes(obj/machinery/machine_type)
if(!ispath(machine_type))
machine_type = machine_type.type
if(!ispath(machine_type, /obj/machinery))
CRASH("called get_machines_by_type_and_subtypes with a non-machine type [machine_type]")
var/list/machines = list()
for(var/next_type in typesof(machine_type))
var/list/found_machines = machines_by_type[next_type]
if(found_machines)
machines += found_machines
return machines

View File

@@ -1639,3 +1639,16 @@
new teleport_effect(get_turf(owner)) new teleport_effect(get_turf(owner))
owner.Paralyze(2 SECONDS) owner.Paralyze(2 SECONDS)
return ..() return ..()
/datum/status_effect/eldritch/knock
id = "knock_mark"
effect_sprite = "emark7"
duration = 10 SECONDS
/datum/status_effect/eldritch/knock/on_apply()
. = ..()
ADD_TRAIT(owner, TRAIT_ALWAYS_NO_ACCESS, STATUS_EFFECT_TRAIT)
/datum/status_effect/eldritch/knock/on_remove()
REMOVE_TRAIT(owner, TRAIT_ALWAYS_NO_ACCESS, STATUS_EFFECT_TRAIT)
return ..()

View File

@@ -1087,3 +1087,176 @@ update_label("John Doe", "Clowny")
/obj/item/card/id/departmental_budget/sec /obj/item/card/id/departmental_budget/sec
department_ID = ACCOUNT_SEC department_ID = ACCOUNT_SEC
department_name = ACCOUNT_SEC_NAME department_name = ACCOUNT_SEC_NAME
/***
*
*
* HERETIC ID SECTION (SORRY)
*
*
*/
/obj/effect/knock_portal
name = "crack in reality"
desc = "A crack in space, impossibly deep and painful to the eyes. Definitely not safe."
icon = 'icons/effects/eldritch.dmi'
icon_state = "realitycrack"
light_system = STATIC_LIGHT
light_power = 1
light_on = TRUE
light_color = COLOR_GREEN
light_range = 3
opacity = TRUE
density = FALSE //so we dont block doors closing
layer = OBJ_LAYER //under doors
///The knock portal we teleport to
var/obj/effect/knock_portal/destination
///The airlock we are linked to, we delete if it is destroyed
var/obj/machinery/door/our_airlock
/obj/effect/knock_portal/Initialize(mapload, target)
. = ..()
if(target)
our_airlock = target
RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(delete_on_door_delete))
var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
)
AddElement(/datum/element/connect_loc, loc_connections)
///Deletes us and our destination portal if our_airlock is destroyed
/obj/effect/knock_portal/proc/delete_on_door_delete(datum/source)
SIGNAL_HANDLER
qdel(src)
///Signal handler for when our location is entered, calls teleport on the victim, if their old_loc didnt contain a portal already (to prevent loops)
/obj/effect/knock_portal/proc/on_entered(datum/source, mob/living/loser, atom/old_loc)
SIGNAL_HANDLER
if(istype(loser) && !(locate(type) in old_loc))
teleport(loser)
/obj/effect/knock_portal/Destroy()
QDEL_NULL(destination)
our_airlock = null
return ..()
///Teleports the teleportee, to a random airlock if the teleportee isnt a heretic, or the other portal if they are one
/obj/effect/knock_portal/proc/teleport(mob/living/teleportee)
if(isnull(destination)) //dumbass
qdel(src)
return
//get it?
var/obj/machinery/door/doorstination = IS_HERETIC_OR_MONSTER(teleportee) ? destination.our_airlock : find_random_airlock()
if(!do_teleport(teleportee, get_turf(doorstination), channel = TELEPORT_CHANNEL_MAGIC))
return
if(!IS_HERETIC_OR_MONSTER(teleportee))
teleportee.apply_damage(20, BRUTE) //so they dont roll it like a jackpot machine to see if they can land in the armory
to_chat(teleportee, span_userdanger("You stumble through [src], battered by forces beyond your comprehension, landing anywhere but where you thought you were going."))
INVOKE_ASYNC(src, PROC_REF(async_opendoor), doorstination)
///Returns a random airlock on the same Z level as our portal, that isnt our airlock
/obj/effect/knock_portal/proc/find_random_airlock()
var/list/turf/possible_destinations = list()
for(var/obj/airlock as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock))
if(airlock.z != z)
continue
if(airlock.loc == loc)
continue
possible_destinations += airlock
return pick(possible_destinations)
///Asynchronous proc to unbolt, then open the passed door
/obj/effect/knock_portal/proc/async_opendoor(obj/machinery/door/door)
if(istype(door, /obj/machinery/door/airlock)) //they can create portals on ANY door, but we should unlock airlocks so they can actually open
var/obj/machinery/door/airlock/as_airlock = door
as_airlock.unbolt()
door.open()
/obj/item/card/id/syndicate/heretic
name = "Eldritch Card"
access = list(ACCESS_MAINT_TUNNELS)
///The first portal in the portal pair, so we can clear it later
var/obj/effect/knock_portal/portal_one
///The second portal in the portal pair, so we can clear it later
var/obj/effect/knock_portal/portal_two
///The first door we are linking in the pair, so we can create a portal pair
var/datum/weakref/link
/obj/item/card/id/syndicate/heretic/examine(mob/user)
. = ..()
if(!IS_HERETIC_OR_MONSTER(user))
return
. += span_hypnophrase("Enchanted by the Mansus!")
. += span_hypnophrase("Using an ID on this will consume it and allow you to copy its accesses.")
. += span_hypnophrase("<b>Using this in-hand</b> allows you to change its appearance.")
. += span_hypnophrase("<b>Using this on a pair of doors</b>, allows you to link them together. Entering one door will transport you to the other, while heathens are instead teleported to a random airlock.")
/obj/item/card/id/syndicate/heretic/afterattack(obj/item/O, mob/user, proximity)
if(!proximity)
return
if(istype(O, /obj/item/card/id))
var/obj/item/card/id/I = O
src.access |= I.access
if(isliving(user) && user.mind)
if(user.mind.has_antag_datum(/datum/antagonist/heretic))
qdel(I)
to_chat(usr, span_notice("The card consumes the original ID, copying its access."))
/obj/item/card/id/syndicate/heretic/proc/clear_portals()
QDEL_NULL(portal_one)
QDEL_NULL(portal_two)
///Clears portal references
/obj/item/card/id/syndicate/heretic/proc/clear_portal_refs()
SIGNAL_HANDLER
portal_one = null
portal_two = null
///Creates a portal pair at door1 and door2, displays a balloon alert to user
/obj/item/card/id/syndicate/heretic/proc/make_portal(mob/user, obj/machinery/door/door1, obj/machinery/door/door2)
var/message = "linked"
if(portal_one || portal_two)
clear_portals()
message += ", previous cleared"
portal_one = new(get_turf(door2), door2)
portal_two = new(get_turf(door1), door1)
portal_one.destination = portal_two
RegisterSignal(portal_one, COMSIG_PARENT_QDELETING, PROC_REF(clear_portal_refs)) //we only really need to register one because they already qdel both portals if one is destroyed
portal_two.destination = portal_one
balloon_alert(user, "[message]")
/obj/item/card/id/syndicate/heretic/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(!proximity_flag || !IS_HERETIC(user))
return
if(istype(target, /obj/effect/knock_portal))
clear_portals()
return
if(!istype(target, /obj/machinery/door))
return
var/reference_resolved = link?.resolve()
if(reference_resolved == target)
return
if(reference_resolved)
make_portal(user, reference_resolved, target)
to_chat(user, span_notice("You use [src], to link [link] and [target] together."))
link = null
balloon_alert(user, "link 2/2")
else
link = WEAKREF(target)
balloon_alert(user, "link 1/2")
/obj/item/card/id/syndicate/heretic/Destroy()
link = null
clear_portals()
return ..()

View File

@@ -31,7 +31,8 @@
/datum/eldritch_knowledge/base_mind, /datum/eldritch_knowledge/base_mind,
/datum/eldritch_knowledge/base_void, /datum/eldritch_knowledge/base_void,
/datum/eldritch_knowledge/base_blade, /datum/eldritch_knowledge/base_blade,
/datum/eldritch_knowledge/base_cosmic), /datum/eldritch_knowledge/base_cosmic,
/datum/eldritch_knowledge/base_knock),
TIER_1 = list( TIER_1 = list(
/datum/eldritch_knowledge/madness_mask, /datum/eldritch_knowledge/madness_mask,
/datum/eldritch_knowledge/flesh_ghoul, /datum/eldritch_knowledge/flesh_ghoul,
@@ -40,6 +41,7 @@
/datum/eldritch_knowledge/spell/void_phase, /datum/eldritch_knowledge/spell/void_phase,
/datum/eldritch_knowledge/blade_dance, /datum/eldritch_knowledge/blade_dance,
/datum/eldritch_knowledge/spell/cosmic_runes, /datum/eldritch_knowledge/spell/cosmic_runes,
/datum/eldritch_knowledge/key_ring,
/datum/eldritch_knowledge/armor, /datum/eldritch_knowledge/armor,
/datum/eldritch_knowledge/void_cloak, /datum/eldritch_knowledge/void_cloak,
/datum/eldritch_knowledge/ashen_eyes, /datum/eldritch_knowledge/ashen_eyes,
@@ -52,7 +54,8 @@
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark, /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark), /datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark),
TIER_2 = list( TIER_2 = list(
/datum/eldritch_knowledge/spell/volcano_blast, /datum/eldritch_knowledge/spell/volcano_blast,
/datum/eldritch_knowledge/raw_prophet, /datum/eldritch_knowledge/raw_prophet,
@@ -61,6 +64,7 @@
/datum/eldritch_knowledge/cold_snap, /datum/eldritch_knowledge/cold_snap,
/datum/eldritch_knowledge/duel_stance, /datum/eldritch_knowledge/duel_stance,
/datum/eldritch_knowledge/spell/star_blast, /datum/eldritch_knowledge/spell/star_blast,
/datum/eldritch_knowledge/spell/burglar_finesse,
/datum/eldritch_knowledge/spell/blood_siphon, /datum/eldritch_knowledge/spell/blood_siphon,
/datum/eldritch_knowledge/spell/eldritchbolt, /datum/eldritch_knowledge/spell/eldritchbolt,
/datum/eldritch_knowledge/spell/void_blast), /datum/eldritch_knowledge/spell/void_blast),
@@ -71,7 +75,8 @@
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade, /datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade), /datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade),
TIER_3 = list( TIER_3 = list(
/datum/eldritch_knowledge/spell/flame_birth, /datum/eldritch_knowledge/spell/flame_birth,
/datum/eldritch_knowledge/stalker, /datum/eldritch_knowledge/stalker,
@@ -80,6 +85,7 @@
/datum/eldritch_knowledge/spell/void_pull, /datum/eldritch_knowledge/spell/void_pull,
/datum/eldritch_knowledge/spell/furious_steel, /datum/eldritch_knowledge/spell/furious_steel,
/datum/eldritch_knowledge/spell/cosmic_expansion, /datum/eldritch_knowledge/spell/cosmic_expansion,
/datum/eldritch_knowledge/spell/freedom_forever,
/datum/eldritch_knowledge/ashy, /datum/eldritch_knowledge/ashy,
/datum/eldritch_knowledge/rusty, /datum/eldritch_knowledge/rusty,
/datum/eldritch_knowledge/spell/cleave, /datum/eldritch_knowledge/spell/cleave,
@@ -92,7 +98,8 @@
/datum/eldritch_knowledge/mind_final, /datum/eldritch_knowledge/mind_final,
/datum/eldritch_knowledge/void_final, /datum/eldritch_knowledge/void_final,
/datum/eldritch_knowledge/blade_final, /datum/eldritch_knowledge/blade_final,
/datum/eldritch_knowledge/cosmic_final)) /datum/eldritch_knowledge/cosmic_final,
/datum/eldritch_knowledge/knock_final))
var/static/list/path_to_ui_color = list( var/static/list/path_to_ui_color = list(
PATH_START = "grey", PATH_START = "grey",
@@ -368,8 +375,10 @@
else if(is_cosmic()) else if(is_cosmic())
if(transformed) if(transformed)
parts += "<span class='greentext big'>THE STAR GAZER HAS ASCENDED!</span>" parts += "<span class='greentext big'>THE STAR GAZER HAS ASCENDED!</span>"
else else if(is_knock())
parts += "<span class='greentext big'>THE OATHBREAKER HAS ASCENDED!</span>" parts += "<span class='greentext big'>THE SPIDER'S DOOR HAS BEEN OPENED!</span>"
else
parts += "<span class='greentext big'>THE OATHBREAKER HAS ASCENDED!</span>"
else else
if(cultiewin) if(cultiewin)
parts += span_greentext("The [lowertext(lore)] heretic was successful!") parts += span_greentext("The [lowertext(lore)] heretic was successful!")
@@ -731,6 +740,37 @@
flavor_message += "Dragging your feet through what remains of the ruined station, you can only laugh as the stars continue to twinkle in the sky, despite everything." flavor_message += "Dragging your feet through what remains of the ruined station, you can only laugh as the stars continue to twinkle in the sky, despite everything."
else //Dead else //Dead
flavor_message += "Your skin turns to dust and your bones reduce to raw atoms, you will be forgotten in the new cosmic age." flavor_message += "Your skin turns to dust and your bones reduce to raw atoms, you will be forgotten in the new cosmic age."
else if(is_knock()) //Cosmic epilogues
if(ascended)
message_color = "#FFD700"
if(escaped)
flavor_message += "The shuttle docks at Centcom, the doors open but instead of people a mass of horrors pour out, consuming everyone in their path."
else if(alive)
flavor_message += "You've opened the door, unlocked the lock, became the key. Crack open the rest of reality, door by door."
else //Dead
flavor_message += "For a fleeting moment, you opened a portal to the end of days. Nothing could have brought you greater satisfaction, and you pass in peace"
else if(cultiewin) //Completed objectives
if(escaped)
flavor_message += "With each gleeful step you take through the station, you look at the passing airlocks, knowing the truth that you will bring."
message_color = "#008000"
else if(alive)
flavor_message += "The shuttle is gone, you are alone. And yet, as you turn to the nearest airlock, what waits beyond is something only you can see."
message_color = "#008000"
else //Dead
flavor_message += "Your death is not your end, as your bones will become the key for another's path to glory."
message_color = "#517fff"
else //Failed objectives
if(escaped)
flavor_message += "You escaped, but for what? For the rest of your life you avoid doorways, knowing that once you pass through one, you may not come back."
message_color = "#517fff"
else if(alive)
flavor_message += "Step by step, you walk the halls of the abandonded tarnished station, ID in hand looking for the right door. The door to oblivion."
else //Dead
flavor_message += "As the last of your life drains from you, all you can manage is to lay there dying. Nobody will remember your deeds here today."
else //Unpledged epilogues else //Unpledged epilogues
if(cultiewin) //Completed objectives (WITH NO RESEARCH MIND YOU) if(cultiewin) //Completed objectives (WITH NO RESEARCH MIND YOU)
@@ -839,6 +879,9 @@
/datum/antagonist/heretic/proc/is_cosmic() /datum/antagonist/heretic/proc/is_cosmic()
return "[lore]" == "Cosmic" return "[lore]" == "Cosmic"
/datum/antagonist/heretic/proc/is_knock()
return "[lore]" == "Knock"
/datum/antagonist/heretic/proc/is_unpledged() /datum/antagonist/heretic/proc/is_unpledged()
return "[lore]" == "Unpledged" return "[lore]" == "Unpledged"

View File

@@ -189,7 +189,7 @@
/obj/item/melee/sickly_blade/cosmic /obj/item/melee/sickly_blade/cosmic
name = "cosmic blade" name = "cosmic blade"
desc = "A piece of the cosmos, shaped like a weapon for you to wield" desc = "A piece of the cosmos, shaped like a weapon for you to wield."
icon_state = "cosmic_blade" icon_state = "cosmic_blade"
item_state = "cosmic_blade" item_state = "cosmic_blade"
@@ -202,6 +202,12 @@
user.changeNext_move(CLICK_CD_MELEE) user.changeNext_move(CLICK_CD_MELEE)
return return
/obj/item/melee/sickly_blade/knock
name = "key blade"
desc = "A blade in the shape of a key, what door will you unlock with it?"
icon_state = "knock_blade"
item_state = "knock_blade"
/obj/item/clothing/neck/eldritch_amulet /obj/item/clothing/neck/eldritch_amulet
name = "warm eldritch medallion" 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 pulse of a thousand others." desc = "A strange medallion. Peering through the crystalline surface, the world around you melts away. You see your own beating heart, and the pulse of a thousand others."

View File

@@ -9,12 +9,14 @@
/datum/eldritch_knowledge/base_void, /datum/eldritch_knowledge/base_void,
/datum/eldritch_knowledge/base_blade, /datum/eldritch_knowledge/base_blade,
/datum/eldritch_knowledge/base_cosmic, /datum/eldritch_knowledge/base_cosmic,
/datum/eldritch_knowledge/base_knock,
/datum/eldritch_knowledge/rust_mark, /datum/eldritch_knowledge/rust_mark,
/datum/eldritch_knowledge/flesh_mark, /datum/eldritch_knowledge/flesh_mark,
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark, /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark, /datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark,
/datum/eldritch_knowledge/rust_blade_upgrade, /datum/eldritch_knowledge/rust_blade_upgrade,
/datum/eldritch_knowledge/flesh_blade_upgrade, /datum/eldritch_knowledge/flesh_blade_upgrade,
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
@@ -26,7 +28,8 @@
/datum/eldritch_knowledge/mind_final, /datum/eldritch_knowledge/mind_final,
/datum/eldritch_knowledge/void_final, /datum/eldritch_knowledge/void_final,
/datum/eldritch_knowledge/blade_final, /datum/eldritch_knowledge/blade_final,
/datum/eldritch_knowledge/cosmic_final) /datum/eldritch_knowledge/cosmic_final,
/datum/eldritch_knowledge/knock_final)
unlocked_transmutations = list(/datum/eldritch_transmutation/ash_knife) unlocked_transmutations = list(/datum/eldritch_transmutation/ash_knife)
cost = 1 cost = 1
route = PATH_ASH route = PATH_ASH
@@ -95,7 +98,8 @@
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark, /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark) /datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark,)
route = PATH_ASH route = PATH_ASH
tier = TIER_MARK tier = TIER_MARK
@@ -126,7 +130,7 @@
/datum/eldritch_knowledge/spell/volcano_blast /datum/eldritch_knowledge/spell/volcano_blast
name = "T2 - Volcano Blast" name = "T2 - Volcano Blast"
gain_text = "The strongest fires come from within, expel a piece of your burning soul to show you enemies the truth of flame." gain_text = "The strongest fires come from within, expel a piece of your burning soul to show you enemies the truth of flame."
desc = "Shoot a stong blast of fire at an enemy." desc = "Shoot a strong blast of fire at an enemy."
cost = 1 cost = 1
spell_to_add = /datum/action/cooldown/spell/pointed/projectile/fireball/eldritch spell_to_add = /datum/action/cooldown/spell/pointed/projectile/fireball/eldritch
route = PATH_ASH route = PATH_ASH
@@ -159,7 +163,8 @@
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade, /datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade) /datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade,)
route = PATH_ASH route = PATH_ASH
tier = TIER_BLADE tier = TIER_BLADE

View File

@@ -9,24 +9,28 @@
/datum/eldritch_knowledge/base_mind, /datum/eldritch_knowledge/base_mind,
/datum/eldritch_knowledge/base_void, /datum/eldritch_knowledge/base_void,
/datum/eldritch_knowledge/base_cosmic, /datum/eldritch_knowledge/base_cosmic,
/datum/eldritch_knowledge/base_knock,
/datum/eldritch_knowledge/ash_mark, /datum/eldritch_knowledge/ash_mark,
/datum/eldritch_knowledge/rust_mark, /datum/eldritch_knowledge/rust_mark,
/datum/eldritch_knowledge/flesh_mark, /datum/eldritch_knowledge/flesh_mark,
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/cosmic_mark, /datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark,
/datum/eldritch_knowledge/ash_blade_upgrade, /datum/eldritch_knowledge/ash_blade_upgrade,
/datum/eldritch_knowledge/rust_blade_upgrade, /datum/eldritch_knowledge/rust_blade_upgrade,
/datum/eldritch_knowledge/flesh_blade_upgrade, /datum/eldritch_knowledge/flesh_blade_upgrade,
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade, /datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade,
/datum/eldritch_knowledge/ash_final, /datum/eldritch_knowledge/ash_final,
/datum/eldritch_knowledge/rust_final, /datum/eldritch_knowledge/rust_final,
/datum/eldritch_knowledge/flesh_final, /datum/eldritch_knowledge/flesh_final,
/datum/eldritch_knowledge/mind_final, /datum/eldritch_knowledge/mind_final,
/datum/eldritch_knowledge/void_final, /datum/eldritch_knowledge/void_final,
/datum/eldritch_knowledge/cosmic_final) /datum/eldritch_knowledge/cosmic_final,
/datum/eldritch_knowledge/knock_final)
unlocked_transmutations = list(/datum/eldritch_transmutation/dark_knife) unlocked_transmutations = list(/datum/eldritch_transmutation/dark_knife)
cost = 1 cost = 1
route = PATH_BLADE route = PATH_BLADE
@@ -195,7 +199,8 @@
/datum/eldritch_knowledge/flesh_mark, /datum/eldritch_knowledge/flesh_mark,
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/cosmic_mark) /datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark,)
unlocked_transmutations = list(/datum/eldritch_transmutation/eldritch_whetstone) unlocked_transmutations = list(/datum/eldritch_transmutation/eldritch_whetstone)
route = PATH_BLADE route = PATH_BLADE
tier = TIER_MARK tier = TIER_MARK
@@ -270,7 +275,8 @@
/datum/eldritch_knowledge/flesh_blade_upgrade, /datum/eldritch_knowledge/flesh_blade_upgrade,
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade) /datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade,)
unlocked_transmutations = list(/datum/eldritch_transmutation/bone_knife) unlocked_transmutations = list(/datum/eldritch_transmutation/bone_knife)
route = PATH_BLADE route = PATH_BLADE
tier = TIER_BLADE tier = TIER_BLADE

View File

@@ -10,24 +10,28 @@
/datum/eldritch_knowledge/base_mind, /datum/eldritch_knowledge/base_mind,
/datum/eldritch_knowledge/base_void, /datum/eldritch_knowledge/base_void,
/datum/eldritch_knowledge/base_blade, /datum/eldritch_knowledge/base_blade,
/datum/eldritch_knowledge/base_knock,
/datum/eldritch_knowledge/ash_mark, /datum/eldritch_knowledge/ash_mark,
/datum/eldritch_knowledge/rust_mark, /datum/eldritch_knowledge/rust_mark,
/datum/eldritch_knowledge/flesh_mark, /datum/eldritch_knowledge/flesh_mark,
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark, /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/knock_mark,
/datum/eldritch_knowledge/ash_blade_upgrade, /datum/eldritch_knowledge/ash_blade_upgrade,
/datum/eldritch_knowledge/rust_blade_upgrade, /datum/eldritch_knowledge/rust_blade_upgrade,
/datum/eldritch_knowledge/flesh_blade_upgrade, /datum/eldritch_knowledge/flesh_blade_upgrade,
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade, /datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade,
/datum/eldritch_knowledge/ash_final, /datum/eldritch_knowledge/ash_final,
/datum/eldritch_knowledge/rust_final, /datum/eldritch_knowledge/rust_final,
/datum/eldritch_knowledge/flesh_final, /datum/eldritch_knowledge/flesh_final,
/datum/eldritch_knowledge/mind_final, /datum/eldritch_knowledge/mind_final,
/datum/eldritch_knowledge/void_final, /datum/eldritch_knowledge/void_final,
/datum/eldritch_knowledge/blade_final) /datum/eldritch_knowledge/blade_final,
/datum/eldritch_knowledge/knock_final)
unlocked_transmutations = list(/datum/eldritch_transmutation/cosmic_knife) unlocked_transmutations = list(/datum/eldritch_transmutation/cosmic_knife)
cost = 1 cost = 1
route = PATH_COSMIC route = PATH_COSMIC
@@ -78,7 +82,8 @@
/datum/eldritch_knowledge/flesh_mark, /datum/eldritch_knowledge/flesh_mark,
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark) /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/knock_mark,)
route = PATH_COSMIC route = PATH_COSMIC
tier = TIER_MARK tier = TIER_MARK
@@ -125,7 +130,8 @@
/datum/eldritch_knowledge/flesh_blade_upgrade, /datum/eldritch_knowledge/flesh_blade_upgrade,
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade) /datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade)
route = PATH_COSMIC route = PATH_COSMIC
tier = TIER_BLADE tier = TIER_BLADE

View File

@@ -9,24 +9,28 @@
/datum/eldritch_knowledge/base_void, /datum/eldritch_knowledge/base_void,
/datum/eldritch_knowledge/base_blade, /datum/eldritch_knowledge/base_blade,
/datum/eldritch_knowledge/base_cosmic, /datum/eldritch_knowledge/base_cosmic,
/datum/eldritch_knowledge/base_knock,
/datum/eldritch_knowledge/ash_mark, /datum/eldritch_knowledge/ash_mark,
/datum/eldritch_knowledge/rust_mark, /datum/eldritch_knowledge/rust_mark,
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark, /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark, /datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark,
/datum/eldritch_knowledge/ash_blade_upgrade, /datum/eldritch_knowledge/ash_blade_upgrade,
/datum/eldritch_knowledge/rust_blade_upgrade, /datum/eldritch_knowledge/rust_blade_upgrade,
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade, /datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade, /datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade,
/datum/eldritch_knowledge/ash_final, /datum/eldritch_knowledge/ash_final,
/datum/eldritch_knowledge/rust_final, /datum/eldritch_knowledge/rust_final,
/datum/eldritch_knowledge/mind_final, /datum/eldritch_knowledge/mind_final,
/datum/eldritch_knowledge/void_final, /datum/eldritch_knowledge/void_final,
/datum/eldritch_knowledge/blade_final, /datum/eldritch_knowledge/blade_final,
/datum/eldritch_knowledge/cosmic_final) /datum/eldritch_knowledge/cosmic_final,
/datum/eldritch_knowledge/knock_final)
cost = 1 cost = 1
unlocked_transmutations = list(/datum/eldritch_transmutation/flesh_blade) unlocked_transmutations = list(/datum/eldritch_transmutation/flesh_blade)
route = PATH_FLESH route = PATH_FLESH
@@ -124,7 +128,8 @@
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark, /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark) /datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark,)
route = PATH_FLESH route = PATH_FLESH
tier = TIER_MARK tier = TIER_MARK
@@ -170,7 +175,8 @@
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade, /datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade) /datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade,)
route = PATH_FLESH route = PATH_FLESH
tier = TIER_BLADE tier = TIER_BLADE

View File

@@ -0,0 +1,196 @@
/datum/eldritch_knowledge/base_knock
name = "A Locksmith's Secret"
desc = "Opens up the Path of Knock to you. \
Allows you to transmute a knife and a crowbar into a Key Blade. Additionally, your grasp will open up numerous locked things when used upon them."
gain_text = "The Knock permits no seal and no isolation. It thrusts us gleefully out of the safety of ignorance."
banned_knowledge = list(
/datum/eldritch_knowledge/base_ash,
/datum/eldritch_knowledge/base_rust,
/datum/eldritch_knowledge/base_flesh,
/datum/eldritch_knowledge/base_mind,
/datum/eldritch_knowledge/base_void,
/datum/eldritch_knowledge/base_blade,
/datum/eldritch_knowledge/base_cosmic,
/datum/eldritch_knowledge/ash_mark,
/datum/eldritch_knowledge/rust_mark,
/datum/eldritch_knowledge/flesh_mark,
/datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/ash_blade_upgrade,
/datum/eldritch_knowledge/rust_blade_upgrade,
/datum/eldritch_knowledge/flesh_blade_upgrade,
/datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/ash_final,
/datum/eldritch_knowledge/rust_final,
/datum/eldritch_knowledge/flesh_final,
/datum/eldritch_knowledge/mind_final,
/datum/eldritch_knowledge/void_final,
/datum/eldritch_knowledge/blade_final,
/datum/eldritch_knowledge/cosmic_final)
unlocked_transmutations = list(/datum/eldritch_transmutation/knock_knife)
cost = 1
route = PATH_KNOCK
tier = TIER_PATH
/datum/eldritch_knowledge/base_knock/on_gain(mob/user)
. = ..()
var/datum/action/cooldown/spell/touch/mansus_grasp/knock_grasp = locate() in user.actions
knock_grasp?.cooldown_time = 20 SECONDS
var/obj/realknife = new /obj/item/melee/sickly_blade/knock
user.put_in_hands(realknife)
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
/datum/eldritch_knowledge/base_ash/on_lose(mob/user)
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
/datum/eldritch_knowledge/base_knock/proc/on_mansus_grasp(mob/living/source, atom/target)
//SIGNAL_HANDLER - if this is uncommented the whole thing explodes like flesh grasp
if(isopenturf(target))//prevent use on tiles
return COMPONENT_BLOCK_HAND_USE
if(ismecha(target))
var/obj/mecha/mecha = target
mecha.dna_lock = null
for(var/mob/living/occupant as anything in mecha.occupant)
mecha.go_out()
else if(istype(target,/obj/machinery/door/airlock))
var/obj/machinery/door/airlock/door = target
door.unbolt()
else if(istype(target, /obj/machinery/computer))
var/obj/machinery/computer/computer = target
computer.authenticated = TRUE
computer.balloon_alert(source, "unlocked")
var/turf/target_turf = get_turf(target)
SEND_SIGNAL(target_turf, COMSIG_ATOM_MAGICALLY_UNLOCKED, src, source)
playsound(target, 'sound/magic/hereticknock.ogg', 100, TRUE, -1)
/datum/eldritch_knowledge/key_ring
name = "T1 - Key Keepers Burden"
desc = "Allows you to transmute a wallet, an iron rod, and an ID card to create an Eldritch Card. \
It functions the same as an ID Card, but attacking an ID card with it fuses them, causing it to gain the original's access. \
You can use it in-hand to change its form. \
Does not preserve the card used in the ritual.\
Will also allow you to open portals at airlocks to travel between, with a maximum of two."
gain_text = "Gateways shall open before me, my very will ensnaring reality."
unlocked_transmutations = list(/datum/eldritch_transmutation/key_ring)
cost = 1
route = PATH_KNOCK
tier = TIER_1
/datum/eldritch_knowledge/knock_mark
name = "Grasp Mark - Mark of Knock"
desc = "Your Mansus Grasp now applies the Mark of Knock. \
Attack a marked person to bar them from all passages for the duration of the mark."
gain_text = "Their requests for passage will remain unheeded."
cost = 2
banned_knowledge = list(
/datum/eldritch_knowledge/ash_mark,
/datum/eldritch_knowledge/rust_mark,
/datum/eldritch_knowledge/flesh_mark,
/datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark)
route = PATH_KNOCK
tier = TIER_MARK
/datum/eldritch_knowledge/knock_mark/on_gain(mob/user)
. = ..()
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
/datum/eldritch_knowledge/knock_mark/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
/datum/eldritch_knowledge/knock_mark/proc/on_mansus_grasp(mob/living/source, mob/living/target)
SIGNAL_HANDLER
if(isliving(target))
var/mob/living/living_target = target
living_target.apply_status_effect(/datum/status_effect/eldritch/knock)
/datum/eldritch_knowledge/spell/burglar_finesse
name = "T2 - Burglar's Finesse"
desc = "Grants you Burglar's Finesse, a single-target spell \
that puts a random item from the victims backpack into your hand."
gain_text = "Their trinkets will be mine, as will their lives in due time."
spell_to_add = /datum/action/cooldown/spell/pointed/burglar_finesse
cost = 1
route = PATH_KNOCK
tier = TIER_2
/datum/eldritch_knowledge/knock_blade_upgrade
name = "Blade Upgrade - Opening Blade"
desc = "Your blade will be able to pry open unlocked airlocks."
gain_text = "The power of my patron courses through my blade, willing their very flesh to part."
banned_knowledge = list(
/datum/eldritch_knowledge/ash_blade_upgrade,
/datum/eldritch_knowledge/rust_blade_upgrade,
/datum/eldritch_knowledge/flesh_blade_upgrade,
/datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade,)
route = PATH_KNOCK
tier = TIER_BLADE
/datum/eldritch_knowledge/knock_blade_upgrade/on_eldritch_blade(target,mob/user,proximity_flag,click_parameters)
. = ..()
if(istype(target, /obj/machinery/door/airlock))
var/obj/machinery/door/airlock/A = target
if((!A.requiresID() || A.allowed(user)) && A.hasPower()) //This is to prevent stupid shit like hitting a door with an arm blade, the door opening because you have acces and still getting a "the airlocks motors resist our efforts to force it" message, power requirement is so this doesn't stop unpowered doors from being pried open if you have access
return
if(A.locked)
to_chat(user, span_warning("The airlock's bolts prevent it from being forced!"))
return
if(A.welded)
to_chat(user, span_warning("The airlock is welded shut, it won't budge!"))
return
if(A.hasPower())
user.visible_message(span_warning("[user] jams [src] into the airlock and starts prying it open!"), span_warning("We start forcing the airlock open."), //yogs modified description
span_italics("You hear a metal screeching sound."))
playsound(A, 'sound/machines/airlock_alien_prying.ogg', 100, 1)
if(!do_after(user, 6 SECONDS, A))
return
//user.say("Heeeeeeeeeerrre's Johnny!")
user.visible_message(span_warning("[user] forces the airlock to open with [user.p_their()] [src]!"), span_warning("We force the airlock to open."), //yogs modified description
span_italics("You hear a metal screeching sound."))
A.open(2)
/datum/eldritch_knowledge/spell/freedom_forever
name = "T3 - Freedom Forever"
desc = "Grants you Freedom Forever, a spell \
will cause reality to warp around you for a few seconds, confusing enemies and allies alike."
gain_text = "Flesh opens, and blood spills. My master seeks sacrifice, and I shall appease."
spell_to_add = /datum/action/cooldown/spell/spacetime_dist/eldritch
cost = 1
route = PATH_KNOCK
tier = TIER_3
/datum/eldritch_knowledge/knock_final
name = "Ascension Rite - Many secrets behind the Spider Door"
desc = "The ascension ritual of the Path of Knock. \
Bring 3 corpses to a transmutation rune to complete the ritual. \
When completed, you gain damage resistance, and stun immunity \
and in addition, create a tear to the Spider Door; \
a tear in reality located at the site of this ritual. \
Eldritch creatures will endlessly pour from this rift \
who are bound to obey your instructions."
gain_text = "With her knowledge, and what I had seen, I knew what to do. \
I had to open the gates, with the holes in my foes as Ways! \
Reality will soon be torn, the Spider Gate opened! WITNESS ME!"
cost = 3
unlocked_transmutations = list(/datum/eldritch_transmutation/final/knock_final)
route = PATH_KNOCK
tier = TIER_ASCEND

View File

@@ -9,24 +9,28 @@
/datum/eldritch_knowledge/base_void, /datum/eldritch_knowledge/base_void,
/datum/eldritch_knowledge/base_blade, /datum/eldritch_knowledge/base_blade,
/datum/eldritch_knowledge/base_cosmic, /datum/eldritch_knowledge/base_cosmic,
/datum/eldritch_knowledge/base_knock,
/datum/eldritch_knowledge/ash_mark, /datum/eldritch_knowledge/ash_mark,
/datum/eldritch_knowledge/rust_mark, /datum/eldritch_knowledge/rust_mark,
/datum/eldritch_knowledge/flesh_mark, /datum/eldritch_knowledge/flesh_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark, /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark, /datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark,
/datum/eldritch_knowledge/ash_blade_upgrade, /datum/eldritch_knowledge/ash_blade_upgrade,
/datum/eldritch_knowledge/rust_blade_upgrade, /datum/eldritch_knowledge/rust_blade_upgrade,
/datum/eldritch_knowledge/flesh_blade_upgrade, /datum/eldritch_knowledge/flesh_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade, /datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade, /datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade,
/datum/eldritch_knowledge/ash_final, /datum/eldritch_knowledge/ash_final,
/datum/eldritch_knowledge/rust_final, /datum/eldritch_knowledge/rust_final,
/datum/eldritch_knowledge/flesh_final, /datum/eldritch_knowledge/flesh_final,
/datum/eldritch_knowledge/void_final, /datum/eldritch_knowledge/void_final,
/datum/eldritch_knowledge/blade_final, /datum/eldritch_knowledge/blade_final,
/datum/eldritch_knowledge/cosmic_final) /datum/eldritch_knowledge/cosmic_final,
/datum/eldritch_knowledge/knock_final)
unlocked_transmutations = list(/datum/eldritch_transmutation/mind_knife) unlocked_transmutations = list(/datum/eldritch_transmutation/mind_knife)
cost = 1 cost = 1
route = PATH_MIND route = PATH_MIND
@@ -82,7 +86,9 @@
/datum/eldritch_knowledge/flesh_mark, /datum/eldritch_knowledge/flesh_mark,
/datum/eldritch_knowledge/ash_mark, /datum/eldritch_knowledge/ash_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark) /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark,)
route = PATH_MIND route = PATH_MIND
tier = TIER_MARK tier = TIER_MARK
@@ -132,7 +138,9 @@
/datum/eldritch_knowledge/flesh_blade_upgrade, /datum/eldritch_knowledge/flesh_blade_upgrade,
/datum/eldritch_knowledge/ash_blade_upgrade, /datum/eldritch_knowledge/ash_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade) /datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade,)
route = PATH_MIND route = PATH_MIND
tier = TIER_BLADE tier = TIER_BLADE

View File

@@ -9,24 +9,28 @@
/datum/eldritch_knowledge/base_void, /datum/eldritch_knowledge/base_void,
/datum/eldritch_knowledge/base_blade, /datum/eldritch_knowledge/base_blade,
/datum/eldritch_knowledge/base_cosmic, /datum/eldritch_knowledge/base_cosmic,
/datum/eldritch_knowledge/base_knock,
/datum/eldritch_knowledge/ash_mark, /datum/eldritch_knowledge/ash_mark,
/datum/eldritch_knowledge/flesh_mark, /datum/eldritch_knowledge/flesh_mark,
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark, /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark, /datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark,
/datum/eldritch_knowledge/ash_blade_upgrade, /datum/eldritch_knowledge/ash_blade_upgrade,
/datum/eldritch_knowledge/flesh_blade_upgrade, /datum/eldritch_knowledge/flesh_blade_upgrade,
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade, /datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade, /datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade,
/datum/eldritch_knowledge/ash_final, /datum/eldritch_knowledge/ash_final,
/datum/eldritch_knowledge/flesh_final, /datum/eldritch_knowledge/flesh_final,
/datum/eldritch_knowledge/mind_final, /datum/eldritch_knowledge/mind_final,
/datum/eldritch_knowledge/void_final, /datum/eldritch_knowledge/void_final,
/datum/eldritch_knowledge/blade_final, /datum/eldritch_knowledge/blade_final,
/datum/eldritch_knowledge/cosmic_final) /datum/eldritch_knowledge/cosmic_final,
/datum/eldritch_knowledge/knock_final)
cost = 1 cost = 1
unlocked_transmutations = list(/datum/eldritch_transmutation/rust_blade) unlocked_transmutations = list(/datum/eldritch_transmutation/rust_blade)
route = PATH_RUST route = PATH_RUST
@@ -113,7 +117,8 @@
/datum/eldritch_knowledge/mind_mark, /datum/eldritch_knowledge/mind_mark,
/datum/eldritch_knowledge/void_mark, /datum/eldritch_knowledge/void_mark,
/datum/eldritch_knowledge/blade_mark, /datum/eldritch_knowledge/blade_mark,
/datum/eldritch_knowledge/cosmic_mark) /datum/eldritch_knowledge/cosmic_mark,
/datum/eldritch_knowledge/knock_mark,)
route = PATH_RUST route = PATH_RUST
tier = TIER_MARK tier = TIER_MARK
@@ -151,7 +156,8 @@
/datum/eldritch_knowledge/mind_blade_upgrade, /datum/eldritch_knowledge/mind_blade_upgrade,
/datum/eldritch_knowledge/void_blade_upgrade, /datum/eldritch_knowledge/void_blade_upgrade,
/datum/eldritch_knowledge/blade_blade_upgrade, /datum/eldritch_knowledge/blade_blade_upgrade,
/datum/eldritch_knowledge/cosmic_blade_upgrade) /datum/eldritch_knowledge/cosmic_blade_upgrade,
/datum/eldritch_knowledge/knock_blade_upgrade,)
route = PATH_RUST route = PATH_RUST
tier = TIER_BLADE tier = TIER_BLADE

View File

@@ -0,0 +1,58 @@
/datum/action/cooldown/spell/pointed/burglar_finesse
name = "Burglar's Finesse"
desc = "Steal a random item from the victim's backpack."
background_icon_state = "bg_heretic"
overlay_icon_state = "bg_heretic_border"
button_icon = 'icons/mob/actions/actions_ecult.dmi'
button_icon_state = "burglarsfinesse"
school = SCHOOL_FORBIDDEN
cooldown_time = 15 SECONDS
invocation = "Y'O'INK!"
invocation_type = INVOCATION_WHISPER
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION|SPELL_REQUIRES_NO_ANTIMAGIC
cast_range = 6
/datum/action/cooldown/spell/pointed/burglar_finesse/is_valid_target(atom/cast_on)
return ..() && ishuman(cast_on) && (locate(/obj/item/storage/backpack) in cast_on.contents)
/datum/action/cooldown/spell/pointed/burglar_finesse/cast(mob/living/carbon/human/cast_on)
. = ..()
if(cast_on.can_block_magic(antimagic_flags))
to_chat(cast_on, span_danger("You feel a light tug, but are otherwise fine, you were protected by holiness!"))
to_chat(owner, span_danger("[cast_on] is protected by holy forces!"))
return FALSE
var/obj/storage_item = locate(/obj/item/storage/backpack) in cast_on.contents
if(isnull(storage_item))
return FALSE
var/item = pick(storage_item.contents)
if(isnull(item))
return FALSE
to_chat(cast_on, span_warning("Your [storage_item] feels lighter..."))
to_chat(owner, span_notice("With a blink, you pull [item] out of [cast_on][p_s()] [storage_item]."))
owner.put_in_active_hand(item)
/datum/action/cooldown/spell/spacetime_dist/eldritch
name = "Freedom Forever"
desc = "Entangle the strings of space-time in an area around you, \
randomizing the layout and making proper movement impossible. The strings vibrate..."
sound = 'sound/effects/magic.ogg'
background_icon_state = "bg_heretic"
overlay_icon_state = "bg_heretic_border"
button_icon_state = "spacetime"
school = SCHOOL_FORBIDDEN
cooldown_time = 60 SECONDS
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION|SPELL_REQUIRES_NO_ANTIMAGIC|SPELL_REQUIRES_STATION
scramble_radius = 3
/// The duration of the scramble
duration = 5 SECONDS

View File

@@ -0,0 +1,137 @@
/datum/eldritch_transmutation/knock_knife
name = "Key Blade"
required_atoms = list(/obj/item/kitchen/knife,/obj/item/crowbar)
result_atoms = list(/obj/item/melee/sickly_blade/knock)
required_shit_list = "A crowbar and a knife."
/datum/eldritch_transmutation/key_ring
name = "Key Keepers Burden"
required_atoms = list(/obj/item/storage/wallet,/obj/item/card/id,/obj/item/stack/rods)
result_atoms = list(/obj/item/card/id/syndicate/heretic)
required_shit_list = "A wallet, ID card, and metal rods."
/datum/eldritch_transmutation/final/knock_final
name = "Many secrets behind the Spider Door"
required_atoms = list(/mob/living/carbon/human)
required_shit_list = "Three dead bodies."
/datum/eldritch_transmutation/final/knock_final/on_finished_recipe(mob/living/user, list/atoms, loc)
priority_announce("Immense destabilization of the bluespace veil has been observed. Our scanners report a fiery entity of unknown power is quickly escalating the station temperature to unhabitable levels. Immediate evacuation is advised.", "Anomaly Alert", ANNOUNCER_SPANOMALIES)
new /obj/structure/knock_tear(loc, user.mind)
var/mob/living/carbon/human/H = user
H.physiology.brute_mod *= 0.5
H.physiology.burn_mod *= 0.5
H.physiology.stamina_mod = 0
H.physiology.stun_mod = 0
var/datum/antagonist/heretic/ascension = H.mind.has_antag_datum(/datum/antagonist/heretic)
ascension.ascended = TRUE
return ..()
/obj/structure/knock_tear
name = "???"
desc = "It stares back. Theres no reason to remain. Run."
max_integrity = 10000
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
icon = 'icons/effects/effects.dmi'
icon_state = "bhole3"
light_range = 20
anchored = TRUE
density = FALSE
move_resist = INFINITY
/// Who is our daddy?
var/datum/mind/ascendee
/// True if we're currently checking for ghost opinions
var/gathering_candidates = TRUE
///a static list of heretic summons we cam create, automatically populated from heretic monster subtypes
var/static/list/monster_types
/// A static list of heretic summons which we should not create
var/static/list/monster_types_blacklist = list(
/mob/living/simple_animal/hostile/eldritch/armsy,
/mob/living/simple_animal/hostile/eldritch/armsy/prime,
/mob/living/simple_animal/hostile/eldritch/star_gazer,
)
/obj/structure/knock_tear/Initialize(mapload, datum/mind/ascendant_mind)
. = ..()
transform *= 3
if(isnull(monster_types))
monster_types = subtypesof(/mob/living/simple_animal/hostile/eldritch) - monster_types_blacklist
if(!isnull(ascendant_mind))
ascendee = ascendant_mind
RegisterSignals(ascendant_mind.current, list(COMSIG_LIVING_DEATH, COMSIG_PARENT_QDELETING), PROC_REF(end_madness))
INVOKE_ASYNC(src, PROC_REF(poll_ghosts))
/// Ask ghosts if they want to make some noise
/obj/structure/knock_tear/proc/poll_ghosts()
var/list/candidates = pollCandidatesForMob("Would you like to be a random eldritch monster attacking the crew?", ROLE_SENTIENCE, ROLE_SENTIENCE, 10 SECONDS, POLL_IGNORE_HERETIC_MONSTER)
while(LAZYLEN(candidates))
var/mob/dead/observer/candidate = pick_n_take(candidates)
ghost_to_monster(candidate, should_ask = FALSE)
gathering_candidates = FALSE
/// Destroy the rift if you kill the heretic
/obj/structure/knock_tear/proc/end_madness(datum/former_master)
SIGNAL_HANDLER
var/turf/our_turf = get_turf(src)
playsound(our_turf, 'sound/magic/castsummon.ogg', vol = 100, vary = TRUE)
visible_message(span_boldwarning("The rip in space spasms and disappears!"))
UnregisterSignal(former_master, list(COMSIG_LIVING_DEATH, COMSIG_PARENT_QDELETING)) // Just in case they die THEN delete
new /obj/effect/temp_visual/destabilising_tear(our_turf)
qdel(src)
/obj/structure/knock_tear/attack_ghost(mob/user)
. = ..()
if(. || gathering_candidates)
return
ghost_to_monster(user)
/obj/structure/knock_tear/examine(mob/user)
. = ..()
if (!isobserver(user) || gathering_candidates)
return
. += span_notice("You can use this to enter the world as a foul monster.")
/// Turn a ghost into an 'orrible beast
/obj/structure/knock_tear/proc/ghost_to_monster(mob/dead/observer/user, should_ask = TRUE)
if(should_ask)
var/ask = tgui_alert(user, "Become a monster?", "Ascended Rift", list("Yes", "No"))
if(ask != "Yes" || QDELETED(src) || QDELETED(user))
return FALSE
var/monster_type = pick(monster_types)
var/mob/living/monster = new monster_type(loc)
monster.key = user.key
monster.set_name()
var/datum/antagonist/heretic_monster/woohoo_free_antag = new(src)
monster.mind.add_antag_datum(woohoo_free_antag)
if(ascendee)
monster.faction = ascendee.current.faction
woohoo_free_antag.set_owner(ascendee)
var/datum/objective/kill_all_your_friends = new()
kill_all_your_friends.owner = monster.mind
kill_all_your_friends.explanation_text = "The station's crew must be culled."
kill_all_your_friends.completed = TRUE
woohoo_free_antag.objectives += kill_all_your_friends
/obj/structure/knock_tear/move_crushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction)
return FALSE
/obj/structure/knock_tear/Destroy(force)
if(ascendee)
ascendee = null
return ..()
/obj/effect/temp_visual/destabilising_tear
name = "destabilised tear"
icon = 'icons/effects/effects.dmi'
icon_state = "bhole3"
light_range = 20
duration = 1 SECONDS
/obj/effect/temp_visual/destabilising_tear/Initialize(mapload)
. = ..()
transform *= 3
animate(src, transform = matrix().Scale(3.2), time = 0.15 SECONDS)
animate(transform = matrix().Scale(0.2), time = 0.75 SECONDS)
animate(transform = matrix().Scale(3, 0), time = 0.1 SECONDS)
animate(src, color = COLOR_WHITE, time = 0.25 SECONDS, flags = ANIMATION_PARALLEL)

View File

@@ -11,6 +11,8 @@
if(IsAdminGhost(M)) if(IsAdminGhost(M))
//Access can't stop the abuse //Access can't stop the abuse
return TRUE return TRUE
if(HAS_TRAIT(M, TRAIT_ALWAYS_NO_ACCESS))
return FALSE
else if(istype(M) && SEND_SIGNAL(M, COMSIG_MOB_ALLOWED, src)) else if(istype(M) && SEND_SIGNAL(M, COMSIG_MOB_ALLOWED, src))
return TRUE return TRUE
else if(ishuman(M)) else if(ishuman(M))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 930 KiB

After

Width:  |  Height:  |  Size: 941 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

View File

@@ -663,8 +663,8 @@
#include "code\datums\elements\frozen.dm" #include "code\datums\elements\frozen.dm"
#include "code\datums\elements\life_drain.dm" #include "code\datums\elements\life_drain.dm"
#include "code\datums\elements\movetype_handler.dm" #include "code\datums\elements\movetype_handler.dm"
#include "code\datums\elements\rust.dm"
#include "code\datums\elements\regenerator.dm" #include "code\datums\elements\regenerator.dm"
#include "code\datums\elements\rust.dm"
#include "code\datums\elements\squish.dm" #include "code\datums\elements\squish.dm"
#include "code\datums\elements\update_icon_blocker.dm" #include "code\datums\elements\update_icon_blocker.dm"
#include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\events.dm"
@@ -1814,6 +1814,7 @@
#include "code\modules\antagonists\eldritch_cult\knowledge\blade_lore.dm" #include "code\modules\antagonists\eldritch_cult\knowledge\blade_lore.dm"
#include "code\modules\antagonists\eldritch_cult\knowledge\cosmo_lore.dm" #include "code\modules\antagonists\eldritch_cult\knowledge\cosmo_lore.dm"
#include "code\modules\antagonists\eldritch_cult\knowledge\flesh_lore.dm" #include "code\modules\antagonists\eldritch_cult\knowledge\flesh_lore.dm"
#include "code\modules\antagonists\eldritch_cult\knowledge\knock_lore.dm"
#include "code\modules\antagonists\eldritch_cult\knowledge\mind_lore.dm" #include "code\modules\antagonists\eldritch_cult\knowledge\mind_lore.dm"
#include "code\modules\antagonists\eldritch_cult\knowledge\rust_lore.dm" #include "code\modules\antagonists\eldritch_cult\knowledge\rust_lore.dm"
#include "code\modules\antagonists\eldritch_cult\knowledge\void_lore.dm" #include "code\modules\antagonists\eldritch_cult\knowledge\void_lore.dm"
@@ -1822,6 +1823,7 @@
#include "code\modules\antagonists\eldritch_cult\magic\cosmo_magic.dm" #include "code\modules\antagonists\eldritch_cult\magic\cosmo_magic.dm"
#include "code\modules\antagonists\eldritch_cult\magic\flesh_magic.dm" #include "code\modules\antagonists\eldritch_cult\magic\flesh_magic.dm"
#include "code\modules\antagonists\eldritch_cult\magic\general_heretic_magic.dm" #include "code\modules\antagonists\eldritch_cult\magic\general_heretic_magic.dm"
#include "code\modules\antagonists\eldritch_cult\magic\knock_magic.dm"
#include "code\modules\antagonists\eldritch_cult\magic\mind_magic.dm" #include "code\modules\antagonists\eldritch_cult\magic\mind_magic.dm"
#include "code\modules\antagonists\eldritch_cult\magic\rust_magic.dm" #include "code\modules\antagonists\eldritch_cult\magic\rust_magic.dm"
#include "code\modules\antagonists\eldritch_cult\magic\void_magic.dm" #include "code\modules\antagonists\eldritch_cult\magic\void_magic.dm"
@@ -1829,6 +1831,7 @@
#include "code\modules\antagonists\eldritch_cult\transmutations\blade_transmutations.dm" #include "code\modules\antagonists\eldritch_cult\transmutations\blade_transmutations.dm"
#include "code\modules\antagonists\eldritch_cult\transmutations\cosmo_transmutations.dm" #include "code\modules\antagonists\eldritch_cult\transmutations\cosmo_transmutations.dm"
#include "code\modules\antagonists\eldritch_cult\transmutations\flesh_transmutations.dm" #include "code\modules\antagonists\eldritch_cult\transmutations\flesh_transmutations.dm"
#include "code\modules\antagonists\eldritch_cult\transmutations\knock_transmutations.dm"
#include "code\modules\antagonists\eldritch_cult\transmutations\mind_transmutations.dm" #include "code\modules\antagonists\eldritch_cult\transmutations\mind_transmutations.dm"
#include "code\modules\antagonists\eldritch_cult\transmutations\rust_transmutations.dm" #include "code\modules\antagonists\eldritch_cult\transmutations\rust_transmutations.dm"
#include "code\modules\antagonists\eldritch_cult\transmutations\void_transmutations.dm" #include "code\modules\antagonists\eldritch_cult\transmutations\void_transmutations.dm"