diff --git a/baystation12.dme b/baystation12.dme index 1b78413fc6..6b2eb45f8c 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -965,6 +965,7 @@ #include "code\modules\hydroponics\seed_datums.dm" #include "code\modules\hydroponics\seed_machines.dm" #include "code\modules\hydroponics\seed_mobs.dm" +#include "code\modules\hydroponics\seed_storage.dm" #include "code\modules\hydroponics\seeds.dm" #include "code\modules\hydroponics\vines.dm" #include "code\modules\library\lib_items.dm" diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm new file mode 100644 index 0000000000..17cab40d8a --- /dev/null +++ b/code/modules/hydroponics/seed_storage.dm @@ -0,0 +1,256 @@ +/datum/seed_pile + var/name + var/amount + var/datum/seed/seed_type // Keeps track of what our seed is + var/list/obj/item/seeds/seeds = list() // Tracks actual objects contained in the pile + var/ID + +/datum/seed_pile/New(var/obj/item/seeds/O, var/ID) + name = O.name + amount = 1 + seed_type = O.seed + seeds += O + src.ID = ID + +/datum/seed_pile/proc/matches(var/obj/item/seeds/O) + if (O.seed == seed_type) + return 1 + return 0 + +/obj/machinery/seed_storage + name = "Seed storage" + desc = "It stores, sorts, and dispenses seeds." + icon = 'icons/obj/vending.dmi' + icon_state = "seeds" + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 100 + + var/initialized = 0 // Map-placed ones break if seeds are loaded right at the start of the round, so we do it on the first interaction + var/list/datum/seed_pile/piles = list() + var/list/starting_seeds = list() + var/list/scanner = list() // What properties we can view + +/obj/machinery/seed_storage/random // This is mostly for testing, but I guess admins could spawn it + name = "Random seed storage" + scanner = list("stats", "produce", "soil", "temperature", "light", "mutants") + starting_seeds = list(/obj/item/seeds/random = 50) + +/obj/machinery/seed_storage/garden + name = "Garden seed storage" + scanner = list("stats") + starting_seeds = list(/obj/item/seeds/appleseed = 3, /obj/item/seeds/bananaseed = 3, /obj/item/seeds/berryseed = 3, /obj/item/seeds/cabbageseed = 3, /obj/item/seeds/carrotseed = 3, /obj/item/seeds/chantermycelium = 3, /obj/item/seeds/cherryseed = 3, /obj/item/seeds/chiliseed = 3, /obj/item/seeds/cocoapodseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/grapeseed = 3, /obj/item/seeds/grassseed = 3, /obj/item/seeds/lemonseed = 3, /obj/item/seeds/limeseed = 3, /obj/item/seeds/mtearseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/peanutseed = 3, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/pumpkinseed = 3, /obj/item/seeds/riceseed = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/sugarcaneseed = 3, /obj/item/seeds/sunflowerseed = 3, /obj/item/seeds/shandseed = 2, /obj/item/seeds/tomatoseed = 3, /obj/item/seeds/towermycelium = 3, /obj/item/seeds/watermelonseed = 3, /obj/item/seeds/wheatseed = 3, /obj/item/seeds/whitebeetseed = 3) + +/obj/machinery/seed_storage/xenobotany + name = "Xenobotany seed storage" + scanner = list("stats", "produce", "soil", "temperature", "light", "mutants") + starting_seeds = list(/obj/item/seeds/ambrosiavulgarisseed = 3, /obj/item/seeds/appleseed = 3, /obj/item/seeds/amanitamycelium = 2, /obj/item/seeds/bananaseed = 3, /obj/item/seeds/berryseed = 3, /obj/item/seeds/cabbageseed = 3, /obj/item/seeds/carrotseed = 3, /obj/item/seeds/chantermycelium = 3, /obj/item/seeds/cherryseed = 3, /obj/item/seeds/chiliseed = 3, /obj/item/seeds/cocoapodseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/replicapod = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/glowshroom = 2, /obj/item/seeds/grapeseed = 3, /obj/item/seeds/grassseed = 3, /obj/item/seeds/lemonseed = 3, /obj/item/seeds/libertymycelium = 2, /obj/item/seeds/limeseed = 3, /obj/item/seeds/mtearseed = 2, /obj/item/seeds/nettleseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/peanutseed = 3, /obj/item/seeds/plastiseed = 3, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/pumpkinseed = 3, /obj/item/seeds/reishimycelium = 2, /obj/item/seeds/riceseed = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/sugarcaneseed = 3, /obj/item/seeds/sunflowerseed = 3, /obj/item/seeds/shandseed = 2, /obj/item/seeds/tomatoseed = 3, /obj/item/seeds/towermycelium = 3, /obj/item/seeds/watermelonseed = 3, /obj/item/seeds/wheatseed = 3, /obj/item/seeds/whitebeetseed = 3) + +/obj/machinery/seed_storage/attack_hand(mob/user as mob) + user.set_machine(src) + interact(user) + +/obj/machinery/seed_storage/interact(mob/user as mob) + if (..()) + return + + if (!initialized) + for(var/typepath in starting_seeds) + var/amount = starting_seeds[typepath] + if(isnull(amount)) amount = 1 + + for (var/i = 1 to amount) + var/O = new typepath + add(O) + initialized = 1 + + var/dat = "
| Name | " + dat += "Variety | " + if ("stats" in scanner) + dat += "E | Y | L | M | Pr | Pt | Harvest | " + if ("produce" in scanner) + dat += "Produce | " + if ("temperature" in scanner) + dat += "Temp | " + if ("light" in scanner) + dat += "Light | " + if ("soil" in scanner) + dat += "Nutri | Water | " + dat += "Notes | Amount | |||||||||
| [S.name] | " + dat += "#[seed.uid] | " + if ("stats" in scanner) + dat += "[seed.endurance] | [seed.yield] | [seed.lifespan] | [seed.maturation] | [seed.production] | [seed.potency] | " + if(seed.harvest_repeat) + dat += "Multiple | " + else + dat += "Single | " + if ("produce" in scanner) + if (seed.products && seed.products.len) + dat += "Fruit: [seed.products.len] | " + else + dat += "N/A | " + if ("temperature" in scanner) + dat += "[seed.ideal_heat] K | " + if ("light" in scanner) + dat += "[seed.ideal_light] L | " + if ("soil" in scanner) + if(seed.requires_nutrients) + if(seed.nutrient_consumption < 0.05) + dat += "Low | " + else if(seed.nutrient_consumption > 0.2) + dat += "High | " + else + dat += "Norm | " + else + dat += "No | " + if(seed.requires_water) + if(seed.water_consumption < 1) + dat += "Low | " + else if(seed.water_consumption > 5) + dat += "High | " + else + dat += "Norm | " + else + dat += "No | " + + dat += ""
+ if ("mutants" in scanner)
+ if(seed.mutants && seed.mutants.len)
+ dat += "SUBSP "
+ if(seed.immutable == -1)
+ dat += "MUT "
+ else if(seed.immutable > 0)
+ dat += "NOMUT "
+ switch(seed.carnivorous)
+ if(1)
+ dat += "CARN "
+ if(2)
+ dat += "CARN "
+ switch(seed.spread)
+ if(1)
+ dat += "VINE "
+ if(2)
+ dat += "VINE "
+ if ("pressure" in scanner)
+ if(seed.lowkpa_tolerance < 20)
+ dat += "LP "
+ if(seed.highkpa_tolerance > 220)
+ dat += "HP "
+ if ("temperature" in scanner)
+ if(seed.heat_tolerance > 30)
+ dat += "TEMRES "
+ else if(seed.heat_tolerance < 10)
+ dat += "TEMSEN "
+ if ("light" in scanner)
+ if(seed.light_tolerance > 10)
+ dat += "LIGRES "
+ else if(seed.light_tolerance < 3)
+ dat += "LIGSEN "
+ if(seed.toxins_tolerance < 3)
+ dat += "TOXSEN "
+ else if(seed.toxins_tolerance > 6)
+ dat += "TOXRES "
+ if(seed.pest_tolerance < 3)
+ dat += "PESTSEN "
+ else if(seed.pest_tolerance > 6)
+ dat += "PESTRES "
+ if(seed.weed_tolerance < 3)
+ dat += "WEEDSEN "
+ else if(seed.weed_tolerance > 6)
+ dat += "WEEDRES "
+ if(seed.parasite)
+ dat += "PAR "
+ if ("temperature" in scanner)
+ if(seed.alter_temp > 0)
+ dat += "TEMP+ "
+ if(seed.alter_temp < 0)
+ dat += "TEMP- "
+ if(seed.biolum)
+ dat += "LUM "
+ if(seed.flowers)
+ dat += " [seed.flower_colour ? "FLOW" : "FLOW"]." + dat += " | "
+ dat += "[S.amount] | " + dat += "Vend Purge | " + dat += "