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 dfeef3b004e..c3c7269515e 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -23,11 +23,9 @@
health = 40
melee_damage_lower = 1
melee_damage_upper = 5
- var/datum/reagents/udder = null
+ var/milk_content = 0
/mob/living/simple_animal/hostile/retaliate/goat/New()
- udder = new(50)
- udder.my_atom = src
..()
/mob/living/simple_animal/hostile/retaliate/goat/Life()
@@ -42,9 +40,8 @@
LoseTarget()
src.visible_message("\blue [src] calms down.")
- if(stat == CONSCIOUS)
- if(udder && prob(5))
- udder.add_reagent("milk", rand(5, 10))
+ if(stat == CONSCIOUS && prob(5))
+ milk_content = min(50, milk_content+rand(5, 10))
if(locate(/obj/effect/plant) in loc)
var/obj/effect/plant/SV = locate(/obj/effect/plant) in loc
@@ -75,12 +72,15 @@
/mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
user.changeNext_move(CLICK_CD_MELEE)
- user.visible_message("[user] milks [src] using \the [O].")
var/obj/item/weapon/reagent_containers/glass/G = O
- var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
- if(G.reagents.total_volume >= G.volume)
- user << "\red The [O] is full."
- if(!transfered)
+ var/transfered = min(milk_content, rand(5,10), (G.volume - G.reagents.total_volume))
+ if(transfered > 0)
+ user.visible_message("[user] milks [src] using \the [O].")
+ G.reagents.add_reagent("milk", transfered)
+ milk_content -= transfered
+ else if(G.reagents.total_volume >= G.volume)
+ user << "\red \The [O] is full."
+ else
user << "\red The udder is dry. Wait a bit longer..."
else
..()
@@ -106,30 +106,31 @@
response_harm = "kicks the"
attacktext = "kicks"
health = 50
- var/datum/reagents/udder = null
+ var/milk_content = 0
/mob/living/simple_animal/cow/New()
- udder = new(50)
- udder.my_atom = src
..()
/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob, params, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
- user.visible_message("[user] milks [src] using \the [O].")
+ user.changeNext_move(CLICK_CD_MELEE)
var/obj/item/weapon/reagent_containers/glass/G = O
- var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
- if(G.reagents.total_volume >= G.volume)
- user << "\red The [O] is full."
- if(!transfered)
+ var/transfered = min(milk_content, rand(5,10), (G.volume - G.reagents.total_volume))
+ if(transfered > 0)
+ user.visible_message("[user] milks [src] using \the [O].")
+ G.reagents.add_reagent("milk", transfered)
+ milk_content -= transfered
+ else if(G.reagents.total_volume >= G.volume)
+ user << "\red \The [O] is full."
+ else
user << "\red The udder is dry. Wait a bit longer..."
else
..()
/mob/living/simple_animal/cow/Life()
. = ..()
- if(stat == CONSCIOUS)
- if(udder && prob(5))
- udder.add_reagent("milk", rand(5, 10))
+ if(stat == CONSCIOUS && prob(5))
+ milk_content = min(50, milk_content+rand(5, 10))
/mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M as mob)
if(!stat && M.a_intent == "disarm" && icon_state != icon_dead)