diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm
index c19dc2c180..24ccdff244 100644
--- a/code/datums/mutations.dm
+++ b/code/datums/mutations.dm
@@ -113,6 +113,7 @@ GLOBAL_LIST_EMPTY(mutations_list)
/datum/mutation/human/proc/get_spans()
return list()
+<<<<<<< HEAD
/datum/mutation/human/hulk
name = "Hulk"
@@ -650,6 +651,8 @@ GLOBAL_LIST_EMPTY(mutations_list)
owner.LaserEyes(target, mouseparams)
+=======
+>>>>>>> b6741ca... Splits mutations from mutations.dm into a subfolder, /datums/mutations (#33079)
/mob/living/carbon/proc/update_mutations_overlay()
return
diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm
new file mode 100644
index 0000000000..23b91add58
--- /dev/null
+++ b/code/datums/mutations/body.dm
@@ -0,0 +1,148 @@
+//These mutations change your overall "form" somehow, like size
+
+//Epilepsy gives a very small chance to have a seizure every life tick, knocking you unconscious.
+/datum/mutation/human/epilepsy
+ name = "Epilepsy"
+ quality = NEGATIVE
+ text_gain_indication = "You get a headache."
+
+/datum/mutation/human/epilepsy/on_life(mob/living/carbon/human/owner)
+ if(prob(1) && owner.stat == CONSCIOUS)
+ owner.visible_message("[owner] starts having a seizure!", "You have a seizure!")
+ owner.Unconscious(200)
+ owner.Jitter(1000)
+ addtimer(CALLBACK(src, .proc/jitter_less, owner), 90)
+
+/datum/mutation/human/epilepsy/proc/jitter_less(mob/living/carbon/human/owner)
+ if(owner)
+ owner.jitteriness = 10
+
+
+//Unstable DNA induces random mutations!
+/datum/mutation/human/bad_dna
+ name = "Unstable DNA"
+ quality = NEGATIVE
+ text_gain_indication = "You feel strange."
+
+/datum/mutation/human/bad_dna/on_acquiring(mob/living/carbon/human/owner)
+ to_chat(owner, text_gain_indication)
+ var/mob/new_mob
+ if(prob(95))
+ if(prob(50))
+ new_mob = owner.randmutb()
+ else
+ new_mob = owner.randmuti()
+ else
+ new_mob = owner.randmutg()
+ if(new_mob && ismob(new_mob))
+ owner = new_mob
+ . = owner
+ on_losing(owner)
+
+
+//Cough gives you a chronic cough that causes you to drop items.
+/datum/mutation/human/cough
+ name = "Cough"
+ quality = MINOR_NEGATIVE
+ text_gain_indication = "You start coughing."
+
+/datum/mutation/human/cough/on_life(mob/living/carbon/human/owner)
+ if(prob(5) && owner.stat == CONSCIOUS)
+ owner.drop_all_held_items()
+ owner.emote("cough")
+
+
+//Dwarfism shrinks your body and lets you pass tables.
+/datum/mutation/human/dwarfism
+ name = "Dwarfism"
+ quality = POSITIVE
+ get_chance = 15
+ lowest_value = 256 * 12
+
+/datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.resize = 0.8
+ owner.update_transform()
+ owner.pass_flags |= PASSTABLE
+ owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..")
+
+/datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.resize = 1.25
+ owner.update_transform()
+ owner.pass_flags &= ~PASSTABLE
+ owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..")
+
+
+//Clumsiness has a very large amount of small drawbacks depending on item.
+/datum/mutation/human/clumsy
+ name = "Clumsiness"
+ quality = MINOR_NEGATIVE
+ text_gain_indication = "You feel lightheaded."
+
+/datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.disabilities |= CLUMSY
+
+/datum/mutation/human/clumsy/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.disabilities &= ~CLUMSY
+
+
+//Tourettes causes you to randomly stand in place and shout.
+/datum/mutation/human/tourettes
+ name = "Tourettes Syndrome"
+ quality = NEGATIVE
+ text_gain_indication = "You twitch."
+
+/datum/mutation/human/tourettes/on_life(mob/living/carbon/human/owner)
+ if(prob(10) && owner.stat == CONSCIOUS)
+ owner.Stun(200)
+ switch(rand(1, 3))
+ if(1)
+ owner.emote("twitch")
+ if(2 to 3)
+ owner.say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]")
+ var/x_offset_old = owner.pixel_x
+ var/y_offset_old = owner.pixel_y
+ var/x_offset = owner.pixel_x + rand(-2,2)
+ var/y_offset = owner.pixel_y + rand(-1,1)
+ animate(owner, pixel_x = x_offset, pixel_y = y_offset, time = 1)
+ animate(owner, pixel_x = x_offset_old, pixel_y = y_offset_old, time = 1)
+
+
+//Deafness makes you deaf.
+/datum/mutation/human/deaf
+ name = "Deafness"
+ quality = NEGATIVE
+ text_gain_indication = "You can't seem to hear anything."
+
+/datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.disabilities |= DEAF
+
+/datum/mutation/human/deaf/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.disabilities &= ~DEAF
+
+
+//Monified turns you into a monkey.
+/datum/mutation/human/race
+ name = "Monkified"
+ quality = NEGATIVE
+ time_coeff = 2
+
+/datum/mutation/human/race/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ . = owner.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
+
+/datum/mutation/human/race/on_losing(mob/living/carbon/monkey/owner)
+ if(owner && istype(owner) && owner.stat != DEAD && (owner.dna.mutations.Remove(src)))
+ . = owner.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
diff --git a/code/datums/mutations/chameleon.dm b/code/datums/mutations/chameleon.dm
new file mode 100644
index 0000000000..da10510970
--- /dev/null
+++ b/code/datums/mutations/chameleon.dm
@@ -0,0 +1,30 @@
+//Chameleon causes the owner to slowly become transparent when not moving.
+/datum/mutation/human/chameleon
+ name = "Chameleon"
+ quality = POSITIVE
+ get_chance = 20
+ lowest_value = 256 * 12
+ text_gain_indication = "You feel one with your surroundings."
+ text_lose_indication = "You feel oddly exposed."
+ time_coeff = 5
+
+/datum/mutation/human/chameleon/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
+
+/datum/mutation/human/chameleon/on_life(mob/living/carbon/human/owner)
+ owner.alpha = max(0, owner.alpha - 25)
+
+/datum/mutation/human/chameleon/on_move(mob/living/carbon/human/owner)
+ owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
+
+/datum/mutation/human/chameleon/on_attack_hand(mob/living/carbon/human/owner, atom/target, proximity)
+ if(proximity) //stops tk from breaking chameleon
+ owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
+ return
+
+/datum/mutation/human/chameleon/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.alpha = 255
diff --git a/code/datums/mutations/cold_resistance.dm b/code/datums/mutations/cold_resistance.dm
new file mode 100644
index 0000000000..6281514e71
--- /dev/null
+++ b/code/datums/mutations/cold_resistance.dm
@@ -0,0 +1,20 @@
+//Cold Resistance gives your entire body an orange halo, and makes you immune to the effects of vacuum and cold.
+/datum/mutation/human/cold_resistance
+ name = "Cold Resistance"
+ quality = POSITIVE
+ get_chance = 25
+ lowest_value = 256 * 12
+ text_gain_indication = "Your body feels warm!"
+ time_coeff = 5
+
+/datum/mutation/human/cold_resistance/New()
+ ..()
+ visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "fire", -MUTATIONS_LAYER)
+
+/datum/mutation/human/cold_resistance/get_visual_indicator(mob/living/carbon/human/owner)
+ return visual_indicators[1]
+
+/datum/mutation/human/cold_resistance/on_life(mob/living/carbon/human/owner)
+ if(owner.getFireLoss())
+ if(prob(1))
+ owner.heal_bodypart_damage(0,1) //Is this really needed?
diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm
new file mode 100644
index 0000000000..9340361930
--- /dev/null
+++ b/code/datums/mutations/hulk.dm
@@ -0,0 +1,36 @@
+//Hulk turns your skin green, and allows you to punch through walls.
+/datum/mutation/human/hulk
+ name = "Hulk"
+ quality = POSITIVE
+ get_chance = 15
+ lowest_value = 256 * 12
+ text_gain_indication = "Your muscles hurt!"
+ species_allowed = list("human") //no skeleton/lizard hulk
+ health_req = 25
+
+/datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ var/status = CANSTUN | CANKNOCKDOWN | CANUNCONSCIOUS | CANPUSH
+ owner.status_flags &= ~status
+ owner.update_body_parts()
+
+/datum/mutation/human/hulk/on_attack_hand(mob/living/carbon/human/owner, atom/target, proximity)
+ if(proximity) //no telekinetic hulk attack
+ return target.attack_hulk(owner)
+
+/datum/mutation/human/hulk/on_life(mob/living/carbon/human/owner)
+ if(owner.health < 0)
+ on_losing(owner)
+ to_chat(owner, "You suddenly feel very weak.")
+
+/datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.status_flags |= CANSTUN | CANKNOCKDOWN | CANUNCONSCIOUS | CANPUSH
+ owner.update_body_parts()
+
+/datum/mutation/human/hulk/say_mod(message)
+ if(message)
+ message = "[uppertext(replacetext(message, ".", "!"))]!!"
+ return message
diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm
new file mode 100644
index 0000000000..dee26166dd
--- /dev/null
+++ b/code/datums/mutations/sight.dm
@@ -0,0 +1,74 @@
+//Nearsightedness restricts your vision by several tiles.
+/datum/mutation/human/nearsight
+ name = "Near Sightness"
+ quality = MINOR_NEGATIVE
+ text_gain_indication = "You can't see very well."
+
+/datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.become_nearsighted()
+
+/datum/mutation/human/nearsight/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.cure_nearsighted()
+
+
+//Blind makes you blind. Who knew?
+/datum/mutation/human/blind
+ name = "Blindness"
+ quality = NEGATIVE
+ text_gain_indication = "You can't seem to see anything."
+
+/datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.become_blind()
+
+/datum/mutation/human/blind/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.cure_blind()
+
+
+//X-Ray Vision lets you see through walls.
+/datum/mutation/human/x_ray
+ name = "X Ray Vision"
+ quality = POSITIVE
+ get_chance = 25
+ lowest_value = 256 * 12
+ text_gain_indication = "The walls suddenly disappear!"
+ time_coeff = 2
+
+/datum/mutation/human/x_ray/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+
+ owner.update_sight()
+
+/datum/mutation/human/x_ray/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.update_sight()
+
+
+//Laser Eyes lets you shoot lasers from your eyes!
+/datum/mutation/human/laser_eyes
+ name = "Laser Eyes"
+ quality = POSITIVE
+ dna_block = NON_SCANNABLE
+ text_gain_indication = "You feel pressure building up behind your eyes."
+ layer_used = FRONT_MUTATIONS_LAYER
+ limb_req = "head"
+
+/datum/mutation/human/laser_eyes/New()
+ ..()
+ visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "lasereyes", -FRONT_MUTATIONS_LAYER)
+
+/datum/mutation/human/laser_eyes/get_visual_indicator(mob/living/carbon/human/owner)
+ return visual_indicators[1]
+
+/datum/mutation/human/laser_eyes/on_ranged_attack(mob/living/carbon/human/owner, atom/target, mouseparams)
+ if(owner.a_intent == INTENT_HARM)
+ owner.LaserEyes(target, mouseparams)
diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm
new file mode 100644
index 0000000000..2959c73125
--- /dev/null
+++ b/code/datums/mutations/speech.dm
@@ -0,0 +1,231 @@
+//These are all minor mutations that affect your speech somehow.
+//Individual ones aren't commented since their functions should be evident at a glance
+
+/datum/mutation/human/nervousness
+ name = "Nervousness"
+ quality = MINOR_NEGATIVE
+ text_gain_indication = "You feel nervous."
+
+/datum/mutation/human/nervousness/on_life(mob/living/carbon/human/owner)
+ if(prob(10))
+ owner.stuttering = max(10, owner.stuttering)
+
+
+/datum/mutation/human/wacky
+ name = "Wacky"
+ quality = MINOR_NEGATIVE
+ text_gain_indication = "You feel an off sensation in your voicebox."
+ text_lose_indication = "The off sensation passes."
+
+/datum/mutation/human/wacky/get_spans()
+ return list(SPAN_SANS)
+
+
+/datum/mutation/human/mute
+ name = "Mute"
+ quality = NEGATIVE
+ text_gain_indication = "You feel unable to express yourself at all."
+ text_lose_indication = "You feel able to speak freely again."
+
+/datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.disabilities |= MUTE
+
+/datum/mutation/human/mute/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ owner.disabilities &= ~MUTE
+
+
+/datum/mutation/human/smile
+ name = "Smile"
+ quality = MINOR_NEGATIVE
+ dna_block = NON_SCANNABLE
+ text_gain_indication = "You feel so happy. Nothing can be wrong with anything. :)"
+ text_lose_indication = "Everything is terrible again. :("
+
+/datum/mutation/human/smile/say_mod(message)
+ if(message)
+ message = " [message] "
+ //Time for a friendly game of SS13
+ message = replacetext(message," stupid "," smart ")
+ message = replacetext(message," retard "," genius ")
+ message = replacetext(message," unrobust "," robust ")
+ message = replacetext(message," dumb "," smart ")
+ message = replacetext(message," awful "," great ")
+ message = replacetext(message," gay ",pick(" nice "," ok "," alright "))
+ message = replacetext(message," horrible "," fun ")
+ message = replacetext(message," terrible "," terribly fun ")
+ message = replacetext(message," terrifying "," wonderful ")
+ message = replacetext(message," gross "," cool ")
+ message = replacetext(message," disgusting "," amazing ")
+ message = replacetext(message," loser "," winner ")
+ message = replacetext(message," useless "," useful ")
+ message = replacetext(message," oh god "," cheese and crackers ")
+ message = replacetext(message," jesus "," gee wiz ")
+ message = replacetext(message," weak "," strong ")
+ message = replacetext(message," kill "," hug ")
+ message = replacetext(message," murder "," tease ")
+ message = replacetext(message," ugly "," beautiful ")
+ message = replacetext(message," douchbag "," nice guy ")
+ message = replacetext(message," whore "," lady ")
+ message = replacetext(message," nerd "," smart guy ")
+ message = replacetext(message," moron "," fun person ")
+ message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ")
+ message = replacetext(message," sex "," hug fight ")
+ message = replacetext(message," idiot "," genius ")
+ message = replacetext(message," fat "," thin ")
+ message = replacetext(message," beer "," water with ice ")
+ message = replacetext(message," drink "," water ")
+ message = replacetext(message," feminist "," empowered woman ")
+ message = replacetext(message," i hate you "," you're mean ")
+ message = replacetext(message," nigger "," african american ")
+ message = replacetext(message," jew "," jewish ")
+ message = replacetext(message," shit "," shiz ")
+ message = replacetext(message," crap "," poo ")
+ message = replacetext(message," slut "," tease ")
+ message = replacetext(message," ass "," butt ")
+ message = replacetext(message," damn "," dang ")
+ message = replacetext(message," fuck "," ")
+ message = replacetext(message," penis "," privates ")
+ message = replacetext(message," cunt "," privates ")
+ message = replacetext(message," dick "," jerk ")
+ message = replacetext(message," vagina "," privates ")
+ return trim(message)
+
+
+/datum/mutation/human/unintelligable
+ name = "Unintelligable"
+ quality = NEGATIVE
+ text_gain_indication = "You can't seem to form any coherent thoughts!"
+ text_lose_indication = "Your mind feels more clear."
+
+/datum/mutation/human/unintelligable/say_mod(message)
+ if(message)
+ var/prefix=copytext(message,1,2)
+ if(prefix == ";")
+ message = copytext(message,2)
+ else if(prefix in list(":","#"))
+ prefix += copytext(message,2,3)
+ message = copytext(message,3)
+ else
+ prefix=""
+
+ var/list/words = splittext(message," ")
+ var/list/rearranged = list()
+ for(var/i=1;i<=words.len;i++)
+ var/cword = pick(words)
+ words.Remove(cword)
+ var/suffix = copytext(cword,length(cword)-1,length(cword))
+ while(length(cword)>0 && suffix in list(".",",",";","!",":","?"))
+ cword = copytext(cword,1 ,length(cword)-1)
+ suffix = copytext(cword,length(cword)-1,length(cword) )
+ if(length(cword))
+ rearranged += cword
+ message = "[prefix][uppertext(jointext(rearranged," "))]!!"
+ return message
+
+
+/datum/mutation/human/swedish
+ name = "Swedish"
+ quality = MINOR_NEGATIVE
+ dna_block = NON_SCANNABLE
+ text_gain_indication = "You feel Swedish, however that works."
+ text_lose_indication = "The feeling of Swedishness passes."
+
+/datum/mutation/human/swedish/say_mod(message)
+ if(message)
+ message = replacetext(message,"w","v")
+ message = replacetext(message,"j","y")
+ message = replacetext(message,"a",pick("�","�","�","a"))
+ message = replacetext(message,"bo","bjo")
+ message = replacetext(message,"o",pick("�","�","o"))
+ if(prob(30))
+ message += " Bork[pick("",", bork",", bork, bork")]!"
+ return message
+
+
+/datum/mutation/human/chav
+ name = "Chav"
+ quality = MINOR_NEGATIVE
+ dna_block = NON_SCANNABLE
+ text_gain_indication = "Ye feel like a reet prat like, innit?"
+ text_lose_indication = "You no longer feel like being rude and sassy."
+
+/datum/mutation/human/chav/say_mod(message)
+ if(message)
+ message = " [message] "
+ message = replacetext(message," looking at "," gawpin' at ")
+ message = replacetext(message," great "," bangin' ")
+ message = replacetext(message," man "," mate ")
+ message = replacetext(message," friend ",pick(" mate "," bruv "," bledrin "))
+ message = replacetext(message," what "," wot ")
+ message = replacetext(message," drink "," wet ")
+ message = replacetext(message," get "," giz ")
+ message = replacetext(message," what "," wot ")
+ message = replacetext(message," no thanks "," wuddent fukken do one ")
+ message = replacetext(message," i don't know "," wot mate ")
+ message = replacetext(message," no "," naw ")
+ message = replacetext(message," robust "," chin ")
+ message = replacetext(message," hi "," how what how ")
+ message = replacetext(message," hello "," sup bruv ")
+ message = replacetext(message," kill "," bang ")
+ message = replacetext(message," murder "," bang ")
+ message = replacetext(message," windows "," windies ")
+ message = replacetext(message," window "," windy ")
+ message = replacetext(message," break "," do ")
+ message = replacetext(message," your "," yer ")
+ message = replacetext(message," security "," coppers ")
+ return trim(message)
+
+
+/datum/mutation/human/elvis
+ name = "Elvis"
+ quality = MINOR_NEGATIVE
+ dna_block = NON_SCANNABLE
+ text_gain_indication = "You feel pretty good, honeydoll."
+ text_lose_indication = "You feel a little less conversation would be great."
+
+/datum/mutation/human/elvis/on_life(mob/living/carbon/human/owner)
+ switch(pick(1,2))
+ if(1)
+ if(prob(15))
+ var/list/dancetypes = list("swinging", "fancy", "stylish", "20'th century", "jivin'", "rock and roller", "cool", "salacious", "bashing", "smashing")
+ var/dancemoves = pick(dancetypes)
+ owner.visible_message("[owner] busts out some [dancemoves] moves!")
+ if(2)
+ if(prob(15))
+ owner.visible_message("[owner] [pick("jiggles their hips", "rotates their hips", "gyrates their hips", "taps their foot", "dances to an imaginary song", "jiggles their legs", "snaps their fingers")]!")
+
+/datum/mutation/human/elvis/say_mod(message)
+ if(message)
+ message = " [message] "
+ message = replacetext(message," i'm not "," I aint ")
+ message = replacetext(message," girl ",pick(" honey "," baby "," baby doll "))
+ message = replacetext(message," man ",pick(" son "," buddy "," brother"," pal "," friendo "))
+ message = replacetext(message," out of "," outta ")
+ message = replacetext(message," thank you "," thank you, thank you very much ")
+ message = replacetext(message," what are you "," whatcha ")
+ message = replacetext(message," yes ",pick(" sure", "yea "))
+ message = replacetext(message," faggot "," square ")
+ message = replacetext(message," muh valids "," getting my kicks ")
+ return trim(message)
+
+
+/datum/mutation/human/stoner
+ name = "Stoner"
+ quality = NEGATIVE
+ dna_block = NON_SCANNABLE
+ text_gain_indication = "You feel...totally chill, man!"
+ text_lose_indication = "You feel like you have a better sense of time."
+
+/datum/mutation/human/stoner/on_acquiring(mob/living/carbon/human/owner)
+ ..()
+ owner.grant_language(/datum/language/beachbum)
+ owner.remove_language(/datum/language/common)
+
+/datum/mutation/human/stoner/on_losing(mob/living/carbon/human/owner)
+ ..()
+ owner.grant_language(/datum/language/common)
+ owner.remove_language(/datum/language/beachbum)
diff --git a/code/datums/mutations/telekinesis.dm b/code/datums/mutations/telekinesis.dm
new file mode 100644
index 0000000000..3aa562ee74
--- /dev/null
+++ b/code/datums/mutations/telekinesis.dm
@@ -0,0 +1,18 @@
+//Telekinesis lets you interact with objects from range, and gives you a light blue halo around your head.
+/datum/mutation/human/telekinesis
+ name = "Telekinesis"
+ quality = POSITIVE
+ get_chance = 20
+ lowest_value = 256 * 12
+ text_gain_indication = "You feel smarter!"
+ limb_req = "head"
+
+/datum/mutation/human/telekinesis/New()
+ ..()
+ visual_indicators |= mutable_appearance('icons/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER)
+
+/datum/mutation/human/telekinesis/get_visual_indicator(mob/living/carbon/human/owner)
+ return visual_indicators[1]
+
+/datum/mutation/human/telekinesis/on_ranged_attack(mob/living/carbon/human/owner, atom/target)
+ target.attack_tk(owner)
diff --git a/tgstation.dme b/tgstation.dme
index e5d267b667..0648584f2e 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -411,6 +411,13 @@
#include "code\datums\martial\plasma_fist.dm"
#include "code\datums\martial\sleeping_carp.dm"
#include "code\datums\martial\wrestling.dm"
+#include "code\datums\mutations\body.dm"
+#include "code\datums\mutations\chameleon.dm"
+#include "code\datums\mutations\cold_resistance.dm"
+#include "code\datums\mutations\hulk.dm"
+#include "code\datums\mutations\sight.dm"
+#include "code\datums\mutations\speech.dm"
+#include "code\datums\mutations\telekinesis.dm"
#include "code\datums\ruins\lavaland.dm"
#include "code\datums\ruins\space.dm"
#include "code\datums\status_effects\buffs.dm"