mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 15:47:15 +01:00
birdboat now chokes on plastic (#47551)
* birdboat now chokes on plastic * update maps * Update goose.dm * cleanup and fixes * more improvements, goose will eat any item with plastic now * limit goose to only eating 10 food per turf * End this nightmare * more sanity * Die in your own vomit you broken goose Co-Authored-By: skoglol <33292112+kriskog@users.noreply.github.com>
This commit is contained in:
committed by
skoglol
co-authored by
skoglol
parent
9752829d84
commit
af0eb8e935
@@ -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" = (
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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)))
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -23,14 +23,14 @@
|
||||
|
||||
if(!reagents || !reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(!canconsume(M, user))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if (!is_drainable())
|
||||
to_chat(user, "<span class='warning'>[src]'s lid hasn't been opened!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(M == user)
|
||||
user.visible_message("<span class='notice'>[user] swallows a gulp of [src].</span>", \
|
||||
@@ -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)
|
||||
. += "<span class='notice'>The cap seems to be missing.</span>"
|
||||
else if(cap_on)
|
||||
. += "<span class='notice'>The cap is firmly on to prevent spilling. Alt-click to remove the cap.</span>"
|
||||
else
|
||||
. += "<span class='notice'>The cap has been taken off. Alt-click to put a cap on.</span>"
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/waterbottle/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(cap_lost)
|
||||
to_chat(user, "<span class='warning'>The cap seems to be missing! Where did it go?</span>")
|
||||
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, "<span class='warning'>You fumble with [src]'s cap! The cap falls onto the ground and simply vanishes. Where the hell did it go?</span>")
|
||||
cap_lost = TRUE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You remove the cap from [src].</span>")
|
||||
else
|
||||
cap_on = TRUE
|
||||
spillable = FALSE
|
||||
add_overlay(cap_overlay, TRUE)
|
||||
to_chat(user, "<span class='notice'>You put the cap on [src].</span>")
|
||||
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, "<span class='warning'>You must remove the cap before you can do that!</span>")
|
||||
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, "<span class='warning'>You must remove the cap before you can do that!</span>")
|
||||
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, "<span class='warning'>[WB] has a cap firmly twisted on!</span>")
|
||||
. = ..()
|
||||
|
||||
// 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("<span class='notice'>[src] lands upright!</span>")
|
||||
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 += "<span class='notice'>The writing reads '[random_reagent.name]'.</span>"
|
||||
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
|
||||
|
||||
@@ -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("<span class='danger'>[src] hungrily gobbles up \the [suffocator]! </span>")
|
||||
visible_message("<span class='boldwarning'>[src] is choking on \the [suffocator]! </span>")
|
||||
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 @@
|
||||
. = ..()
|
||||
. += "<span class='notice'>Somehow, it still looks hungry.</span>"
|
||||
|
||||
/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("<span class='notice'>[src] looks too full to eat \the [tasty]!</span>")
|
||||
message_cooldown = world.time + 5 SECONDS
|
||||
return
|
||||
return FALSE
|
||||
if (tasty.foodtype & GROSS)
|
||||
visible_message("<span class='notice'>[src] hungrily gobbles up \the [tasty]!</span>")
|
||||
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("<span class='notice'>[src] refuses to eat \the [tasty].</span>")
|
||||
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("<span class='warning'>[src] is gagging on \the [plastic]!</span>")
|
||||
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
|
||||
|
||||
@@ -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)
|
||||
. += "<span class='notice'>The cap seems to be missing.</span>"
|
||||
else if(cap_on)
|
||||
. += "<span class='notice'>The cap is firmly on to prevent spilling. Alt-click to remove the cap.</span>"
|
||||
else
|
||||
. += "<span class='notice'>The cap has been taken off. Alt-click to put a cap on.</span>"
|
||||
|
||||
/obj/item/reagent_containers/glass/waterbottle/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(cap_lost)
|
||||
to_chat(user, "<span class='warning'>The cap seems to be missing! Where did it go?</span>")
|
||||
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, "<span class='warning'>You fumble with [src]'s cap! The cap falls onto the ground and simply vanishes. Where the hell did it go?</span>")
|
||||
cap_lost = TRUE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You remove the cap from [src].</span>")
|
||||
else
|
||||
cap_on = TRUE
|
||||
spillable = FALSE
|
||||
add_overlay(cap_overlay, TRUE)
|
||||
to_chat(user, "<span class='notice'>You put the cap on [src].</span>")
|
||||
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, "<span class='warning'>You must remove the cap before you can do that!</span>")
|
||||
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, "<span class='warning'>You must remove the cap before you can do that!</span>")
|
||||
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, "<span class='warning'>[WB] has a cap firmly twisted on!</span>")
|
||||
. = ..()
|
||||
|
||||
// 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("<span class='notice'>[src] lands upright!</span>")
|
||||
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 += "<span class='notice'>The writing reads '[random_reagent.name]'.</span>"
|
||||
|
||||
/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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user