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,