diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm
index 938a30a2107..9c4080a6cfd 100644
--- a/code/__DEFINES/genetics.dm
+++ b/code/__DEFINES/genetics.dm
@@ -15,7 +15,18 @@
#define RACEMUT "Monkified"
#define BADSIGHT "Near Sightness"
#define LASEREYES "Laser Eyes"
-
+#define STEALTH "Cloak Of Darkness"
+#define CHAMELEON "Chameleon"
+#define WACKY "Wacky"
+#define JOKE "Joke"
+#define VINETA "Vineta"
+#define PAPYRUS "Papyrus"
+#define MUT_MUTE "Mute"
+#define SMILE "Smile"
+#define UNINTELLIGABLE "Unintelligable"
+#define SWEDISH "Swedish"
+#define CHAV "Chav"
+#define ELVIS "Elvis"
// String identifiers for associative list lookup
@@ -53,7 +64,7 @@
#define DNA_FACIAL_HAIR_STYLE_BLOCK 6
#define DNA_HAIR_STYLE_BLOCK 7
-#define DNA_STRUC_ENZYMES_BLOCKS 14
+#define DNA_STRUC_ENZYMES_BLOCKS 26
#define DNA_UNIQUE_ENZYMES_LEN 32
//Transformation proc stuff
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index c6827293901..d3acf80de85 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -126,7 +126,7 @@
W.afterattack(A,src,0,params) // 0: not Adjacent
else
RangedAttack(A, params)
-
+ last_movement=world.time
return
/mob/proc/changeNext_move(num)
diff --git a/code/datums/goon_mutations_disabilities.dm b/code/datums/goon_mutations_disabilities.dm
new file mode 100644
index 00000000000..8e19a7e13c3
--- /dev/null
+++ b/code/datums/goon_mutations_disabilities.dm
@@ -0,0 +1,219 @@
+/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/say_mod(var/message)
+ if(message)
+ message = "[message]"
+ return message
+
+/datum/mutation/human/joke
+ name = "Joke"
+ quality = MINOR_NEGATIVE
+ text_gain_indication = "You feel an off sensation in your voicebox."
+ text_lose_indication = "The off sensation passes."
+
+/datum/mutation/human/joke/say_mod(var/message)
+ if(message)
+ message = "[message]"
+ return message
+
+/datum/mutation/human/papyrus
+ name = "Papyrus"
+ quality = MINOR_NEGATIVE
+ text_gain_indication = "You feel an off sensation in your voicebox."
+ text_lose_indication = "The off sensation passes."
+
+/datum/mutation/human/papyrus/say_mod(var/message)
+ if(message)
+ message = "[message]"
+ return message
+
+/datum/mutation/human/vineta
+ name = "Vineta"
+ quality = MINOR_NEGATIVE
+ text_gain_indication = "You feel an off sensation in your voicebox."
+ text_lose_indication = "The off sensation passes."
+
+/datum/mutation/human/vineta/say_mod(var/message)
+ if(message)
+ message = "[message]"
+ return message
+
+
+/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
+ 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(var/message)
+ if(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 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(var/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 = text2list(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(list2text(rearranged," "))]!!"
+ return message
+
+/datum/mutation/human/swedish
+ name = "Swedish"
+ quality = MINOR_NEGATIVE
+ text_gain_indication = "You feel Swedish, however that works."
+ text_lose_indication = "The feeling of Swedishness passes."
+
+/datum/mutation/human/swedish/say_mod(var/message)
+ if(message)
+ message = replacetext(message,"w","v")
+ if(prob(30))
+ message += " Bork[pick("",", bork",", bork, bork")]!"
+ return message
+
+/datum/mutation/human/chav
+ name = "Chav"
+ quality = MINOR_NEGATIVE
+ 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(var/message)
+ if(message)
+ message = replacetext(message,"dick","prat")
+ message = replacetext(message,"comdom","knob'ead")
+ 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 message
+
+/datum/mutation/human/elvis
+ name = "Elvis"
+ quality = MINOR_NEGATIVE
+ 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(var/message)
+ if(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 message
\ No newline at end of file
diff --git a/code/datums/goon_mutations_powers.dm b/code/datums/goon_mutations_powers.dm
new file mode 100644
index 00000000000..cab817b019e
--- /dev/null
+++ b/code/datums/goon_mutations_powers.dm
@@ -0,0 +1,35 @@
+/datum/mutation/human/stealth
+ name = "Cloak Of Darkness"
+ quality = POSITIVE
+ get_chance = 10
+ lowest_value = 256 * 14
+ text_gain_indication = "You begin to fade into the shadows."
+ text_lose_indication = "You become fully visible."
+
+/datum/mutation/human/stealth/on_life(mob/living/carbon/human/owner)
+ var/turf/simulated/T = get_turf(owner)
+ if(!istype(T))
+ return
+ if(T.lighting_lumcount <= 2)
+ owner.alpha -= 25
+ else
+ owner.alpha = round(255 * 0.80)
+
+/datum/mutation/human/stealth/on_losing(mob/living/carbon/human/owner)
+ ..()
+ owner.alpha = 255
+
+/datum/mutation/human/chameleon
+ name = "Chameleon"
+ text_gain_indication = "You feel one with your surroundings."
+ text_lose_indication = "You feel oddly exposed."
+
+/datum/mutation/human/chameleon/on_life(mob/living/carbon/human/owner)
+ if((world.time - owner.last_movement) >= 30 && !owner.stat && owner.canmove && !owner.restrained())
+ owner.alpha -= 25
+ else
+ owner.alpha = round(255 * 0.80)
+
+/datum/mutation/human/chameleon/on_losing(mob/living/carbon/human/owner)
+ ..()
+ owner.alpha = 255
\ No newline at end of file
diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm
index b5f1279d655..d6046324421 100644
--- a/code/datums/mutations.dm
+++ b/code/datums/mutations.dm
@@ -14,7 +14,8 @@
var/quality
var/get_chance = 100
var/lowest_value = 256 * 8
- var/text_indication = ""
+ var/text_gain_indication = ""
+ var/text_lose_indication = ""
var/list/visual_indicators = list()
/datum/mutation/human/proc/force_give(mob/living/carbon/human/owner)
@@ -53,7 +54,7 @@
return 1
owner.dna.mutations.Add(src)
gain_indication(owner)
- owner << text_indication
+ owner << text_gain_indication
/datum/mutation/human/proc/gain_indication(mob/living/carbon/human/owner)
owner.overlays.Add(visual_indicators)
@@ -79,16 +80,21 @@
/datum/mutation/human/proc/on_losing(mob/living/carbon/human/owner)
if(owner.dna.mutations.Remove(src))
lose_indication(owner)
+ owner << text_lose_indication
return 0
return 1
+/datum/mutation/human/proc/say_mod(var/message)
+ if(message)
+ return message
+
/datum/mutation/human/hulk
name = "Hulk"
quality = POSITIVE
get_chance = 5
lowest_value = 256 * 14
- text_indication = "Your muscles hurt!"
+ text_gain_indication = "Your muscles hurt!"
/datum/mutation/human/hulk/New()
..()
@@ -118,13 +124,18 @@
..()
owner.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH
+/datum/mutation/human/hulk/say_mod(var/message)
+ if(message)
+ message = "[uppertext(replacetext(message, ".", "!"))]!!"
+ return message
+
/datum/mutation/human/telekinesis
name = "Telekinesis"
quality = POSITIVE
get_chance = 10
lowest_value = 256 * 14
- text_indication = "You feel smarter!"
+ text_gain_indication = "You feel smarter!"
/datum/mutation/human/telekinesis/New()
..()
@@ -139,7 +150,7 @@
quality = POSITIVE
get_chance = 10
lowest_value = 256 * 12
- text_indication = "Your body feels warm!"
+ text_gain_indication = "Your body feels warm!"
/datum/mutation/human/cold_resistance/New()
..()
@@ -156,7 +167,7 @@
quality = POSITIVE
get_chance = 10
lowest_value = 256 * 15
- text_indication = "The walls suddenly disappear!"
+ text_gain_indication = "The walls suddenly disappear!"
/datum/mutation/human/x_ray/on_acquiring(mob/living/carbon/human/owner)
if(..()) return
@@ -175,7 +186,7 @@
name = "Near Sightness"
quality = MINOR_NEGATIVE
- text_indication = "You can't see very well."
+ text_gain_indication = "You can't see very well."
/datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner)
if(..()) return
@@ -189,7 +200,7 @@
name = "Epilepsy"
quality = NEGATIVE
- text_indication = "You get a headache."
+ text_gain_indication = "You get a headache."
/datum/mutation/human/epilepsy/on_life(mob/living/carbon/human/owner)
if ((prob(1) && owner.paralysis < 1))
@@ -203,7 +214,7 @@
name = "Unstable DNA"
quality = NEGATIVE
- text_indication = "You feel strange."
+ text_gain_indication = "You feel strange."
/datum/mutation/human/bad_dna/on_acquiring(var/mob/living/carbon/human/owner)
var/mob/new_mob
@@ -223,7 +234,7 @@
name = "Cough"
quality = MINOR_NEGATIVE
- text_indication = "You start coughing."
+ text_gain_indication = "You start coughing."
/datum/mutation/human/cough/on_life(mob/living/carbon/human/owner)
if((prob(5) && owner.paralysis <= 1))
@@ -234,7 +245,7 @@
name = "Clumsiness"
quality = MINOR_NEGATIVE
- text_indication = "You feel lightheaded."
+ text_gain_indication = "You feel lightheaded."
/datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner)
if(..()) return
@@ -248,7 +259,7 @@
name = "Tourettes Syndrome"
quality = NEGATIVE
- text_indication = "You twitch."
+ text_gain_indication = "You twitch."
/datum/mutation/human/tourettes/on_life(mob/living/carbon/human/owner)
if((prob(10) && owner.paralysis <= 1))
@@ -269,7 +280,7 @@
name = "Nervousness"
quality = MINOR_NEGATIVE
- text_indication = "You feel nervous."
+ text_gain_indication = "You feel nervous."
/datum/mutation/human/nervousness/on_life(mob/living/carbon/human/owner)
if(prob(10))
@@ -279,7 +290,7 @@
name = "Deafness"
quality = NEGATIVE
- text_indication = "You can't seem to hear anything."
+ text_gain_indication = "You can't seem to hear anything."
/datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner)
if(..()) return
@@ -293,7 +304,7 @@
name = "Blindness"
quality = NEGATIVE
- text_indication = "You can't seem to see anything."
+ text_gain_indication = "You can't seem to see anything."
/datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner)
if(..()) return
@@ -327,8 +338,8 @@
name = "Laser Eyes"
quality = POSITIVE
dna_block = NON_SCANNABLE
- text_indication = "You feel pressure building up behind your eyes."
+ text_gain_indication = "You feel pressure building up behind your eyes."
/datum/mutation/human/laser_eyes/on_ranged_attack(mob/living/carbon/human/owner, atom/target)
if(owner.a_intent == "harm")
- owner.LaserEyes(target)
\ No newline at end of file
+ owner.LaserEyes(target)
diff --git a/code/game/dna.dm b/code/game/dna.dm
index 4a5f055f640..7aa1c3a06cb 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -83,7 +83,7 @@
/datum/dna/proc/generate_struc_enzymes(mob/living/carbon/character)
var/list/L = list("0","1","2","3","4","5","6")
var/list/sorting = list()
- sorting.len = 14
+ sorting.len = DNA_STRUC_ENZYMES_BLOCKS
var/result
for(var/datum/mutation/human/A in good_mutations + bad_mutations + not_good_mutations)
if(A.name == RACEMUT && istype(character,/mob/living/carbon/monkey))
@@ -105,6 +105,12 @@
. += repeat_string(DNA_UNIQUE_ENZYMES_LEN, "0")
return .
+/datum/dna/proc/mutations_say_mods(var/message)
+ if(message)
+ for(var/datum/mutation/human/M in mutations)
+ message = M.say_mod(message)
+ return message
+
/proc/hardset_dna(mob/living/carbon/owner, ui, se, real_name, blood_type, datum/species/mrace, mcolor)
if(!istype(owner, /mob/living/carbon/monkey) && !istype(owner, /mob/living/carbon/human))
return
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index c3eb29eea81..ded1bc0db3f 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -249,4 +249,149 @@
desc = "Will make you...less hairy."
New()
..()
- remove_mutations.Add(mutations_list[RACEMUT])
\ No newline at end of file
+ remove_mutations.Add(mutations_list[RACEMUT])
+
+/obj/item/weapon/dnainjector/antistealth
+ name = "\improper DNA injector (Anti-Cloak Of Darkness)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[STEALTH])
+
+/obj/item/weapon/dnainjector/stealthmut
+ name = "\improper DNA injector (Cloak of Darkness)"
+ desc = "Enables the subject to bend low levels of light around themselves, creating a cloaking effect."
+ New()
+ ..()
+ add_mutations.Add(mutations_list[STEALTH])
+
+/obj/item/weapon/dnainjector/antichameleon
+ name = "\improper DNA injector (Anti-Chameleon)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[CHAMELEON])
+
+/obj/item/weapon/dnainjector/chameleonmut
+ name = "\improper DNA injector (Chameleon)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[CHAMELEON])
+
+/obj/item/weapon/dnainjector/antiwacky
+ name = "\improper DNA injector (Anti-Wacky)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[WACKY])
+
+/obj/item/weapon/dnainjector/wackymut
+ name = "\improper DNA injector (Wacky)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[WACKY])
+
+/obj/item/weapon/dnainjector/antijoke
+ name = "\improper DNA injector (Anti-joke)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[JOKE])
+
+/obj/item/weapon/dnainjector/jokemut
+ name = "\improper DNA injector (Joke)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[JOKE])
+
+/obj/item/weapon/dnainjector/antipapyrus
+ name = "\improper DNA injector (Anti-Papyrus)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[PAPYRUS])
+
+/obj/item/weapon/dnainjector/papyrusmut
+ name = "\improper DNA injector (Papyrus)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[PAPYRUS])
+
+/obj/item/weapon/dnainjector/antivineta
+ name = "\improper DNA injector (Anti-Vineta)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[VINETA])
+
+/obj/item/weapon/dnainjector/vinetamut
+ name = "\improper DNA injector (Vineta)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[VINETA])
+
+/obj/item/weapon/dnainjector/antimute
+ name = "\improper DNA injector (Anti-Mute)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[MUT_MUTE])
+
+/obj/item/weapon/dnainjector/mutemut
+ name = "\improper DNA injector (Mute)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[MUT_MUTE])
+
+/obj/item/weapon/dnainjector/antismile
+ name = "\improper DNA injector (Anti-Smile)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[SMILE])
+
+/obj/item/weapon/dnainjector/smilemut
+ name = "\improper DNA injector (Smile)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[SMILE])
+
+/obj/item/weapon/dnainjector/unintelligablemut
+ name = "\improper DNA injector (Unintelligable)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[UNINTELLIGABLE])
+
+/obj/item/weapon/dnainjector/antiunintelligable
+ name = "\improper DNA injector (Anti-Unintelligable)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[UNINTELLIGABLE])
+
+/obj/item/weapon/dnainjector/swedishmut
+ name = "\improper DNA injector (Swedish)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[SWEDISH])
+
+/obj/item/weapon/dnainjector/antiswedish
+ name = "\improper DNA injector (Anti-Swedish)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[SWEDISH])
+
+/obj/item/weapon/dnainjector/chavmut
+ name = "\improper DNA injector (Chav)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[CHAV])
+
+/obj/item/weapon/dnainjector/antichav
+ name = "\improper DNA injector (Anti-Chav)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[CHAV])
+
+/obj/item/weapon/dnainjector/elvismut
+ name = "\improper DNA injector (Elvis)"
+ New()
+ ..()
+ add_mutations.Add(mutations_list[ELVIS])
+
+/obj/item/weapon/dnainjector/antielvis
+ name = "\improper DNA injector (Anti-Elvis)"
+ New()
+ ..()
+ remove_mutations.Add(mutations_list[ELVIS])
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 3da77b6b76f..71b54ef8970 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -21,9 +21,7 @@
/mob/living/carbon/human/treat_message(message)
if(dna)
message = dna.species.handle_speech(message,src)
-
- if (dna.check_mutation(HULK))
- message = "[uppertext(replacetext(message, ".", "!"))]!!" //because I don't know how to code properly in getting vars from other files -Bro
+ message = dna.mutations_say_mods(message)
if(viruses.len)
for(var/datum/disease/pierrot_throat/D in viruses)
@@ -38,7 +36,6 @@
temp_message[H] = "HONK"
pick_list -= H //Make sure that you dont HONK the same word twice
message = list2text(temp_message, " ")
-
message = ..(message)
return message
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 7a18315e8cb..94b6d8b68f1 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -160,3 +160,4 @@
var/atom/movable/remote_control //Calls relaymove() to whatever it is
var/turf/listed_turf = null //the current turf being examined in the stat panel
+ var/last_movement = 0 // Last world.time the mob actually moved of its own accord.
\ No newline at end of file
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 7c542c14e3e..e528a81b7ca 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -199,6 +199,7 @@
step(mob, pick(cardinal))
else
. = ..()
+ mob.last_movement=world.time
moving = 0
if(mob && .)
diff --git a/html/changelogs/Iamgoofball.yml b/html/changelogs/Iamgoofball.yml
new file mode 100644
index 00000000000..262ee8b9468
--- /dev/null
+++ b/html/changelogs/Iamgoofball.yml
@@ -0,0 +1,6 @@
+
+author: Iamgoofball
+delete-after: True
+
+changes:
+ - rscadd: "Adds 9 new Disabilites and 2 new genetic powers."
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index f9153693e70..fdaaea68b82 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -67,6 +67,11 @@ h1.alert, h2.alert {color: #000000;}
.interface {color: #330033;}
+.sans {font-family: "Comic Sans MS", cursive, sans-serif;}
+.papyrus {font-family: "Papyrus", cursive, sans-serif;}
+.vineta {font-family: "Vineta BT", cursive, sans-serif;}
+.jokerman {font-family: "Jokerman", cursive, sans-serif;}
+
BIG IMG.icon {width: 32px; height: 32px;}
"}
diff --git a/tgstation.dme b/tgstation.dme
index e0d96f0935e..b627c71b213 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -148,6 +148,8 @@
#include "code\datums\datacore.dm"
#include "code\datums\datumvars.dm"
#include "code\datums\gas_mixture.dm"
+#include "code\datums\goon_mutations_disabilities.dm"
+#include "code\datums\goon_mutations_powers.dm"
#include "code\datums\hud.dm"
#include "code\datums\mind.dm"
#include "code\datums\mixed.dm"