172 lines
5.2 KiB
Plaintext
172 lines
5.2 KiB
Plaintext
/mob/living/simple_animal/mouse
|
|
name = "mouse"
|
|
desc = "It's a nasty, ugly, evil, disease-ridden rodent."
|
|
icon_state = "mouse_gray"
|
|
icon_living = "mouse_gray"
|
|
icon_dead = "mouse_gray_dead"
|
|
speak = list("Squeak!","SQUEAK!","Squeak?")
|
|
speak_emote = list("squeaks")
|
|
emote_hear = list("squeaks.")
|
|
emote_see = list("runs in a circle.", "shakes.")
|
|
speak_chance = 1
|
|
turns_per_move = 5
|
|
blood_volume = 250
|
|
see_in_dark = 6
|
|
maxHealth = 5
|
|
health = 5
|
|
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
|
|
response_help_continuous = "pets"
|
|
response_help_simple = "pet"
|
|
response_disarm_continuous = "gently pushes aside"
|
|
response_disarm_simple = "gently push aside"
|
|
response_harm_continuous = "splats"
|
|
response_harm_simple = "splat"
|
|
density = FALSE
|
|
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
|
mob_size = MOB_SIZE_TINY
|
|
mob_biotypes = MOB_ORGANIC|MOB_BEAST
|
|
var/body_color //brown, gray and white, leave blank for random
|
|
gold_core_spawnable = FRIENDLY_SPAWN
|
|
var/chew_probability = 1
|
|
faction = list("rat")
|
|
|
|
/mob/living/simple_animal/mouse/Initialize()
|
|
. = ..()
|
|
AddComponent(/datum/component/squeak, list('sound/effects/mousesqueek.ogg'=1), 100)
|
|
if(!body_color)
|
|
body_color = pick(list("brown","gray","white"))
|
|
AddElement(/datum/element/mob_holder, "mouse_[body_color]")
|
|
icon_state = "mouse_[body_color]"
|
|
icon_living = "mouse_[body_color]"
|
|
icon_dead = "mouse_[body_color]_dead"
|
|
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
|
|
|
|
/mob/living/simple_animal/mouse/proc/splat()
|
|
src.health = 0
|
|
src.icon_dead = "mouse_[body_color]_splat"
|
|
death()
|
|
|
|
/mob/living/simple_animal/mouse/death(gibbed, toast)
|
|
if(!ckey)
|
|
..(1)
|
|
if(!gibbed)
|
|
var/obj/item/reagent_containers/food/snacks/deadmouse/M = new(loc)
|
|
M.icon_state = icon_dead
|
|
M.name = name
|
|
if(toast)
|
|
M.add_atom_colour("#3A3A3A", FIXED_COLOUR_PRIORITY)
|
|
M.desc = "It's toast."
|
|
qdel(src)
|
|
else
|
|
..(gibbed)
|
|
|
|
|
|
/mob/living/simple_animal/mouse/Crossed(AM as mob|obj)
|
|
if( ishuman(AM) )
|
|
if(!stat)
|
|
var/mob/M = AM
|
|
to_chat(M, "<span class='notice'>[icon2html(src, M)] Squeak!</span>")
|
|
if(istype(AM, /obj/item/reagent_containers/food/snacks/royalcheese))
|
|
evolve()
|
|
qdel(AM)
|
|
..()
|
|
|
|
/mob/living/simple_animal/mouse/handle_automated_action()
|
|
if(!isturf(loc))
|
|
return
|
|
|
|
if(prob(chew_probability))
|
|
var/turf/open/floor/F = get_turf(src)
|
|
if(istype(F) && !F.intact)
|
|
var/obj/structure/cable/C = locate() in F
|
|
if(C && prob(15))
|
|
if(C.avail())
|
|
visible_message("<span class='warning'>[src] chews through the [C]. It's toast!</span>")
|
|
playsound(src, 'sound/effects/sparks2.ogg', 100, 1)
|
|
C.deconstruct()
|
|
death(toast=TRUE)
|
|
else
|
|
C.deconstruct()
|
|
visible_message("<span class='warning'>[src] chews through the [C].</span>")
|
|
|
|
for(var/obj/item/reagent_containers/food/snacks/cheesewedge/cheese in range(1, src))
|
|
if(prob(10))
|
|
be_fruitful()
|
|
qdel(cheese)
|
|
return
|
|
for(var/obj/item/reagent_containers/food/snacks/royalcheese/bigcheese in range(1, src))
|
|
qdel(bigcheese)
|
|
evolve()
|
|
return
|
|
|
|
/**
|
|
*Checks the mouse cap, if it's above the cap, doesn't spawn a mouse. If below, spawns a mouse and adds it to cheeserats.
|
|
*/
|
|
|
|
/mob/living/simple_animal/mouse/proc/be_fruitful()
|
|
var/cap = CONFIG_GET(number/ratcap)
|
|
if(LAZYLEN(SSmobs.cheeserats) >= cap)
|
|
visible_message("<span class='warning'>[src] carefully eats the cheese, hiding it from the [cap] mice on the station!</span>")
|
|
return
|
|
var/mob/living/newmouse = new /mob/living/simple_animal/mouse(loc)
|
|
SSmobs.cheeserats += newmouse
|
|
visible_message("<span class='notice'>[src] nibbles through the cheese, attracting another mouse!</span>")
|
|
|
|
/**
|
|
*Spawns a new regal rat, says some good jazz, and if sentient, transfers the relivant mind.
|
|
*/
|
|
/mob/living/simple_animal/mouse/proc/evolve()
|
|
var/mob/living/simple_animal/hostile/regalrat = new /mob/living/simple_animal/hostile/regalrat(loc)
|
|
visible_message("<span class='warning'>[src] devours the cheese! He morphs into something... greater!</span>")
|
|
regalrat.say("RISE, MY SUBJECTS! SCREEEEEEE!")
|
|
if(mind)
|
|
mind.transfer_to(regalrat)
|
|
qdel(src)
|
|
|
|
/*
|
|
* Mouse types
|
|
*/
|
|
|
|
/mob/living/simple_animal/mouse/white
|
|
body_color = "white"
|
|
icon_state = "mouse_white"
|
|
|
|
/mob/living/simple_animal/mouse/gray
|
|
body_color = "gray"
|
|
icon_state = "mouse_gray"
|
|
|
|
/mob/living/simple_animal/mouse/brown
|
|
body_color = "brown"
|
|
icon_state = "mouse_brown"
|
|
|
|
/mob/living/simple_animal/mouse/Destroy()
|
|
SSmobs.cheeserats -= src
|
|
return ..()
|
|
|
|
GLOBAL_VAR(tom_existed)
|
|
|
|
//TOM IS ALIVE! SQUEEEEEEEE~K :)
|
|
/mob/living/simple_animal/mouse/brown/Tom
|
|
name = "Tom"
|
|
desc = "Jerry the cat is not amused."
|
|
gold_core_spawnable = NO_SPAWN
|
|
|
|
/mob/living/simple_animal/mouse/brown/Tom/Initialize()
|
|
. = ..()
|
|
GLOB.tom_existed = TRUE
|
|
|
|
/obj/item/reagent_containers/food/snacks/deadmouse
|
|
name = "dead mouse"
|
|
desc = "It looks like somebody dropped the bass on it. A lizard's favorite meal."
|
|
icon = 'icons/mob/animal.dmi'
|
|
icon_state = "mouse_gray_dead"
|
|
bitesize = 3
|
|
eatverb = "devour"
|
|
list_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 2)
|
|
foodtype = GROSS | MEAT | RAW
|
|
grind_results = list(/datum/reagent/blood = 20, /datum/reagent/liquidgibs = 5)
|
|
|
|
/obj/item/reagent_containers/food/snacks/deadmouse/on_grind()
|
|
reagents.clear_reagents()
|
|
|