diff --git a/baystation12.dme b/baystation12.dme index e3de1ac51f..5cefa5dc19 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -311,7 +311,6 @@ #include "code\game\machinery\newscaster.dm" #include "code\game\machinery\OpTable.dm" #include "code\game\machinery\overview.dm" -#include "code\game\machinery\podmen.dm" #include "code\game\machinery\portable_turret.dm" #include "code\game\machinery\recharger.dm" #include "code\game\machinery\rechargestation.dm" @@ -858,7 +857,11 @@ #include "code\modules\hydroponics\grown_inedible.dm" #include "code\modules\hydroponics\hydro_tools.dm" #include "code\modules\hydroponics\hydro_tray.dm" +#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\seeds.dm" +#include "code\modules\hydroponics\vines.dm" #include "code\modules\library\lib_items.dm" #include "code\modules\library\lib_machines.dm" #include "code\modules\library\lib_readme.dm" @@ -1268,6 +1271,7 @@ #include "code\modules\research\xenoarchaeology\finds\finds_talkingitem.dm" #include "code\modules\research\xenoarchaeology\genetics\prehistoric_animals.dm" #include "code\modules\research\xenoarchaeology\genetics\prehistoric_plants.dm" +#include "code\modules\research\xenoarchaeology\genetics\prehistoric_seeds.dm" #include "code\modules\research\xenoarchaeology\genetics\reconstitutor.dm" #include "code\modules\research\xenoarchaeology\machinery\artifact_analyser.dm" #include "code\modules\research\xenoarchaeology\machinery\artifact_harvester.dm" diff --git a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_plants.dm b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_plants.dm index 5a0f955df3..3f1a7c2f4b 100644 --- a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_plants.dm +++ b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_plants.dm @@ -65,7 +65,6 @@ var/jungle_plants_init = 0 reagent_effects = shuffle(reagent_effects) /obj/item/weapon/reagent_containers/food/snacks/grown/jungle_fruit - seed = "" name = "jungle fruit" desc = "It smells weird and looks off." icon = 'code/WorkInProgress/Cael_Aislinn/Jungle/jungle.dmi' diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 0b314a2531..d81e44670d 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -109,7 +109,6 @@ datum/controller/game_controller/proc/setup_objects() var/obj/machinery/atmospherics/unary/vent_scrubber/T = U T.broadcast_status() - //Create the mining ore distribution map. //Create the mining ore distribution map. asteroid_ore_map = new /datum/ore_distribution() asteroid_ore_map.populate_distribution_map() @@ -120,6 +119,9 @@ datum/controller/game_controller/proc/setup_objects() //Set up gear list. populate_gear_list() + //Set up roundstart seed list. + populate_seed_list() + world << "\red \b Initializations complete." sleep(-1) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index abca12f25e..4bbe8b38c1 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -832,6 +832,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Arts and Crafts crate" group = "Operations" + /datum/supply_packs/randomised/contraband num_contained = 5 contains = list(/obj/item/seeds/bloodtomatoseed, diff --git a/code/game/gamemodes/events/spacevines.dm b/code/game/gamemodes/events/spacevines.dm index b3af8195ca..d095f19d56 100644 --- a/code/game/gamemodes/events/spacevines.dm +++ b/code/game/gamemodes/events/spacevines.dm @@ -1,247 +1,3 @@ -// SPACE VINES (Note that this code is very similar to Biomass code) -/obj/effect/spacevine - name = "space vines" - desc = "An extremely expansionistic species of vine." - icon = 'icons/effects/spacevines.dmi' - icon_state = "Light1" - anchored = 1 - density = 0 - layer = 5 - pass_flags = PASSTABLE | PASSGRILLE - var/energy = 0 - var/obj/effect/spacevine_controller/master = null - var/mob/living/buckled_mob - - New() - return - - Del() - if(master) - master.vines -= src - master.growth_queue -= src - ..() - - -/obj/effect/spacevine/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (!W || !user || !W.type) return - switch(W.type) - if(/obj/item/weapon/circular_saw) del src - if(/obj/item/weapon/kitchen/utensil/knife) del src - if(/obj/item/weapon/scalpel) del src - if(/obj/item/weapon/twohanded/fireaxe) del src - if(/obj/item/weapon/hatchet) del src - if(/obj/item/weapon/melee/energy) del src - - //less effective weapons - if(/obj/item/weapon/wirecutters) - if(prob(25)) del src - if(/obj/item/weapon/shard) - if(prob(25)) del src - - else //weapons with subtypes - if(istype(W, /obj/item/weapon/melee/energy/sword)) del src - else if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if(WT.remove_fuel(0, user)) del src - else - manual_unbuckle(user) - return - //Plant-b-gone damage is handled in its entry in chemistry-reagents.dm - ..() - - -/obj/effect/spacevine/attack_hand(mob/user as mob) - manual_unbuckle(user) - - -/obj/effect/spacevine/attack_paw(mob/user as mob) - manual_unbuckle(user) - -/obj/effect/spacevine/proc/unbuckle() - if(buckled_mob) - if(buckled_mob.buckled == src) //this is probably unneccesary, but it doesn't hurt - buckled_mob.buckled = null - buckled_mob.anchored = initial(buckled_mob.anchored) - buckled_mob.update_canmove() - buckled_mob = null - return - -/obj/effect/spacevine/proc/manual_unbuckle(mob/user as mob) - if(buckled_mob) - if(prob(50)) - if(buckled_mob.buckled == src) - if(buckled_mob != user) - buckled_mob.visible_message(\ - "[user.name] frees [buckled_mob.name] from the vines.",\ - "[user.name] frees you from the vines.",\ - "You hear shredding and ripping.") - else - buckled_mob.visible_message(\ - "[buckled_mob.name] struggles free of the vines.",\ - "You untangle the vines from around yourself.",\ - "You hear shredding and ripping.") - unbuckle() - else - var/text = pick("rips","tears","pulls") - user.visible_message(\ - "[user.name] [text] at the vines.",\ - "You [text] at the vines.",\ - "You hear shredding and ripping.") - return - -/obj/effect/spacevine_controller - var/list/obj/effect/spacevine/vines = list() - var/list/growth_queue = list() - var/reached_collapse_size - var/reached_slowdown_size - //What this does is that instead of having the grow minimum of 1, required to start growing, the minimum will be 0, - //meaning if you get the spacevines' size to something less than 20 plots, it won't grow anymore. - - New() - if(!istype(src.loc,/turf/simulated/floor)) - del(src) - - spawn_spacevine_piece(src.loc) - processing_objects.Add(src) - - Del() - processing_objects.Remove(src) - ..() - - proc/spawn_spacevine_piece(var/turf/location) - var/obj/effect/spacevine/SV = new(location) - growth_queue += SV - vines += SV - SV.master = src - - process() - if(!vines) - del(src) //space vines exterminated. Remove the controller - return - if(!growth_queue) - del(src) //Sanity check - return - if(vines.len >= 250 && !reached_collapse_size) - reached_collapse_size = 1 - if(vines.len >= 30 && !reached_slowdown_size ) - reached_slowdown_size = 1 - - var/length = 0 - if(reached_collapse_size) - length = 0 - else if(reached_slowdown_size) - if(prob(25)) - length = 1 - else - length = 0 - else - length = 1 - length = min( 30 , max( length , vines.len / 5 ) ) - var/i = 0 - var/list/obj/effect/spacevine/queue_end = list() - - for( var/obj/effect/spacevine/SV in growth_queue ) - i++ - queue_end += SV - growth_queue -= SV - if(SV.energy < 2) //If tile isn't fully grown - if(prob(20)) - SV.grow() - else //If tile is fully grown - SV.buckle_mob() - - //if(prob(25)) - SV.spread() - if(i >= length) - break - - growth_queue = growth_queue + queue_end - //sleep(5) - //src.process() - -/obj/effect/spacevine/proc/grow() - if(!energy) - src.icon_state = pick("Med1", "Med2", "Med3") - energy = 1 - src.opacity = 1 - layer = 5 - else - src.icon_state = pick("Hvy1", "Hvy2", "Hvy3") - energy = 2 - -/obj/effect/spacevine/proc/buckle_mob() - if(!buckled_mob && prob(25)) - for(var/mob/living/carbon/V in src.loc) - if((V.stat != DEAD) && (V.buckled != src)) //if mob not dead or captured - V.buckled = src - V.loc = src.loc - V.update_canmove() - src.buckled_mob = V - V << "The vines [pick("wind", "tangle", "tighten")] around you!" - break //only capture one mob at a time. - -/obj/effect/spacevine/proc/spread() - var/direction = pick(cardinal) - var/step = get_step(src,direction) - if(istype(step,/turf/simulated/floor)) - var/turf/simulated/floor/F = step - if(!locate(/obj/effect/spacevine,F)) - if(F.Enter(src)) - if(master) - master.spawn_spacevine_piece( F ) - -/* -/obj/effect/spacevine/proc/Life() - if (!src) return - var/Vspread - if (prob(50)) Vspread = locate(src.x + rand(-1,1),src.y,src.z) - else Vspread = locate(src.x,src.y + rand(-1, 1),src.z) - var/dogrowth = 1 - if (!istype(Vspread, /turf/simulated/floor)) dogrowth = 0 - for(var/obj/O in Vspread) - if (istype(O, /obj/structure/window) || istype(O, /obj/effect/forcefield) || istype(O, /obj/effect/blob) || istype(O, /obj/effect/alien/weeds) || istype(O, /obj/effect/spacevine)) dogrowth = 0 - if (istype(O, /obj/machinery/door/)) - if(O:p_open == 0 && prob(50)) O:open() - else dogrowth = 0 - if (dogrowth == 1) - var/obj/effect/spacevine/B = new /obj/effect/spacevine(Vspread) - B.icon_state = pick("vine-light1", "vine-light2", "vine-light3") - spawn(20) - if(B) - B.Life() - src.growth += 1 - if (src.growth == 10) - src.name = "Thick Space Kudzu" - src.icon_state = pick("vine-med1", "vine-med2", "vine-med3") - src.opacity = 1 - src.waittime = 80 - if (src.growth == 20) - src.name = "Dense Space Kudzu" - src.icon_state = pick("vine-hvy1", "vine-hvy2", "vine-hvy3") - src.density = 1 - spawn(src.waittime) - if (src.growth < 20) src.Life() - -*/ - -/obj/effect/spacevine/ex_act(severity) - switch(severity) - if(1.0) - del(src) - return - if(2.0) - if (prob(90)) - del(src) - return - if(3.0) - if (prob(50)) - del(src) - return - return - -/obj/effect/spacevine/fire_act(null, temp, volume) //hotspots kill vines - del src - //Carn: Spacevines random event. /proc/spacevine_infestation() @@ -256,5 +12,5 @@ if(turfs.len) //Pick a turf to spawn at if we can var/turf/simulated/floor/T = pick(turfs) - new/obj/effect/spacevine_controller(T) //spawn a controller at turf + new/obj/effect/plant_controller(T) //spawn a controller at turf message_admins("\blue Event: Spacevines spawned at [T.loc] ([T.x],[T.y],[T.z])") diff --git a/code/game/machinery/bees_apiary.dm b/code/game/machinery/bees_apiary.dm index 2c2de70163..800d244d2f 100644 --- a/code/game/machinery/bees_apiary.dm +++ b/code/game/machinery/bees_apiary.dm @@ -170,13 +170,13 @@ //find some plants, harvest for(var/obj/machinery/hydroponics/H in view(7, src)) - if(H.planted && !H.dead && H.myseed && prob(owned_bee_swarms.len * 10)) + if(H.seed && !H.dead && prob(owned_bee_swarms.len * 10)) src.nutrilevel++ H.nutrilevel++ - if(mut < H.mutmod - 1) - mut = H.mutmod - 1 - else if(mut > H.mutmod - 1) - H.mutmod = mut + if(mut < H.mutation_mod - 1) + mut = H.mutation_mod - 1 + else if(mut > H.mutation_mod - 1) + H.mutation_mod = mut //flowers give us pollen (nutrients) /* - All plants should be giving nutrients to the hive. @@ -188,11 +188,11 @@ if(prob(10)) H.lastcycle -= 5 if(prob(10)) - H.myseed.lifespan = max(initial(H.myseed.lifespan) * 1.5, H.myseed.lifespan + 1) + H.seed.lifespan = max(initial(H.seed.lifespan) * 1.5, H.seed.lifespan + 1) if(prob(10)) - H.myseed.endurance = max(initial(H.myseed.endurance) * 1.5, H.myseed.endurance + 1) - if(H.toxic && prob(10)) - H.toxic = min(0, H.toxic - 1) + H.seed.endurance = max(initial(H.seed.endurance) * 1.5, H.seed.endurance + 1) + if(H.toxins && prob(10)) + H.toxins = min(0, H.toxins - 1) toxic++ /obj/machinery/apiary/proc/die() diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index 615e52f398..dbb5a9d271 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -7,44 +7,33 @@ anchored = 1 obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/)) - var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O - user.drop_item() - user << "You extract some seeds from the [F.name]." - var/seed = text2path(F.seed) - var/t_amount = 0 - var/t_max = rand(1,4) - while(t_amount < t_max) - var/obj/item/seeds/t_prod = new seed(loc) - t_prod.species = F.species - t_prod.lifespan = F.lifespan - t_prod.endurance = F.endurance - t_prod.maturation = F.maturation - t_prod.production = F.production - t_prod.yield = F.yield - t_prod.potency = F.potency - t_amount++ - del(O) - - else if(istype(O, /obj/item/weapon/grown/)) - var/obj/item/weapon/grown/F = O - user.drop_item() - user << "You extract some seeds from the [F.name]." - var/seed = text2path(F.seed) - var/t_amount = 0 - var/t_max = rand(1,4) - while(t_amount < t_max) - var/obj/item/seeds/t_prod = new seed(loc) - t_prod.species = F.species - t_prod.lifespan = F.lifespan - t_prod.endurance = F.endurance - t_prod.maturation = F.maturation - t_prod.production = F.production - t_prod.yield = F.yield - t_prod.potency = F.potency - t_amount++ + + // Fruits and vegetables. + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown) || istype(O, /obj/item/weapon/grown)) + + user.drop_item(O) + + var/datum/seed/new_seed_type + if(istype(O, /obj/item/weapon/grown)) + var/obj/item/weapon/grown/F = O + new_seed_type = seed_types[F.plantname] + else + var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O + new_seed_type = seed_types[F.plantname] + + if(new_seed_type) + user << "You extract some seeds from [O]." + var/produce = rand(1,4) + for(var/i = 0;i<=produce;i++) + var/obj/item/seeds/seeds = new(get_turf(src)) + seeds.seed_type = new_seed_type.name + seeds.update_seed() + else + user << "[O] doesn't seem to have any usable seeds inside it." + del(O) + //Grass. else if(istype(O, /obj/item/stack/tile/grass)) var/obj/item/stack/tile/grass/S = O user << "You extract some seeds from the [S.name]." diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 8d3ee58944..cf94be5e95 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -801,7 +801,7 @@ product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." icon_state = "nutri" icon_deny = "nutri-deny" - products = list(/obj/item/nutrient/ez = 35,/obj/item/nutrient/l4z = 25,/obj/item/nutrient/rh = 15,/obj/item/weapon/pestspray = 20, + products = list(/obj/item/nutrient/ez = 35,/obj/item/nutrient/l4z = 25,/obj/item/nutrient/rh = 15,/obj/item/weapon/plantspray/pests = 20, /obj/item/weapon/reagent_containers/syringe = 5,/obj/item/weapon/storage/bag/plants = 5) premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 04648c39b3..20927cee63 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -81,7 +81,7 @@ var/damage = rand(15,30) var/mob/living/carbon/human/H = M - if(!istype(M)) + if(!istype(H)) H << "\red You land heavily!" M.adjustBruteLoss(damage) return diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 4f324805a2..6877ed4b85 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -16,80 +16,78 @@ mecha = null//This does not appear to be used outside of reference in mecha.dm. - attack_self(mob/user as mob) - if(brainmob && !brainmob.key && searching == 0) - //Start the process of searching for a new user. - user << "\blue You carefully locate the manual activation switch and start the positronic brain's boot process." - icon_state = "posibrain-searching" - src.searching = 1 - src.request_player() - spawn(600) reset_search() +/obj/item/device/mmi/posibrain/attack_self(mob/user as mob) + if(brainmob && !brainmob.key && searching == 0) + //Start the process of searching for a new user. + user << "\blue You carefully locate the manual activation switch and start the positronic brain's boot process." + icon_state = "posibrain-searching" + src.searching = 1 + src.request_player() + spawn(600) reset_search() - proc/request_player() - for(var/mob/dead/observer/O in player_list) - if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted) - continue - if(jobban_isbanned(O, "pAI")) - continue - if(O.client) - if(O.client.prefs.be_special & BE_PAI) - question(O.client) +/obj/item/device/mmi/posibrain/proc/request_player() + for(var/mob/dead/observer/O in player_list) + if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted) + continue + if(jobban_isbanned(O, "pAI")) + continue + if(O.client) + if(O.client.prefs.be_special & BE_PAI) + question(O.client) - proc/question(var/client/C) - spawn(0) - if(!C) return - var/response = alert(C, "Someone is requesting a personality for a positronic brain. Would you like to play as one?", "Positronic brain request", "Yes", "No", "Never for this round") - if(!C || brainmob.key || 0 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located. - if(response == "Yes") - transfer_personality(C.mob) - else if (response == "Never for this round") - C.prefs.be_special ^= BE_PAI +/obj/item/device/mmi/posibrain/proc/question(var/client/C) + spawn(0) + if(!C) return + var/response = alert(C, "Someone is requesting a personality for a positronic brain. Would you like to play as one?", "Positronic brain request", "Yes", "No", "Never for this round") + if(!C || brainmob.key || 0 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located. + if(response == "Yes") + transfer_personality(C.mob) + else if (response == "Never for this round") + C.prefs.be_special ^= BE_PAI - transfer_identity(var/mob/living/carbon/H) - name = "positronic brain ([H])" - brainmob.name = H.real_name - brainmob.real_name = H.real_name - brainmob.dna = H.dna - brainmob.timeofhostdeath = H.timeofdeath - brainmob.stat = 0 - if(brainmob.mind) - brainmob.mind.assigned_role = "Positronic Brain" - if(H.mind) - H.mind.transfer_to(brainmob) - brainmob << "\blue You feel slightly disoriented. That's normal when you're just a metal cube." - icon_state = "posibrain-occupied" - return +/obj/item/device/mmi/posibrain/transfer_identity(var/mob/living/carbon/H) + name = "positronic brain ([H])" + brainmob.name = H.real_name + brainmob.real_name = H.real_name + brainmob.dna = H.dna + brainmob.timeofhostdeath = H.timeofdeath + brainmob.stat = 0 + if(brainmob.mind) + brainmob.mind.assigned_role = "Positronic Brain" + if(H.mind) + H.mind.transfer_to(brainmob) + brainmob << "\blue You feel slightly disoriented. That's normal when you're just a metal cube." + icon_state = "posibrain-occupied" + return - proc/transfer_personality(var/mob/candidate) +/obj/item/device/mmi/posibrain/proc/transfer_personality(var/mob/candidate) - src.searching = 0 - src.brainmob.mind = candidate.mind - //src.brainmob.key = candidate.key - src.brainmob.ckey = candidate.ckey - src.name = "positronic brain ([src.brainmob.name])" + src.searching = 0 + src.brainmob.mind = candidate.mind + src.brainmob.ckey = candidate.ckey + src.name = "positronic brain ([src.brainmob.name])" + src.brainmob << "You are a positronic brain, brought into existence on [station_name()]." + src.brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI." + src.brainmob << "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm." + src.brainmob << "Use say :b to speak to other artificial intelligences." + src.brainmob.mind.assigned_role = "Positronic Brain" - src.brainmob << "You are a positronic brain, brought into existence on [station_name()]." - src.brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI." - src.brainmob << "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm." - src.brainmob << "Use say :b to speak to other artificial intelligences." - src.brainmob.mind.assigned_role = "Positronic Brain" + var/turf/T = get_turf_or_move(src.loc) + for (var/mob/M in viewers(T)) + M.show_message("\blue The positronic brain chimes quietly.") + icon_state = "posibrain-occupied" - var/turf/T = get_turf_or_move(src.loc) - for (var/mob/M in viewers(T)) - M.show_message("\blue The positronic brain chimes quietly.") - icon_state = "posibrain-occupied" +/obj/item/device/mmi/posibrain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer. - proc/reset_search() //We give the players sixty seconds to decide, then reset the timer. + if(src.brainmob && src.brainmob.key) return - if(src.brainmob && src.brainmob.key) return + src.searching = 0 + icon_state = "posibrain" - src.searching = 0 - icon_state = "posibrain" - - var/turf/T = get_turf_or_move(src.loc) - for (var/mob/M in viewers(T)) - M.show_message("\blue The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") + var/turf/T = get_turf_or_move(src.loc) + for (var/mob/M in viewers(T)) + M.show_message("\blue The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") /obj/item/device/mmi/posibrain/examine() diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm index 45ece9f6df..d2b65fc25e 100644 --- a/code/modules/mob/living/simple_animal/bees.dm +++ b/code/modules/mob/living/simple_animal/bees.dm @@ -155,10 +155,10 @@ turns_per_move = rand(1,3) else if(feral < 0) turns_since_move = 0 - else if(!my_hydrotray || my_hydrotray.loc != src.loc || !my_hydrotray.planted || my_hydrotray.dead || !my_hydrotray.myseed) + else if(!my_hydrotray || my_hydrotray.loc != src.loc || my_hydrotray.dead || !my_hydrotray.seed) var/obj/machinery/hydroponics/my_hydrotray = locate() in src.loc if(my_hydrotray) - if(my_hydrotray.planted && !my_hydrotray.dead && my_hydrotray.myseed) + if(!my_hydrotray.dead && my_hydrotray.seed) turns_per_move = rand(20,50) else my_hydrotray = null diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 41bdbfe323..822d4e65fa 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -45,8 +45,8 @@ if(udder && prob(5)) udder.add_reagent("milk", rand(5, 10)) - if(locate(/obj/effect/spacevine) in loc) - var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc + if(locate(/obj/effect/plantsegment) in loc) + var/obj/effect/plantsegment/SV = locate(/obj/effect/plantsegment) in loc del(SV) if(prob(10)) say("Nom") @@ -55,7 +55,7 @@ for(var/direction in shuffle(list(1,2,4,8,5,6,9,10))) var/step = get_step(src, direction) if(step) - if(locate(/obj/effect/spacevine) in step) + if(locate(/obj/effect/plantsegment) in step) Move(step) /mob/living/simple_animal/hostile/retaliate/goat/Retaliate() @@ -65,8 +65,8 @@ /mob/living/simple_animal/hostile/retaliate/goat/Move() ..() if(!stat) - if(locate(/obj/effect/spacevine) in loc) - var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc + if(locate(/obj/effect/plantsegment) in loc) + var/obj/effect/plantsegment/SV = locate(/obj/effect/plantsegment) in loc del(SV) if(prob(10)) say("Nom") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 0177034e80..580d8dfd87 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -755,10 +755,15 @@ note dizziness decrements automatically in the mob's Life() proc. //Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. /mob/proc/update_canmove() - if(buckled && (!buckled.movable)) + + var/is_movable + if(buckled && istype(buckled)) + is_movable = buckled.movable + + if(buckled && !is_movable) anchored = 1 canmove = 0 - if( istype(buckled,/obj/structure/stool/bed/chair) ) + if(istype(buckled,/obj/structure/stool/bed/chair) ) lying = 0 else if(istype(buckled, /obj/vehicle)) var/obj/vehicle/V = buckled @@ -768,7 +773,7 @@ note dizziness decrements automatically in the mob's Life() proc. lying = 1 else lying = 1 - else if(buckled && (buckled.movable)) + else if(buckled && is_movable) anchored = 0 canmove = 1 lying = 0 @@ -776,7 +781,6 @@ note dizziness decrements automatically in the mob's Life() proc. lying = 1 canmove = 0 else if( stunned ) -// lying = 0 canmove = 0 else if(captured) anchored = 1 diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 4d27805381..a621e97682 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -842,18 +842,18 @@ datum description = "Sterilizes wounds in preparation for surgery." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - + //makes you squeaky clean reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) if (method == TOUCH) M.germ_level -= min(volume*20, M.germ_level) - + reaction_obj(var/obj/O, var/volume) O.germ_level -= min(volume*20, O.germ_level) - + reaction_turf(var/turf/T, var/volume) T.germ_level -= min(volume*20, T.germ_level) - + /* reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) src = null if (method==TOUCH) @@ -1332,7 +1332,7 @@ datum if(!M) M = holder.my_atom if(ishuman(M)) var/mob/living/carbon/human/H = M - + //Peridaxon is hard enough to get, it's probably fair to make this all internal organs for(var/datum/organ/internal/I in H.internal_organs) if(I.damage > 0) @@ -1768,7 +1768,7 @@ datum alien_weeds.healthcheck() else if(istype(O,/obj/effect/glowshroom)) //even a small amount is enough to kill it del(O) - else if(istype(O,/obj/effect/spacevine)) + else if(istype(O,/obj/effect/plantsegment)) if(prob(50)) del(O) //Kills kudzu too. // Damage that is done to growing plants is separately at code/game/machinery/hydroponics at obj/item/hydroponics diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index 9fb7fc2d97..6b26a16c0d 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -8,17 +8,8 @@ //Grown foods //Subclass so we can pass on values /obj/item/weapon/reagent_containers/food/snacks/grown/ - var/seed = "" - var/plantname = "" - var/productname = "" - var/species = "" - var/lifespan = 0 - var/endurance = 0 - var/maturation = 0 - var/production = 0 - var/yield = 0 + var/plantname var/potency = -1 - var/plant_type = 0 icon = 'icons/obj/harvest.dmi' New(newloc,newpotency) if (!isnull(newpotency)) @@ -27,154 +18,69 @@ src.pixel_x = rand(-5.0, 5) src.pixel_y = rand(-5.0, 5) -/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/O as obj, var/mob/user as mob) +/obj/item/weapon/reagent_containers/food/snacks/grown/New() ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - var/msg - msg = "*---------*\n This is \a [src]\n" - switch(plant_type) - if(0) - msg += "- Plant type: Normal plant\n" - if(1) - msg += "- Plant type: Weed\n" - if(2) - msg += "- Plant type: Mushroom\n" - msg += "- Potency: [potency]\n" - msg += "- Yield: [yield]\n" - msg += "- Maturation speed: [maturation]\n" - msg += "- Production speed: [production]\n" - msg += "- Endurance: [endurance]\n" - msg += "- Healing properties: [reagents.get_reagent_amount("nutriment")]\n" - msg += "*---------*" - usr << msg - return - /*if (istype(O, /obj/item/weapon/storage/bag/plants)) - var/obj/item/weapon/plantbag/S = O - if (S.mode == 1) - for(var/obj/item/G in get_turf(src)) - if(istype(G, /obj/item/seeds) || istype(G, /obj/item/weapon/reagent_containers/food/snacks/grown)) - if (S.contents.len < S.capacity) - S.contents += G - else - user << "\blue The plant bag is full." - return - user << "\blue You pick up all the plants and seeds." - else - if (S.contents.len < S.capacity) - S.contents += src; - else - user << "\blue The plant bag is full."*/ - return + //Handle some post-spawn var stuff. + spawn(1) + // Fill the object up with the appropriate reagents. + if(!isnull(plantname)) + var/datum/seed/S = seed_types[plantname] + if(!S || !S.chems) + return -/*/obj/item/seeds/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (istype(O, /obj/item/weapon/storage/bag/plants)) - var/obj/item/weapon/plantbag/S = O - if (S.mode == 1) - for(var/obj/item/G in get_turf(src)) - if(istype(G, /obj/item/seeds) || istype(G, /obj/item/weapon/reagent_containers/food/snacks/grown)) - if (S.contents.len < S.capacity) - S.contents += G - else - user << "\blue The plant bag is full." - return - user << "\blue You pick up all the plants and seeds." - else - if (S.contents.len < S.capacity) - S.contents += src; - else - user << "\blue The plant bag is full." - return*/ + potency = S.potency -/obj/item/weapon/grown/attackby(var/obj/item/O as obj, var/mob/user as mob) - ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - var/msg - msg = "*---------*\n This is \a [src]\n" - switch(plant_type) - if(0) - msg += "- Plant type: Normal plant\n" - if(1) - msg += "- Plant type: Weed\n" - if(2) - msg += "- Plant type: Mushroom\n" - msg += "- Acid strength: [potency]\n" - msg += "- Yield: [yield]\n" - msg += "- Maturation speed: [maturation]\n" - msg += "- Production speed: [production]\n" - msg += "- Endurance: [endurance]\n" - msg += "*---------*" - usr << msg - return + for(var/rid in S.chems) + var/list/reagent_data = S.chems[rid] + var/rtotal = reagent_data[1] + if(reagent_data.len > 1 && potency > 0) + rtotal += round(potency/reagent_data[2]) + reagents.add_reagent(rid,max(1,rtotal)) + + if(reagents.total_volume > 0) + bitesize = 1+round(reagents.total_volume / 2, 1) /obj/item/weapon/reagent_containers/food/snacks/grown/corn - seed = "/obj/item/seeds/cornseed" name = "ear of corn" desc = "Needs some butter!" + plantname = "corn" icon_state = "corn" potency = 40 filling_color = "#FFEE00" trash = /obj/item/weapon/corncob - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - /obj/item/weapon/reagent_containers/food/snacks/grown/cherries - seed = "/obj/item/seeds/cherryseed" name = "cherries" desc = "Great for toppings!" icon_state = "cherry" filling_color = "#FF0000" gender = PLURAL - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 15), 1)) - reagents.add_reagent("sugar", 1+round((potency / 15), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "cherry" /obj/item/weapon/reagent_containers/food/snacks/grown/poppy - seed = "/obj/item/seeds/poppyseed" name = "poppy" desc = "Long-used as a symbol of rest, peace, and death." icon_state = "poppy" potency = 30 filling_color = "#CC6464" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 20), 1)) - reagents.add_reagent("bicaridine", 1+round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 3, 1) + plantname = "poppies" /obj/item/weapon/reagent_containers/food/snacks/grown/harebell - seed = "obj/item/seeds/harebellseed" name = "harebell" desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten’d not thy breath.\"" icon_state = "harebell" potency = 1 filling_color = "#D4B2C9" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 20), 1)) - bitesize = 1+round(reagents.total_volume / 3, 1) + plantname = "harebells" /obj/item/weapon/reagent_containers/food/snacks/grown/potato - seed = "/obj/item/seeds/potatoseed" name = "potato" desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" icon_state = "potato" potency = 25 filling_color = "#E6E8DA" - New() - ..() - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - spawn(5) //So potency can be set in the proc that creates these crops - bitesize = reagents.total_volume + plantname = "potato" /obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() @@ -190,107 +96,63 @@ return /obj/item/weapon/reagent_containers/food/snacks/grown/grapes - seed = "/obj/item/seeds/grapeseed" name = "bunch of grapes" desc = "Nutritious!" icon_state = "grapes" filling_color = "#A332AD" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - reagents.add_reagent("sugar", 1+round((potency / 5), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "grapes" /obj/item/weapon/reagent_containers/food/snacks/grown/greengrapes - seed = "/obj/item/seeds/greengrapeseed" name = "bunch of green grapes" desc = "Nutritious!" icon_state = "greengrapes" potency = 25 filling_color = "#A6FFA3" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - reagents.add_reagent("kelotane", 3+round((potency / 5), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "greengrapes" /obj/item/weapon/reagent_containers/food/snacks/grown/peanut - seed = "/obj/item/seeds/peanutseed" name = "peanut" desc = "Nuts!" icon_state = "peanut" filling_color = "857e27" potency = 25 - New () - ..() - spawn(5) - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "peanut" /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage - seed = "/obj/item/seeds/cabbageseed" name = "cabbage" desc = "Ewwwwwwwwww. Cabbage." icon_state = "cabbage" potency = 25 filling_color = "#A2B5A1" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - bitesize = reagents.total_volume + plantname = "cabbage" /obj/item/weapon/reagent_containers/food/snacks/grown/berries - seed = "/obj/item/seeds/berryseed" name = "bunch of berries" desc = "Nutritious!" icon_state = "berrypile" filling_color = "#C2C9FF" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "berries" /obj/item/weapon/reagent_containers/food/snacks/grown/plastellium - seed = "/obj/item/seeds/plastiseed" name = "clump of plastellium" desc = "Hmm, needs some processing" icon_state = "plastellium" filling_color = "#C4C4C4" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("plasticide", 1+round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - + plantname = "plastic" /obj/item/weapon/reagent_containers/food/snacks/grown/shand - seed = "/obj/item/seeds/shandseed" name = "S'rendarr's Hand leaf" - desc = "A leaf sample from a lowland thicket shrub, often hid in by prey and predator to staunch their wounds and conceal their scent, allowing the plant to spread far on its native Ahdomai. Smells strongly like wax." + desc = "A leaf sample from a lowland thicket shrub. Smells strongly like wax." icon_state = "shand" filling_color = "#70C470" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("bicaridine", round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "shand" /obj/item/weapon/reagent_containers/food/snacks/grown/mtear - seed = "/obj/item/seeds/mtearseed" name = "sprig of Messa's Tear" - desc = "A mountain climate herb with a soft, cold blue flower, known to contain an abundance of chemicals in it's flower useful to treating burns- Bad for the allergic to pollen." + desc = "A mountain climate herb with a soft, cold blue flower, known to contain an abundance of healing chemicals." icon_state = "mtear" filling_color = "#70C470" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("honey", 1+round((potency / 10), 1)) - reagents.add_reagent("kelotane", 3+round((potency / 5), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "mtear" /obj/item/weapon/reagent_containers/food/snacks/grown/mtear/attack_self(mob/user as mob) if(istype(user.loc,/turf/space)) @@ -313,19 +175,13 @@ user << "You mash the leaves into a poultice." /obj/item/weapon/reagent_containers/food/snacks/grown/glowberries - seed = "/obj/item/seeds/glowberryseed" name = "bunch of glow-berries" desc = "Nutritious!" var/light_on = 1 var/brightness_on = 2 //luminosity when on filling_color = "#D3FF9E" icon_state = "glowberrypile" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", round((potency / 10), 1)) - reagents.add_reagent("uranium", 3+round(potency / 5, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "glowberries" /obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/Del() if(istype(loc,/mob)) @@ -341,146 +197,80 @@ src.SetLuminosity(round(potency/5,1)) /obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod - seed = "/obj/item/seeds/cocoapodseed" name = "cocoa pod" - desc = "Fattening... Mmmmm... chucklate." + desc = "Can be ground into cocoa powder." icon_state = "cocoapod" potency = 50 filling_color = "#9C8E54" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - reagents.add_reagent("coco", 4+round((potency / 5), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "cocoa" /obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane - seed = "/obj/item/seeds/sugarcaneseed" name = "sugarcane" desc = "Sickly sweet." icon_state = "sugarcane" potency = 50 filling_color = "#C0C9AD" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("sugar", 4+round((potency / 5), 1)) + plantname = "sugarcane" /obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries - seed = "/obj/item/seeds/poisonberryseed" name = "bunch of poison-berries" desc = "Taste so good, you could die!" icon_state = "poisonberrypile" gender = PLURAL potency = 15 filling_color = "#B422C7" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("toxin", 3+round(potency / 5, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "poisonberries" /obj/item/weapon/reagent_containers/food/snacks/grown/deathberries - seed = "/obj/item/seeds/deathberryseed" name = "bunch of death-berries" desc = "Taste so good, you could die!" icon_state = "deathberrypile" gender = PLURAL potency = 50 filling_color = "#4E0957" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("toxin", 3+round(potency / 3, 1)) - reagents.add_reagent("lexorin", 1+round(potency / 5, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "deathberries" /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris - seed = "/obj/item/seeds/ambrosiavulgaris" name = "ambrosia vulgaris branch" desc = "This is a plant containing various healing chemicals." icon_state = "ambrosiavulgaris" potency = 10 filling_color = "#125709" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("space_drugs", 1+round(potency / 8, 1)) - reagents.add_reagent("kelotane", 1+round(potency / 8, 1)) - reagents.add_reagent("bicaridine", 1+round(potency / 10, 1)) - reagents.add_reagent("toxin", 1+round(potency / 10, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "ambrosia" /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus - seed = "/obj/item/seeds/ambrosiadeus" name = "ambrosia deus branch" desc = "Eating this makes you feel immortal!" icon_state = "ambrosiadeus" potency = 10 filling_color = "#229E11" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("bicaridine", 1+round(potency / 8, 1)) - reagents.add_reagent("synaptizine", 1+round(potency / 8, 1)) - reagents.add_reagent("hyperzine", 1+round(potency / 10, 1)) - reagents.add_reagent("space_drugs", 1+round(potency / 10, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "ambrosiadeus" /obj/item/weapon/reagent_containers/food/snacks/grown/apple - seed = "/obj/item/seeds/appleseed" name = "apple" desc = "It's a little piece of Eden." icon_state = "apple" potency = 15 filling_color = "#DFE88B" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.maximum_volume = 20 - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - bitesize = reagents.maximum_volume // Always eat the apple in one + plantname = "apple" /obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned - seed = "/obj/item/seeds/poisonedappleseed" name = "apple" desc = "It's a little piece of Eden." icon_state = "apple" potency = 15 filling_color = "#B3BD5E" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.maximum_volume = 20 - reagents.add_reagent("cyanide", 1+round((potency / 5), 1)) - bitesize = reagents.maximum_volume // Always eat the apple in one + plantname = "poisonapple" /obj/item/weapon/reagent_containers/food/snacks/grown/goldapple - seed = "/obj/item/seeds/goldappleseed" name = "golden apple" desc = "Emblazoned upon the apple is the word 'Kallisti'." icon_state = "goldapple" potency = 15 filling_color = "#F5CB42" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - reagents.add_reagent("gold", 1+round((potency / 5), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap/attackby(var/obj/item/O as obj, var/mob/user as mob) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Mineral Content: [reagents.get_reagent_amount("gold")]%" - + plantname = "goldapple" /obj/item/weapon/reagent_containers/food/snacks/grown/watermelon - seed = "/obj/item/seeds/watermelonseed" name = "watermelon" desc = "It's full of watery goodness." icon_state = "watermelon" @@ -488,25 +278,15 @@ filling_color = "#FA2863" slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice slices_num = 5 - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 6), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "watermelon" /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin - seed = "/obj/item/seeds/pumpkinseed" name = "pumpkin" desc = "It's large and scary." icon_state = "pumpkin" potency = 10 filling_color = "#FAB728" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 6), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - + plantname = "pumpkin" /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() @@ -517,60 +297,38 @@ return /obj/item/weapon/reagent_containers/food/snacks/grown/lime - seed = "/obj/item/seeds/limeseed" name = "lime" desc = "It's so sour, your face will twist." icon_state = "lime" potency = 20 filling_color = "#28FA59" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 20), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "lime" /obj/item/weapon/reagent_containers/food/snacks/grown/lemon - seed = "/obj/item/seeds/lemonseed" name = "lemon" desc = "When life gives you lemons, be grateful they aren't limes." icon_state = "lemon" potency = 20 filling_color = "#FAF328" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 20), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "lemon" /obj/item/weapon/reagent_containers/food/snacks/grown/orange - seed = "/obj/item/seeds/orangeseed" name = "orange" desc = "It's an tangy fruit." icon_state = "orange" potency = 20 filling_color = "#FAAD28" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 20), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "orange" /obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet - seed = "/obj/item/seeds/whitebeetseed" name = "white-beet" desc = "You can't beat white-beet." icon_state = "whitebeet" potency = 15 filling_color = "#FFFCCC" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", round((potency / 20), 1)) - reagents.add_reagent("sugar", 1+round((potency / 5), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "whitebeet" /obj/item/weapon/reagent_containers/food/snacks/grown/banana - seed = "/obj/item/seeds/bananaseed" name = "banana" desc = "It's an excellent prop for a comedy." icon = 'icons/obj/items.dmi' @@ -578,99 +336,53 @@ item_state = "banana" filling_color = "#FCF695" trash = /obj/item/weapon/bananapeel - - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("banana", 1+round((potency / 10), 1)) - bitesize = 5 - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) + plantname = "banana" /obj/item/weapon/reagent_containers/food/snacks/grown/chili - seed = "/obj/item/seeds/chiliseed" name = "chili" desc = "It's spicy! Wait... IT'S BURNING ME!!" icon_state = "chilipepper" filling_color = "#FF0000" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 25), 1)) - reagents.add_reagent("capsaicin", 3+round(potency / 5, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/chili/attackby(var/obj/item/O as obj, var/mob/user as mob) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Capsaicin: [reagents.get_reagent_amount("capsaicin")]%" + plantname = "chili" /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant - seed = "/obj/item/seeds/eggplantseed" name = "eggplant" desc = "Maybe there's a chicken inside?" icon_state = "eggplant" filling_color = "#550F5C" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "eggplant" /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans - seed = "/obj/item/seeds/soyaseed" name = "soybeans" desc = "It's pretty bland, but oh the possibilities..." gender = PLURAL filling_color = "#E6E8B7" icon_state = "soybeans" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 20), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "soybean" /obj/item/weapon/reagent_containers/food/snacks/grown/tomato - seed = "/obj/item/seeds/tomatoseed" name = "tomato" desc = "I say to-mah-to, you say tom-mae-to." icon_state = "tomato" filling_color = "#FF0000" potency = 10 - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "tomato" - throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/tomato_smudge(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - del(src) - return +/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/throw_impact(atom/hit_atom) + ..() + new/obj/effect/decal/cleanable/tomato_smudge(src.loc) + src.visible_message("The [src.name] has been squashed.","You hear a smack.") + del(src) + return /obj/item/weapon/reagent_containers/food/snacks/grown/killertomato - seed = "/obj/item/seeds/killertomatoseed" name = "killer-tomato" desc = "I say to-mah-to, you say tom-mae-to... OH GOD IT'S EATING MY LEGS!!" icon_state = "killertomato" potency = 10 filling_color = "#FF0000" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - if(istype(src.loc,/mob)) - pickup(src.loc) - lifespan = 120 - endurance = 30 - maturation = 15 - production = 1 - yield = 3 potency = 30 - plant_type = 2 + plantname = "killertomato" /obj/item/weapon/reagent_containers/food/snacks/grown/killertomato/attack_self(mob/user as mob) if(istype(user.loc,/turf/space)) @@ -681,52 +393,40 @@ user << "You plant the killer-tomato." /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato - seed = "/obj/item/seeds/bloodtomatoseed" name = "blood-tomato" desc = "So bloody...so...very...bloody....AHHHH!!!!" icon_state = "bloodtomato" potency = 10 filling_color = "#FF0000" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) - reagents.add_reagent("blood", 1+round((potency / 5), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "bloodtomato" - throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/blood/splatter(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - src.reagents.reaction(get_turf(hit_atom)) - for(var/atom/A in get_turf(hit_atom)) - src.reagents.reaction(A) - del(src) - return +/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato/throw_impact(atom/hit_atom) + ..() + new/obj/effect/decal/cleanable/blood/splatter(src.loc) + src.visible_message("The [src.name] has been squashed.","You hear a smack.") + src.reagents.reaction(get_turf(hit_atom)) + for(var/atom/A in get_turf(hit_atom)) + src.reagents.reaction(A) + del(src) + return /obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato - seed = "/obj/item/seeds/bluetomatoseed" name = "blue-tomato" desc = "I say blue-mah-to, you say blue-mae-to." icon_state = "bluetomato" potency = 10 filling_color = "#586CFC" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 20), 1)) - reagents.add_reagent("lube", 1+round((potency / 5), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "bluetomato" - throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/blood/oil(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - src.reagents.reaction(get_turf(hit_atom)) - for(var/atom/A in get_turf(hit_atom)) - src.reagents.reaction(A) - del(src) - return +/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/throw_impact(atom/hit_atom) + ..() + new/obj/effect/decal/cleanable/blood/oil(src.loc) + src.visible_message("The [src.name] has been squashed.","You hear a smack.") + src.reagents.reaction(get_turf(hit_atom)) + for(var/atom/A in get_turf(hit_atom)) + src.reagents.reaction(A) + del(src) + return /obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/HasEntered(AM as mob|obj) if (istype(AM, /mob/living/carbon)) @@ -741,191 +441,90 @@ M.Weaken(5) /obj/item/weapon/reagent_containers/food/snacks/grown/wheat - seed = "/obj/item/seeds/wheatseed" name = "wheat" desc = "Sigh... wheat... a-grain?" gender = PLURAL icon_state = "wheat" filling_color = "#F7E186" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 25), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "wheat" /obj/item/weapon/reagent_containers/food/snacks/grown/ricestalk - seed = "/obj/item/seeds/riceseed" name = "rice stalk" desc = "Rice to see you." gender = PLURAL icon_state = "rice" filling_color = "#FFF8DB" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 25), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "rice" /obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod - seed = "/obj/item/seeds/kudzuseed" name = "kudzu pod" desc = "Pueraria Virallis: An invasive species with vines that rapidly creep and wrap around whatever they contact." icon_state = "kudzupod" filling_color = "#59691B" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment",1+round((potency / 50), 1)) - reagents.add_reagent("anti_toxin",1+round((potency / 25), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "kudzu" /obj/item/weapon/reagent_containers/food/snacks/grown/icepepper - seed = "/obj/item/seeds/icepepperseed" name = "ice-pepper" desc = "It's a mutant strain of chili" icon_state = "icepepper" potency = 20 filling_color = "#66CEED" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 50), 1)) - reagents.add_reagent("frostoil", 3+round(potency / 5, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper/attackby(var/obj/item/O as obj, var/mob/user as mob) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Frostoil: [reagents.get_reagent_amount("frostoil")]%" + plantname = "icechili" /obj/item/weapon/reagent_containers/food/snacks/grown/carrot - seed = "/obj/item/seeds/carrotseed" name = "carrot" desc = "It's good for the eyes!" icon_state = "carrot" potency = 10 filling_color = "#FFC400" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 20), 1)) - reagents.add_reagent("imidazoline", 3+round(potency / 5, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "carrot" /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi - seed = "/obj/item/seeds/reishimycelium" name = "reishi" desc = "Ganoderma lucidum: A special fungus believed to help relieve stress." icon_state = "reishi" potency = 10 filling_color = "#FF4800" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("stoxin", 3+round(potency / 3, 1)) - reagents.add_reagent("space_drugs", 1+round(potency / 25, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi/attackby(var/obj/item/O as obj, var/mob/user as mob) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Sleep Toxin: [reagents.get_reagent_amount("stoxin")]%" - user << "- Space Drugs: [reagents.get_reagent_amount("space_drugs")]%" + plantname = "reishi" /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita - seed = "/obj/item/seeds/amanitamycelium" name = "fly amanita" desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." icon_state = "amanita" potency = 10 filling_color = "#FF0000" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("amatoxin", 3+round(potency / 3, 1)) - reagents.add_reagent("psilocybin", 1+round(potency / 25, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita/attackby(var/obj/item/O as obj, var/mob/user as mob) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Amatoxins: [reagents.get_reagent_amount("amatoxin")]%" - user << "- Psilocybin: [reagents.get_reagent_amount("psilocybin")]%" + plantname = "amanita" /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel - seed = "/obj/item/seeds/angelmycelium" name = "destroying angel" desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amatoxins." icon_state = "angel" potency = 35 filling_color = "#FFDEDE" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 50), 1)) - reagents.add_reagent("amatoxin", 13+round(potency / 3, 1)) - reagents.add_reagent("psilocybin", 1+round(potency / 25, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel/attackby(var/obj/item/O as obj, var/mob/user as mob) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Amatoxins: [reagents.get_reagent_amount("amatoxin")]%" - user << "- Psilocybin: [reagents.get_reagent_amount("psilocybin")]%" + plantname = "destroyingangel" /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap - seed = "/obj/item/seeds/libertymycelium" name = "liberty-cap" desc = "Psilocybe Semilanceata: Liberate yourself!" icon_state = "libertycap" potency = 15 filling_color = "#F714BE" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 50), 1)) - reagents.add_reagent("psilocybin", 3+round(potency / 5, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap/attackby(var/obj/item/O as obj, var/mob/user as mob) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Psilocybin: [reagents.get_reagent_amount("psilocybin")]%" + plantname = "libertycap" /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet - seed = "/obj/item/seeds/plumpmycelium" name = "plump-helmet" desc = "Plumus Hellmus: Plump, soft and s-so inviting~" icon_state = "plumphelmet" filling_color = "#F714BE" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 2+round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "plumphelmet" /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom - seed = "/obj/item/seeds/walkingmushroom" name = "walking mushroom" desc = "Plumus Locomotus: The beginning of the great walk." icon_state = "walkingmushroom" filling_color = "#FFBFEF" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 2+round((potency / 10), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) - if(istype(src.loc,/mob)) - pickup(src.loc) - lifespan = 120 - endurance = 30 - maturation = 15 - production = 1 - yield = 3 potency = 30 - plant_type = 2 + plantname = "walkingmushroom" /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user as mob) if(istype(user.loc,/turf/space)) @@ -936,47 +535,27 @@ user << "You plant the walking mushroom." /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle - seed = "/obj/item/seeds/chantermycelium" name = "chanterelle cluster" desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" icon_state = "chanterelle" filling_color = "#FFE991" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment",1+round((potency / 25), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "mushrooms" /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom - seed = "/obj/item/seeds/glowshroom" name = "glowshroom cluster" desc = "Mycena Bregprox: This species of mushroom glows in the dark. Or does it?" icon_state = "glowshroom" filling_color = "#DAFF91" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("radium",1+round((potency / 20), 1)) - if(istype(src.loc,/mob)) - pickup(src.loc) - else - src.SetLuminosity(round(potency/10,1)) - lifespan = 120 //ten times that is the delay - endurance = 30 - maturation = 15 - production = 1 - yield = 3 potency = 30 - plant_type = 2 + plantname = "glowshroom" /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user as mob) if(istype(user.loc,/turf/space)) return var/obj/effect/glowshroom/planted = new /obj/effect/glowshroom(user.loc) - planted.delay = lifespan * 50 - planted.endurance = endurance - planted.yield = yield + planted.delay = 50 + planted.endurance = 100 planted.potency = potency del(src) @@ -1001,109 +580,61 @@ // Putting these at the bottom so they don't clutter the list up. -Cheridan // ************************************* -/* -//This object is just a transition object. All it does is make a grass tile and delete itself. -/obj/item/weapon/reagent_containers/food/snacks/grown/grass - seed = "/obj/item/seeds/grassseed" - name = "grass" - desc = "Green and lush." - icon_state = "spawner" - potency = 20 - New() - new/obj/item/stack/tile/grass(src.loc) - spawn(5) //Workaround to keep harvesting from working weirdly. - del(src) -*/ - -//This object is just a transition object. All it does is make dosh and delete itself. -Cheridan -/obj/item/weapon/reagent_containers/food/snacks/grown/money - seed = "/obj/item/seeds/cashseed" - name = "dosh" - desc = "Green and lush." - icon_state = "spawner" - potency = 10 - New() - switch(rand(1,100))//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan - if(0 to 10) - new/obj/item/weapon/spacecash/(src.loc) - if(11 to 20) - new/obj/item/weapon/spacecash/c10(src.loc) - if(21 to 30) - new/obj/item/weapon/spacecash/c20(src.loc) - if(31 to 40) - new/obj/item/weapon/spacecash/c50(src.loc) - if(41 to 50) - new/obj/item/weapon/spacecash/c100(src.loc) - if(51 to 60) - new/obj/item/weapon/spacecash/c200(src.loc) - if(61 to 80) - new/obj/item/weapon/spacecash/c500(src.loc) - else - new/obj/item/weapon/spacecash/c1000(src.loc) - spawn(5) //Workaround to keep harvesting from working weirdly. - del(src) - /obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato - seed = "/obj/item/seeds/bluespacetomatoseed" name = "blue-space tomato" desc = "So lubricated, you might slip through space-time." icon_state = "bluespacetomato" potency = 20 origin_tech = "bluespace=3" filling_color = "#91F8FF" - New() - ..() - spawn(5) //So potency can be set in the proc that creates these crops - reagents.add_reagent("nutriment", 1+round((potency / 20), 1)) - reagents.add_reagent("singulo", 1+round((potency / 5), 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + plantname = "bluespacetomato" - throw_impact(atom/hit_atom) - ..() - var/mob/M = usr - var/outer_teleport_radius = potency/10 //Plant potency determines radius of teleport. - var/inner_teleport_radius = potency/15 - var/list/turfs = new/list() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - if(inner_teleport_radius < 1) //Wasn't potent enough, it just splats. - new/obj/effect/decal/cleanable/blood/oil(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - del(src) - return - for(var/turf/T in orange(M,outer_teleport_radius)) - if(T in orange(M,inner_teleport_radius)) continue - if(istype(T,/turf/space)) continue - if(T.density) continue - if(T.x>world.maxx-outer_teleport_radius || T.xworld.maxy-outer_teleport_radius || T.yThe [src.name] has been squashed, causing a distortion in space-time.","You hear a splat and a crackle.") + src.visible_message("The [src.name] has been squashed.","You hear a smack.") del(src) return + for(var/turf/T in orange(M,outer_teleport_radius)) + if(T in orange(M,inner_teleport_radius)) continue + if(istype(T,/turf/space)) continue + if(T.density) continue + if(T.x>world.maxx-outer_teleport_radius || T.xworld.maxy-outer_teleport_radius || T.yThe [src.name] has been squashed, causing a distortion in space-time.","You hear a splat and a crackle.") + del(src) + return \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/genetics/prehistoric_plants.dm b/code/modules/research/xenoarchaeology/genetics/prehistoric_plants.dm index 8496869c85..d9212ac5b0 100644 --- a/code/modules/research/xenoarchaeology/genetics/prehistoric_plants.dm +++ b/code/modules/research/xenoarchaeology/genetics/prehistoric_plants.dm @@ -1,21 +1,3 @@ - -/obj/item/seeds/telriis - name = "pack of telriis seeds" - desc = "These seeds grow into telriis grass. Not recommended for consumption by sentient species." - icon_state = "seed-alien1" - mypath = "/obj/item/seeds/telriis" - species = "telriis" - plantname = "Telriis grass" - productname = "/obj/item/weapon/telriis_clump" - lifespan = 50 //number of ticks - endurance = 50 // - maturation = 5 //ticks to full growth stage - production = 5 //ticks till ready to harvest - yield = 4 //number produced when harvest - potency = 5 - plant_type = 1 //1=weed, 2=shroom, 0=normal - growthstages = 4 - /obj/item/weapon/reagent_containers/food/snacks/grown/telriis_clump name = "telriis grass" desc = "A clump of telriis grass, not recommended for consumption by sentients." @@ -27,24 +9,6 @@ reagents.add_reagent("nutriment", potency) bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/seeds/thaadra - name = "pack of thaa'dra seeds" - desc = "These seeds grow into Thaa'dra lichen. Likes the cold." - icon_state = "seed-alien3" - mypath = "/obj/item/seeds/thaadra" - species = "thaadra" - plantname = "Thaa'dra lichen" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/thaadra" - lifespan = 20 - endurance = 10 - maturation = 5 - production = 9 - yield = 2 - potency = 5 - plant_type = 2 - growthstages = 4 - /obj/item/weapon/reagent_containers/food/snacks/grown/thaadrabloom name = "thaa'dra bloom" desc = "Looks chewy, might be good to eat." @@ -56,23 +20,6 @@ reagents.add_reagent("nutriment", potency) bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/seeds/jurlmah - name = "pack of jurl'mah seeds" - desc = "These seeds grow into jurl'mah reeds, which produce large syrupy pods." - icon_state = "seed-alien3" - mypath = "/obj/item/seeds/jurlmah" - species = "jurlmah" - plantname = "jurl'mah reeds" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/jurlmah" - lifespan = 20 - endurance = 12 - maturation = 8 - production = 9 - yield = 3 - potency = 10 - growthstages = 5 - /obj/item/weapon/reagent_containers/food/snacks/grown/jurlmah name = "jurl'mah pod" desc = "Bulbous and veiny, it appears to pulse slightly as you look at it." @@ -84,23 +31,6 @@ reagents.add_reagent("nutriment", potency) bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/seeds/amauri - name = "pack of amauri seeds" - desc = "Grows into a straight, dark plant with small round fruit." - icon_state = "seed-alien3" - mypath = "/obj/item/seeds/amauri" - species = "amauri" - plantname = "amauri plant" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/amauri" - lifespan = 30 - endurance = 10 - maturation = 8 - production = 9 - yield = 4 - potency = 10 - growthstages = 3 - /obj/item/weapon/reagent_containers/food/snacks/grown/amauri name = "amauri fruit" desc = "It is small, round and hard. Its skin is a thick dark purple." @@ -113,23 +43,6 @@ reagents.add_reagent("nutriment", potency) bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/seeds/gelthi - name = "pack of gelthi seeds" - desc = "Grows into a bright, wavy plant with many small fruits." - icon_state = "seed-alien2" - mypath = "/obj/item/seeds/gelthi" - species = "gelthi" - plantname = "gelthi plant" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/gelthi" - lifespan = 20 - endurance = 15 - maturation = 6 - production = 6 - yield = 2 - potency = 1 - growthstages = 3 - /obj/item/weapon/reagent_containers/food/snacks/grown/gelthi name = "gelthi berries" desc = "They feel fluffy and slightly warm to the touch." @@ -143,23 +56,6 @@ reagents.add_reagent("nutriment", potency) bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/seeds/vale - name = "pack of vale seeds" - desc = "The vale bush is often depicted in ancient heiroglyphs and is similar to cherry blossoms." - icon_state = "seed-alien2" - mypath = "/obj/item/seeds/vale" - species = "vale" - plantname = "vale bush" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/vale" - lifespan = 25 - endurance = 15 - maturation = 8 - production = 10 - yield = 3 - potency = 3 - growthstages = 4 - /obj/item/weapon/reagent_containers/food/snacks/grown/vale name = "vale leaves" desc = "Small, curly leaves covered in a soft pale fur." @@ -172,23 +68,6 @@ reagents.add_reagent("nutriment", potency) bitesize = 1+round(reagents.total_volume / 2, 1) - -/obj/item/seeds/surik - name = "pack of surik seeds" - desc = "A spiky blue vine with large fruit resembling pig ears." - icon_state = "seed-alien3" - mypath = "/obj/item/seeds/surik" - species = "surik" - plantname = "surik vine" - productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/surik" - lifespan = 30 - endurance = 18 - maturation = 7 - production = 7 - yield = 3 - potency = 3 - growthstages = 4 - /obj/item/weapon/reagent_containers/food/snacks/grown/surik name = "surik fruit" desc = "Multiple layers of blue skin peeling away to reveal a spongey core, vaguely resembling an ear." @@ -199,4 +78,4 @@ reagents.add_reagent("impedrezene", potency * 3) reagents.add_reagent("synaptizine", potency * 2) reagents.add_reagent("nutriment", potency) - bitesize = 1+round(reagents.total_volume / 2, 1) + bitesize = 1+round(reagents.total_volume / 2, 1) \ No newline at end of file diff --git a/icons/obj/hydroponics.dmi b/icons/obj/hydroponics.dmi index 5459ad4cb2..700031943d 100644 Binary files a/icons/obj/hydroponics.dmi and b/icons/obj/hydroponics.dmi differ diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 80e91eb11c..841f5fd269 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -3911,7 +3911,7 @@ "bxk" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bxl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "floorgrime"},/area/rnd/mixing) "bxm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/sortjunction/flipped{dir = 2; name = "Miscellaneous Research"; sortType = "Miscellaneous Research"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bxn" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"bxn" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "bxo" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Research Division Delivery"; req_access_txt = "47"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) "bxp" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Research Division"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor{icon_state = "bot"},/area/medical/research{name = "Research Division"}) "bxq" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -4083,12 +4083,12 @@ "bAA" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/crew_quarters/hor) "bAB" = (/obj/structure/lamarr,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/hor) "bAC" = (/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/crew_quarters/hor) -"bAD" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"bAD" = (/obj/machinery/botany/extractor,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "bAE" = (/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bAF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bAG" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "eng_eva_pump"; tag_exterior_door = "eng_eva_outer"; frequency = 1379; id_tag = "eng_eva_airlock"; tag_interior_door = "eng_eva_inner"; name = "Engineering Airlock Console"; pixel_y = 25; req_access_txt = "13"; tag_chamber_sensor = "eng_eva_sensor"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva_maintenance) "bAH" = (/obj/machinery/light/small{dir = 4; pixel_y = 8},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "mining_dock_airlock"; pixel_x = 25; pixel_y = -5; req_access_txt = "0"; req_one_access_txt = "13;48"; tag_airpump = "mining_dock_pump"; tag_chamber_sensor = "mining_dock_sensor"; tag_exterior_door = "mining_dock_outer"; tag_interior_door = "mining_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "mining_dock_sensor"; pixel_x = 25; pixel_y = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/miningdock) -"bAI" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/sink/kitchen{pixel_y = 28},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"bAI" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/table,/obj/item/weapon/storage/box/botanydisk,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "bAJ" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) "bAK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage) "bAL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage) @@ -6365,7 +6365,7 @@ "csu" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/engineering{name = "Engineering EVA Storage"; req_access_txt = "12"; req_one_access_txt = "11;24"},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) "csv" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/engineering{name = "Engineering Washroom"; req_one_access_txt = "11;24"},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) "csw" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engine/workshop) -"csx" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"csx" = (/obj/machinery/botany/editor,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "csy" = (/obj/machinery/door/airlock/research{name = "Xenoflora Research"; req_access_txt = "47"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "csz" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor,/area/construction) "csA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -6374,7 +6374,7 @@ "csD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance Access"; req_access_txt = "12;24"},/turf/simulated/floor,/area/atmos) "csE" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/atmos,/obj/machinery/door/window/northright{name = "Atmospherics Hardsuits"; req_access_txt = "24"},/turf/simulated/floor,/area/engine/engine_eva) "csF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/engineering_monitoring) -"csG" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"csG" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "csH" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engine/engineering_monitoring) "csI" = (/obj/machinery/light_construct,/obj/structure/rack,/obj/item/clothing/suit/storage/hazardvest,/obj/item/device/flashlight,/turf/simulated/floor,/area/construction) "csJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/starboard) @@ -6537,7 +6537,7 @@ "cvK" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area) "cvL" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area) "cvM" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area) -"cvN" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"cvN" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cvO" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns3,/area) "cvP" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area) "cvQ" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 4; name = "thrower_escapeshuttletop(right)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area) @@ -6918,7 +6918,7 @@ "cDb" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac) "cDc" = (/turf/space,/area/shuttle/escape_pod5/centcom) "cDd" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area) -"cDe" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"cDe" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cDf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/turf/simulated/floor/plating,/area/construction) "cDg" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 4},/area/syndicate_mothership) "cDh" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 9},/area/syndicate_mothership) @@ -8444,10 +8444,10 @@ "dgt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) "dgu" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "dgv" = (/obj/machinery/computer/shuttle_control/multi/syndicate{req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"dgw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora) +"dgw" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "dgx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) -"dgy" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) -"dgz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"dgy" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"dgz" = (/obj/structure/table,/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "dgA" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "dgB" = (/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora) "dgC" = (/obj/machinery/washing_machine,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) @@ -8466,7 +8466,7 @@ "dgP" = (/obj/machinery/door/window/northright{name = "Xenoflora Containment"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) "dgQ" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) "dgR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora_storage) -"dgS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora) +"dgS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora) "dgT" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora) "dgU" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "dgV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora) @@ -8520,9 +8520,9 @@ "dhR" = (/obj/structure/closet/wardrobe/black,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engi_engine) "dhS" = (/obj/machinery/light,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "dhT" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) -"dhU" = (/obj/machinery/hydroponics,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"dhU" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "dhV" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) -"dhW" = (/obj/machinery/light,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"dhW" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "dhX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "dhY" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "dhZ" = (/obj/machinery/light{dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/medical/virologyaccess) @@ -10947,6 +10947,11 @@ "ecA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_west_outer"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = null},/turf/simulated/floor/plating,/area/mine/living_quarters) "ecB" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_outpost_inner"; locked = 1; name = "Mining Dock Airlock"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor,/area/mine/production) "ecC" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "mining_outpost_airlock"; name = "interior access button"; pixel_x = -30; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13;48"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/turf/simulated/floor,/area/mine/production) +"ecD" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"ecE" = (/obj/structure/stool,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"ecF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora) +"ecG" = (/obj/machinery/light,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"ecH" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11107,12 +11112,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQchdalQalQalQalQalQaaaaaaaaaaaaaaaaaaaafaafaaabxWbxTbxTbxTbxVbxTbxTbxRbxSccgbwobwhccgbwJbwKbwHbwIbwDbwGbyybwvbwSbwObfHbxUbwMbgwbjEbwLbxjbiMbxdbfNbiQbiPbxcbxabfNbxObPybymbyxbvlbCAbvobtLbtXbvebxEbiDbvfbvkbvjbuObiDbuQbvFbvNbwUbhebhFaJzbiKbvrbvsbiGbvtbvubuabiGbxsbGKbCebCTbhQbhQbhQbhQbhQbvqbhQbhQbwqbwmbvvbrkbxxbrhbiwbypbvabrhbxybwCbwTbwrbwsbwYbxkbumbwVbumbumbuLbunbAEbyVbyVbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbtybjBbuPbulbulbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbAdbzWbsKbzRbAGbthbzBbzFbzHccgbzSbzVccgccgbAlbAmbAnbAhbAibAjbAkbYpbyUbyRbyObyNbyJbyMbyLbzDbyJbyJbzJbzpbznbzAcjcbfNbkjbqZbqZbqZbqZbywbqZbqZbqZbysbyrbiDbyvbqJbytbtDbiDbylbynbzybwUbhebhFbhebiKbwWbwXbiGbyibwZbyhbwFbwEbDBbwPbwRbwRbwRbwRbwRbwRbygbwRbwRbygbwRbyBbygbygbCEbCPbDgbyqbCEbyubxAbxAbxAbxCbxDbxAbxAbxAbxAbxAbxzbyabxZbVNbVObyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaaaaaabxYbjBbxXbjBbjBbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbsBbsBbsKbsMbsLbthbtlbsNbsOccgbvRbqsbqubvYbqDbqwbyobyTbqQbqIbqKbqVbqUbeYbqSbwtbrMbrGbribsdbsebsdbwwbsubsjbjpbshbfNbkjbqZbqYbqWbqRbqXbqWbwcbqLbqPbqNbpxbppbqJbqJbsmbiDbsnbsobsibwUbhebspbqtbiKbsfbsgbiGbrObrVbsbbiGbssbidbvKboNbrkbrkboNboJboGboibnRbnKbstbsrbsqbvnbvQbxrbykbxtbyjbxrbugbtObsabrjdfTdfTdfTdfTbsvbsabrjdfTdfTbAEbnkbnmbnlbWWbvSbWYbWZbXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabpKbpLbpLbpPbjBbjBbjSbjSbqmbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSFbSFbSFbSFbSFbSFbSFbuibujccgccgccgccgccgbukbuAbuKbuKbuKbuMbuNbYpbjqbjxbtsbjybttbtxbtubtEbtCbtGbfNbtVbtHbtYbtWbfNbzIbqZbzxbzsbzsbzcbtMbkObqZbzbbyZbiDbtIbtFbqJbtDbiDbtAbtBbtzbwUbhebqHbtJbiKbszbsAbiGbiGbiGbiGbiGbBPbidbidbidbfMcmHbBObGKbXObXPbXQbGKbsrbBNbBvbAJctibudbuhbFqbtUbudbAIbyYbyYbyYbxnbwQbzQbADbyYbyYbyYbyXdfTbXVbswbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbtrbtwbtmbtnbtybjBbjBbjSbmLbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFdgmdgldgkdgjcrEcCRcCQcCQcrucCEcCEcAMcCJbAkbYpbjqbjxcnCbwMcnzctfcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkjbqZdZLdZOdZOdZMdZNbqZdYtcZydZQbiDdZTdZRdZSdZHbiDdZGbtBcrVbwUbxPbtKbxQbiKdZKdZJbiKcrXbPwbiddgCbssdZVdZWbidbfMdWwdXGbGKaaaaafaaaaaabsrctuctjdgrdgqdgtdgscCVcCUdgxdgwdgzdgydgocDedfQdfQdgBdgodgodgodgndfTbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFdfNdfMcsudfKcqdcpVcqccpVcstcpTcpScskcrZcpLcqjcqwcmCdfPbgXbgXbgXbgXbgXbgXbgXbfNbfNcsvbfNbfNbfNbkjbqZbqZdZrdZsdZtdZubqZdfUcqDcqTbiDbkdbiDbiDbiDbiDbwUdZydZzbwUcqXcqWcqXbiKbXLdZBbiKbPybPybiddZDbssbidbidbidbfMcpWcmNbGKaaaaafaaaaaedfXdfVdfWdgbdgadfZdfYcsBcsAcsycsxcvNcvNcvNcsGdgidghdfQdfQdfQdfRdfSdfTcqQcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSFbSFbSFbSFbSFbSFbSFbuibujccgccgccgccgccgbukbuAbuKbuKbuKbuMbuNbYpbjqbjxbtsbjybttbtxbtubtEbtCbtGbfNbtVbtHbtYbtWbfNbzIbqZbzxbzsbzsbzcbtMbkObqZbzbbyZbiDbtIbtFbqJbtDbiDbtAbtBbtzbwUbhebqHbtJbiKbszbsAbiGbiGbiGbiGbiGbBPbidbidbidbfMcmHbBObGKbXObXPbXQbGKbsrbBNbBvbAJctibudbuhbFqbtUbudcDecsGcsGcsGcvNbwQbzQbAIcsxbADbxnbyXdfTbXVbswbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbtrbtwbtmbtnbtybjBbjBbjSbmLbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFdgmdgldgkdgjcrEcCRcCQcCQcrucCEcCEcAMcCJbAkbYpbjqbjxcnCbwMcnzctfcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkjbqZdZLdZOdZOdZMdZNbqZdYtcZydZQbiDdZTdZRdZSdZHbiDdZGbtBcrVbwUbxPbtKbxQbiKdZKdZJbiKcrXbPwbiddgCbssdZVdZWbidbfMdWwdXGbGKaaaaafaaaaaabsrctuctjdgrdgqdgtdgscCVcCUdgxdgSdhWdhUdhUecDdfQdfQdgBecEdgodgodgndfTbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFdfNdfMcsudfKcqdcpVcqccpVcstcpTcpScskcrZcpLcqjcqwcmCdfPbgXbgXbgXbgXbgXbgXbgXbfNbfNcsvbfNbfNbfNbkjbqZbqZdZrdZsdZtdZubqZdfUcqDcqTbiDbkdbiDbiDbiDbiDbwUdZydZzbwUcqXcqWcqXbiKbXLdZBbiKbPybPybiddZDbssbidbidbidbfMcpWcmNbGKaaaaafaaaaaedfXdfVdfWdgbdgadfZdfYcsBcsAcsydgwdgydfQdfQdfQdgidgzdfQdfQdfQdfRdfSdfTcqQcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacphbSGcpXbSGbSGcpRbSFcFVcFUcQKcFXcRqcRpcFMcFKcDpbqVbqVcFTbqVbqKcFIcFJbjxcpCcpDcpucpucpEdgZdhadgGdhbdhcdhddhedhfdgGbkjbEaeaxbMXbMXeaveaweaDeaEdLbdPueazeaAeayeaeeaeeaudXBbwUbwUbwUdhtcZLdhubiKbiKbiKbiKbPybPybiddZDbsseareasbidbfMbGKbGKbGKaaaaafaaaaaadhqdhrdhsdhldhkdhmcWQdQScDxdhidhhdfQdfQdfQdfQdhodhndfQdhpdfQdfRdghdfTcaycqbcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacphbSGbSGbSGcpicoIcDfcsOcsNcvgcuVcsWbpIcsMcsEcsmcoycoEcoDdgFbAkbYpcpdcpbcpccDncpfcpecpfdgIcoWdgGdgHdgKdgLdgJdgHdgGbkjbEaeabbMXbOsbMXeaaeageahcCNeajeaceadeaeeafeaeeandXBciZboNcDacEycExdgYcFGboNboNboNboNcEzbidbidbidbidbidbidbfMbGKaafaafaafcbfaafaafdgRdgPdgQdgQdgQccQbudcCKcyldgTdgSdgMdgMdgMdgXdgWdgWdgVdgMdgMdgNdgOdfTcbjcDocblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecEGcnicECbTecEBcnfcEtbTecEscnccErbTeaaaaafcphcrdbSGbSGcqqbWbbSFdPYdPVcvgcvgdPTcvgcvgcvgcvgcrzbYpcrxcrybAkbYpdRPcrlbyOcEIcricrkcridhIcrqcEJdhLdhGdhHdgGdgGdgGbkjbEadhOebrdBIebpebqebiebjdQhebhebmebnebkdBNebcdhNebadQabJNebfdQedQddhMbCTbyDbXPbXQbGKbvKboNboNboNboNboNboNciNbGKaaaaaaaaaaafaaaaaabsrdhWdhUdBXdhTbuddQidQSdQRdfTdhVbyYbyYbyYdhPcvudhQdhSbyYbyYbyYdhYdfTdhXcrNcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacphbSGbSGbSGcpicoIcDfcsOcsNcvgcuVcsWbpIcsMcsEcsmcoycoEcoDdgFbAkbYpcpdcpbcpccDncpfcpecpfdgIcoWdgGdgHdgKdgLdgJdgHdgGbkjbEaeabbMXbOsbMXeaaeageahcCNeajeaceadeaeeafeaeeandXBciZboNcDacEycExdgYcFGboNboNboNboNcEzbidbidbidbidbidbidbfMbGKaafaafaafcbfaafaafdgRdgPdgQdgQdgQccQbudcCKcyldgTecFdgMdgMdgMdgXdgWdgWdgVdgMdgMdgNdgOdfTcbjcDocblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecEGcnicECbTecEBcnfcEtbTecEscnccErbTeaaaaafcphcrdbSGbSGcqqbWbbSFdPYdPVcvgcvgdPTcvgcvgcvgcvgcrzbYpcrxcrybAkbYpdRPcrlbyOcEIcricrkcridhIcrqcEJdhLdhGdhHdgGdgGdgGbkjbEadhOebrdBIebpebqebiebjdQhebhebmebnebkdBNebcdhNebadQabJNebfdQedQddhMbCTbyDbXPbXQbGKbvKboNboNboNboNboNboNciNbGKaaaaaaaaaaafaaaaaabsrecGecHdBXdhTbuddQidQSdQRdfTdhVbyYbyYbyYdhPcvudhQdhSbyYbyYbyYdhYdfTdhXcrNcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecqocdMcqpbTecdWcdMcdXbTecdLcdMcdNbTeaaaaafcqrbSGbSGbSIcqqcqybSFdPAdPvcqvcDJcDzcDycEecEecEpcEfcEecDKcqzbAkbAkbjqcqIcqJcpDcqCcqCcqHdhBdhCdgGdhAdhydhzdhwdhxdgGcEqbEadhDeaMdCpeaOeaPbEaeaFdPDeaHdXBeaIeaJdCqeaSdhEdXBbfMbPydXFeaUeaTeaQdXFaaaaaaaaabGKbGKbGKbXObXPbXPbXQbGKbGKbGKaaaaaaaaabudbudbudbudbudbudbudbudbuddPHdPSdPPdfTdfTbZPbOwcdqdfTdfTdfTdfTcoTbOwcdqdfTdfTccSdhFccSaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachdaafaafaafaaaaafcsLaafcsLaafcdmaafcdlaafcdmaafcdlaafaafaaabSFcsKbUXcsIdbicszbQGcFbcEVbQGcsCcsDcmJcmJdTDcmJchBcFccsFchBcsHchRcEPcERcswcaOcaOcaOcaOcEScEUcaOcjXcjXcjXcjXcjXcjXbkjbEaebRdibdCyebNebObEaeaFdTLebMdXBebKebIdCzdiaebGdXBcFdbPydXFebFebEdhZdXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabudcnbcmXcmYdTJdTKcdydTHcfcdTIdTFdTEdTGchTaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcebceccebaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafcsgclgcshclgcshclgccWclgccUclgccWclgccUclgccVbQGbQGbQGbQGbQGbQGbQGbQGcrPcEKcrUcrTcrSdQTdQWdQVdQUchBcsadZEcrYchBcaTchwchtcaOcsdcsecsbcscchhcaPcaOdRMdRMcsfclLclLcjXbkjbEabEaebxdCJbEabEabEaebvckYebwdXBdXBdXBdDhebCdXBdXBbfMcpqdXFdYWdYcdYddXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafbudccCcoLccCdRNcmEcbWdTCcfcdRUdTAdRUbudbudaaaaaaaaaaafaafaaaaaeaaaaaaaaaaaaaafaaaceWaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa