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
🆑
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
/🆑
This commit is contained in:
jimmyl
2024-12-07 00:01:35 +01:00
committed by GitHub
parent 8e5561cea4
commit 2d143692be
9 changed files with 40 additions and 24 deletions
-2
View File
@@ -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`.
-1
View File
@@ -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,
-1
View File
@@ -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,
@@ -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("<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.")
. += span_hypnophrase("<b>Ctrl-clicking the ID</b>, 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
@@ -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,
)
@@ -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
@@ -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)
. = ..()
@@ -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
+3 -5
View File
@@ -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