/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_vr.dmi' //VOREStation Edit - Dunno why this isn't a vending subtype icon_state = "seeds" density = 1 anchored = 1 use_power = 1 idle_power_usage = 100 var/seeds_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/datum/seed_pile/piles_contra = list() //Hacked. var/list/starting_seeds = list() var/list/contraband_seeds = list() //Seeds we only show if we've been hacked. var/list/scanner = list() // What properties we can view var/seconds_electrified = 0 //Shock users like an airlock. var/smart = 0 //Used for hacking. Overrides the scanner. var/hacked = 0 var/lockdown = 0 var/datum/wires/seedstorage/wires = null /obj/machinery/seed_storage/New() ..() wires = new(src) if(!contraband_seeds.len) contraband_seeds = pick(list( list( /obj/item/seeds/ambrosiavulgarisseed = 3, /obj/item/seeds/greengrapeseed = 3, /obj/item/seeds/reishimycelium = 2, /obj/item/seeds/bloodtomatoseed = 1 ), list( /obj/item/seeds/ambrosiavulgarisseed = 3, /obj/item/seeds/plastiseed = 3, /obj/item/seeds/kudzuseed = 2, /obj/item/seeds/rose/blood = 1 ), list( /obj/item/seeds/ambrosiavulgarisseed = 3, /obj/item/seeds/amanitamycelium = 3, /obj/item/seeds/libertymycelium = 2, /obj/item/seeds/glowshroom = 1 ), list( /obj/item/seeds/ambrosiavulgarisseed = 3, /obj/item/seeds/glowberryseed = 3, /obj/item/seeds/icepepperseed = 2, /obj/item/seeds/bluetomatoseed = 1 ), list( /obj/item/seeds/durian = 2, /obj/item/seeds/ambrosiadeusseed = 1, /obj/item/seeds/killertomatoseed = 1 ), list( /obj/item/seeds/ambrosiavulgarisseed = 3, /obj/item/seeds/random = 6 ) )) return /obj/machinery/seed_storage/process() ..() if(seconds_electrified > 0) seconds_electrified-- return /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", "pressure") 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/celery = 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/durian = 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/lettuce = 3, /obj/item/seeds/limeseed = 3, /obj/item/seeds/mtearseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/onionseed = 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/rhubarb = 3, /obj/item/seeds/riceseed = 3, /obj/item/seeds/rose = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/spineapple = 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/vanilla = 3, /obj/item/seeds/wabback = 2, /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", "pressure") smart = 1 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/celery = 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/durian = 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/lettuce = 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/rhubarb = 3, /obj/item/seeds/riceseed = 3, /obj/item/seeds/rose = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/spineapple = 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/vanilla = 3, /obj/item/seeds/wabback = 2, /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) if(stat & (BROKEN|NOPOWER)) return if(seconds_electrified != 0) if(shock(user, 100)) return if(panel_open) wires.Interact(user) if(lockdown) return user.set_machine(src) interact(user) /obj/machinery/seed_storage/interact(mob/user as mob) if (..()) return if(smart) scanner = list("stats", "produce", "soil", "temperature", "light", "pressure") else scanner = initial(scanner) if (!seeds_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) for(var/typepath in contraband_seeds) var/amount = contraband_seeds[typepath] if(isnull(amount)) amount = 1 for (var/i = 1 to amount) var/O = new typepath add(O, 1) seeds_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 += "
| [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 += "