diff --git a/code/datums/spells/banana_touch.dm b/code/datums/spells/banana_touch.dm
index 165ba07208ef..6fa785eb31aa 100644
--- a/code/datums/spells/banana_touch.dm
+++ b/code/datums/spells/banana_touch.dm
@@ -72,3 +72,37 @@
if(!(iswizard(src) || (mind && mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE))) //Mutations are permanent on non-wizards. Can still be removed by genetics fuckery but not mutadone.
dna.default_blocks.Add(GLOB.clumsyblock)
dna.default_blocks.Add(GLOB.comicblock)
+
+/// Like bananatouched, but intended to be used for funny one-off scenarios which aren't meant to permanently cripple someone's round.
+/mob/living/carbon/human/proc/bananatouched_harmless()
+ to_chat(src, "HONK")
+ Weaken(14 SECONDS)
+ Stuttering(30 SECONDS)
+ do_jitter_animation(30 SECONDS)
+
+ var/obj/item/tank/internal_tank = internal
+ var/obj/item/clothing/mask/gas/clown_hat/clown_mask = new()
+ var/obj/item/clothing/under/rank/civilian/clown/clown_suit = new()
+ var/obj/item/clothing/shoes/clown_shoes/clown_shoes = new()
+ clown_mask.flags |= DROPDEL
+ clown_suit.flags |= DROPDEL
+ clown_shoes.flags |= DROPDEL
+
+ drop_item_to_ground(shoes, force = TRUE)
+ drop_item_to_ground(wear_mask, force = TRUE)
+ drop_item_to_ground(w_uniform, force = TRUE)
+ if(isplasmaman(src))
+ drop_item_to_ground(head, force = TRUE)
+ var/obj/item/clothing/head/helmet/space/plasmaman/clown/clown_helmet = new()
+ clown_suit = new /obj/item/clothing/under/plasmaman/clown
+ clown_helmet.flags |= DROPDEL
+ clown_suit.flags |= DROPDEL
+ equip_to_slot_if_possible(clown_helmet, ITEM_SLOT_HEAD, TRUE, TRUE)
+ equip_to_slot_if_possible(clown_suit, ITEM_SLOT_JUMPSUIT, TRUE, TRUE)
+ equip_to_slot_if_possible(clown_shoes, ITEM_SLOT_SHOES, TRUE, TRUE)
+ equip_to_slot_if_possible(clown_mask, ITEM_SLOT_MASK, TRUE, TRUE)
+
+ // Re-equips the internal tank if present
+ equip_to_appropriate_slot(internal_tank)
+ internal = internal_tank
+
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index f6a7070cbfa2..0d7c47d3048a 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -49,7 +49,10 @@
. = ..()
. += "The power light is [(stat & NOPOWER) ? "off" : "on"]."
. += "The operation light is [emergency_mode ? "off. [src] has detected a forbidden object with its sensors, and has shut down temporarily." : "on. [src] is active."]"
- . += "The safety sensor light is [emagged ? "off!" : "on."]"
+ if(HAS_TRAIT(src, TRAIT_CMAGGED))
+ . += "The safety sensor light is RGB."
+ else
+ . += "The safety sensor light is [emagged ? "off!" : "on."]"
. += "The recycler current accepts items from [dir2text(eat_dir)]."
/obj/machinery/recycler/power_change()
@@ -77,9 +80,23 @@
if(default_unfasten_wrench(user, I, time = 6 SECONDS))
return TRUE
-
+/obj/machinery/recycler/cmag_act(mob/user)
+ if(emagged)
+ to_chat(user, "The board is completely fried.")
+ return FALSE
+ if(!HAS_TRAIT(src, TRAIT_CMAGGED))
+ ADD_TRAIT(src, TRAIT_CMAGGED, CLOWN_EMAG)
+ if(emergency_mode)
+ emergency_mode = FALSE
+ update_icon(UPDATE_ICON_STATE)
+ playsound(src, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ to_chat(user, "You use the jestographic sequencer on [src].")
+ return TRUE
/obj/machinery/recycler/emag_act(mob/user)
+ if(HAS_TRAIT(src, TRAIT_CMAGGED))
+ to_chat(user, "The access panel is coated in yellow ooze...")
+ return FALSE
if(!emagged)
emagged = TRUE
if(emergency_mode)
@@ -127,6 +144,8 @@
else if(isliving(AM))
if(emagged)
crush_living(AM)
+ else if(HAS_TRAIT(src, TRAIT_CMAGGED))
+ bananafication(AM)
else
emergency_stop(AM)
else if(isitem(AM))
@@ -165,6 +184,15 @@
emergency_mode = FALSE
update_icon(UPDATE_ICON_STATE)
+/obj/machinery/recycler/proc/bananafication(mob/living/L)
+ L.loc = loc
+ if(!iscarbon(L))
+ playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
+ return
+ var/mob/living/carbon/human/victim = L
+ playsound(src, 'sound/items/AirHorn.ogg', 100, TRUE, -1)
+ victim.bananatouched_harmless()
+
/obj/machinery/recycler/proc/crush_living(mob/living/L)
L.loc = loc