BEEKEEPING 2.0
@@ -1240,13 +1240,19 @@ var/list/all_supply_groups = list("Supplies","Clothing","Security","Hospitality"
|
||||
|
||||
/datum/supply_packs/bee_keeper
|
||||
name = "Beekeeping Crate"
|
||||
contains = list(/obj/item/beezeez,
|
||||
contains = list(
|
||||
/obj/item/beezeez,
|
||||
/obj/item/beezeez,
|
||||
/obj/item/weapon/bee_net,
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
/obj/item/apiary,
|
||||
/obj/item/queen_bee,
|
||||
/obj/item/queen_bee,
|
||||
/obj/item/queen_bee)
|
||||
/obj/item/queen_bee,
|
||||
/obj/item/clothing/suit/bio_suit/beekeeping,
|
||||
/obj/item/clothing/head/bio_hood/beekeeping,
|
||||
/obj/item/weapon/book/manual/hydroponics_beekeeping,
|
||||
)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Beekeeping crate"
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
//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
|
||||
|
||||
#define HONEYCOMB_COST 15
|
||||
|
||||
/obj/machinery/apiary
|
||||
name = "apiary tray"
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
@@ -16,9 +18,9 @@
|
||||
var/maxhealth = 100
|
||||
var/lastcycle = 0
|
||||
var/cycledelay = 100
|
||||
var/harvestable_honey = 0
|
||||
var/beezeez = 0
|
||||
var/swarming = 0
|
||||
var/honey_level = 0
|
||||
|
||||
var/bees_in_hive = 0
|
||||
var/list/owned_bee_swarms = list()
|
||||
@@ -29,7 +31,22 @@
|
||||
//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")
|
||||
overlays += image('icons/obj/apiary_bees_etc.dmi', icon_state="apiary0")
|
||||
|
||||
/obj/machinery/apiary/examine(mob/user)
|
||||
..()
|
||||
if(health > 0)
|
||||
user << "You can hear a loud buzzing coming from the inside."
|
||||
else
|
||||
user << "There doesn't seem to be any bees in it."
|
||||
|
||||
switch(honey_level)
|
||||
if(1)
|
||||
user << "<span class='info'>Looks like there's a bit of honey in it.</span>"
|
||||
if(2)
|
||||
user << "<span class='info'>There's a decent amount of honey dripping from it!</span>"
|
||||
if(3)
|
||||
user << "<span class='info'>It's full of honey!</span>"
|
||||
|
||||
/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))
|
||||
@@ -43,6 +60,8 @@
|
||||
//world << "Yield increased by 1, to a total of [myseed.yield]"
|
||||
else
|
||||
..()
|
||||
if(src)
|
||||
angry_swarm()
|
||||
return
|
||||
|
||||
/obj/machinery/apiary/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
@@ -53,7 +72,7 @@
|
||||
user << "<span class='warning'>There is already a queen in there.</span>"
|
||||
else
|
||||
health = 10
|
||||
nutrilevel += 10
|
||||
nutrilevel = min(10,nutrilevel+10)
|
||||
user.drop_item(O)
|
||||
qdel(O)
|
||||
user << "<span class='notice'>You carefully insert the queen into [src], she gets busy making a hive.</span>"
|
||||
@@ -67,9 +86,9 @@
|
||||
else
|
||||
user << "<span class='notice'>You insert [O] into [src]. Now it just needs some bees.</span>"
|
||||
qdel(O)
|
||||
else if(istype(O, /obj/item/weapon/minihoe))
|
||||
else if(istype(O, /obj/item/weapon/hatchet))
|
||||
if(health > 0)
|
||||
user << "<span class='danger'>You begin to dislodge the apiary from the tray, the bees don't like that.</span>"
|
||||
user << "<span class='danger'>You begin harvesting the honeycombs, the bees don't like that.</span>"
|
||||
angry_swarm(user)
|
||||
else
|
||||
user << "<span class='notice'>You begin to dislodge the dead apiary from the tray.</span>"
|
||||
@@ -84,7 +103,17 @@
|
||||
I.loc = created_tray
|
||||
contents -= I
|
||||
new /obj/item/apiary(src.loc)
|
||||
user << "<span class='warning'>You dislodge the apiary from the tray.</span>"
|
||||
if(health > 0)
|
||||
while(health > HONEYCOMB_COST)
|
||||
health -= HONEYCOMB_COST
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/honeycomb/H = new(src.loc)
|
||||
if(toxic > 0)
|
||||
H.reagents.add_reagent("toxin", toxic)
|
||||
if(honey_level >= 3)
|
||||
new/obj/item/queen_bee(src.loc)
|
||||
user << "<span class='notice'>You successfully harvest the honeycombs. The empty apiary can be relocated.</span>"
|
||||
else
|
||||
user << "<span class='notice'>You dislodge the apiary from the tray.</span>"
|
||||
qdel(src)
|
||||
else if(istype(O, /obj/item/weapon/bee_net))
|
||||
var/obj/item/weapon/bee_net/N = O
|
||||
@@ -94,21 +123,8 @@
|
||||
N.caught_bees = 0
|
||||
else
|
||||
user << "<span class='notice'>There are no more bees in the net.</span>"
|
||||
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 << "<span class='warning'>You begin to harvest the honey. The bees don't seem to like it.</span>"
|
||||
angry_swarm(user)
|
||||
else
|
||||
user << "<span class='notice'>You begin to harvest the honey.</span>"
|
||||
if(do_after(user, src, 50))
|
||||
G.reagents.add_reagent("honey",harvestable_honey)
|
||||
harvestable_honey = 0
|
||||
user << "<span class='notice'>You successfully harvest the honey.</span>"
|
||||
else
|
||||
user << "<span class='notice'>There is no honey left to harvest.</span>"
|
||||
else
|
||||
visible_message("<span class='warning'>You hit \the [src] with \the [O]!</span>")
|
||||
angry_swarm(user)
|
||||
|
||||
/obj/machinery/apiary/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
|
||||
@@ -141,15 +157,15 @@
|
||||
beezeez -= 1
|
||||
|
||||
nutrilevel += 2
|
||||
health += 1
|
||||
health = min(health+1,maxhealth)
|
||||
if(prob(10))
|
||||
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++
|
||||
health = min(health+1,maxhealth)
|
||||
else
|
||||
//nutrilevel is less than 1, so we're effectively subtracting here
|
||||
health += max(nutrilevel - 1, round(-health / 2))
|
||||
@@ -163,12 +179,26 @@
|
||||
toxic -= 1
|
||||
health -= 1
|
||||
|
||||
var/newlevel = 0
|
||||
if(health >= (HONEYCOMB_COST * 6))
|
||||
newlevel = 3
|
||||
else if(health >= (HONEYCOMB_COST * 3))
|
||||
newlevel = 2
|
||||
else if(health >= HONEYCOMB_COST)
|
||||
newlevel = 1
|
||||
else
|
||||
newlevel = 0
|
||||
|
||||
if(newlevel != honey_level)
|
||||
overlays -= image('icons/obj/apiary_bees_etc.dmi', icon_state="apiary[honey_level]")
|
||||
overlays += image('icons/obj/apiary_bees_etc.dmi', icon_state="apiary[newlevel]")
|
||||
honey_level = newlevel
|
||||
|
||||
if(health <= 0)
|
||||
return
|
||||
|
||||
//make a bit of honey
|
||||
if(harvestable_honey < 50)
|
||||
harvestable_honey += 0.5
|
||||
if(prob(2))
|
||||
playsound(get_turf(src), 'sound/effects/bees.ogg', min(20+(20*honey_level),100), 1)
|
||||
|
||||
//make some new bees
|
||||
if(bees_in_hive >= 10 && prob(bees_in_hive * 10))
|
||||
@@ -183,7 +213,7 @@
|
||||
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++
|
||||
if(H.nutrilevel < 100)
|
||||
if(H.nutrilevel < 10)
|
||||
H.nutrilevel++
|
||||
|
||||
if(mut < H.mutation_mod - 1)
|
||||
@@ -198,6 +228,7 @@
|
||||
H.nutrilevel++
|
||||
*/
|
||||
//have a few beneficial effects on nearby plants
|
||||
/* - beneficial effects are now applied directly by bees themselves
|
||||
if(prob(10))
|
||||
H.lastcycle -= 5
|
||||
if(prob(10))
|
||||
@@ -211,6 +242,7 @@
|
||||
if(H.toxins && prob(10))
|
||||
H.toxins = min(0, H.toxins - 1)
|
||||
toxic++
|
||||
*/
|
||||
|
||||
/obj/machinery/apiary/proc/die()
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/machinery/apiary/proc/die() called tick#: [world.time]")
|
||||
@@ -225,7 +257,7 @@
|
||||
bees_in_hive = 0
|
||||
health = 0
|
||||
|
||||
/obj/machinery/apiary/proc/angry_swarm(var/mob/M)
|
||||
/obj/machinery/apiary/proc/angry_swarm(var/mob/M = null)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/machinery/apiary/proc/angry_swarm() called tick#: [world.time]")
|
||||
for(var/mob/living/simple_animal/bee/B in owned_bee_swarms)
|
||||
B.feral = 25
|
||||
@@ -233,8 +265,8 @@
|
||||
|
||||
swarming = 25
|
||||
|
||||
while(bees_in_hive > 0)
|
||||
var/spawn_strength = bees_in_hive
|
||||
while(bees_in_hive >= 1)
|
||||
var/spawn_strength = round(bees_in_hive)
|
||||
if(bees_in_hive >= 5)
|
||||
spawn_strength = 6
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -246,17 +278,4 @@
|
||||
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"
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/machinery/apiary/verb/harvest_honeycomb() called tick#: [world.time]")
|
||||
|
||||
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 << "<span class='notice'>You harvest the honeycomb from the hive. There is a wild buzzing!</span>"
|
||||
angry_swarm(usr)
|
||||
#undef HONEYCOMB_COST
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "queen bee packet"
|
||||
desc = "Place her into an apiary so she can get busy."
|
||||
icon = 'icons/obj/seeds.dmi'
|
||||
icon_state = "seed-kudzu"
|
||||
icon_state = "seed-bees"
|
||||
w_class = 1
|
||||
|
||||
/obj/item/weapon/bee_net
|
||||
@@ -10,13 +10,26 @@
|
||||
desc = "For catching rogue bees."
|
||||
icon = 'icons/obj/apiary_bees_etc.dmi'
|
||||
icon_state = "bee_net"
|
||||
item_state = "bedsheet"
|
||||
item_state = "bee_net"
|
||||
w_class = 3
|
||||
inhand_states = list("left_hand" = 'icons/mob/in-hand/left/beekeeping.dmi', "right_hand" = 'icons/mob/in-hand/right/beekeeping.dmi')
|
||||
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)
|
||||
/obj/item/weapon/bee_net/examine(mob/user)
|
||||
..()
|
||||
if(caught_bees)
|
||||
user << "<span class='info'>There's [caught_bees] caught bee\s in it!</span>"
|
||||
else
|
||||
user << "<span class='info'>It has no bees in it.</span>"
|
||||
|
||||
/obj/item/weapon/bee_net/afterattack(atom/A as mob|obj|turf|area, mob/living/user)
|
||||
if(get_dist(A,user) > 1)
|
||||
return
|
||||
if(istype(A,/obj/machinery/apiary)) return
|
||||
var/turf/T = get_turf(A)
|
||||
var/caught = 0
|
||||
for(var/mob/living/simple_animal/bee/B in T)
|
||||
caught = 1
|
||||
if(B.feral < 0)
|
||||
caught_bees += B.strength
|
||||
del(B)
|
||||
@@ -25,6 +38,24 @@
|
||||
user.visible_message("<span class='warning'>[user] swings at some bees, they don't seem to like it.</span>","<span class='warning'>You swing at some bees, they don't seem to like it.</span>")
|
||||
B.feral = 5
|
||||
B.target = user
|
||||
if(!caught)
|
||||
user << "<span class='warning'>There are no bees in front of you!</span>"
|
||||
|
||||
/obj/item/weapon/bee_net/attack_self(mob/user as mob)
|
||||
var/turf/T = get_step(get_turf(user), user.dir)
|
||||
var/caught = 0
|
||||
for(var/mob/living/simple_animal/bee/B in T)
|
||||
caught = 1
|
||||
if(B.feral < 0)
|
||||
caught_bees += B.strength
|
||||
del(B)
|
||||
user.visible_message("<span class='notice'>[user] nets some bees.</span>","<span class='notice'>You net up some of the becalmed bees.</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] swings at some bees, they don't seem to like it.</span>","<span class='warning'>You swing at some bees, they don't seem to like it.</span>")
|
||||
B.feral = 5
|
||||
B.target = user
|
||||
if(!caught)
|
||||
user << "<span class='warning'>There are no bees in front of you!</span>"
|
||||
|
||||
/obj/item/weapon/bee_net/verb/empty_bees()
|
||||
set src in usr
|
||||
@@ -75,7 +106,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/honeycomb
|
||||
name = "honeycomb"
|
||||
icon_state = "honeycomb"
|
||||
desc = "Dripping with sugary sweetness."
|
||||
desc = "Dripping with sugary sweetness. Grind it to separate the honey."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/honeycomb/New()
|
||||
. = ..()
|
||||
@@ -88,7 +119,25 @@
|
||||
name = "Honey"
|
||||
id = "honey"
|
||||
description = "A golden yellow syrup, loaded with sugary sweetness."
|
||||
color = "#FFFF00"
|
||||
color = "#FEAE00"
|
||||
alpha = 200
|
||||
nutriment_factor = 15 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/honey/on_mob_life(var/mob/living/M as mob)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!holder)
|
||||
return
|
||||
H.nutrition += nutriment_factor
|
||||
holder.remove_reagent(src.id, 0.4)
|
||||
if(H.getBruteLoss() && prob(60))
|
||||
H.heal_organ_damage(2, 0)
|
||||
if(H.getFireLoss() && prob(50))
|
||||
H.heal_organ_damage(0, 2)
|
||||
if(H.getToxLoss() && prob(50))
|
||||
H.adjustToxLoss(-2)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/book/manual/hydroponics_beekeeping
|
||||
name = "The Ins and Outs of Apiculture - A Precise Art"
|
||||
@@ -110,11 +159,29 @@
|
||||
|
||||
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.<br.
|
||||
<br>
|
||||
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.
|
||||
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, use it on an apiary to kickstart it, 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.
|
||||
|
||||
<h3>Dealing with Feral Bees</h3>
|
||||
|
||||
If someone attacks the hive or some of the bees, you can bet that they won't like it and retaliate with murderous intent.
|
||||
To fix such a situation, you will have to capture the bees and place them back into their apiary. Doing so is a two step process.
|
||||
But before that, you'll want to acquire yourself a Bio suit to protect yourself from stings.
|
||||
First you need to spray the bees with water. Chemistry sprays, fire extinguishers, smoke grenades, anything works as long as it has some water in it.
|
||||
Once the bees are calmed, swing your bee net at them. If the bees aren't calmed first, you will only angry them further!
|
||||
It is strongly disadvised to empty your bee net anywhere beside in the apiary, you might have to deal with an even more ferocious outbreak if you empty your net
|
||||
outside after having caught them all.
|
||||
|
||||
<h3>Collecting Honeycombs</h3>
|
||||
|
||||
Collecting honeycombs is a relatively simple process, but you'll need to make some preparations, such as getting a Bio suit or prepairing another apiary where to move the bees.
|
||||
First you start by deconstructing the apiary with a hatchet. The bees will become aggressive as soon as you begin. Once the apiary is deconstructed, follow the steps in the above
|
||||
section to capture the homeless feral bees and move them to another apiary. Or simply rebuild the apiary that you just deconstructed. The honeycombs harvested this way
|
||||
are full of honey, you can grind them to process the liquid, then place it in a Condimaster to conserve it in a honey pot. Or you can just eat the honeycombs if you feel like it,
|
||||
they are delicious.
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
var/to_suit = /obj/item/clothing/suit/cardborg
|
||||
|
||||
/obj/item/device/modkit/afterattack(obj/O, mob/user as mob)
|
||||
if(get_dist(O,user) > 1)//For all those years you could use it at any range, what the actual fuck?
|
||||
return
|
||||
var/flag
|
||||
var/to_type
|
||||
if(istype(O,from_helmet))
|
||||
|
||||
@@ -790,6 +790,7 @@ var/global/floorIsLava = 0
|
||||
<A href='?src=\ref[src];secretsfun=movealienship'>Move Alien Dinghy</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=blackout'>Break all lights</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=whiteout'>Fix all lights</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=thebees'>Unleash THE BEES onto the crew</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (DANGEROUS: extremely lame)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=togglenarsie'>Toggle Nar-Sie's behaviour</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=fakealerts'>Trigger a fake alert</A><BR>
|
||||
|
||||
@@ -2580,6 +2580,23 @@
|
||||
F.update_icon()
|
||||
floorIsLava = 0
|
||||
return
|
||||
if("thebees")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","BEE")
|
||||
var/answer = alert("What's this? A Space Station woefully underpopulated by bees?",,"Let's fix it!","On second thought, let's not.")
|
||||
if(answer=="Let's fix it!")
|
||||
message_admins("[key_name_admin(usr)] unleashed the bees onto the crew.", 1)
|
||||
world << "<font size='10' color='red'><b>NOT THE BEES!</b></font>"
|
||||
world << sound('sound/effects/bees.ogg')
|
||||
for(var/mob/living/M in player_list)
|
||||
var/mob/living/simple_animal/bee/BEE = new(get_turf(M))
|
||||
BEE.strength = 16
|
||||
BEE.toxic = 5
|
||||
BEE.mut = 2
|
||||
BEE.feral = 25
|
||||
BEE.target = M
|
||||
BEE.icon_state = "bees_swarm-feral"
|
||||
|
||||
if("virus")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","V")
|
||||
|
||||
@@ -75,6 +75,18 @@
|
||||
icon_state = "bio_cmo"
|
||||
|
||||
|
||||
//Beekeeper's biosuit, white with a bee on its back
|
||||
/obj/item/clothing/suit/bio_suit/beekeeping
|
||||
name = "beekeeping suit"
|
||||
icon_state = "bio_beekeeping"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 70, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/bio_hood/beekeeping
|
||||
name = "beekeeping hood"
|
||||
icon_state = "bio_beekeeping"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 30, rad = 0)
|
||||
|
||||
|
||||
//Plague Dr mask can be found in clothing/masks/gasmask.dm
|
||||
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit
|
||||
name = "Plague doctor suit"
|
||||
|
||||
@@ -18,6 +18,7 @@ mob/living/carbon/proc/dream()
|
||||
"an abandoned laboratory","The Syndicate","blood","falling","flames","ice","the cold","an operating table","a war","red men","malfunctioning robots",
|
||||
"a ship full of spiders","valids","hardcore","your mom","lewd","explosions","broken bones","clowns everywhere","features","a crash","a skrell","a unathi","a tajaran",
|
||||
"a vox","a plasmaman","a skellington","a diona","the derelict","the end of the world","the thunderdome","a ship full of dead clowns","a chicken with godlike powers",
|
||||
"a red bus that drives through space",
|
||||
)
|
||||
spawn(0)
|
||||
for(var/i = rand(1,4),i > 0, i--)
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
var/force_update // Set this to bypass the cycle time check.
|
||||
var/obj/temp_chem_holder // Something to hold reagents during process_reagents()
|
||||
|
||||
var/bees = 0 //Are there currently bees above the tray?
|
||||
|
||||
// Seed details/line data.
|
||||
var/datum/seed/seed = null // The currently planted seed
|
||||
|
||||
@@ -186,9 +188,15 @@
|
||||
// Mutation level drops each main tick.
|
||||
mutation_level -= rand(2,4)
|
||||
|
||||
var/mob/living/simple_animal/bee/BEE = locate() in loc
|
||||
if(BEE && (BEE.feral < 1))
|
||||
bees = 1
|
||||
else
|
||||
bees = 0
|
||||
|
||||
// Weeds like water and nutrients, there's a chance the weed population will increase.
|
||||
// Bonus chance if the tray is unoccupied.
|
||||
if(waterlevel > 10 && nutrilevel > 2 && prob(isnull(seed) ? 5 : 1))
|
||||
if(waterlevel > 10 && nutrilevel > 2 && prob(isnull(seed) ? 5 : (1/(1+bees))))
|
||||
weedlevel += 1 * HYDRO_SPEED_MULTIPLIER
|
||||
|
||||
// There's a chance for a weed explosion to happen if the weeds take over.
|
||||
@@ -204,7 +212,10 @@
|
||||
return
|
||||
|
||||
// Advance plant age.
|
||||
if(prob(80)) age += 1 * HYDRO_SPEED_MULTIPLIER
|
||||
if(harvest)
|
||||
if(prob(80)) age += (1 * HYDRO_SPEED_MULTIPLIER)/(1+bees)
|
||||
else
|
||||
if(prob(80+(20*bees))) age += 1 * HYDRO_SPEED_MULTIPLIER + (bees/2)
|
||||
|
||||
//Highly mutable plants have a chance of mutating every tick.
|
||||
if(seed.immutable == -1)
|
||||
@@ -313,7 +324,10 @@
|
||||
var/toxin_uptake = max(1,round(toxins/10))
|
||||
if(toxins > seed.toxins_tolerance)
|
||||
health -= toxin_uptake
|
||||
toxins -= toxin_uptake
|
||||
toxins -= toxin_uptake * (1+bees)
|
||||
if(BEE && BEE.parent)
|
||||
var/obj/machinery/apiary/A = BEE.parent
|
||||
A.toxic += toxin_uptake//gotta be careful where you let your bees hang around
|
||||
|
||||
// Check for pests and weeds.
|
||||
// Some carnivorous plants happily eat pests.
|
||||
@@ -335,7 +349,7 @@
|
||||
// Handle life and death.
|
||||
// If the plant is too old, it loses health fast.
|
||||
if(age > seed.lifespan)
|
||||
health -= rand(3,5) * HYDRO_SPEED_MULTIPLIER
|
||||
health -= (rand(3,5) * HYDRO_SPEED_MULTIPLIER)/(1+bees)
|
||||
|
||||
// When the plant dies, weeds thrive and pests die off.
|
||||
if(health <= 0)
|
||||
@@ -351,7 +365,7 @@
|
||||
harvest = 1
|
||||
lastproduce = age
|
||||
|
||||
if(prob(3)) // On each tick, there's a chance the pest population will increase
|
||||
if(prob(3/(1+bees))) // On each tick, there's a chance the pest population will increase
|
||||
pestlevel += 0.1 * HYDRO_SPEED_MULTIPLIER
|
||||
|
||||
check_level_sanity()
|
||||
|
||||
@@ -47,20 +47,48 @@
|
||||
/mob/living/simple_animal/bee/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/bee/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
user.delayNextAttack(8)
|
||||
if(O.force)
|
||||
var/damage = O.force
|
||||
if (O.damtype == HALLOSS)
|
||||
damage = 0
|
||||
adjustBruteLoss(damage)
|
||||
user.visible_message("<span class='danger'>[src] has been attacked with [O] by [user]. </span>")
|
||||
panic_attack(user)
|
||||
|
||||
/mob/living/simple_animal/bee/bullet_act(var/obj/item/projectile/P)
|
||||
..()
|
||||
if(P && P.firer)
|
||||
panic_attack(P.firer)
|
||||
|
||||
/mob/living/simple_animal/bee/attack_hand(mob/living/carbon/human/M as mob)//punching bees!
|
||||
..()
|
||||
if((M.a_intent == I_HURT) || (M.a_intent == I_DISARM))
|
||||
panic_attack(M)
|
||||
|
||||
/mob/living/simple_animal/bee/proc/panic_attack(mob/damagesource)
|
||||
for(var/mob/living/simple_animal/bee/B in range(src,3))
|
||||
B.feral = 15
|
||||
B.target = damagesource
|
||||
|
||||
/mob/living/simple_animal/bee/Life()
|
||||
..()
|
||||
if(stat != DEAD) //If we're alive, see if we can be calmed down.
|
||||
//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)
|
||||
var/list/calmers = list(
|
||||
/obj/effect/decal/chemical_puff,
|
||||
/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/check_effect = locate(this_type) in src.loc
|
||||
if(check_effect && check_effect == this_type)
|
||||
var/obj/effect/check_effect = locate(this_type) in src.loc
|
||||
if(check_effect && (check_effect.reagents.has_reagent("water") || check_effect.reagents.has_reagent("holywater")))
|
||||
calming = 1
|
||||
break
|
||||
|
||||
@@ -121,8 +149,10 @@
|
||||
src.parent.owned_bee_swarms.Add(B)
|
||||
|
||||
//make some noise
|
||||
if(prob(0.5))
|
||||
if(prob(1))
|
||||
if(prob(50))
|
||||
src.visible_message("<span class='notice'>[pick("Buzzzz.","Hmmmmm.","Bzzz.")]</span>")
|
||||
playsound(get_turf(src), 'sound/effects/bees.ogg', min(20*strength,100), 1)
|
||||
|
||||
for(var/mob/living/simple_animal/bee/B in src.loc)
|
||||
if(B == src)
|
||||
@@ -184,8 +214,7 @@
|
||||
else
|
||||
my_hydrotray = null
|
||||
|
||||
pixel_x = rand(-12,12)
|
||||
pixel_y = rand(-12,12)
|
||||
animate(src, pixel_x = rand(-12,12), pixel_y = rand(-12,12), time = 10, easing = SINE_EASING)
|
||||
|
||||
if(!parent && prob(10))
|
||||
strength -= 1
|
||||
@@ -194,6 +223,12 @@
|
||||
else if(strength <= 5)
|
||||
icon_state = "bees[strength]"
|
||||
|
||||
if(feral > 0)
|
||||
if(strength <= 5)
|
||||
icon_state = "bees[max(strength,1)]-feral"
|
||||
else
|
||||
icon_state = "bees_swarm-feral"
|
||||
|
||||
//debugging
|
||||
/*icon_state = "[strength]"
|
||||
if(strength > 5)
|
||||
|
||||
@@ -102,8 +102,7 @@
|
||||
else
|
||||
if(M.attack_sound)
|
||||
playsound(loc, M.attack_sound, 50, 1, 1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("<span class='attack'>\The <EM>[M]</EM> [M.attacktext] \the <EM>[src]</EM>!</span>", 1)
|
||||
M.visible_message("<span class='attack'>\The <EM>[M]</EM> [M.attacktext] \the <EM>[src]</EM>!</span>")
|
||||
add_logs(M, src, "attacked", admin=1)
|
||||
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
|
||||
adjustBruteLoss(damage)
|
||||
@@ -118,14 +117,10 @@
|
||||
damage *= 2
|
||||
purge = 3
|
||||
adjustBruteLoss(damage)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("<span class='danger'>[src] has been attacked with [O] by [user]. </span>")
|
||||
user.visible_message("<span class='danger'>[src] has been attacked with [O] by [user]. </span>")
|
||||
else
|
||||
usr << "<span class='warning'>This weapon is ineffective, it does no damage.</span>"
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("<span class='warning'>[user] gently taps [src] with [O]. </span>")
|
||||
user.visible_message("<span class='warning'>[user] gently taps [src] with [O]. </span>")
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3311,7 +3311,6 @@
|
||||
if (prob(data-10))
|
||||
M.disabilities &= ~NEARSIGHTED
|
||||
data++
|
||||
if(prob(50)) M.heal_organ_damage(1,0)
|
||||
return
|
||||
|
||||
/datum/reagent/drink/berryjuice
|
||||
@@ -3399,7 +3398,6 @@
|
||||
if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
|
||||
if(holder.has_reagent("capsaicin"))
|
||||
holder.remove_reagent("capsaicin", 10*REAGENTS_METABOLISM)
|
||||
if(prob(50)) M.heal_organ_damage(1,0)
|
||||
return
|
||||
|
||||
/datum/reagent/drink/milk/soymilk
|
||||
|
||||
@@ -150,6 +150,10 @@
|
||||
name = "Malt Vinegar Bottle"
|
||||
desc = "Perfect for fish and chips!"
|
||||
icon_state = "vinegar_container"
|
||||
if("honey")
|
||||
name = "Honey Pot"
|
||||
desc = "Sweet and healthy!"
|
||||
icon_state = "honey"
|
||||
else
|
||||
name = "Misc Condiment Bottle"
|
||||
|
||||
|
||||
18
html/changelogs/DeityLink_100.yml
Normal file
@@ -0,0 +1,18 @@
|
||||
author: Deity Link
|
||||
delete-after: true
|
||||
changes:
|
||||
- imageadd: Re-made most bee-related sprites.
|
||||
- imageadd: Bees animate much more smoothly, and are actually easily visible now.
|
||||
- rscadd: You can now examine apiaries to get a clue whether there are bees inside or not, and how much honey there is.
|
||||
- imageadd: The apiary's sprite also updates depending on how much honey there is inside.
|
||||
- tweak: Reworked the procedure to harvest Honeycombs.
|
||||
- rscdel: You cannot obtain honey by merely using a beaker on an apiary anymore.
|
||||
- imageadd: Added a custom sprite for honey-storing condiment bottles.
|
||||
- rscadd: Hitting a bee or firing at it will now cause it and its neighbors to charge at the attacker.
|
||||
- bugfix: Bees can finally be calmed by spraying them with water. They also have a slightly different sprite when they are feral.
|
||||
- rscadd: You can now use bee nets by clicking on tiles instead of clicking on the item in your hand.
|
||||
- bugfix: Fixed a bug that cause apiaries to feed WAY too much nutrients to the hydro trays near it.
|
||||
- tweak: Apiaries still distribute and gather nutrients automatically, however, the "benefits" they give to nearby plants are now granted by the bees themselves. If a bee is above a plant ready for harvest, it'll halve its aging process so it remains alive longer, else it'll accelerate it so it becomes ready for harvest more quickly. It'll also halve the plant's weed and pest spread, and collect some of the plant's toxins for the apiary. (Toxins collected this way will find their way into the honeycombs, and will also drastically increase the sting power of bees).
|
||||
- rscadd: Added chapters to "The Ins and Outs of Apiculture - A Precise Art" manual that explains how to capture feral bees and how to harvest honeycombs.
|
||||
- bugfix: Fixed a bug that allowed players to use modification kits at any range.
|
||||
- rscadd: Added a beekeeping bio suit and hood to the Beekeeping Crates, as well as a copy of the Beekeeping Manual, and a mini-extinguisher.
|
||||
|
Before Width: | Height: | Size: 196 KiB After Width: | Height: | Size: 195 KiB |
BIN
icons/mob/in-hand/left/beekeeping.dmi
Normal file
|
After Width: | Height: | Size: 836 B |
BIN
icons/mob/in-hand/right/beekeeping.dmi
Normal file
|
After Width: | Height: | Size: 873 B |
|
Before Width: | Height: | Size: 358 KiB After Width: | Height: | Size: 361 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |