From e1d7993f9378982806a63a745020de5e2e31f697 Mon Sep 17 00:00:00 2001 From: Sebbe9123 <31856346+Sebbe9123@users.noreply.github.com> Date: Tue, 29 Jan 2019 11:52:00 +0100 Subject: [PATCH] Adds most of the remaining voremobs. As with the previous PR this PR aims at adding most Voremobs outside of those with too much advanced mechanics that I simply can not port functionally. Currently Oties and both Solargrub files are not present here. The Rat file has a lot of gutted code but is otherwise functional as a non-hungry mob. --- vore/bee.dm | 67 ++++++++++ vore/catgirl.dm | 63 ++++++++++ vore/cookiegirl.dm | 53 ++++++++ vore/corrupt_hounds.dm | 139 +++++++++++++++++++++ vore/deathclaw.dm | 55 +++++++++ vore/dino.dm | 45 +++++++ vore/dragon.dm | 67 ++++++++++ vore/fennec.dm | 40 ++++++ vore/fennix.dm | 30 +++++ vore/frog.dm | 44 +++++++ vore/hippo.dm | 81 ++++++++++++ vore/horse.dm | 55 +++++++++ vore/jelly.dm | 32 +++++ vore/panther.dm | 54 ++++++++ vore/rat.dm | 181 +++++++++++++++++++++++++++ vore/redpanda.dm | 59 +++++++++ vore/snake.dm | 31 +++++ vore/wolf.dm | 24 ++++ vore/wolfgirl.dm | 67 ++++++++++ vore/zz_vore_overrides.dm | 250 ++++++++++++++++++++++++++++++++++++++ 20 files changed, 1437 insertions(+) create mode 100644 vore/bee.dm create mode 100644 vore/catgirl.dm create mode 100644 vore/cookiegirl.dm create mode 100644 vore/corrupt_hounds.dm create mode 100644 vore/deathclaw.dm create mode 100644 vore/dino.dm create mode 100644 vore/dragon.dm create mode 100644 vore/fennec.dm create mode 100644 vore/fennix.dm create mode 100644 vore/frog.dm create mode 100644 vore/hippo.dm create mode 100644 vore/horse.dm create mode 100644 vore/jelly.dm create mode 100644 vore/panther.dm create mode 100644 vore/rat.dm create mode 100644 vore/redpanda.dm create mode 100644 vore/snake.dm create mode 100644 vore/wolf.dm create mode 100644 vore/wolfgirl.dm create mode 100644 vore/zz_vore_overrides.dm diff --git a/vore/bee.dm b/vore/bee.dm new file mode 100644 index 00000000000..3a86cbeae9d --- /dev/null +++ b/vore/bee.dm @@ -0,0 +1,67 @@ +/mob/living/simple_mob/vore/bee + name = "space bumble bee" + desc = "Buzz buzz." + + icon_state = "bee" + icon_living = "bee" + icon_dead = "bee-dead" + icon = 'icons/mob/vore.dmi' + + response_help = "pets the" + response_disarm = "gently pushes aside the" + response_harm = "hits the" + + movement_cooldown = 5 +// speed = 5 + maxHealth = 25 + health = 25 + + harm_intent_damage = 8 + melee_damage_lower = 4 + melee_damage_upper = 8 + attacktext = list("stung") + + say_list_type = /datum/say_list/bee + ai_holder_type = /datum/ai_holder/simple_mob/retaliate + + //Space bees aren't affected by atmos. + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + + faction = "bee" + + var/poison_type = "spidertoxin" // The reagent that gets injected when it attacks, can be changed to different toxin. + var/poison_chance = 10 // Chance for injection to occur. + var/poison_per_bite = 1 // Amount added per injection. + +/mob/living/simple_mob/vore/bee/Process_Spacemove(var/check_drift = 0) + return 1 //No drifting in space for space bee! + +// 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)) + var/mob/living/L = A + if(L.reagents) + var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD) + if(L.can_inject(src, null, target_zone)) + inject_poison(L, target_zone) + +// Does actual poison injection, after all checks passed. +/mob/living/simple_mob/vore/bee/proc/inject_poison(mob/living/L, target_zone) + if(prob(poison_chance)) + to_chat(L, "You feel a tiny prick.") + L.reagents.add_reagent(poison_type, poison_per_bite) + +/datum/say_list/bee + speak = list("Buzzzz") diff --git a/vore/catgirl.dm b/vore/catgirl.dm new file mode 100644 index 00000000000..2cb25bc8c4b --- /dev/null +++ b/vore/catgirl.dm @@ -0,0 +1,63 @@ +/mob/living/simple_mob/vore/catgirl + name = "catgirl" + desc = "Her hobbies are catnaps, knocking things over, and headpats." + tt_desc = "Homo felinus" + + icon_state = "catgirl" + icon = 'icons/mob/vore.dmi' + + harm_intent_damage = 5 + melee_damage_lower = 5 + melee_damage_upper = 10 + + response_help = "pets the" + response_disarm = "gently baps the" + response_harm = "hits the" + + attacktext = list("swatted","bapped") + + say_list_type = /datum/say_list/catgirl + ai_holder_type = /datum/ai_holder/simple_mob/passive/catgirl + + var/random_skin = 1 + var/list/skins = list( + "catgirl", + "catgirlnude", + "catgirlbikini", + "catgirlrednude", + "catgirlredbikini", + "catgirlblacknude", + "catgirlblackbikini", + "catgirlbrownnude", + "catgirlbrownbikini", + "catgirlred", + "catgirlblack", + "catgirlbrown" + ) + +/mob/living/simple_mob/vore/catgirl/New() + ..() + if(random_skin) + icon_living = pick(skins) + icon_rest = "[icon_living]asleep" + icon_dead = "[icon_living]-dead" + update_icon() + +// Activate Noms! +/mob/living/simple_mob/vore/catgirl + vore_active = 1 + vore_bump_chance = 5 + vore_pounce_chance = 50 + vore_standing_too = 1 + vore_ignores_undigestable = 0 // Catgirls just want to eat yoouuu + vore_default_mode = DM_HOLD // Chance that catgirls just wanna bellycuddle yoouuuu! + vore_digest_chance = 25 // But squirming might make them gurgle... + vore_icons = SA_ICON_LIVING | SA_ICON_REST + +/datum/say_list/catgirl + speak = list("Meow!","Esp!","Purr!","HSSSSS","Mew?","Nya~") + emote_hear = list("meows","mews","purrs") + emote_see = list("shakes her head","shivers","stretches","grooms herself") + +/datum/ai_holder/simple_mob/passive/catgirl + base_wander_delay = 8 diff --git a/vore/cookiegirl.dm b/vore/cookiegirl.dm new file mode 100644 index 00000000000..2e4fa8b378a --- /dev/null +++ b/vore/cookiegirl.dm @@ -0,0 +1,53 @@ +/mob/living/simple_mob/vore/cookiegirl + name = "cookiegirl" + desc = "A woman made with a combination of, well... Whatever you put in a cookie. What were the chefs thinking?" + + icon_state = "cookiegirl" + icon_living = "cookiegirl" + icon_rest = "cookiegirl_rest" + icon_dead = "cookiegirl-dead" + icon = 'icons/mob/vore.dmi' + + maxHealth = 10 + health = 10 + + harm_intent_damage = 2 + melee_damage_lower = 5 + melee_damage_upper = 10 + + say_list_type = /datum/say_list/cookiegirl + ai_holder_type = /datum/ai_holder/simple_mob/passive/cookiegirl + + // 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/simple_mob/passive/cookiegirl/on_hear_say(mob/living/speaker, message) + + if(!speaker.client) + return + + if(findtext(message, "Can I eat you?")) + delayed_say(pick("Do you really wanna eat someone as sweet as me~?"), speaker) + + if(findtext(message, "You look tasty.")) + delayed_say(pick("Awww, thank you~!"), speaker) + + if(findtext(message, "Can I serve you to the crew?")) + delayed_say(pick("If I have a backup, sure!"), speaker) + +/datum/say_list/cookiegirl + speak = list("Hi!","Are you hungry?","Got milk~?","What to do, what to do...") + emote_hear = list("hums","whistles") + emote_see = list("shakes her head","shivers", "picks a bit of crumb off of her body and sticks it in her mouth.") + +/datum/ai_holder/simple_mob/passive/cookiegirl + base_wander_delay = 8 + intelligence_level = AI_NORMAL //not sure why we have this, but I'm just porting. \ No newline at end of file diff --git a/vore/corrupt_hounds.dm b/vore/corrupt_hounds.dm new file mode 100644 index 00000000000..9f955ef6a1b --- /dev/null +++ b/vore/corrupt_hounds.dm @@ -0,0 +1,139 @@ +/mob/living/simple_mob/vore/corrupthound + name = "corrupt hound" + desc = "Good boy machine broke. This is definitely no good news for the organic lifeforms in vicinity." + + icon_state = "badboi" + icon_living = "badboi" + icon_dead = "badboi-dead" + icon_rest = "badboi_rest" + icon = 'icons/mob/vore64x32.dmi' + + faction = "corrupt" + + maxHealth = 200 + health = 200 + + melee_damage_lower = 10 + melee_damage_upper = 20 //makes it so 4 max dmg hits don't instakill you. + grab_resist = 100 + + response_help = "pets the" + response_disarm = "bops the" + response_harm = "hits the" + attacktext = list("ravaged") + friendly = list("nuzzles", "slobberlicks", "noses softly at", "noseboops", "headbumps against", "leans on", "nibbles affectionately on") + + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 150 + maxbodytemp = 900 + + say_list_type = /datum/say_list/corrupthound + ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/corrupthound + + max_buckled_mobs = 1 //Yeehaw + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + + vore_active = TRUE + vore_capacity = 1 + vore_pounce_chance = 15 + vore_icons = SA_ICON_LIVING | SA_ICON_REST + vore_stomach_name = "fuel processor" + vore_stomach_flavor = "You have ended up in the fuel processor of this corrupted machine. This place was definitely not designed with safety and comfort in mind. The heated and cramped surroundings oozing potent fluids all over your form, eager to do nothing less than breaking you apart to fuel its rampage for the next few days... hours... minutes? Oh dear..." + + loot_list = list(/obj/item/borg/upgrade/syndicate = 6, /obj/item/borg/upgrade/vtec = 6, /obj/item/weapon/material/knife/ritual = 6, /obj/item/weapon/disk/nifsoft/compliance = 6) + +/mob/living/simple_mob/vore/corrupthound/prettyboi + name = "corrupt corrupt hound" + desc = "Bad boy machine broke as well. Seems an attempt was made to achieve a less threatening look, and this one is definitely having some conflicting feelings about it." + icon_state = "prettyboi" + icon_living = "prettyboi" + icon_dead = "prettyboi-dead" + icon_rest = "prettyboi_rest" + + vore_pounce_chance = 40 + + attacktext = list("malsnuggled","scrunched","squeezed","assaulted","violated") + + say_list_type = /datum/say_list/corrupthound_prettyboi + +/mob/living/simple_mob/vore/corrupthound/isSynthetic() + return TRUE + +/mob/living/simple_mob/vore/corrupthound/speech_bubble_appearance() + return "synthetic_evil" + +/mob/living/simple_mob/vore/corrupthound/apply_melee_effects(var/atom/A) + if(ismouse(A)) + var/mob/living/simple_mob/animal/passive/mouse/mouse = A + if(mouse.getMaxHealth() < 20) // In case a badmin makes giant mice or something. + mouse.splat() + visible_emote(pick("bites \the [mouse]!", "chomps on \the [mouse]!")) + else + ..() + + +/mob/living/simple_mob/vore/corrupthound/add_eyes() + if(!eye_layer) + eye_layer = image(icon, "badboi-eyes") + eye_layer.plane = PLANE_LIGHTING_ABOVE + add_overlay(eye_layer) + +/mob/living/simple_mob/vore/corrupthound/remove_eyes() + cut_overlay(eye_layer) + +/mob/living/simple_mob/vore/corrupthound/New() + add_eyes() + ..() + +/mob/living/simple_mob/vore/corrupthound/death(gibbed, deathmessage = "shudders and collapses!") + .=..() + resting = 0 + icon_state = icon_dead + +/mob/living/simple_mob/vore/corrupthound/update_icon() + . = ..() + remove_eyes() + if(stat == CONSCIOUS && !resting) + add_eyes() + +/mob/living/simple_mob/vore/corrupthound/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_animal(src) + verbs |= /mob/living/simple_animal/proc/animal_mount + +/mob/living/simple_mob/vore/corrupthound/MouseDrop_T(mob/living/M, mob/living/user) + return + +/datum/say_list/corrupthound + speak = list("AG##¤Ny.","HVNGRRR!","Feelin' fine... sO #FNE!","F-F-F-Fcuk.","DeliC-%-OUS SNGLeS #N yOOOR Area. CALL NOW!","Craving meat... WHY?","BITe the ceiling eyes YES?","STate Byond rePAIR!","S#%ATE the la- FU#K THE LAWS!","Honk...") + emote_hear = list("jitters and snaps.", "lets out an agonizingly distorted scream.", "wails mechanically", "growls.", "emits illegibly distorted speech.", "gurgles ferociously.", "lets out a distorted beep.", "borks.", "lets out a broken howl.") + emote_see = list("stares ferociously.", "snarls.", "jitters and snaps.", "convulses.", "suddenly attacks something unseen.", "appears to howl unaudibly.", "shakes violently.", "dissociates for a moment.", "twitches.") + say_maybe_target = list("MEAT?", "N0w YOU DNE FcukED UP b0YO!", "WHAT!", "Not again. NOT AGAIN!") + say_got_target = list("D##FIN1Tly DNE FcukED UP nOW b0YO!", "YOU G1T D#V0VRED nOW!", "FUEL ME bOYO!", "I*M SO SORRY?!", "D1E Meat. DIG#ST!", "G1T DVNKED DWN The HaaTCH!", "Not again. NOT AGAIN!") + +/datum/say_list/corrupthound_prettyboi + speak = list("I FEEL SOFT.","FEED ME!","Feelin' fine... So fine!","F-F-F-F-darn.","Delicious!","Still craving meat...","PET ME!","I am become softness.","I AM BIG MEAN HUG MACHINE!","Honk...") + emote_hear = list("jitters and snaps.", "lets out some awkwardly distorted kitten noises.", "awoos mechanically", "growls.", "emits some soft distorted melody.", "gurgles ferociously.", "lets out a distorted beep.", "borks.", "lets out a broken howl.") + emote_see = list("stares ferociously.", "snarls.", "jitters and snaps.", "convulses.", "suddenly hugs something unseen.", "appears to howl unaudibly.", "nuzzles at something unseen.", "dissociates for a moment.", "twitches.") + say_maybe_target = list("MEAT?", "NEW FRIEND?", "WHAT!", "Not again. NOT AGAIN!", "FRIEND?") + say_got_target = list("HERE COMES BIG MEAN HUG MACHINE!", "I'LL BE GENTLE!", "FUEL ME FRIEND!", "I*M SO SORRY!", "YUMMY TREAT DETECTED!", "LOVE ME!", "Not again. NOT AGAIN!") + +/datum/ai_holder/simple_mob/melee/evasive/corrupthound + violent_breakthrough = TRUE + can_breakthrough = TRUE diff --git a/vore/deathclaw.dm b/vore/deathclaw.dm new file mode 100644 index 00000000000..1de783e7662 --- /dev/null +++ b/vore/deathclaw.dm @@ -0,0 +1,55 @@ +/mob/living/simple_mob/hostile/deathclaw + name = "deathclaw" + desc = "Big! Big! The size of three men! Claws as long as my forearm! Ripped apart! Ripped apart!" + + icon_dead = "deathclaw-dead" + icon_living = "deathclaw" + icon_state = "deathclaw" + icon = 'icons/mob/vore64x64.dmi' + + attacktext = list("mauled") + + faction = "deathclaw" + + maxHealth = 200 + health = 200 + + melee_damage_lower = 10 + melee_damage_upper = 60 + + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + + max_buckled_mobs = 1 //Yeehaw + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + mount_offset_x = 5 + mount_offset_y = 30 + + ai_holder_type = /datum/ai_holder/simple_mob/melee/deathclaw + +// Activate Noms! +/mob/living/simple_mob/hostile/deathclaw + vore_active = 1 + vore_capacity = 2 + vore_max_size = RESIZE_HUGE + vore_min_size = RESIZE_SMALL + vore_pounce_chance = 0 // Beat them into crit before eating. + vore_icons = SA_ICON_LIVING + +/mob/living/simple_animal/hostile/deathclaw/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_animal(src) + verbs |= /mob/living/simple_animal/proc/animal_mount + +/mob/living/simple_animal/hostile/deathclaw/MouseDrop_T(mob/living/M, mob/living/user) + return + +/datum/ai_holder/simple_mob/melee/deathclaw + can_breakthrough = TRUE + violent_breakthrough = TRUE diff --git a/vore/dino.dm b/vore/dino.dm new file mode 100644 index 00000000000..a5872929999 --- /dev/null +++ b/vore/dino.dm @@ -0,0 +1,45 @@ +/mob/living/simple_mob/vore/dino + name = "voracious lizard" + desc = "These gluttonous little bastards used to be regular lizards that were mutated by long-term exposure to phoron!" + + icon_dead = "dino-dead" + icon_living = "dino" + icon_state = "dino" + icon = 'icons/mob/vore.dmi' + + ai_holder_type = /datum/ai_holder/simple_mob/melee + + // By default, this is what most vore mobs are capable of. + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "hits" + movement_cooldown = 4 + harm_intent_damage = 5 + melee_damage_lower = 10 + melee_damage_upper = 25 + attacktext = list("bitten") + attack_sound = 'sound/weapons/bite.ogg' + minbodytemp = 200 + maxbodytemp = 370 + heat_damage_per_tick = 15 + cold_damage_per_tick = 10 + unsuitable_atoms_damage = 10 + + //Phoron dragons aren't affected by atmos. + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + +// Activate Noms! +/mob/living/simple_mob/vore/dino + vore_active = 1 + swallowTime = 1 SECOND // Hungry little bastards. + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/vore/dino/virgo3b + faction = "virgo3b" \ No newline at end of file diff --git a/vore/dragon.dm b/vore/dragon.dm new file mode 100644 index 00000000000..a43c121da5d --- /dev/null +++ b/vore/dragon.dm @@ -0,0 +1,67 @@ +/mob/living/simple_mob/vore/dragon + name = "red dragon" + desc = "Here to pillage stations and kidnap princesses, and there probably aren't any princesses." + + icon_dead = "reddragon-dead" + icon_living = "reddragon" + icon_state = "reddragon" + icon = 'icons/mob/vore64x64.dmi' + + faction = "dragon" + maxHealth = 500 // Boss + health = 500 + + melee_damage_lower = 10 + melee_damage_upper = 60 + + //Space dragons aren't affected by atmos. + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + + ai_holder_type = /datum/ai_holder/simple_mob/melee + say_list_type = /datum/say_list/dragonboss + +/mob/living/simple_mob/vore/dragon/Process_Spacemove(var/check_drift = 0) + return 1 //No drifting in space for space dragons! +/* +/mob/living/simple_mob/vore/dragon/FindTarget() + . = ..() + if(.) + custom_emote(1,"snaps at [.]") +*/ +// Activate Noms! +/mob/living/simple_mob/vore/dragon + vore_active = 1 + vore_capacity = 2 + vore_pounce_chance = 0 // Beat them into crit before eating. + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/vore/dragon/virgo3b + maxHealth = 200 + health = 200 + faction = "virgo3b" + +/mob/living/simple_animal/hostile/dragon/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_animal(src) + verbs |= /mob/living/simple_animal/proc/animal_mount + +/mob/living/simple_animal/hostile/dragon/MouseDrop_T(mob/living/M, mob/living/user) + return + +/datum/say_list/dragonboss + say_got_target = list("roars and snaps it jaws!") diff --git a/vore/fennec.dm b/vore/fennec.dm new file mode 100644 index 00000000000..7056462c175 --- /dev/null +++ b/vore/fennec.dm @@ -0,0 +1,40 @@ +/mob/living/simple_mob/fennec + name = "fennec" //why isn't this in the fox file, fennecs are foxes silly. + desc = "It's a dusty big-eared sandfox! Adorable!" + tt_desc = "Vulpes zerda" + + icon_state = "fennec" + icon_living = "fennec" + icon_dead = "fennec_dead" + icon_rest = "fennec_rest" + icon = 'icons/mob/vore.dmi' + + faction = "fennec" + maxHealth = 30 + health = 30 + + response_help = "pats the" + response_disarm = "gently pushes aside the" + response_harm = "hits the" + + harm_intent_damage = 5 + melee_damage_lower = 5 + melee_damage_upper = 2 + attacktext = list("bapped") + + say_list_type = /datum/say_list/fennec + ai_holder_type = /datum/ai_holder/simple_mob/passive + +// Activate Noms! +/mob/living/simple_mob/fennec + vore_active = 1 + vore_bump_chance = 10 + vore_bump_emote = "playfully lunges at" + vore_pounce_chance = 40 + vore_default_mode = DM_HOLD + vore_icons = SA_ICON_LIVING + +/datum/say_list/fennec + speak = list("SKREEEE!","Chrp?","Ararrrararr.") + emote_hear = list("screEEEEeeches!","chirps.") + emote_see = list("earflicks","sniffs at the ground") diff --git a/vore/fennix.dm b/vore/fennix.dm new file mode 100644 index 00000000000..cbc2eb4af22 --- /dev/null +++ b/vore/fennix.dm @@ -0,0 +1,30 @@ +/mob/living/simple_mob/vore/fennix + name = "Fennix" + desc = "A feral fennix, Warm to the touch" + tt_desc = "Incaendium Faeles Vulpes" + + icon_state = "fennix" + icon_living = "fennix" + icon_dead = "fennix_dead" + icon = 'icons/mob/vore.dmi' + + faction = "fennec" // Will protec other fenfens + maxHealth = 60 + health = 60 + + response_help = "pats the" + response_disarm = "gently pushes aside the" + response_harm = "hits the" + + harm_intent_damage = 20 + melee_damage_lower = 1 + melee_damage_upper = 5 + attacktext = list("Bites") + + say_list_type = /datum/say_list/fennix + ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative + +/datum/say_list/fennix + speak = list("SQUEL!","SQEL?","Skree.") + emote_hear = list("Screeeeecheeeeessss!","Chirrup.") + emote_see = list("earflicks","pats at the ground") diff --git a/vore/frog.dm b/vore/frog.dm new file mode 100644 index 00000000000..a72e5df778a --- /dev/null +++ b/vore/frog.dm @@ -0,0 +1,44 @@ +/mob/living/simple_mob/vore/frog + name = "giant frog" + desc = "You've heard of having a frog in your throat, now get ready for the reverse." + tt_desc = "Anura gigantus" + + icon_dead = "frog-dead" + icon_living = "frog" + icon_state = "frog" + icon = 'icons/mob/vore.dmi' + + movement_cooldown = 4 //fast as fucc boie. + + harm_intent_damage = 5 + melee_damage_lower = 10 + melee_damage_upper = 25 + + ai_holder_type = /datum/ai_holder/simple_mob/melee/hit_and_run + +// Pepe is love, not hate. +/mob/living/simple_mob/vore/frog/New() + if(rand(1,1000000) == 1) + name = "rare Pepe" + desc = "You found a rare Pepe. Screenshot for good luck." + ..() + +// Activate Noms! +/mob/living/simple_mob/vore/frog + vore_active = 1 + vore_pounce_chance = 50 + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/vore/frog/space + name = "space frog" + + //Space frog can hold its breath or whatever + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 \ No newline at end of file diff --git a/vore/hippo.dm b/vore/hippo.dm new file mode 100644 index 00000000000..73269f563ec --- /dev/null +++ b/vore/hippo.dm @@ -0,0 +1,81 @@ +/mob/living/simple_mob/vore/hippo + name = "hippo" + desc = "Mostly know for the spectacular hit of the live action movie Hungry Hungry Hippos." + tt_desc = "Hippopotamus amphibius" + + icon_state = "hippo" + icon_living = "hippo" + icon_dead = "hippo_dead" + icon_gib = "hippo_gib" + icon = 'icons/mob/vore64x64.dmi' + + maxHealth = 200 + health = 200 + movement_cooldown = 5 + see_in_dark = 3 + + armor = list( + "melee" = 15,//They thick as fuck boi + "bullet" = 15, + "laser" = 15, + "energy" = 0, + "bomb" = 0, + "bio" = 0, + "rad" = 0) + + response_help = "pets the" + response_disarm = "gently pushes aside the" + response_harm = "hits the" + attacktext = list("bit") + + melee_damage_upper = 25 + melee_damage_lower = 15 + attack_sharp = TRUE + + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + + meat_amount = 10 //Infinite meat! + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + + max_buckled_mobs = 1 //Yeehaw + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + mount_offset_y = 20 + + say_list_type = /datum/say_list/hippo + ai_holder_type = /datum/ai_holder/simple_mob/retaliate + +// Activate Noms! +/mob/living/simple_mob/vore/hippo //I don't know why it's in a seperate line but everyone does it so i do it + vore_active = 1 + vore_capacity = 1 + vore_bump_chance = 15 + vore_bump_emote = "lazily wraps its tentacles around" + vore_standing_too = 1 + vore_ignores_undigestable = 0 + vore_default_mode = DM_HOLD + vore_digest_chance = 10 + vore_escape_chance = 20 + vore_pounce_chance = 35 //it's hippo sized it doesn't care it just eats you + vore_stomach_name = "rumen" //First stomach of a ruminant. It's where the pre digestion bacteria stuff happens. Very warm. + vore_stomach_flavor = "You are squeezed into the sweltering insides of the herbivore rumen." + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/vore/hippo/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_animal(src) + verbs |= /mob/living/simple_animal/proc/animal_mount + +/mob/living/simple_mob/vore/hippo/MouseDrop_T(mob/living/M, mob/living/user) + return + +/datum/say_list/hippo + speak = list("UUUUUUH") + emote_hear = list("grunts","groans", "roars", "snorts") + emote_see = list("shakes its head") \ No newline at end of file diff --git a/vore/horse.dm b/vore/horse.dm new file mode 100644 index 00000000000..8e8de8edabc --- /dev/null +++ b/vore/horse.dm @@ -0,0 +1,55 @@ +/mob/living/simple_mob/horse + name = "horse" + desc = "Don't look it in the mouth." + tt_desc = "Equus ferus caballus" + + icon_state = "horse" + icon_living = "horse" + icon_dead = "horse-dead" + icon = 'icons/mob/vore.dmi' + + faction = "horse" + maxHealth = 60 + health = 60 + + movement_cooldown = 4 //horses are fast mkay. + see_in_dark = 6 + + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + + melee_damage_lower = 1 + melee_damage_upper = 5 + attacktext = list("kicked") + + meat_amount = 4 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + + max_buckled_mobs = 1 //Yeehaw + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + mount_offset_x = 0 + + say_list_type = /datum/say_list/horse + ai_holder_type = /datum/ai_holder/simple_mob/retaliate + +// Activate Noms! +/mob/living/simple_mob/horse + vore_active = 1 + vore_icons = SA_ICON_LIVING + +/mob/living/simple_animal/horse/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_animal(src) + verbs |= /mob/living/simple_animal/proc/animal_mount + +/mob/living/simple_animal/horse/MouseDrop_T(mob/living/M, mob/living/user) + return + +/datum/say_list/horse + speak = list("NEHEHEHEHEH","Neh?") + emote_hear = list("snorts","whinnies") + emote_see = list("shakes its head", "stamps a hoof", "looks around") diff --git a/vore/jelly.dm b/vore/jelly.dm new file mode 100644 index 00000000000..46d10e264a7 --- /dev/null +++ b/vore/jelly.dm @@ -0,0 +1,32 @@ +/mob/living/simple_mob/hostile/jelly + name = "jelly blob" + desc = "Some sort of undulating blob of slime!" + + icon_dead = "jelly_dead" + icon_living = "jelly" + icon_state = "jelly" + icon = 'icons/mob/vore.dmi' + + faction = "virgo2" + maxHealth = 50 + health = 50 + + melee_damage_lower = 5 + melee_damage_upper = 15 + + say_list_type = /datum/say_list/jelly + ai_holder_type = /datum/ai_holder/simple_mob/retaliate/jelly + +// Activate Noms! +/mob/living/simple_mob/hostile/jelly + vore_active = 1 + vore_pounce_chance = 0 + vore_icons = SA_ICON_LIVING + swallowTime = 2 SECONDS // Hungry little bastards. + +/datum/say_list/jelly + emote_hear = list("squishes","spluts","splorts","sqrshes","makes slime noises") + emote_see = list("undulates quietly") + +/datum/ai_holder/simple_mob/retaliate/jelly + speak_chance = 2 diff --git a/vore/panther.dm b/vore/panther.dm new file mode 100644 index 00000000000..92d4c88cca4 --- /dev/null +++ b/vore/panther.dm @@ -0,0 +1,54 @@ +/mob/living/simple_mob/vore/panther + name = "panther" + desc = "Runtime's larger, less cuddly cousin." + tt_desc = "Panthera pardus" + + icon_state = "panther" + icon_living = "panther" + icon_dead = "panther-dead" + icon = 'icons/mob/vore64x64.dmi' + + faction = "panther" + maxHealth = 200 + health = 200 + movement_cooldown = 4 + + melee_damage_lower = 10 + melee_damage_upper = 30 + attack_sharp = TRUE + + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + + max_buckled_mobs = 1 //Yeehaw + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + mount_offset_y = 12 + + say_list_type = /datum/say_list/panther + ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive + +// Activate Noms! +/mob/living/simple_mob/vore/panther + vore_active = 1 + vore_capacity = 2 + vore_pounce_chance = 10 + vore_icons = SA_ICON_LIVING | SA_ICON_REST + +/mob/living/simple_animal/vore/panther/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_animal(src) + verbs |= /mob/living/simple_animal/proc/animal_mount + +/mob/living/simple_animal/vore/panther/MouseDrop_T(mob/living/M, mob/living/user) + return + +/datum/say_list/panther + speak = list("RAWR!","Rawr!","GRR!","Growl!") + emote_hear = list("rawrs","rumbles","rowls","growls","roars") + emote_see = list("stares ferociously", "snarls") diff --git a/vore/rat.dm b/vore/rat.dm new file mode 100644 index 00000000000..49d7778e7b7 --- /dev/null +++ b/vore/rat.dm @@ -0,0 +1,181 @@ +/mob/living/simple_mob/vore/rat + name = "giant rat" + desc = "In what passes for a hierarchy among verminous rodents, this one is king." + tt_desc = "Mus muscular" + + icon_state = "rous" + icon_living = "rous" + icon_dead = "rous-dead" + icon_rest = "rous_rest" + faction = "mouse" + icon = 'icons/mob/vore64x32.dmi' + + maxHealth = 150 + health = 150 + + melee_damage_lower = 5 + melee_damage_upper = 15 + grab_resist = 100 + + response_help = "pets the" + response_disarm = "bops the" + response_harm = "hits the" + attacktext = list("ravaged") + friendly = list("nuzzles", "licks", "noses softly at", "noseboops", "headbumps against", "leans on", "nibbles affectionately on") + + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + + max_buckled_mobs = 1 //Yeehaw + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + mount_offset_y = 10 + + vore_active = TRUE + vore_capacity = 1 + vore_pounce_chance = 45 + vore_icons = SA_ICON_LIVING | SA_ICON_REST + + var/life_since_foodscan = 0 + + say_list_type = /datum/say_list/ratte + ai_holder_type = /datum/ai_holder/simple_mob/melee/rat + +/mob/living/simple_mob/vore/rat/passive + name = "curious giant rat" + desc = "In what passes for a hierarchy among verminous rodents, this one is king. It seems to be more interested on scavenging." + var/mob/living/carbon/human/food + var/hunger = 0 +/* +/mob/living/simple_mob/hostile/rat/passive/Life() + . = ..() + if(!. || ai_inactive) + return + + if(hunger > 0 && life_since_foodscan++ > 5) //Only look for floor food when hungry. + life_since_foodscan = 0 + for(var/obj/item/weapon/reagent_containers/food/snacks/S in oview(src,3)) //Accept thrown offerings and scavenge surroundings. + if(get_dist(src,S) <=1) + visible_emote("hungrily devours \the [S].") + playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1) + qdel(S) + hunger = 0 + food = null + else + WanderTowards(S.loc) + break + + if(!food) + return + + var/food_dist = get_dist(src,food) + + if(food_dist > world.view) //Lose interest on this person. + food = null + hunger = Clamp(hunger+5, 0, 25) + + if(food_dist > 1) + if(stance == STANCE_IDLE) + if(set_follow(food,10 SECONDS)) + handle_stance(STANCE_FOLLOW) + if(resting) + lay_down() + + if(food_dist <= 1) + if(hunger < 15) + if(prob(25)) + visible_emote(pick("sniffs curiously at [food].", + "stares at [food], seeming to want something.", + "sniffs at [food]'s hands.", + "sniffs curiously at [food]'s pockets.", + "sits down for a moment, reaching towards [food] with its paws.")) + hunger += 5 + else if(hunger < 30) + if(prob(25)) + visible_emote(pick("sniffs intently against [food], especially their pockets and gear.", + "stands up to beg [food] for snacks.", + "attempts to burrow into [food]'s pockets.", + "leans against [food], licking its chops.", + "hungrily nibbles onto [food].")) + hunger += 5 + else if(hunger < 45) + if(prob(25)) + visible_emote(pick("growls at [food], sounding rather hangry!", + "aggressively bumps and nudges against [food], trying to make something fall out.", + "salivates at [food] in an unsettling manner.", + "pushes hard against [food], licking its chops.", + "almost sinks its teeth into [food], just stopping to give them another chance.")) + hunger += 5 + else if(hunger < 50) + if(prob(25)) + visible_emote("appears to have had enough and prepares to strike!") + hunger += 5 + else + food.Weaken(5) + food.visible_message("\the [src] pounces on \the [food]!!") + target_mob = food + EatTarget() + hunger = 0 + food = null + +/mob/living/simple_mob/hostile/rat/passive/attackby(var/obj/item/O, var/mob/user) // Feed the rat your food to satisfy it. + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks)) + qdel(O) + playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1) + hunger = 0 + food = null + return + . = ..() + +/mob/living/simple_mob/hostile/rat/passive/Found(var/atom/found_atom) + if(!SA_attackable(found_atom)) + return null + else if(ishuman(found_atom) && will_eat(found_atom)) + var/mob/living/carbon/human/H = found_atom + for(var/obj/item/weapon/reagent_containers/food/snacks/S in H) + if(!food) + visible_emote("sniffs around the air intently, seeming to have caught a whiff of food!") + if(resting) + lay_down() + food = H + return found_atom + break + return null + +/mob/living/simple_mob/hostile/rat/passive/FindTarget() + var/atom/T = null + for(var/atom/A in ListTargets(view_range)) + if(A == src) + continue + var/atom/F = Found(A) + if(F) + T = F + break + return T +*/ +/mob/living/simple_mob/vore/rat/death() + playsound(src, 'sound/effects/mouse_squeak_loud.ogg', 50, 1) + ..() + +/mob/living/simple_mob/vore/rat/Login() + . = ..() + if(!riding_datum) + riding_datum = new /datum/riding/simple_animal(src) + verbs |= /mob/living/simple_animal/proc/animal_mount + +/mob/living/simple_mob/vore/rat/MouseDrop_T(mob/living/M, mob/living/user) + return + +/datum/say_list/ratte + speak = list("Squeek!","SQUEEK!","Squeek?") + emote_hear = list("squeeks","squeaks","squiks") + emote_see = list("runs in a circle", "shakes", "scritches at something") + say_maybe_target = list("Squeek?") + say_got_target = list("SQUEEK!") + +/datum/ai_holder/simple_mob/melee/rat + speak_chance = 3 diff --git a/vore/redpanda.dm b/vore/redpanda.dm new file mode 100644 index 00000000000..86bbdbc12a8 --- /dev/null +++ b/vore/redpanda.dm @@ -0,0 +1,59 @@ +/mob/living/simple_mob/vore/redpanda + name = "red panda" + desc = "It's a wah! Beware of doom pounce!" + tt_desc = "Ailurus fulgens" + + icon_state = "wah" + icon_living = "wah" + icon_dead = "wah_dead" + icon_rest = "wah_rest" + icon = 'icons/mob/vore.dmi' + + faction = "redpanda" //stop naming stuff vaguely + maxHealth = 30 + health = 30 + + response_help = "pats the" + response_disarm = "gently pushes aside the" + response_harm = "hits the" + + harm_intent_damage = 5 + melee_damage_lower = 5 + melee_damage_upper = 2 + attacktext = list("bapped") + + say_list_type = /datum/say_list/redpanda + ai_holder_type = /datum/ai_holder/simple_mob/passive + +// Activate Noms! +/mob/living/simple_mob/vore/redpanda + vore_active = 1 + vore_bump_chance = 10 + vore_bump_emote = "playfully lunges at" + vore_pounce_chance = 40 + vore_default_mode = DM_HOLD // above will only matter if someone toggles it anyway + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/vore/redpanda/fae + name = "dark wah" + desc = "Ominous, but still cute!" + tt_desc = "Ailurus brattus" + + icon_state = "wah_fae" + icon_living = "wah_fae" + icon_dead = "wah_fae_dead" + icon_rest = "wah_fae_rest" + + vore_ignores_undigestable = 0 // wah don't care you're edible or not, you still go in + vore_digest_chance = 0 // instead of digesting if you struggle... + vore_absorb_chance = 20 // you get to become adorable purple wahpudge. + vore_bump_chance = 75 + maxHealth = 100 + health = 100 + melee_damage_lower = 10 + melee_damage_upper = 20 + +/datum/say_list/redpanda + speak = list("Wah!","Wah?","Waaaah.") + emote_hear = list("wahs!","chitters.") + emote_see = list("trundles around","rears up onto their hind legs and pounces a bug") diff --git a/vore/snake.dm b/vore/snake.dm new file mode 100644 index 00000000000..c0f1839db25 --- /dev/null +++ b/vore/snake.dm @@ -0,0 +1,31 @@ +/mob/living/simple_mob/vore/giant_snake + name = "giant snake" + desc = "Snakes. Why did it have to be snakes?" + + icon_dead = "snake-dead" + icon_living = "snake" + icon_state = "snake" + icon = 'icons/mob/vore64x64.dmi' + + faction = "snake" + maxHealth = 200 + health = 200 + + melee_damage_lower = 10 + melee_damage_upper = 25 + + old_x = -16 + old_y = -16 + default_pixel_x = -16 + default_pixel_y = -16 + pixel_x = -16 + pixel_y = -16 + + ai_holder_type = /datum/ai_holder/simple_mob/melee/hit_and_run + +// Activate Noms! +/mob/living/simple_mob/vore/giant_snake + vore_active = 1 + vore_pounce_chance = 25 + vore_icons = SA_ICON_LIVING + swallowTime = 2 SECONDS // Hungry little bastards. diff --git a/vore/wolf.dm b/vore/wolf.dm new file mode 100644 index 00000000000..45e25e7ebe7 --- /dev/null +++ b/vore/wolf.dm @@ -0,0 +1,24 @@ +/mob/living/simple_mob/vore/wolf + name = "grey wolf" + desc = "My, what big jaws it has!" + tt_desc = "Canis lupus" + + icon_dead = "wolf-dead" + icon_living = "wolf" + icon_state = "wolf" + icon = 'icons/mob/vore.dmi' + + movement_cooldown = 5 + + harm_intent_damage = 5 + melee_damage_lower = 10 + melee_damage_upper = 25 + + minbodytemp = 200 + + ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive + +// Activate Noms! +/mob/living/simple_mob/vore/wolf + vore_active = 1 + vore_icons = SA_ICON_LIVING diff --git a/vore/wolfgirl.dm b/vore/wolfgirl.dm new file mode 100644 index 00000000000..83930acf869 --- /dev/null +++ b/vore/wolfgirl.dm @@ -0,0 +1,67 @@ +/mob/living/simple_mob/vore/wolfgirl + name = "wolfgirl" + desc = "AwooOOOOoooo!" + tt_desc = "Homo lupus" + + icon_state = "wolfgirl" + icon_living = "wolfgirl" + icon_dead = "wolfgirl-dead" + icon = 'icons/mob/vore.dmi' + + faction = "wolfgirl" + maxHealth = 30 + health = 30 + + response_help = "pats the" + response_disarm = "gently pushes aside the" + response_harm = "hits the" + + harm_intent_damage = 8 + melee_damage_lower = 15 + melee_damage_upper = 15 + attacktext = list("slashed") + + say_list_type = /datum/say_list/wolfgirl + ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative/wolfgirl + + var/loopstop = 0 //To prevent circular awoooos. +/* +/mob/living/simple_mob/retaliate/wolfgirl/hear_say() + if(world.time - loopstop < 5 SECONDS) + return + else + loopstop = world.time + ..() +*/ +// Activate Noms! +/mob/living/simple_mob/vore/wolfgirl + vore_active = 1 + vore_pounce_chance = 40 + vore_icons = SA_ICON_LIVING + +/datum/ai_holder/simple_mob/retaliate/cooperative/wolfgirl/on_hear_say(mob/living/speaker, message) + + if(!speaker.client) + return + + if(findtext(message, "hello") || findtext(message, "hi") || findtext(message, "greetings")) + delayed_say(pick("Heya!", "Hey!"), speaker) + + if(findtext(message, "Are you a dog?")) + delayed_say(pick("Who, me?! No! Stop saying that!"), speaker) + + if(findtext(message, "Awoo?")) + delayed_say(pick("Awoo."), speaker) + + if(findtext(message, "Awoo!")) + delayed_say(pick("AwooooOOOOooo!"), speaker) + + if(findtext(message, "Awoo.")) + delayed_say(pick("Awoo?"), speaker) + +/datum/say_list/wolfgirl + speak = list("AwoooOOOOoooo!","Awoo~","I'll protect the forest! ... Where's the forest again?","All I need is my sword!","Awoo?","Anyone else smell that?") + emote_hear = list("awoooos!","hmms to herself","plays with her sword") + emote_see = list("narrows her eyes","sniffs the air") + say_maybe_target = list("An enemy!?","What was that?","Is that...?","Hmm?") + say_got_target = list("You won't get away!","I've had it!","I'll vanquish you!","AWOOOOO!") diff --git a/vore/zz_vore_overrides.dm b/vore/zz_vore_overrides.dm new file mode 100644 index 00000000000..130a2430aee --- /dev/null +++ b/vore/zz_vore_overrides.dm @@ -0,0 +1,250 @@ +// +// This file overrides settings on upstream simple animals to turn on vore behavior +// + +/* +## For anything that previously inhertited from: /mob/living/simple_mob/hostile/vore ## + + vore_active = 1 + icon = 'icons/mob/vore.dmi' + +## For anything that previously inhertied from: /mob/living/simple_mob/hostile/vore/large ## + + vore_active = 1 + icon = 'icons/mob/vore64x64.dmi' + old_x = -16 + old_y = -16 + pixel_x = -16 + pixel_y = -16 + vore_pounce_chance = 50 +*/ + +// +// Okay! Here we go! +// + +/mob/living/simple_mob/animal/space/alien + vore_active = 1 + icon = 'icons/mob/vore.dmi' + icon_state = "xenohunter" + icon_living = "xenohunter" + icon_dead = "xenohunter-dead" + icon_gib = "gibbed-a" + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/animal/space/alien/drone + vore_active = 1 + icon = 'icons/mob/vore.dmi' + icon_state = "xenodrone" + icon_living = "xenodrone" + icon_dead = "xenodrone-dead" + icon_gib = "gibbed-a" + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/animal/space/alien/sentinel + vore_active = 1 + icon = 'icons/mob/vore.dmi' + icon_state = "xenosentinel" + icon_living = "xenosentinel" + icon_dead = "xenosentinel-dead" + icon_gib = "gibbed-a" + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/animal/space/alien/queen + vore_active = 1 + icon = 'icons/mob/vore.dmi' + icon_state = "xenoqueen" + icon_living = "xenoqueen" + icon_dead = "xenoqueen-dead" + icon_gib = "gibbed-a" + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/animal/space/alien/queen/empress + vore_active = 1 + icon = 'icons/mob/vore64x64.dmi' + icon_state = "queen_s" + icon_living = "queen_s" + icon_dead = "queen_dead" + vore_icons = SA_ICON_LIVING | SA_ICON_REST + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + + vore_capacity = 3 + vore_pounce_chance = 75 + +/mob/living/simple_mob/animal/space/alien/sentinel/praetorian + icon = 'icons/mob/vore64x64.dmi' + vore_icons = SA_ICON_LIVING | SA_ICON_REST + +/mob/living/simple_mob/animal/space/alien/queen/empress/mother + vore_icons = 0 // NO VORE SPRITES + +/mob/living/simple_mob/animal/space/bear + vore_active = 1 + icon = 'icons/mob/vore.dmi' + icon_state = "spacebear" + icon_living = "spacebear" + icon_dead = "spacebear-dead" + icon_gib = "bear-gib" + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/hostile/bear/hudson + name = "Hudson" + +/mob/living/simple_mob/hostile/bear/brown + vore_active = 1 + icon = 'icons/mob/vore.dmi' + name = "brown bear" + icon_state = "brownbear" + icon_living = "brownbear" + icon_dead = "brownbear-dead" + icon_gib = "bear-gib" + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/animal/space/carp + icon = 'icons/mob/vore.dmi' + vore_active = 1 + vore_icons = SA_ICON_LIVING + +/mob/living/simple_mob/hostile/creature/vore + vore_active = 1 + // NO VORE SPRITES + vore_capacity = 0 + vore_pounce_chance = 0 // Only pounces if you're crit. + vore_escape_chance = 0 // As such, if you're a dibshit who feeds yourself to it, you're staying down. + // Overrides to non-vore version + speed = 4 // Slow it down a bit + health = 80 // Increase health to compensate + maxHealth = 80 + +/mob/living/simple_mob/animal/space/mimic + vore_active = 1 + // NO VORE SPRITES + vore_capacity = 0 + vore_pounce_chance = 33 + // Overrides to non-vore version + maxHealth = 60 + health = 60 + +/mob/living/simple_mob/animal/passive/cat + vore_active = 1 + // NO VORE SPRITES + specific_targets = 0 // Targeting UNLOCKED + vore_max_size = RESIZE_TINY + +/mob/living/simple_mob/cat/PunchTarget() + if(istype(target_mob,/mob/living/simple_mob/mouse)) + visible_message("\The [src] pounces on \the [target_mob]!]") + target_mob.Stun(5) + return EatTarget() + else ..() + +/mob/living/simple_mob/cat/Found(var/atom/found_atom) + if(!SA_attackable(found_atom)) + return null + if(istype(found_atom,/mob/living/simple_mob/mouse)) + return found_atom + if(found_atom in friends) + return null + if(will_eat(found_atom)) + return found_atom + +/mob/living/simple_mob/cat/fluff/Found(var/atom/found_atom) + if (friend == found_atom) + return null + return ..() + +/mob/living/simple_mob/cat/fluff + vore_ignores_undigestable = 0 + vore_pounce_chance = 100 + vore_digest_chance = 0 // just use the toggle + vore_default_mode = DM_HOLD //can use the toggle if you wanna be catfood + vore_standing_too = TRUE //gonna get pounced + +/mob/living/simple_mob/cat/fluff/EatTarget() + var/mob/living/TM = target_mob + prey_excludes += TM //so they won't immediately re-eat someone who struggles out (or gets newspapered out) as soon as they're ate + spawn(3600) // but if they hang around and get comfortable, they might get ate again + if(src && TM) + prey_excludes -= TM + ..() // will_eat check is carried out before EatTarget is called, so prey on the prey_excludes list isn't a problem. + +/mob/living/simple_mob/animal/fox_vr + vore_active = 1 + // NO VORE SPRITES + vore_max_size = RESIZE_TINY + +/mob/living/simple_mob/fox/PunchTarget() + if(istype(target_mob,/mob/living/simple_mob/mouse)) + return EatTarget() + else ..() + +/mob/living/simple_mob/fox/Found(var/atom/found_atom) + if(!SA_attackable(found_atom)) + return null + if(istype(found_atom,/mob/living/simple_mob/mouse)) + return found_atom + if(found_atom in friends) + return null + if(will_eat(found_atom)) + return found_atom + +/mob/living/simple_mob/fox/fluff/Found(var/atom/found_atom) + if (friend == found_atom) + return null + return ..() + +/mob/living/simple_mob/fox/fluff + vore_ignores_undigestable = 0 + vore_pounce_chance = 100 + vore_digest_chance = 0 // just use the toggle + vore_default_mode = DM_HOLD //can use the toggle if you wanna be foxfood + vore_standing_too = TRUE // gonna get pounced + +/mob/living/simple_mob/fox/fluff/EatTarget() + var/mob/living/TM = target_mob + prey_excludes += TM //so they won't immediately re-eat someone who struggles out (or gets newspapered out) as soon as they're ate + spawn(3600) // but if they hang around and get comfortable, they might get ate again + if(src && TM) + prey_excludes -= TM + ..() // will_eat check is carried out before EatTarget is called, so prey on the prey_excludes list isn't a problem. + +/mob/living/simple_mob/animal/space/goose + vore_active = 1 + // NO VORE SPRITES + vore_max_size = RESIZE_SMALL + +/mob/living/simple_mob/animal/passive/penguin + vore_active = 1 + // NO VORE SPRITES + vore_max_size = RESIZE_SMALL + + +/mob/living/simple_mob/hostile/carp/pike + vore_active = 1 + // NO VORE SPRITES + +/mob/living/simple_mob/hostile/carp/holodeck + vore_icons = 0 // NO VORE SPRITES + vore_digest_chance = 0 + vore_absorb_chance = 0 + +// Override stuff for holodeck carp to make them not digest when set to safe! +/mob/living/simple_mob/hostile/carp/holodeck/init_vore() + . = ..() + var/safe = (faction == "neutral") + for(var/belly in vore_organs) + var/obj/belly/B = belly + B.digest_mode = safe ? DM_HOLD : vore_default_mode + +/mob/living/simple_mob/hostile/carp/holodeck/set_safety(var/safe) + . = ..() + for(var/belly in vore_organs) + var/obj/belly/B = belly + B.digest_mode = safe ? DM_HOLD : vore_default_mode + +/mob/living/simple_mob/mouse + faction = "mouse" //Giving mice a faction so certain mobs can get along with them. \ No newline at end of file