mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-20 19:43:13 +01:00
Simple animal update (#6553)
This commit is contained in:
@@ -134,6 +134,10 @@
|
||||
density = 0
|
||||
wizardy_spells = list(/spell/aoe_turf/smoke)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
meat_amount = 6
|
||||
butchering_products = list(/obj/item/stack/material/animalhide = 3)
|
||||
|
||||
|
||||
/mob/living/simple_animal/familiar/pet //basically variants of normal animals with spells.
|
||||
icon = 'icons/mob/npc/animal.dmi'
|
||||
@@ -173,6 +177,9 @@
|
||||
|
||||
wizardy_spells = list(/spell/targeted/subjugation)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
butchering_products = list(/obj/item/stack/material/animalhide/cat = 2)
|
||||
|
||||
|
||||
/mob/living/simple_animal/mouse/familiar
|
||||
name = "ancient mouse"
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
/mob/living/simple_animal/ice_tunneler
|
||||
name = "ice tunneler"
|
||||
desc = "An egg producing beast from Adhomai. It is known for burrowing in ice and snow."
|
||||
icon_state = "tunneler"
|
||||
icon_living = "tunneler"
|
||||
icon_dead = "tunneler_dead"
|
||||
speak = list("Fiiiiiii!")
|
||||
speak_emote = list("whistles")
|
||||
emote_hear = list("whistles loudly")
|
||||
emote_see = list("whistles")
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/adhomai
|
||||
meat_amount = 2
|
||||
var/eggsleft = 0
|
||||
|
||||
/mob/living/simple_animal/ice_tunneler/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) //feedin' dem chickens
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O
|
||||
if(G.seed && G.seed.kitchen_tag == "nfrihi")
|
||||
if(!stat && eggsleft < 8)
|
||||
user.visible_message(
|
||||
span("notice", "\The [user] feeds \the [O] to \the [name]! It whistles happily."),
|
||||
span("notice", "You feed \the [O] to \the [name]! It whistles happily."),
|
||||
"You hear a cluck.")
|
||||
user.drop_from_inventory(O,get_turf(src))
|
||||
qdel(O)
|
||||
eggsleft += rand(1, 4)
|
||||
else
|
||||
to_chat(user, "\The [name] doesn't seem hungry!")
|
||||
else
|
||||
to_chat(user, "\The [name] doesn't seem interested in that.")
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/ice_tunneler/Life()
|
||||
. =..()
|
||||
if(!.)
|
||||
return
|
||||
if(!stat && prob(3) && eggsleft > 0)
|
||||
visible_message("[src] lays an egg.")
|
||||
eggsleft--
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/egg(get_turf(src))
|
||||
|
||||
/mob/living/simple_animal/fatshouter
|
||||
name = "fatshouter"
|
||||
desc = "An adhomian animal known for its production of milk and wool."
|
||||
icon_state = "fatshouter"
|
||||
icon_living = "fatshouter"
|
||||
icon_dead = "fatshouter_dead"
|
||||
speak_emote = list("brays")
|
||||
emote_hear = list("brays")
|
||||
emote_see = list("shakes its head")
|
||||
speak_chance = 1
|
||||
turns_per_move = 5
|
||||
see_in_dark = 6
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/adhomai
|
||||
meat_amount = 30
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
attacktext = "kicked"
|
||||
health = 200
|
||||
maxHealth = 200
|
||||
|
||||
autoseek_food = 0
|
||||
beg_for_food = 0
|
||||
mob_size = 15
|
||||
|
||||
has_udder = TRUE
|
||||
milk_type = "fatshouter_milk"
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/adhomai
|
||||
butchering_products = list(/obj/item/stack/material/animalhide = 5)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/rafama
|
||||
name = "steed of Mata'ke"
|
||||
desc = "An animal native to Adhomai, known for its agressive behavior and mighty tusks."
|
||||
icon_state = "rafama"
|
||||
icon_living = "rafama"
|
||||
icon_dead = "rafama_dead"
|
||||
turns_per_move = 3
|
||||
speak_emote = list("chuffs")
|
||||
emote_hear = list("growls")
|
||||
emote_see = list("shakes its head", "stamps a foot", "glares around")
|
||||
a_intent = I_HURT
|
||||
stop_automated_movement_when_pulled = 0
|
||||
mob_size = 12
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/adhomai
|
||||
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
|
||||
harm_intent_damage = 3
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
attacktext = "bitten"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
|
||||
butchering_products = list(/obj/item/stack/material/animalhide = 5)
|
||||
meat_amount = 8
|
||||
@@ -34,6 +34,7 @@
|
||||
seek_speed = 5
|
||||
pass_flags = PASSTABLE
|
||||
possession_candidate = 1
|
||||
butchering_products = list(/obj/item/stack/material/animalhide/cat = 2)
|
||||
|
||||
/mob/living/simple_animal/cat/think()
|
||||
//MICE!
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
|
||||
holder_type = /obj/item/weapon/holder/corgi
|
||||
|
||||
butchering_products = list(/obj/item/stack/material/animalhide/corgi = 3)
|
||||
|
||||
var/obj/item/inventory_head
|
||||
var/obj/item/inventory_back
|
||||
|
||||
@@ -110,6 +112,8 @@
|
||||
icon_living = "puppy"
|
||||
icon_dead = "puppy_dead"
|
||||
|
||||
butchering_products = list(/obj/item/stack/material/animalhide/corgi = 1)
|
||||
|
||||
//pupplies cannot wear anything.
|
||||
/mob/living/simple_animal/corgi/puppy/Topic(href, href_list)
|
||||
if(href_list["remove_inv"] || href_list["add_inv"])
|
||||
|
||||
@@ -23,12 +23,9 @@
|
||||
maxHealth = 40
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 5
|
||||
var/datum/reagents/udder = null
|
||||
has_udder = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/Initialize()
|
||||
. = ..()
|
||||
udder = new(50)
|
||||
udder.my_atom = src
|
||||
butchering_products = list(/obj/item/stack/material/animalhide = 3)
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/beg(var/atom/thing, var/atom/holder)
|
||||
visible_emote("butts insistently at [holder]'s legs and reaches towards their [thing].",0)
|
||||
@@ -36,10 +33,6 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/Life()
|
||||
. = ..()
|
||||
if(.)
|
||||
if(stat == CONSCIOUS)
|
||||
if(udder && prob(5))
|
||||
udder.add_reagent("milk", rand(5, 10))
|
||||
|
||||
if(locate(/obj/effect/plant) in loc)
|
||||
var/obj/effect/plant/SV = locate() in loc
|
||||
SV.die_off(1)
|
||||
@@ -76,17 +69,6 @@
|
||||
for(var/obj/effect/plant/SV in loc)
|
||||
SV.die_off(1)
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
var/obj/item/weapon/reagent_containers/glass/G = O
|
||||
if(stat == CONSCIOUS && istype(G) && G.is_open_container())
|
||||
user.visible_message("<span class='notice'>[user] milks [src] using \the [O].</span>")
|
||||
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
|
||||
if(G.reagents.total_volume >= G.volume)
|
||||
to_chat(user, "<span class='warning'>The [O] is full.</span>")
|
||||
if(!transfered)
|
||||
to_chat(user, "<span class='warning'>The udder is dry. Wait a bit longer...</span>")
|
||||
else
|
||||
..()
|
||||
//cow
|
||||
/mob/living/simple_animal/cow
|
||||
name = "cow"
|
||||
@@ -111,31 +93,9 @@
|
||||
health = 250
|
||||
autoseek_food = 0
|
||||
beg_for_food = 0
|
||||
var/datum/reagents/udder = null
|
||||
mob_size = 20//based on mass of holstein fresian dairy cattle, what the sprite is based on
|
||||
|
||||
/mob/living/simple_animal/cow/Initialize()
|
||||
. = ..()
|
||||
udder = new(50)
|
||||
udder.my_atom = src
|
||||
|
||||
/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
var/obj/item/weapon/reagent_containers/glass/G = O
|
||||
if(stat == CONSCIOUS && istype(G) && G.is_open_container())
|
||||
user.visible_message("<span class='notice'>[user] milks [src] using \the [O].</span>")
|
||||
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
|
||||
if(G.reagents.total_volume >= G.volume)
|
||||
to_chat(user, "<span class='warning'>The [O] is full.</span>")
|
||||
if(!transfered)
|
||||
to_chat(user, "<span class='warning'>The udder is dry. Wait a bit longer...</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/cow/Life()
|
||||
. = ..()
|
||||
if(stat == CONSCIOUS)
|
||||
if(udder && prob(5))
|
||||
udder.add_reagent("milk", rand(5, 10))
|
||||
has_udder = TRUE
|
||||
butchering_products = list(/obj/item/stack/material/animalhide = 8)
|
||||
|
||||
/mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M as mob)
|
||||
if(!stat && M.a_intent == I_DISARM && icon_state != icon_dead)
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
mob_size = 4
|
||||
max_nutrition = 90
|
||||
holder_type = /obj/item/weapon/holder/fox
|
||||
butchering_products = list(/obj/item/stack/material/animalhide = 3)
|
||||
|
||||
//Captain fox
|
||||
/mob/living/simple_animal/corgi/fox/Chauncey
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
density = 0
|
||||
seek_speed = 0.75
|
||||
|
||||
butchering_products = list(/obj/item/stack/material/animalhide/lizard = 2)
|
||||
|
||||
var/decompose_time = 18000
|
||||
|
||||
/mob/living/simple_animal/lizard/Initialize()
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
attack_emote = "growls at"
|
||||
smart = TRUE
|
||||
|
||||
butchering_products = list(/obj/item/stack/material/animalhide/xeno = 5)
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/drone
|
||||
name = "alien drone"
|
||||
icon_state = "aliend_running"
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
|
||||
faction = "scarybat"
|
||||
flying = TRUE
|
||||
butchering_products = list(/obj/item/stack/material/animalhide = 1)
|
||||
var/mob/living/owner
|
||||
|
||||
/mob/living/simple_animal/hostile/scarybat/Initialize(mapload, mob/living/L as mob)
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
melee_damage_upper = 18
|
||||
break_stuff_probability = 80
|
||||
mob_size = 17
|
||||
butchering_products = list(/obj/item/clothing/head/bearpelt = 1)
|
||||
var/safety //used to prevent infinite loops
|
||||
var/turns_since_hit = 0//If the bear chases someone too long without hitting them, it will try to change to another nearby target instead
|
||||
|
||||
@@ -81,11 +82,6 @@
|
||||
. = ..()
|
||||
update_bearmode()
|
||||
|
||||
/mob/living/simple_animal/hostile/bear/harvest()
|
||||
new /obj/item/clothing/head/bearpelt(get_turf(src))
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/bear/proc/set_stance(var/input)
|
||||
var/previous = stance
|
||||
stance = input
|
||||
|
||||
@@ -30,6 +30,10 @@
|
||||
|
||||
tameable = FALSE
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
|
||||
butchering_products = list(/obj/item/clothing/head/bearpelt = 1)
|
||||
meat_amount = 5
|
||||
|
||||
/mob/living/simple_animal/hostile/commanded/bear/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone)
|
||||
. = ..()
|
||||
if(!.)
|
||||
|
||||
@@ -47,6 +47,8 @@
|
||||
destroy_surroundings = FALSE
|
||||
attack_emote = "growls at"
|
||||
|
||||
butchering_products = list(/obj/item/stack/material/animalhide = 2)
|
||||
|
||||
/mob/living/simple_animal/hostile/commanded/dog/verb/befriend()
|
||||
set name = "Befriend Dog"
|
||||
set category = "IC"
|
||||
@@ -131,4 +133,6 @@
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
melee_damage_upper = 5
|
||||
|
||||
butchering_products = list(/obj/item/stack/material/animalhide = 2)
|
||||
@@ -18,7 +18,7 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "harmlessly punches"
|
||||
maxHealth = 100
|
||||
maxHealth = 1000
|
||||
health = 1000
|
||||
harm_intent_damage = 0
|
||||
melee_damage_lower = 30
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
attack_sound = 'sound/misc/monstergrowl.ogg'
|
||||
|
||||
faction = "lizard"
|
||||
butchering_products = list(/obj/item/stack/material/animalhide/lizard = 20)
|
||||
|
||||
/mob/living/simple_animal/hostile/biglizard/AttackingTarget()
|
||||
. =..()
|
||||
|
||||
@@ -104,6 +104,12 @@
|
||||
|
||||
var/flying = FALSE //if they can fly, which stops them from falling down and allows z-space travel
|
||||
|
||||
var/has_udder = FALSE
|
||||
var/datum/reagents/udder = null
|
||||
var/milk_type = "milk"
|
||||
|
||||
var/list/butchering_products //if anything else is created when butchering this creature, like bones and leather
|
||||
|
||||
/mob/living/simple_animal/proc/beg(var/atom/thing, var/atom/holder)
|
||||
visible_emote("gazes longingly at [holder]'s [thing]",0)
|
||||
|
||||
@@ -141,6 +147,10 @@
|
||||
if (can_nap)
|
||||
verbs += /mob/living/simple_animal/lay_down
|
||||
|
||||
if(has_udder)
|
||||
udder = new(50)
|
||||
udder.my_atom = src
|
||||
|
||||
/mob/living/simple_animal/Move(NewLoc, direct)
|
||||
. = ..()
|
||||
if(.)
|
||||
@@ -239,6 +249,12 @@
|
||||
|
||||
if(!atmos_suitable)
|
||||
apply_damage(unsuitable_atoms_damage, OXY, used_weapon = "Atmosphere")
|
||||
|
||||
if(has_udder)
|
||||
if(stat == CONSCIOUS)
|
||||
if(udder && prob(5))
|
||||
udder.add_reagent(milk_type, rand(5, 10))
|
||||
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/think()
|
||||
@@ -411,6 +427,17 @@ mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/attackby(var/obj/item/O, var/mob/user)
|
||||
if(has_udder)
|
||||
var/obj/item/weapon/reagent_containers/glass/G = O
|
||||
if(stat == CONSCIOUS && istype(G) && G.is_open_container())
|
||||
user.visible_message("<span class='notice'>[user] milks [src] using \the [O].</span>")
|
||||
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
|
||||
if(G.reagents.total_volume >= G.volume)
|
||||
to_chat(user, "<span class='warning'>The [O] is full.</span>")
|
||||
if(!transfered)
|
||||
to_chat(user, "<span class='warning'>The udder is dry.</span>")
|
||||
return
|
||||
|
||||
if(istype(O, /obj/item/weapon/reagent_containers) || istype(O, /obj/item/stack/medical) || istype(O,/obj/item/weapon/gripper/))
|
||||
..()
|
||||
poke()
|
||||
@@ -546,9 +573,14 @@ mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
|
||||
var/actual_meat_amount = max(1,(meat_amount*0.75))
|
||||
if(meat_type && actual_meat_amount>0 && (stat == DEAD))
|
||||
for(var/i=0;i<actual_meat_amount;i++)
|
||||
var/obj/item/meat = new meat_type(get_turf(src))
|
||||
if (meat.name == "meat")
|
||||
meat.name = "[src.name] [meat.name]"
|
||||
new meat_type(get_turf(src))
|
||||
|
||||
if(butchering_products)
|
||||
for(var/path in butchering_products)
|
||||
var/number = butchering_products[path]
|
||||
for(var/i in 1 to number)
|
||||
new path(get_turf(src))
|
||||
|
||||
if(issmall(src))
|
||||
user.visible_message("<span class='danger'>[user] chops up \the [src]!</span>")
|
||||
new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
|
||||
|
||||
Reference in New Issue
Block a user