diff --git a/code/game/objects/effects/spawners/gibs.dm b/code/game/objects/effects/spawners/gibs.dm
index c8ece6ee04..0343b7ebdb 100644
--- a/code/game/objects/effects/spawners/gibs.dm
+++ b/code/game/objects/effects/spawners/gibs.dm
@@ -3,7 +3,7 @@
#define GIB_DATA_DIRECTIONS "directions"
/proc/gibs(atom/location, var/datum/dna/MobDNA, gibber_type = /obj/effect/spawner/gibs/generic, var/fleshcolor, var/bloodcolor)
- new gibber_type(FALSE,location,MobDNA,fleshcolor,bloodcolor)
+ new gibber_type(location, MobDNA, fleshcolor, bloodcolor)
/obj/effect/spawner/gibs
/// If non-null, sparks will be spawned alongside the gibs.
diff --git a/code/modules/food/kitchen/gibber.dm b/code/modules/food/kitchen/gibber.dm
index 8927b54619..1554e0787c 100644
--- a/code/modules/food/kitchen/gibber.dm
+++ b/code/modules/food/kitchen/gibber.dm
@@ -130,11 +130,11 @@
to_chat(user, "This is not suitable for the gibber!")
return
- if(istype(victim,/mob/living/carbon/human) && !emagged)
+ var/datum/species/victim_species = victim?.get_species()
+ if(victim_species?.checks_gibber_safety && !emagged)
to_chat(user, "The gibber safety guard is engaged!")
return
-
if(victim.abiotic(1))
to_chat(user, "Subject may not have abiotic items on.")
return
@@ -175,7 +175,7 @@
return
-/obj/machinery/gibber/proc/startgibbing(mob/user as mob)
+/obj/machinery/gibber/proc/startgibbing(mob/user)
if(src.operating)
return
if(!src.occupant)
@@ -191,8 +191,9 @@
var/slab_count = 2 + occupant.meat_amount
var/slab_type = occupant.meat_type ? occupant.meat_type : /obj/item/reagent_containers/food/snacks/meat
var/slab_nutrition = src.occupant.nutrition / 15
+ var/slab_reagents = round(occupant.reagents?.total_volume / slab_count,1)
- var/list/byproducts = occupant?.butchery_loot?.Copy()
+ var/list/byproducts = occupant.butchery_loot?.Copy()
if(istype(src.occupant,/mob/living/carbon/human))
var/mob/living/carbon/human/H = occupant
@@ -204,14 +205,13 @@
slab_nutrition *= 0.5
slab_nutrition /= slab_count
- while(slab_count)
- slab_count--
+ for(var/slab = 1 to slab_count)
var/obj/item/reagent_containers/food/snacks/meat/new_meat = new slab_type(src, rand(3,8))
if(istype(new_meat))
new_meat.name = "[slab_name] [new_meat.name]"
- new_meat.reagents.add_reagent("nutriment",slab_nutrition)
- if(src.occupant.reagents)
- src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/slab_count,1))
+ new_meat.reagents.add_reagent("nutriment", slab_nutrition)
+ if(slab_reagents > 0)
+ occupant.reagents.trans_to_obj(new_meat, slab_reagents)
add_attack_logs(user,occupant,"Used [src] to gib")
@@ -243,5 +243,3 @@
thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 100 : 50) // Being pelted with bits of meat and bone would hurt.
update_icon()
-
-
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 826cf53a50..6da7dff570 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -54,6 +54,7 @@
var/hunger_factor = 0.05 // Multiplier for hunger.
var/active_regen_mult = 1 // Multiplier for 'Regenerate' power speed, in human_powers.dm
var/hearboost = 0 //Extra ranger on whisper hearing. 0 is adjacent.
+ var/checks_gibber_safety = TRUE // This species is only gibbable in the gibber if it has been emagged.
var/taste_sensitivity = TASTE_NORMAL // How sensitive the species is to minute tastes.
var/allergens = null // Things that will make this species very sick
diff --git a/code/modules/mob/living/carbon/human/species/station/monkey.dm b/code/modules/mob/living/carbon/human/species/station/monkey.dm
index 5dde9cba9a..a80225c3ef 100644
--- a/code/modules/mob/living/carbon/human/species/station/monkey.dm
+++ b/code/modules/mob/living/carbon/human/species/station/monkey.dm
@@ -16,6 +16,8 @@
show_ssd = null
health_hud_intensity = 2
+ checks_gibber_safety = FALSE
+
gibbed_anim = "gibbed-m"
dusted_anim = "dust-m"
death_message = "lets out a faint chimper as it collapses and stops moving..."