/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") 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/replicapod = 3, /obj/item/seeds/lavenderseed = 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/tobaccoseed = 3, /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") 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/lavenderseed = 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/tobaccoseed = 3, /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 | M | Pr | Pt | Harvest | " if ("temperature" in scanner) dat += "Temp | " if ("light" in scanner) dat += "Light | " if ("soil" in scanner) dat += "Nutri | Water | " dat += "Notes | Amount | ||||||||
| [seed.seed_name] | " dat += "#[seed.uid] | " if ("stats" in scanner) dat += "[seed.get_trait(TRAIT_ENDURANCE)] | [seed.get_trait(TRAIT_YIELD)] | [seed.get_trait(TRAIT_MATURATION)] | [seed.get_trait(TRAIT_PRODUCTION)] | [seed.get_trait(TRAIT_POTENCY)] | " if(seed.get_trait(TRAIT_HARVEST_REPEAT)) dat += "Multiple | " else dat += "Single | " if ("temperature" in scanner) dat += "[seed.get_trait(TRAIT_IDEAL_HEAT)] K | " if ("light" in scanner) dat += "[seed.get_trait(TRAIT_IDEAL_LIGHT)] L | " if ("soil" in scanner) if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS)) if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) < 0.05) dat += "Low | " else if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0.2) dat += "High | " else dat += "Norm | " else dat += "No | " if(seed.get_trait(TRAIT_REQUIRES_WATER)) if(seed.get_trait(TRAIT_WATER_CONSUMPTION) < 1) dat += "Low | " else if(seed.get_trait(TRAIT_WATER_CONSUMPTION) > 5) dat += "High | " else dat += "Norm | " else dat += "No | " dat += "" switch(seed.get_trait(TRAIT_CARNIVOROUS)) if(1) dat += "CARN " if(2) dat += "CARN " switch(seed.get_trait(TRAIT_SPREAD)) if(1) dat += "VINE " if(2) dat += "VINE " if ("pressure" in scanner) if(seed.get_trait(TRAIT_LOWKPA_TOLERANCE) < 20) dat += "LP " if(seed.get_trait(TRAIT_HIGHKPA_TOLERANCE) > 220) dat += "HP " if ("temperature" in scanner) if(seed.get_trait(TRAIT_HEAT_TOLERANCE) > 30) dat += "TEMRES " else if(seed.get_trait(TRAIT_HEAT_TOLERANCE) < 10) dat += "TEMSEN " if ("light" in scanner) if(seed.get_trait(TRAIT_LIGHT_TOLERANCE) > 10) dat += "LIGRES " else if(seed.get_trait(TRAIT_LIGHT_TOLERANCE) < 3) dat += "LIGSEN " if(seed.get_trait(TRAIT_TOXINS_TOLERANCE) < 3) dat += "TOXSEN " else if(seed.get_trait(TRAIT_TOXINS_TOLERANCE) > 6) dat += "TOXRES " if(seed.get_trait(TRAIT_PEST_TOLERANCE) < 3) dat += "PESTSEN " else if(seed.get_trait(TRAIT_PEST_TOLERANCE) > 6) dat += "PESTRES " if(seed.get_trait(TRAIT_WEED_TOLERANCE) < 3) dat += "WEEDSEN " else if(seed.get_trait(TRAIT_WEED_TOLERANCE) > 6) dat += "WEEDRES " if(seed.get_trait(TRAIT_PARASITE)) dat += "PAR " if ("temperature" in scanner) if(seed.get_trait(TRAIT_ALTER_TEMP) > 0) dat += "TEMP+ " if(seed.get_trait(TRAIT_ALTER_TEMP) < 0) dat += "TEMP- " if(seed.get_trait(TRAIT_BIOLUM)) dat += "LUM " dat += " | " dat += "[S.amount] | " dat += "Vend Purge | " dat += "