diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm
index fb1b34d3c23..0d7ce8a0232 100644
--- a/code/defines/obj/decal.dm
+++ b/code/defines/obj/decal.dm
@@ -297,3 +297,61 @@
layer = 2
icon = 'tomatodecal.dmi'
random_icon_states = list("smashed_pie")
+
+
+/* April fools shit */
+
+/obj/effect/decal/cleanable/urine
+ name = "urine"
+ desc = "It's yellow, and it smells."
+ density = 0
+ anchored = 1
+ layer = 2
+ icon = 'AF.dmi'
+ icon_state = "urine1"
+ random_icon_states = list("urine1", "urine2", "urine3")
+
+/obj/effect/decal/cleanable/poo
+ name = "poo"
+ desc = "Aw man, what the FUCK."
+ density = 0
+ anchored = 1
+ layer = 2
+ icon = 'AF.dmi'
+ icon_state = "splat1"
+ random_icon_states = list("splat1", "splat2", "splat3", "splat4", "splat5", "splat6", "splat7", "splat8")
+ var/dried = 0
+
+/obj/effect/decal/cleanable/urine/New()
+ src.icon_state = pick(src.random_icon_states)
+ spawn(500)
+ del(src)
+
+/obj/effect/decal/cleanable/urine/HasEntered(AM as mob|obj)
+ if (istype(AM, /mob/living/carbon))
+ var/mob/M = AM
+ if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes
+ if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP))
+
+ M.pulling = null
+ M << "\blue You slipped on the wet urine puddle!"
+ playsound(src.loc, 'slip.ogg', 50, 1, -3)
+ M.Stun(rand(1,8))
+ M.Weaken(rand(1,5))
+
+/obj/effect/decal/cleanable/poo/New()
+ src.icon_state = pick(src.random_icon_states)
+ spawn(300)
+ src.dried = 1
+
+/obj/effect/decal/cleanable/poo/HasEntered(AM as mob|obj)
+ if (istype(AM, /mob/living/carbon) && src.dried == 0)
+ var/mob/M = AM
+ if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes
+ if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP))
+
+ M.pulling = null
+ M << "\blue You slipped on the wet poo stain!"
+ playsound(src.loc, 'slip.ogg', 50, 1, -3)
+ M.Stun(rand(1,8))
+ M.Weaken(rand(1,5))
diff --git a/code/defines/procs/time_stamp.dm b/code/defines/procs/time_stamp.dm
index a7f8a7205b5..d966a6c685a 100644
--- a/code/defines/procs/time_stamp.dm
+++ b/code/defines/procs/time_stamp.dm
@@ -8,4 +8,22 @@ proc/time_stamp()
if(hh < 10) ph = "0"
if(mm < 10) pm = "0"
if(ss < 10) ps = "0"
- return"[ph][hh]:[pm][mm]:[ps][ss]"
\ No newline at end of file
+ return"[ph][hh]:[pm][mm]:[ps][ss]"
+
+
+/* Returns 1 if it is the selected month and day */
+proc/isDay(var/month, var/day)
+ if(isnum(month) && isnum(day))
+ var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month
+ var/DD = text2num(time2text(world.timeofday, "MM")) // get the current day
+ if(month == MM && day == DD)
+ return 1
+
+ // Uncomment this out when debugging!
+ //else
+ //return 1
+
+/* Check if it's april fools day */
+proc/isAprilFools()
+ return isDay(4, 1)
+
diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm
index 09629535ca3..36cc7a3c399 100644
--- a/code/game/atom_procs.dm
+++ b/code/game/atom_procs.dm
@@ -252,6 +252,15 @@
this.viruses += newDisease
newDisease.holder = this
+/atom/proc/add_poo_floor()
+ if( istype(src, /turf))
+ new /obj/effect/decal/cleanable/poo(src)
+
+/atom/proc/add_piss_floor()
+ if( istype(src, /turf))
+ new /obj/effect/decal/cleanable/urine(src)
+
+
// Only adds blood on the floor -- Skie
/atom/proc/add_blood_floor(mob/living/carbon/M as mob)
if( istype(M, /mob/living/carbon/monkey) )
diff --git a/code/game/step_triggers.dm b/code/game/step_triggers.dm
index cf285193fbd..c7665e11f86 100644
--- a/code/game/step_triggers.dm
+++ b/code/game/step_triggers.dm
@@ -33,7 +33,6 @@
var/stopthrow = 0
for(var/obj/step_trigger/thrower/T in orange(2, src))
if(A in T.affecting)
- world << "can't trigger"
return
if(ismob(A))
diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm
index 842362c5152..5dd96b84ac9 100644
--- a/code/modules/chemical/Chemistry-Reagents.dm
+++ b/code/modules/chemical/Chemistry-Reagents.dm
@@ -1649,6 +1649,7 @@ datum
if(!M) M = holder.my_atom
if(prob(50)) M:heal_organ_damage(1,0)
M:nutrition += nutriment_factor // For hunger and fatness
+ M.poo += nutriment_factor / 10 // LOLE
/*
// If overeaten - vomit and fall down
// Makes you feel bad but removes reagents and some effect
diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
index e71b9271cca..331bfdf6442 100644
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ b/code/modules/chemical/Chemistry-Tools.dm
@@ -1481,6 +1481,7 @@
reagents.trans_to(M, gulp_size)
playsound(M.loc,'drink.ogg', rand(10,50), 1)
+ M.urine += 0.25
return 1
else if( istype(M, /mob/living/carbon/human) )
@@ -1508,8 +1509,8 @@
spawn(600)
R.add_reagent(refill, fillevel)
-
playsound(M.loc,'drink.ogg', rand(10,50), 1)
+ M.urine += 0.25
return 1
return 0
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 3a7b6e0a675..06c1a39b86f 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -457,6 +457,218 @@
if ("help")
src << "blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough,\ncry, custom, deathgasp, drool, eyebrow, frown, gasp, giggle, groan, grumble, handshake, hug-(none)/mob, glare-(none)/mob,\ngrin, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, raise, salute, shake, shiver, shrug,\nsigh, signal-#1-10, smile, sneeze, sniff, snore, stare-(none)/mob, tremble, twitch, twitch_s, whimper,\nwink, yawn"
+ if ("fart")
+ if(isAprilFools())
+ var/gtext = "his"
+ if(gender == FEMALE)
+ gtext = "her"
+ switch(rand(1, 48))
+ if(1)
+ message = "[src] lets out a girly little 'toot' from [gtext] butt."
+
+ if(2)
+ message = "[src] farts loudly!"
+
+ if(3)
+ message = "[src] lets one rip!"
+
+ if(4)
+ message = "[src] farts! It sounds wet and smells like rotten eggs."
+
+ if(5)
+ message = "[src] farts robustly!"
+
+ if(6)
+ message = "[src] farted! It reminds you of your grandmother's queefs."
+
+ if(7)
+ message = "[src] queefed out [gtext] ass!"
+
+ if(8)
+ message = "[src] farted! It reminds you of your grandmother's queefs."
+
+ if(9)
+ message = "[src] farts a ten second long fart."
+
+ if(10)
+ message = "[src] groans and moans, farting like the world depended on it."
+
+ if(11)
+ message = "[src] breaks wind!"
+
+ if(12)
+ message = "[src] expels intestinal gas through the anus."
+
+ if(13)
+ message = "[src] release an audible discharge of intestinal gas."
+
+ if(14)
+ message = "\red [src] is a farting motherfucker!!!"
+
+ if(15)
+ message = "\red [src] suffers from flatulence!"
+
+ if(16)
+ message = "[src] releases flatus."
+
+ if(17)
+ message = "[src] releases gas generated in his digestive tract, [gtext] stomach and [gtext] intestines. \redIt stinks way bad!"
+
+ if(18)
+ message = "[src] farts like your mom used to!"
+
+ if(19)
+ message = "[src] farts. It smells like Soylent Surprise!"
+
+ if(20)
+ message = "[src] farts. It smells like pizza!"
+
+ if(21)
+ message = "[src] farts. It smells like George Melons' perfume!"
+
+ if(22)
+ message = "[src] farts. It smells like atmos in here now!"
+
+ if(23)
+ message = "[src] farts. It smells like medbay in here now!"
+
+ if(24)
+ message = "[src] farts. It smells like the bridge in here now!"
+
+ if(25)
+ message = "[src] farts like a pubby!"
+
+ if(26)
+ message = "[src] farts like a goone!"
+
+ if(27)
+ message = "[src] farts so hard poop came out with it, but dares not look."
+
+ if(28)
+ message = "[src] farts delicately."
+
+ if(29)
+ message = "[src] farts timidly."
+
+ if(30)
+ message = "[src] farts very, very quietly. The stench is OVERPOWERING."
+
+ if(31)
+ message = "[src] farts and says, \"Mmm! Delightful aroma!\""
+
+ if(32)
+ message = "[src] farts and says, \"Mmm! Sexy!\""
+
+ if(33)
+ message = "[src] farts and fondles [gtext] own buttocks."
+
+ if(34)
+ message = "[src] farts and fondles YOUR buttocks."
+
+ if(35)
+ message = "[src] fart in [gtext] own mouth. A shameful [src]."
+
+ if(36)
+ message = "[src] farts out pure plasma! \redFUCK!"
+
+ if(37)
+ message = "[src] farts out pure oxygen. What the fuck did he eat?"
+
+ if(38)
+ message = "[src] breaks wind noisily!"
+
+ if(39)
+ message = "[src] releases gas with the power of the gods! The very station trembles!!"
+
+ if(40)
+ message = "[src] \red f \blue a \black r \red t \blue s \black !"
+
+ if(41)
+ message = "[src] shat [gtext] pants!"
+
+ if(42)
+ message = "[src] shat [gtext] pants! Oh, no, that was just a really nasty fart."
+
+ if(43)
+ message = "[src] is a flatulent whore."
+
+ if(44)
+ message = "[src] likes the smell of his own farts."
+
+ if(45)
+ message = "[src] doesnt wipe after he poops."
+
+ if(46)
+ message = "[src] farts! Now [gtext] ass smells like Uhangay."
+
+ if(47)
+ message = "[src] farts so loud [gtext] buttocks causes a gravity well in the spacetime continuum!"
+
+ if(48)
+ message = "[src] laughs and [gtext] breath smells like a fart."
+ playsound(src.loc, 'poo2.ogg', 50, 1)
+
+ if("piss", "pee", "tinkle")
+ if(isAprilFools())
+ if(src.urine < 3)
+ if(src.gender == MALE)
+ message = "[src] unzips his pants and waves his dick around."
+ else
+ message = "[src] lowers her pants and squats near the floor."
+
+ else
+ if((locate(/obj/machinery/disposal/toilet) in src.loc) && (src.buckled != null) && (src.poo >= 3))
+ for(var/obj/machinery/disposal/toilet/T in src.loc)
+ if(src.gender == MALE)
+ message = "\blue [src] unzips his pants and urinates in the toilet."
+ else
+ message = "\blue [src] lowers her pants, sits on the toilet and urinates."
+ src.urine -= 3
+ else
+ var/shat_on_other = 0
+ for(var/mob/living/M in src.loc)
+ if(M == src)
+ continue
+ message = "\red [src] pisses all over [M]!"
+ shat_on_other = 1
+ break
+ if(!shat_on_other)
+ message = pick("[src] pisses on the floor.", "[src] pisses all over the floor!", "[src] unzips their pants and pisses all over the floor.")
+ src.urine -= 3
+ src.loc.add_piss_floor(src)
+
+ if("poo", "poop", "shit", "crap")
+ if(isAprilFools())
+ if(src.poo < 3)
+ message = "[src] grunts for a moment. Nothing happens."
+ else
+ if((locate(/obj/machinery/disposal/toilet) in src.loc) && (src.buckled != null) && (src.poo >= 3))
+ for(var/obj/machinery/disposal/toilet/T in src.loc)
+ message = pick("[src] unzips their pants and poops in the toilet.", "[src] farts out a steamer.", "\blue THHBBBBBBBBBBBBBT!")
+ playsound(src.loc, 'poo2.ogg', 50, 1)
+ src.poo -= 3
+ else if(istype(src.wear_suit, /obj/item/clothing/suit))
+ message = pick("[src] shits in their pants!", "[src] poos in their suit!", "\blue THHHHHHBBBBBBBBT!")
+ playsound(src.loc, 'poo2.ogg', 50, 1)
+ src.poo -= 3
+ else if(istype(src.w_uniform, /obj/item/clothing/under))
+ message = pick("[src] shits in their pants!", "[src] poos in their suit!", "\blue THHHHHHBBBBBBBBT!")
+ playsound(src.loc, 'poo2.ogg', 50, 1)
+ src.poo -= 3
+ else
+ var/shat_on_other = 0
+ for(var/mob/living/M in src.loc)
+ if(M == src)
+ continue
+ message = "\red [src] shits all over [M]!"
+ shat_on_other = 1
+ break
+ if(!shat_on_other)
+ message = pick("[src] shits on the floor.", "[src] poops all over the floor!", "[src] squeezes out a turd.")
+ src.poo -= 3
+ src.loc.add_poo_floor(src)
+ playsound(src.loc, 'poo2.ogg', 50, 1)
+
else
src << "\blue Unusable emote '[act]'. Say *help for a list."
@@ -468,3 +680,5 @@
else if (m_type & 2)
for (var/mob/O in hearers(src.loc, null))
O.show_message(message, m_type)
+ else
+ src << "\blue Unusable emote '[act]'. Say *help for a list."
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index d7fa729d4dd..994e4b4633b 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -118,6 +118,10 @@
var/jitteriness = 0//Carbon
var/charges = 0.0
var/nutrition = 400.0//Carbon
+
+ var/poo = 0.0 // APRIL FOOLS
+ var/urine = 0.0
+
var/overeatduration = 0 // How long this guy is overeating //Carbon
var/paralysis = 0.0
var/stunned = 0.0
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 39bbf9e3cb5..a63d160362a 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/misc/AF.dmi b/icons/misc/AF.dmi
new file mode 100644
index 00000000000..4c4cae2f488
Binary files /dev/null and b/icons/misc/AF.dmi differ
diff --git a/sound/misc/poo2.ogg b/sound/misc/poo2.ogg
new file mode 100644
index 00000000000..b87daeaa058
Binary files /dev/null and b/sound/misc/poo2.ogg differ