diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 757f036c691..dc84c1836dd 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -328,6 +328,9 @@
/atom/proc/emag_act()
return
+/atom/proc/fart_act(mob/living/M)
+ return FALSE
+
/atom/proc/rpd_act()
return
diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm
index eb778b6a280..db34f3ae2c8 100644
--- a/code/game/objects/items/weapons/storage/bible.dm
+++ b/code/game/objects/items/weapons/storage/bible.dm
@@ -14,6 +14,15 @@
user.dust()
return OBLITERATION
+/obj/item/storage/bible/fart_act(mob/living/M)
+ if(QDELETED(M) || M.stat == DEAD)
+ return
+ M.visible_message("[M] farts on \the [name]!")
+ M.visible_message("A mysterious force smites [M]!")
+ M.suiciding = TRUE
+ do_sparks(3, 1, M)
+ M.gib()
+ return TRUE // Don't run the fart emote
/obj/item/storage/bible/booze
name = "bible"
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 219ba9ca9eb..c23db2f5501 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -858,14 +858,10 @@
playsound(loc, 'sound/effects/snap.ogg', 50, 1)
if("fart", "farts")
- if(locate(/obj/item/storage/bible) in get_turf(src))
- to_chat(viewers(src), "[src] farts on the Bible!")
- var/image/cross = image('icons/obj/storage.dmi', "bible")
- var/adminbfmessage = "[bicon(cross)] Bible Fart: [key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) (CA) (SMITE):"
- for(var/client/X in GLOB.admins)
- if(check_rights(R_EVENT, 0, X.mob))
- to_chat(X, adminbfmessage)
- else
+ var/farted_on_thing = FALSE
+ for(var/atom/A in get_turf(src))
+ farted_on_thing += A.fart_act(src)
+ if(!farted_on_thing)
message = "[src] [pick("passes wind", "farts")]."
m_type = 2
@@ -947,7 +943,7 @@
for(var/mob/M in GLOB.dead_mob_list)
if(!M.client)
- continue
+ continue
if(isnewplayer(M))
continue