Files
Bubberstation/code/modules/holodeck/holo_effect.dm
Ben10Omintrix ce6f2724cd basic cats and mini kitchen helpers (#79800)
## About The Pull Request
this pr transforms cats into basic pets! cats now have some new
behavior. they can carry fish and hunted mice in their mouths to deliver
it to kittens, and kittens will eat them.


![catmouse](https://github.com/tgstation/tgstation/assets/138636438/8f146be4-c7b2-41d3-8301-734be49b5efc)

![catfish](https://github.com/tgstation/tgstation/assets/138636438/f8df54f2-9183-406d-afbd-f90f415f7f3d)

if a kitten sees you holding food, it will point at you and meow loudly
until u give it the food.
becareful when putting male cats near each other, there is a small
chance they get into a heated argument and meow loudly at each other
until one of them flees.
also added a new small cat house for cats. cats will use these homes if
u build one near them (using 5 wood planks)


![cathouse](https://github.com/tgstation/tgstation/assets/138636438/9515a78c-fdfe-461b-bad2-6b497117c694)

Chefs can craft the cake cat and breadcat. these are useful cats because
they can help the chef around in the kitchen. they will turn stoves and
grills off when food is ready, so they dont burn. and the cake cat will
help the chef decorate his donuts

## Why It's Good For The Game
refactors cats into basic mobs and gives them a deeper ai

## Changelog
🆑
refactor: cats are now basic pets. please report any bugs.
add: the cake cat and bread cat can now help the chef around in the
kitchen
/🆑
2023-11-28 21:51:37 -07:00

120 lines
3.8 KiB
Plaintext

/*
The holodeck activates these shortly after the program loads,
and deactivates them immediately before changing or disabling the holodeck.
These remove snowflake code for special holodeck functions.
*/
/obj/effect/holodeck_effect
icon = 'icons/hud/screen_gen.dmi'
icon_state = "x2"
invisibility = INVISIBILITY_ABSTRACT
/obj/effect/holodeck_effect/proc/activate(obj/machinery/computer/holodeck/HC)
return
/obj/effect/holodeck_effect/proc/deactivate(obj/machinery/computer/holodeck/HC)
qdel(src)
return
// Called by the holodeck computer as long as the program is running
/obj/effect/holodeck_effect/proc/tick(obj/machinery/computer/holodeck/HC)
return
/obj/effect/holodeck_effect/proc/safety(active)
return
// Generates a holodeck-tracked card deck
/obj/effect/holodeck_effect/cards
icon = 'icons/obj/toys/playing_cards.dmi'
icon_state = "deck_syndicate_full"
/obj/effect/holodeck_effect/cards/activate(obj/machinery/computer/holodeck/holodeck)
var/obj/item/toy/cards/deck/syndicate/holographic/deck = new(loc, holodeck)
deck.flags_1 |= HOLOGRAM_1
return deck
/obj/effect/holodeck_effect/sparks/activate(obj/machinery/computer/holodeck/HC)
var/turf/T = get_turf(src)
if(T)
var/datum/effect_system/spark_spread/s = new
s.set_up(3, 1, T)
s.start()
T.temperature = 5000 //Why? not quite sure to be honest with you
T.hotspot_expose(50000,50000,1)
/obj/effect/holodeck_effect/random_book
/obj/effect/holodeck_effect/random_book/activate(obj/machinery/computer/holodeck/father_holodeck)
var/static/banned_books = list(/obj/item/book/manual/random, /obj/item/book/manual/nuclear, /obj/item/book/manual/wiki)
var/newtype = pick(subtypesof(/obj/item/book/manual) - banned_books)
var/obj/item/book/manual/to_spawn = new newtype(loc)
to_spawn.flags_1 |= (HOLOGRAM_1 | NODECONSTRUCT_1)
return to_spawn
/obj/effect/holodeck_effect/mobspawner
var/mobtype = /mob/living/basic/carp/holographic
var/mob/our_mob = null
/obj/effect/holodeck_effect/mobspawner/activate(obj/machinery/computer/holodeck/HC)
if(islist(mobtype))
mobtype = pick(mobtype)
our_mob = new mobtype(loc)
our_mob.flags_1 |= HOLOGRAM_1
ADD_TRAIT(our_mob, TRAIT_PERMANENTLY_MORTAL, INNATE_TRAIT)
// these vars are not really standardized but all would theoretically create stuff on death
for(var/v in list("butcher_results","corpse","weapon1","weapon2","blood_volume") & our_mob.vars)
our_mob.vars[v] = null
RegisterSignal(our_mob, COMSIG_QDELETING, PROC_REF(handle_mob_delete))
return our_mob
/obj/effect/holodeck_effect/mobspawner/deactivate(obj/machinery/computer/holodeck/HC)
if(our_mob)
HC.derez(our_mob)
qdel(src)
/obj/effect/holodeck_effect/mobspawner/proc/handle_mob_delete(datum/source)
SIGNAL_HANDLER
our_mob = null
/obj/effect/holodeck_effect/mobspawner/pet
/obj/effect/holodeck_effect/mobspawner/pet/Initialize(mapload)
. = ..()
mobtype = list(
/mob/living/basic/butterfly,
/mob/living/basic/chick/permanent,
/mob/living/basic/pet/fox/docile,
/mob/living/basic/rabbit,
)
mobtype += pick(
/mob/living/basic/pet/dog/corgi,
/mob/living/basic/pet/dog/corgi/puppy,
/mob/living/basic/pet/dog/pug,
)
mobtype += pick(
/mob/living/basic/pet/cat,
/mob/living/basic/pet/cat/kitten,
)
/obj/effect/holodeck_effect/mobspawner/bee
mobtype = /mob/living/basic/bee/toxin
/obj/effect/holodeck_effect/mobspawner/monkey
mobtype = /mob/living/carbon/human/species/monkey/holodeck
/obj/effect/holodeck_effect/mobspawner/penguin
mobtype = /mob/living/basic/pet/penguin/emperor/neuter
/obj/effect/holodeck_effect/mobspawner/penguin/Initialize(mapload)
if(prob(1))
mobtype = /mob/living/basic/pet/penguin/emperor/shamebrero/neuter
return ..()
/obj/effect/holodeck_effect/mobspawner/penguin_baby
mobtype = /mob/living/basic/pet/penguin/baby/permanent
/obj/effect/holodeck_effect/mobspawner/crab/jon
mobtype = /mob/living/basic/crab/jon