diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index c6fcd640fd8..ae1fa85127c 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -13,7 +13,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, GLOB.undershirt_list, GLOB.undershirt_m, GLOB.undershirt_f)
//socks
init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list)
- //lizard bodyparts (blizzard intensifies)
+ //bodypart accessories (blizzard intensifies)
init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/lizard, GLOB.animated_tails_list_lizard)
@@ -29,7 +29,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/spines_animated, GLOB.animated_spines_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.r_wings_list,roundstart = TRUE)
- //moffs
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/caps, GLOB.caps_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list)
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 2bb34cd30a4..17745ef2972 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -72,7 +72,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list)
//For now we will always return none for tail_human and ears.
- return(list("mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "tail_lizard" = pick(GLOB.tails_list_lizard), "tail_human" = "None", "wings" = "None", "snout" = pick(GLOB.snouts_list), "horns" = pick(GLOB.horns_list), "ears" = "None", "frills" = pick(GLOB.frills_list), "spines" = pick(GLOB.spines_list), "body_markings" = pick(GLOB.body_markings_list), "legs" = "Normal Legs", "moth_wings" = pick(GLOB.moth_wings_list)))
+ return(list("mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "tail_lizard" = pick(GLOB.tails_list_lizard), "tail_human" = "None", "wings" = "None", "snout" = pick(GLOB.snouts_list), "horns" = pick(GLOB.horns_list), "ears" = "None", "frills" = pick(GLOB.frills_list), "spines" = pick(GLOB.spines_list), "body_markings" = pick(GLOB.body_markings_list), "legs" = "Normal Legs", "caps" = pick(GLOB.caps_list), "moth_wings" = pick(GLOB.moth_wings_list)))
/proc/random_hair_style(gender)
switch(gender)
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index c34510c0395..4026608f786 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -35,6 +35,7 @@ GLOBAL_LIST_EMPTY(wings_list)
GLOBAL_LIST_EMPTY(wings_open_list)
GLOBAL_LIST_EMPTY(r_wings_list)
GLOBAL_LIST_EMPTY(moth_wings_list)
+GLOBAL_LIST_EMPTY(caps_list)
GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list("ghost")) //stores the ghost forms that support directional sprites
GLOBAL_LIST_INIT(ghost_forms_with_accessories_list, list("ghost")) //stores the ghost forms that support hair and other such things
diff --git a/code/datums/martial/mushpunch.dm b/code/datums/martial/mushpunch.dm
new file mode 100644
index 00000000000..6a6d4c3fb24
--- /dev/null
+++ b/code/datums/martial/mushpunch.dm
@@ -0,0 +1,36 @@
+/datum/martial_art/mushpunch
+ name = "Mushroom Punch"
+
+/datum/martial_art/mushpunch/basic_hit(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ var/atk_verb
+ to_chat(A, "You begin to wind up an attack...")
+ if(do_after(A, 25, target = D))
+ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
+ atk_verb = pick("punches", "smashes", "ruptures", "cracks")
+ D.visible_message("[A] [atk_verb] [D] with inhuman strength, sending [D.p_them()] flying backwards!", \
+ "[A] [atk_verb] you with inhuman strength, sending you flying backwards!")
+ D.apply_damage(rand(15,30), BRUTE)
+ playsound(get_turf(D), 'sound/effects/meteorimpact.ogg', 25, 1, -1)
+ var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
+ D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time.
+ D.Knockdown(20)
+ if(atk_verb)
+ add_logs(A, D, "[atk_verb] (Mushroom Punch)")
+ return TRUE
+ return FALSE
+
+/obj/item/mushpunch
+ name = "mysterious mushroom"
+ desc = "Sapienza Ophioglossoides:An odd mushroom from the flesh of a mushroom person. it has apparently retained some innate power of it's owner, as it quivers with barely-contained POWER!"
+ icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
+ icon_state = "mycelium-angel"
+
+/obj/item/mushpunch/attack_self(mob/living/carbon/human/user)
+ if(!istype(user) || !user)
+ return
+ var/message = "You devour [src], and a confluence of skill and power from the mushroom enhances your punches! You do need a short moment to charge these powerful punches."
+ to_chat(user, message)
+ var/datum/martial_art/mushpunch/mush = new(null)
+ mush.teach(user)
+ qdel(src)
+ visible_message("[user] devours [src].")
diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm
index be32f0df199..2fe8d2a460d 100644
--- a/code/game/objects/effects/spawners/bundle.dm
+++ b/code/game/objects/effects/spawners/bundle.dm
@@ -22,7 +22,7 @@
/obj/item/reagent_containers/food/snacks/egg)
/obj/effect/spawner/bundle/costume/gladiator
- name = "gladitator costume spawner"
+ name = "gladiator costume spawner"
items = list(
/obj/item/clothing/under/gladiator,
/obj/item/clothing/head/helmet/gladiator)
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index f0168694f02..6553f5ec661 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -90,7 +90,7 @@
name = "magic mirror"
desc = "Turn and face the strange... face."
icon_state = "magic_mirror"
- var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombies", "clockwork golem servant", "android", "synth")
+ var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombies", "clockwork golem servant", "android", "synth", "mush")
var/list/choosable_races = list()
/obj/structure/mirror/magic/New()
diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm
index b1ac5604b47..352d4eff7bc 100644
--- a/code/modules/hydroponics/grown/mushrooms.dm
+++ b/code/modules/hydroponics/grown/mushrooms.dm
@@ -23,9 +23,6 @@
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("morphine" = 0.35, "charcoal" = 0.35, "nutriment" = 0)
-
-
-
/obj/item/reagent_containers/food/snacks/grown/mushroom/reishi
seed = /obj/item/seeds/reishi
name = "reishi"
diff --git a/code/modules/language/mushroom.dm b/code/modules/language/mushroom.dm
new file mode 100644
index 00000000000..b896d11449c
--- /dev/null
+++ b/code/modules/language/mushroom.dm
@@ -0,0 +1,11 @@
+/datum/language/mushroom
+ name = "Mushroom"
+ desc = "A language that consists of the sound of periodic gusts of spore-filled air being released."
+ speech_verb = "puffs"
+ ask_verb = "puffs inquisitively"
+ exclaim_verb = "poofs loudly"
+ whisper_verb = "puffs quietly"
+ key = "y"
+ sentence_chance = 0
+ default_priority = 80
+ syllables = list("poof", "pff", "pFfF", "piff", "puff", "pooof", "pfffff", "piffpiff", "puffpuff", "poofpoof", "pifpafpofpuf")
diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm
index 57d912067e2..8699e02b29f 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories.dm
@@ -1402,6 +1402,14 @@
/datum/sprite_accessory/legs/digitigrade_lizard
name = "Digitigrade Legs"
+/datum/sprite_accessory/caps
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+ color_src = HAIR
+
+/datum/sprite_accessory/caps/round
+ name = "Round"
+ icon_state = "round"
+
/datum/sprite_accessory/moth_wings
icon = 'icons/mob/wings.dmi'
color_src = null
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 54ae8a28ac7..e7c8565ad75 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -634,7 +634,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
S = GLOB.legs_list[H.dna.features["legs"]]
if("moth_wings")
S = GLOB.moth_wings_list[H.dna.features["moth_wings"]]
-
+ if("caps")
+ S = GLOB.caps_list[H.dna.features["caps"]]
if(!S || S.icon_state == "none")
continue
diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
new file mode 100644
index 00000000000..18cb2d248d2
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
@@ -0,0 +1,60 @@
+/datum/species/mush //mush mush codecuck
+ name = "Mushroomperson"
+ id = "mush"
+ mutant_bodyparts = list("caps")
+ default_features = list("caps" = "Round")
+
+ fixed_mut_color = "DBBF92"
+ hair_color = "FF4B19" //cap color, spot color uses eye color
+ nojumpsuit = TRUE
+
+ say_mod = "poofs" //what does a mushroom sound like
+ species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR)
+ inherent_traits = list(TRAIT_NOBREATH)
+ speedmod = 1.5 //faster than golems but not by much
+
+ punchdamagelow = 6
+ punchdamagehigh = 14
+ punchstunthreshold = 14 //about 44% chance to stun
+
+ no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform)
+
+ burnmod = 1.25
+ heatmod = 1.5
+
+ mutanteyes = /obj/item/organ/eyes/night_vision/mushroom
+ use_skintones = FALSE
+ var/datum/martial_art/mushpunch/mush
+
+/datum/species/mush/check_roundstart_eligible()
+ return FALSE //hard locked out of roundstart on the order of design lead kor, this can be removed in the future when planetstation is here OR SOMETHING but right now we have a problem with races.
+
+/datum/species/mush/after_equip_job(datum/job/J, mob/living/carbon/human/H)
+ H.grant_language(/datum/language/mushroom) //pomf pomf
+
+/datum/species/mush/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ . = ..()
+ if(ishuman(C))
+ var/mob/living/carbon/human/H = C
+ if(!H.dna.features["caps"])
+ H.dna.features["caps"] = "Round"
+ handle_mutant_bodyparts(H)
+ H.faction |= "mushroom"
+ mush = new(null)
+ mush.teach(H)
+
+/datum/species/mush/on_species_loss(mob/living/carbon/C)
+ . = ..()
+ C.faction -= "mushroom"
+ mush.remove(C)
+ QDEL_NULL(mush)
+
+/datum/species/mush/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
+ if(chem.id == "weedkiller")
+ H.adjustToxLoss(3)
+ H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
+ return TRUE
+
+/datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
+ forced_colour = FALSE
+ ..()
diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm
index 93b0439d83a..b840d82670c 100644
--- a/code/modules/surgery/organs/eyes.dm
+++ b/code/modules/surgery/organs/eyes.dm
@@ -77,6 +77,10 @@
desc = "Even without their shadowy owner, looking at these eyes gives you a sense of dread."
icon_state = "burning_eyes"
+/obj/item/organ/eyes/night_vision/mushroom
+ name = "fung-eye"
+ desc = "While on the outside they look inert and dead, the eyes of mushroom people are actually very advanced."
+
///Robotic
/obj/item/organ/eyes/robotic
diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi
index ef4dc1a7b45..ae6818b30a5 100644
Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ
diff --git a/icons/mob/mutant_bodyparts.dmi b/icons/mob/mutant_bodyparts.dmi
index 25594b32834..19ebe0a4be3 100644
Binary files a/icons/mob/mutant_bodyparts.dmi and b/icons/mob/mutant_bodyparts.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index ffed0354d52..4b985d8a1f1 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -390,6 +390,7 @@
#include "code\datums\martial\boxing.dm"
#include "code\datums\martial\cqc.dm"
#include "code\datums\martial\krav_maga.dm"
+#include "code\datums\martial\mushpunch.dm"
#include "code\datums\martial\plasma_fist.dm"
#include "code\datums\martial\psychotic_brawl.dm"
#include "code\datums\martial\sleeping_carp.dm"
@@ -1653,6 +1654,7 @@
#include "code\modules\language\language_menu.dm"
#include "code\modules\language\machine.dm"
#include "code\modules\language\monkey.dm"
+#include "code\modules\language\mushroom.dm"
#include "code\modules\language\narsian.dm"
#include "code\modules\language\ratvarian.dm"
#include "code\modules\language\slime.dm"
@@ -1839,6 +1841,7 @@
#include "code\modules\mob\living\carbon\human\species_types\jellypeople.dm"
#include "code\modules\mob\living\carbon\human\species_types\lizardpeople.dm"
#include "code\modules\mob\living\carbon\human\species_types\mothmen.dm"
+#include "code\modules\mob\living\carbon\human\species_types\mushpeople.dm"
#include "code\modules\mob\living\carbon\human\species_types\plasmamen.dm"
#include "code\modules\mob\living\carbon\human\species_types\podpeople.dm"
#include "code\modules\mob\living\carbon\human\species_types\shadowpeople.dm"