From 2d143692beee386c77e2fe80144af36d2b9d7fb7 Mon Sep 17 00:00:00 2001 From: jimmyl <70376633+mc-oofert@users.noreply.github.com> Date: Sat, 7 Dec 2024 00:01:35 +0100 Subject: [PATCH] gives three tiny buffs the knock heretic path (#88291) ## About The Pull Request burglars finesse range increased and it may loot any storage object on the back caretakers refuge cooldown is only applied when exiting refuge labyrinth handbook accepts any crayon instead of a white crayon less balance related: click on an id card with eldritch id card to make it consume it eldritch id portals are slightly smoother ## Why It's Good For The Game burglars finesse will immediately get you valided at max range anyway so lets make it longer caretakers refuge is not that good to need a 2 minute total cooldown the labyrinth handbook recipe is too bad to even consider making it ever, making it use a crayon makes it more accessible and its still not that good of an item anyway ## Changelog :cl: balance: burglars finesse spell range increased from 4 to 6 and it may loot any back storage object, caretakers refuge cooldown is only applied when exiting refuge, labyrinth handbook accepts any crayon instead of a white crayon qol: you may click an id with the knock heretic id card to make it consume it /:cl: --- code/__DEFINES/traits/declarations.dm | 2 -- code/_globalvars/traits/_traits.dm | 1 - code/_globalvars/traits/admin_tooling.dm | 1 - .../antagonists/heretic/items/keyring.dm | 22 ++++++++++++++----- .../heretic/knowledge/lock_lore.dm | 4 ++-- .../heretic/magic/burglar_finesse.dm | 13 ++++++----- .../antagonists/heretic/magic/caretaker.dm | 5 ++++- .../heretic/status_effects/mark_effects.dm | 8 +++++-- code/modules/jobs/access.dm | 8 +++---- 9 files changed, 40 insertions(+), 24 deletions(-) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 7a20d3ea4c9..ce573554d8d 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -1159,8 +1159,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_MAGNETIC_ID_CARD "magnetic_id_card" /// ID cards with this trait have special appraisal text. #define TRAIT_TASTEFULLY_THICK_ID_CARD "impressive_very_nice" -/// things with this trait are treated as having no access in /atom/movable/proc/check_access(obj/item) -#define TRAIT_ALWAYS_NO_ACCESS "alwaysnoaccess" ///The entity has Silicon 'access', so is either a silicon, has an access wand, or is an admin ghost AI. ///This is put on the mob, it is used on the client for Admins but they are the exception as they use `isAdminGhostAI`. diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index fb53fc6cad0..1403eb741c9 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -147,7 +147,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE, "TRAIT_ALLOWED_HONORBOUND_ATTACK" = TRAIT_ALLOWED_HONORBOUND_ATTACK, "TRAIT_ALLOW_HERETIC_CASTING" = TRAIT_ALLOW_HERETIC_CASTING, - "TRAIT_ALWAYS_NO_ACCESS" = TRAIT_ALWAYS_NO_ACCESS, "TRAIT_ALWAYS_WANTED" = TRAIT_ALWAYS_WANTED, "TRAIT_ANALGESIA" = TRAIT_ANALGESIA, "TRAIT_ANGELIC" = TRAIT_ANGELIC, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 5a3512f1d8f..78d0ecbe4a7 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -38,7 +38,6 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_AGEUSIA" = TRAIT_AGEUSIA, "TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE, "TRAIT_ALLOW_HERETIC_CASTING" = TRAIT_ALLOW_HERETIC_CASTING, - "TRAIT_ALWAYS_NO_ACCESS" = TRAIT_ALWAYS_NO_ACCESS, "TRAIT_ALWAYS_WANTED" = TRAIT_ALWAYS_WANTED, "TRAIT_ANOSMIA" = TRAIT_ANOSMIA, "TRAIT_ANTENNAE" = TRAIT_ANTENNAE, diff --git a/code/modules/antagonists/heretic/items/keyring.dm b/code/modules/antagonists/heretic/items/keyring.dm index a37b55c17f3..1d8e88a8c59 100644 --- a/code/modules/antagonists/heretic/items/keyring.dm +++ b/code/modules/antagonists/heretic/items/keyring.dm @@ -64,6 +64,8 @@ if(!do_teleport(teleportee, get_turf(doorstination), channel = TELEPORT_CHANNEL_MAGIC)) return + teleportee.client?.move_delay = 0 //make moving through smoother + 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.")) @@ -109,7 +111,7 @@ 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("Using an ID on this or using this ID on another ID will consume it and allow you to copy its accesses.") . += span_hypnophrase("Using this in-hand allows you to change its appearance.") . += span_hypnophrase("Using this on a pair of doors, allows you to link them together. Entering one door will transport you to the other, while heathens are instead teleported to a random airlock.") . += span_hypnophrase("Ctrl-clicking the ID, makes the ID make inverted portals instead, which teleport you onto a random airlock onstation, while heathens are teleported to the destination.") @@ -169,18 +171,28 @@ portal_two.destination = portal_one balloon_alert(user, "[message]") -/obj/item/card/id/advanced/heretic/attackby(obj/item/thing, mob/user, params) - if(!istype(thing, /obj/item/card/id/advanced) || !IS_HERETIC(user)) +/obj/item/card/id/advanced/heretic/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/card/id/advanced) || !IS_HERETIC(user)) return ..() - var/obj/item/card/id/card = thing + eat_card(tool, user) + return ITEM_INTERACT_SUCCESS + +/obj/item/card/id/advanced/heretic/proc/eat_card(obj/item/card/id/card, mob/user) + if(card == src) + return //no self vore fused_ids[card.name] = card card.moveToNullspace() - playsound(drop_location(),'sound/items/eatfood.ogg', rand(10,50), TRUE) + playsound(drop_location(), 'sound/items/eatfood.ogg', rand(10,30), TRUE) access += card.access + if(!isnull(user)) + balloon_alert(user, "consumed card") /obj/item/card/id/advanced/heretic/interact_with_atom(atom/target, mob/living/user, list/modifiers) if(!IS_HERETIC(user)) return NONE + if(istype(target, /obj/item/card/id)) + eat_card(target, user) + return ITEM_INTERACT_SUCCESS if(istype(target, /obj/effect/lock_portal)) clear_portals() return ITEM_INTERACT_SUCCESS diff --git a/code/modules/antagonists/heretic/knowledge/lock_lore.dm b/code/modules/antagonists/heretic/knowledge/lock_lore.dm index 96c6110f6df..d323beecc18 100644 --- a/code/modules/antagonists/heretic/knowledge/lock_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/lock_lore.dm @@ -117,11 +117,11 @@ /datum/heretic_knowledge/limited_amount/concierge_rite // item that creates 3 max at a time heretic only barriers, probably should limit to 1 only, holy people can also pass name = "Concierge's Rite" - desc = "Allows you to transmute a stick of chalk, a wooden plank, and a multitool to create a Labyrinth Handbook. \ + desc = "Allows you to transmute a crayon, a wooden plank, and a multitool to create a Labyrinth Handbook. \ It can materialize a barricade at range that only you and people resistant to magic can pass. 3 uses." gain_text = "The Concierge scribbled my name into the Handbook. \"Welcome to your new home, fellow Steward.\"" required_atoms = list( - /obj/item/toy/crayon/white = 1, + /obj/item/toy/crayon = 1, /obj/item/stack/sheet/mineral/wood = 1, /obj/item/multitool = 1, ) diff --git a/code/modules/antagonists/heretic/magic/burglar_finesse.dm b/code/modules/antagonists/heretic/magic/burglar_finesse.dm index a90acb8495f..fec0fb923bb 100644 --- a/code/modules/antagonists/heretic/magic/burglar_finesse.dm +++ b/code/modules/antagonists/heretic/magic/burglar_finesse.dm @@ -13,10 +13,13 @@ invocation_type = INVOCATION_WHISPER spell_requirements = NONE - cast_range = 4 + 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/is_valid_target(mob/living/carbon/human/cast_on) + if(!istype(cast_on)) + return FALSE + var/obj/item/back_item = cast_on.get_item_by_slot(ITEM_SLOT_BACK) + return ..() && back_item?.atom_storage /datum/action/cooldown/spell/pointed/burglar_finesse/cast(mob/living/carbon/human/cast_on) . = ..() @@ -25,12 +28,12 @@ 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 + var/obj/storage_item = cast_on.get_item_by_slot(ITEM_SLOT_BACK) if(isnull(storage_item)) return FALSE - var/item = pick(storage_item.contents) + var/item = pick(storage_item.atom_storage.return_inv(recursive = FALSE)) if(isnull(item)) return FALSE diff --git a/code/modules/antagonists/heretic/magic/caretaker.dm b/code/modules/antagonists/heretic/magic/caretaker.dm index b882386329a..01a9970b204 100644 --- a/code/modules/antagonists/heretic/magic/caretaker.dm +++ b/code/modules/antagonists/heretic/magic/caretaker.dm @@ -24,7 +24,7 @@ /datum/action/cooldown/spell/caretaker/is_valid_target(atom/cast_on) return isliving(cast_on) -/datum/action/cooldown/spell/caretaker/before_cast(atom/cast_on) +/datum/action/cooldown/spell/caretaker/before_cast(mob/living/cast_on) . = ..() if(. & SPELL_CANCEL_CAST) return @@ -34,6 +34,9 @@ owner.balloon_alert(owner, "other minds nearby!") return . | SPELL_CANCEL_CAST + if(!cast_on.has_status_effect(/datum/status_effect/caretaker_refuge)) + return SPELL_NO_IMMEDIATE_COOLDOWN // cooldown only on exit + /datum/action/cooldown/spell/caretaker/cast(mob/living/cast_on) . = ..() diff --git a/code/modules/antagonists/heretic/status_effects/mark_effects.dm b/code/modules/antagonists/heretic/status_effects/mark_effects.dm index de895d33caa..ba8a86340d7 100644 --- a/code/modules/antagonists/heretic/status_effects/mark_effects.dm +++ b/code/modules/antagonists/heretic/status_effects/mark_effects.dm @@ -235,12 +235,16 @@ /datum/status_effect/eldritch/lock/on_apply() . = ..() - ADD_TRAIT(owner, TRAIT_ALWAYS_NO_ACCESS, STATUS_EFFECT_TRAIT) + RegisterSignal(owner, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) /datum/status_effect/eldritch/lock/on_remove() - REMOVE_TRAIT(owner, TRAIT_ALWAYS_NO_ACCESS, STATUS_EFFECT_TRAIT) + UnregisterSignal(owner, COMSIG_MOB_TRIED_ACCESS) return ..() +/datum/status_effect/eldritch/lock/proc/attempt_access(datum/source, obj/door_attempt) + SIGNAL_HANDLER + return ACCESS_DISALLOWED + // MARK OF MOON /datum/status_effect/eldritch/moon diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index b31574bec33..e9b2e832f92 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -9,11 +9,6 @@ return TRUE if(result_bitflags & COMPONENT_OBJ_DISALLOW) // override all other checks return FALSE - if(!isnull(accessor) && HAS_TRAIT(accessor, TRAIT_ALWAYS_NO_ACCESS)) - return FALSE - //check if it doesn't require any access at all - if(check_access(null)) - return TRUE if(isnull(accessor)) //likely a TK user. return FALSE if(isAdminGhostAI(accessor)) @@ -25,6 +20,9 @@ return TRUE if(attempted_access & ACCESS_DISALLOWED) return FALSE + //check if it doesn't require any access at all + if(check_access(null)) + return TRUE if(HAS_SILICON_ACCESS(accessor)) if(ispAI(accessor)) return FALSE