mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
[Ready] [Could Use Sprites] add Antenna and Mind Reader powers, paranoia disability to genetics (#42443) (#4469)
* adds the antenna power to genetics it gives you an innate radio * adds paranoia and mind reader * foil hat interaction, sprites, tweaks * upstream change never webedit, kids * fixes conflict-fixing error
This commit is contained in:
committed by
monster860
parent
fef3927bc6
commit
5dcc41d618
@@ -35,6 +35,9 @@
|
|||||||
#define VOID /datum/mutation/human/void
|
#define VOID /datum/mutation/human/void
|
||||||
#define STRONG /datum/mutation/human/strong
|
#define STRONG /datum/mutation/human/strong
|
||||||
#define FIRESWEAT /datum/mutation/human/fire
|
#define FIRESWEAT /datum/mutation/human/fire
|
||||||
|
#define ANTENNA /datum/mutation/human/antenna
|
||||||
|
#define PARANOIA /datum/mutation/human/paranoia
|
||||||
|
#define MINDREAD /datum/mutation/human/mindreader
|
||||||
#define INSULATED /datum/mutation/human/insulated
|
#define INSULATED /datum/mutation/human/insulated
|
||||||
#define SHOCKTOUCH /datum/mutation/human/shock
|
#define SHOCKTOUCH /datum/mutation/human/shock
|
||||||
#define OLFACTION /datum/mutation/human/olfaction
|
#define OLFACTION /datum/mutation/human/olfaction
|
||||||
|
|||||||
@@ -17,6 +17,10 @@
|
|||||||
required = "/datum/mutation/human/strong; /datum/mutation/human/radioactive"
|
required = "/datum/mutation/human/strong; /datum/mutation/human/radioactive"
|
||||||
result = HULK
|
result = HULK
|
||||||
|
|
||||||
|
/datum/generecipe/mindread
|
||||||
|
required = "/datum/mutation/human/antenna; /datum/mutation/human/paranoia"
|
||||||
|
result = MINDREAD
|
||||||
|
|
||||||
/datum/generecipe/shock
|
/datum/generecipe/shock
|
||||||
required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive"
|
required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive"
|
||||||
result = SHOCKTOUCH
|
result = SHOCKTOUCH
|
||||||
|
|||||||
107
code/datums/mutations/antenna.dm
Normal file
107
code/datums/mutations/antenna.dm
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
/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 class='notice'>You feel an antenna sprout from your forehead.</span>"
|
||||||
|
text_lose_indication = "<span class='notice'>Your antenna shrinks back down.</span>"
|
||||||
|
instability = 5
|
||||||
|
difficulty = 8
|
||||||
|
var/obj/item/implant/radio/antenna/linked_radio
|
||||||
|
|
||||||
|
/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/radio.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
|
||||||
|
linked_radio = new(owner)
|
||||||
|
linked_radio.implant(owner, null, TRUE, TRUE)
|
||||||
|
|
||||||
|
/datum/mutation/human/antenna/on_losing(mob/living/carbon/human/owner)
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
if(linked_radio)
|
||||||
|
linked_radio.Destroy()
|
||||||
|
|
||||||
|
/datum/mutation/human/antenna/New()
|
||||||
|
..()
|
||||||
|
if(!(type in visual_indicators))
|
||||||
|
visual_indicators[type] = list(mutable_appearance('icons/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 class='notice'>You hear distant voices at the corners of your mind.</span>"
|
||||||
|
text_lose_indication = "<span class='notice'>The distant voices fade.</span>"
|
||||||
|
power = /obj/effect/proc_holder/spell/targeted/mindread
|
||||||
|
instability = 40
|
||||||
|
difficulty = 8
|
||||||
|
locked = TRUE
|
||||||
|
|
||||||
|
/obj/effect/proc_holder/spell/targeted/mindread
|
||||||
|
name = "Mindread"
|
||||||
|
desc = "Read the target's mind."
|
||||||
|
charge_max = 50
|
||||||
|
range = 7
|
||||||
|
clothes_req = FALSE
|
||||||
|
action_icon_state = "mindread"
|
||||||
|
|
||||||
|
/obj/effect/proc_holder/spell/targeted/mindread/cast(list/targets, mob/living/carbon/human/user = usr)
|
||||||
|
for(var/mob/living/M in targets)
|
||||||
|
if(istype(usr.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat) || istype(M.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat))
|
||||||
|
to_chat(usr, "<span class='warning'>As you reach out with your mind, you're suddenly stopped by a vision of a massive tinfoil wall that streches beyond visible range. It seems you've been foiled.</span>")
|
||||||
|
return
|
||||||
|
if(M.stat == DEAD)
|
||||||
|
to_chat(user, "<span class='boldnotice'>[M] is dead!</span>")
|
||||||
|
return
|
||||||
|
if(M.mind)
|
||||||
|
to_chat(user, "<span class='boldnotice'>You plunge into [M]'s mind...</span>")
|
||||||
|
if(prob(20))
|
||||||
|
to_chat(M, "<span class='danger'>You feel something foreign enter your mind.</span>")//chance to alert the read-ee
|
||||||
|
var/list/recent_speech = list()
|
||||||
|
var/list/say_log = list()
|
||||||
|
var/log_source = M.logging
|
||||||
|
for(var/log_type in log_source)//this whole loop puts the read-ee's say logs into say_log in an easy to access way
|
||||||
|
var/nlog_type = text2num(log_type)
|
||||||
|
if(nlog_type & LOG_SAY)
|
||||||
|
var/list/reversed = log_source[log_type]
|
||||||
|
if(islist(reversed))
|
||||||
|
say_log = reverseRange(reversed.Copy())
|
||||||
|
break
|
||||||
|
if(LAZYLEN(say_log))
|
||||||
|
for(var/spoken_memory in say_log)
|
||||||
|
if(recent_speech.len >= 3)//up to 3 random lines of speech, favoring more recent speech
|
||||||
|
break
|
||||||
|
if(prob(50))
|
||||||
|
recent_speech[spoken_memory] = say_log[spoken_memory]
|
||||||
|
if(recent_speech.len)
|
||||||
|
to_chat(user, "<span class='boldnotice'>You catch some drifting memories of their past conversations...</span>")
|
||||||
|
for(var/spoken_memory in recent_speech)
|
||||||
|
to_chat(user, "<span class='notice'>[recent_speech[spoken_memory]]</span>")
|
||||||
|
if(iscarbon(M))
|
||||||
|
var/mob/living/carbon/human/H = M
|
||||||
|
to_chat(user, "<span class='boldnotice'>You find that their intent is to [H.a_intent]...</span>")
|
||||||
|
var/datum/dna/the_dna = H.has_dna()
|
||||||
|
if(the_dna)
|
||||||
|
to_chat(user, "<span class='boldnotice'>You uncover that their true identity is [the_dna.real_name].</span>")
|
||||||
|
else
|
||||||
|
to_chat(user, "<span class='boldnotice'>You can't find a mind to read inside of [M].</span>")
|
||||||
|
|
||||||
|
/datum/mutation/human/mindreader/New()
|
||||||
|
..()
|
||||||
|
if(!(type in visual_indicators))
|
||||||
|
visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "antenna", -FRONT_MUTATIONS_LAYER+1))
|
||||||
|
|
||||||
|
/datum/mutation/human/mindreader/get_visual_indicator()
|
||||||
|
return visual_indicators[type][1]
|
||||||
@@ -66,6 +66,19 @@
|
|||||||
var/turf/target = get_ranged_target_turf(owner, turn(owner.dir, 180), cough_range)
|
var/turf/target = get_ranged_target_turf(owner, turn(owner.dir, 180), cough_range)
|
||||||
owner.throw_at(target, cough_range, GET_MUTATION_POWER(src))
|
owner.throw_at(target, cough_range, GET_MUTATION_POWER(src))
|
||||||
|
|
||||||
|
/datum/mutation/human/paranoia
|
||||||
|
name = "Paranoia"
|
||||||
|
desc = "Subject is easily terrified, and may suffer from hallucinations."
|
||||||
|
quality = NEGATIVE
|
||||||
|
text_gain_indication = "<span class='danger'>You feel screams echo through your mind...</span>"
|
||||||
|
text_lose_indication = "<span class'notice'>The screaming in your mind fades.</span>"
|
||||||
|
|
||||||
|
/datum/mutation/human/paranoia/on_life()
|
||||||
|
if(prob(5) && owner.stat == CONSCIOUS)
|
||||||
|
owner.emote("scream")
|
||||||
|
if(prob(25))
|
||||||
|
owner.hallucination += 20
|
||||||
|
|
||||||
//Dwarfism shrinks your body and lets you pass tables.
|
//Dwarfism shrinks your body and lets you pass tables.
|
||||||
/datum/mutation/human/dwarfism
|
/datum/mutation/human/dwarfism
|
||||||
name = "Dwarfism"
|
name = "Dwarfism"
|
||||||
|
|||||||
@@ -17,4 +17,4 @@
|
|||||||
visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "radiation", -MUTATIONS_LAYER))
|
visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "radiation", -MUTATIONS_LAYER))
|
||||||
|
|
||||||
/datum/mutation/human/radioactive/get_visual_indicator()
|
/datum/mutation/human/radioactive/get_visual_indicator()
|
||||||
return visual_indicators[type][1]
|
return visual_indicators[type][1]
|
||||||
|
|||||||
@@ -304,6 +304,37 @@
|
|||||||
name = "\improper DNA injector (Anti-Void)"
|
name = "\improper DNA injector (Anti-Void)"
|
||||||
remove_mutations = list(VOID)
|
remove_mutations = list(VOID)
|
||||||
|
|
||||||
|
/obj/item/dnainjector/antenna
|
||||||
|
name = "\improper DNA injector (Antenna)"
|
||||||
|
add_mutations = list(ANTENNA)
|
||||||
|
|
||||||
|
/obj/item/dnainjector/antiantenna
|
||||||
|
name = "\improper DNA injector (Anti-Antenna)"
|
||||||
|
remove_mutations = list(ANTENNA)
|
||||||
|
|
||||||
|
/obj/item/dnainjector/paranoia
|
||||||
|
name = "\improper DNA injector (Paranoia)"
|
||||||
|
add_mutations = list(PARANOIA)
|
||||||
|
|
||||||
|
/obj/item/dnainjector/antiparanoia
|
||||||
|
name = "\improper DNA injector (Anti-Paranoia)"
|
||||||
|
remove_mutations = list(PARANOIA)
|
||||||
|
|
||||||
|
/obj/item/dnainjector/mindread
|
||||||
|
name = "\improper DNA injector (Mindread)"
|
||||||
|
add_mutations = list(MINDREAD)
|
||||||
|
|
||||||
|
/obj/item/dnainjector/antimindread
|
||||||
|
name = "\improper DNA injector (Anti-Mindread)"
|
||||||
|
remove_mutations = list(MINDREAD)
|
||||||
|
|
||||||
|
/obj/item/dnainjector/radioactive
|
||||||
|
name = "\improper DNA injector (Radioactive)"
|
||||||
|
add_mutations = list(RADIOACTIVE)
|
||||||
|
|
||||||
|
/obj/item/dnainjector/antiradioactive
|
||||||
|
name = "\improper DNA injector (Anti-Radioactive)"
|
||||||
|
remove_mutations = list(RADIOACTIVE)
|
||||||
/obj/item/dnainjector/olfaction
|
/obj/item/dnainjector/olfaction
|
||||||
name = "\improper DNA injector (Olfaction)"
|
name = "\improper DNA injector (Olfaction)"
|
||||||
add_mutations = list(OLFACTION)
|
add_mutations = list(OLFACTION)
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
@@ -467,6 +467,7 @@
|
|||||||
#include "code\datums\mood_events\needs_events.dm"
|
#include "code\datums\mood_events\needs_events.dm"
|
||||||
#include "code\datums\mutations\_combined.dm"
|
#include "code\datums\mutations\_combined.dm"
|
||||||
#include "code\datums\mutations\actions.dm"
|
#include "code\datums\mutations\actions.dm"
|
||||||
|
#include "code\datums\mutations\antenna.dm"
|
||||||
#include "code\datums\mutations\body.dm"
|
#include "code\datums\mutations\body.dm"
|
||||||
#include "code\datums\mutations\chameleon.dm"
|
#include "code\datums\mutations\chameleon.dm"
|
||||||
#include "code\datums\mutations\cold.dm"
|
#include "code\datums\mutations\cold.dm"
|
||||||
|
|||||||
@@ -482,6 +482,7 @@
|
|||||||
#include "code\datums\mood_events\needs_events.dm"
|
#include "code\datums\mood_events\needs_events.dm"
|
||||||
#include "code\datums\mutations\_combined.dm"
|
#include "code\datums\mutations\_combined.dm"
|
||||||
#include "code\datums\mutations\actions.dm"
|
#include "code\datums\mutations\actions.dm"
|
||||||
|
#include "code\datums\mutations\antenna.dm"
|
||||||
#include "code\datums\mutations\body.dm"
|
#include "code\datums\mutations\body.dm"
|
||||||
#include "code\datums\mutations\chameleon.dm"
|
#include "code\datums\mutations\chameleon.dm"
|
||||||
#include "code\datums\mutations\cold.dm"
|
#include "code\datums\mutations\cold.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user