mirror of
https://github.com/Skyrat-SS13/Skyrat-tg.git
synced 2026-08-28 07:17:46 +01:00
* First Genetics Content in 5 Years (Adds new positive mutations!) * Update reach.dm * delete * Update adaptation.dm * Update reach.dm --------- Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com> Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
122 lines
4.6 KiB
Plaintext
122 lines
4.6 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
|
|
|
|
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]
|