Skip to content

Commit

Permalink
completely removes simplemob automated vore support (#6714)
Browse files Browse the repository at this point in the history
  • Loading branch information
silicons committed Sep 1, 2024
1 parent 0da8419 commit 2f758a1
Show file tree
Hide file tree
Showing 33 changed files with 6 additions and 609 deletions.
2 changes: 1 addition & 1 deletion code/modules/events/carp_migration.dm
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(carp_count,list())// a list of Z levels (string), associated wi
if(WEST)
return locate(clearance, rand(clearance, world.maxy - clearance), Z)

/datum/event/carp_migration/proc/check_gib(var/mob/living/simple_mob/hostile/carp/M) //awesome road kills
/datum/event/carp_migration/proc/check_gib(var/mob/living/simple_mob/animal/space/carp/M) //awesome road kills
if(M.health <= 0 && prob(60))
M.gib()

Expand Down
1 change: 0 additions & 1 deletion code/modules/maps/away_missions/140x140/snowfield.dm
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@
icon_living = "polarbear"
icon_dead = "polarbear-dead"
icon_gib = "bear-gib"
vore_active = 1
say_list_type = /datum/say_list/polar_bear

faction = "polar"
Expand Down
141 changes: 3 additions & 138 deletions code/modules/mob/living/simple_mob/simple_mob_vr.dm
Original file line number Diff line number Diff line change
@@ -1,113 +1,29 @@
// Flags for specifying which states we have vore icon_states for.
#define SA_ICON_LIVING 0x01
#define SA_ICON_DEAD 0x02
#define SA_ICON_REST 0x04

/mob/living/simple_mob
base_attack_cooldown = 15

var/temperature_range = 40 // How close will they get to environmental temperature before their body stops changing its heat

var/vore_active = 0 // If vore behavior is enabled for this mob

var/vore_capacity = 1 // The capacity (in people) this person can hold
var/vore_max_size = RESIZE_HUGE // The max size this mob will consider eating
var/vore_min_size = RESIZE_TINY // The min size this mob will consider eating
var/vore_bump_chance = 0 // Chance of trying to eat anyone that bumps into them, regardless of hostility
var/vore_bump_emote = "grabs hold of" // Allow messages for bumpnom mobs to have a flavorful bumpnom
var/vore_pounce_chance = 5 // Chance of this mob knocking down an opponent
var/vore_pounce_cooldown = 0 // Cooldown timer - if it fails a pounce it won't pounce again for a while
var/vore_pounce_successrate = 100 // Chance of a pounce succeeding against a theoretical 0-health opponent
var/vore_pounce_falloff = 1 // Success rate falloff per %health of target mob.
var/vore_pounce_maxhealth = 80 // Mob will not attempt to pounce targets above this %health
var/vore_standing_too = 0 // Can also eat non-stunned mobs
var/vore_ignores_undigestable = 1 // Refuse to eat mobs who are undigestable by the prefs toggle.
var/swallowsound = null // What noise plays when you succeed in eating the mob.

var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
var/vore_default_flags = 0 // No flags
var/vore_digest_chance = 25 // Chance to switch to digest mode if resisted
var/vore_absorb_chance = 0 // Chance to switch to absorb mode if resisted
var/vore_escape_chance = 25 // Chance of resisting out of mob

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_default_item_mode = IM_DIGEST_FOOD //How belly will interact with items
var/vore_default_contaminates = TRUE //Will it contaminate?
var/vore_default_contamination_flavor = "Generic" //Contamination descriptors
var/vore_default_contamination_color = "green" //Contamination color

var/vore_fullness = 0 // How "full" the belly is (controls icons)
var/vore_icons = 0 // Bitfield for which fields we have vore icons for.
var/life_disabled = 0 // For performance reasons

var/obj/item/radio/headset/mob_headset/mob_radio //Adminbus headset for simplemob shenanigans.

// Release belly contents before being gc'd!
/mob/living/simple_mob/Destroy()
release_vore_contents()
prey_excludes.Cut()
. = ..()
return ..()

//For all those ID-having mobs
/mob/living/simple_mob/GetIdCard()
if(access_card)
return access_card

// Update fullness based on size & quantity of belly contents
/mob/living/simple_mob/proc/update_fullness()
var/new_fullness = 0
for(var/belly in vore_organs)
var/obj/belly/B = belly
for(var/mob/living/M in B)
new_fullness += M.size_multiplier
new_fullness = round(new_fullness, 1) // Because intervals of 0.25 are going to make sprite artists cry.
vore_fullness = min(vore_capacity, new_fullness)

/mob/living/simple_mob/update_icon()
. = ..()
if(vore_active)
update_fullness()
if(!vore_fullness)
return 0
else if((stat == CONSCIOUS) && (!icon_rest || !resting || !incapacitated(INCAPACITATION_DISABLED)) && (vore_icons & SA_ICON_LIVING))
icon_state = "[icon_living]-[vore_fullness]"
else if(stat >= DEAD && (vore_icons & SA_ICON_DEAD))
icon_state = "[icon_dead]-[vore_fullness]"
else if(((stat == UNCONSCIOUS) || resting || incapacitated(INCAPACITATION_DISABLED) ) && icon_rest && (vore_icons & SA_ICON_REST))
icon_state = "[icon_rest]-[vore_fullness]"

/mob/living/simple_mob/proc/will_eat(var/mob/living/M)
return FALSE // no more mobvore

// Attempt to eat target
// TODO - Review this. Could be some issues here
/mob/living/simple_mob/proc/EatTarget(var/mob/living/M)
var/old_target = M
set_AI_busy(1)
. = animal_nom(M)
playsound(src, swallowsound, 50, 1)
update_icon()

if(.)
// If we succesfully ate them, lose the target
set_AI_busy(0)
return old_target
else if(old_target == M)
// If we didn't but they are still our target, go back to attack.
// but don't run the handler immediately, wait until next tick
// Otherwise we'll be in a possibly infinate loop
set_AI_busy(0)

/mob/living/simple_mob/death()
release_vore_contents()
. = ..()
return ..()

// Make sure you don't call ..() on this one, otherwise you duplicate work.
/mob/living/simple_mob/init_vore()
if(!vore_active || no_vore)
return
. = ..()

if(!IsAdvancedToolUser())
add_verb(src, /mob/living/simple_mob/proc/animal_nom)
Expand All @@ -116,63 +32,12 @@
if(LAZYLEN(vore_organs))
return

// Since they have bellies, add verbs to toggle settings on them.
add_verb(src, /mob/living/simple_mob/proc/toggle_digestion)
add_verb(src, /mob/living/simple_mob/proc/toggle_fancygurgle)

//A much more detailed version of the default /living implementation
var/obj/belly/B = new /obj/belly(src)
vore_selected = B
B.immutable = 1
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.mode_flags = vore_default_flags
B.item_digest_mode = vore_default_item_mode
B.contaminates = vore_default_contaminates
B.contamination_flavor = vore_default_contamination_flavor
B.contamination_color = vore_default_contamination_color
B.escapable = vore_escape_chance > 0
B.escapechance = vore_escape_chance
B.digestchance = vore_digest_chance
B.absorbchance = vore_absorb_chance
B.human_prey_swallow_time = swallowTime
B.nonhuman_prey_swallow_time = swallowTime
B.vore_verb = "swallow"
B.emote_lists[DM_HOLD] = list( // We need more that aren't repetitive. I suck at endo. -Ace
"The insides knead at you gently for a moment.",
"The guts glorp wetly around you as some air shifts.",
"The predator takes a deep breath and sighs, shifting you somewhat.",
"The stomach squeezes you tight for a moment, then relaxes harmlessly.",
"The predator's calm breathing and thumping heartbeat pulses around you.",
"The warm walls kneads harmlessly against you.",
"The liquids churn around you, though there doesn't seem to be much effect.",
"The sound of bodily movements drown out everything for a moment.",
"The predator's movements gently force you into a different position.")
B.emote_lists[DM_DIGEST] = 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.")

// Checks to see if mob doesn't like this kind of turf
/mob/living/simple_mob/IMove(turf/newloc, safety = TRUE)
if(istype(newloc,/turf/simulated/floor/sky))
return MOVEMENT_FAILED //Mobs aren't that stupid, probably
return ..() // Procede as normal.

//Grab = Nomf
/mob/living/simple_mob/UnarmedAttack(var/atom/A, var/proximity)
. = ..()

if(a_intent == INTENT_GRAB && isliving(A) && !has_hands)
animal_nom(A)

// todo: shitcode, rewrite on say rewrite
/mob/living/simple_mob/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
switch(message_mode)
Expand Down
32 changes: 0 additions & 32 deletions code/modules/mob/living/simple_mob/subtypes/animal/pets/cat_vr.dm
Original file line number Diff line number Diff line change
@@ -1,35 +1,3 @@
/mob/living/simple_mob/animal/passive/cat/runtime/init_vore()
..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
B.desc = "The slimy wet insides of Runtime! Not quite as clean as the cat on the outside."

B.emote_lists[DM_HOLD] = list(
"Runtime's stomach kneads gently on you and you're fairly sure you can hear her start purring.",
"Most of what you can hear are slick noises, Runtime breathing, and distant purring.",
"Runtime seems perfectly happy to have you in there. She lays down for a moment to groom and squishes you against the walls.",
"The CMO's pet seems to have found a patient of her own, and is treating them with warm, wet kneading walls.",
"Runtime mostly just lazes about, and you're left to simmer in the hot, slick guts unharmed.",
"Runtime's master might let you out of this fleshy prison, eventually. Maybe. Hopefully?")

B.emote_lists[DM_DIGEST] = list(
"Runtime's stomach is treating you rather like a mouse, kneading acids into you with vigor.",
"A thick dollop of bellyslime drips from above while the CMO's pet's gut works on churning you up.",
"Runtime seems to have decided you're food, based on the acrid air in her guts and the pooling fluids.",
"Runtime's stomach tries to claim you, kneading and pressing inwards again and again against your form.",
"Runtime flops onto their side for a minute, spilling acids over your form as you remain trapped in them.",
"The CMO's pet doesn't seem to think you're any different from any other meal. At least, their stomach doesn't.")

B.digest_messages_prey = list(
"Runtime's stomach slowly melts your body away. Her stomach refuses to give up it's onslaught, continuing until you're nothing more than nutrients for her body to absorb.",
"After an agonizing amount of time, Runtime's stomach finally manages to claim you, melting you down and adding you to her stomach.",
"Runtime's stomach continues to slowly work away at your body before tightly squeezing around you once more, causing the remainder of your body to lose form and melt away into the digesting slop around you.",
"Runtime's slimy gut continues to constantly squeeze and knead away at your body, the bulge you create inside of her stomach growing smaller as time progresses before soon dissapearing completely as you melt away.",
"Runtime's belly lets off a soft groan as your body finally gives out, the cat's eyes growing heavy as it settles down to enjoy it's good meal.",
"Runtime purrs happily as you slowly slip away inside of her gut, your body's nutrients are then used to put a layer of padding on the now pudgy cat.",
"The acids inside of Runtime's stomach, aided by the constant motions of the smooth walls surrounding you finally manage to melt you away into nothing more mush. She curls up on the floor, slowly kneading the air as her stomach moves its contents — including you — deeper into her digestive system.",
"Your form begins to slowly soften and break apart, rounding out Runtime's swollen belly. The carnivorous cat rumbles and purrs happily at the feeling of such a filling meal.")

// Ascian's Tactical Kitten
/obj/item/holder/cat/fluff/tabiranth
name = "Spirit"
Expand Down
96 changes: 0 additions & 96 deletions code/modules/mob/living/simple_mob/subtypes/animal/pets/fox_vr.dm
Original file line number Diff line number Diff line change
Expand Up @@ -62,28 +62,6 @@
wander = TRUE
base_wander_delay = 4

/mob/living/simple_mob/animal/passive/fox/init_vore()
..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
B.desc = "Slick foxguts. Cute on the outside, slimy on the inside!"

B.emote_lists[DM_HOLD] = list(
"The foxguts knead and churn around you harmlessly.",
"With a loud glorp, some air shifts inside the belly.",
"A thick drop of warm bellyslime drips onto you from above.",
"The fox turns suddenly, causing you to shift a little.",
"During a moment of relative silence, you can hear the fox breathing.",
"The slimey stomach walls squeeze you lightly, then relax.")

B.emote_lists[DM_DIGEST] = list(
"The guts knead at you, trying to work you into thick soup.",
"You're ground on by the slimey walls, treated like a mouse.",
"The acrid air is hard to breathe, and stings at your lungs.",
"You can feel the acids coating you, ground in by the slick walls.",
"The fox's stomach churns hungrily over your form, trying to take you.",
"With a loud glorp, the stomach spills more acids onto you.")

/mob/living/simple_mob/animal/passive/fox/apply_melee_effects(var/atom/A)
if(ismouse(A))
var/mob/living/simple_mob/animal/passive/mouse/mouse = A
Expand Down Expand Up @@ -144,58 +122,6 @@
var/datum/ai_holder/polaris/AI = ai_holder
AI.set_follow(friend)

/* Old fox friend AI, I'm not sure how to add the fancy "friend is dead" stuff so I'm commenting it out for someone else to figure it out, this is just baseline stuff.
//Basic friend AI
/mob/living/simple_mob/animal/passive/fox/fluff
var/mob/living/carbon/human/friend
var/befriend_job = null
/mob/living/simple_mob/animal/passive/fox/fluff/Life(seconds, times_fired)
. = ..()
if(!. || !friend) return
var/friend_dist = get_dist(src,friend)
if (friend_dist <= 4)
if(stance == STANCE_IDLE)
if(set_follow(friend))
handle_stance(STANCE_FOLLOW)
if (friend_dist <= 1)
if (friend.stat >= DEAD || friend.health <= config_legacy.health_threshold_softcrit)
if (prob((friend.stat < DEAD)? 50 : 15))
var/verb = pick("yaps", "howls", "whines")
audible_emote(pick("[verb] in distress.", "[verb] anxiously."))
else
if (prob(5))
visible_emote(pick("nips [friend].",
"brushes against [friend].",
"tugs on [friend].",
"chrrrrs."))
else if (friend.health <= 50)
if (prob(10))
var/verb = pick("yaps", "howls", "whines")
audible_emote("[verb] anxiously.")
/mob/living/simple_mob/animal/passive/fox/fluff/verb/friend()
set name = "Become Friends"
set category = VERB_CATEGORY_IC
set src in view(1)
if(friend && usr == friend)
setDir(get_dir(src, friend))
say("Yap!")
return
if (!(ishuman(usr) && befriend_job && usr.job == befriend_job))
to_chat(usr, "<span class='notice'>[src] ignores you.</span>")
return
friend = usr
setDir(get_dir(src, friend))
say("Yap!")
*/
/obj/item/reagent_containers/food/snacks/meat/fox
name = "Fox meat"
desc = "The fox doesn't say a goddamn thing, now."
Expand All @@ -212,28 +138,6 @@
makes_dirt = FALSE // No more dirt
randomized = FALSE

/mob/living/simple_mob/animal/passive/fox/renault/init_vore()
..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
B.desc = "Slick foxguts. They seem somehow more regal than perhaps other foxes!"

B.emote_lists[DM_HOLD] = list(
"Renault's stomach walls squeeze around you more tightly for a moment, before relaxing, as if testing you a bit.",
"There's a sudden squeezing as Renault presses a forepaw against his gut over you, squeezing you against the slick walls.",
"The 'head fox' has a stomach that seems to think you belong to it. It might be hard to argue, as it kneads at your form.",
"If being in the captain's fox is a promotion, it might not feel like one. The belly just coats you with more thick foxslime.",
"It doesn't seem like Renault wants to let you out. The stomach and owner possessively squeeze around you.",
"Renault's stomach walls squeeze closer, as he belches quietly, before swallowing more air. Does he do that on purpose?")

B.emote_lists[DM_DIGEST] = list(
"Renault's stomach walls grind hungrily inwards, kneading acids against your form, and treating you like any other food.",
"The captain's fox impatiently kneads and works acids against you, trying to claim your body for fuel.",
"The walls knead in firmly, squeezing and tossing you around briefly in disorienting aggression.",
"Renault belches, letting the remaining air grow more acrid. It burns your lungs with each breath.",
"A thick glob of acids drip down from above, adding to the pool of caustic fluids in Renault's belly.",
"There's a loud gurgle as the stomach declares the intent to make you a part of Renault.")

/mob/living/simple_mob/animal/passive/fox/syndicate
name = "syndi-fox"
desc = "It's a DASTARDLY fox! The horror! Call the shuttle!"
Expand Down
2 changes: 0 additions & 2 deletions code/modules/mob/living/simple_mob/subtypes/vore/bee.dm
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,6 @@

// Activate Noms!
/mob/living/simple_mob/vore/bee
vore_active = 1
vore_icons = SA_ICON_LIVING

/mob/living/simple_mob/vore/bee/apply_melee_effects(var/atom/A)
if(isliving(A))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,6 @@

// Activate Noms!
/mob/living/simple_mob/vore/cookiegirl
vore_active = 1
vore_bump_chance = 2
vore_pounce_chance = 25
vore_standing_too = 1
vore_ignores_undigestable = 0 // Do they look like they care?
vore_default_mode = DM_HOLD // They're cookiepeople, what do you expect?
vore_digest_chance = 10 // Gonna become as sweet as sugar, soon.
vore_icons = SA_ICON_LIVING | SA_ICON_REST

/datum/ai_holder/polaris/simple_mob/passive/cookiegirl/on_hear_say(mob/living/speaker, message)

Expand Down
Loading

0 comments on commit 2f758a1

Please sign in to comment.