From 048c427edff78ae00094dc3d0cae5d3cca7940b0 Mon Sep 17 00:00:00 2001 From: InsightfulParasite <109536843+InsightfulParasite@users.noreply.github.com> Date: Wed, 1 May 2024 13:56:19 -0400 Subject: [PATCH] Ports Compost Bin and Rake for more cost effective farming (#2064) A shoddy style farm for botany shows how much funding we give to the farming department. add: compost bin add: seed extractor --- .../Teguicons/farming_structures.dmi | Bin 0 -> 24299 bytes .../primitive_farming/farming_structures.dm | 111 ++++++++++++ .../items/stacks/sheets/sheet_types.dm | 51 +++--- .../kitchen_machinery/smartfridge.dm | 161 ++++++++++++++++++ .../chemistry/reagents/other_reagents.dm | 16 ++ lobotomy-corp13.dme | 1 + 6 files changed, 317 insertions(+), 23 deletions(-) create mode 100644 ModularTegustation/Teguicons/farming_structures.dmi create mode 100644 ModularTegustation/primitive_farming/farming_structures.dm diff --git a/ModularTegustation/Teguicons/farming_structures.dmi b/ModularTegustation/Teguicons/farming_structures.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ae0905b2b3eb93c4a4785bc694e33d80f144ad82 GIT binary patch literal 24299 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 literal 0 HcmV?d00001 diff --git a/ModularTegustation/primitive_farming/farming_structures.dm b/ModularTegustation/primitive_farming/farming_structures.dm new file mode 100644 index 000000000000..1a8303f15c71 --- /dev/null +++ b/ModularTegustation/primitive_farming/farming_structures.dm @@ -0,0 +1,111 @@ +//Imported from Desert Rose + +///////////////// +// COMPOST BIN // +///////////////// + +/obj/structure/reagent_dispensers/compostbin + name = "compost bin" + desc = "A smelly structure made of wooden slats where refuse is thrown. Dump unwanted seeds and produce in, pull usable compost out." + icon = 'ModularTegustation/Teguicons/farming_structures.dmi' + icon_state = "compostbin" + resistance_flags = INDESTRUCTIBLE + anchored = TRUE + reagent_id = /datum/reagent/compost + +/obj/structure/reagent_dispensers/compostbin/Initialize() + . = ..() + reagents.clear_reagents() + reagents.add_reagent(reagent_id, 100) + +/obj/structure/reagent_dispensers/compostbin/attackby(obj/item/W, mob/user, params) + if(W.is_refillable()) + return 0 //so we can refill them via their afterattack. + if(reagents.total_volume == tank_volume) + to_chat(user,span_warning("The [src] is filled to capacity!")) + return + if(istype(W, /obj/item/seeds) || istype(W, /obj/item/food)) + if(user.transferItemToLoc(W, src)) + to_chat(user, span_notice("You load the [W] into the [src].")) + playsound(loc, 'sound/effects/blobattack.ogg', 25, 1, -1) + process_compost() + else + to_chat(user, span_warning("That's not compostable! Try seeds or flowers instead.")) + else if(istype(W, /obj/item/storage/bag/plants)) + var/obj/item/storage/bag/plants/PB = W + for(var/obj/item/G in PB.contents)// This check can be less than thorough because the bag has already authenticated the contents, hopefully + if(SEND_SIGNAL(PB, COMSIG_TRY_STORAGE_TAKE, G, src)) + to_chat(user, "You empty the [PB] into the [src].") + playsound(loc, 'sound/effects/blobattack.ogg', 25, 1, -1) + process_compost() + +/obj/structure/reagent_dispensers/compostbin/proc/process_compost() + for(var/obj/item/C in contents) + if(istype(C, /obj/item/seeds)) + var/obj/item/seeds/S = C + reagents.add_reagent(/datum/reagent/compost, S.yield) + if(istype(C, /obj/item/food)) + reagents.add_reagent(/datum/reagent/compost, 10) + qdel(C) + +//////////////////// +// SEED EXTRACTOR // +//////////////////// + +/obj/structure/seed_grinder + name = "seed grinder" + desc = "A crude grinding machine repurposed from kitchen appliances. Plants go in, seeds come out." + icon = 'ModularTegustation/Teguicons/farming_structures.dmi' + icon_state = "sextractor_manual" + density = FALSE + anchored = TRUE + +/obj/structure/seed_grinder/proc/seedify(obj/item/O, t_max, obj/structure/seed_grinder/extractor, mob/living/user) + var/t_amount = 0 + var/list/seeds = list() + if(t_max == -1) + t_max = rand(1,2) //Slightly worse than the actual thing + + var/seedloc = O.loc + if(extractor) + seedloc = extractor.loc + + if(istype(O, /obj/item/food/grown/)) + var/obj/item/food/grown/F = O + if(F.seed) + if(user && !user.temporarilyRemoveItemFromInventory(O)) //couldn't drop the item + return + while(t_amount < t_max) + var/obj/item/seeds/t_prod = F.seed.Copy() + seeds.Add(t_prod) + t_prod.forceMove(seedloc) + t_amount++ + qdel(O) + return seeds + + else if(istype(O, /obj/item/grown)) + var/obj/item/grown/F = O + if(F.seed) + if(user && !user.temporarilyRemoveItemFromInventory(O)) + return + while(t_amount < t_max) + var/obj/item/seeds/t_prod = F.seed.Copy() + t_prod.forceMove(seedloc) + t_amount++ + qdel(O) + return 1 + + return 0 + +/obj/structure/seed_grinder/attackby(obj/item/O, mob/user, params) + + if(default_unfasten_wrench(user, O)) //So we can move them around + return + + else if(seedify(O,-1, src, user)) + to_chat(user, span_notice("You extract some seeds.")) + return + else if(user.a_intent != INTENT_HARM) + to_chat(user, span_warning("You can't extract any seeds from \the [O.name]!")) + else + return ..() diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index c70372d2f706..b8efa78826a7 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -208,32 +208,37 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ * Wood */ GLOBAL_LIST_INIT(wood_recipes, list ( \ - new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \ - new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \ - new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \ - new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \ - new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + //Items + new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\ + new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\ + new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \ + new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \ + new/datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 100), \ + new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \ + new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2), \ + new/datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar, 3), \ + new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wooden, 3, time = 10),\ + new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\ + new/datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 10),\ + //Structures + new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \ + new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("wooden barrel", /obj/structure/fermenting_barrel, 8, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\ - new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\ + new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE),\ + new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("wooden crate", /obj/structure/closet/crate/wooden, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\ + new/datum/stack_recipe("wooden barrel", /obj/structure/fermenting_barrel, 8, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("primitive produce bin", /obj/machinery/smartfridge/bottlerack/grownbin, 25, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("primitive seed bin", /obj/machinery/smartfridge/bottlerack/seedbin, 25, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("primitive seed grinder", /obj/structure/seed_grinder, 30, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("book case", /obj/structure/bookcase, 35, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\ - new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2), \ - new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\ - new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wooden, 3, time = 10),\ - new/datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 10),\ - new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE),\ - new/datum/stack_recipe("wooden crate", /obj/structure/closet/crate/wooden, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\ - new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar, 3), \ - new/datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 100), \ null, \ new/datum/stack_recipe_list("pews", list( new /datum/stack_recipe("pew (middle)", /obj/structure/chair/pew, 3, one_per_turf = TRUE, on_floor = TRUE), diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 56673e170a47..4f5605f8f9e8 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -581,3 +581,164 @@ return TRUE else return FALSE + +// ------------------------- +// Rack - Unpowered Smartfridge +// ------------------------- +/obj/machinery/smartfridge/bottlerack + name = "bottle rack" + desc = "The organised way of mass storing your brews." + icon = 'ModularTegustation/Teguicons/farming_structures.dmi' + icon_state = "rack" + layer = BELOW_OBJ_LAYER + density = TRUE + use_power = NO_POWER_USE + max_integrity = 35 + max_n_of_items = 30 + circuit = null + //remember, you have initial_contents, which gets loaded by citadel, and ALWAYS spawns those items + //the chance_initial_contents will take each item and give it a 50 percent chance of not spawning + var/list/chance_initial_contents + +/obj/machinery/smartfridge/bottlerack/Initialize() + . = ..() + + if(islist(chance_initial_contents)) + for(var/typekey in chance_initial_contents) + var/amount = chance_initial_contents[typekey] + if(isnull(amount)) + amount = 1 + for(var/i in 1 to amount) + if(prob(50)) + load(new typekey(src)) + //because after we load the objects, we need to update the icon + update_icon() + +/obj/machinery/smartfridge/bottlerack/on_deconstruction() + new /obj/item/stack/sheet/mineral/wood(drop_location(), 5) + ..() + +//god, don't just put the procs, at least put a return there! +/obj/machinery/smartfridge/bottlerack/RefreshParts() + return //because we don't want the parent refresh parts giving us a shit ton of space + +/obj/machinery/smartfridge/bottlerack/default_deconstruction_screwdriver() + return FALSE //because... we don't want it to default deconstruct? + +/obj/machinery/smartfridge/bottlerack/exchange_parts() + return FALSE //because it shouldn't exchange parts! + +/obj/machinery/smartfridge/bottlerack/spawn_frame() + return //because we won't spawn a frame because we shouldn't be deconstructable + +/obj/machinery/smartfridge/bottlerack/default_deconstruction_crowbar(obj/item/crowbar/C, ignore_panel = 1) + . = ..() + +/obj/machinery/smartfridge/bottlerack/accept_check(obj/item/O) + if(!istype(O, /obj/item/reagent_containers) || (O.item_flags & ABSTRACT) || !O.reagents || !O.reagents.reagent_list.len) + return FALSE + if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/food/drinks) || istype(O, /obj/item/reagent_containers/food/condiment)) + return TRUE +// -------------------------------------- +// Update Icons for Racks with 30 storage +// -------------------------------------- +/obj/machinery/smartfridge/bottlerack/update_icon_state() + . = ..() + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + if(machine_stat) + icon_state = "[initial(icon_state)]-off" + return + + if(!visible_contents) + icon_state = "[initial(icon_state)]" + return + + var/list/shown_contents = contents - component_parts + var/storage_percent = (shown_contents.len / max_n_of_items) * 100 + switch(storage_percent) + if(0) + icon_state = "[initial(icon_state)]" + if(1 to 10) + icon_state = "[initial(icon_state)]-1" + if(11 to 20) + icon_state = "[initial(icon_state)]-2" + if(21 to 60) + icon_state = "[initial(icon_state)]-3" + if(61 to 80) + icon_state = "[initial(icon_state)]-4" + if(81 to INFINITY) + icon_state = "[initial(icon_state)]-5" + +// ------------------------- +// Gardentool Rack FALLOUT CERTIFIED +// ------------------------- +/obj/machinery/smartfridge/bottlerack/gardentool + name = "garden toolrack" + desc = "The farmers organisational tool storage." + icon = 'ModularTegustation/Teguicons/farming_structures.dmi' + icon_state = "gardentool" + resistance_flags = INDESTRUCTIBLE + max_n_of_items = 30 + +/obj/machinery/smartfridge/bottlerack/gardentool/accept_check(obj/item/O) + if(istype(O, /obj/item/plant_analyzer) || istype(O, /obj/item/reagent_containers/spray) || istype(O, /obj/item/cultivator) || istype(O, /obj/item/hatchet) || istype(O, /obj/item/scythe) || istype(O, /obj/item/reagent_containers/glass/bottle/nutrient) || istype(O, /obj/item/reagent_containers/glass/bottle/killer) || istype(O, /obj/item/shovel) || istype(O, /obj/item/reagent_containers/glass/bucket) || istype(O, /obj/item/storage/bag/plants) || istype(O, /obj/item/storage/bag/plants/portaseeder)) + return TRUE + return FALSE + +/obj/machinery/smartfridge/bottlerack/gardentool/preload + initial_contents = list( + /obj/item/shovel = 2, + /obj/item/cultivator/rake = 2, + /obj/item/reagent_containers/glass/bucket/wooden = 3, + /obj/item/storage/bag/plants = 2) + +// ------------------------- +// Seedbin FALLOUT CERTIFIED +// ------------------------- +/obj/machinery/smartfridge/bottlerack/seedbin + name = "seed bin" + desc = "Organised dumping ground for the starters of life." + icon = 'ModularTegustation/Teguicons/farming_structures.dmi' + icon_state = "seedbin" + density = FALSE + max_n_of_items = 400 + +/obj/machinery/smartfridge/bottlerack/seedbin/accept_check(obj/item/O) + if(istype(O, /obj/item/seeds)) + return TRUE + return FALSE + +/obj/machinery/smartfridge/bottlerack/seedbin/preload + chance_initial_contents = list( + /obj/item/seeds/reishi = 1, + /obj/item/seeds/plump = 1, + /obj/item/seeds/chanter = 1, + /obj/item/seeds/harebell = 1, + /obj/item/seeds/pumpkin = 1, + /obj/item/seeds/rainbow_bunch = 1, + /obj/item/seeds/carrot = 1, + /obj/item/seeds/tomato = 1, + ) + initial_contents = list( + /obj/item/seeds/wheat = 3, + /obj/item/seeds/watermelon = 2, + /obj/item/seeds/apple = 2, + /obj/item/seeds/aloe = 2, + /obj/item/seeds/potato = 2, + ) + +//------------------------- +// grownbin FALLOUT CERTIFIED +//------------------------- +/obj/machinery/smartfridge/bottlerack/grownbin + name = "Harvest bin" + desc = "A large box, to contain the harvest that the Earth has blessed upon you." + icon = 'ModularTegustation/Teguicons/farming_structures.dmi' + icon_state = "grownbin" + density = FALSE + max_n_of_items = 1000 + +/obj/machinery/smartfridge/bottlerack/grownbin/accept_check(obj/item/O) + if(istype(O, /obj/item/grown) || istype(O, /obj/item/food/grown)) + return TRUE + return FALSE diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 15a1a8c613ca..c71893886bf9 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1505,6 +1505,22 @@ //////////////////////////////////Hydroponics stuff/////////////////////////////// +/datum/reagent/compost + name = "compost" + description = "A mixture of waste and rotten plant matter that nurtures plants and keeps them free of pests." + reagent_state = SOLID + color = "#44341F" + taste_description = "rot" + +//Compost when used on soil +/datum/reagent/compost/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + . = ..() + if(chems.has_reagent(src.type, 1)) + mytray.adjustPests(-1) + if(myseed && chems.has_reagent(src.type, 1)) + myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 0.1)) + myseed.adjust_potency(round(chems.get_reagent_amount(src.type) * 0.1)) + /datum/reagent/plantnutriment name = "Generic nutriment" description = "Some kind of nutriment. You can't really tell what it is. You should probably report it, along with how you obtained it." diff --git a/lobotomy-corp13.dme b/lobotomy-corp13.dme index 9ac0a0b92661..ea55ea7251be 100644 --- a/lobotomy-corp13.dme +++ b/lobotomy-corp13.dme @@ -3983,6 +3983,7 @@ #include "ModularTegustation\fishing\code\rod_components\fishing_lines.dm" #include "ModularTegustation\living\living.dm" #include "ModularTegustation\living\carbon\life.dm" +#include "ModularTegustation\primitive_farming\farming_structures.dm" #include "ModularTegustation\tegu_borg_code\cyborg_upgrades.dm" #include "ModularTegustation\tegu_borg_code\medborg_holobed.dm" #include "ModularTegustation\tegu_borg_code\tegu_airlock_electroadaptive.dm"