diff --git a/code/game/sound.dm b/code/game/sound.dm
index 2ebc83973be..07f318993cb 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -5,6 +5,7 @@ var/list/spark_sound = list('sound/effects/sparks1.ogg','sound/effects/sparks2.o
var/list/rustle_sound = list('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg')
var/list/punch_sound = list('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg')
var/list/clown_sound = list('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg')
+var/list/slap_sound = list('sound/effects/slap1.ogg','sound/effects/slap2.ogg')
var/list/swing_hit_sound = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg')
var/list/hiss_sound = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')
var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg')
@@ -168,6 +169,8 @@ var/const/SURROUND_CAP = 7
soundin = pick(punch_sound)
if ("clownstep")
soundin = pick(clown_sound)
+ if ("slap")
+ soundin = pick(slap_sound)
if ("swing_hit")
soundin = pick(swing_hit_sound)
if ("hiss")
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 31d5264525c..aa238c674d0 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -173,6 +173,13 @@
_color = "mime"
species_fit = list(VOX_SHAPED)
+/obj/item/clothing/gloves/white/attackby(obj/item/weapon/W, mob/user)
+ ..()
+ if(istype(W, /obj/item/clothing/head/beret))
+ new /mob/living/simple_animal/hostile/retaliate/faguette/goblin(get_turf(src))
+ qdel(W)
+ qdel(src)
+
/obj/item/clothing/gloves/white/advanced //mime traitor gloves, spawn in a silent hand gun with two shots
actions_types = list(/datum/action/item_action/toggle_gun)
var/obj/item/weapon/gun/projectile/handgun/current_gun = null
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 00092116e18..b4546f77156 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -61,6 +61,13 @@
flags = FPRINT
siemens_coefficient = 0.9
+/obj/item/clothing/head/beret/attackby(obj/item/weapon/W, mob/user)
+ ..()
+ if(istype(W, /obj/item/clothing/gloves/white))
+ new /mob/living/simple_animal/hostile/retaliate/faguette/goblin(get_turf(src))
+ qdel(W)
+ qdel(src)
+
//Security
/obj/item/clothing/head/beret/sec
name = "security beret"
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/faguette.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/faguette.dm
index fb7caa7e205..e01012bfc57 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/faguette.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/faguette.dm
@@ -2,7 +2,7 @@
/mob/living/simple_animal/hostile/retaliate/faguette
name = "faguette"
- desc = "This sad, pitiful creature is all that remains of what used to be a human, cursed by the Gods to aimlessly roam with its mouth and fingers sewn shut, and it’s left arm transformed into a perfectly baked baguette."
+ desc = "This sad, pitiful creature is all that remains of what used to be a human, cursed by the Gods to aimlessly roam with its mouth and fingers sewn shut, and it's left arm transformed into a perfectly baked baguette."
icon_state = "faguette"
icon_living = "faguette"
icon_dead = "faguette_dead"
@@ -29,6 +29,7 @@
melee_damage_upper = 0.1
attacktext = "attacks"
attack_sound = 'sound/weapons/genhit1.ogg'
+ meat_type = null
min_oxy = 5
max_oxy = 0
@@ -58,6 +59,9 @@
return
..()
+/mob/living/simple_animal/hostile/retaliate/faguette/attackby(obj/item/weapon/O, mob/user)
+ if(istype(O,/obj/item/weapon/book))
+ gib()
/mob/living/simple_animal/hostile/retaliate/faguette/proc/handle_disabilities()
if ((prob(5) && paralysis < 10))
@@ -68,5 +72,72 @@
if(timestopped)
return //under effects of time magick
- var/msg = pick("drools through its stitched mouth","silently cries into its baguette","sloppily mimes tieing an invisible noose around its neck")
+ var/msg = pick("drools slightly","mimes crying into a tissue","sloppily mimes tying an invisible noose")
return ..("me", type, "[msg].")
+
+/mob/living/simple_animal/hostile/retaliate/faguette/AttackingTarget()
+ if(isliving(target))
+ var/mob/living/L = target
+ if(prob(10))
+ L.silent += 3
+ L.visible_message("\The [src.name] silences \the [L.name]!")
+ return
+ return ..()
+
+
+/mob/living/simple_animal/hostile/retaliate/faguette/goblin
+ name = "mime goblin"
+ desc = "A tiny walking beret and gloves. Is it miming for a baguette?"
+ icon_state = "MimeGoblin"
+ icon_living = "MimeGoblin"
+ icon_dead = null
+ response_help = "pats the"
+ maxHealth = 100
+ health = 100
+ size = 1
+ environment_smash_flags = SMASH_LIGHT_STRUCTURES
+ var/footstep = 0 //for slapping
+ speed = 1
+ turns_per_move = 1
+
+ melee_damage_type = "BRAIN"
+
+/mob/living/simple_animal/hostile/retaliate/faguette/goblin/attackby(obj/item/weapon/W, mob/user)
+ if(istype(W,/obj/item/weapon/pen)) //Renaming
+ var/n_name = copytext(sanitize(input(user, "What would you like to name this mime goblin?", "Mime Goblin Name", null) as text|null), 1, MAX_NAME_LEN*3)
+ if(n_name && Adjacent(user) && !user.stat)
+ name = "[n_name]"
+ return
+ ..()
+
+/mob/living/simple_animal/hostile/retaliate/faguette/AttackingTarget()
+ if(isliving(target))
+ var/mob/living/L = target
+ if(prob(10))
+ L.visible_message("\The [src.name] mimes an invisible wall!")
+ var/obj/effect/forcefield/mime/wall = new(get_turf(src))
+ spawn(300)
+ if(wall)
+ qdel(wall)
+ return ..()
+/mob/living/simple_animal/hostile/retaliate/faguette/goblin/say()
+ return
+
+/mob/living/simple_animal/hostile/retaliate/faguette/goblin/death(var/gibbed = FALSE)
+ ..(TRUE)
+ new /obj/item/clothing/head/beret(src.loc)
+ new /obj/item/clothing/gloves/white(src.loc)
+ qdel(src)
+
+/mob/living/simple_animal/hostile/retaliate/faguette/goblin/Move(NewLoc, Dir = 0, step_x = 0, step_y = 0, glide_size_override = 0)
+ . = ..()
+
+ if(.)
+ if(m_intent == "run")
+ if(footstep > 1)
+ footstep = 0
+ playsound(src, "slap", 50, 1)
+ else
+ footstep++
+ else
+ playsound(src, "slap", 20, 1)
\ No newline at end of file
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index 1876cba6879..411354ca786 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/sound/effects/slap1.ogg b/sound/effects/slap1.ogg
new file mode 100644
index 00000000000..f09d75412f4
Binary files /dev/null and b/sound/effects/slap1.ogg differ
diff --git a/sound/effects/slap2.ogg b/sound/effects/slap2.ogg
new file mode 100644
index 00000000000..0e84a0888d9
Binary files /dev/null and b/sound/effects/slap2.ogg differ