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