diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
index 27f46f2458d..f52556679d5 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
@@ -275,7 +275,7 @@
dir = 8
},
/obj/machinery/iv_drip,
-/obj/item/reagent_containers/glass/waterbottle/large,
+/obj/item/reagent_containers/food/drinks/waterbottle/large,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"aR" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
index 921a29e0033..5a1ccd7600f 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
@@ -1428,21 +1428,21 @@
"ft" = (
/obj/effect/turf_decal/box/white/corners,
/obj/structure/closet/crate,
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = -3;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = -3;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle/large,
-/obj/item/reagent_containers/glass/waterbottle/large,
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large,
+/obj/item/reagent_containers/food/drinks/waterbottle/large,
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 3;
pixel_y = -3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 3;
pixel_y = -3
},
diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
index 8f4d402bd17..b763b86409e 100644
--- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
+++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
@@ -1003,25 +1003,25 @@
/obj/structure/closet/crate{
name = "food crate"
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = -5;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 2;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = -2
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 5
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 1;
pixel_y = -3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 8;
pixel_y = -3
},
diff --git a/_maps/shuttles/ruin_caravan_victim.dmm b/_maps/shuttles/ruin_caravan_victim.dmm
index 63ef397c9fb..a660f579aeb 100644
--- a/_maps/shuttles/ruin_caravan_victim.dmm
+++ b/_maps/shuttles/ruin_caravan_victim.dmm
@@ -140,12 +140,12 @@
pixel_x = 3;
pixel_y = -3
},
-/obj/item/reagent_containers/glass/waterbottle{
+/obj/item/reagent_containers/food/drinks/waterbottle{
pixel_x = -3;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle,
-/obj/item/reagent_containers/glass/waterbottle{
+/obj/item/reagent_containers/food/drinks/waterbottle,
+/obj/item/reagent_containers/food/drinks/waterbottle{
pixel_x = 3;
pixel_y = -3
},
diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm
index 18053265f39..ecb26682a17 100644
--- a/_maps/shuttles/whiteship_box.dmm
+++ b/_maps/shuttles/whiteship_box.dmm
@@ -336,12 +336,12 @@
locked = 0;
name = "fridge"
},
-/obj/item/reagent_containers/glass/waterbottle{
+/obj/item/reagent_containers/food/drinks/waterbottle{
pixel_x = -3;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle,
-/obj/item/reagent_containers/glass/waterbottle{
+/obj/item/reagent_containers/food/drinks/waterbottle,
+/obj/item/reagent_containers/food/drinks/waterbottle{
pixel_x = 3;
pixel_y = -3
},
@@ -529,25 +529,25 @@
/obj/structure/closet/crate{
name = "food crate"
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = -5;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 2;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = -2
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 5
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 1;
pixel_y = -3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 8;
pixel_y = -3
},
diff --git a/_maps/shuttles/whiteship_delta.dmm b/_maps/shuttles/whiteship_delta.dmm
index 30b073d52e9..1a553f2ecac 100644
--- a/_maps/shuttles/whiteship_delta.dmm
+++ b/_maps/shuttles/whiteship_delta.dmm
@@ -201,21 +201,21 @@
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/turf_decal/bot_white,
/obj/structure/closet/crate,
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = -3;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle/large,
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large,
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 3;
pixel_y = -3
},
-/obj/item/reagent_containers/glass/waterbottle{
+/obj/item/reagent_containers/food/drinks/waterbottle{
pixel_x = -3;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle,
-/obj/item/reagent_containers/glass/waterbottle{
+/obj/item/reagent_containers/food/drinks/waterbottle,
+/obj/item/reagent_containers/food/drinks/waterbottle{
pixel_x = 3;
pixel_y = -3
},
diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm
index 7ff4ad5f94f..1a6d65b1466 100644
--- a/_maps/shuttles/whiteship_meta.dmm
+++ b/_maps/shuttles/whiteship_meta.dmm
@@ -295,25 +295,25 @@
/obj/structure/closet/crate{
name = "food crate"
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = -5;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 2;
pixel_y = 3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = -2
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 5
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 1;
pixel_y = -3
},
-/obj/item/reagent_containers/glass/waterbottle/large{
+/obj/item/reagent_containers/food/drinks/waterbottle/large{
pixel_x = 8;
pixel_y = -3
},
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index d9349f35c5b..68a0a64defd 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -593,9 +593,9 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
new /datum/stack_recipe("plastic floor tile", /obj/item/stack/tile/plastic, 1, 4, 20), \
new /datum/stack_recipe("folding plastic chair", /obj/structure/chair/plastic, 2), \
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \
- new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/waterbottle/empty), \
- new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/waterbottle/large/empty, 3), \
- new /datum/stack_recipe("colo cups", /obj/item/reagent_containers/glass/colocup, 1), \
+ new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/empty), \
+ new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/large/empty, 3), \
+ new /datum/stack_recipe("colo cups", /obj/item/reagent_containers/food/drinks/colocup, 1), \
new /datum/stack_recipe("wet floor sign", /obj/item/clothing/suit/caution, 2), \
new /datum/stack_recipe("blank sign", /obj/item/sign_backing, 1)))
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 1a5e736a6c2..0e22ae44721 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -365,7 +365,7 @@
/obj/item/reagent_containers/pill,
/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/glass/bottle,
- /obj/item/reagent_containers/glass/waterbottle,
+ /obj/item/reagent_containers/food/drinks/waterbottle,
/obj/item/reagent_containers/medigel,
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/dropper,
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index b2e91ccd1ee..bd3b48de4e1 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -23,14 +23,14 @@
if(!reagents || !reagents.total_volume)
to_chat(user, "[src] is empty!")
- return 0
+ return FALSE
if(!canconsume(M, user))
- return 0
+ return FALSE
if (!is_drainable())
to_chat(user, "[src]'s lid hasn't been opened!")
- return 0
+ return FALSE
if(M == user)
user.visible_message("[user] swallows a gulp of [src].", \
@@ -54,7 +54,7 @@
reagents.reaction(M, INGEST, fraction)
reagents.trans_to(M, gulp_size, transfered_by = user)
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), TRUE)
- return 1
+ return TRUE
/obj/item/reagent_containers/food/drinks/afterattack(obj/target, mob/user , proximity)
. = ..()
@@ -258,6 +258,137 @@
isGlass = FALSE
custom_price = 38
+/obj/item/reagent_containers/food/drinks/waterbottle
+ name = "bottle of water"
+ desc = "A bottle of water filled at an old Earth bottling facility."
+ icon = 'icons/obj/drinks.dmi'
+ icon_state = "smallbottle"
+ item_state = "bottle"
+ list_reagents = list(/datum/reagent/water = 49.5, /datum/reagent/fluorine = 0.5)//see desc, don't think about it too hard
+ custom_materials = list(/datum/material/plastic=1000)
+ volume = 50
+ amount_per_transfer_from_this = 10
+ fill_icon_thresholds = list(0, 10, 25, 50, 75, 80, 90)
+ isGlass = FALSE
+ // The 2 bottles have separate cap overlay icons because if the bottle falls over while bottle flipping the cap stays fucked on the moved overlay
+ var/cap_icon_state = "bottle_cap_small"
+ var/cap_on = TRUE
+ var/cap_lost = FALSE
+ var/mutable_appearance/cap_overlay
+ var/flip_chance = 10
+
+/obj/item/reagent_containers/food/drinks/waterbottle/Initialize()
+ . = ..()
+ cap_overlay = mutable_appearance(icon, cap_icon_state)
+ if(cap_on)
+ spillable = FALSE
+ add_overlay(cap_overlay, TRUE)
+
+/obj/item/reagent_containers/food/drinks/waterbottle/examine(mob/user)
+ . = ..()
+ if(cap_lost)
+ . += "The cap seems to be missing."
+ else if(cap_on)
+ . += "The cap is firmly on to prevent spilling. Alt-click to remove the cap."
+ else
+ . += "The cap has been taken off. Alt-click to put a cap on."
+
+/obj/item/reagent_containers/food/drinks/waterbottle/AltClick(mob/user)
+ . = ..()
+ if(cap_lost)
+ to_chat(user, "The cap seems to be missing! Where did it go?")
+ return
+
+ var/fumbled = HAS_TRAIT(user, TRAIT_CLUMSY) && prob(5)
+ if(cap_on || fumbled)
+ cap_on = FALSE
+ spillable = TRUE
+ cut_overlay(cap_overlay, TRUE)
+ animate(src, transform = null, time = 2, loop = 0)
+ if(fumbled)
+ to_chat(user, "You fumble with [src]'s cap! The cap falls onto the ground and simply vanishes. Where the hell did it go?")
+ cap_lost = TRUE
+ else
+ to_chat(user, "You remove the cap from [src].")
+ else
+ cap_on = TRUE
+ spillable = FALSE
+ add_overlay(cap_overlay, TRUE)
+ to_chat(user, "You put the cap on [src].")
+ update_icon()
+
+/obj/item/reagent_containers/food/drinks/waterbottle/is_refillable()
+ if(cap_on)
+ return FALSE
+ . = ..()
+
+/obj/item/reagent_containers/food/drinks/waterbottle/is_drainable()
+ if(cap_on)
+ return FALSE
+ . = ..()
+
+/obj/item/reagent_containers/food/drinks/waterbottle/attack(mob/M, mob/user, obj/target)
+ if(cap_on && reagents.total_volume && istype(M))
+ to_chat(user, "You must remove the cap before you can do that!")
+ return
+ . = ..()
+
+/obj/item/reagent_containers/food/drinks/waterbottle/afterattack(obj/target, mob/user, proximity)
+ if(cap_on && (target.is_refillable() || target.is_drainable() || (reagents.total_volume && user.a_intent == INTENT_HARM)))
+ to_chat(user, "You must remove the cap before you can do that!")
+ return
+
+ else if(istype(target, /obj/item/reagent_containers/food/drinks/waterbottle))
+ var/obj/item/reagent_containers/food/drinks/waterbottle/WB = target
+ if(WB.cap_on)
+ to_chat(user, "[WB] has a cap firmly twisted on!")
+ . = ..()
+
+// heehoo bottle flipping
+/obj/item/reagent_containers/food/drinks/waterbottle/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
+ . = ..()
+ if(cap_on && reagents.total_volume)
+ if(prob(flip_chance)) // landed upright
+ src.visible_message("[src] lands upright!")
+ SEND_SIGNAL(throwingdatum.thrower, COMSIG_ADD_MOOD_EVENT, "bottle_flip", /datum/mood_event/bottle_flip)
+ else // landed on it's side
+ animate(src, transform = matrix(prob(50)? 90 : -90, MATRIX_ROTATE), time = 3, loop = 0)
+
+/obj/item/reagent_containers/food/drinks/waterbottle/pickup(mob/user)
+ . = ..()
+ animate(src, transform = null, time = 1, loop = 0)
+
+/obj/item/reagent_containers/food/drinks/waterbottle/empty
+ list_reagents = list()
+ cap_on = FALSE
+
+/obj/item/reagent_containers/food/drinks/waterbottle/large
+ desc = "A fresh commercial-sized bottle of water."
+ icon_state = "largebottle"
+ custom_materials = list(/datum/material/plastic=3000)
+ list_reagents = list(/datum/reagent/water = 100)
+ volume = 100
+ amount_per_transfer_from_this = 20
+ cap_icon_state = "bottle_cap"
+
+/obj/item/reagent_containers/food/drinks/waterbottle/large/empty
+ list_reagents = list()
+ cap_on = FALSE
+
+// Admin spawn
+/obj/item/reagent_containers/food/drinks/waterbottle/relic
+ name = "mysterious bottle"
+ desc = "A bottle quite similar to a water bottle, but with some words scribbled on with a marker. It seems to be radiating some kind of energy."
+ flip_chance = 100 // FLIPP
+
+/obj/item/reagent_containers/food/drinks/waterbottle/relic/Initialize()
+ var/reagent_id = get_random_reagent_id()
+ var/datum/reagent/random_reagent = new reagent_id
+ list_reagents = list(random_reagent.type = 50)
+ . = ..()
+ desc += "The writing reads '[random_reagent.name]'."
+ update_icon()
+
/obj/item/reagent_containers/food/drinks/beer
name = "space beer"
desc = "Beer. In space."
@@ -355,6 +486,25 @@
desc = "A small carton, intended for holding drinks."
+/obj/item/reagent_containers/food/drinks/colocup
+ name = "colo cup"
+ desc = "A cheap, mass produced style of cup, typically used at parties. They never seem to come out red, for some reason..."
+ icon = 'icons/obj/drinks.dmi'
+ icon_state = "colocup"
+ lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
+ item_state = "colocup"
+ custom_materials = list(/datum/material/plastic = 1000)
+ possible_transfer_amounts = list(5, 10, 15, 20)
+ volume = 20
+ amount_per_transfer_from_this = 5
+ isGlass = FALSE
+
+/obj/item/reagent_containers/food/drinks/colocup/Initialize()
+ .=..()
+ icon_state = "colocup[rand(0, 6)]"
+ pixel_x = rand(-4,4)
+ pixel_y = rand(-4,4)
//////////////////////////drinkingglass and shaker//
//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink
diff --git a/code/modules/mob/living/simple_animal/hostile/goose.dm b/code/modules/mob/living/simple_animal/hostile/goose.dm
index 21beba193a0..9b7621ed33e 100644
--- a/code/modules/mob/living/simple_animal/hostile/goose.dm
+++ b/code/modules/mob/living/simple_animal/hostile/goose.dm
@@ -1,5 +1,4 @@
#define GOOSE_SATIATED 50
-
/mob/living/simple_animal/hostile/retaliate/goose
name = "goose"
desc = "It's loose"
@@ -9,7 +8,7 @@
mob_biotypes = MOB_ORGANIC|MOB_BEAST
speak_chance = 0
turns_per_move = 5
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 2)
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2)
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "gently pushes aside"
@@ -36,13 +35,48 @@
var/icon_vomit = "vomit"
var/icon_vomit_end = "vomit_end"
var/message_cooldown = 0
+ var/list/nummies = list()
+ var/choking = FALSE
-/mob/living/simple_animal/hostile/retaliate/goose/handle_automated_movement()
+/mob/living/simple_animal/hostile/retaliate/goose/Initialize()
. = ..()
- if (stat == DEAD)
+ RegisterSignal(src, COMSIG_MOVABLE_MOVED, .proc/goosement)
+
+/mob/living/simple_animal/hostile/retaliate/goose/proc/goosement(atom/movable/AM, OldLoc, Dir, Forced)
+ if(stat == DEAD)
return
- if(prob(5) && random_retaliate == TRUE)
- Retaliate()
+ nummies.Cut()
+ nummies += loc.contents
+ if(prob(5) && random_retaliate)
+ Retaliate()
+
+/mob/living/simple_animal/hostile/retaliate/goose/handle_automated_action()
+ if(length(nummies))
+ var/obj/item/E = locate() in nummies
+ if(E && E.loc == loc)
+ feed(E)
+ nummies -= E
+
+/mob/living/simple_animal/hostile/retaliate/goose/vomit/handle_automated_action()
+ if(length(nummies))
+ var/obj/item/E = pick(nummies)
+ if(!(E.custom_materials && E.custom_materials[getmaterialref(/datum/material/plastic)]))
+ nummies -= E // remove non-plastic item from queue
+ E = locate(/obj/item/reagent_containers/food) in nummies // find food
+ if(E && E.loc == loc)
+ feed(E)
+ nummies -= E
+
+/mob/living/simple_animal/hostile/retaliate/goose/proc/feed(obj/item/suffocator)
+ if(stat == DEAD || choking) // plapatin I swear to god
+ return FALSE
+ if(suffocator.custom_materials && suffocator.custom_materials[getmaterialref(/datum/material/plastic)]) // dumb goose'll swallow food or drink with plastic in it
+ visible_message("[src] hungrily gobbles up \the [suffocator]! ")
+ visible_message("[src] is choking on \the [suffocator]! ")
+ suffocator.forceMove(src)
+ choke(suffocator)
+ choking = TRUE
+ return TRUE
/mob/living/simple_animal/hostile/retaliate/goose/vomit
name = "Birdboat"
@@ -66,7 +100,6 @@
. = ..()
goosevomit = new
goosevomit.Grant(src)
- RegisterSignal(src, COMSIG_MOVABLE_MOVED, .proc/goosement)
// 5% chance every round to have anarchy mode deadchat control on birdboat.
if(prob(5))
desc = "[initial(desc)] It's waddling more than usual. It seems to be possessed."
@@ -81,35 +114,67 @@
. = ..()
. += "Somehow, it still looks hungry."
-/mob/living/simple_animal/hostile/retaliate/goose/vomit/attacked_by(obj/item/O, mob/user)
+/mob/living/simple_animal/hostile/retaliate/goose/attackby(obj/item/O, mob/user)
. = ..()
- if(istype(O, /obj/item/reagent_containers/food))
- feed(O)
+ if(feed(O))
+ return TRUE
-/mob/living/simple_animal/hostile/retaliate/goose/vomit/proc/feed(obj/item/reagent_containers/food/tasty)
- if (stat == DEAD) // plapatin I swear to god
- return
+/mob/living/simple_animal/hostile/retaliate/goose/vomit/feed(obj/item/reagent_containers/food/tasty)
+ . = ..()
+ if(. || !istype(tasty))
+ return FALSE
if (contents.len > GOOSE_SATIATED)
if(message_cooldown < world.time)
visible_message("[src] looks too full to eat \the [tasty]!")
message_cooldown = world.time + 5 SECONDS
- return
+ return FALSE
if (tasty.foodtype & GROSS)
visible_message("[src] hungrily gobbles up \the [tasty]!")
tasty.forceMove(src)
playsound(src,'sound/items/eatfood.ogg', 70, TRUE)
vomitCoefficient += 3
vomitTimeBonus += 2
+ return TRUE
else
if(message_cooldown < world.time)
visible_message("[src] refuses to eat \the [tasty].")
message_cooldown = world.time + 5 SECONDS
+ return FALSE
+
+/mob/living/simple_animal/hostile/retaliate/goose/proc/choke(obj/item/reagent_containers/food/plastic)
+ if(stat == DEAD || choking)
+ return
+ addtimer(CALLBACK(src, .proc/suffocate), 300)
+
+/mob/living/simple_animal/hostile/retaliate/goose/vomit/choke(obj/item/reagent_containers/food/plastic)
+ if(stat == DEAD || choking)
+ return
+ if(prob(25))
+ visible_message("[src] is gagging on \the [plastic]!")
+ emote("me", 1, "gags!")
+ addtimer(CALLBACK(src, .proc/vomit), 300)
+ else
+ addtimer(CALLBACK(src, .proc/suffocate), 300)
+
+/mob/living/simple_animal/hostile/retaliate/goose/Life()
+ . = ..()
+ if(choking && !stat)
+ do_jitter_animation(50)
+ if(prob(20))
+ emote("gasp")
+
+/mob/living/simple_animal/hostile/retaliate/goose/proc/suffocate()
+ if(!choking)
+ return
+ deathmessage = "lets out one final oxygen-deprived honk before they go limp and lifeless.."
+ death()
/mob/living/simple_animal/hostile/retaliate/goose/vomit/proc/vomit()
if (stat == DEAD)
return
var/turf/T = get_turf(src)
var/obj/item/reagent_containers/food/consumed = locate() in contents //Barf out a single food item from our guts
+ choking = FALSE // assume birdboat is vomiting out whatever he was choking on
if (prob(50) && consumed)
barf_food(consumed)
else
@@ -157,18 +222,11 @@
vomiting = FALSE
icon_state = initial(icon_state)
-/mob/living/simple_animal/hostile/retaliate/goose/vomit/proc/goosement(atom/movable/AM, OldLoc, Dir, Forced)
- if(stat == DEAD)
- return
+/mob/living/simple_animal/hostile/retaliate/goose/vomit/goosement(atom/movable/AM, OldLoc, Dir, Forced)
+ . = ..()
if(vomiting)
vomit() // its supposed to keep vomiting if you move
return
- var/turf/currentTurf = get_turf(src)
- while (currentTurf == get_turf(src))
- var/obj/item/reagent_containers/food/tasty = locate() in currentTurf
- if (tasty)
- feed(tasty)
- stoplag(2)
if(prob(vomitCoefficient * 0.2))
vomit_prestart(vomitTimeBonus + 25)
vomitCoefficient = 1
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index e0b61935b3c..93b30dab950 100755
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -287,135 +287,6 @@
return
return ..()
-/obj/item/reagent_containers/glass/waterbottle
- name = "bottle of water"
- desc = "A bottle of water filled at an old Earth bottling facility."
- icon = 'icons/obj/drinks.dmi'
- icon_state = "smallbottle"
- item_state = "bottle"
- list_reagents = list(/datum/reagent/water = 49.5, /datum/reagent/fluorine = 0.5)//see desc, don't think about it too hard
- custom_materials = list(/datum/material/plastic=1000)
- volume = 50
- amount_per_transfer_from_this = 10
- fill_icon_thresholds = list(0, 10, 25, 50, 75, 80, 90)
-
- // The 2 bottles have separate cap overlay icons because if the bottle falls over while bottle flipping the cap stays fucked on the moved overlay
- var/cap_icon_state = "bottle_cap_small"
- var/cap_on = TRUE
- var/cap_lost = FALSE
- var/mutable_appearance/cap_overlay
- var/flip_chance = 10
-
-/obj/item/reagent_containers/glass/waterbottle/Initialize()
- . = ..()
- cap_overlay = mutable_appearance(icon, cap_icon_state)
- if(cap_on)
- spillable = FALSE
- add_overlay(cap_overlay, TRUE)
-
-/obj/item/reagent_containers/glass/waterbottle/examine(mob/user)
- . = ..()
- if(cap_lost)
- . += "The cap seems to be missing."
- else if(cap_on)
- . += "The cap is firmly on to prevent spilling. Alt-click to remove the cap."
- else
- . += "The cap has been taken off. Alt-click to put a cap on."
-
-/obj/item/reagent_containers/glass/waterbottle/AltClick(mob/user)
- . = ..()
- if(cap_lost)
- to_chat(user, "The cap seems to be missing! Where did it go?")
- return
-
- var/fumbled = HAS_TRAIT(user, TRAIT_CLUMSY) && prob(5)
- if(cap_on || fumbled)
- cap_on = FALSE
- spillable = TRUE
- cut_overlay(cap_overlay, TRUE)
- animate(src, transform = null, time = 2, loop = 0)
- if(fumbled)
- to_chat(user, "You fumble with [src]'s cap! The cap falls onto the ground and simply vanishes. Where the hell did it go?")
- cap_lost = TRUE
- else
- to_chat(user, "You remove the cap from [src].")
- else
- cap_on = TRUE
- spillable = FALSE
- add_overlay(cap_overlay, TRUE)
- to_chat(user, "You put the cap on [src].")
- update_icon()
-
-/obj/item/reagent_containers/glass/waterbottle/is_refillable()
- if(cap_on)
- return FALSE
- . = ..()
-
-/obj/item/reagent_containers/glass/waterbottle/is_drainable()
- if(cap_on)
- return FALSE
- . = ..()
-
-/obj/item/reagent_containers/glass/waterbottle/attack(mob/M, mob/user, obj/target)
- if(cap_on && reagents.total_volume && istype(M))
- to_chat(user, "You must remove the cap before you can do that!")
- return
- . = ..()
-
-/obj/item/reagent_containers/glass/waterbottle/afterattack(obj/target, mob/user, proximity)
- if(cap_on && (target.is_refillable() || target.is_drainable() || (reagents.total_volume && user.a_intent == INTENT_HARM)))
- to_chat(user, "You must remove the cap before you can do that!")
- return
-
- else if(istype(target, /obj/item/reagent_containers/glass/waterbottle))
- var/obj/item/reagent_containers/glass/waterbottle/WB = target
- if(WB.cap_on)
- to_chat(user, "[WB] has a cap firmly twisted on!")
- . = ..()
-
-// heehoo bottle flipping
-/obj/item/reagent_containers/glass/waterbottle/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- . = ..()
- if(cap_on && reagents.total_volume)
- if(prob(flip_chance)) // landed upright
- src.visible_message("[src] lands upright!")
- SEND_SIGNAL(throwingdatum.thrower, COMSIG_ADD_MOOD_EVENT, "bottle_flip", /datum/mood_event/bottle_flip)
- else // landed on it's side
- animate(src, transform = matrix(prob(50)? 90 : -90, MATRIX_ROTATE), time = 3, loop = 0)
-
-/obj/item/reagent_containers/glass/waterbottle/pickup(mob/user)
- . = ..()
- animate(src, transform = null, time = 1, loop = 0)
-
-/obj/item/reagent_containers/glass/waterbottle/empty
- list_reagents = list()
- cap_on = FALSE
-
-/obj/item/reagent_containers/glass/waterbottle/large
- desc = "A fresh commercial-sized bottle of water."
- icon_state = "largebottle"
- custom_materials = list(/datum/material/plastic=3000)
- list_reagents = list(/datum/reagent/water = 100)
- volume = 100
- amount_per_transfer_from_this = 20
- cap_icon_state = "bottle_cap"
-
-/obj/item/reagent_containers/glass/waterbottle/large/empty
- list_reagents = list()
- cap_on = FALSE
-
-// Admin spawn
-/obj/item/reagent_containers/glass/waterbottle/relic
- name = "mysterious bottle"
- desc = "A bottle quite similar to a water bottle, but with some words scribbled on with a marker. It seems to be radiating some kind of energy."
- flip_chance = 100 // FLIPP
-
-/obj/item/reagent_containers/glass/waterbottle/relic/Initialize()
- var/datum/reagent/random_reagent = get_random_reagent_id()
- list_reagents = list(random_reagent = 50)
- . = ..()
- desc += "The writing reads '[random_reagent.name]'."
-
/obj/item/pestle
name = "pestle"
desc = "An ancient, simple tool used in conjunction with a mortar to grind or juice items."
@@ -480,22 +351,3 @@
name = "saline canister"
volume = 5000
list_reagents = list(/datum/reagent/medicine/salglu_solution = 5000)
-
-/obj/item/reagent_containers/glass/colocup
- name = "colo cup"
- desc = "A cheap, mass produced style of cup, typically used at parties. They never seem to come out red, for some reason..."
- icon = 'icons/obj/drinks.dmi'
- icon_state = "colocup"
- lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
- item_state = "colocup"
- custom_materials = list(/datum/material/plastic = 1000)
- possible_transfer_amounts = list(5, 10, 15, 20)
- volume = 20
- amount_per_transfer_from_this = 5
-
-/obj/item/reagent_containers/glass/colocup/Initialize()
- .=..()
- icon_state = "colocup[rand(0, 6)]"
- pixel_x = rand(-4,4)
- pixel_y = rand(-4,4)
diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm
index 04e6e276e0c..69def37ddf6 100644
--- a/code/modules/vending/cola.dm
+++ b/code/modules/vending/cola.dm
@@ -12,7 +12,7 @@
/obj/item/reagent_containers/food/drinks/soda_cans/space_up = 10,
/obj/item/reagent_containers/food/drinks/soda_cans/pwr_game = 10,
/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime = 10,
- /obj/item/reagent_containers/glass/waterbottle = 10)
+ /obj/item/reagent_containers/food/drinks/waterbottle = 10)
contraband = list(/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko = 6,
/obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 6)
premium = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola = 1,