diff --git a/baystation12.dme b/baystation12.dme index 162ca4edfe2..b76752d46f5 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -353,7 +353,6 @@ #include "code\game\machinery\autolathe.dm" #include "code\game\machinery\autolathe_datums.dm" #include "code\game\machinery\Beacon.dm" -#include "code\game\machinery\bees_items.dm" #include "code\game\machinery\biogenerator.dm" #include "code\game\machinery\bioprinter.dm" #include "code\game\machinery\bluespacerelay.dm" @@ -1066,7 +1065,6 @@ #include "code\modules\hydroponics\spreading\spreading_growth.dm" #include "code\modules\hydroponics\spreading\spreading_response.dm" #include "code\modules\hydroponics\trays\tray.dm" -#include "code\modules\hydroponics\trays\tray_apiary.dm" #include "code\modules\hydroponics\trays\tray_process.dm" #include "code\modules\hydroponics\trays\tray_reagents.dm" #include "code\modules\hydroponics\trays\tray_soil.dm" @@ -1307,7 +1305,6 @@ #include "code\modules\mob\living\silicon\robot\drone\drone_damage.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_items.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm" -#include "code\modules\mob\living\simple_animal\bees.dm" #include "code\modules\mob\living\simple_animal\corpse.dm" #include "code\modules\mob\living\simple_animal\parrot.dm" #include "code\modules\mob\living\simple_animal\shade.dm" diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 77800d97dfd..b447f5bff7c 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1207,12 +1207,15 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/bee_keeper name = "Beekeeping crate" - contains = list(/obj/item/beezeez, - /obj/item/weapon/bee_net, - /obj/item/apiary, - /obj/item/queen_bee) + contains = list(/obj/item/beehive_assembly, + /obj/item/bee_smoker, + /obj/item/honey_frame, + /obj/item/honey_frame, + /obj/item/honey_frame, + /obj/item/honey_frame, + /obj/item/honey_frame, + /obj/item/bee_pack) cost = 40 - contraband = 1 containertype = /obj/structure/closet/crate/hydroponics containername = "Beekeeping crate" access = access_hydroponics diff --git a/code/game/machinery/bees_items.dm b/code/game/machinery/bees_items.dm deleted file mode 100644 index cf9018726c7..00000000000 --- a/code/game/machinery/bees_items.dm +++ /dev/null @@ -1,122 +0,0 @@ - -/obj/item/queen_bee - name = "queen bee packet" - desc = "Place her into an apiary so she can get busy." - icon = 'icons/obj/seeds.dmi' - icon_state = "seed-kudzu" - w_class = 1 - -/obj/item/weapon/bee_net - name = "bee net" - desc = "For catching rogue bees." - icon = 'icons/obj/apiary_bees_etc.dmi' - icon_state = "bee_net" - item_state = "bedsheet" - w_class = 3 - var/caught_bees = 0 - -/obj/item/weapon/bee_net/attack_self(mob/user as mob) - var/turf/T = get_step(get_turf(user), user.dir) - for(var/mob/living/simple_animal/bee/B in T) - if(B.feral < 0) - caught_bees += B.strength - qdel(B) - user.visible_message("\The [user] nets some bees.","You net up some of the becalmed bees.") - else - user.visible_message("\The [user] swings at some bees, they don't seem to like it.","You swing at some bees, they don't seem to like it.") - B.feral = 5 - B.target_mob = user - -/obj/item/weapon/bee_net/verb/empty_bees() - set src in usr - set name = "Empty bee net" - set category = "Object" - var/mob/living/carbon/M - if(iscarbon(usr)) - M = usr - - while(caught_bees > 0) - //release a few super massive swarms - while(caught_bees > 5) - var/mob/living/simple_animal/bee/B = new(src.loc) - B.feral = 5 - B.target_mob = M - B.strength = 6 - B.icon_state = "bees_swarm" - caught_bees -= 6 - - //what's left over - var/mob/living/simple_animal/bee/B = new(src.loc) - B.strength = caught_bees - B.icon_state = "bees[B.strength]" - B.feral = 5 - B.target_mob = M - - caught_bees = 0 - -/obj/item/apiary - name = "moveable apiary" - icon = 'icons/obj/apiary_bees_etc.dmi' - icon_state = "apiary_item" - item_state = "giftbag" - w_class = 5 - -/obj/item/beezeez - name = "bottle of BeezEez" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle17" - New() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) - -/obj/item/weapon/reagent_containers/food/snacks/honeycomb - name = "honeycomb" - icon_state = "honeycomb" - desc = "Dripping with sugary sweetness." - - New() - ..() - -/obj/item/weapon/reagent_containers/food/snacks/honeycomb/New() - ..() - reagents.add_reagent("honey",10) - reagents.add_reagent("nutriment", 0.5) - reagents.add_reagent("sugar", 2) - bitesize = 2 - -/datum/reagent/honey - name = "Honey" - id = "honey" - description = "A golden yellow syrup, loaded with sugary sweetness." - color = "#FFFF00" - -/obj/item/weapon/book/manual/hydroponics_beekeeping - name = "The Ins and Outs of Apiculture - A Precise Art" - icon_state ="bookHydroponicsBees" - author = "Beekeeper Dave" - title = "The Ins and Outs of Apiculture - A Precise Art" - dat = {" - - - - -

Raising Bees

- - Bees are loving but fickle creatures. Don't mess with their hive and stay away from any clusters of them, and you'll avoid their ire. - Sometimes, you'll need to dig around in there for those delicious sweeties though - in that case make sure you wear sealed protection gear - and carry an extinguisher or smoker with you - any bees chasing you, once calmed down, can thusly be netted and returned safely to the hive. - BeezEez is a cure-all panacea for them, but use it too much and the hive may grow to apocalyptic proportions. Other than that, bees are excellent pets - for all the family and are excellent caretakers of one's garden: having a hive or two around will aid in the longevity and growth rate of plants, - and aid them in fighting off poisons and disease. - - - - "} diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm index 29f603db74c..4bdb96191fa 100644 --- a/code/modules/hydroponics/beekeeping/beehive.dm +++ b/code/modules/hydroponics/beekeeping/beehive.dm @@ -15,10 +15,10 @@ /obj/machinery/beehive/update_icon() overlays.Cut() icon_state = "beehive" - if(honeycombs >= 1) - overlays += "filled[round(honeycombs)]" if(frames) overlays += "empty[frames]" + if(honeycombs >= 1) + overlays += "filled[round(honeycombs)]" /obj/machinery/beehive/examine(var/mob/user) ..() @@ -183,6 +183,7 @@ /obj/item/stack/wax name = "wax" + singular_name = "wax piece" desc = "Soft substance produced by bees. Used to make candles." icon_state = "sheet-metal" diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index fcbf26e8664..48322324cfc 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -531,19 +531,6 @@ anchored = !anchored user << "You [anchored ? "wrench" : "unwrench"] \the [src]." - else if(istype(O, /obj/item/apiary)) - - if(seed) - user << "[src] is already occupied!" - else - user.drop_item() - qdel(O) - - var/obj/machinery/apiary/A = new(src.loc) - A.icon = src.icon - A.icon_state = src.icon_state - A.hydrotray_type = src.type - qdel(src) else if(O.force && seed) user.visible_message("\The [seed.display_name] has been attacked by [user] with \the [O]!") if(!dead) diff --git a/code/modules/hydroponics/trays/tray_apiary.dm b/code/modules/hydroponics/trays/tray_apiary.dm deleted file mode 100644 index 80280fecde1..00000000000 --- a/code/modules/hydroponics/trays/tray_apiary.dm +++ /dev/null @@ -1,240 +0,0 @@ -//http://www.youtube.com/watch?v=-1GadTfGFvU -//i could have done these as just an ordinary plant, but fuck it - there would have been too much snowflake code - -/obj/machinery/apiary - name = "apiary tray" - icon = 'icons/obj/hydroponics_machines.dmi' - icon_state = "hydrotray3" - density = 1 - anchored = 1 - var/nutrilevel = 0 - var/yieldmod = 1 - var/mut = 1 - var/toxic = 0 - var/dead = 0 - var/health = -1 - var/maxhealth = 100 - var/lastcycle = 0 - var/cycledelay = 100 - var/harvestable_honey = 0 - var/beezeez = 0 - var/swarming = 0 - - var/bees_in_hive = 0 - var/list/owned_bee_swarms = list() - var/hydrotray_type = /obj/machinery/portable_atmospherics/hydroponics - -//overwrite this after it's created if the apiary needs a custom machinery sprite -/obj/machinery/apiary/New() - ..() - overlays += image('icons/obj/apiary_bees_etc.dmi', icon_state="apiary") - -/obj/machinery/apiary/bullet_act(var/obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables. - if(istype(Proj ,/obj/item/projectile/energy/floramut)) - mut++ - else if(istype(Proj ,/obj/item/projectile/energy/florayield)) - if(!yieldmod) - yieldmod += 1 - //world << "Yield increased by 1, from 0, to a total of [myseed.yield]" - else if (prob(1/(yieldmod * yieldmod) *100))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2... - yieldmod += 1 - //world << "Yield increased by 1, to a total of [myseed.yield]" - else - ..() - return - -/obj/machinery/apiary/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/queen_bee)) - if(health > 0) - user << "\red There is already a queen in there." - else - health = 10 - nutrilevel += 10 - user.drop_item() - qdel(O) - user << "\blue You carefully insert the queen into [src], she gets busy making a hive." - bees_in_hive = 0 - else if(istype(O, /obj/item/beezeez)) - beezeez += 100 - nutrilevel += 10 - user.drop_item() - if(health > 0) - user << "\blue You insert [O] into [src]. A relaxed humming appears to pick up." - else - user << "\blue You insert [O] into [src]. Now it just needs some bees." - qdel(O) - else if(istype(O, /obj/item/weapon/material/minihoe)) - if(health > 0) - user << "\red You begin to dislodge the apiary from the tray, the bees don't like that." - angry_swarm(user) - else - user << "\blue You begin to dislodge the dead apiary from the tray." - if(do_after(user, 50)) - new hydrotray_type(src.loc) - new /obj/item/apiary(src.loc) - user << "\red You dislodge the apiary from the tray." - qdel(src) - else if(istype(O, /obj/item/weapon/bee_net)) - var/obj/item/weapon/bee_net/N = O - if(N.caught_bees > 0) - user << "\blue You empty the bees into the apiary." - bees_in_hive += N.caught_bees - N.caught_bees = 0 - else - user << "\blue There are no more bees in the net." - else if(istype(O, /obj/item/weapon/reagent_containers/glass)) - var/obj/item/weapon/reagent_containers/glass/G = O - if(harvestable_honey > 0) - if(health > 0) - user << "\red You begin to harvest the honey. The bees don't seem to like it." - angry_swarm(user) - else - user << "\blue You begin to harvest the honey." - if(do_after(user,50)) - G.reagents.add_reagent("honey",harvestable_honey) - harvestable_honey = 0 - user << "\blue You successfully harvest the honey." - else - user << "\blue There is no honey left to harvest." - else - angry_swarm(user) - ..() - -/obj/machinery/apiary/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 - - if(istype(mover) && mover.checkpass(PASSTABLE)) - return 1 - else - return 0 - -/obj/machinery/apiary/process() - - if(swarming > 0) - swarming -= 1 - if(swarming <= 0) - for(var/mob/living/simple_animal/bee/B in src.loc) - bees_in_hive += B.strength - qdel(B) - else if(bees_in_hive < 10) - for(var/mob/living/simple_animal/bee/B in src.loc) - bees_in_hive += B.strength - qdel(B) - - if(world.time > (lastcycle + cycledelay)) - lastcycle = world.time - if(health < 0) - return - - //magical bee formula - if(beezeez > 0) - beezeez -= 1 - - nutrilevel += 2 - health += 1 - toxic = max(0, toxic - 1) - - //handle nutrients - nutrilevel -= bees_in_hive / 10 + owned_bee_swarms.len / 5 - if(nutrilevel > 0) - bees_in_hive += 1 * yieldmod - if(health < maxhealth) - health++ - else - //nutrilevel is less than 1, so we're effectively subtracting here - health += max(nutrilevel - 1, round(-health / 2)) - bees_in_hive += max(nutrilevel - 1, round(-bees_in_hive / 2)) - if(owned_bee_swarms.len) - var/mob/living/simple_animal/bee/B = pick(owned_bee_swarms) - B.target_turf = get_turf(src) - - //clear out some toxins - if(toxic > 0) - toxic -= 1 - health -= 1 - - if(health <= 0) - return - - //make a bit of honey - if(harvestable_honey < 50) - harvestable_honey += 0.5 - - //make some new bees - if(bees_in_hive >= 10 && prob(bees_in_hive * 10)) - var/mob/living/simple_animal/bee/B = new(get_turf(src), src) - owned_bee_swarms.Add(B) - B.mut = mut - B.toxic = toxic - bees_in_hive -= 1 - - //find some plants, harvest - for(var/obj/machinery/portable_atmospherics/hydroponics/H in view(7, src)) - if(H.seed && !H.dead && prob(owned_bee_swarms.len * 10)) - src.nutrilevel++ - H.nutrilevel++ - if(mut < H.mutation_mod - 1) - mut = H.mutation_mod - 1 - else if(mut > H.mutation_mod - 1) - H.mutation_mod = mut - - //flowers give us pollen (nutrients) -/* - All plants should be giving nutrients to the hive. - if(H.myseed.type == /obj/item/seeds/harebell || H.myseed.type == /obj/item/seeds/sunflowerseed) - src.nutrilevel++ - H.nutrilevel++ -*/ - //have a few beneficial effects on nearby plants - if(prob(10)) - H.lastcycle -= 5 - if(prob(10)) - H.seed.set_trait(TRAIT_ENDURANCE,max(H.seed.get_trait(TRAIT_ENDURANCE)*1.5,H.seed.get_trait(TRAIT_ENDURANCE)+1)) - if(H.toxins && prob(10)) - H.toxins = min(0, H.toxins - 1) - toxic++ - -/obj/machinery/apiary/proc/die() - if(owned_bee_swarms.len) - var/mob/living/simple_animal/bee/B = pick(owned_bee_swarms) - B.target_turf = get_turf(src) - B.strength -= 1 - if(B.strength <= 0) - qdel(B) - else if(B.strength <= 5) - B.icon_state = "bees[B.strength]" - bees_in_hive = 0 - health = 0 - -/obj/machinery/apiary/proc/angry_swarm(var/mob/M) - for(var/mob/living/simple_animal/bee/B in owned_bee_swarms) - B.feral = 25 - B.target_mob = M - - swarming = 25 - - while(bees_in_hive > 0) - var/spawn_strength = bees_in_hive - if(bees_in_hive >= 5) - spawn_strength = 6 - - var/mob/living/simple_animal/bee/B = new(get_turf(src), src) - B.target_mob = M - B.strength = spawn_strength - B.feral = 25 - B.mut = mut - B.toxic = toxic - bees_in_hive -= spawn_strength - -/obj/machinery/apiary/verb/harvest_honeycomb() - set src in oview(1) - set name = "Harvest honeycomb" - set category = "Object" - - while(health > 15) - health -= 15 - var/obj/item/weapon/reagent_containers/food/snacks/honeycomb/H = new(src.loc) - if(toxic > 0) - H.reagents.add_reagent("toxin", toxic) - - usr << "\blue You harvest the honeycomb from the hive. There is a wild buzzing!" - angry_swarm(usr) diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm deleted file mode 100644 index fc2a1cd72ea..00000000000 --- a/code/modules/mob/living/simple_animal/bees.dm +++ /dev/null @@ -1,179 +0,0 @@ - -/mob/living/simple_animal/bee - name = "bees" - icon = 'icons/obj/apiary_bees_etc.dmi' - icon_state = "bees1" - icon_dead = "bees1" - mob_size = 1 - var/strength = 1 - var/feral = 0 - var/mut = 0 - var/toxic = 0 - var/turf/target_turf - var/mob/target_mob - var/obj/machinery/apiary/parent - pass_flags = PASSTABLE - turns_per_move = 6 - var/obj/machinery/portable_atmospherics/hydroponics/my_hydrotray - -/mob/living/simple_animal/bee/New(loc, var/obj/machinery/apiary/new_parent) - ..() - parent = new_parent - -/mob/living/simple_animal/bee/Destroy() - if(parent) - parent.owned_bee_swarms.Remove(src) - ..() - -/mob/living/simple_animal/bee/Life() - ..() - - if(stat == CONSCIOUS) - //if we're strong enough, sting some people - var/mob/living/carbon/human/M = target_mob - var/sting_prob = 40 // Bees will always try to sting. - if(M in view(src,1)) // Can I see my target? - if(prob(max(feral * 10, 0))) // Am I mad enough to want to sting? And yes, when I initially appear, I AM mad enough - var/obj/item/clothing/worn_suit = M.wear_suit - var/obj/item/clothing/worn_helmet = M.head - if(worn_suit) // Are you wearing clothes? - sting_prob -= min(worn_suit.armor["bio"],70) // Is it sealed? I can't get to 70% of your body. - if(worn_helmet) - sting_prob -= min(worn_helmet.armor["bio"],30) // Is your helmet sealed? I can't get to 30% of your body. - if( prob(sting_prob) && (M.stat == CONSCIOUS || (M.stat == UNCONSCIOUS && prob(25))) ) // Try to sting! If you're not moving, think about stinging. - M.apply_damage(min(strength,2)+mut, BRUTE, sharp=1) // Stinging. The more mutated I am, the harder I sting. - M.apply_damage((round(feral/10,1)*(max((round(strength/20,1)),1)))+toxic, TOX) // Bee venom based on how angry I am and how many there are of me! - M << "\red You have been stung!" - M.flash_pain() - - //if we're chasing someone, get a little bit angry - if(target_mob && prob(5)) - feral++ - - //calm down a little bit - if(feral > 0) - if(prob(feral * 20)) - feral -= 1 - else - //if feral is less than 0, we're becalmed by smoke or steam - if(feral < 0) - feral += 1 - - if(target_mob) - target_mob = null - target_turf = null - if(strength > 5) - //calm down and spread out a little - var/mob/living/simple_animal/bee/B = new(get_turf(pick(orange(src,1)))) - B.strength = rand(1,5) - src.strength -= B.strength - if(src.strength <= 5) - src.icon_state = "bees[src.strength]" - B.icon_state = "bees[B.strength]" - if(src.parent) - B.parent = src.parent - src.parent.owned_bee_swarms.Add(B) - - //make some noise - if(prob(0.5)) - src.visible_message("\blue [pick("Buzzzz.","Hmmmmm.","Bzzz.")]") - - //smoke, water and steam calms us down - var/calming = 0 - var/list/calmers = list(/obj/effect/effect/smoke/chem, \ - /obj/effect/effect/water, \ - /obj/effect/effect/foam, \ - /obj/effect/effect/steam, \ - /obj/effect/mist) - - for(var/this_type in calmers) - var/mob/living/simple_animal/check_effect = locate() in src.loc - if(istype(check_effect)) - if(check_effect.type == this_type) - calming = 1 - break - - if(calming) - if(feral > 0) - src.visible_message("\blue The bees calm down!") - feral = -10 - target_mob = null - target_turf = null - wander = 1 - - for(var/mob/living/simple_animal/bee/B in src.loc) - if(B == src) - continue - - if(feral > 0) - src.strength += B.strength - qdel(B) - src.icon_state = "bees[src.strength]" - if(strength > 5) - icon_state = "bees_swarm" - else if(prob(10)) - //make the other swarm of bees stronger, then move away - var/total_bees = B.strength + src.strength - if(total_bees < 10) - B.strength = min(5, total_bees) - src.strength = total_bees - B.strength - - B.icon_state = "bees[B.strength]" - if(src.strength <= 0) - qdel(src) - return - src.icon_state = "bees[B.strength]" - var/turf/simulated/floor/T = get_turf(get_step(src, pick(1,2,4,8))) - density = 1 - if(T.Enter(src, get_turf(src))) - src.loc = T - density = 0 - break - - if(target_mob) - if(target_mob in view(src,7)) - target_turf = get_turf(target_mob) - wander = 0 - - else // My target's gone! But I might still be pissed! You there. You look like a good stinging target! - for(var/mob/living/carbon/G in view(src,7)) - target_mob = G - break - - if(target_turf) - if (!(DirBlocked(get_step(src, get_dir(src,target_turf)),get_dir(src,target_turf)))) // Check for windows and doors! - Move(get_step(src, get_dir(src,target_turf))) - if (prob(0.1)) - src.visible_message("\blue The bees swarm after [target_mob]!") - if(src.loc == target_turf) - target_turf = null - wander = 1 - else - //find some flowers, harvest - //angry bee swarms don't hang around - if(feral > 0) - turns_per_move = rand(1,3) - else if(feral < 0) - turns_since_move = 0 - else if(!my_hydrotray || my_hydrotray.loc != src.loc || my_hydrotray.dead || !my_hydrotray.seed) - var/obj/machinery/portable_atmospherics/hydroponics/my_hydrotray = locate() in src.loc - if(my_hydrotray) - if(!my_hydrotray.dead && my_hydrotray.seed) - turns_per_move = rand(20,50) - else - my_hydrotray = null - - pixel_x = rand(-12,12) - pixel_y = rand(-12,12) - - if(!parent && prob(10)) - strength -= 1 - if(strength <= 0) - qdel(src) - else if(strength <= 5) - icon_state = "bees[strength]" - - //debugging - /*icon_state = "[strength]" - if(strength > 5) - icon_state = "unknown"*/ diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 2f9cc0f548e..5a24746f083 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -43,6 +43,13 @@ return ..() +/datum/reagent/nutriment/honey + name = "Honey" + id = "honey" + description = "A golden yellow syrup, loaded with sugary sweetness." + nutriment_factor = 10 + color = "#FFFF00" + /datum/reagent/nutriment/flour name = "flour" id = "flour" diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 26f58fb4712..03e12a82000 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -34,7 +34,6 @@ /obj/machinery/iv_drip, /obj/machinery/disease2/incubator, /obj/machinery/disposal, - /obj/machinery/apiary, /mob/living/simple_animal/cow, /mob/living/simple_animal/hostile/retaliate/goat, /obj/machinery/computer/centrifuge,