diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index aa1cdcb40a..efd405a4dc 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -111,5 +111,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
/obj/item/storage/pill_bottle/penis_enlargement = 2,
/obj/item/clothing/shoes/wheelys = 1,
/obj/item/clothing/shoes/kindleKicks = 1,
+ /obj/item/autosurgeon/penis = 1,
"" = 3
))
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index 614cc65cbb..43be1fa2a7 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -60,7 +60,7 @@
if("Scientist")
heirloom_type = /obj/item/toy/plush/slimeplushie
if("Assistant")
- heirloom_type = /obj/item/storage/toolbox/mechanical/old/heirloom
+ heirloom_type = /obj/item/clothing/gloves/cut/family
if("Chaplain")
heirloom_type = /obj/item/camera/spooky/family
if("Captain")
diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm
index f4f386b7d0..002190c341 100644
--- a/code/game/objects/items/storage/briefcase.dm
+++ b/code/game/objects/items/storage/briefcase.dm
@@ -40,7 +40,8 @@
/obj/item/storage/briefcase/lawyer/family
name = "battered briefcase"
- desc = "An old briefcase, this one has seen better days in its time. It's clear they don't make them nowadays as good as they used to. The corners are modified with metal trim adding in weight!"
+ desc = "An old briefcase, this one has seen better days in its time. It's clear they don't make them nowadays as good as they used to. Comes with an added belt clip!"
+ slot_flags = ITEM_SLOT_BELT
/obj/item/storage/briefcase/lawyer/family/PopulateContents()
new /obj/item/stamp/law(src)
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 1b20501f21..0cd96eaebc 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -7,6 +7,7 @@
permeability_coefficient = 0.05
item_color="yellow"
resistance_flags = NONE
+ var/can_be_cut = 1
/obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap
desc = "These gloves are cheap knockoffs of the coveted ones - no way this can end badly."
@@ -17,6 +18,7 @@
permeability_coefficient = 0.05
item_color="yellow"
resistance_flags = NONE
+ var/can_be_cut = 1
/obj/item/clothing/gloves/color/fyellow/New()
..()
@@ -30,6 +32,38 @@
. = ..()
siemens_coefficient = pick(0,0,0,0.5,0.5,0.5,0.75)
+/obj/item/clothing/gloves/cut
+ desc = "These gloves would protect the wearer from electric shock.. if the fingers were covered."
+ name = "fingerless insulated gloves"
+ icon_state = "yellowcut"
+ item_state = "yglovescut"
+ siemens_coefficient = 1
+ permeability_coefficient = 1
+ resistance_flags = NONE
+ transfer_prints = TRUE
+
+/obj/item/clothing/gloves/cut/family
+ desc = "The old gloves your great grandfather stole from Engineering, many moons ago. They've seen some tough times recently."
+ name = "fingerless insulated gloves"
+
+/obj/item/clothing/gloves/color/yellow/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/wirecutters))
+ if(can_be_cut && icon_state == initial(icon_state))//only if not dyed
+ to_chat(user, "You snip the fingertips off of [src].")
+ I.play_tool_sound(src)
+ new /obj/item/clothing/gloves/cut(drop_location())
+ qdel(src)
+ ..()
+
+/obj/item/clothing/gloves/color/fyellow/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/wirecutters))
+ if(can_be_cut && icon_state == initial(icon_state))//only if not dyed
+ to_chat(user, "You snip the fingertips off of [src].")
+ I.play_tool_sound(src)
+ new /obj/item/clothing/gloves/cut(drop_location())
+ qdel(src)
+ ..()
+
/obj/item/clothing/gloves/color/black
desc = "These gloves are fire-resistant."
name = "black gloves"
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 449bbe361f..e434bc4e95 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -124,6 +124,18 @@
if(user == anchored || !isturf(user.loc))
return FALSE
+ //pacifist vore check.
+ if(user.pulling && HAS_TRAIT(user, TRAIT_PACIFISM) && user.voremode) //they can only do heals, noisy guts, absorbing (technically not harm)
+ if(ismob(user.pulling))
+ var/mob/P = user.pulling
+ if(src != user)
+ to_chat(user, "You can't risk digestion!")
+ return FALSE
+ else
+ user.vore_attack(user, P, user)
+ return
+
+ //normal vore check.
if(user.pulling && user.grab_state == GRAB_AGGRESSIVE && user.voremode)
if(ismob(user.pulling))
var/mob/P = user.pulling
diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm
index 787175e05d..0e3793d2e4 100644
--- a/code/modules/surgery/organs/autosurgeon.dm
+++ b/code/modules/surgery/organs/autosurgeon.dm
@@ -98,3 +98,8 @@
/obj/item/autosurgeon/reviver
starting_organ = /obj/item/organ/cyberimp/chest/reviver
+
+/obj/item/autosurgeon/penis
+ desc = "A single use autosurgeon that contains a penis. A screwdriver can be used to remove it, but implants can't be placed back in."
+ uses = 1
+ starting_organ = /obj/item/organ/genital/penis
diff --git a/html/changelogs/AutoChangeLog-pr-8587.yml b/html/changelogs/AutoChangeLog-pr-8587.yml
new file mode 100644
index 0000000000..4b7fdeb64c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8587.yml
@@ -0,0 +1,4 @@
+author: "SkullyRoberts"
+delete-after: True
+changes:
+ - rscadd: "Penis autosurgeon as rare maint loot."
diff --git a/html/changelogs/AutoChangeLog-pr-8599.yml b/html/changelogs/AutoChangeLog-pr-8599.yml
new file mode 100644
index 0000000000..41134f4d5b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8599.yml
@@ -0,0 +1,4 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - rscadd: "Pacifists can eat people for heal belly or noisy. Digestive modes are auto-swapped to noisy"
diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi
index c41cdf06d0..b69c6c88b1 100644
Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index 619db9290d..7e0d03abd5 100644
Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ
diff --git a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
index 542241e9f2..6b6a3d30cc 100644
--- a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
@@ -49,13 +49,16 @@
var/sound/pred_death = sound(get_sfx("death_pred"))
var/turf/source = get_turf(owner)
-
///////////////////////////// DM_HOLD /////////////////////////////
if(digest_mode == DM_HOLD)
return SSBELLIES_PROCESSED
//////////////////////////// DM_DIGEST ////////////////////////////
else if(digest_mode == DM_DIGEST)
+ if(HAS_TRAIT(owner, TRAIT_PACIFISM)) //obvious.
+ digest_mode = DM_NOISY
+ return
+
for (var/mob/living/M in contents)
if(prob(25))
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
@@ -210,6 +213,10 @@
//////////////////////////DM_DRAGON /////////////////////////////////////
//because dragons need snowflake guts
if(digest_mode == DM_DRAGON)
+ if(HAS_TRAIT(owner, TRAIT_PACIFISM)) //imagine var editing this when you're a pacifist. smh
+ digest_mode = DM_NOISY
+ return
+
for (var/mob/living/M in contents)
if(prob(55)) //if you're hearing this, you're a vore ho anyway.
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)