|
|
|
@@ -1,21 +1,29 @@
|
|
|
|
|
#define VORACIOUS_CHANCE 40
|
|
|
|
|
#define VORE_SWALLOW_TIME 50
|
|
|
|
|
|
|
|
|
|
/mob/living/simple_animal
|
|
|
|
|
// List of targets excluded (for now) from being eaten by this mob.
|
|
|
|
|
var/list/prey_exclusions = list()
|
|
|
|
|
devourable = FALSE //insurance because who knows.
|
|
|
|
|
digestable = TRUE //I mean, if it's devourable it should also be digestible
|
|
|
|
|
var/vore_active = FALSE // If vore behavior is enabled for this mob
|
|
|
|
|
//Specific vore behaviors
|
|
|
|
|
var/vore_active = FALSE // If vore behavior is enabled for this mob
|
|
|
|
|
var/isPredator = FALSE //Are they capable of performing and pre-defined vore actions for their species?
|
|
|
|
|
var/swallowTime = VORE_SWALLOW_TIME //How long it takes to eat Human and other Simple_animal prey in 1/10 of a second. The default is 5 seconds.
|
|
|
|
|
var/list/prey_excludes = list() //For excluding people from being eaten.
|
|
|
|
|
var/voracious_chance = VORACIOUS_CHANCE //Mob AI Engagement probability when rolling between regular melee strike and a vore attempt, default 40%
|
|
|
|
|
|
|
|
|
|
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
|
|
|
|
|
var/vore_digest_chance = 25 // Chance to switch to digest mode if resisted
|
|
|
|
|
var/vore_escape_chance = 25 // Chance of resisting out of mob
|
|
|
|
|
var/vore_absorb_chance = 0 // chance of absorbtion by mob
|
|
|
|
|
// Vore belly interactions
|
|
|
|
|
// Most mobs are only going to have the one gut. Multi-gut set ups should refer to Ash Drake's dragon_vore.dm for set up.
|
|
|
|
|
|
|
|
|
|
var/vore_stomach_name // The name for the first belly if not "stomach"
|
|
|
|
|
var/vore_stomach_flavor // The flavortext for the first belly if not the default
|
|
|
|
|
|
|
|
|
|
var/vore_fullness = 0 // How "full" the belly is (controls icons)
|
|
|
|
|
var/list/living_mobs = list()
|
|
|
|
|
var/vore_default_sound = "Gulp" // Default vore sound
|
|
|
|
|
var/vore_default_release = "Splatter" // Default release sound
|
|
|
|
|
var/vore_wetness = TRUE // Default for a wet belly
|
|
|
|
|
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
|
|
|
|
|
var/vore_digest_chance = VORACIOUS_CHANCE // Chance to switch to digest mode if resisted, default 40%
|
|
|
|
|
var/vore_escape_chance = VORACIOUS_CHANCE // Chance of resisting out of mob, default 40%
|
|
|
|
|
var/vore_absorb_chance = 0 // chance of absorbtion by mob, default 0%
|
|
|
|
|
var/vore_stomach_name // The name for the first belly if not "stomach"
|
|
|
|
|
var/vore_stomach_flavor // The flavortext for the first belly if not the default
|
|
|
|
|
|
|
|
|
|
//Icon Memes
|
|
|
|
|
var/vore_fullness = 0 // How "full" the belly is (controls icons)
|
|
|
|
|
|
|
|
|
|
// Release belly contents before being gc'd!
|
|
|
|
|
/mob/living/simple_animal/Destroy()
|
|
|
|
@@ -34,35 +42,19 @@
|
|
|
|
|
|
|
|
|
|
vore_fullness = new_fullness
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
/mob/living/simple_animal/proc/swallow_check()
|
|
|
|
|
for(var/I in vore_organs)
|
|
|
|
|
var/obj/belly/B = vore_organs[I]
|
|
|
|
|
if(vore_active)
|
|
|
|
|
update_fullness()
|
|
|
|
|
if(!vore_fullness)
|
|
|
|
|
// Nothing
|
|
|
|
|
return
|
|
|
|
|
else
|
|
|
|
|
addtimer(CALLBACK(src, .proc/swallow_mob), B.swallow_time)
|
|
|
|
|
|
|
|
|
|
/mob/living/simple_animal/proc/swallow_mob()
|
|
|
|
|
for(var/I in vore_organs)
|
|
|
|
|
var/obj/belly/B = vore_organs[I]
|
|
|
|
|
for(var/mob/living/M in B.contents)
|
|
|
|
|
B.transfer_contents(M, transferlocation)
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/mob/living/simple_animal/death()
|
|
|
|
|
release_vore_contents(silent = TRUE)
|
|
|
|
|
. = ..()
|
|
|
|
|
|
|
|
|
|
// Simple animals have only one belly. This creates it (if it isn't already set up)
|
|
|
|
|
/mob/living/simple_animal/proc/init_belly()
|
|
|
|
|
/mob/living/simple_animal/init_vore()
|
|
|
|
|
vore_init = TRUE
|
|
|
|
|
if(vore_organs.len)
|
|
|
|
|
return
|
|
|
|
|
if(no_vore) //If it can't vore, let's not give it a stomach.
|
|
|
|
|
return
|
|
|
|
|
if(vore_active && !IsAdvancedToolUser()) //vore active, but doesn't have thumbs to grab people with.
|
|
|
|
|
verbs |= /mob/living/simple_animal/proc/animal_nom
|
|
|
|
|
|
|
|
|
|
var/obj/belly/B = new /obj/belly(src)
|
|
|
|
|
vore_selected = B
|
|
|
|
@@ -70,6 +62,9 @@
|
|
|
|
|
B.name = vore_stomach_name ? vore_stomach_name : "stomach"
|
|
|
|
|
B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]."
|
|
|
|
|
B.digest_mode = vore_default_mode
|
|
|
|
|
B.vore_sound = vore_default_sound
|
|
|
|
|
B.release_sound = vore_default_release
|
|
|
|
|
B.is_wet = vore_wetness
|
|
|
|
|
B.escapable = vore_escape_chance > 0
|
|
|
|
|
B.escapechance = vore_escape_chance
|
|
|
|
|
B.digestchance = vore_digest_chance
|
|
|
|
@@ -97,21 +92,42 @@
|
|
|
|
|
"The juices pooling beneath you sizzle against your sore skin.",
|
|
|
|
|
"The churning walls slowly pulverize you into meaty nutrients.",
|
|
|
|
|
"The stomach glorps and gurgles as it tries to work you into slop.")
|
|
|
|
|
/* B.emote_lists[DM_ITEMWEAK] = list(
|
|
|
|
|
"The burning acids eat away at your form.",
|
|
|
|
|
"The muscular stomach flesh grinds harshly against you.",
|
|
|
|
|
"The caustic air stings your chest when you try to breathe.",
|
|
|
|
|
"The slimy guts squeeze inward to help the digestive juices soften you up.",
|
|
|
|
|
"The onslaught against your body doesn't seem to be letting up; you're food now.",
|
|
|
|
|
"The predator's body ripples and crushes against you as digestive enzymes pull you apart.",
|
|
|
|
|
"The juices pooling beneath you sizzle against your sore skin.",
|
|
|
|
|
"The churning walls slowly pulverize you into meaty nutrients.",
|
|
|
|
|
"The stomach glorps and gurgles as it tries to work you into slop.")*/
|
|
|
|
|
|
|
|
|
|
//Grab = Nomf
|
|
|
|
|
/*
|
|
|
|
|
/mob/living/simple_animal/UnarmedAttack(var/atom/A, var/proximity)
|
|
|
|
|
. = ..()
|
|
|
|
|
//
|
|
|
|
|
// Simple proc for animals to have their digestion toggled on/off externally
|
|
|
|
|
//
|
|
|
|
|
/mob/living/simple_animal/verb/toggle_digestion()
|
|
|
|
|
set name = "Toggle Animal's Digestion"
|
|
|
|
|
set desc = "Enables digestion on this mob for 20 minutes."
|
|
|
|
|
set category = "Object"
|
|
|
|
|
set src in oview(1)
|
|
|
|
|
|
|
|
|
|
if(a_intent == I_GRAB && isliving(A) && !has_hands)
|
|
|
|
|
animal_nom(A)*/
|
|
|
|
|
var/datum/belly/B = vore_organs[vore_selected]
|
|
|
|
|
if(faction != usr.faction)
|
|
|
|
|
to_chat(usr,"<span class='warning'>This predator isn't friendly, and doesn't give a shit about your opinions of it digesting you.</span>")
|
|
|
|
|
return
|
|
|
|
|
if(B.digest_mode == "Hold")
|
|
|
|
|
var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel")
|
|
|
|
|
if(confirm == "Enable")
|
|
|
|
|
B.digest_mode = "Digest"
|
|
|
|
|
sleep(20 MINUTES) //12000=20 minutes
|
|
|
|
|
B.digest_mode = "Hold"
|
|
|
|
|
else
|
|
|
|
|
var/confirm = alert(usr, "This mob is currently set to digest all stomach contents. Do you want to disable this?", "Disabling [name]'s Digestion", "Disable", "Cancel")
|
|
|
|
|
if(confirm == "Disable")
|
|
|
|
|
B.digest_mode = "Hold"
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// Simple nom proc for if you get ckey'd into a simple_animal mob! Avoids grabs.
|
|
|
|
|
//
|
|
|
|
|
/mob/living/simple_animal/proc/animal_nom(var/mob/living/T in oview(1))
|
|
|
|
|
set name = "Animal Nom"
|
|
|
|
|
set category = "Vore"
|
|
|
|
|
set desc = "Since you can't grab, you get a verb!"
|
|
|
|
|
|
|
|
|
|
if (stat != CONSCIOUS)
|
|
|
|
|
return
|
|
|
|
|
if (T.devourable == FALSE)
|
|
|
|
|
to_chat(usr, "<span class='warning'>You can't eat this!</span>")
|
|
|
|
|
return
|
|
|
|
|
return vore_attack(usr,T,usr)
|
|
|
|
|