diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index f7efbc7c198..5c00a4fc3bf 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -174,7 +174,7 @@ /mob/living/simple_animal/bot/cleanbot/proc/clean(obj/effect/decal/cleanable/target) anchored = 1 icon_state = "cleanbot-c" - visible_message("[src] begins to clean up [target]") + visible_message("[src] begins to clean up [target].") mode = BOT_CLEANING spawn(50) if(mode == BOT_CLEANING) 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 6937b78520c..5c9329ab3b6 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -25,7 +25,7 @@ melee_damage_upper = 2 environment_smash = 0 stop_automated_movement_when_pulled = 1 - var/obj/udder/udder = null + var/obj/item/udder/udder = null /mob/living/simple_animal/hostile/retaliate/goat/New() udder = new() @@ -97,7 +97,7 @@ attacktext = "kicks" attack_sound = 'sound/weapons/punch1.ogg' health = 50 - var/obj/udder/udder = null + var/obj/item/udder/udder = null gold_core_spawnable = 2 /mob/living/simple_animal/cow/New() @@ -272,28 +272,44 @@ var/global/chicken_count = 0 else SSobj.processing.Remove(src) -/obj/udder -/obj/udder/New() +/obj/item/udder + name = "udder" + +/obj/item/udder/New() reagents = new(50) reagents.my_atom = src reagents.add_reagent("milk", 20) -/obj/udder/proc/generateMilk() +/obj/item/udder/proc/generateMilk() if(prob(5)) reagents.add_reagent("milk", rand(5, 10)) -/obj/udder/proc/milkAnimal(obj/O, mob/user) +/obj/item/udder/proc/milkAnimal(obj/O, mob/user) var/obj/item/weapon/reagent_containers/glass/G = O if(G.reagents.total_volume >= G.volume) user << "[O] is full." return - var/transfered = reagents.trans_id_to(G, "milk", rand(5,10)) + var/transfered = reagents.trans_to(O, rand(5,10)) if(transfered) user.visible_message("[user] milks [src] using \the [O].", "You milk [src] using \the [O].") else user << "The udder is dry. Wait a bit longer..." -/obj/udder/Destroy() +/obj/item/udder/Destroy() qdel(reagents) return ..() + + +/obj/item/udder/scavenger + name = "milksac" + +/obj/item/udder/scavenger/New() + reagents = new(50) + reagents.my_atom = src + +/obj/item/udder/scavenger/generateMilk() + if(prob(15)) + reagents.add_reagent("cream", rand(5, 10)) + if(prob(10)) + reagents.add_reagent("salglu_solution", rand(5,10)) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 0d41abe1c86..4f1e41b519a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -733,6 +733,76 @@ icon = 'icons/obj/surgery.dmi' icon_state = "demon_heart" + +//Gutlunches + +/mob/living/simple_animal/hostile/asteroid/scavenger/ + name = "gutlunch" + desc = "A scavenger that eats raw meat, often found alongside ash walkers. Produces a thick, nutritious milk." + icon_state = "crab" + icon_living = "crab" + icon_dead = "crab_dead" + speak_emote = list("clicks") + emote_hear = list("clicks.") + emote_see = list("clacks.") + density = 0 + speak_chance = 1 + turns_per_move = 8 + environment_smash = 0 + move_to_delay = 15 + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1) + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "squishes" + friendly = "pinches" + a_intent = "help" + ventcrawler = 2 + gold_core_spawnable = 2 + stat_attack = 1 + gender = MALE + stop_automated_movement = FALSE + stat_exclusive = TRUE + robust_searching = TRUE + search_objects = TRUE + del_on_death = TRUE + loot = list(/obj/effect/decal/cleanable/blood/gibs) + wanted_objects = list(/obj/effect/decal/cleanable/xenoblood/, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/, + /obj/effect/decal/cleanable/blood/gibs/, /obj/effect/decal/cleanable/blood/drip/,/obj/effect/decal/cleanable/trail_holder) + var/obj/item/udder/scavenger/udder = null + + +/mob/living/simple_animal/hostile/asteroid/scavenger/New() + udder = new() + deathmessage = "[src] is pulped into bugmash." + ..() + +/mob/living/simple_animal/hostile/asteroid/scavenger/Destroy() + qdel(udder) + udder = null + return ..() + +/mob/living/simple_animal/hostile/asteroid/scavenger/attackby(obj/item/O, mob/user, params) + if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) + udder.milkAnimal(O, user) + else + ..() + +/mob/living/simple_animal/hostile/asteroid/scavenger/AttackingTarget() + if(is_type_in_list(target,wanted_objects)) //we eats + udder.generateMilk() + visible_message("[src] slurps up [target].") + qdel(target) + HandleProcreation() + LoseTarget() + ..() + +/mob/living/simple_animal/hostile/asteroid/scavenger/proc/HandleProcreation() + if(udder.reagents.total_volume == udder.reagents.maximum_volume) + new /mob/living/simple_animal/hostile/asteroid/scavenger/(get_turf(src)) + +/mob/living/simple_animal/hostile/asteroid/scavenger/female + gender = FEMALE + //Nests /mob/living/simple_animal/hostile/spawner/lavaland diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 2ee585ae7cb..a71f5fe68e9 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -168,4 +168,4 @@ /mob/living/simple_animal/hostile/viscerator/New() ..() - deathmessage = "[src] is smashed into pieces!" + deathmessage = "[src] is smashed into pieces!"