diff --git a/code/__DEFINES/voreconstants.dm b/code/__DEFINES/voreconstants.dm index 710b11ae..55f27dac 100644 --- a/code/__DEFINES/voreconstants.dm +++ b/code/__DEFINES/voreconstants.dm @@ -6,6 +6,7 @@ #define DM_DRAGON "Dragon" #define DM_ABSORB "Absorb" #define DM_UNABSORB "Un-absorb" +#define DM_FATTEN "Fatten" #define isbelly(A) istype(A, /obj/belly) diff --git a/modular_citadel/code/modules/vore/eating/belly_dat_vr.dm b/modular_citadel/code/modules/vore/eating/belly_dat_vr.dm index 3886eb14..47bac4bf 100644 --- a/modular_citadel/code/modules/vore/eating/belly_dat_vr.dm +++ b/modular_citadel/code/modules/vore/eating/belly_dat_vr.dm @@ -35,7 +35,7 @@ var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone. var/tmp/digest_mode = DM_HOLD // Whether or not to digest. Default to not digest. - var/tmp/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_NOISY) // Possible digest modes + var/tmp/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_NOISY, DM_FATTEN) // Possible digest modes var/tmp/mob/living/owner // The mob whose belly this is. var/tmp/list/internal_contents = list() // People/Things you've eaten into this belly! var/tmp/is_full // Flag for if digested remeans are present. (for disposal messages) diff --git a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm index 965d2ff3..2b46c376 100644 --- a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm +++ b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm @@ -40,7 +40,7 @@ var/is_wet = TRUE // Is this belly inside slimy parts? //I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere. - var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_NOISY,DM_ABSORB,DM_UNABSORB) // Possible digest modes + var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_NOISY,DM_ABSORB,DM_UNABSORB, DM_FATTEN) // Possible digest modes var/tmp/mob/living/owner // The mob whose belly this is. var/tmp/digest_mode = DM_HOLD // Current mode the belly is set to from digest_modes (+transform_modes if human) @@ -227,6 +227,11 @@ items_preserved.Cut() owner.update_icons() + var/mob/living/carbon/predator = owner + if(iscarbon(predator)) + if(digest_mode == DM_FATTEN && predator.fat_hider == src) + predator.fat_show() + return count // Release a specific atom from the contents of this belly into the owning mob's location. @@ -273,6 +278,17 @@ if(!silent) owner.visible_message("[owner] expels [M] from their [lowertext(name)]!") owner.update_icons() + + var/mob/living/carbon/predator = owner + if(iscarbon(predator)) + if(digest_mode == DM_FATTEN && predator.fat_hider == src) + var/preys_fatness = 0 + for(var/mob/living/carbon/prey in contents) + preys_fatness += prey.fatness + if(preys_fatness > predator.fatness) + predator.fat_hide(preys_fatness, src) + else + predator.fat_show() return TRUE // Actually perform the mechanics of devouring the tasty prey. diff --git a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm index 2d7dbaa2..f52c6073 100644 --- a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm +++ b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm @@ -62,6 +62,25 @@ if(digest_mode == DM_HOLD) return SSBELLIES_PROCESSED +///////////////////////////// DM_FATTEN ///////////////////////////// + if(digest_mode == DM_FATTEN) + var/preys_fatness = 0 + var/mob/living/carbon/predator = owner + if(iscarbon(predator)) + for(var/mob/living/M in contents) + var/mob/living/carbon/prey = M + if(iscarbon(prey) && predator.fatness_real) + prey.adjust_fatness(predator.fatness_real * 0.01, FATTENING_TYPE_FOOD) + predator.adjust_fatness(-predator.fatness_real * 0.01, FATTENING_TYPE_FOOD) + predator.nutrition -= 5 + preys_fatness += prey.fatness + + if(!predator.fat_hider || predator.fat_hider == src) + if(preys_fatness > predator.fatness) + predator.fat_hide(preys_fatness, src) + if(predator.fat_hider != src) + predator.fat_show() + //////////////////////////// DM_DIGEST //////////////////////////// else if(digest_mode == DM_DIGEST) if(HAS_TRAIT(owner, TRAIT_PACIFISM)) //obvious. diff --git a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm index ae7da895..19ea3004 100644 --- a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm +++ b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm @@ -119,6 +119,8 @@ spanstyle = "color:purple;" if(DM_DRAGON) spanstyle = "color:blue;" + if(DM_FATTEN) + spanstyle = "color:orange;" dat += " ([B.contents.len])" @@ -731,4 +733,4 @@ user.client.prefs_vr.feeding = user.feeding //Refresh when interacted with, returning 1 makes vore_look.Topic update - return 1 \ No newline at end of file + return 1