diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 181dcf507cf..6d0cc639e53 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -1420,7 +1420,7 @@ /area/ruin/powered/beach) "Xa" = ( /obj/item/melee/skateboard/hoverboard, -/mob/living/simple_animal/chicken{ +/mob/living/basic/chicken{ name = "Chicken Joe" }, /turf/open/misc/beach/sand, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 99290873bf3..875c6a81fd9 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -30883,7 +30883,7 @@ /turf/open/floor/iron/white, /area/station/security/prison/visit) "lbH" = ( -/mob/living/simple_animal/chicken{ +/mob/living/basic/chicken{ name = "Featherbottom"; real_name = "Featherbottom" }, @@ -39895,7 +39895,7 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "onU" = ( -/mob/living/simple_animal/chicken{ +/mob/living/basic/chicken{ name = "Kentucky"; real_name = "Kentucky" }, diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index f5d194d9a0a..4f642adcc7b 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -48258,7 +48258,7 @@ /area/station/maintenance/floor2/port/aft) "mFB" = ( /obj/structure/window/reinforced/spawner/directional/north, -/mob/living/simple_animal/chicken, +/mob/living/basic/chicken, /turf/open/floor/grass, /area/station/service/hydroponics) "mFD" = ( diff --git a/_maps/shuttles/emergency_tranquility.dmm b/_maps/shuttles/emergency_tranquility.dmm index 20794dc0f3e..4656b1fc956 100644 --- a/_maps/shuttles/emergency_tranquility.dmm +++ b/_maps/shuttles/emergency_tranquility.dmm @@ -2205,7 +2205,7 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, -/mob/living/simple_animal/chicken{ +/mob/living/basic/chicken{ name = "Relaxation Technician James" }, /obj/structure/flora/bush/flowers_br, diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index e17bea756f8..618caf1ccf2 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -57,8 +57,8 @@ GLOBAL_LIST_INIT(phobia_mobs, list( )), "anime" = typecacheof(list(/mob/living/simple_animal/hostile/guardian)), "birds" = typecacheof(list( + /mob/living/basic/chicken, /mob/living/simple_animal/chick, - /mob/living/simple_animal/chicken, /mob/living/simple_animal/parrot, /mob/living/simple_animal/pet/penguin, )), diff --git a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm index a8a55ff532f..05b09c53fb9 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm @@ -90,6 +90,12 @@ "Hmm mmm mmm!", ) +/datum/ai_planning_subtree/random_speech/chicken + speech_chance = 15 // really talkative ladies + speak = list("Cluck!", "BWAAAAARK BWAK BWAK BWAK!", "Bwaak bwak.") + emote_hear = list("clucks.", "croons.") + emote_see = list("pecks at the ground.","flaps her wings viciously.") + /datum/ai_planning_subtree/random_speech/cow speech_chance = 1 speak = list("moo?","moo","MOOOOOO") diff --git a/code/datums/memory/_memory.dm b/code/datums/memory/_memory.dm index 99a975903e0..c0bf77fafd5 100644 --- a/code/datums/memory/_memory.dm +++ b/code/datums/memory/_memory.dm @@ -249,6 +249,7 @@ /mob/living/basic/carp, /mob/living/basic/carp/magic, /mob/living/basic/carp/magic/chaos, + /mob/living/basic/chicken, /mob/living/basic/cow, /mob/living/basic/cow/wisdom, /mob/living/basic/giant_spider, @@ -263,7 +264,6 @@ /mob/living/basic/stickman, /mob/living/basic/stickman/dog, /mob/living/simple_animal/chick, - /mob/living/simple_animal/chicken, /mob/living/simple_animal/crab, /mob/living/simple_animal/hostile/asteroid/basilisk/watcher, /mob/living/simple_animal/hostile/asteroid/goliath/beast, diff --git a/code/game/objects/items/food/monkeycube.dm b/code/game/objects/items/food/monkeycube.dm index 706e740e506..a46c6a82042 100644 --- a/code/game/objects/items/food/monkeycube.dm +++ b/code/game/objects/items/food/monkeycube.dm @@ -73,7 +73,7 @@ /datum/reagent/medicine/strange_reagent = 1, ) tastes = list("chicken" = 1, "the country" = 1, "chicken bouillon" = 1) - spawned_mob = /mob/living/simple_animal/chicken + spawned_mob = /mob/living/basic/chicken /obj/item/food/monkeycube/bee name = "bee cube" diff --git a/code/modules/events/ghost_role/sentience.dm b/code/modules/events/ghost_role/sentience.dm index c23a5dc42ff..2471849be63 100644 --- a/code/modules/events/ghost_role/sentience.dm +++ b/code/modules/events/ghost_role/sentience.dm @@ -1,24 +1,24 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list( /mob/living/basic/bat, /mob/living/basic/butterfly, - /mob/living/basic/lizard, /mob/living/basic/carp/pet/cayenne, + /mob/living/basic/chicken, /mob/living/basic/cow, /mob/living/basic/giant_spider/sgt_araneus, + /mob/living/basic/lizard, /mob/living/basic/mouse/brown/tom, /mob/living/basic/pet, /mob/living/basic/pig, /mob/living/basic/rabbit, /mob/living/basic/sheep, - /mob/living/simple_animal/pet, - /mob/living/simple_animal/parrot, - /mob/living/simple_animal/sloth, - /mob/living/simple_animal/hostile/retaliate/goat, - /mob/living/simple_animal/chicken, - /mob/living/simple_animal/hostile/retaliate/snake, - /mob/living/simple_animal/hostile/retaliate/goose/vomit, /mob/living/simple_animal/bot/mulebot, /mob/living/simple_animal/bot/secbot/beepsky, + /mob/living/simple_animal/hostile/retaliate/goat, + /mob/living/simple_animal/hostile/retaliate/goose/vomit, + /mob/living/simple_animal/hostile/retaliate/snake, + /mob/living/simple_animal/parrot, + /mob/living/simple_animal/pet, + /mob/living/simple_animal/sloth, ))) /datum/round_event_control/sentience diff --git a/code/modules/events/wizard/petsplosion.dm b/code/modules/events/wizard/petsplosion.dm index eba67297a96..d6b5bf40975 100644 --- a/code/modules/events/wizard/petsplosion.dm +++ b/code/modules/events/wizard/petsplosion.dm @@ -3,6 +3,7 @@ GLOBAL_LIST_INIT(petsplosion_candidates, typecacheof(list( /mob/living/basic/bat, /mob/living/basic/butterfly, /mob/living/basic/carp/pet/cayenne, + /mob/living/basic/chicken, /mob/living/basic/cow, /mob/living/basic/giant_spider/sgt_araneus, /mob/living/basic/lizard, @@ -12,13 +13,12 @@ GLOBAL_LIST_INIT(petsplosion_candidates, typecacheof(list( /mob/living/basic/pig, /mob/living/basic/rabbit, /mob/living/basic/sheep, - /mob/living/simple_animal/pet, - /mob/living/simple_animal/parrot, - /mob/living/simple_animal/sloth, /mob/living/simple_animal/hostile/retaliate/goat, - /mob/living/simple_animal/chicken, - /mob/living/simple_animal/hostile/retaliate/snake, /mob/living/simple_animal/hostile/retaliate/goose/vomit, + /mob/living/simple_animal/hostile/retaliate/snake, + /mob/living/simple_animal/parrot, + /mob/living/simple_animal/pet, + /mob/living/simple_animal/sloth, ))) /datum/round_event_control/wizard/petsplosion //the horror diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm index 849899d6773..611eaae4244 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -39,7 +39,14 @@ description = "We need to see how the body functions from the earliest moments. Some cytology experiments will help us gain this understanding." total_requirement = 3 max_requirement_per_type = 2 - possible_types = list(/mob/living/basic/carp, /mob/living/simple_animal/hostile/retaliate/snake, /mob/living/simple_animal/pet/cat, /mob/living/basic/pet/dog/corgi, /mob/living/basic/cow, /mob/living/simple_animal/chicken) + possible_types = list( + /mob/living/basic/carp, + /mob/living/basic/chicken, + /mob/living/basic/cow, + /mob/living/basic/pet/dog/corgi, + /mob/living/simple_animal/hostile/retaliate/snake, + /mob/living/simple_animal/pet/cat, + ) /datum/experiment/scanning/random/cytology/medium/one name = "Advanced Cytology Scanning Experiment One" diff --git a/code/modules/mob/living/basic/farm_animals/chicken.dm b/code/modules/mob/living/basic/farm_animals/chicken.dm new file mode 100644 index 00000000000..f102ee43da1 --- /dev/null +++ b/code/modules/mob/living/basic/farm_animals/chicken.dm @@ -0,0 +1,95 @@ +/// Counter for number of chicken mobs in the universe. Chickens will not lay fertile eggs if it exceeds the MAX_CHICKENS define. +GLOBAL_VAR_INIT(chicken_count, 0) + +/* ## Chickens +* +* +* Not-entirely-flightless domesticated birds that lay eggs, which are then consumed by humans and other animals. +*/ + + +/mob/living/basic/chicken + name = "\improper chicken" + desc = "Hopefully the eggs are good this season." + gender = FEMALE + mob_biotypes = MOB_ORGANIC|MOB_BEAST + icon_state = "chicken_brown" + icon_living = "chicken_brown" + icon_dead = "chicken_brown_dead" + density = FALSE + butcher_results = list(/obj/item/food/meat/slab/chicken = 2) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "pecks" + response_harm_simple = "peck" + attack_verb_continuous = "pecks" + attack_verb_simple = "peck" + friendly_verb_continuous = "headbutts" + friendly_verb_simple = "headbutt" + speak_emote = list("clucks", "croons") + health = 15 + maxHealth = 15 + pass_flags = PASSTABLE | PASSMOB + mob_size = MOB_SIZE_SMALL + gold_core_spawnable = FRIENDLY_SPAWN + + ai_controller = /datum/ai_controller/basic_controller/chicken + + ///boolean deciding whether eggs laid by this chicken can hatch into chicks + var/fertile = TRUE + +/mob/living/basic/chicken/Initialize(mapload) + . = ..() + GLOB.chicken_count++ + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + AddElement(/datum/element/pet_bonus, "clucks happily!") + AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) + AddElement(/datum/element/swabable, CELL_LINE_TABLE_CHICKEN, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) + AddElement(/datum/element/animal_variety, "chicken", pick("brown", "black", "white"), modify_pixels = TRUE) + AddComponent(\ + /datum/component/egg_layer,\ + /obj/item/food/egg,\ + list(/obj/item/food/grown/wheat),\ + feed_messages = list("She clucks contently."),\ + lay_messages = EGG_LAYING_MESSAGES,\ + eggs_left = 0,\ + eggs_added_from_eating = rand(1, 4),\ + max_eggs_held = 8,\ + egg_laid_callback = CALLBACK(src, PROC_REF(egg_laid)),\ + ) + +/mob/living/basic/chicken/Destroy() + GLOB.chicken_count-- + return ..() + +/mob/living/basic/chicken/proc/egg_laid(obj/item/egg) + if(GLOB.chicken_count <= MAX_CHICKENS && fertile && prob(25)) + egg.AddComponent(\ + /datum/component/fertile_egg,\ + embryo_type = /mob/living/simple_animal/chick,\ + minimum_growth_rate = 1,\ + maximum_growth_rate = 2,\ + total_growth_required = 200,\ + current_growth = 0,\ + location_allowlist = typecacheof(list(/turf)),\ + spoilable = TRUE,\ + ) + +/datum/ai_controller/basic_controller/chicken + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + + planning_subtrees = list( + /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/random_speech/chicken, + ) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index bcb9100cd22..4db1bc36496 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1380,6 +1380,7 @@ /mob/living/basic/carp, /mob/living/basic/carp/magic, /mob/living/basic/carp/magic/chaos, + /mob/living/basic/chicken, /mob/living/basic/cow, /mob/living/basic/giant_spider, /mob/living/basic/giant_spider/hunter, @@ -1392,19 +1393,18 @@ /mob/living/basic/statue, /mob/living/basic/stickman, /mob/living/basic/stickman/dog, - /mob/living/simple_animal/crab, /mob/living/simple_animal/chick, - /mob/living/simple_animal/chicken, - /mob/living/simple_animal/hostile/bear, - /mob/living/simple_animal/hostile/mushroom, - /mob/living/simple_animal/hostile/retaliate/goat, - /mob/living/simple_animal/hostile/blob/blobbernaut/independent, + /mob/living/simple_animal/crab, /mob/living/simple_animal/hostile/asteroid/basilisk/watcher, /mob/living/simple_animal/hostile/asteroid/goliath/beast, - /mob/living/simple_animal/hostile/headcrab, - /mob/living/simple_animal/hostile/morph, - /mob/living/simple_animal/hostile/megafauna/dragon/lesser, + /mob/living/simple_animal/hostile/bear, + /mob/living/simple_animal/hostile/blob/blobbernaut/independent, /mob/living/simple_animal/hostile/gorilla, + /mob/living/simple_animal/hostile/headcrab, + /mob/living/simple_animal/hostile/megafauna/dragon/lesser, + /mob/living/simple_animal/hostile/morph, + /mob/living/simple_animal/hostile/mushroom, + /mob/living/simple_animal/hostile/retaliate/goat, /mob/living/simple_animal/parrot, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/pet/cat/cak, diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index b8a23c16da7..a1556d2f684 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -172,81 +172,9 @@ if(!stat && !ckey) amount_grown += rand(0.5 * seconds_per_tick, 1 * seconds_per_tick) if(amount_grown >= 100) - new /mob/living/simple_animal/chicken(src.loc) + new /mob/living/basic/chicken(src.loc) qdel(src) /mob/living/simple_animal/chick/holo/Life(seconds_per_tick = SSMOBS_DT, times_fired) ..() amount_grown = 0 - -/// Counter for number of chicken mobs in the universe. Chickens will not lay fertile eggs if it exceeds the MAX_CHICKENS define. -GLOBAL_VAR_INIT(chicken_count, 0) - -/mob/living/simple_animal/chicken - name = "\improper chicken" - desc = "Hopefully the eggs are good this season." - gender = FEMALE - mob_biotypes = MOB_ORGANIC|MOB_BEAST - icon_state = "chicken_brown" - icon_living = "chicken_brown" - icon_dead = "chicken_brown_dead" - speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.") - speak_emote = list("clucks","croons") - emote_hear = list("clucks.") - emote_see = list("pecks at the ground.","flaps her wings viciously.") - density = FALSE - speak_chance = 2 - turns_per_move = 3 - butcher_results = list(/obj/item/food/meat/slab/chicken = 2) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - attack_verb_continuous = "kicks" - attack_verb_simple = "kick" - health = 15 - maxHealth = 15 - pass_flags = PASSTABLE | PASSMOB - mob_size = MOB_SIZE_SMALL - gold_core_spawnable = FRIENDLY_SPAWN - footstep_type = FOOTSTEP_MOB_CLAW - ///boolean deciding whether eggs laid by this chicken can hatch into chicks - var/fertile = TRUE - -/mob/living/simple_animal/chicken/Initialize(mapload) - . = ..() - GLOB.chicken_count++ - add_cell_sample() - AddElement(/datum/element/animal_variety, "chicken", pick("brown","black","white"), TRUE) - AddComponent(/datum/component/egg_layer,\ - /obj/item/food/egg,\ - list(/obj/item/food/grown/wheat),\ - feed_messages = list("She clucks happily."),\ - lay_messages = EGG_LAYING_MESSAGES,\ - eggs_left = 0,\ - eggs_added_from_eating = rand(1, 4),\ - max_eggs_held = 8,\ - egg_laid_callback = CALLBACK(src, PROC_REF(egg_laid))\ - ) - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - -/mob/living/simple_animal/chicken/add_cell_sample() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_CHICKEN, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - -/mob/living/simple_animal/chicken/Destroy() - GLOB.chicken_count-- - return ..() - -/mob/living/simple_animal/chicken/proc/egg_laid(obj/item/egg) - if(GLOB.chicken_count <= MAX_CHICKENS && fertile && prob(25)) - egg.AddComponent(/datum/component/fertile_egg,\ - embryo_type = /mob/living/simple_animal/chick,\ - minimum_growth_rate = 1,\ - maximum_growth_rate = 2,\ - total_growth_required = 200,\ - current_growth = 0,\ - location_allowlist = typecacheof(list(/turf)),\ - spoilable = TRUE,\ - ) diff --git a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm index b4f10e717ac..c756cc5a263 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -44,7 +44,7 @@ virus_suspectibility = 1 growth_rate = VAT_GROWTH_RATE - resulting_atoms = list(/mob/living/simple_animal/chicken = 1) + resulting_atoms = list(/mob/living/basic/chicken = 1) /datum/micro_organism/cell_line/cow desc = "Bovine stem cells" diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index aa43639b11a..efd6e1a34d7 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -34,7 +34,6 @@ /mob/living/simple_animal/bot/vibebot, /mob/living/simple_animal/chick, /mob/living/simple_animal/chick/holo, - /mob/living/simple_animal/chicken, /mob/living/simple_animal/crab, /mob/living/simple_animal/crab/coffee, /mob/living/simple_animal/crab/evil, diff --git a/tgstation.dme b/tgstation.dme index 55ef862b85e..dd071a543d2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3932,6 +3932,7 @@ #include "code\modules\mob\living\basic\festivus_pole.dm" #include "code\modules\mob\living\basic\health_adjustment.dm" #include "code\modules\mob\living\basic\tree.dm" +#include "code\modules\mob\living\basic\farm_animals\chicken.dm" #include "code\modules\mob\living\basic\farm_animals\deer.dm" #include "code\modules\mob\living\basic\farm_animals\pig.dm" #include "code\modules\mob\living\basic\farm_animals\rabbit.dm" diff --git a/tools/UpdatePaths/Scripts/75592_simple_to_basic_chickens.txt b/tools/UpdatePaths/Scripts/75592_simple_to_basic_chickens.txt new file mode 100644 index 00000000000..1b2f6ee1d19 --- /dev/null +++ b/tools/UpdatePaths/Scripts/75592_simple_to_basic_chickens.txt @@ -0,0 +1 @@ +/mob/living/simple_animal/chicken : /mob/living/basic/chicken{@OLD}