Files
Bubberstation/code/datums/mutations/antenna.dm
necromanceranne 8d733c4f2d Adds the Fundamentally Evil quirk. Interactions with Empathy and Honorbound. (#87045)
## About The Pull Request

Adds the Fundamentally Evil quirk. The quirk does nothing in of itself.

If an Empath examines you, they will be shaken up by the fact that you
are totally evil.

Mindreaders can literally see that you're evil. If they're ALSO evil, it
gives a gives a unique message.

Honorbound chaplains can freely attack you without first declaring you
evil. You are already evil. There is no outward tells for this fact, but
if the chaplain pays attention to the medical records, you might have a
problem on your hands.

You are significantly harmed by holy water and holy explosions. So don't
drink holy water if you can help it.

## Why It's Good For The Game

I just think it'd be funny to have some crew, for whatever reason, be
fully committed to being evil for no reason other than it is funny to
bother empaths.

I want a chaplain to come to the realization that I'm evil and see what
happens.

## Changelog
🆑
add: Fundamentally Evil quirk. You might act normal, but you know deep
down that you totally don't give a shit about anyone but yourself.
Empaths better watch out.
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
# Conflicts:
#	code/controllers/subsystem/processing/quirks.dm
2024-11-14 15:57:13 -08:00

127 lines
4.9 KiB
Plaintext

/datum/mutation/human/antenna
name = "Antenna"
desc = "The affected person sprouts an antenna. This is known to allow them to access common radio channels passively."
quality = POSITIVE
text_gain_indication = span_notice("You feel an antenna sprout from your forehead.")
text_lose_indication = span_notice("Your antenna shrinks back down.")
instability = POSITIVE_INSTABILITY_MINOR
difficulty = 8
var/datum/weakref/radio_weakref
/obj/item/implant/radio/antenna
name = "internal antenna organ"
desc = "The internal organ part of the antenna. Science has not yet given it a good name."
icon = 'icons/obj/devices/voice.dmi'//maybe make a unique sprite later. not important
icon_state = "walkietalkie"
/obj/item/implant/radio/antenna/Initialize(mapload)
. = ..()
radio.name = "internal antenna"
/datum/mutation/human/antenna/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
var/obj/item/implant/radio/antenna/linked_radio = new(owner)
linked_radio.implant(owner, null, TRUE, TRUE)
radio_weakref = WEAKREF(linked_radio)
/datum/mutation/human/antenna/on_losing(mob/living/carbon/human/owner)
if(..())
return
var/obj/item/implant/radio/antenna/linked_radio = radio_weakref.resolve()
if(linked_radio)
QDEL_NULL(linked_radio)
/datum/mutation/human/antenna/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
..()
if(!(type in visual_indicators))
visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "antenna", -FRONT_MUTATIONS_LAYER+1))//-MUTATIONS_LAYER+1
/datum/mutation/human/antenna/get_visual_indicator()
return visual_indicators[type][1]
/datum/mutation/human/mindreader
name = "Mind Reader"
desc = "The affected person can look into the recent memories of others."
quality = POSITIVE
text_gain_indication = span_notice("You hear distant voices at the corners of your mind.")
text_lose_indication = span_notice("The distant voices fade.")
power_path = /datum/action/cooldown/spell/pointed/mindread
instability = POSITIVE_INSTABILITY_MINOR
difficulty = 8
locked = TRUE
/datum/action/cooldown/spell/pointed/mindread
name = "Mindread"
desc = "Read the target's mind."
button_icon_state = "mindread"
school = SCHOOL_PSYCHIC
cooldown_time = 5 SECONDS
spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC
antimagic_flags = MAGIC_RESISTANCE_MIND
ranged_mousepointer = 'icons/effects/mouse_pointers/mindswap_target.dmi'
/datum/action/cooldown/spell/pointed/mindread/Grant(mob/grant_to)
. = ..()
if (!owner)
return
ADD_TRAIT(grant_to, TRAIT_MIND_READER, GENETIC_MUTATION)
/datum/action/cooldown/spell/pointed/mindread/Remove(mob/remove_from)
. = ..()
REMOVE_TRAIT(remove_from, TRAIT_MIND_READER, GENETIC_MUTATION)
/datum/action/cooldown/spell/pointed/mindread/is_valid_target(atom/cast_on)
if(!isliving(cast_on))
return FALSE
var/mob/living/living_cast_on = cast_on
if(!living_cast_on.mind)
to_chat(owner, span_warning("[cast_on] has no mind to read!"))
return FALSE
if(living_cast_on.stat == DEAD)
to_chat(owner, span_warning("[cast_on] is dead!"))
return FALSE
return TRUE
/datum/action/cooldown/spell/pointed/mindread/cast(mob/living/cast_on)
. = ..()
if(cast_on.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0))
to_chat(owner, span_warning("As you reach into [cast_on]'s mind, \
you are stopped by a mental blockage. It seems you've been foiled."))
return
if(cast_on == owner)
to_chat(owner, span_warning("You plunge into your mind... Yep, it's your mind."))
return
if(HAS_TRAIT(cast_on, TRAIT_EVIL))
to_chat(owner, span_warning("As you reach into [cast_on]'s mind, \
you feel the overwhelming emptiness within. A truly evil being. \
[HAS_TRAIT(owner, TRAIT_EVIL) ? "It's nice to find someone who is like-minded." : "What is wrong with this person?"]"))
to_chat(owner, span_boldnotice("You plunge into [cast_on]'s mind..."))
if(prob(20))
// chance to alert the read-ee
to_chat(cast_on, span_danger("You feel something foreign enter your mind."))
var/list/recent_speech = cast_on.copy_recent_speech(copy_amount = 3, line_chance = 50)
if(length(recent_speech))
to_chat(owner, span_boldnotice("You catch some drifting memories of their past conversations..."))
for(var/spoken_memory in recent_speech)
to_chat(owner, span_notice("[spoken_memory]"))
if(iscarbon(cast_on))
var/mob/living/carbon/carbon_cast_on = cast_on
to_chat(owner, span_boldnotice("You find that their intent is to [carbon_cast_on.combat_mode ? "harm" : "help"]..."))
to_chat(owner, span_boldnotice("You uncover that [carbon_cast_on.p_their()] true identity is [carbon_cast_on.mind.name]."))
/datum/mutation/human/mindreader/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
..()
if(!(type in visual_indicators))
visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "antenna", -FRONT_MUTATIONS_LAYER+1))
/datum/mutation/human/mindreader/get_visual_indicator()
return visual_indicators[type][1]