mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-28 22:48:38 +01:00
Merge pull request #4709 from Novacat/nova-aifixes
Fixes Spirit for AI Overhaul
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
has_langs = list("Cat")
|
||||
|
||||
var/mob/living/friend = null // Our best pal, who we'll follow. Meow.
|
||||
var/friend_name = null //VOREStation Edit - Lock befriending to this character
|
||||
|
||||
/mob/living/simple_mob/animal/passive/cat/handle_special()
|
||||
if(!stat && prob(2)) // spooky
|
||||
@@ -72,15 +73,19 @@
|
||||
to_chat(L, span("warning", "\The [src] ignores you."))
|
||||
return
|
||||
|
||||
friend = L
|
||||
face_atom(L)
|
||||
to_chat(L, span("notice", "\The [src] is now your friend! Meow."))
|
||||
visible_emote(pick("nuzzles [friend].", "brushes against [friend].", "rubs against [friend].", "purrs."))
|
||||
|
||||
if(has_AI())
|
||||
var/datum/ai_holder/AI = ai_holder
|
||||
AI.set_follow(friend)
|
||||
//VOREStation Edit Start - Adds friend_name var checks
|
||||
if(!friend_name || L.real_name == friend_name)
|
||||
friend = L
|
||||
face_atom(L)
|
||||
to_chat(L, span("notice", "\The [src] is now your friend! Meow."))
|
||||
visible_emote(pick("nuzzles [friend].", "brushes against [friend].", "rubs against [friend].", "purrs."))
|
||||
|
||||
if(has_AI())
|
||||
var/datum/ai_holder/AI = ai_holder
|
||||
AI.set_follow(friend)
|
||||
else
|
||||
to_chat(L, span("notice", "[src] ignores you."))
|
||||
//VOREStation Edit End
|
||||
|
||||
//RUNTIME IS ALIVE! SQUEEEEEEEE~
|
||||
/mob/living/simple_mob/animal/passive/cat/runtime
|
||||
@@ -102,6 +107,7 @@
|
||||
icon_living = "kitten"
|
||||
icon_dead = "kitten_dead"
|
||||
gender = NEUTER
|
||||
holder_type = /obj/item/weapon/holder/cat/kitten //VOREStation Edit
|
||||
|
||||
/mob/living/simple_mob/animal/passive/cat/kitten/initialize()
|
||||
if(gender == NEUTER)
|
||||
@@ -134,3 +140,7 @@
|
||||
say_maybe_target = list("Meow?","Mew?","Mao?")
|
||||
say_got_target = list("MEOW!","HSSSS!","REEER!")
|
||||
|
||||
// VOREStation Edit - Adds generic tactical kittens
|
||||
/obj/item/weapon/holder/cat/kitten
|
||||
icon_state = "kitten"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
/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/weapon/holder/cat/fluff/tabiranth
|
||||
name = "Spirit"
|
||||
desc = "A small, inquisitive feline, who constantly seems to investigate his surroundings."
|
||||
gender = MALE
|
||||
icon_state = "kitten"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
/mob/living/simple_mob/animal/passive/cat/tabiranth
|
||||
name = "Spirit"
|
||||
desc = "A small, inquisitive feline, who constantly seems to investigate his surroundings."
|
||||
icon = 'icons/mob/custom_items_mob.dmi'
|
||||
icon_state = "kitten"
|
||||
item_state = "kitten"
|
||||
icon_living = "kitten"
|
||||
icon_dead = "kitten" //Teleports out
|
||||
gender = MALE
|
||||
holder_type = /obj/item/weapon/holder/cat/fluff/tabiranth
|
||||
friend_name = "Ascian"
|
||||
digestable = 0
|
||||
meat_amount = 0
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
|
||||
/mob/living/simple_mob/animal/passive/cat/tabiranth/handle_special()
|
||||
. = ..()
|
||||
if (has_AI() && friend)
|
||||
var/friend_dist = get_dist(src,friend)
|
||||
if (friend_dist <= 1)
|
||||
if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit)
|
||||
if (prob((friend.stat < DEAD)? 50 : 15))
|
||||
var/verb = pick("meows", "mews", "mrowls")
|
||||
audible_emote(pick("[verb] in distress.", "[verb] anxiously."))
|
||||
else
|
||||
if (prob(5))
|
||||
visible_emote(pick("nuzzles [friend].",
|
||||
"brushes against [friend].",
|
||||
"rubs against [friend].",
|
||||
"purrs."))
|
||||
else if (friend.health <= 50)
|
||||
if (prob(10))
|
||||
var/verb = pick("meows", "mews", "mrowls")
|
||||
audible_emote("[verb] anxiously.")
|
||||
|
||||
//Emergency teleport - Until a spriter makes something better
|
||||
/mob/living/simple_mob/animal/passive/cat/tabiranth/death(gibbed, deathmessage = "teleports away!")
|
||||
overlays = list()
|
||||
icon_state = ""
|
||||
flick("kphaseout",src)
|
||||
spawn(1 SECOND)
|
||||
qdel(src) //Back from whence you came!
|
||||
|
||||
. = ..(FALSE, deathmessage)
|
||||
|
||||
@@ -111,11 +111,13 @@
|
||||
if(stat == CONSCIOUS && !resting)
|
||||
add_eyes()
|
||||
|
||||
/* //VOREStation AI Temporary Removal
|
||||
/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
|
||||
|
||||
@@ -41,11 +41,13 @@
|
||||
vore_pounce_chance = 0 // Beat them into crit before eating.
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/* //VOREStation AI Temporary Removal
|
||||
/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
|
||||
|
||||
@@ -54,11 +54,13 @@
|
||||
health = 200
|
||||
faction = "virgo3b"
|
||||
|
||||
/* //VOREStation AI Temporary Removal
|
||||
/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
|
||||
|
||||
@@ -66,11 +66,13 @@
|
||||
vore_stomach_flavor = "You are squeezed into the sweltering insides of the herbivore rumen."
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/* //VOREStation AI Temporary Removal
|
||||
/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
|
||||
|
||||
@@ -40,11 +40,13 @@
|
||||
vore_active = 1
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/* //VOREStation AI Temporary Removal
|
||||
/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
|
||||
|
||||
@@ -39,11 +39,13 @@
|
||||
vore_pounce_chance = 10
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
|
||||
/* //VOREStation AI Temporary Removal
|
||||
/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
|
||||
|
||||
@@ -161,11 +161,13 @@
|
||||
playsound(src, 'sound/effects/mouse_squeak_loud.ogg', 50, 1)
|
||||
..()
|
||||
|
||||
/* //VOREStation AI Temporary Removal
|
||||
/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
|
||||
|
||||
@@ -109,6 +109,7 @@
|
||||
vore_active = 1
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/* //VOREStation AI Temporary removal
|
||||
/mob/living/simple_mob/hostile/creature/vore
|
||||
vore_active = 1
|
||||
// NO VORE SPRITES
|
||||
@@ -119,6 +120,7 @@
|
||||
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
|
||||
@@ -132,9 +134,10 @@
|
||||
/mob/living/simple_mob/animal/passive/cat
|
||||
vore_active = 1
|
||||
// NO VORE SPRITES
|
||||
specific_targets = 0 // Targeting UNLOCKED
|
||||
//specific_targets = 0 // Targeting UNLOCKED //VOREStation Removal - Incompatable
|
||||
vore_max_size = RESIZE_TINY
|
||||
|
||||
/* //VOREStation AI Temporary removal
|
||||
/mob/living/simple_mob/cat/PunchTarget()
|
||||
if(istype(target_mob,/mob/living/simple_mob/mouse))
|
||||
visible_message("<span class='warning'>\The [src] pounces on \the [target_mob]!]</span>")
|
||||
@@ -156,7 +159,7 @@
|
||||
if (friend == found_atom)
|
||||
return null
|
||||
return ..()
|
||||
|
||||
*/
|
||||
/mob/living/simple_mob/cat/fluff
|
||||
vore_ignores_undigestable = 0
|
||||
vore_pounce_chance = 100
|
||||
@@ -164,6 +167,7 @@
|
||||
vore_default_mode = DM_HOLD //can use the toggle if you wanna be catfood
|
||||
vore_standing_too = TRUE //gonna get pounced
|
||||
|
||||
/* //VOREStation AI Temporary Removal
|
||||
/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
|
||||
@@ -171,12 +175,14 @@
|
||||
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
|
||||
|
||||
/* //VOREStation AI Temporary Removal
|
||||
/mob/living/simple_mob/fox/PunchTarget()
|
||||
if(istype(target_mob,/mob/living/simple_mob/mouse))
|
||||
return EatTarget()
|
||||
@@ -196,6 +202,7 @@
|
||||
if (friend == found_atom)
|
||||
return null
|
||||
return ..()
|
||||
*/
|
||||
|
||||
/mob/living/simple_mob/fox/fluff
|
||||
vore_ignores_undigestable = 0
|
||||
@@ -204,6 +211,7 @@
|
||||
vore_default_mode = DM_HOLD //can use the toggle if you wanna be foxfood
|
||||
vore_standing_too = TRUE // gonna get pounced
|
||||
|
||||
/* //VOREStation AI Temporary Removal
|
||||
/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
|
||||
@@ -211,6 +219,7 @@
|
||||
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
|
||||
@@ -227,20 +236,20 @@
|
||||
vore_active = 1
|
||||
// NO VORE SPRITES
|
||||
|
||||
/mob/living/simple_mob/hostile/carp/holodeck
|
||||
/mob/living/simple_mob/animal/space/carp/holographic
|
||||
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()
|
||||
/mob/living/simple_mob/animal/space/carp/holographic/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)
|
||||
/mob/living/simple_mob/animal/space/carp/holographic/set_safety(var/safe)
|
||||
. = ..()
|
||||
for(var/belly in vore_organs)
|
||||
var/obj/belly/B = belly
|
||||
|
||||
@@ -235,14 +235,13 @@
|
||||
/obj/item/clothing/accessory/medal/bronze_heart,
|
||||
/obj/item/clothing/gloves/ring/seal/signet/fluff/phi)
|
||||
|
||||
/* //VORESTATION AI TEMPORARY REMOVAL
|
||||
// Tabiranth: Ascian
|
||||
/obj/item/weapon/grenade/spawnergrenade/spirit
|
||||
name = "spirit's pet carrier"
|
||||
desc = "Contains kitten."
|
||||
spawner_type = /mob/living/simple_mob/cat/fluff/tabiranth
|
||||
spawner_type = /mob/living/simple_mob/animal/passive/cat/tabiranth
|
||||
deliveryamt = 1
|
||||
*/
|
||||
|
||||
/*
|
||||
Swimsuits, for general use, to avoid arriving to work with your swimsuit.
|
||||
*/
|
||||
|
||||
@@ -2280,6 +2280,7 @@
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\penguin.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\bird.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\cat.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\cat_vr.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\dog.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\fox_vr.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\parrot.dm"
|
||||
@@ -2344,7 +2345,26 @@
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\discipline.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\subtypes.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\xenobio.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\bee.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\catgirl.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\cookiegirl.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\corrupt_hounds.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\deathclaw.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\dino.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\dragon.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\fennec.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\fennix.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\frog.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\hippo.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\horse.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\jelly.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\panther.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\rat.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\redpanda.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\snake.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\wolf.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\wolfgirl.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\vore\zz_vore_overrides.dm"
|
||||
#include "code\modules\mob\living\voice\voice.dm"
|
||||
#include "code\modules\mob\new_player\login.dm"
|
||||
#include "code\modules\mob\new_player\logout.dm"
|
||||
|
||||
Reference in New Issue
Block a user