diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index c6d7f9de008..d228525bb8a 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -114,6 +114,8 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("wooden buckler", /obj/item/weapon/shield/riot/buckler, 20, time = 40), \
+ new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\
+ new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\
)
/obj/item/stack/sheet/mineral/wood
diff --git a/code/modules/hydroponics/beekeeping/BEES.dmi b/code/modules/hydroponics/beekeeping/BEES.dmi
deleted file mode 100644
index dbd86636831..00000000000
Binary files a/code/modules/hydroponics/beekeeping/BEES.dmi and /dev/null differ
diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm
index 4a9f9f84c37..fdd4151302d 100644
--- a/code/modules/hydroponics/beekeeping/beebox.dm
+++ b/code/modules/hydroponics/beekeeping/beebox.dm
@@ -123,19 +123,22 @@
..()
if(!queen_bee)
- user << "There is no queen bee!"
+ user << "There is no queen bee! There won't bee any honeycomb without a queen!"
var/half_bee = get_max_bees()*0.5
if(half_bee && (bees.len >= half_bee))
- user << "This place is a BUZZ with activity..."
+ user << "This place is a BUZZ with activity... there are lots of bees!"
- if(bee_resources)
- user << "[bee_resources]/100 resource supply."
- user << "[bee_resources]% towards a new honeycomb."
- user << "[bee_resources*2]% towards a new bee."
+ user << "[bee_resources]/100 resource supply."
+ user << "[bee_resources]% towards a new honeycomb."
+ user << "[bee_resources*2]% towards a new bee."
+
+ if(honeycombs.len)
+ var/plural = honeycombs.len > 1
+ user << "There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary."
if(honeycombs.len >= get_max_honeycomb())
- user << "there's no room for more honeycomb!"
+ user << "there's no room for more honeycomb!"
/obj/structure/beebox/attackby(obj/item/I, mob/user, params)
@@ -154,6 +157,10 @@
return
if(istype(I, /obj/item/queen_bee))
+ if(queen_bee)
+ user << "This hive already has a queen!"
+ return
+
var/obj/item/queen_bee/qb = I
user.unEquip(qb)
@@ -223,10 +230,10 @@
fallen++
if(fallen)
var/multiple = fallen > 1
- visible_message("[user] scapes [multiple ? "[fallen]" : "a"] honeycomb[multiple ? "s" : ""] off of the frame.")
+ visible_message("[user] scrapes [multiple ? "[fallen]" : "a"] honeycomb[multiple ? "s" : ""] off of the frame.")
if("Remove the Queen Bee")
- if(!queen_bee)
+ if(!queen_bee || queen_bee.loc != src)
user << "There is no queen bee to remove!"
return
var/obj/item/queen_bee/QB = new()
@@ -237,3 +244,4 @@
if(!user.put_in_active_hand(QB))
QB.loc = get_turf(src)
visible_message("[user] removes the queen from the apiary.")
+ queen_bee = null
diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm
index fb56fe1b804..70b60669a1f 100644
--- a/code/modules/hydroponics/beekeeping/honeycomb.dm
+++ b/code/modules/hydroponics/beekeeping/honeycomb.dm
@@ -4,7 +4,7 @@
desc = "a hexagonal mesh of honeycomb"
icon = 'icons/obj/hydroponics/harvest.dmi'
icon_state = "honeycomb"
- possible_transfer_amounts = null
+ possible_transfer_amounts = list()
spillable = 0
disease_amount = 0
volume = 10
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 2daf7c40508..a919c48406b 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -166,29 +166,34 @@
if(yield <= 0 && plant_type == PLANT_MUSHROOM)
yield = 1 // Mushrooms always have a minimum yield of 1.
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/yield)
- C.value = yield
+ if(C)
+ C.value = yield
/obj/item/seeds/proc/adjust_lifespan(adjustamt)
lifespan = Clamp(lifespan + adjustamt, 10, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan)
- C.value = lifespan
+ if(C)
+ C.value = lifespan
/obj/item/seeds/proc/adjust_endurance(adjustamt)
endurance = Clamp(endurance + adjustamt, 10, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance)
- C.value = endurance
+ if(C)
+ C.value = endurance
/obj/item/seeds/proc/adjust_production(adjustamt)
if(yield != -1)
production = Clamp(production + adjustamt, 2, 10)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production)
- C.value = production
+ if(C)
+ C.value = production
/obj/item/seeds/proc/adjust_potency(adjustamt)
if(potency != -1)
potency = Clamp(potency + adjustamt, 0, 100)
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency)
- C.value = potency
+ if(C)
+ C.value = potency
/obj/item/seeds/proc/get_analyzer_text() //in case seeds have something special to tell to the analyzer
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index 51262083000..5ee56ae2339 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -75,6 +75,13 @@
..()
+/mob/living/simple_animal/hostile/poison/bees/examine(mob/user)
+ ..()
+
+ if(!beehome)
+ user << "This bee is homeless!"
+
+
/mob/living/simple_animal/hostile/poison/bees/proc/generate_bee_visuals()
overlays.Cut()
@@ -228,7 +235,7 @@
/mob/living/simple_animal/hostile/poison/bees/proc/reagent_incompatible(mob/living/simple_animal/hostile/poison/bees/B)
if(!B)
return 0
- if(B.beegent && beegent && B.beegent.id != beegent.id || B.beegent && beegent || !B.beegent && beegent)
+ if(B.beegent && beegent && B.beegent.id != beegent.id || B.beegent && !beegent || !B.beegent && beegent)
return 1
return 0
@@ -245,11 +252,26 @@
/obj/item/queen_bee/attackby(obj/item/I, mob/user, params)
if(istype(I,/obj/item/weapon/reagent_containers/syringe))
var/obj/item/weapon/reagent_containers/syringe/S = I
- var/datum/reagent/R = chemical_reagents_list[S.reagents.get_master_reagent_id()]
- if(R)
- queen.assign_reagent(R)
- user.visible_message("[user] injects [src]'s genome with [R.name], mutating it's DNA!","You inject [src]'s genome with [R.name], mutating it's DNA!")
- name = queen.name
+ if(S.reagents.has_reagent("royal_bee_jelly")) //checked twice, because I really don't want royal bee jelly to be duped
+ if(S.reagents.has_reagent("royal_bee_jelly",5))
+ S.reagents.remove_reagent("royal_bee_jelly", 5)
+ var/obj/item/queen_bee/qb = new(get_turf(user))
+ qb.queen = new(qb)
+ if(queen && queen.beegent)
+ qb.queen.assign_reagent(queen.beegent) //Bees use the global singleton instances of reagents, so we don't need to worry about one bee being deleted and her copies losing their reagents.
+ user.put_in_active_hand(qb)
+ user.visible_message("[user] injects [src] with royal bee jelly, causing it to split into two bees, MORE BEES!","You inject [src] with royal bee jelly, causing it to split into two bees, MORE BEES!")
+ else
+ user << "You don't have enough royal bee jelly to split a bee in two!"
+ else
+ var/datum/reagent/R = chemical_reagents_list[S.reagents.get_master_reagent_id()]
+ if(R && S.reagents.has_reagent(R.id, 5))
+ S.reagents.remove_reagent(R.id,5)
+ queen.assign_reagent(R)
+ user.visible_message("[user] injects [src]'s genome with [R.name], mutating it's DNA!","You inject [src]'s genome with [R.name], mutating it's DNA!")
+ name = queen.name
+ else
+ user << "You don't have enough units of that chemical to modify the bee's DNA!"
..()
@@ -260,4 +282,5 @@
/obj/item/queen_bee/Destroy()
qdel(queen)
- return ..()
\ No newline at end of file
+ return ..()
+
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index c390dbb48a0..b1eee61a396 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1187,3 +1187,16 @@ datum/reagent/shadowling_blindness_smoke
M.adjustToxLoss(-2, 0)
. = 1
return ..() || .
+
+
+
+/datum/reagent/royal_bee_jelly
+ name = "royal bee jelly"
+ id = "royal_bee_jelly"
+ description = "Royal Bee Jelly, if injected into a Queen Space Bee said bee will split into two bees."
+ color = "#00ff80"
+
+/datum/reagent/royal_bee_jelly/on_mob_life(mob/living/M)
+ if(prob(2))
+ M.say(pick("Bzzz...","BZZ BZZ","Bzzzzzzzzzzz..."))
+ ..()
\ No newline at end of file
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 2170753cede..65867e3f5b1 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -510,3 +510,10 @@
result = "lye"
required_reagents = list("ash" = 1, "water" = 1)
result_amount = 2
+
+/datum/chemical_reaction/royal_bee_jelly
+ name = "royal bee jelly"
+ id = "royal_bee_jelly"
+ result = "royal_bee_jelly"
+ required_reagents = list("mutagen" = 10, "honey" = 40)
+ result_amount = 5