From c5cd0a7eb94429b9c94e7eedefbc27feba234e82 Mon Sep 17 00:00:00 2001 From: Casey Date: Sat, 4 Feb 2023 00:37:09 -0500 Subject: [PATCH 1/2] Merge pull request #14419 from Heroman3003/send-help-brad-and-duke-are-holding-me-hostage-and-making-me-code-stuffing-features Adds Food Stuffer trait --- code/modules/food/food/snacks.dm | 43 ++++++++++++++++--- .../species/station/traits_vr/neutral.dm | 12 +++++- code/modules/vore/eating/living_vr.dm | 9 ++++ 3 files changed, 57 insertions(+), 7 deletions(-) diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 09cddf7347..8a60c8014a 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -91,6 +91,8 @@ if(istype(M, /mob/living/carbon)) //TODO: replace with standard_feed_mob() call. + var/swallow_whole = FALSE + var/obj/belly/belly_target // These are surprise tools that will help us later var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25) if(M == user) //If you're eating it yourself @@ -151,6 +153,12 @@ unconcious = TRUE blocked = H.check_mouth_coverage() + if(isliving(user)) // We definitely are, but never hurts to check + var/mob/living/L = user + swallow_whole = L.stuffing_feeder + if(swallow_whole) + belly_target = M.vore_selected + if(unconcious) to_chat(user, "You can't feed [H] through \the [blocked] while they are unconcious!") return @@ -159,21 +167,44 @@ to_chat(user, "\The [blocked] is in the way!") return - user.visible_message("[user] attempts to feed [M] [src].") + if(swallow_whole) + if(!(M.feeding)) + to_chat(user, "You can't feed [H] a whole [src] as they refuse to be fed whole things!") + return + if(!belly_target) + to_chat(user, "You can't feed [H] a whole [src] as they don't appear to have a belly to fit it!") + return + + if(swallow_whole) + user.visible_message("[user] attempts to make [M] consume [src] whole into their [belly_target].") + else + user.visible_message("[user] attempts to feed [M] [src].") + + var/feed_duration = 3 SECONDS + if(swallow_whole) + feed_duration = 5 SECONDS user.setClickCooldown(user.get_attack_speed(src)) - if(!do_mob(user, M)) return + if(!do_mob(user, M, feed_duration)) return - //Do we really care about this - add_attack_logs(user,M,"Fed with [src.name] containing [reagentlist(src)]", admin_notify = FALSE) + if(swallow_whole && !belly_target) return // Just in case we lost belly mid-feed - user.visible_message("[user] feeds [M] [src].") + if(swallow_whole) + add_attack_logs(user,M,"Whole-fed with [src.name] containing [reagentlist(src)] into [belly_target]", admin_notify = FALSE) + user.visible_message("[user] successfully forces [src] into [M]'s [belly_target].") + else + add_attack_logs(user,M,"Fed with [src.name] containing [reagentlist(src)]", admin_notify = FALSE) + user.visible_message("[user] feeds [M] [src].") else to_chat(user, "This creature does not seem to have a mouth!") return - if(reagents) //Handle ingestion of the reagent. + if(swallow_whole) + user.drop_item() + forceMove(belly_target) + return 1 + else if(reagents) //Handle ingestion of the reagent. playsound(M,'sound/items/eatfood.ogg', rand(10,50), 1) if(reagents.total_volume) //CHOMPStation Edit Begin diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index 7aae2b9d69..40c925d7ef 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -142,6 +142,16 @@ ..(S,H) H.verbs |= /mob/living/carbon/human/proc/slime_feed +/datum/trait/neutral/stuffing_feeder + name = "Food Stuffer" + desc = "Allows you to feed food to other people whole, rather than bite by bite." + cost = 0 + custom_only = FALSE + +/datum/trait/neutral/stuffing_feeder/apply(var/datum/species/S,var/mob/living/carbon/human/H) + ..(S,H) + H.verbs |= /mob/living/proc/toggle_stuffing_mode + /datum/trait/neutral/hard_vore name = "Hard Vore" //CHOMPedit Renamed Brutal Predation to Hard Vore, because some people don't know what this actually does desc = "Allows you to tear off limbs & tear out internal organs." @@ -428,7 +438,7 @@ cost = 0 custom_only = FALSE var_changes = list("chem_strength_alcohol" = 1.5) - + /datum/trait/neutral/alcohol_tolerance_reset name = "Liver of Unremarkableness" desc = "This trait exists to reset alcohol (in)tolerance for non-custom species to baseline normal. It can only be taken by Skrell, Tajara, Unathi, Diona, and Prometheans, as it would have no effect on other species." diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 3d9ae887fc..cc32178387 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -41,6 +41,7 @@ var/can_be_drop_pred = FALSE var/allow_spontaneous_tf = FALSE // Obviously. var/next_preyloop // For Fancy sound internal loop + var/stuffing_feeder = FALSE // Can feed foods to others whole, like trash eater can eat them on their own. var/adminbus_trash = FALSE // For abusing trash eater for event shenanigans. var/adminbus_eat_minerals = FALSE // This creature subsists on a diet of pure adminium. var/vis_height = 32 // Sprite height used for resize features. @@ -1050,6 +1051,14 @@ else //Not the droids we're looking for. to_chat(src, "You pause for a moment to examine [I] and realize it's not even worth the energy to chew.") //If it ain't ore or the type of sheets we can eat, bugger off! +/mob/living/proc/toggle_stuffing_mode() + set name = "Toggle feeding mode" + set category = "Abilities" + set desc = "Switch whether you will try to feed other people food whole or normally, bite by bite." + + stuffing_feeder = !stuffing_feeder + to_chat(src, "You will [stuffing_feeder ? "now" : "no longer"] try to feed food whole.") + /mob/living/proc/switch_scaling() set name = "Switch scaling mode" set category = "Preferences"