From 3155f1b2f752049aeb0b569450f0419cc6e840ca Mon Sep 17 00:00:00 2001 From: Stakks Date: Wed, 28 Mar 2018 23:40:38 -0500 Subject: [PATCH] Merges plant refactor and bioengineering. --- _maps/RandomZLevels/Academy.dmm | 4 +- _maps/RandomZLevels/blackmarketpackers.dmm | 2 +- .../MetaStation/MetaStation.v40D.dmm | 840 ++++---- _maps/map_files/MetaStation/z5.dmm | 3 +- _maps/map_files/MetaStation/z8.dmm | 15 +- code/__DEFINES/misc.dm | 8 +- code/datums/supplypacks.dm | 38 +- code/game/asteroid.dm | 8 +- code/game/gamemodes/nuclear/nuclearbomb.dm | 9 +- code/game/machinery/cloning.dm | 19 +- code/game/machinery/constructable_frame.dm | 11 + code/game/machinery/vending.dm | 20 +- .../objects/effects/decals/Cleanable/misc.dm | 7 + .../awaymissions/mission_code/Cabin.dm | 132 ++ code/modules/events/spacevine.dm | 2 +- code/modules/food&drinks/food/snacks.dm | 6 +- .../food&drinks/kitchen machinery/juicer.dm | 4 +- .../kitchen machinery/processor.dm | 7 +- .../recipes/tablecraft/recipes_bread.dm | 2 +- .../recipes/tablecraft/recipes_pastry.dm | 2 +- .../recipes/tablecraft/recipes_pie.dm | 2 +- .../recipes/tablecraft/recipes_soup.dm | 2 +- code/modules/hydroponics/gene_modder.dm | 398 ++++ code/modules/hydroponics/grown.dm | 1406 ++------------ code/modules/hydroponics/grown/ambrosia.dm | 49 + code/modules/hydroponics/grown/apple.dm | 54 + code/modules/hydroponics/grown/banana.dm | 118 ++ code/modules/hydroponics/grown/beans.dm | 46 + code/modules/hydroponics/grown/berries.dm | 180 ++ code/modules/hydroponics/grown/cereals.dm | 63 + code/modules/hydroponics/grown/chili.dm | 91 + code/modules/hydroponics/grown/citrus.dm | 119 ++ .../hydroponics/grown/cocoa_vanilla.dm | 43 + code/modules/hydroponics/grown/corn.dm | 83 + code/modules/hydroponics/grown/eggplant.dm | 42 + code/modules/hydroponics/grown/flowers.dm | 199 ++ .../modules/hydroponics/grown/grass_carpet.dm | 81 + code/modules/hydroponics/grown/kudzu.dm | 89 + code/modules/hydroponics/grown/melon.dm | 45 + code/modules/hydroponics/grown/misc.dm | 94 + code/modules/hydroponics/grown/mushrooms.dm | 266 +++ code/modules/hydroponics/grown/nettle.dm | 116 ++ code/modules/hydroponics/grown/potato.dm | 68 + code/modules/hydroponics/grown/pumpkin.dm | 51 + code/modules/hydroponics/grown/replicapod.dm | 107 + code/modules/hydroponics/grown/root.dm | 89 + code/modules/hydroponics/grown/tea_coffee.dm | 84 + code/modules/hydroponics/grown/tobacco.dm | 42 + code/modules/hydroponics/grown/tomato.dm | 139 ++ code/modules/hydroponics/grown/towercap.dm | 92 + code/modules/hydroponics/growninedible.dm | 366 +--- code/modules/hydroponics/hydroponics.dm | 496 ++--- code/modules/hydroponics/plant_genes.dm | 293 +++ code/modules/hydroponics/sample.dm | 44 + code/modules/hydroponics/seed_extractor.dm | 30 +- code/modules/hydroponics/seeds.dm | 1728 +++-------------- code/modules/mining/abandoned_crate.dm | 2 +- code/modules/reagents/Chemistry-Machinery.dm | 24 +- code/modules/reagents/reagent_containers.dm | 2 +- code/modules/research/designs.dm | 4 +- config/admins.txt | 16 - icons/effects/tomatodecal.dmi | Bin 7450 -> 8291 bytes icons/obj/hydroponics/equipment.dmi | Bin 16911 -> 17964 bytes icons/obj/hydroponics/harvest.dmi | Bin 42667 -> 44280 bytes icons/obj/hydroponics/seeds.dmi | Bin 18359 -> 19641 bytes tgstation.dme | 29 + 66 files changed, 4465 insertions(+), 3966 deletions(-) create mode 100644 code/modules/awaymissions/mission_code/Cabin.dm create mode 100644 code/modules/hydroponics/gene_modder.dm create mode 100644 code/modules/hydroponics/grown/ambrosia.dm create mode 100644 code/modules/hydroponics/grown/apple.dm create mode 100644 code/modules/hydroponics/grown/banana.dm create mode 100644 code/modules/hydroponics/grown/beans.dm create mode 100644 code/modules/hydroponics/grown/berries.dm create mode 100644 code/modules/hydroponics/grown/cereals.dm create mode 100644 code/modules/hydroponics/grown/chili.dm create mode 100644 code/modules/hydroponics/grown/citrus.dm create mode 100644 code/modules/hydroponics/grown/cocoa_vanilla.dm create mode 100644 code/modules/hydroponics/grown/corn.dm create mode 100644 code/modules/hydroponics/grown/eggplant.dm create mode 100644 code/modules/hydroponics/grown/flowers.dm create mode 100644 code/modules/hydroponics/grown/grass_carpet.dm create mode 100644 code/modules/hydroponics/grown/kudzu.dm create mode 100644 code/modules/hydroponics/grown/melon.dm create mode 100644 code/modules/hydroponics/grown/misc.dm create mode 100644 code/modules/hydroponics/grown/mushrooms.dm create mode 100644 code/modules/hydroponics/grown/nettle.dm create mode 100644 code/modules/hydroponics/grown/potato.dm create mode 100644 code/modules/hydroponics/grown/pumpkin.dm create mode 100644 code/modules/hydroponics/grown/replicapod.dm create mode 100644 code/modules/hydroponics/grown/root.dm create mode 100644 code/modules/hydroponics/grown/tea_coffee.dm create mode 100644 code/modules/hydroponics/grown/tobacco.dm create mode 100644 code/modules/hydroponics/grown/tomato.dm create mode 100644 code/modules/hydroponics/grown/towercap.dm create mode 100644 code/modules/hydroponics/plant_genes.dm create mode 100644 code/modules/hydroponics/sample.dm delete mode 100644 config/admins.txt diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm index 05947daa3e316..3d9990882a788 100755 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/Academy.dmm @@ -176,7 +176,7 @@ "dt" = (/obj/structure/stool/bed/chair/wood/normal{dir = 1},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms) "du" = (/turf/simulated/floor/plasteel{icon_state = "green"; dir = 8},/area/awaymission/academy/classrooms) "dv" = (/obj/structure/stool,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms) -"dw" = (/obj/item/seeds/eggyseed,/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms) +"dw" = (/obj/item/seeds/eggplant/eggy,/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms) "dx" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms) "dy" = (/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/awaymission/academy/classrooms) "dz" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/item/weapon/weldingtool,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms) @@ -194,7 +194,7 @@ "dL" = (/obj/machinery/hydroponics/constructable,/obj/item/seeds/replicapod,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms) "dM" = (/obj/structure/table/wood,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms) "dN" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms) -"dO" = (/obj/machinery/hydroponics/constructable,/obj/item/seeds/bluespacetomatoseed,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms) +"dO" = (/obj/machinery/hydroponics/constructable,/obj/effect/anomaly/bluespace,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms) "dP" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms) "dQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/awaymission/academy/classrooms) "dR" = (/obj/machinery/door/airlock/freezer,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/academy/classrooms) diff --git a/_maps/RandomZLevels/blackmarketpackers.dmm b/_maps/RandomZLevels/blackmarketpackers.dmm index bbe7eb3f77652..5b14c336d0c20 100644 --- a/_maps/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/RandomZLevels/blackmarketpackers.dmm @@ -220,7 +220,7 @@ "el" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-carpet"; icon_state = "carpet"},/area/awaymission/BMPship/Fore) "em" = (/obj/machinery/hydroponics,/turf/simulated/floor/plasteel{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/awaymission/BMPship/Midship) "en" = (/turf/simulated/floor/plasteel{tag = "icon-green"; icon_state = "green"},/area/awaymission/BMPship/Midship) -"eo" = (/obj/machinery/seed_extractor,/obj/item/seeds/walkingmushroommycelium,/turf/simulated/floor/plasteel{tag = "icon-green"; icon_state = "green"},/area/awaymission/BMPship/Midship) +"eo" = (/obj/machinery/seed_extractor,/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom,/turf/simulated/floor/plasteel{tag = "icon-green"; icon_state = "green"},/area/awaymission/BMPship/Midship) "ep" = (/obj/machinery/hydroponics,/turf/simulated/floor/plasteel{tag = "icon-green (SOUTHEAST)"; icon_state = "green"; dir = 6},/area/awaymission/BMPship/Midship) "eq" = (/turf/simulated/wall/shuttle{tag = "icon-swall2"; icon_state = "swall2"},/area/awaymission/BMPship/Midship) "er" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) diff --git a/_maps/map_files/MetaStation/MetaStation.v40D.dmm b/_maps/map_files/MetaStation/MetaStation.v40D.dmm index 72045be4efa5a..4dde69eaf1383 100755 --- a/_maps/map_files/MetaStation/MetaStation.v40D.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v40D.dmm @@ -30,7 +30,7 @@ "aaD" = (/obj/structure/flora/kirbyplants{tag = "icon-plant-15"; icon_state = "plant-15"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "aaE" = (/obj/machinery/biogenerator,/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "Prison Hydroponics"; network = list("SS13","Prison")},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "aaF" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison) -"aaG" = (/obj/machinery/hydroponics/constructable,/obj/item/seeds/ambrosiavulgarisseed,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) +"aaG" = (/obj/machinery/hydroponics/constructable,/obj/item/seeds/ambrosia,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "aaH" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "aaI" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "aaJ" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/obj/item/weapon/cultivator,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) @@ -40,7 +40,7 @@ "aaN" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/shuttle/pod_2) "aaO" = (/turf/simulated/wall/shuttle{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/shuttle/pod_2) "aaP" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/auxstarboard) -"aaQ" = (/obj/machinery/hydroponics/constructable,/obj/item/weapon/cultivator,/obj/item/seeds/carrotseed,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) +"aaQ" = (/obj/machinery/hydroponics/constructable,/obj/item/weapon/cultivator,/obj/item/seeds/carrot,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "aaR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/cultivator,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "aaS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/prison) "aaT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) @@ -1954,7 +1954,7 @@ "aLD" = (/obj/machinery/biogenerator,/obj/machinery/firealarm{pixel_y = 27},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/construction{name = "\improper Garden"}) "aLE" = (/obj/structure/table,/obj/item/weapon/cultivator,/obj/item/weapon/hatchet,/obj/item/weapon/crowbar,/obj/machinery/light{dir = 1},/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/construction{name = "\improper Garden"}) "aLF" = (/obj/machinery/seed_extractor,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/construction{name = "\improper Garden"}) -"aLG" = (/obj/item/seeds/appleseed,/obj/item/seeds/bananaseed,/obj/item/seeds/cocoapodseed,/obj/item/seeds/grapeseed,/obj/item/seeds/orangeseed,/obj/item/seeds/sugarcaneseed,/obj/item/seeds/wheatseed,/obj/item/seeds/watermelonseed,/obj/structure/table,/obj/item/seeds/towermycelium,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/construction{name = "\improper Garden"}) +"aLG" = (/obj/item/seeds/apple,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/construction{name = "\improper Garden"}) "aLH" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grass,/area/hallway/secondary/construction{name = "\improper Garden"}) "aLI" = (/mob/living/simple_animal/chicken{name = "Featherbottom"; real_name = "Featherbottom"},/turf/simulated/floor/grass,/area/hallway/secondary/construction{name = "\improper Garden"}) "aLJ" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/wirecutters,/obj/item/weapon/weldingtool,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/starboard) @@ -5401,7 +5401,7 @@ "bZS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 6},/area/hallway/primary/central) "bZT" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/westright{dir = 4; name = "Hydroponics Desk"; req_access_txt = "0"; req_one_access_txt = "30;35"},/obj/item/weapon/folder/white,/obj/item/weapon/folder/white,/turf/simulated/floor/plasteel{dir = 4; icon_state = "greenfull"; tag = "icon-whitehall (WEST)"},/area/hydroponics) "bZU" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Botanist"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "green"},/area/hydroponics) -"bZV" = (/turf/simulated/floor/plasteel{icon_state = "green"; dir = 6},/area/hydroponics) +"bZV" = (/obj/machinery/plantgenes,/obj/item/weapon/storage/box/disks_plantgene,/turf/simulated/floor/plasteel{icon_state = "green"; dir = 6},/area/hydroponics) "bZW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 8},/area/hydroponics) "bZX" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel,/area/hydroponics) "bZY" = (/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/hydroponics) @@ -5474,7 +5474,7 @@ "cbn" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_CO2 = 0; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/hydroponics) "cbo" = (/turf/simulated/floor/plasteel,/area/hydroponics) "cbp" = (/obj/effect/landmark/start{name = "Botanist"},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/hydroponics) -"cbq" = (/obj/item/seeds/wheatseed,/obj/item/seeds/sugarcaneseed,/obj/item/seeds/potatoseed,/obj/item/seeds/appleseed,/obj/item/weapon/grown/corncob,/obj/item/weapon/reagent_containers/food/snacks/grown/carrot,/obj/item/weapon/reagent_containers/food/snacks/grown/wheat,/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin{pixel_y = 5},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/camera/autoname{dir = 8; network = list("SS13")},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hydroponics) +"cbq" = (/obj/item/weapon/grown/corncob,/obj/item/weapon/reagent_containers/food/snacks/grown/carrot,/obj/item/weapon/reagent_containers/food/snacks/grown/wheat,/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin{pixel_y = 5},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/camera/autoname{dir = 8; network = list("SS13")},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hydroponics) "cbr" = (/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics) "cbs" = (/obj/machinery/light/small{dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/landmark/start{name = "Botanist"},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics) "cbt" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/disposalpipe/junction{tag = "icon-pipe-j2"; icon_state = "pipe-j2"; dir = 2},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboard) @@ -5958,8 +5958,8 @@ "ckD" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/lab) "ckE" = (/obj/structure/noticeboard{desc = "A board for pinning important notices upon."; name = "notice board"; pixel_x = 0; pixel_y = 31},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/lab) "ckF" = (/obj/structure/stool/bed/chair/office/light{dir = 1; pixel_y = 3},/obj/machinery/door_control{dir = 2; id = "rndshuttersup"; name = "Shutters Control Button"; pixel_x = 26; pixel_y = 6},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitepurple"; tag = "icon-whitehall (WEST)"},/area/toxins/lab) -"ckG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{glass = 0; icon = 'icons/obj/doors/doorresearch.dmi'; id_tag = "ResearchFoyer"; name = "Research Division"; opacity = 1; req_access_txt = "0"; req_one_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) -"ckH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{glass = 0; icon = 'icons/obj/doors/doorresearch.dmi'; id_tag = ""; name = "Research Division"; opacity = 1; req_access_txt = "0"; req_one_access_txt = "47"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) +"ckG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{glass = 0; icon = 'icons/obj/doors/Doorresearch.dmi'; id_tag = "ResearchFoyer"; name = "Research Division"; opacity = 1; req_access_txt = "0"; req_one_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) +"ckH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{glass = 0; icon = 'icons/obj/doors/Doorresearch.dmi'; id_tag = ""; name = "Research Division"; opacity = 1; req_access_txt = "0"; req_one_access_txt = "47"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) "ckI" = (/turf/simulated/wall/r_wall,/area/security/checkpoint/science{name = "Security Post - Research Division"}) "ckJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Post - Research Division"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/security/checkpoint/science{name = "Security Post - Research Division"}) "ckK" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;47"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) @@ -6242,10 +6242,10 @@ "cqb" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/toxins/lab) "cqc" = (/obj/structure/stool/bed/chair/office/light{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/toxins/lab) "cqd" = (/obj/structure/table,/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/camera{c_tag = "Research and Development"; dir = 8; network = list("SS13","RD")},/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/stock_parts/scanning_module,/obj/item/weapon/stock_parts/scanning_module,/turf/simulated/floor/plasteel,/area/toxins/lab) -"cqe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{glass = 0; icon = 'icons/obj/doors/doorresearch.dmi'; id_tag = ""; name = "Research Division"; opacity = 1; req_access_txt = "0"; req_one_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) +"cqe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{glass = 0; icon = 'icons/obj/doors/Doorresearch.dmi'; id_tag = ""; name = "Research Division"; opacity = 1; req_access_txt = "0"; req_one_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) "cqf" = (/obj/machinery/door/window/westleft{dir = 2; name = "Research Division Deliveries"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/maintenance/aft{name = "Aft Maintenance"}) "cqg" = (/obj/machinery/door/airlock{name = "Research Emergency Storage"; req_access_txt = "0"; req_one_access_txt = "47"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) -"cqh" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_medical{glass = 0; icon = 'icons/obj/doors/doorresearch.dmi'; id_tag = ""; name = "Research Break Room"; opacity = 1; req_access_txt = "0"; req_one_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) +"cqh" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_medical{glass = 0; icon = 'icons/obj/doors/Doorresearch.dmi'; id_tag = ""; name = "Research Break Room"; opacity = 1; req_access_txt = "0"; req_one_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) "cqi" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "cqj" = (/turf/simulated/wall,/area/toxins/explab) "cqk" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab) @@ -7623,10 +7623,10 @@ "cQE" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{name = "Xenobiology Access"; req_access_txt = "47"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) "cQF" = (/turf/simulated/wall,/area/toxins/xenobiology) "cQG" = (/obj/machinery/biogenerator,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) -"cQH" = (/obj/item/weapon/reagent_containers/food/snacks/grown/banana,/obj/item/weapon/reagent_containers/food/snacks/grown/banana,/obj/item/weapon/reagent_containers/food/snacks/grown/wheat,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange,/obj/item/weapon/reagent_containers/food/snacks/grown/grapes,/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod,/obj/structure/rack{layer = 2.8},/obj/item/seeds/wheatseed,/obj/item/seeds/watermelonseed,/obj/item/seeds/watermelonseed,/obj/item/seeds/grapeseed,/obj/item/seeds/glowshroom,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) -"cQI" = (/obj/item/weapon/storage/bag/plants/portaseeder,/obj/item/weapon/storage/bag/plants/portaseeder,/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/cultivator,/obj/item/weapon/reagent_containers/glass/bucket,/obj/structure/rack{layer = 2.8},/obj/item/seeds/cornseed,/obj/item/seeds/cabbageseed,/obj/item/seeds/ambrosiavulgarisseed,/obj/item/seeds/grassseed,/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) -"cQJ" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/seeds/carrotseed,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) -"cQK" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/seeds/glowshroom,/obj/item/seeds/cornseed,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) +"cQH" = (/obj/item/weapon/reagent_containers/food/snacks/grown/banana,/obj/item/weapon/reagent_containers/food/snacks/grown/banana,/obj/item/weapon/reagent_containers/food/snacks/grown/wheat,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange,/obj/item/weapon/reagent_containers/food/snacks/grown/grapes,/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod,/obj/structure/rack{layer = 2.8},/obj/item/seeds/glowshroom,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) +"cQI" = (/obj/item/weapon/storage/bag/plants/portaseeder,/obj/item/weapon/storage/bag/plants/portaseeder,/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/cultivator,/obj/item/weapon/reagent_containers/glass/bucket,/obj/structure/rack{layer = 2.8},/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) +"cQJ" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) +"cQK" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/seeds/glowshroom,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) "cQL" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) "cQM" = (/obj/machinery/power/solar_control{id = "aftstarboard"; name = "Aft Starboard Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cQN" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboardsolar) @@ -7662,379 +7662,374 @@ "cRr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) "cRs" = (/obj/item/clothing/head/tinfoil,/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/aft{name = "Aft Maintenance"}) "cRt" = (/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/aft{name = "Aft Maintenance"}) -"cRu" = (/obj/item/seeds/watermelonseed,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cRv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cRw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cRx" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"cRy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"cRz" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) -"cRA" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) -"cRB" = (/obj/machinery/door/airlock/centcom{layer = 2.7; name = "Crematorium"; opacity = 1; req_access_txt = "27"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) -"cRC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) -"cRD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) -"cRE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) -"cRF" = (/obj/machinery/light_switch{pixel_x = 28; pixel_y = 0},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/machinery/camera{c_tag = "Chapel Office"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) -"cRG" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) -"cRH" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "Chapel APC"; pixel_x = -25},/turf/simulated/floor/carpet,/area/chapel/main) -"cRI" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/chapel/main) -"cRJ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/carpet,/area/chapel/main) -"cRK" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main) -"cRL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/carpet,/area/chapel/main) -"cRM" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Chapel"; opacity = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cRN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"; tag = "icon-warnwhite (NORTHEAST)"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRQ" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=10-Aft-Central"; location = "9.5-Escape2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRS" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 0},/turf/simulated/wall,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRT" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRU" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Departure Lounge Security Post"; req_access_txt = "63"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRW" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRX" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRY" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "red"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cRZ" = (/obj/structure/table,/obj/machinery/newscaster/security_unit{pixel_x = 29; pixel_y = 1},/obj/machinery/camera{c_tag = "Departure Lounge - Security Post"; dir = 1; network = list("SS13")},/obj/item/weapon/book/manual/wiki/security_space_law{pixel_x = -4; pixel_y = 4},/obj/item/device/taperecorder{pixel_x = 4; pixel_y = 0},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSa" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cSb" = (/obj/item/seeds/moonflowerseed,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cSc" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cSd" = (/obj/item/seeds/berryseed,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cSe" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cSf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboardsolar) -"cSg" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) -"cSh" = (/obj/structure/closet/wardrobe/chaplain_black,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) -"cSi" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) -"cSj" = (/obj/machinery/power/apc{dir = 2; lighting = 3; name = "Chapel Office APC"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) -"cSk" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) -"cSl" = (/obj/machinery/door/morgue{name = "Confession Booth (Chaplain)"; req_access_txt = "22"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) -"cSm" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1480; name = "Confessional Intercom"; pixel_x = 25},/obj/structure/stool/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Chaplain"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) -"cSn" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) -"cSo" = (/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) -"cSp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) -"cSq" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cSr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) -"cSs" = (/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) -"cSt" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) -"cSu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSv" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSw" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSx" = (/obj/structure/grille,/obj/structure/flora/ausbushes/fernybush,/obj/structure/flora/ausbushes/fullgrass,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/sunnybush,/obj/structure/window/reinforced/fulltile{health = 1e+007},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/grass,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSy" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSA" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSB" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/sign/electricshock{pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSC" = (/turf/simulated/wall,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSF" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cSG" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/seeds/glowshroom,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) -"cSH" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/weapon/cultivator,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) -"cSI" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/seeds/ambrosiavulgarisseed,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) -"cSJ" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/seeds/watermelonseed,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) -"cSK" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/seeds/berryseed,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) -"cSL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/chapel/office) -"cSM" = (/obj/machinery/door/airlock/centcom{name = "Chapel Office"; opacity = 1; req_access_txt = "27"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) -"cSN" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) -"cSO" = (/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) -"cSP" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) -"cSQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) -"cSR" = (/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) -"cSS" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) -"cST" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSV" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSX" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/toxins/xenobiology) -"cSY" = (/turf/simulated/wall/r_wall,/area/toxins/xenobiology) -"cSZ" = (/obj/machinery/doorButtons/access_button{idDoor = "xeno_airlock_exterior"; idSelf = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = -24; pixel_y = 0; req_access_txt = "0"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "xeno_airlock_exterior"; locked = 1; name = "Xenobiology External Airlock"; req_access_txt = "55"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cTa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cTb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "chapelparlourshutters"; name = "chapel shutters"},/turf/simulated/floor/plating,/area/chapel/main) -"cTc" = (/obj/structure/closet/coffin,/obj/machinery/light/small{dir = 1},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/chapel/main) -"cTd" = (/obj/structure/closet/coffin,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/chapel/main) -"cTe" = (/obj/structure/noticeboard{desc = "A memorial wall for pinning up momentos"; name = "memorial board"; pixel_y = 32},/obj/item/weapon/storage/fancy/candle_box,/obj/item/weapon/storage/fancy/candle_box{pixel_x = -2; pixel_y = 2},/obj/effect/decal/cleanable/cobweb,/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/chapel/main) -"cTf" = (/obj/structure/sign/atmosplaque{desc = "A plaque commemorating the fallen, may they rest in peace, forever asleep amongst the stars. Someone has drawn a picture of a crying badger at the bottom."; icon_state = "kiddieplaque"; name = "Remembrance Plaque"; pixel_x = 0; pixel_y = 32},/obj/item/weapon/reagent_containers/food/snacks/grown/poppy{pixel_y = 2},/obj/item/weapon/reagent_containers/food/snacks/grown/poppy{pixel_y = 2},/obj/item/weapon/reagent_containers/food/snacks/grown/poppy{pixel_y = 2},/obj/item/weapon/reagent_containers/food/snacks/grown/poppy{pixel_y = 2},/obj/item/weapon/reagent_containers/food/snacks/grown/poppy{pixel_y = 2},/obj/machinery/light/small{dir = 1},/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/chapel/main) -"cTg" = (/obj/structure/noticeboard{desc = "A memorial wall for pinning up momentos"; name = "memorial board"; pixel_y = 32},/obj/item/weapon/storage/book/bible,/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/chapel/main) -"cTh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/chapel/main) -"cTi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cTj" = (/obj/machinery/light/small{dir = 1},/obj/machinery/light_switch{pixel_y = 28},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/effect/decal/cleanable/cobweb2,/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cTk" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) -"cTl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) -"cTm" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) -"cTn" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) -"cTo" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) -"cTp" = (/obj/machinery/camera{c_tag = "Departure Lounge - Port Aft"; dir = 4; network = list("SS13")},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/structure/flora/kirbyplants{tag = "icon-plant-04"; icon_state = "plant-04"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTs" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/device/beacon,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTu" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTv" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=9.5-Escape2"; location = "9-Escape"},/obj/machinery/bot/secbot{auto_patrol = 1; health = 35; maxhealth = 35; name = "Inspector Johnson"},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTw" = (/obj/machinery/camera{c_tag = "Departure Lounge - Starboard Aft"; dir = 8; network = list("SS13")},/obj/machinery/light{dir = 4},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/flora/kirbyplants{tag = "icon-plant-16"; icon_state = "plant-16"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTx" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology) -"cTy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) -"cTz" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/toxins/xenobiology) -"cTA" = (/obj/structure/closet/coffin,/turf/simulated/floor/plating,/area/chapel/main) -"cTB" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cTC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cTD" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 21},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cTE" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cTF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cTG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Mortuary"; opacity = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cTH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) -"cTI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) -"cTJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) -"cTK" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) -"cTL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) -"cTM" = (/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) -"cTN" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"; tag = "icon-warnwhite (NORTHEAST)"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTO" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTQ" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cTR" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cTS" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cTT" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/camera{c_tag = "Xenobiology - Airlock"; dir = 8; network = list("SS13","RD")},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cTU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/xenobiology) -"cTV" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "waste_in"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/space) -"cTW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cTX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cTY" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cTZ" = (/obj/machinery/door/window/eastleft{dir = 4; name = "Coffin Storage"; req_access_txt = "22"},/turf/simulated/floor/plating,/area/chapel/main) -"cUa" = (/obj/structure/stool/bed/chair{pixel_y = -2},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) -"cUb" = (/obj/structure/stool/bed/chair{pixel_y = -2},/obj/effect/landmark/start{name = "Chaplain"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) -"cUc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUe" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUf" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Mortuary"; opacity = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) -"cUh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) -"cUi" = (/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUj" = (/obj/item/weapon/storage/book/bible,/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) -"cUl" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/machinery/camera{c_tag = "Chapel - Starboard"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) -"cUm" = (/obj/structure/sign/vacuum{pixel_x = -32},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cUn" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cUo" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cUp" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cUq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cUr" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cUs" = (/obj/structure/sign/vacuum{pixel_x = 32},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cUt" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/doorButtons/access_button{idDoor = "xeno_airlock_interior"; idSelf = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = 8; pixel_y = -28; req_access_txt = "0"},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology) -"cUu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cUv" = (/obj/structure/closet/l3closet/scientist,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology) -"cUw" = (/obj/structure/closet/coffin,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/chapel/main) -"cUx" = (/obj/machinery/light/small{dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Chapel - Funeral Parlour"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUy" = (/obj/machinery/camera{c_tag = "Chapel - Port"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) -"cUz" = (/obj/item/device/flashlight/lantern{pixel_y = 7},/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUA" = (/obj/effect/landmark/start{name = "Chaplain"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUB" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) -"cUC" = (/obj/machinery/door/airlock/external{name = "Departure Lounge Airlock"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cUD" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 2; name = "xenobiology air connector port"},/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cUE" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 7},/obj/item/weapon/storage/box/syringes{pixel_y = 5},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cUF" = (/obj/structure/table/glass,/obj/item/weapon/folder/white{pixel_y = 4},/obj/item/weapon/pen,/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cUG" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = -1; pixel_y = 8},/obj/machinery/power/apc{dir = 1; name = "Xenobiology APC"; pixel_x = 0; pixel_y = 27},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cUH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/toxins/xenobiology) -"cUI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "xeno_airlock_interior"; locked = 1; name = "Xenobiology Internal Airlock"; req_access_txt = "55"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cUJ" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/monkeycubes{pixel_x = 3; pixel_y = 5},/obj/item/weapon/storage/box/monkeycubes{pixel_x = -3; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cUK" = (/obj/structure/table/glass,/obj/item/weapon/folder/white{pixel_y = 4},/obj/item/weapon/pen,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cUL" = (/obj/item/stack/sheet/mineral/plasma{layer = 2.9; pixel_y = 4},/obj/structure/table/glass,/obj/item/stack/sheet/mineral/plasma{layer = 2.9; pixel_y = 4},/obj/item/stack/sheet/mineral/plasma{layer = 2.9; pixel_y = 4},/obj/item/stack/sheet/mineral/plasma{layer = 2.9; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cUM" = (/obj/machinery/smartfridge/extract,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cUN" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUO" = (/mob/living/simple_animal/hostile/retaliate/bat{name = "Orlocke"; real_name = "Orlocke"; turns_per_move = 6},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUP" = (/obj/machinery/door/window{dir = 4; name = "Mass Driver"; req_access_txt = "22"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) -"cUQ" = (/obj/machinery/mass_driver{dir = 2; id = "chapelgun"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/obj/item/device/gps,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/chapel/main) -"cUR" = (/obj/structure/bookcase{name = "Holy Bookcase"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) -"cUS" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) -"cUT" = (/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) -"cUU" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) -"cUV" = (/obj/machinery/light/small,/obj/machinery/door_control{id = "chapelspaceshutters"; name = "Space Window Shutter Control"; pixel_x = -6; pixel_y = -25; req_access_txt = "0"},/obj/machinery/light_switch{pixel_x = 6; pixel_y = -25},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) -"cUW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cUX" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cUY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cUZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVa" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Scientist"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVb" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVc" = (/obj/machinery/chem_heater,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVd" = (/obj/machinery/doorButtons/airlock_controller{idExterior = "xeno_airlock_exterior"; idInterior = "xeno_airlock_interior"; idSelf = "xeno_airlock_control"; name = "Xenobiology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVe" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVf" = (/obj/machinery/camera{c_tag = "Xenobiology Lab - Fore"; dir = 2; network = list("SS13","RD")},/obj/machinery/firealarm{dir = 2; pixel_y = 26},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVg" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVh" = (/obj/structure/stool/bed/chair/office/light{dir = 1; pixel_y = 3},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVi" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitepurple"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"cVj" = (/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cVk" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/main) -"cVl" = (/obj/machinery/door/morgue{name = "Chapel Garden"; req_access_txt = "0"},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/main) -"cVm" = (/obj/machinery/light/small,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/machinery/door_control{id = "chapelparlourshutters"; name = "Window Shutter Control"; pixel_x = 0; pixel_y = -25; req_access_txt = "0"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) -"cVn" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) -"cVo" = (/obj/structure/stool/bed/chair,/obj/effect/landmark/start{name = "Chaplain"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) -"cVp" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/machinery/driver_button{id = "chapelgun"; name = "Chapel Mass Driver"; pixel_x = -4; pixel_y = -26},/obj/structure/table/wood,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) -"cVq" = (/turf/simulated/floor/plating{icon_state = "warnplate"},/area/chapel/main) -"cVr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "chapelspaceshutters"; name = "chapel shutters"},/turf/simulated/floor/plating,/area/chapel/main) -"cVs" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; tag = "icon-sink (WEST)"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVt" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cVu" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cVv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cVw" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cVx" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cVy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cVz" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cVA" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVB" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "aftstarboard"; name = "Aft-Starboard Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) -"cVC" = (/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cVD" = (/obj/machinery/door/poddoor{id = "chapelgun"; name = "Chapel Launcher Door"},/turf/simulated/floor/plating,/area/chapel/main) -"cVE" = (/obj/docking_port/stationary{dheight = 0; dir = 2; dwidth = 2; height = 22; id = "emergency_home"; name = "emergency evac bay"; width = 14},/turf/space,/area/space) -"cVF" = (/obj/item/weapon/extinguisher{pixel_x = 4; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/toxins/xenobiology) -"cVG" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVH" = (/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = -32},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVI" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurplecorner"},/area/toxins/xenobiology) -"cVJ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warnwhitecorner"; icon_state = "warnwhitecorner"; dir = 2},/area/toxins/xenobiology) -"cVK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cVL" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cVM" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cVN" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) -"cVO" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurplecorner"},/area/toxins/xenobiology) -"cVP" = (/obj/machinery/monkey_recycler,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVQ" = (/obj/machinery/processor{desc = "A machine used to process slimes and retrieve their extract."; name = "Slime Processor"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVR" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitepurple"},/area/toxins/xenobiology) -"cVS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cVT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cVU" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cVV" = (/obj/item/stack/cable_coil,/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cVW" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cVX" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cVY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cVZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/xenobiology) -"cWa" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/xenobiology) -"cWb" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/xenobiology) -"cWc" = (/obj/structure/cable,/obj/machinery/power/solar{id = "aftstarboard"; name = "Aft-Starboard Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) -"cWd" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWe" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cWg" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/xenobiology) -"cWh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) -"cWi" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) -"cWj" = (/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) -"cWk" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio8"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) -"cWl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cWm" = (/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWn" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWo" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #1"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWp" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #1"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) -"cWq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cWr" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cWs" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cWt" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #2"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) -"cWu" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #2"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWv" = (/mob/living/carbon/slime,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWw" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWx" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cWy" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio3"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) -"cWz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) -"cWA" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cWB" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-warnwhitecorner"; icon_state = "warnwhitecorner"; dir = 2},/area/toxins/xenobiology) -"cWC" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology) -"cWD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cWE" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWF" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall,/area/toxins/xenobiology) -"cWG" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cWH" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cWI" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/camera{c_tag = "Xenobiology Lab - Central"; dir = 8; network = list("SS13","RD")},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cWJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cWK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) -"cWL" = (/turf/simulated/floor/plasteel{tag = "icon-warnwhitecorner (WEST)"; icon_state = "warnwhitecorner"; dir = 8},/area/toxins/xenobiology) -"cWM" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio7"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) -"cWN" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cWO" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #3"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWP" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #3"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) -"cWQ" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "lightsout"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cWR" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #4"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) -"cWS" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #4"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cWT" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cWU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cWV" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio2"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) -"cWW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) -"cWX" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cWY" = (/turf/simulated/floor/plasteel{tag = "icon-warnwhitecorner"; icon_state = "warnwhitecorner"; dir = 2},/area/toxins/xenobiology) -"cWZ" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology) -"cXa" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXb" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/space,/area/solar/starboard) -"cXc" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/space,/area/solar/starboard) -"cXd" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cXe" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cXf" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/space,/area/solar/starboard) -"cXg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXh" = (/obj/machinery/light{dir = 1},/obj/machinery/door_control{id = "xenobio1"; name = "Containment Blast Doors"; pixel_x = -24; pixel_y = 24; req_access_txt = "55"},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) -"cXi" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) -"cXj" = (/obj/structure/window/reinforced,/obj/machinery/door_control{id = "xenobio6"; name = "Containment Blast Doors"; pixel_x = 24; pixel_y = 24; req_access_txt = "55"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) -"cXk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXl" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cXm" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_se"; name = "southeast of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) -"cXn" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #5"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cXo" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #5"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) -"cXp" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Scientist"},/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cXq" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #6"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) -"cXr" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #6"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cXs" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cXt" = (/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cXu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) -"cXw" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cXx" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cXy" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cXz" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cXA" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cXB" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/obj/machinery/portable_atmospherics/canister,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology) -"cXC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXD" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cXE" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/starboard) -"cXF" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/camera{c_tag = "Xenobiology Lab - Aft-Port"; dir = 4; network = list("SS13","RD")},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) -"cXG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cXH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cXI" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cXJ" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) -"cXK" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/camera{c_tag = "Xenobiology Lab - Aft-Starboard"; dir = 8; network = list("SS13","RD")},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) -"cXL" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXM" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXN" = (/obj/machinery/door/airlock/command{icon = 'icons/obj/doors/Doorele.dmi'; name = "Test Chamber Maintenance"; req_access_txt = "47"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXO" = (/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/xenobiology) -"cXP" = (/obj/machinery/computer/security/telescreen{dir = 1; name = "Test Chamber Monitor"; network = list("Xeno"); pixel_x = 0; pixel_y = 2},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/xenobiology) -"cXQ" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/structure/window/reinforced{dir = 4},/obj/machinery/ignition_switch{id = "Xenobio"; pixel_x = -6; pixel_y = -2},/obj/machinery/door_control{id = "Xenolab"; name = "Test Chamber Blast Doors"; pixel_x = 4; pixel_y = -2; req_access_txt = "55"},/obj/structure/table/reinforced,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/xenobiology) -"cXR" = (/obj/machinery/door/window/southleft{dir = 1; name = "Maximum Security Test Chamber"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/xenobiology) -"cXS" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) -"cXT" = (/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/structure/table,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/xenobiology) -"cXU" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/xenobiology) -"cXV" = (/obj/machinery/door/airlock/command{icon = 'icons/obj/doors/Doorele.dmi'; name = "Test Chamber Maintenance"; req_access_txt = "47"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXW" = (/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXX" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXY" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cXZ" = (/obj/machinery/shieldwallgen{req_access = list(55)},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cYa" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "test chamber blast door"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cYb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "test chamber blast door"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cYc" = (/obj/machinery/door/window/southleft{dir = 2; name = "Maximum Security Test Chamber"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "test chamber blast door"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYd" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "test chamber blast door"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cYe" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "test chamber blast door"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cYf" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_sw"; name = "southwest of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) -"cYg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/toxins/xenobiology) -"cYh" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYi" = (/obj/structure/disposaloutlet{dir = 2},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYj" = (/obj/item/organ/internal/body_egg/alien_embryo,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYk" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 10},/obj/item/device/electropack,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYl" = (/obj/machinery/sparker{id = "Xenobio"; pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYm" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 1; unacidable = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYn" = (/mob/living/simple_animal/pug,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYo" = (/obj/item/device/beacon,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYp" = (/obj/structure/table,/obj/machinery/cell_charger{pixel_y = 5},/obj/item/stack/cable_coil,/obj/item/device/multitool,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYq" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYr" = (/obj/machinery/computer/rdconsole/experiment,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYs" = (/obj/machinery/light{dir = 2},/obj/machinery/camera{c_tag = "Xenobiology Lab - Test Chamber"; dir = 1; network = list("SS13","RD","Xeno")},/obj/machinery/r_n_d/experimentor,/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYt" = (/obj/item/device/radio/intercom{pixel_y = -25},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYu" = (/obj/structure/table,/obj/item/device/assembly/igniter{pixel_x = -5; pixel_y = 3},/obj/item/device/assembly/igniter{pixel_x = 5; pixel_y = -4},/obj/item/device/assembly/igniter{pixel_x = 2; pixel_y = 6},/obj/item/device/assembly/igniter{pixel_x = 2; pixel_y = -1},/turf/simulated/floor/engine,/area/toxins/xenobiology) -"cYv" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cYw" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cYx" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/stool/bed/chair,/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cYy" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/toxins/xenobiology) -"cYz" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/toxins/xenobiology) -"cYA" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless,/area/space) -"cYB" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless,/area/space) -"cYC" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_s"; name = "south of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) +"cRu" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"cRv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"cRw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"cRx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"cRy" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) +"cRz" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) +"cRA" = (/obj/machinery/door/airlock/centcom{layer = 2.7; name = "Crematorium"; opacity = 1; req_access_txt = "27"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) +"cRB" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) +"cRC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) +"cRD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) +"cRE" = (/obj/machinery/light_switch{pixel_x = 28; pixel_y = 0},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/machinery/camera{c_tag = "Chapel Office"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) +"cRF" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) +"cRG" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "Chapel APC"; pixel_x = -25},/turf/simulated/floor/carpet,/area/chapel/main) +"cRH" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/chapel/main) +"cRI" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/carpet,/area/chapel/main) +"cRJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main) +"cRK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/carpet,/area/chapel/main) +"cRL" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Chapel"; opacity = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cRM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"; tag = "icon-warnwhite (NORTHEAST)"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRP" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=10-Aft-Central"; location = "9.5-Escape2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRR" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 0},/turf/simulated/wall,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRT" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Departure Lounge Security Post"; req_access_txt = "63"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRV" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRW" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRX" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "red"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRY" = (/obj/structure/table,/obj/machinery/newscaster/security_unit{pixel_x = 29; pixel_y = 1},/obj/machinery/camera{c_tag = "Departure Lounge - Security Post"; dir = 1; network = list("SS13")},/obj/item/weapon/book/manual/wiki/security_space_law{pixel_x = -4; pixel_y = 4},/obj/item/device/taperecorder{pixel_x = 4; pixel_y = 0},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cRZ" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cSa" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"cSb" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"cSc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboardsolar) +"cSd" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) +"cSe" = (/obj/structure/closet/wardrobe/chaplain_black,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) +"cSf" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) +"cSg" = (/obj/machinery/power/apc{dir = 2; lighting = 3; name = "Chapel Office APC"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) +"cSh" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) +"cSi" = (/obj/machinery/door/morgue{name = "Confession Booth (Chaplain)"; req_access_txt = "22"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) +"cSj" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1480; name = "Confessional Intercom"; pixel_x = 25},/obj/structure/stool/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Chaplain"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) +"cSk" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) +"cSl" = (/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) +"cSm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) +"cSn" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cSo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) +"cSp" = (/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) +"cSq" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) +"cSr" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSs" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSt" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSu" = (/obj/structure/grille,/obj/structure/flora/ausbushes/fernybush,/obj/structure/flora/ausbushes/fullgrass,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/sunnybush,/obj/structure/window/reinforced/fulltile{health = 1e+007},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/grass,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSv" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSx" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSy" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/sign/electricshock{pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSz" = (/turf/simulated/wall,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSB" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cSD" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/seeds/glowshroom,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) +"cSE" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/weapon/cultivator,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) +"cSF" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) +"cSG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/chapel/office) +"cSH" = (/obj/machinery/door/airlock/centcom{name = "Chapel Office"; opacity = 1; req_access_txt = "27"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) +"cSI" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) +"cSJ" = (/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) +"cSK" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) +"cSL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) +"cSM" = (/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) +"cSN" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) +"cSO" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSQ" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSS" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/toxins/xenobiology) +"cST" = (/turf/simulated/wall/r_wall,/area/toxins/xenobiology) +"cSU" = (/obj/machinery/doorButtons/access_button{idDoor = "xeno_airlock_exterior"; idSelf = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = -24; pixel_y = 0; req_access_txt = "0"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "xeno_airlock_exterior"; locked = 1; name = "Xenobiology External Airlock"; req_access_txt = "55"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cSV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cSW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "chapelparlourshutters"; name = "chapel shutters"},/turf/simulated/floor/plating,/area/chapel/main) +"cSX" = (/obj/structure/closet/coffin,/obj/machinery/light/small{dir = 1},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/chapel/main) +"cSY" = (/obj/structure/closet/coffin,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/chapel/main) +"cSZ" = (/obj/structure/noticeboard{desc = "A memorial wall for pinning up momentos"; name = "memorial board"; pixel_y = 32},/obj/item/weapon/storage/fancy/candle_box,/obj/item/weapon/storage/fancy/candle_box{pixel_x = -2; pixel_y = 2},/obj/effect/decal/cleanable/cobweb,/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/chapel/main) +"cTa" = (/obj/structure/sign/atmosplaque{desc = "A plaque commemorating the fallen, may they rest in peace, forever asleep amongst the stars. Someone has drawn a picture of a crying badger at the bottom."; icon_state = "kiddieplaque"; name = "Remembrance Plaque"; pixel_x = 0; pixel_y = 32},/obj/item/weapon/reagent_containers/food/snacks/grown/poppy{pixel_y = 2},/obj/item/weapon/reagent_containers/food/snacks/grown/poppy{pixel_y = 2},/obj/item/weapon/reagent_containers/food/snacks/grown/poppy{pixel_y = 2},/obj/item/weapon/reagent_containers/food/snacks/grown/poppy{pixel_y = 2},/obj/item/weapon/reagent_containers/food/snacks/grown/poppy{pixel_y = 2},/obj/machinery/light/small{dir = 1},/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/chapel/main) +"cTb" = (/obj/structure/noticeboard{desc = "A memorial wall for pinning up momentos"; name = "memorial board"; pixel_y = 32},/obj/item/weapon/storage/book/bible,/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/chapel/main) +"cTc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/chapel/main) +"cTd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cTe" = (/obj/machinery/light/small{dir = 1},/obj/machinery/light_switch{pixel_y = 28},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/effect/decal/cleanable/cobweb2,/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cTf" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) +"cTg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) +"cTh" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) +"cTi" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) +"cTj" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) +"cTk" = (/obj/machinery/camera{c_tag = "Departure Lounge - Port Aft"; dir = 4; network = list("SS13")},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/structure/flora/kirbyplants{tag = "icon-plant-04"; icon_state = "plant-04"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/device/beacon,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=9.5-Escape2"; location = "9-Escape"},/obj/machinery/bot/secbot{auto_patrol = 1; health = 35; maxhealth = 35; name = "Inspector Johnson"},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTr" = (/obj/machinery/camera{c_tag = "Departure Lounge - Starboard Aft"; dir = 8; network = list("SS13")},/obj/machinery/light{dir = 4},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/flora/kirbyplants{tag = "icon-plant-16"; icon_state = "plant-16"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTs" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology) +"cTt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) +"cTu" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/toxins/xenobiology) +"cTv" = (/obj/structure/closet/coffin,/turf/simulated/floor/plating,/area/chapel/main) +"cTw" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cTx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cTy" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 21},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cTz" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cTA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cTB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Mortuary"; opacity = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cTC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) +"cTD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) +"cTE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) +"cTF" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) +"cTG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) +"cTH" = (/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) +"cTI" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"; tag = "icon-warnwhite (NORTHEAST)"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTJ" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTL" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cTM" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cTN" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cTO" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/camera{c_tag = "Xenobiology - Airlock"; dir = 8; network = list("SS13","RD")},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cTP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/xenobiology) +"cTQ" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "waste_in"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/space) +"cTR" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cTS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cTT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cTU" = (/obj/machinery/door/window/eastleft{dir = 4; name = "Coffin Storage"; req_access_txt = "22"},/turf/simulated/floor/plating,/area/chapel/main) +"cTV" = (/obj/structure/stool/bed/chair{pixel_y = -2},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) +"cTW" = (/obj/structure/stool/bed/chair{pixel_y = -2},/obj/effect/landmark/start{name = "Chaplain"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) +"cTX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cTY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cTZ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cUa" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Mortuary"; opacity = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cUb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) +"cUc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) +"cUd" = (/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cUe" = (/obj/item/weapon/storage/book/bible,/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cUf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) +"cUg" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/machinery/camera{c_tag = "Chapel - Starboard"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) +"cUh" = (/obj/structure/sign/vacuum{pixel_x = -32},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cUi" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cUj" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cUk" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cUl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cUm" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cUn" = (/obj/structure/sign/vacuum{pixel_x = 32},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cUo" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/doorButtons/access_button{idDoor = "xeno_airlock_interior"; idSelf = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = 8; pixel_y = -28; req_access_txt = "0"},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology) +"cUp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cUq" = (/obj/structure/closet/l3closet/scientist,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology) +"cUr" = (/obj/structure/closet/coffin,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/chapel/main) +"cUs" = (/obj/machinery/light/small{dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Chapel - Funeral Parlour"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cUt" = (/obj/machinery/camera{c_tag = "Chapel - Port"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/chapel/main) +"cUu" = (/obj/item/device/flashlight/lantern{pixel_y = 7},/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cUv" = (/obj/effect/landmark/start{name = "Chaplain"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cUw" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) +"cUx" = (/obj/machinery/door/airlock/external{name = "Departure Lounge Airlock"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cUy" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 2; name = "xenobiology air connector port"},/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cUz" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 7},/obj/item/weapon/storage/box/syringes{pixel_y = 5},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cUA" = (/obj/structure/table/glass,/obj/item/weapon/folder/white{pixel_y = 4},/obj/item/weapon/pen,/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cUB" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = -1; pixel_y = 8},/obj/machinery/power/apc{dir = 1; name = "Xenobiology APC"; pixel_x = 0; pixel_y = 27},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cUC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/toxins/xenobiology) +"cUD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "xeno_airlock_interior"; locked = 1; name = "Xenobiology Internal Airlock"; req_access_txt = "55"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cUE" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/monkeycubes{pixel_x = 3; pixel_y = 5},/obj/item/weapon/storage/box/monkeycubes{pixel_x = -3; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cUF" = (/obj/structure/table/glass,/obj/item/weapon/folder/white{pixel_y = 4},/obj/item/weapon/pen,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cUG" = (/obj/item/stack/sheet/mineral/plasma{layer = 2.9; pixel_y = 4},/obj/structure/table/glass,/obj/item/stack/sheet/mineral/plasma{layer = 2.9; pixel_y = 4},/obj/item/stack/sheet/mineral/plasma{layer = 2.9; pixel_y = 4},/obj/item/stack/sheet/mineral/plasma{layer = 2.9; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cUH" = (/obj/machinery/smartfridge/extract,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplefull"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cUI" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cUJ" = (/mob/living/simple_animal/hostile/retaliate/bat{name = "Orlocke"; real_name = "Orlocke"; turns_per_move = 6},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cUK" = (/obj/machinery/door/window{dir = 4; name = "Mass Driver"; req_access_txt = "22"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"cUL" = (/obj/machinery/mass_driver{dir = 2; id = "chapelgun"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/obj/item/device/gps,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/chapel/main) +"cUM" = (/obj/structure/bookcase{name = "Holy Bookcase"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main) +"cUN" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) +"cUO" = (/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) +"cUP" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) +"cUQ" = (/obj/machinery/light/small,/obj/machinery/door_control{id = "chapelspaceshutters"; name = "Space Window Shutter Control"; pixel_x = -6; pixel_y = -25; req_access_txt = "0"},/obj/machinery/light_switch{pixel_x = 6; pixel_y = -25},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) +"cUR" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cUS" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cUT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cUU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cUV" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Scientist"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cUW" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cUX" = (/obj/machinery/chem_heater,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cUY" = (/obj/machinery/doorButtons/airlock_controller{idExterior = "xeno_airlock_exterior"; idInterior = "xeno_airlock_interior"; idSelf = "xeno_airlock_control"; name = "Xenobiology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cUZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVa" = (/obj/machinery/camera{c_tag = "Xenobiology Lab - Fore"; dir = 2; network = list("SS13","RD")},/obj/machinery/firealarm{dir = 2; pixel_y = 26},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVb" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVc" = (/obj/structure/stool/bed/chair/office/light{dir = 1; pixel_y = 3},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVd" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitepurple"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) +"cVe" = (/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cVf" = (/obj/machinery/hydroponics/soil{pixel_y = 8},/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/main) +"cVg" = (/obj/machinery/door/morgue{name = "Chapel Garden"; req_access_txt = "0"},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/main) +"cVh" = (/obj/machinery/light/small,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/machinery/door_control{id = "chapelparlourshutters"; name = "Window Shutter Control"; pixel_x = 0; pixel_y = -25; req_access_txt = "0"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) +"cVi" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) +"cVj" = (/obj/structure/stool/bed/chair,/obj/effect/landmark/start{name = "Chaplain"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) +"cVk" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/obj/machinery/driver_button{id = "chapelgun"; name = "Chapel Mass Driver"; pixel_x = -4; pixel_y = -26},/obj/structure/table/wood,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) +"cVl" = (/turf/simulated/floor/plating{icon_state = "warnplate"},/area/chapel/main) +"cVm" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "chapelspaceshutters"; name = "chapel shutters"},/turf/simulated/floor/plating,/area/chapel/main) +"cVn" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; tag = "icon-sink (WEST)"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVo" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cVp" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cVq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cVr" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cVs" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cVt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cVu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cVv" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVw" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "aftstarboard"; name = "Aft-Starboard Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) +"cVx" = (/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cVy" = (/obj/machinery/door/poddoor{id = "chapelgun"; name = "Chapel Launcher Door"},/turf/simulated/floor/plating,/area/chapel/main) +"cVz" = (/obj/docking_port/stationary{dheight = 0; dir = 2; dwidth = 2; height = 22; id = "emergency_home"; name = "emergency evac bay"; width = 14},/turf/space,/area/space) +"cVA" = (/obj/item/weapon/extinguisher{pixel_x = 4; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/toxins/xenobiology) +"cVB" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVC" = (/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = -32},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVD" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurplecorner"},/area/toxins/xenobiology) +"cVE" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warnwhitecorner"; icon_state = "warnwhitecorner"; dir = 2},/area/toxins/xenobiology) +"cVF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cVG" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cVH" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cVI" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) +"cVJ" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurplecorner"},/area/toxins/xenobiology) +"cVK" = (/obj/machinery/monkey_recycler,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVL" = (/obj/machinery/processor{desc = "A machine used to process slimes and retrieve their extract."; name = "Slime Processor"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVM" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitepurple"},/area/toxins/xenobiology) +"cVN" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cVO" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cVP" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cVQ" = (/obj/item/stack/cable_coil,/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cVR" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cVS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cVT" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cVU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/xenobiology) +"cVV" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/xenobiology) +"cVW" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/xenobiology) +"cVX" = (/obj/structure/cable,/obj/machinery/power/solar{id = "aftstarboard"; name = "Aft-Starboard Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) +"cVY" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cVZ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cWa" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cWb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/xenobiology) +"cWc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) +"cWd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) +"cWe" = (/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) +"cWf" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio8"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) +"cWg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cWh" = (/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cWi" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cWj" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #1"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cWk" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #1"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) +"cWl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cWm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cWn" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cWo" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #2"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) +"cWp" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #2"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cWq" = (/mob/living/carbon/slime,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cWr" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cWs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cWt" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio3"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) +"cWu" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) +"cWv" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cWw" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-warnwhitecorner"; icon_state = "warnwhitecorner"; dir = 2},/area/toxins/xenobiology) +"cWx" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology) +"cWy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cWz" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cWA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall,/area/toxins/xenobiology) +"cWB" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cWC" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cWD" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/camera{c_tag = "Xenobiology Lab - Central"; dir = 8; network = list("SS13","RD")},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cWE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cWF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) +"cWG" = (/turf/simulated/floor/plasteel{tag = "icon-warnwhitecorner (WEST)"; icon_state = "warnwhitecorner"; dir = 8},/area/toxins/xenobiology) +"cWH" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio7"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) +"cWI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cWJ" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #3"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cWK" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #3"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) +"cWL" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "lightsout"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cWM" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #4"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) +"cWN" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #4"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cWO" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) +"cWP" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cWQ" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio2"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) +"cWR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) +"cWS" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cWT" = (/turf/simulated/floor/plasteel{tag = "icon-warnwhitecorner"; icon_state = "warnwhitecorner"; dir = 2},/area/toxins/xenobiology) +"cWU" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology) +"cWV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cWW" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/space,/area/solar/starboard) +"cWX" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/space,/area/solar/starboard) +"cWY" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cWZ" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cXa" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/space,/area/solar/starboard) +"cXb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXc" = (/obj/machinery/light{dir = 1},/obj/machinery/door_control{id = "xenobio1"; name = "Containment Blast Doors"; pixel_x = -24; pixel_y = 24; req_access_txt = "55"},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) +"cXd" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/xenobiology) +"cXe" = (/obj/structure/window/reinforced,/obj/machinery/door_control{id = "xenobio6"; name = "Containment Blast Doors"; pixel_x = 24; pixel_y = 24; req_access_txt = "55"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) +"cXf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXg" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cXh" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_se"; name = "southeast of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) +"cXi" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #5"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cXj" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #5"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) +"cXk" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Scientist"},/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cXl" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #6"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) +"cXm" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #6"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cXn" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cXo" = (/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cXp" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXq" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) +"cXr" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cXs" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cXt" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cXu" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cXv" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cXw" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/obj/machinery/portable_atmospherics/canister,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology) +"cXx" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXy" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cXz" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/starboard) +"cXA" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/camera{c_tag = "Xenobiology Lab - Aft-Port"; dir = 4; network = list("SS13","RD")},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) +"cXB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cXC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cXD" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cXE" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/xenobiology) +"cXF" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/camera{c_tag = "Xenobiology Lab - Aft-Starboard"; dir = 8; network = list("SS13","RD")},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) +"cXG" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXH" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXI" = (/obj/machinery/door/airlock/command{icon = 'icons/obj/doors/Doorele.dmi'; name = "Test Chamber Maintenance"; req_access_txt = "47"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXJ" = (/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/xenobiology) +"cXK" = (/obj/machinery/computer/security/telescreen{dir = 1; name = "Test Chamber Monitor"; network = list("Xeno"); pixel_x = 0; pixel_y = 2},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/xenobiology) +"cXL" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/structure/window/reinforced{dir = 4},/obj/machinery/ignition_switch{id = "Xenobio"; pixel_x = -6; pixel_y = -2},/obj/machinery/door_control{id = "Xenolab"; name = "Test Chamber Blast Doors"; pixel_x = 4; pixel_y = -2; req_access_txt = "55"},/obj/structure/table/reinforced,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/xenobiology) +"cXM" = (/obj/machinery/door/window/southleft{dir = 1; name = "Maximum Security Test Chamber"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/xenobiology) +"cXN" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology) +"cXO" = (/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/structure/table,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/xenobiology) +"cXP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/xenobiology) +"cXQ" = (/obj/machinery/door/airlock/command{icon = 'icons/obj/doors/Doorele.dmi'; name = "Test Chamber Maintenance"; req_access_txt = "47"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXR" = (/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXS" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXT" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXU" = (/obj/machinery/shieldwallgen{req_access = list(55)},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "test chamber blast door"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "test chamber blast door"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXX" = (/obj/machinery/door/window/southleft{dir = 2; name = "Maximum Security Test Chamber"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "test chamber blast door"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cXY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "test chamber blast door"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cXZ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "test chamber blast door"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cYa" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_sw"; name = "southwest of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) +"cYb" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/toxins/xenobiology) +"cYc" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYd" = (/obj/structure/disposaloutlet{dir = 2},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYe" = (/obj/item/organ/internal/body_egg/alien_embryo,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYf" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 10},/obj/item/device/electropack,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYg" = (/obj/machinery/sparker{id = "Xenobio"; pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYh" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 1; unacidable = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYi" = (/mob/living/simple_animal/pug,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYj" = (/obj/item/device/beacon,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYk" = (/obj/structure/table,/obj/machinery/cell_charger{pixel_y = 5},/obj/item/stack/cable_coil,/obj/item/device/multitool,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYl" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYm" = (/obj/machinery/computer/rdconsole/experiment,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYn" = (/obj/machinery/light{dir = 2},/obj/machinery/camera{c_tag = "Xenobiology Lab - Test Chamber"; dir = 1; network = list("SS13","RD","Xeno")},/obj/machinery/r_n_d/experimentor,/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYo" = (/obj/item/device/radio/intercom{pixel_y = -25},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYp" = (/obj/structure/table,/obj/item/device/assembly/igniter{pixel_x = -5; pixel_y = 3},/obj/item/device/assembly/igniter{pixel_x = 5; pixel_y = -4},/obj/item/device/assembly/igniter{pixel_x = 2; pixel_y = 6},/obj/item/device/assembly/igniter{pixel_x = 2; pixel_y = -1},/turf/simulated/floor/engine,/area/toxins/xenobiology) +"cYq" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cYr" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cYs" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/stool/bed/chair,/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cYt" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/toxins/xenobiology) +"cYu" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/toxins/xenobiology) +"cYv" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless,/area/space) +"cYw" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless,/area/space) +"cYx" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_s"; name = "south of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8218,41 +8213,41 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoqaaacFzcOscOtcIgcOtcOscOucOvcOwcOxcOycOzcFAaaaaaacOAbWtcOBbWtbWtbWtcOCbWtbWtbWtbWtcODcOEcOFcOGcOHcOFcOIcOJcOKcOLcOMcONcOOcOPcOQcORcORcOScOTcOUcOVcOWcOXcxmcxmcOYcxmcOZcLmcPacPbcPccPdcPacPecxmcxmcPfcLLcxmcxmcxmcPgbWtckUcPhcPicOpcPjcPkcPlcOpaahaahaahaahaahaahaahaahaahaahaahaahaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcFzcFzcFAcFzcFAcFzcPmcPncPocPpcPqcPrcFzaahaahcOAcPscPtcOAcPucPvcPwcPxcPycPzbWtbWtbWtbWtcPAbWtbWtbWtbWtbWtcPBcOMcPCcOMcPDcPEcPFcOMcPGcPHcPIbWtbWtbWtbWtbWtbWtczpcPJcdcbWtcPKcPLcPMbWtcgrcdccPNbWtbWtbWtbWtbWtbWtbWtbWtbWtcrLcOpcPOcPPcPQcOpaaaaahaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaahaahaahcPRcPScPTcPUcPVcPWcPXcPYcPZcFzaaaaaacOAcQacQbcOAcQccQdcQecQfcOAcOAcQgcQhcQicQjcQkcQlcQmcQncQocQpcQqcOMcPCcOMcQrcQscQtcOMcQucQvcQwcQxcQycQzcQAcQBbWtcQCbWtbWtbWtcQDcQEcQFbWtbWtbWtcogbWtcQGcQHcQIbWtcQJcQKcQLbWtcqtcOpcQMcQNcQOcOpaaaaahaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoqaaaaahaaaaaacQPaaacQQcFzcFzcFzcFzcFzcFzcFzaaaaaacOAcQRcQScOAcQTcQUcQVcQWcOAcQXcQYcQZcRacRbcRccRdcRecRecRfcRgcRhcRicRjcOMcQrcRkcQtcOMcPGcPHcQrcRlcRmcOMcRncRobWtcRpbWtaahaaacRqcRrcRqaaaaaaaahaaabWtcRsbZkbZkcRtcgmcRucgmcRvcRwcOpcRxcRycRxcOpaaaaahaaaaahaahaaaaaaaaharaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaahaahaahaaaaaaaaaaahaahaahaaaaaaaaaaahaaaaaaaaacOAcRzcRAcRBcRCcRDcREcRFcOAcRGcOAcRHcRIcRJcRKcRLcRacRacRMcRNcROcRPcRQcRRcQrcRScQtcOMcPGcRTcRUcRVcRWcRXcRYcRZbWtcQCbWtaahaahcRqcSacRqaahaahaahaaabWtcSbbZkbZkcSccSdbZgcSebWtcogcOpcRxcSfcRxaahaaaaahaaaaaaaahaahaahaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaahaaaaaaaaaaahaaaaaaaaacOAcQRcSgcOAcShcSicSjcSkcSlcSmcOAcSncSocSpcSqcSrcSscStcQocQpcQtcOMcSucSvcSwcSxcSycRPcSzcSAcSBcSCcSCcSDcSEcSCbWtacmaahaaaaaacRqcSFcRqaaaaaaaahaahbWtcSGcSHcSIbWtcSJcSKcSIbWtaaaaahcRxcRycRxaahaaaaahaaaaaaaahaahaaaaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaahaafaagaafaahaafaafaafaahcQgcQgcQgcOAcOAcOAcOAcSLcSMcOAcOAcOAcSNcSOcSPcSqcSQcSRcSScQgcQgcQtcOMcOMcOMcQrcQscQtcOMcSTcSUcSVcSWaahaahaaaaaaaahacmaahaaacSXcSYcSZcSYcSXaaaaahaaabWtbWtbWtbWtbWtbWtbWtbWtbWtaaaaahaaacTaaaaaahaahaahaahaahaahaaaaaaaahaoqaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaacTbcTccTdcQgcTecTfcTgcThcTicTjcQgcTkcTlcTmcTncSqcSrcSscStcTocQgcTpcOMcTqcTrcTscTtcTucTrcTvcOMcTwcSCaaaaahaahaahaahaahaahaahcSYcTxcTycTzcSYaahaahaaaaaaaahaaaaaaaaaaaaaaaaahaaaaaaaahaaacTaaaaaahaahaaaaaaaaaaahaaaaaaaaaaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaacTbcTAcTdcTBcTCcTCcTCcTDcTEcTFcTGcTHcTIcTHcTJcTCcTKcTJcTLcTMcQocTNcTOcTPcTOcTOcTOcTOcTOcTPcTOcTQcSWaaaaahaaaaaaaahaaaaaaaaacSYcTRcTScTTcTUcTVaahaahaahaahaahaahaahaahaahaahaahaahaahaaacTWcTXcTXcTXcTYaaaaaaaaaaaaaaaaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaacTbcTAcTZcTicUacUbcUacUccUdcUecUfcUgcUhcUicUicUjcUicUicUkcUlcQgcUmcUncUocUncUncUpcUncUncUqcUrcUscSCaahaahaaacSYcSYcSYcSYcSYcSYcUtcUucUvcSYcSYcSYcSYcSYcSYaahaaaaaaaaaaaaaahaaaaaaaahaaaaaaaaaaaaaaacTaaaaaaaaahaaaaaaaaaaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaahaaacTbcUwcTdcTicUacUacUacUxcQgcQgcQgcQgcUycUzcSqcUAcSqcUzcUBcQgcQgcSWcUCcSWcUCcSWcSWcSWcUCcUCcSWcSWcSCaaaaahaahcSYcUDcUEcUFcUGcSYcUHcUIcSYcSYcUJcUKcULcUMcSYaahaahaahaaaaaaaahaaharaaoqaraaahaahaahaahcTaaahaahaahaahaahaafaoqaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcQgcQgcQgcUNcSqcSqcUOcSqcUPcUQcQgcURcUScUTcUTcUUcUTcUTcUVcQgaaacSWcUWcSWcUncSWaaacSWcUncUXcSWaaaaaaaaaaahaaacRqcUYcUZcVacVbcVccVdcVecVfcVgcVgcVhcVgcVicRqaahaaaaahaahaahaahaahaaaaahaaaaahaaaaaaaaacVjaaaaaaaahaaaaaaaaaaaaaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacTbcVkcVlcVmcVncVncVocUUcVpcVqcQgcQgcQgcVrcVrcVrcVrcVrcQgcQgaahcSWcUCcSWcUCcSWaahcSWcUCcUCcSWaahaahaahaahaaacRqcVscVtcVucVvcVvcVwcVxcVycVycVycVycVzcVAcRqaahaaaaaaaaaaaaaaaaafaaacVBcVBcVBcVBcVBaahcVCaahcVBcVBcVBcVBcVBaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcQgcTbcQgcQgcTbcTbcTbcTbcQgcVDcQgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVEaaaaaaaaaaaaaahaaacSYcVFcVGcVHcVIcVJcVKcVLcVMcVNcVOcVPcVQcVRcSYaahaaaaaaaaaaaaaaaaoqaahcVScVTcVTcVTcVTcVUcVVcVWcVXcVXcVXcVXcVYaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaaaaaaaahaaaaaaaaaaaaaaaaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcQFcQFcQFcQFcQDcVZcWacWbcQDcQFcQFcQFcQFcSYaahaahaahaahaahaahaoqaahcWccWccWccWccWcaaacVCaaacWccWccWccWccWcaahaoqaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcWdcWecWecWfcWgcWhcWicWjcWkcWlcWmcWmcWmcSYaaaaaaaaaaaaaaaaaaaafaaaaahaaaaahaahaahaaacVCaaaaahaaaaahaaaaahaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcSYcWncWmcWmcWocWpcWqcWrcWscWtcWucWmcWvcWwcSYaahaaaaaaaaaaaaaaaaoqaaacVBcVBcVBcVBcVBaahcVCaahcVBcVBcVBcVBcVBaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcWmcWmcWmcWxcWycWzcWAcWBcWCcWDcWecWecWEcSYaahaaaaaaaaaaahaahaoqaahcVScVTcVTcVTcVTcVUcVCcVWcVXcVXcVXcVXcVYaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcQFcQFcQFcQFcWFcWGcWHcWIcWFcQFcQFcQFcQFcSYaahaaaaaaaaaaaaaahaoqaahcWccWccWccWccWcaaacVCaahcWccWccWccWccWcaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcWdcWecWecWJcWgcWKcWHcWLcWMcWNcWmcWmcWmcSYaahaahaaaaaaaaaaaharaaaaaahaaaaahaaaaahaaacVCaaaaahaaaaahaahaahaaharaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcWncWvcWmcWOcWPcWqcWQcWscWRcWScWmcWmcWwcSYaahaaaaaaaaaaaaaaaaoqaaacVBcVBcVBcVBcVBaahcWTaahcVBcVBcVBcVBcVBaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcSYcWmcWmcWmcWUcWVcWWcWXcWYcWZcXacWecWecWEcSYaahaaaaaaaaaaaaaahaoqaahcVScVTcVTcVTcVTcXbcVCcXccVXcVXcVXcVXcVYaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcSYcQFcQFcQFcQFcWFcXdcWHcXecWFcQFcQFcQFcQFcSYcSYaahaahaahaahaahaahaahcWccWccWccWccWcaaacXfaaacWccWccWccWccWcaaaaoqaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcWdcWecWecXgcWgcXhcXicWHcWLcWjcXjcXkcXlcWmcWmcSYaaaaaaaaaaaaaaaaafaaaaaaaahaahaahaaaaaacTaaahaaaaaaaahaahaaaaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcWncWmcWmcXncXocWscWscXpcWscWscXqcXrcXscWmcWwcSYaaaaaaaaaaaaaaaaoqaafaoqaoqaoqaaaaaaaaacTaaaaaaaaaaaoqaoqaoqaraaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcXtcWmcWmcXucXvcXwcXxcXycXzcXAcXBcXCcXDcWecWEcSYaahaahaaaaahaahaaaaaaaaaaaaaahaaaaoqaahcXEaahaoqaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcSYcSYcSYcSYcXFcXGcXHcXIcVMcXJcXKcSYcSYcSYcSYcSYaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoqaaaaahaaaaoqaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaacSYcXLcXMcXNcXOcXPcXQcXRcXScXTcXUcXVcXWcXXcSYaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoqaoqaoqaoqaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaacSYcSYcXYcSYcXZcYacYbcYccYdcYecXZcSYcXWcSYcSYaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahcSYcXYcSYcSYcYgcYhcWmcYicYgcSYcSYcXWcSYaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcXYcSYcWmcWmcYhcYjcWmcWmcYkcSYcXWcSYaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSYcXYcSYcYlcWmcYmcYncYocWmcYpcSYcXWcSYaahaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcSYcXYcSYcYqcWmcYrcYscWmcYtcYucSYcXWcSYaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcXYcSYcSYcSYcSYcSYcSYcSYcSYcSYcXWcSYaahaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSYcYvcYwcYwcYwcYxcYycXWcXWcXWcXWcXWcSYaahaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSYcSYcSYcSYcSYcRqcYzcRqcSYcSYcSYcSYcSYaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaaaaahaahaaaaaacYAaaaaahaahaahaahaahaahaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaahaaaaaaaaaaaaaaacYBaaaaaaaahaaaaahaaaaahaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoqaaaaahaaaaaacQPaaacQQcFzcFzcFzcFzcFzcFzcFzaaaaaacOAcQRcQScOAcQTcQUcQVcQWcOAcQXcQYcQZcRacRbcRccRdcRecRecRfcRgcRhcRicRjcOMcQrcRkcQtcOMcPGcPHcQrcRlcRmcOMcRncRobWtcRpbWtaahaaacRqcRrcRqaaaaaaaahaaabWtcRsbZkbZkcRtcgmcgmcgmcRucRvcOpcRwcRxcRwcOpaaaaahaaaaahaahaaaaaaaaharaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaahaahaahaaaaaaaaaaahaahaahaaaaaaaaaaahaaaaaaaaacOAcRycRzcRAcRBcRCcRDcREcOAcRFcOAcRGcRHcRIcRJcRKcRacRacRLcRMcRNcROcRPcRQcQrcRRcQtcOMcPGcRScRTcRUcRVcRWcRXcRYbWtcQCbWtaahaahcRqcRZcRqaahaahaahaaabWtbZkbZkbZkcSabZkbZgcSbbWtcogcOpcRwcSccRwaahaaaaahaaaaaaaahaahaahaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaahaaaaaaaaaaahaaaaaaaaacOAcQRcSdcOAcSecSfcSgcShcSicSjcOAcSkcSlcSmcSncSocSpcSqcQocQpcQtcOMcSrcSscStcSucSvcROcSwcSxcSycSzcSzcSAcSBcSzbWtacmaahaaaaaacRqcSCcRqaaaaaaaahaahbWtcSDcSEcSFbWtcSFcSFcSFbWtaaaaahcRwcRxcRwaahaaaaahaaaaaaaahaahaaaaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaahaafaagaafaahaafaafaafaahcQgcQgcQgcOAcOAcOAcOAcSGcSHcOAcOAcOAcSIcSJcSKcSncSLcSMcSNcQgcQgcQtcOMcOMcOMcQrcQscQtcOMcSOcSPcSQcSRaahaahaaaaaaaahacmaahaaacSScSTcSUcSTcSSaaaaahaaabWtbWtbWtbWtbWtbWtbWtbWtbWtaaaaahaaacSVaaaaahaahaahaahaahaahaaaaaaaahaoqaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaacSWcSXcSYcQgcSZcTacTbcTccTdcTecQgcTfcTgcThcTicSncSocSpcSqcTjcQgcTkcOMcTlcTmcTncTocTpcTmcTqcOMcTrcSzaaaaahaahaahaahaahaahaahcSTcTscTtcTucSTaahaahaaaaaaaahaaaaaaaaaaaaaaaaahaaaaaaaahaaacSVaaaaahaahaaaaaaaaaaahaaaaaaaaaaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaacSWcTvcSYcTwcTxcTxcTxcTycTzcTAcTBcTCcTDcTCcTEcTxcTFcTEcTGcTHcQocTIcTJcTKcTJcTJcTJcTJcTJcTKcTJcTLcSRaaaaahaaaaaaaahaaaaaaaaacSTcTMcTNcTOcTPcTQaahaahaahaahaahaahaahaahaahaahaahaahaahaaacTRcTScTScTScTTaaaaaaaaaaaaaaaaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaacSWcTvcTUcTdcTVcTWcTVcTXcTYcTZcUacUbcUccUdcUdcUecUdcUdcUfcUgcQgcUhcUicUjcUicUicUkcUicUicUlcUmcUncSzaahaahaaacSTcSTcSTcSTcSTcSTcUocUpcUqcSTcSTcSTcSTcSTcSTaahaaaaaaaaaaaaaahaaaaaaaahaaaaaaaaaaaaaaacSVaaaaaaaahaaaaaaaaaaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaahaaacSWcUrcSYcTdcTVcTVcTVcUscQgcQgcQgcQgcUtcUucSncUvcSncUucUwcQgcQgcSRcUxcSRcUxcSRcSRcSRcUxcUxcSRcSRcSzaaaaahaahcSTcUycUzcUAcUBcSTcUCcUDcSTcSTcUEcUFcUGcUHcSTaahaahaahaaaaaaaahaaharaaoqaraaahaahaahaahcSVaahaahaahaahaahaafaoqaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcQgcQgcQgcUIcSncSncUJcSncUKcULcQgcUMcUNcUOcUOcUPcUOcUOcUQcQgaaacSRcURcSRcUicSRaaacSRcUicUScSRaaaaaaaaaaahaaacRqcUTcUUcUVcUWcUXcUYcUZcVacVbcVbcVccVbcVdcRqaahaaaaahaahaahaahaahaaaaahaaaaahaaaaaaaaacVeaaaaaaaahaaaaaaaaaaaaaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSWcVfcVgcVhcVicVicVjcUPcVkcVlcQgcQgcQgcVmcVmcVmcVmcVmcQgcQgaahcSRcUxcSRcUxcSRaahcSRcUxcUxcSRaahaahaahaahaaacRqcVncVocVpcVqcVqcVrcVscVtcVtcVtcVtcVucVvcRqaahaaaaaaaaaaaaaaaaafaaacVwcVwcVwcVwcVwaahcVxaahcVwcVwcVwcVwcVwaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcQgcSWcQgcQgcSWcSWcSWcSWcQgcVycQgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVzaaaaaaaaaaaaaahaaacSTcVAcVBcVCcVDcVEcVFcVGcVHcVIcVJcVKcVLcVMcSTaahaaaaaaaaaaaaaaaaoqaahcVNcVOcVOcVOcVOcVPcVQcVRcVScVScVScVScVTaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaaaaaaaahaaaaaaaaaaaaaaaaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcQFcQFcQFcQFcQDcVUcVVcVWcQDcQFcQFcQFcQFcSTaahaahaahaahaahaahaoqaahcVXcVXcVXcVXcVXaaacVxaaacVXcVXcVXcVXcVXaahaoqaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcVYcVZcVZcWacWbcWccWdcWecWfcWgcWhcWhcWhcSTaaaaaaaaaaaaaaaaaaaafaaaaahaaaaahaahaahaaacVxaaaaahaaaaahaaaaahaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcSTcWicWhcWhcWjcWkcWlcWmcWncWocWpcWhcWqcWrcSTaahaaaaaaaaaaaaaaaaoqaaacVwcVwcVwcVwcVwaahcVxaahcVwcVwcVwcVwcVwaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcWhcWhcWhcWscWtcWucWvcWwcWxcWycVZcVZcWzcSTaahaaaaaaaaaaahaahaoqaahcVNcVOcVOcVOcVOcVPcVxcVRcVScVScVScVScVTaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcQFcQFcQFcQFcWAcWBcWCcWDcWAcQFcQFcQFcQFcSTaahaaaaaaaaaaaaaahaoqaahcVXcVXcVXcVXcVXaaacVxaahcVXcVXcVXcVXcVXaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcVYcVZcVZcWEcWbcWFcWCcWGcWHcWIcWhcWhcWhcSTaahaahaaaaaaaaaaaharaaaaaahaaaaahaaaaahaaacVxaaaaahaaaaahaahaahaaharaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcWicWqcWhcWJcWKcWlcWLcWncWMcWNcWhcWhcWrcSTaahaaaaaaaaaaaaaaaaoqaaacVwcVwcVwcVwcVwaahcWOaahcVwcVwcVwcVwcVwaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcSTcWhcWhcWhcWPcWQcWRcWScWTcWUcWVcVZcVZcWzcSTaahaaaaaaaaaaaaaahaoqaahcVNcVOcVOcVOcVOcWWcVxcWXcVScVScVScVScVTaahaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcSTcQFcQFcQFcQFcWAcWYcWCcWZcWAcQFcQFcQFcQFcSTcSTaahaahaahaahaahaahaahcVXcVXcVXcVXcVXaaacXaaaacVXcVXcVXcVXcVXaaaaoqaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcVYcVZcVZcXbcWbcXccXdcWCcWGcWecXecXfcXgcWhcWhcSTaaaaaaaaaaaaaaaaafaaaaaaaahaahaahaaaaaacSVaahaaaaaaaahaahaaaaaaaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcWicWhcWhcXicXjcWncWncXkcWncWncXlcXmcXncWhcWrcSTaaaaaaaaaaaaaaaaoqaafaoqaoqaoqaaaaaaaaacSVaaaaaaaaaaoqaoqaoqaraaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcXocWhcWhcXpcXqcXrcXscXtcXucXvcXwcXxcXycVZcWzcSTaahaahaaaaahaahaaaaaaaaaaaaaahaaaaoqaahcXzaahaoqaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcSTcSTcSTcSTcXAcXBcXCcXDcVHcXEcXFcSTcSTcSTcSTcSTaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoqaaaaahaaaaoqaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaacSTcXGcXHcXIcXJcXKcXLcXMcXNcXOcXPcXQcXRcXScSTaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoqaoqaoqaoqaoqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaacSTcSTcXTcSTcXUcXVcXWcXXcXYcXZcXUcSTcXRcSTcSTaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahcSTcXTcSTcSTcYbcYccWhcYdcYbcSTcSTcXRcSTaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcXTcSTcWhcWhcYccYecWhcWhcYfcSTcXRcSTaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSTcXTcSTcYgcWhcYhcYicYjcWhcYkcSTcXRcSTaahaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcSTcXTcSTcYlcWhcYmcYncWhcYocYpcSTcXRcSTaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcXTcSTcSTcSTcSTcSTcSTcSTcSTcSTcXRcSTaahaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSTcYqcYrcYrcYrcYscYtcXRcXRcXRcXRcXRcSTaahaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacSTcSTcSTcSTcSTcRqcYucRqcSTcSTcSTcSTcSTaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaaaaahaahaaaaaacYvaaaaahaahaahaahaahaahaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaahaaaaaaaaaaaaaaacYwaaaaaaaahaaaaahaaaaahaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaaaaaaaaaaahaaaaaaaaaaaaaaaaahaaaaaaaaaaagaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaagaagaahaaaaaaaaaaaaaaaaahaagaafaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaagaafaagaaaaaaaahaagaagaagaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8276,7 +8271,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8293,3 +8288,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/MetaStation/z5.dmm b/_maps/map_files/MetaStation/z5.dmm index 32f7717b25825..d1717b04ef550 100755 --- a/_maps/map_files/MetaStation/z5.dmm +++ b/_maps/map_files/MetaStation/z5.dmm @@ -87,7 +87,7 @@ "bI" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/mine/abandoned) "bJ" = (/obj/structure/sink{pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) "bK" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) -"bL" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/obj/item/seeds/cherryseed,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) +"bL" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/obj/item/seeds/cherry,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) "bM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "bN" = (/obj/structure/alien/resin/membrane,/obj/structure/alien/weeds,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "bO" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/obj/structure/alien/weeds,/turf/simulated/floor/plasteel/airless,/area/mine/abandoned) @@ -972,3 +972,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/MetaStation/z8.dmm b/_maps/map_files/MetaStation/z8.dmm index 321e5a36556e0..3dd649fadbfed 100755 --- a/_maps/map_files/MetaStation/z8.dmm +++ b/_maps/map_files/MetaStation/z8.dmm @@ -194,16 +194,16 @@ "dL" = (/obj/effect/landmark/corpse/clown,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/grass,/area/planet/clown/village) "dM" = (/obj/item/weapon/pickaxe/drill/diamonddrill,/obj/effect/landmark/corpse/clown,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/grass,/area/planet/clown/village) "dN" = (/obj/structure/ore_box,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) -"dO" = (/obj/item/seeds/bananaseed,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) +"dO" = (/obj/item/seeds/banana,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) "dP" = (/obj/item/weapon/pickaxe,/turf/simulated/floor/plating,/area/planet/clown/village) "dQ" = (/turf/simulated/floor/plating,/area/planet/clown/village) "dR" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/planet/clown/village) "dS" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/space/hardsuit/mining,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/grass,/area/planet/clown/village) "dT" = (/obj/item/weapon/paper/crumpled/bloody{info = "I was told getting the bananium would be easy...fuck...they lied... If there was any bananium to be mined left, it's gone now. Send word to my family in the Alpha Minorious Sector if you find this."},/turf/simulated/floor/grass,/area/planet/clown/village) "dU" = (/obj/structure/barricade/wooden,/turf/simulated/floor/grass,/area/planet/clown/village) -"dV" = (/obj/item/seeds/bananaseed,/mob/living/simple_animal/hostile/asteroid/goldgrub,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) -"dW" = (/obj/item/seeds/bananaseed,/obj/effect/landmark/corpse/clown,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) -"dX" = (/obj/item/seeds/bananaseed,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) +"dV" = (/obj/item/seeds/banana,/mob/living/simple_animal/hostile/asteroid/goldgrub,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) +"dW" = (/obj/item/seeds/banana,/obj/effect/landmark/corpse/clown,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) +"dX" = (/obj/item/seeds/banana,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) "dY" = (/obj/effect/landmark/corpse/clown,/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) "dZ" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) "ea" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/planet/clown/village) @@ -264,9 +264,9 @@ "fd" = (/obj/effect/decal/remains/human,/obj/effect/rune,/obj/item/clothing/mask/gas/mime,/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/core,/turf/simulated/floor/engine/cult,/area/planet/clown/town) "fe" = (/obj/structure/flora/ausbushes/lavendergrass,/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/planet/clown/village) "ff" = (/obj/structure/table/wood,/obj/item/clothing/mask/gas/clown_hat,/obj/item/clothing/gloves/color/rainbow/clown,/obj/item/clothing/shoes/clown_shoes{desc = "These shoes appear to be enchanted!"; name = "uhangi's shoes"; slowdown = -1},/obj/item/clothing/under/rank/clown,/obj/item/device/pda/clown,/obj/item/weapon/storage/backpack/clown,/turf/simulated/floor/grass,/area/planet/clown/village) -"fg" = (/obj/structure/table/wood,/obj/item/seeds/cashseed,/obj/item/seeds/cashseed,/obj/item/weapon/cartridge/clown,/turf/simulated/floor/grass,/area/planet/clown/village) -"fh" = (/obj/structure/table/wood,/obj/item/seeds/cashseed,/obj/item/seeds/cashseed,/obj/item/weapon/bikehorn,/turf/simulated/floor/grass,/area/planet/clown/village) -"fi" = (/obj/structure/table/wood,/obj/item/seeds/cashseed,/obj/item/seeds/cashseed,/turf/simulated/floor/grass,/area/planet/clown/village) +"fg" = (/obj/structure/table/wood,/obj/item/seeds/cash,/obj/item/weapon/cartridge/clown,/turf/simulated/floor/grass,/area/planet/clown/village) +"fh" = (/obj/structure/table/wood,/obj/item/seeds/cash,/obj/item/weapon/bikehorn,/turf/simulated/floor/grass,/area/planet/clown/village) +"fi" = (/obj/structure/table/wood,/obj/item/seeds/cash,/turf/simulated/floor/grass,/area/planet/clown/village) "fj" = (/obj/structure/sign/vacuum,/turf/indestructible{icon_state = "bananium0"; name = "bananium wall"},/area/planet/clown/village) "fk" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plating/dust/airless,/area/planet/clown/village) "fl" = (/obj/structure/mineral_door/wood,/turf/simulated/floor/wood,/area/planet/clown/town) @@ -444,3 +444,4 @@ dBdFdFdFdFdFdFdFdFdFdFdFdBdBdBdBdBdBdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdB dBdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdFdBawawawaFaFaFawaFaFaFaFaFfFawaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFawaFaFaFaFawawawawawdCdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdIdIdIdIdIdIdIdIdIdIdIdIdGdGdGdGgjdIdHdC dBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBdBawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawawdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdC "} + diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 7d0f0f2354175..24d87bff21cbc 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -160,4 +160,10 @@ #define MAT_BANANIUM "$bananium" //subtypesof(), typesof() without the parent path -#define subtypesof(typepath) ( typesof(typepath) - typepath ) \ No newline at end of file +#define subtypesof(typepath) ( typesof(typepath) - typepath )// Plant types + +// Plant types +#define PLANT_NORMAL 0 +#define PLANT_WEED 1 +#define PLANT_MUSHROOM 2 +#define PLANT_ALIEN 3 diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 95914ac6b3050..79cc5601bec23 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -942,33 +942,33 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/organic/hydroponics/seeds name = "Seeds Crate" - contains = list(/obj/item/seeds/chiliseed, - /obj/item/seeds/berryseed, - /obj/item/seeds/cornseed, - /obj/item/seeds/eggplantseed, - /obj/item/seeds/tomatoseed, - /obj/item/seeds/soyaseed, - /obj/item/seeds/wheatseed, - /obj/item/seeds/carrotseed, - /obj/item/seeds/sunflowerseed, - /obj/item/seeds/chantermycelium, - /obj/item/seeds/potatoseed, - /obj/item/seeds/sugarcaneseed) + contains = list(/obj/item/seeds/chili, + /obj/item/seeds/berry, + /obj/item/seeds/corn, + /obj/item/seeds/eggplant, + /obj/item/seeds/tomato, + /obj/item/seeds/soya, + /obj/item/seeds/wheat, + /obj/item/seeds/carrot, + /obj/item/seeds/sunflower, + /obj/item/seeds/chanter, + /obj/item/seeds/potato, + /obj/item/seeds/sugarcane) cost = 10 containername = "seeds crate" /datum/supply_packs/organic/hydroponics/exoticseeds name = "Exotic Seeds Crate" - contains = list(/obj/item/seeds/nettleseed, + contains = list(/obj/item/seeds/nettle, /obj/item/seeds/replicapod, /obj/item/seeds/replicapod, /obj/item/seeds/replicapod, - /obj/item/seeds/plumpmycelium, - /obj/item/seeds/libertymycelium, - /obj/item/seeds/amanitamycelium, - /obj/item/seeds/reishimycelium, - /obj/item/seeds/bananaseed, - /obj/item/seeds/eggyseed) + /obj/item/seeds/plump, + /obj/item/seeds/liberty, + /obj/item/seeds/amanita, + /obj/item/seeds/reishi, + /obj/item/seeds/banana, + /obj/item/seeds/eggplant/eggy) cost = 15 containername = "exotic seeds crate" diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index f5332dc989685..c40223cbce7d4 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -124,10 +124,10 @@ proc/make_mining_asteroid_secret() if("plantlab") theme = "plantlab" - treasureitems = list(/obj/item/weapon/gun/energy/floragun=1,/obj/item/seeds/novaflowerseed=2,/obj/item/seeds/bluespacetomatoseed=2,/obj/item/seeds/bluetomatoseed=2, - /obj/item/seeds/coffee_robusta_seed=2, /obj/item/seeds/cashseed=2) - fluffitems = list(/obj/structure/flora/kirbyplants=1,/obj/structure/table/reinforced=2,/obj/machinery/hydroponics=1, - /obj/effect/glowshroom/single=2,/obj/item/weapon/reagent_containers/syringe/antitoxin=2, + treasureitems = list(/obj/item/weapon/gun/energy/floragun=1,/obj/item/seeds/sunflower/novaflower=2,/obj/item/seeds/tomato/blue/bluespace=2,/obj/item/seeds/tomato/blue=2, + /obj/item/seeds/coffee/robusta=2, /obj/item/seeds/cash=2) + fluffitems = list(/obj/structure/flora/kirbyplants=1,/obj/structure/table/reinforced=2,/obj/machinery/hydroponics/constructable=1, + /obj/effect/glowshroom/single=2, /obj/item/weapon/reagent_containers/glass/bottle/diethylamine=3,/obj/item/weapon/reagent_containers/glass/bottle/ammonia=3) /*if("poly") diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index a4dc776fb651a..f3f5c6b6a29b8 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -235,13 +235,16 @@ This is here to make the tiles around the station mininuke change when it's arme //==========DAT FUKKEN DISK=============== +/obj/item/weapon/disk + icon = 'icons/obj/module.dmi' + w_class = 1 + item_state = "card-id" + icon_state = "datadisk0" + /obj/item/weapon/disk/nuclear name = "nuclear authentication disk" desc = "Better keep this safe." - icon = 'icons/obj/items.dmi' icon_state = "nucleardisk" - item_state = "card-id" - w_class = 1.0 /obj/item/weapon/disk/nuclear/New() ..() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 5de568d9d6755..26dc555d99b46 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -53,12 +53,25 @@ /obj/item/weapon/disk/data name = "cloning data disk" icon = 'icons/obj/cloning.dmi' - icon_state = "datadisk0" //Gosh I hope syndies don't mistake them for the nuke disk. //I hope they do - item_state = "card-id" - w_class = 1.0 + icon_state = "datadisk0" //Gosh I hope syndies don't mistake them for the nuke disk. var/list/fields = list() var/read_only = 0 //Well,it's still a floppy disk +//Disk stuff. +/obj/item/weapon/disk/data/New() + ..() + icon_state = "datadisk[rand(0,6)]" + overlays += "datadisk_gene" + + +/obj/item/weapon/disk/data/attack_self(mob/user) + read_only = !read_only + user << "You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"]." + +/obj/item/weapon/disk/data/examine(mob/user) + ..() + user << "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"]." + //Find a dead mob with a brain and client. /proc/find_dead_player(var/find_key) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 700736bb799e4..608d4b8004825 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -793,3 +793,14 @@ to destroy them and players will be able to make replacements. req_components = list( /obj/item/weapon/stock_parts/console_screen = 1, /obj/item/weapon/stock_parts/matter_bin = 3) + +/obj/item/weapon/circuitboard/plantgenes + name = "circuit board (Plant DNA Manipulator)" + build_path = /obj/machinery/plantgenes + board_type = "machine" + origin_tech = "programming=2;biotech=3" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 2, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/scanning_module = 1,) \ No newline at end of file diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 6070f542d2b0d..d4bdeaa76c379 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -841,16 +841,16 @@ product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!" product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!" icon_state = "seeds" - products = list(/obj/item/seeds/ambrosiavulgarisseed = 3,/obj/item/seeds/appleseed = 3,/obj/item/seeds/bananaseed = 3,/obj/item/seeds/berryseed = 3, - /obj/item/seeds/cabbageseed = 3,/obj/item/seeds/carrotseed = 3,/obj/item/seeds/cherryseed = 3,/obj/item/seeds/chantermycelium = 3, - /obj/item/seeds/chiliseed = 3,/obj/item/seeds/cocoapodseed = 3,/obj/item/seeds/coffee_arabica_seed = 3,/obj/item/seeds/cornseed = 3, - /obj/item/seeds/eggplantseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/grassseed = 3,/obj/item/seeds/lemonseed = 3, - /obj/item/seeds/limeseed = 3,/obj/item/seeds/orangeseed = 3,/obj/item/seeds/potatoseed = 3,/obj/item/seeds/poppyseed = 3, - /obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/replicapod = 3,/obj/item/seeds/soyaseed = 3,/obj/item/seeds/sunflowerseed = 3, - /obj/item/seeds/tea_aspera_seed = 3,/obj/item/seeds/tobacco_seed = 3,/obj/item/seeds/tomatoseed = 3, - /obj/item/seeds/towermycelium = 3,/obj/item/seeds/watermelonseed = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/whitebeetseed = 3) - contraband = list(/obj/item/seeds/amanitamycelium = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/libertymycelium = 2,/obj/item/seeds/nettleseed = 2, - /obj/item/seeds/plumpmycelium = 2,/obj/item/seeds/reishimycelium = 2) + products = list(/obj/item/seeds/ambrosia = 3,/obj/item/seeds/apple = 3,/obj/item/seeds/banana = 3,/obj/item/seeds/berry = 3, + /obj/item/seeds/cabbage = 3,/obj/item/seeds/carrot = 3,/obj/item/seeds/cherry = 3,/obj/item/seeds/chanter = 3, + /obj/item/seeds/chili = 3,/obj/item/seeds/cocoapod = 3,/obj/item/seeds/coffee = 3,/obj/item/seeds/corn = 3, + /obj/item/seeds/eggplant = 3,/obj/item/seeds/grape = 3,/obj/item/seeds/grass = 3,/obj/item/seeds/lemon = 3, + /obj/item/seeds/lime = 3,/obj/item/seeds/orange = 3,/obj/item/seeds/potato = 3,/obj/item/seeds/poppy = 3, + /obj/item/seeds/pumpkin = 3,/obj/item/seeds/replicapod = 3,/obj/item/seeds/wheat/rice = 3,/obj/item/seeds/soya = 3,/obj/item/seeds/sunflower = 3, + /obj/item/seeds/tea = 3,/obj/item/seeds/tobacco = 3,/obj/item/seeds/tomato = 3, + /obj/item/seeds/tower = 3,/obj/item/seeds/watermelon = 3,/obj/item/seeds/wheat = 3,/obj/item/seeds/whitebeet = 3) + contraband = list(/obj/item/seeds/amanita = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/liberty = 2,/obj/item/seeds/nettle = 2, + /obj/item/seeds/plump = 2,/obj/item/seeds/reishi = 2) premium = list(/obj/item/weapon/reagent_containers/spray/waterflower = 1) diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index d6dedcf5d5c2a..de69ce47cfd68 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -134,6 +134,13 @@ icon = 'icons/effects/tomatodecal.dmi' random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") +/obj/effect/decal/cleanable/plant_smudge + name = "plant smudge" + density = 0 + layer = 2 + icon = 'icons/effects/tomatodecal.dmi' + random_icon_states = list("smashed_plant") + /obj/effect/decal/cleanable/egg_smudge name = "smashed egg" desc = "Seems like this one won't hatch." diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm new file mode 100644 index 0000000000000..e8c77ceb317c8 --- /dev/null +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -0,0 +1,132 @@ +/*Cabin areas*/ +/area/awaymission/snowforest + name = "Snow Forest" + icon_state = "away" + requires_power = 0 + luminosity = 1 + lighting_use_dynamic = DYNAMIC_LIGHTING_ENABLED + +/area/awaymission/cabin + name = "Cabin" + icon_state = "away2" + requires_power = 1 + luminosity = 0 + lighting_use_dynamic = DYNAMIC_LIGHTING_ENABLED + +/area/awaymission/snowforest/lumbermill + name = "Lumbermill" + icon_state = "away3" + + + + + +/*Cabin code*/ +/obj/structure/fireplace + name = "fireplace" + desc = "warm and toasty" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "fireplace-active" + density = 0 + var/active = 1 + +/obj/structure/fireplace/initialize() + ..() + toggleFireplace() + +/obj/structure/fireplace/attack_hand(mob/living/user) + if(active) + active = 0 + toggleFireplace() + else + ..() + + +/obj/structure/fireplace/attackby(obj/item/W,mob/living/user,params) + if(!active) + if(W.is_hot()) + active = 1 + toggleFireplace() + else + ..() + else + W.fire_act() + +/obj/structure/fireplace/proc/toggleFireplace() + if(active) + SetLuminosity(8) + icon_state = "fireplace-active" + else + SetLuminosity(0) + icon_state = "fireplace" + +/obj/structure/fireplace/extinguish() + if(active) + active = 0 + toggleFireplace() + +/obj/structure/fireplace/fire_act() + if(!active) + active = 1 + toggleFireplace() + +/obj/machinery/recycler/lumbermill + name = "lumbermill saw" + desc = "Faster then the cartoons!" + emagged = 2 //Always grinds people + +/obj/machinery/recycler/lumbermill/recycle(obj/item/weapon/grown/log/L, sound = 1) + L.loc = src.loc + if(!istype(L)) + return + if(sound) + playsound(src.loc, 'sound/weapons/chainsawhit.ogg', 100, 1) + new L.plank_type(src.loc, 1 + round(L.seed.potency / 25)) + qdel(L) + +/mob/living/simple_animal/chicken/rabbit/normal + icon_state = "b_rabbit" + icon_living = "b_rabbit" + icon_dead = "b_rabbit_dead" + icon_prefix = "b_rabbit" + minbodytemp = 0 + eggsleft = 0 + egg_type = null + speak = list() + +/*Cabin's forest*/ +/datum/mapGenerator/snowy + modules = list(/datum/mapGeneratorModule/snow/pineTrees, \ + /datum/mapGeneratorModule/snow/deadTrees, \ + /datum/mapGeneratorModule/snow/randBushes, \ + /datum/mapGeneratorModule/snow/randIceRocks, \ + /datum/mapGeneratorModule/snow/bunnies) + +/datum/mapGeneratorModule/snow/checkPlaceAtom(turf/T) + if(istype(T,/turf/simulated/floor/plating/asteroid/snow)) + return ..(T) + return 0 + +/datum/mapGeneratorModule/snow/pineTrees + spawnableAtoms = list(/obj/structure/flora/tree/pine = 30) + +/datum/mapGeneratorModule/snow/deadTrees + spawnableAtoms = list(/obj/structure/flora/tree/dead = 10) + +/datum/mapGeneratorModule/snow/randBushes + spawnableAtoms = list() + +/datum/mapGeneratorModule/snow/randBushes/New() + ..() + spawnableAtoms = typesof(/obj/structure/flora/ausbushes) + for(var/i in spawnableAtoms) + spawnableAtoms[i] = 1 + +/datum/mapGeneratorModule/snow/bunnies + spawnableAtoms = list(/mob/living/simple_animal/chicken/rabbit/normal = 1) + +/datum/mapGeneratorModule/snow/randIceRocks + spawnableAtoms = list(/obj/structure/flora/rock/icy = 5, /obj/structure/flora/rock/pile/icy = 5) + +/obj/effect/landmark/mapGenerator/snowy + mapGeneratorType = /datum/mapGenerator/snowy \ No newline at end of file diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index dc1690371d7a4..7d31f60a261c3 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -317,7 +317,7 @@ master.vines -= src master.growth_queue -= src if(!master.vines.len) - var/obj/item/seeds/kudzuseed/KZ = new(loc) + var/obj/item/seeds/kudzu/KZ = new(loc) KZ.mutations |= mutations KZ.potency = min(100, master.mutativness * 10) KZ.production = (master.spread_cap / initial(master.spread_cap)) * 50 diff --git a/code/modules/food&drinks/food/snacks.dm b/code/modules/food&drinks/food/snacks.dm index 2fba39cacb0e3..0ed14efe0edf7 100644 --- a/code/modules/food&drinks/food/snacks.dm +++ b/code/modules/food&drinks/food/snacks.dm @@ -11,7 +11,6 @@ var/eatverb var/wrapped = 0 var/dried_type = null - var/potency = null var/dry = 0 var/cooked_type = null //for microwave cooking. path of the resulting item after microwaving var/filling_color = "#FFFFFF" //color to use when added to custom food. @@ -32,8 +31,9 @@ usr.unEquip(src) //so icons update :[ if(trash) - if(ispath(trash,/obj/item/weapon/grown)) - var/obj/item/TrashItem = new trash(usr,src.potency) + if(ispath(trash, /obj/item/weapon/grown) && istype(src, /obj/item/weapon/reagent_containers/food/snacks/grown)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/G = src + var/obj/item/TrashItem = new trash(usr, G.seed) usr.put_in_hands(TrashItem) else if(ispath(trash,/obj/item)) var/obj/item/TrashItem = new trash(usr) diff --git a/code/modules/food&drinks/kitchen machinery/juicer.dm b/code/modules/food&drinks/kitchen machinery/juicer.dm index 3cf4bc60a2a81..88737ab664a7f 100644 --- a/code/modules/food&drinks/kitchen machinery/juicer.dm +++ b/code/modules/food&drinks/kitchen machinery/juicer.dm @@ -144,10 +144,10 @@ /obj/machinery/juicer/proc/get_juice_amount(var/obj/item/weapon/reagent_containers/food/snacks/grown/O) if (!istype(O)) return 5 - else if (O.potency == -1) + else if (O.seed.potency == -1) return 5 else - return round(5*sqrt(O.potency)) + return round(5*sqrt(O.seed.potency)) /obj/machinery/juicer/proc/juice() power_change() //it is a portable machine diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food&drinks/kitchen machinery/processor.dm index ff6588fd17f8d..0195279848073 100644 --- a/code/modules/food&drinks/kitchen machinery/processor.dm +++ b/code/modules/food&drinks/kitchen machinery/processor.dm @@ -47,6 +47,10 @@ input = /obj/item/weapon/reagent_containers/food/snacks/meat output = /obj/item/weapon/reagent_containers/food/snacks/faggot +/datum/food_processor_process/sweetpotato + input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet + output = /obj/item/weapon/reagent_containers/food/snacks/yakiimo + /datum/food_processor_process/potato input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato output = /obj/item/weapon/reagent_containers/food/snacks/fries @@ -71,9 +75,6 @@ input = /obj/item/weapon/reagent_containers/food/snacks/grown/parsnip output = /obj/item/weapon/reagent_containers/food/snacks/roastparsnip -/datum/food_processor_process/sweetpotato - input = /obj/item/weapon/reagent_containers/food/snacks/grown/sweetpotato - output = /obj/item/weapon/reagent_containers/food/snacks/yakiimo /* mobs */ diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_bread.dm index 8dd5494537d32..5efee927b1efc 100644 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food&drinks/recipes/tablecraft/recipes_bread.dm @@ -64,6 +64,6 @@ /datum/reagent/consumable/soymilk = 5, /obj/item/weapon/reagent_containers/food/snacks/store/bread/plain = 1, /obj/item/weapon/reagent_containers/food/snacks/tofu = 3, - /obj/item/weapon/reagent_containers/food/snacks/grown/mimana = 1 + /obj/item/weapon/reagent_containers/food/snacks/grown/banana/mime = 1 ) result = /obj/item/weapon/reagent_containers/food/snacks/store/bread/mimana diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm index 9aeb323942c2c..5e560e98e1179 100644 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm @@ -189,7 +189,7 @@ time = 15 name = "Poppy pretzel" reqs = list( - /obj/item/seeds/poppyseed = 1, + /obj/item/seeds/poppy = 1, /obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1 ) result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_pie.dm index e33a9ed0ac235..6aaa1f2d4c920 100644 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_pie.dm +++ b/code/modules/food&drinks/recipes/tablecraft/recipes_pie.dm @@ -113,7 +113,7 @@ reqs = list( /datum/reagent/consumable/vanilla = 5, /datum/reagent/water = 5, - /obj/item/weapon/reagent_containers/food/snacks/grown/sweetpotato = 2 + /obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet = 2 ) result = /obj/item/weapon/reagent_containers/food/snacks/pie/dulcedebatata diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_soup.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_soup.dm index a634aa2ec14b1..aec60a15ca752 100644 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_soup.dm +++ b/code/modules/food&drinks/recipes/tablecraft/recipes_soup.dm @@ -183,7 +183,7 @@ /datum/reagent/water = 10, /datum/reagent/consumable/sugar = 5, /obj/item/weapon/reagent_containers/glass/bowl = 1, - /obj/item/weapon/reagent_containers/food/snacks/grown/sweetpotato = 2 + /obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet = 2 ) result = /obj/item/weapon/reagent_containers/food/snacks/soup/sweetpotato diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm new file mode 100644 index 0000000000000..9b2115934a0cd --- /dev/null +++ b/code/modules/hydroponics/gene_modder.dm @@ -0,0 +1,398 @@ +/obj/machinery/plantgenes + name = "plant DNA manipulator" + desc = "An advanced device designed to manipulate plant genetic makeup." + icon = 'icons/obj/hydroponics/equipment.dmi' + icon_state = "dnamod" + density = 1 + anchored = 1 + + var/obj/item/seeds/seed + var/obj/item/weapon/disk/plantgene/disk + + var/list/core_genes = list() + var/list/reagent_genes = list() + var/list/trait_genes = list() + + var/datum/plant_gene/target + var/operation = "" + var/rating = 0 // TODO: add failures, make it useful + +/obj/machinery/plantgenes/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/plantgenes(src) + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + RefreshParts() + +/obj/machinery/plantgenes/RefreshParts() + rating = 0 + for(var/obj/item/weapon/stock_parts/S in component_parts) + rating += S.rating-1 + +/obj/machinery/plantgenes/update_icon() + ..() + overlays.Cut() + if((stat & (BROKEN|NOPOWER))) + icon_state = "dnamod-off" + else + icon_state = "dnamod" + if(seed) + overlays += "dnamod-dna" + if(panel_open) + overlays += "dnamod-open" + +/obj/machinery/plantgenes/attackby(obj/item/I, mob/user, params) + if(default_deconstruction_screwdriver(user, "dnamod", "dnamod", I)) + update_icon() + return + if(exchange_parts(user, I)) + return + if(default_deconstruction_crowbar(I)) + return + if(isrobot(user)) + return + + if(istype(I, /obj/item/seeds)) + if(seed) + user << "A sample is already loaded into the machine!" + else + if(!user.drop_item()) + return + insert_seed(I) + user << "You add [I] to the machine." + interact(user) + return + else if(istype(I, /obj/item/weapon/disk/plantgene)) + if(disk) + user << "A data disk is already loaded into the machine!" + else + if(!user.drop_item()) + return + disk = I + disk.loc = src + user << "You add [I] to the machine." + interact(user) + else + ..() + + +/obj/machinery/plantgenes/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/plantgenes/interact(mob/user) + user.set_machine(src) + if(!user) + return + + var/datum/browser/popup = new(user, "plantdna", "Plant DNA Manipulator", 450, 600) // Set up the popup browser window + if(!( in_range(src, user) || istype(user, /mob/living/silicon) )) + popup.close() + return + + var/dat = "" + + if(operation) + if(!seed || (!target && operation != "insert")) + operation = "" + target = null + interact(user) + return + if((operation == "replace" || operation == "insert") && (!disk || !disk.gene)) + operation = "" + target = null + interact(user) + return + + dat += "

Confirm Operation

" + dat += "
Are you sure you want to [operation] " + switch(operation) + if("remove") + dat += "[target.get_name()] gene from \the [seed]?
" +// dat += "Failure may damage or destroy the sample!" // No failures yet. TODO: add failures + if("extract") + dat += "[target.get_name()] gene from \the [seed]?
" + dat += "The sample will be destroyed in process!" + if("replace") + dat += "[target.get_name()] gene with [disk.gene.get_name()]?
" +// dat += "Failure may damage or destroy the sample!" // No failures yet. TODO: add failures + if("insert") + dat += "[disk.gene.get_name()] gene into \the [seed]?
" +// dat += "Failure may damage or destroy the sample!" // No failures yet. TODO: add failures + dat += "
Confirm " + dat += "Abort
" + popup.set_content(dat) + popup.open() + return + + dat+= "
" + + dat += "" + + dat += "" + + dat += "
" + + if(seed) + var/can_insert = disk && disk.gene && disk.gene.can_add(seed) + var/can_extract = disk && !disk.read_only + + dat += "

Core Genes

" + for(var/a in core_genes) + var/datum/plant_gene/G = a + if(!G) + continue + dat += "" + dat += "
[G.get_name()]" + if(can_extract) + dat += "Extract" + if(can_insert && istype(disk.gene, G.type)) + dat += "Replace" + dat += "
" + + if(seed.yield != -1) + dat += "

Content Genes

" + if(reagent_genes.len) + dat += "" + for(var/a in reagent_genes) + var/datum/plant_gene/G = a + dat += "" + dat += "
[G.get_name()]" + if(can_extract) + dat += "Extract" + dat += "Remove" + dat += "
" + else + dat += "No content-related genes detected in sample.
" + dat += "
" + if(can_insert && istype(disk.gene, /datum/plant_gene/reagent)) + dat += "Insert: [disk.gene.get_name()]" + + dat += "

Trait Genes

" + if(trait_genes.len) + dat += "" + for(var/a in trait_genes) + var/datum/plant_gene/G = a + dat += "" + dat += "
[G.get_name()]" + if(can_extract) + dat += "Extract" + dat += "Remove" + dat += "
" + else + dat += "No trait-related genes detected in sample.
" + if(can_insert && istype(disk.gene, /datum/plant_gene/trait)) + dat += "Insert: [disk.gene.get_name()]" + dat += "
" + else + dat += "
No sample found.
Please, insert a plant sample to use this device." + popup.set_content(dat) + popup.open() + + +/obj/machinery/plantgenes/Topic(var/href, var/list/href_list) + if(..()) + return + usr.set_machine(src) + + if(href_list["eject_seed"] && !operation) + if (seed) + seed.loc = src.loc + seed.verb_pickup() + seed = null + update_genes() + update_icon() + else + var/obj/item/I = usr.get_active_hand() + if (istype(I, /obj/item/seeds)) + if(!usr.drop_item()) + return + insert_seed(I) + usr << "You add [I] to the machine." + update_icon() + else if(href_list["eject_disk"] && !operation) + if (disk) + disk.loc = src.loc + disk.verb_pickup() + disk = null + update_genes() + else + var/obj/item/I = usr.get_active_hand() + if(istype(I, /obj/item/weapon/disk/plantgene)) + if(!usr.drop_item()) + return + disk = I + disk.loc = src + usr << "You add [I] to the machine." + else if(href_list["op"] == "insert" && disk && disk.gene && seed) + if(!operation) // Wait for confirmation + operation = "insert" + else + if(!istype(disk.gene, /datum/plant_gene/core) && disk.gene.can_add(seed)) + seed.genes += disk.gene.Copy() + if(istype(disk.gene, /datum/plant_gene/reagent)) + seed.reagents_from_genes() + update_genes() + repaint_seed() + operation = "" + target = null + + else if(href_list["gene"] && seed) + var/datum/plant_gene/G = seed.get_gene(href_list["gene"]) + if(!G || !href_list["op"] || !(href_list["op"] in list("remove", "extract", "replace"))) + interact(usr) + return + + if(!operation || target != G) // Wait for confirmation + target = G + operation = href_list["op"] + + else if(operation == href_list["op"] && target == G) + switch(href_list["op"]) + if("remove") + if(!istype(G, /datum/plant_gene/core)) + seed.genes -= G + if(istype(G, /datum/plant_gene/reagent)) + seed.reagents_from_genes() + repaint_seed() + if("extract") + if(disk && !disk.read_only) + disk.gene = G + disk.update_name() + qdel(seed) + seed = null + update_icon() + if("replace") + if(disk && disk.gene && istype(disk.gene, G.type) && istype(G, /datum/plant_gene/core)) + seed.genes -= G + var/datum/plant_gene/core/C = disk.gene.Copy() + seed.genes += C + C.apply_stat(seed) + repaint_seed() + if("insert") + if(disk && disk.gene && !istype(disk.gene, /datum/plant_gene/core) && disk.gene.can_add(seed)) + seed.genes += disk.gene.Copy() + if(istype(disk.gene, /datum/plant_gene/reagent)) + seed.reagents_from_genes() + repaint_seed() + + update_genes() + operation = "" + target = null + else if(href_list["abort"]) + operation = "" + target = null + + interact(usr) + +/obj/machinery/plantgenes/proc/insert_seed(obj/item/seeds/S) + if(!istype(S) || seed) + return + S.loc = src + seed = S + update_genes() + update_icon() + +/obj/machinery/plantgenes/proc/update_genes() + core_genes = list() + reagent_genes = list() + trait_genes = list() + + if(seed) + var/gene_paths = list( + /datum/plant_gene/core/potency, + /datum/plant_gene/core/yield, + /datum/plant_gene/core/production, + /datum/plant_gene/core/endurance, + /datum/plant_gene/core/lifespan + ) + for(var/a in gene_paths) + core_genes += seed.get_gene(a) + + for(var/datum/plant_gene/reagent/G in seed.genes) + reagent_genes += G + for(var/datum/plant_gene/trait/G in seed.genes) + trait_genes += G + +/obj/machinery/plantgenes/proc/repaint_seed() + if(!seed) + return + if(copytext(seed.name, 1, 13) == "experimental") + return // Already modded name and icon + seed.name = "experimental " + seed.name + seed.icon_state = "seed-x" + + +/* + * Plant DNA disk + */ + +/obj/item/weapon/disk/plantgene + name = "plant data disk" + desc = "A disk for storing plant genetic data." + icon_state = "nucleardisk" + materials = list(MAT_METAL=30, MAT_GLASS=10) + var/datum/plant_gene/gene + var/read_only = 0 //Well, it's still a floppy disk + +/obj/item/weapon/disk/plantgene/New() + ..() + overlays += "datadisk_gene" + src.pixel_x = rand(-5, 5) + src.pixel_y = rand(-5, 5) + +/obj/item/weapon/disk/plantgene/attackby(obj/item/weapon/W, mob/user, params) + ..() + if(istype(W, /obj/item/weapon/pen)) + var/t = stripped_input(user, "What would you like the label to be?", name, null) + if(user.get_active_hand() != W) + return + if(!in_range(src, user) && loc != user) + return + if(t) + name = "plant data disk - '[t]'" + else + name = "plant data disk" + +/obj/item/weapon/disk/plantgene/proc/update_name() + if(gene) + name = "plant data disk - '[gene.get_name()]'" + else + name = "plant data disk" + +/obj/item/weapon/disk/plantgene/attack_self(mob/user) + read_only = !read_only + user << "You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"]." + +/obj/item/weapon/disk/plantgene/examine(mob/user) + ..() + user << "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"]." + + +/* + * Plant DNA Disks Box + */ +/obj/item/weapon/storage/box/disks_plantgene + name = "plant data disks box" + icon_state = "disk_kit" + +/obj/item/weapon/storage/box/disks_plantgene/New() + ..() + for(var/i in 1 to 7) + new /obj/item/weapon/disk/plantgene(src) \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index b6bca965c84f2..dc4f17f6071f5 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -5,1339 +5,171 @@ // Data from the seeds carry over to these grown foods // *********************************************************** -//Grown foods -//Subclass so we can pass on values -/obj/item/weapon/reagent_containers/food/snacks/grown/ - var/seed = null - var/plantname = "" - var/product //a type path - var/lifespan = 0 - var/endurance = 0 - var/maturation = 0 - var/production = 0 - var/yield = 0 - var/plant_type = 0 +// Base type. Subtypes are found in /grown dir. +/obj/item/weapon/reagent_containers/food/snacks/grown icon = 'icons/obj/hydroponics/harvest.dmi' - potency = -1 - dried_type = -1 //bit different. saves us from having to define each stupid grown's dried_type as itself. If you don't want a plant to be driable (watermelons) set this to null in the time definition. + var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item. + var/plantname = "" + var/bitesize_mod = 0 + var/splat_type = /obj/effect/decal/cleanable/plant_smudge + // If set, bitesize = 1 + round(reagents.total_volume / bitesize_mod) + dried_type = -1 + // Saves us from having to define each stupid grown's dried_type as itself. + // If you don't want a plant to be driable (watermelons) set this to null in the time definition. + +/obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc, var/obj/item/seeds/new_seed = null) + ..() + if(new_seed) + seed = new_seed.Copy() + else if(ispath(seed)) + // This is for adminspawn or map-placed growns. They get the default stats of their seed type. + seed = new seed() + seed.adjust_potency(50-seed.potency) + else // Something is terribly wrong + qdel(src) + return -/obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc, new_potency = 50) - ..() - potency = new_potency pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) if(dried_type == -1) dried_type = src.type - if(seed && lifespan == 0) //This is for adminspawn or map-placed growns. They get the default stats of their seed type. This feels like a hack but people insist on putting these things on the map... - var/obj/item/seeds/S = new seed(src) - lifespan = S.lifespan - endurance = S.endurance - maturation = S.maturation - production = S.production - yield = S.yield - qdel(S) //Foods drop their contents when eaten, so delete the default seed. + for(var/datum/plant_gene/trait/T in seed.genes) + T.on_new(src, newloc) + seed.prepare_result(src) add_juice() - transform *= TransformUsingVariable(potency, 100, 0.5) //Makes the resulting produce's sprite larger or smaller based on potency! + transform *= TransformUsingVariable(seed.potency, 100, 0.5) //Makes the resulting produce's sprite larger or smaller based on potency! + /obj/item/weapon/reagent_containers/food/snacks/grown/proc/add_juice() if(reagents) + if(bitesize_mod) + bitesize = 1 + round(reagents.total_volume / bitesize_mod) return 1 return 0 -/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/item/weapon/reagent_containers/food/snacks/grown/examine(user) ..() - 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. Can grow in nutrient-poor soil.\n" - if(2) - msg += "- Plant type: Mushroom. Can grow in dry soil.\n" - msg += "- Potency: [potency]\n" - msg += "- Yield: [yield]\n" - msg += "- Maturation speed: [maturation]\n" - msg += "- Production speed: [production]\n" - msg += "- Endurance: [endurance]\n" - msg += "- Nutritional value: [reagents.get_reagent_amount("nutriment")]\n" - msg += "- Other substances: [reagents.total_volume-reagents.get_reagent_amount("nutriment")]\n" - msg += "*---------*" - usr << msg - return - return + for(var/datum/plant_gene/trait/T in seed.genes) + if(T.examine_line) + user << T.examine_line -/obj/item/weapon/grown/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params) ..() 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. Can grow in nutrient-poor soil.\n" - if(2) - msg += "- Plant type: Mushroom. Can grow in dry soil.\n" - msg += "- Potency: [potency]\n" - msg += "- Yield: [yield]\n" - msg += "- Maturation speed: [maturation]\n" - msg += "- Production speed: [production]\n" - msg += "- Endurance: [endurance]\n" + var/msg = "*---------*\n This is \a [src].\n" + msg += seed.get_analyzer_text() + msg += "\n- Nutritional value: [reagents.get_reagent_amount("nutriment")]\n" + msg += "- Other substances: [reagents.total_volume-reagents.get_reagent_amount("nutriment")]\n" msg += "*---------*" - usr << msg - return - -/obj/item/weapon/reagent_containers/food/snacks/grown/corn - seed = /obj/item/seeds/cornseed - name = "ear of corn" - desc = "Needs some butter!" - icon_state = "corn" - cooked_type = /obj/item/weapon/reagent_containers/food/snacks/popcorn - filling_color = "#FFFF00" - trash = /obj/item/weapon/grown/corncob - juice_reagents = list("corn_starch" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/corn/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - reagents.add_reagent("cornoil", 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" - gender = PLURAL - filling_color = "#FF0000" - grind_reagents = list("cherryjelly" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/cherries/add_juice() - if(..()) - 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) - -/obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries - seed = /obj/item/seeds/bluecherryseed - name = "blue cherries" - desc = "They're cherries that are blue." - icon_state = "bluecherry" - filling_color = "#6495ED" - grind_reagents = list("bluecherryjelly" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 15), 1)) - reagents.add_reagent("sugar", 1 + round((potency / 50), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - - -/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" - slot_flags = SLOT_HEAD - filling_color = "#FF6347" - -/obj/item/weapon/reagent_containers/food/snacks/grown/poppy/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 20), 1)) - reagents.add_reagent("hotline", 3 + round((potency / 10), 1)) - bitesize = 1 + round(reagents.total_volume / 3, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/poppy/lily - seed = /obj/item/seeds/lilyseed - name = "lily" - desc = "A beautiful orange flower" - icon_state = "lily" - filling_color = "#FFA500" - -/obj/item/weapon/reagent_containers/food/snacks/grown/poppy/geranium - seed = /obj/item/seeds/geraniumseed - name = "geranium" - desc = "A beautiful blue flower" - icon_state = "geranium" - filling_color = "#008B8B" - -/obj/item/weapon/reagent_containers/food/snacks/grown/harebell - seed = /obj/item/seeds/harebell - 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" - slot_flags = SLOT_HEAD - filling_color = "#E6E6FA" - -/obj/item/weapon/reagent_containers/food/snacks/grown/harebell/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 20), 1)) - bitesize = 1 + round(reagents.total_volume / 3, 1) - - -/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" - filling_color = "#E9967A" - juice_reagents = list("potato" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/potato/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = reagents.total_volume - -/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - ..() - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - user << "You add some cable to the potato and slide it inside the battery encasing." - var/obj/item/weapon/stock_parts/cell/potato/pocell = new /obj/item/weapon/stock_parts/cell/potato(user.loc) - pocell.maxcharge = src.potency * 10 - pocell.charge = pocell.maxcharge - qdel(src) - return - else - user << "You need five lengths of cable to make a potato battery." - return - - -/obj/item/weapon/reagent_containers/food/snacks/grown/grapes - seed = /obj/item/seeds/grapeseed - name = "bunch of grapes" - desc = "Nutritious!" - icon_state = "grapes" - dried_type = /obj/item/weapon/reagent_containers/food/snacks/no_raisin - filling_color = "#FF1493" - -/obj/item/weapon/reagent_containers/food/snacks/grown/grapes/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("sugar", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/grapes/green - seed = /obj/item/seeds/greengrapeseed - name = "bunch of green grapes" - desc = "Nutritious!" - icon_state = "greengrapes" - dried_type = /obj/item/weapon/reagent_containers/food/snacks/no_raisin - filling_color = "#7FFF00" - -/obj/item/weapon/reagent_containers/food/snacks/grown/grapes/green/add_juice() - ..() - reagents.add_reagent("salglu_solution", 3 + round((potency / 5), 1)) - - -/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage - seed = /obj/item/seeds/cabbageseed - name = "cabbage" - desc = "Ewwwwwwwwww. Cabbage." - icon_state = "cabbage" - filling_color = "#90EE90" - -/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries - seed = /obj/item/seeds/berryseed - name = "bunch of berries" - desc = "Nutritious!" - icon_state = "berrypile" - gender = PLURAL - juice_reagents = list("berryjuice" = 0) - filling_color = "#FF00FF" - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison - seed = /obj/item/seeds/poisonberryseed - name = "bunch of poison-berries" - desc = "Taste so good, you could die!" - icon_state = "poisonberrypile" - filling_color = "#C71585" - juice_reagents = list("poisonberryjuice" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison/add_juice() - ..() - reagents.add_reagent("toxin", 3 + round(potency / 5, 1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries/death - seed = /obj/item/seeds/deathberryseed - name = "bunch of death-berries" - desc = "Taste so good, you could die!" - icon_state = "deathberrypile" - filling_color = "#708090" - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries/death/add_juice() - ..() - reagents.add_reagent("toxin", 3 + round(potency / 3, 1)) - reagents.add_reagent("lexorin", 1 + round(potency / 5, 1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries/glow - seed = /obj/item/seeds/glowberryseed - name = "bunch of glow-berries" - desc = "Nutritious!" - var/on = 1 - var/brightness_on = 3 //luminosity when on - icon_state = "glowberrypile" - filling_color = "#7CFC00" - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries/glow/New() - set_light(round(potency / 5,1)) - ..() - -/obj/item/weapon/reagent_containers/food/snacks/grown/berries/glow/add_juice() - ..() - reagents.add_reagent("uranium", 3 + round(potency / 5, 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod - seed = /obj/item/seeds/cocoapodseed - name = "cocoa pod" - desc = "Fattening... Mmmmm... chucklate." - icon_state = "cocoapod" - filling_color = "#FFD700" - -/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("cocoa", 4 + round((potency / 5), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/vanillapod - seed = /obj/item/seeds/vanillapodseed - name = "vanilla pod" - desc = "Fattening... Mmmmm... vanilla." - icon_state = "vanillapod" - filling_color = "#FFD700" - -/obj/item/weapon/reagent_containers/food/snacks/grown/vanillapod/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("vanilla", 4 + round((potency / 5), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane - seed = /obj/item/seeds/sugarcaneseed - name = "sugarcane" - desc = "Sickly sweet." - icon_state = "sugarcane" - filling_color = "#FFD700" - -/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane/add_juice() - if(..()) - reagents.add_reagent("sugar", 4 + round((potency / 5), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - - -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia //abstract type - name = "ambrosia branch" - desc = "This is a plant." - icon_state = "ambrosiavulgaris" - slot_flags = SLOT_HEAD - filling_color = "#008000" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1) - bitesize = 1 + round(reagents.total_volume / 2, 1) - - -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris - seed = /obj/item/seeds/ambrosiavulgarisseed - name = "ambrosia vulgaris branch" - desc = "This is a plant containing various healing chemicals." -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris/add_juice() - ..() - reagents.add_reagent("space_drugs", 1 + round(potency / 8, 1)) - reagents.add_reagent("salglu_solution", 1 + round(potency / 8, 1)) - reagents.add_reagent("salglu_solution", 1 + round(potency / 10, 1)) - reagents.add_reagent("toxin", 1 + round(potency / 10, 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - - -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus - seed = /obj/item/seeds/ambrosiadeusseed - name = "ambrosia deus branch" - desc = "Eating this makes you feel immortal!" - icon_state = "ambrosiadeus" - filling_color = "#008B8B" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus/add_juice() - ..() - reagents.add_reagent("omnizine", 1 + round(potency / 8, 1)) - reagents.add_reagent("synaptizine", 1 + round(potency / 8, 1)) - reagents.add_reagent("space_drugs", 1 + round(potency / 10, 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - - -/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" - filling_color = "#FF4500" - -/obj/item/weapon/reagent_containers/food/snacks/grown/apple/add_juice() - if(..()) - reagents.maximum_volume = 20 - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = reagents.maximum_volume // Always eat the apple in one - - -/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" - -/obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned/add_juice() - ..() - reagents.add_reagent("cyanide", 1 + round((potency / 5), 1)) - - -/obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold - seed = /obj/item/seeds/goldappleseed - name = "golden apple" - desc = "Emblazoned upon the apple is the word 'Kallisti'." - icon_state = "goldapple" - filling_color = "#FFD700" - -/obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold/add_juice() - ..() - reagents.add_reagent("gold", 1 + round((potency / 5), 1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Mineral Content: [reagents.get_reagent_amount("gold")]%" - - -/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" - slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice - slices_num = 5 - dried_type = null - w_class = 3 - filling_color = "#008000" - juice_reagents = list("watermelonjuice" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 6), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/holymelon - seed = /obj/item/seeds/holymelonseed - name = "holymelon" - desc = "The water within this melon has been blessed by some deity that's particularly fond of watermelon." - icon_state = "holymelon" - filling_color = "#FFD700" - dried_type = null - -/obj/item/weapon/reagent_containers/food/snacks/grown/holymelon/add_juice() - if(..()) - reagents.add_reagent("holywater", 1 + round((potency / 6), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/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" - filling_color = "#FFA500" - juice_reagents = list("pumpkinjuice" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 6), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - ..() - if(is_sharp(W)) - user.show_message("You carve a face into [src]!", 1) - new /obj/item/clothing/head/hardhat/pumpkinhead (user.loc) - qdel(src) + var/list/scannable_reagents = list("charcoal" = "Anti-Toxin", "morphine" = "Morphine", "amatoxin" = "Amatoxins", + "toxin" = "Toxins", "mushroomhallucinogen" = "Mushroom Hallucinogen", "condensedcapsaicin" = "Condensed Capsaicin", + "capsaicin" = "Capsaicin", "frostoil" = "Frost Oil", "gold" = "Mineral Content", "glycerol" = "Glycerol", + "radium" = "Highly Radioactive Material", "uranium" = "Radioactive Material") + var/reag_txt = "" + for(var/reagent_id in scannable_reagents) + if(reagent_id in seed.reagents_add) + var/amt = reagents.get_reagent_amount(reagent_id) + reag_txt += "\n- [scannable_reagents[reagent_id]]: [amt*100/reagents.maximum_volume]%" + + if(reag_txt) + msg += reag_txt + msg += "
*---------*" + user << msg return - -/obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin - seed = /obj/item/seeds/blumpkinseed - name = "blumpkin" - desc = "When you're making a mess this blumpkin's there to clean you up." - icon_state = "blumpkin" - filling_color = "#87CEFA" - juice_reagents = list("blumpkinjuice" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 6), 1)) - reagents.add_reagent("ammonia", 1 + round((potency / 6), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/ //abstract type - seed = /obj/item/seeds/limeseed - name = "citrus" - desc = "It's so sour, your face will twist." - icon_state = "lime" - -/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 20), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lime - seed = /obj/item/seeds/limeseed - name = "lime" - desc = "It's so sour, your face will twist." - icon_state = "lime" - filling_color = "#00FF00" - juice_reagents = list("limejuice" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lemon - seed = /obj/item/seeds/lemonseed - name = "lemon" - desc = "When life gives you lemons, be grateful they aren't limes." - icon_state = "lemon" - filling_color = "#FFD700" - juice_reagents = list("lemonjuice" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange - seed = /obj/item/seeds/orangeseed - name = "orange" - desc = "It's an tangy fruit." - icon_state = "orange" - filling_color = "#FFA500" - juice_reagents = list("orangejuice" = 0) - - -/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" - filling_color = "#F4A460" - -/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet/add_juice() - if(..()) - reagents.add_reagent("nutriment", round((potency / 20), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - reagents.add_reagent("sugar", 1 + round((potency / 5), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/sweetpotato - seed = /obj/item/seeds/sweetpotatoseed - name = "sweet potato" - desc = "It's sweet." - icon_state = "sweetpotato" - -/obj/item/weapon/reagent_containers/food/snacks/grown/sweetpotato/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 10), 1)) - reagents.add_reagent("sugar", 1 + round((potency / 10), 1)) - bitesize = reagents.total_volume - -/obj/item/weapon/reagent_containers/food/snacks/grown/parsnip - seed = /obj/item/seeds/parsnipseed - name = "parsnip" - desc = "Closely related to carrots." - icon_state = "parsnip" - -/obj/item/weapon/reagent_containers/food/snacks/grown/parsnip/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 20), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 20), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/redbeet - seed = /obj/item/seeds/redbeetseed - name = "red beet" - desc = "You can't beat red beet." - icon_state = "redbeet" - -/obj/item/weapon/reagent_containers/food/snacks/grown/redbeet/add_juice() - if(..()) - reagents.add_reagent("nutriment", round((potency / 20), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 20), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/banana - seed = /obj/item/seeds/bananaseed - name = "banana" - desc = "It's an excellent prop for a clown." - icon = 'icons/obj/items.dmi' - icon_state = "banana" - item_state = "banana" - trash = /obj/item/weapon/grown/bananapeel - filling_color = "#FFFF00" - juice_reagents = list("banana" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/banana/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 50), 1)) - reagents.add_reagent("banana", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 5 - -/obj/item/weapon/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user) - user.visible_message("[user] is aiming the [src.name] at themself! It looks like \he's trying to commit suicide.") - playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1) - sleep(25) - user.say("BANG!") - sleep(25) - user.visible_message("[user] laughs so hard they begin to suffocate!") - return (OXYLOSS) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mimana - seed = /obj/item/seeds/mimanaseed - name = "mimana" - desc = "It's an excellent prop for a mime." - icon_state = "mimana" - filling_color = "#FFFFEE" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mimana/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 50), 1)) - reagents.add_reagent("nothing", 2 + round((potency / 10), 1)) - reagents.add_reagent("mutetoxin", 2 + round((potency / 10), 1)) - bitesize = 5 - -/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" - -/obj/item/weapon/reagent_containers/food/snacks/grown/chili/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 25), 1)) - reagents.add_reagent("capsaicin", 3+round(potency / 5, 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 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, params) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Capsaicin: [reagents.get_reagent_amount("capsaicin")]%" - - -/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" - filling_color = "#0000CD" - -/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper/add_juice() - ..() - reagents.add_reagent("nutriment", 1 + round((potency / 50), 1)) - reagents.add_reagent("vitamin", 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, params) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Frostoil: [reagents.get_reagent_amount("frostoil")]%" - - -/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili - seed = /obj/item/seeds/chilighost - name = "ghost chili" - desc = "It seems to be vibrating gently." - icon_state = "ghostchilipepper" - var/mob/held_mob - filling_color = "#F8F8FF" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/add_juice() - ..() - reagents.add_reagent("nutriment", 1 + round((potency / 25), 1)) - reagents.add_reagent("capsaicin", 8+round(potency / 2, 1)) - reagents.add_reagent("condensedcapsaicin", 4+round(potency / 4, 1)) - bitesize = 1 + round(reagents.total_volume / 4, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Capsaicin: [reagents.get_reagent_amount("capsaicin")]%" - -/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/attack_hand(mob/user as mob) - ..() - if( istype(src.loc, /mob) ) - held_mob = src.loc - SSobj.processing |= src - -/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/process() - if(held_mob && src.loc == held_mob) - if( (held_mob.l_hand == src) || (held_mob.r_hand == src)) - if(hasvar(held_mob,"gloves") && held_mob:gloves) - return - held_mob.bodytemperature += 20 * TEMPERATURE_DAMAGE_COEFFICIENT - if(prob(10)) - held_mob << "Your hand holding [src] burns!" - else - held_mob = null - ..() - -/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 = "#800080" - -/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - - -/obj/item/weapon/reagent_containers/food/snacks/grown/shell/ - var/inside_type = null - -/obj/item/weapon/reagent_containers/food/snacks/grown/shell/attack_self(mob/user as mob) - if(inside_type) - new inside_type(user.loc) - user.unEquip(src) - qdel(src) - -/obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy - seed = /obj/item/seeds/eggyseed - name = "Egg-plant" - desc = "There MUST be a chicken inside." - icon_state = "eggyplant" - inside_type = /obj/item/weapon/reagent_containers/food/snacks/egg - filling_color = "#F8F8FF" - -/obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice() - ..() - 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/soybeans - seed = /obj/item/seeds/soyaseed - name = "soybeans" - desc = "It's pretty bland, but oh the possibilities..." - gender = PLURAL - icon_state = "soybeans" - filling_color = "#F0E68C" - grind_reagents = list("soymilk" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 20), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/koibeans - seed = /obj/item/seeds/koiseed - name = "koibean" - desc = "Something about these seems fishy." - icon_state = "koibeans" - filling_color = "#F0E68C" - -/obj/item/weapon/reagent_containers/food/snacks/grown/koibeans/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 30), 1)) - reagents.add_reagent("carpotoxin", 1 + round((potency / 20), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/moonflower - seed = /obj/item/seeds/moonflowerseed - name = "moonflower" - desc = "Store in a location at least 50 yards away from werewolves." - icon_state = "moonflower" - slot_flags = SLOT_HEAD - filling_color = "#E6E6FA" - -/obj/item/weapon/reagent_containers/food/snacks/grown/moonflower/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 50), 1)) - reagents.add_reagent("moonshine", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 50), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -//tomaters -/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" - var/splat = /obj/effect/decal/cleanable/tomato_smudge - filling_color = "#FF6347" - grind_reagents = list("ketchup" = 0) - juice_reagents = list("tomatojuice" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/proc/squish(atom/target) - new splat(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") - for(var/atom/A in get_turf(target)) - src.reagents.reaction(A) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/throw_impact(atom/hit_atom) - ..() - squish(hit_atom) - del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes. return -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer - 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" - var/awakening = 0 - filling_color = "#FF0000" - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack(mob/M, mob/user, def_zone) - if(awakening) - user << "The tomato is twitching and shaking, preventing you from eating it." - return +// Various gene procs +/obj/item/weapon/reagent_containers/food/snacks/grown/attack_self(mob/user) + if(seed.get_gene(/datum/plant_gene/trait/squash)) + squash(user) ..() -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack_self(mob/user as mob) - if(awakening || istype(user.loc,/turf/space)) - return - user << "You begin to awaken the Killer Tomato." - awakening = 1 - - spawn(30) - if(!gc_destroyed) - var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(get_turf(src.loc)) - K.maxHealth += round(endurance / 3) - K.melee_damage_lower += round(potency / 10) - K.melee_damage_upper += round(potency / 10) - K.move_to_delay -= round(production / 50) - K.health = K.maxHealth - K.visible_message("The Killer Tomato growls as it suddenly awakens.") - if(user) - user.unEquip(src) - qdel(src) - - +/obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) + if(!..() && seed.get_gene(/datum/plant_gene/trait/squash)) //was it caught by a mob? + squash(hit_atom) -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood - seed = /obj/item/seeds/bloodtomatoseed - name = "blood-tomato" - desc = "So bloody...so...very...bloody....AHHHH!!!!" - icon_state = "bloodtomato" - splat = /obj/effect/gibspawner/generic - filling_color = "#FF0000" +/obj/item/weapon/reagent_containers/food/snacks/grown/proc/squash(atom/target) + var/turf/T = get_turf(target) + if(ispath(splat_type, /obj/effect/decal/cleanable/plant_smudge)) + if(filling_color) + var/obj/O = new splat_type(T) + O.color = filling_color + O.name = "[name] smudge" + else if(splat_type) + new splat_type(T) -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood/add_juice(var/loc, var/potency = 10) - ..() - reagents.add_reagent("blood", 1 + round((potency / 5), 1)) - - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue - seed = /obj/item/seeds/bluetomatoseed - name = "blue-tomato" - desc = "I say blue-mah-to, you say blue-mae-to." - icon_state = "bluetomato" - splat = /obj/effect/decal/cleanable/oil - filling_color = "#0000FF" - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/add_juice() - ..() - reagents.add_reagent("lube", 1 + round((potency / 5), 1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/Crossed(AM as mob|obj) - if (istype(AM, /mob/living/carbon)) - var/mob/living/carbon/M = AM - var/stun = Clamp(potency / 10, 1, 10) - var/weaken = Clamp(potency / 20, 0.5, 5) - M.slip(stun, weaken, src) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace - seed = /obj/item/seeds/bluespacetomatoseed - name = "blue-space tomato" - desc = "So lubricated, you might slip through space-time." - icon_state = "bluespacetomato" - origin_tech = "bluespace=3" - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/add_juice() - ..() - reagents.add_reagent("singulo", 1 + round((potency / 5), 1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/attack_self(var/mob/user) - squish(user) - user.drop_item() - src.visible_message("[user] squashes the [src.name].","You hear a smack.") - qdel(src) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/squish(atom/squishee) - ..() - var/teleport_radius = potency / 10 - if(isliving(squishee)) - new /obj/effect/decal/cleanable/molten_item(squishee.loc) //Leave a pile of goo behind for dramatic effect... - do_teleport(squishee, get_turf(squishee), teleport_radius) - - -/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 = "#F0E68C" - grind_reagents = list("flour" = -5) - -/obj/item/weapon/reagent_containers/food/snacks/grown/wheat/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/oat - seed = /obj/item/seeds/oatseed - name = "oat" - desc = "Eat oats, do squats." - gender = PLURAL - icon_state = "oat" - filling_color = "#556B2F" - grind_reagents = list("flour" = -5) - -/obj/item/weapon/reagent_containers/food/snacks/grown/oat/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/rice - seed = /obj/item/seeds/riceseed - name = "rice" - desc = "Rice to meet you." - gender = PLURAL - icon_state = "rice" - filling_color = "#FAFAD2" - -/obj/item/weapon/reagent_containers/food/snacks/grown/rice/add_juice() - if(..()) - reagents.add_reagent("rice", 1 + round((potency / 6), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/grass - seed = /obj/item/seeds/grassseed - name = "grass" - desc = "Green and lush." - icon_state = "grassclump" - filling_color = "#32CD32" - -/obj/item/weapon/reagent_containers/food/snacks/grown/grass/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 50), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/grass/attack_self(mob/user as mob) - user << "You prepare the astroturf." - var/grassAmt = 1 + round(potency / 50) // The grass we're holding - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/grass/G in user.loc) // The grass on the floor - grassAmt += 1 + round(G.potency / 50) - qdel(G) - while(grassAmt > 0) - var/obj/item/stack/tile/GT = new /obj/item/stack/tile/grass(user.loc) - if(grassAmt >= GT.max_amount) - GT.amount = GT.max_amount + if(trash) + if(ispath(trash, /obj/item/weapon/grown) || ispath(trash, /obj/item/weapon/reagent_containers/food/snacks/grown)) + new trash(T, seed) else - GT.amount = grassAmt - for(var/obj/item/stack/tile/grass/GR in user.loc) - if(GR != GT && GR.amount < GR.max_amount) - GR.attackby(GT, user) //we try to transfer all old unfinished stacks to the new stack we created. - grassAmt -= GT.max_amount - qdel(src) - return - -/obj/item/weapon/reagent_containers/food/snacks/grown/carpet - seed = /obj/item/seeds/carpetseed - name = "carpet" - desc = "The textile industry's dark secret." - icon_state = "carpetclump" - -/obj/item/weapon/reagent_containers/food/snacks/grown/carpet/attack_self(mob/user as mob) - user << "You roll out the red carpet." - var/carpetAmt = 1 + round(potency / 50) // The carpet we're holding - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/carpet/C in user.loc) // The carpet on the floor - carpetAmt += 1 + round(C.potency / 50) - qdel(C) - while(carpetAmt > 0) - var/obj/item/stack/tile/CT = new /obj/item/stack/tile/carpet(user.loc) - if(carpetAmt >= CT.max_amount) - CT.amount = CT.max_amount - else - CT.amount = carpetAmt - for(var/obj/item/stack/tile/carpet/CA in user.loc) - if(CA != CT && CA.amount < CA.max_amount) - CA.attackby(CT, user) //we try to transfer all old unfinished stacks to the new stack we created. - carpetAmt -= CT.max_amount - qdel(src) - return - -/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" - var/list/mutations = list() - filling_color = "#6B8E23" + new trash(T) -/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod/add_juice() - if(..()) - 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) + visible_message("[src] has been squashed.","You hear a smack.") + for(var/datum/plant_gene/trait/trait in seed.genes) + trait.on_squash(src, target) + for(var/A in T) + reagents.reaction(A) -/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" - filling_color = "#FFA500" - juice_reagents = list("carrotjuice" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/carrot/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 20), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - reagents.add_reagent("imidazoline", 3+round(potency / 5, 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom - name="mushroom" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi - seed = /obj/item/seeds/reishimycelium - name = "reishi" - desc = "Ganoderma lucidum: A special fungus known for its medicinal and stress relieving properties." - icon_state = "reishi" - filling_color = "#FF4500" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi/add_juice() - ..() - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("anti_toxin", 3+round(potency / 3, 1)) - reagents.add_reagent("morphine", 3+round(potency / 3, 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, params) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Anti-Toxin: [reagents.get_reagent_amount("anti_toxin")]%" - user << "- Morphine: [reagents.get_reagent_amount("morphine")]%" - -/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" - filling_color = "#FF0000" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita/add_juice() - ..() - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("amatoxin", 3+round(potency / 3, 1)) - reagents.add_reagent("mushroomhallucinogen", 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, params) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Amatoxins: [reagents.get_reagent_amount("amatoxin")]%" - user << "- Mushroom Hallucinogen: [reagents.get_reagent_amount("mushroomhallucinogen")]%" - -/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" - filling_color = "#C0C0C0" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel/add_juice() - ..() - reagents.add_reagent("nutriment", 1 + round((potency / 50), 1)) - reagents.add_reagent("amatoxin", 13+round(potency / 3, 1)) - reagents.add_reagent("mushroomhallucinogen", 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, params) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Amatoxins: [reagents.get_reagent_amount("amatoxin")]%" - user << "- Mushroom Hallucinogen: [reagents.get_reagent_amount("mushroomhallucinogen")]%" - -/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" - filling_color = "#DAA520" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap/add_juice(var/loc, var/potency = 15) - ..() - reagents.add_reagent("nutriment", 1 + round((potency / 50), 1)) - reagents.add_reagent("mushroomhallucinogen", 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, params) - . = ..() - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "- Mushroom Hallucinogen: [reagents.get_reagent_amount("mushroomhallucinogen")]%" - -/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 = "#9370DB" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet/add_juice() - ..() - reagents.add_reagent("nutriment", 2+round((potency / 10), 1)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom - seed = /obj/item/seeds/walkingmushroommycelium - name = "walking mushroom" - desc = "Plumus Locomotus: The beginning of the great walk." - icon_state = "walkingmushroom" - filling_color = "#9370DB" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/add_juice() - ..() - reagents.add_reagent("nutriment", 2+round((potency / 10), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) - return - var/mob/living/simple_animal/hostile/mushroom/M = new /mob/living/simple_animal/hostile/mushroom(user.loc) - M.maxHealth += round(endurance / 4) - M.melee_damage_lower += round(potency / 20) - M.melee_damage_upper += round(potency / 20) - M.move_to_delay -= round(production / 50) - M.health = M.maxHealth qdel(src) - 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 = "#FFA500" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle/add_juice() - ..() - reagents.add_reagent("nutriment", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/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." - icon_state = "glowshroom" - filling_color = "#00FA9A" - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/New(var/loc, var/new_potency = 10) +/obj/item/weapon/reagent_containers/food/snacks/grown/On_Consume() + if(iscarbon(usr)) + for(var/datum/plant_gene/trait/T in seed.genes) + T.on_consume(src, usr) ..() - if(lifespan == 0) //basically, if you're spawning these via admin or on the map, then set up some default stats. - lifespan = 120 - endurance = 30 - maturation = 15 - production = 1 - yield = 3 - potency = 30 - plant_type = 2 - src.set_light(round(potency / 10,1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/add_juice() - ..() - reagents.add_reagent("nutriment", 1 + round((potency / 25), 1)) - reagents.add_reagent("radium", 1 + round((potency / 20), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/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 = planted.delay - production * 100 //So the delay goes DOWN with better stats instead of up. :I - planted.endurance = endurance - planted.yield = yield - planted.potency = potency - qdel(src) - user << "You plant the glowshroom." - - - -/obj/item/weapon/reagent_containers/food/snacks/grown/shell/moneyfruit - seed = /obj/item/seeds/cashseed - name = "Money Fruit" - desc = "Looks like a lemon with someone buldging from the inside." - icon_state = "moneyfruit" - inside_type = null -/obj/item/weapon/reagent_containers/food/snacks/grown/shell/moneyfruit/add_juice() +/obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(atom/movable/AM) + var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip) + if(S && !ispath(trash, /obj/item/weapon/grown) && iscarbon(AM)) + var/mob/living/carbon/M = AM + var/stun = max(seed.potency * S.rate * 2, 1) + var/weaken = max(seed.potency * S.rate, 0.5) + if(M.slip(stun, weaken, src)) + for(var/datum/plant_gene/trait/T in seed.genes) + T.on_slip(src, M) + return 1 ..() - reagents.add_reagent("nutriment", 1 + round((potency / 20), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - switch(potency) - if(0 to 10) - inside_type = /obj/item/weapon/spacecash/ - if(11 to 20) - inside_type = /obj/item/weapon/spacecash/c10 - if(21 to 30) - inside_type = /obj/item/weapon/spacecash/c20 - if(31 to 40) - inside_type = /obj/item/weapon/spacecash/c50 - if(41 to 50) - inside_type = /obj/item/weapon/spacecash/c100 - if(51 to 60) - inside_type = /obj/item/weapon/spacecash/c200 - if(61 to 80) - inside_type = /obj/item/weapon/spacecash/c500 - else - inside_type = /obj/item/weapon/spacecash/c1000 - -/obj/item/weapon/reagent_containers/food/snacks/grown/gatfruit - seed = /obj/item/seeds/gatfruit - name = "gatfruit" - desc = "It smells like burning." - icon_state = "gatfruit" - origin_tech = "combat=3" - trash = /obj/item/weapon/gun/projectile/revolver -/obj/item/weapon/reagent_containers/food/snacks/grown/gatfruit/add_juice() - if(..()) - reagents.add_reagent("sulfur", 1 + round((potency / 10), 1)) - reagents.add_reagent("carbon", 1 + round((potency / 10), 1)) - reagents.add_reagent("nitrogen", 1 + round((potency / 15), 1)) - reagents.add_reagent("potassium", 1 + round((potency / 20), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) +// Glow gene procs +/obj/item/weapon/reagent_containers/food/snacks/grown/Destroy() + var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow) + if(G && ismob(loc)) + loc.set_light(-G.get_lum(seed)) + return ..() -/obj/item/weapon/reagent_containers/food/snacks/grown/coffee //abstract type - seed = /obj/item/seeds/coffee_arabica_seed - name = "coffee beans" - desc = "Dry them out to make coffee." - icon_state = "coffee_arabica" - filling_color = "#DC143C" - -/obj/item/weapon/reagent_containers/food/snacks/grown/coffee/add_juice() - if(..()) - reagents.add_reagent("coffeepowder", 1 + round((potency / 10), 2)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - bitesize = 1 + round(reagents.total_volume / 2, 1) - -/obj/item/weapon/reagent_containers/food/snacks/grown/coffee/arabica - seed = /obj/item/seeds/coffee_arabica_seed - name = "coffee arabica beans" - desc = "Dry them out to make coffee." - icon_state = "coffee_arabica" - grind_reagents = list("coffeepowder" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/coffee/robusta - seed = /obj/item/seeds/coffee_robusta_seed - name = "coffee robusta beans" - desc = "Dry them out to make coffee." - icon_state = "coffee_robusta" - grind_reagents = list("coffeepowder" = 0, "morphine" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/coffee/robusta/add_juice(var/loc, var/potency = 20) +/obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user) ..() - reagents.add_reagent("morphine", 1 + round((potency / 20), 1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco - seed = /obj/item/seeds/tobacco_seed - name = "tobacco leaves" - desc = "Dry them out to make some smokes." - icon_state = "tobacco_leaves" - filling_color = "#008000" - -/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1 + round((potency / 40), 1)) - reagents.add_reagent("nicotine", 1 + round((potency / 40), 1)) - - -/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco/space - seed = /obj/item/seeds/tobacco_space_seed - name = "space tobacco leaves" - desc = "Dry them out to make some space-smokes." - icon_state = "stobacco_leaves" - filling_color = "#008000" + var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow) + if(G) + set_light(0) + user.set_light(G.get_lum(seed)) -/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco/space/add_juice() +/obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user) ..() - reagents.add_reagent("dexalin", 1 + round((potency / 20), 1)) - reagents.add_reagent("nicotine", 1 + round((potency / 20), 1)) + var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow) + if(G) + user.set_light(-G.get_lum(seed)) + set_light(G.get_lum(seed)) -/obj/item/weapon/reagent_containers/food/snacks/grown/tea //abstract type - seed = /obj/item/seeds/tea_aspera_seed - name = "Tea tips" - desc = "These aromatic tips of the tea plant can be dried to make tea." - icon_state = "tea_aspera_leaves" -/obj/item/weapon/reagent_containers/food/snacks/grown/tea/add_juice() - if(..()) - reagents.add_reagent("teapowder", 1 + round((potency / 10), 2)) - reagents.add_reagent("vitamin", 1 + round((potency / 25), 1)) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tea/aspera - seed = /obj/item/seeds/tea_aspera_seed - name = "Tea Aspera tips" - filling_color = "#008000" - grind_reagents = list("teapowder" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tea/astra - seed = /obj/item/seeds/tea_astra_seed - name = "Tea Astra tips" - desc = "These aromatic tips of the tea plant can be dried to make tea." - icon_state = "tea_astra_leaves" - filling_color = "#4582B4" - grind_reagents = list("teapowder" = 0, "tricordrazine" = 0) - -/obj/item/weapon/reagent_containers/food/snacks/grown/tea/astra/add_juice() - ..() - reagents.add_reagent("tricordrazine", 1 + round((potency / 20), 1)) +// For item-containing growns such as eggy or gatfruit +/obj/item/weapon/reagent_containers/food/snacks/grown/shell/attack_self(mob/user as mob) + user.unEquip(src) + if(trash) + var/obj/item/weapon/T + if(ispath(trash, /obj/item/weapon/grown) || ispath(trash, /obj/item/weapon/reagent_containers/food/snacks/grown)) + T = new trash(user.loc, seed) + else + T = new trash(user.loc) + user.put_in_hands(T) + user << "You open [src]\'s shell, revealing \a [T]." + qdel(src) diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm new file mode 100644 index 0000000000000..65a6a33772d5b --- /dev/null +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -0,0 +1,49 @@ +// Ambrosia - base type +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia + seed = /obj/item/seeds/ambrosia + name = "ambrosia branch" + desc = "This is a plant." + icon_state = "ambrosiavulgaris" + slot_flags = SLOT_HEAD + filling_color = "#008000" + bitesize_mod = 2 + +// Ambrosia Vulgaris +/obj/item/seeds/ambrosia + name = "pack of ambrosia vulgaris seeds" + desc = "These seeds grow into common ambrosia, a plant grown by and from medicine." + icon_state = "seed-ambrosiavulgaris" + species = "ambrosiavulgaris" + plantname = "Ambrosia Vulgaris" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris + lifespan = 60 + endurance = 25 + yield = 6 + potency = 5 + icon_dead = "ambrosia-dead" + mutatelist = list(/obj/item/seeds/ambrosia/deus) + reagents_add = list("space_drugs" = 0.15, "salglu_solution" = 0.25, "vitamin" = 0.04, "nutriment" = 0, "toxin" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris + seed = /obj/item/seeds/ambrosia + name = "ambrosia vulgaris branch" + desc = "This is a plant containing various healing chemicals." + +// Ambrosia Deus +/obj/item/seeds/ambrosia/deus + name = "pack of ambrosia deus seeds" + desc = "These seeds grow into ambrosia deus. Could it be the food of the gods..?" + icon_state = "seed-ambrosiadeus" + species = "ambrosiadeus" + plantname = "Ambrosia Deus" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus + mutatelist = list() + reagents_add = list("omnizine" = 0.15, "synaptizine" = 0.15, "space_drugs" = 0.1, "vitamin" = 0.04, "nutriment" = 0) + rarity = 40 + +/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus + seed = /obj/item/seeds/ambrosia/deus + name = "ambrosia deus branch" + desc = "Eating this makes you feel immortal!" + icon_state = "ambrosiadeus" + filling_color = "#008B8B" \ No newline at end of file diff --git a/code/modules/hydroponics/grown/apple.dm b/code/modules/hydroponics/grown/apple.dm new file mode 100644 index 0000000000000..5deafac82fbb6 --- /dev/null +++ b/code/modules/hydroponics/grown/apple.dm @@ -0,0 +1,54 @@ +// Apple +/obj/item/seeds/apple + name = "pack of apple seeds" + desc = "These seeds grow into apple trees." + icon_state = "seed-apple" + species = "apple" + plantname = "Apple Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/apple + lifespan = 55 + endurance = 35 + yield = 5 + icon_grow = "apple-grow" + icon_dead = "apple-dead" + mutatelist = list(/obj/item/seeds/apple/gold) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/apple + seed = /obj/item/seeds/apple + name = "apple" + desc = "It's a little piece of Eden." + icon_state = "apple" + filling_color = "#FF4500" + bitesize = 100 // Always eat the apple in one bite + +// Posioned Apple +/obj/item/seeds/apple/poisoned + product = /obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned + mutatelist = list() + reagents_add = list("cyanide" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1) + rarity = 50 // Source of cyanide, and hard (almost impossible) to obtain normally. + +/obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned + seed = /obj/item/seeds/apple/poisoned + +// Gold Apple +/obj/item/seeds/apple/gold + name = "pack of golden apple seeds" + desc = "These seeds grow into golden apple trees. Good thing there are no firebirds in space." + icon_state = "seed-goldapple" + species = "goldapple" + plantname = "Golden Apple Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold + maturation = 10 + production = 10 + mutatelist = list() + reagents_add = list("gold" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1) + rarity = 40 // Alchemy! + +/obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold + seed = /obj/item/seeds/apple/gold + name = "golden apple" + desc = "Emblazoned upon the apple is the word 'Kallisti'." + icon_state = "goldapple" + filling_color = "#FFD700" \ No newline at end of file diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm new file mode 100644 index 0000000000000..a439da93253b0 --- /dev/null +++ b/code/modules/hydroponics/grown/banana.dm @@ -0,0 +1,118 @@ +// Banana +/obj/item/seeds/banana + name = "pack of banana seeds" + desc = "They're seeds that grow into banana trees. When grown, keep away from clown." + icon_state = "seed-banana" + species = "banana" + plantname = "Banana Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/banana + lifespan = 50 + endurance = 30 + icon_dead = "banana-dead" + genes = list(/datum/plant_gene/trait/slip) + mutatelist = list(/obj/item/seeds/banana/mime, /obj/item/seeds/banana/bluespace) + reagents_add = list("banana" = 0.1, "vitamin" = 0.04, "nutriment" = 0.02) + +/obj/item/weapon/reagent_containers/food/snacks/grown/banana + seed = /obj/item/seeds/banana + name = "banana" + desc = "It's an excellent prop for a clown." + icon_state = "banana" + item_state = "banana" + trash = /obj/item/weapon/grown/bananapeel + filling_color = "#FFFF00" + bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user) + user.visible_message("[user] is aiming the [src.name] at themself! It looks like \he's trying to commit suicide.") + playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1) + sleep(25) + if(!user) + return (OXYLOSS) + user.say("BANG!") + sleep(25) + if(!user) + return (OXYLOSS) + user.visible_message("[user] laughs so hard they begin to suffocate!") + return (OXYLOSS) + +/obj/item/weapon/grown/bananapeel + seed = /obj/item/seeds/banana + name = "banana peel" + desc = "A peel from a banana." + icon_state = "banana_peel" + item_state = "banana_peel" + w_class = 1 + throwforce = 0 + throw_speed = 3 + throw_range = 7 + +/obj/item/weapon/grown/bananapeel/suicide_act(mob/user) + user.visible_message("[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.") + playsound(loc, 'sound/misc/slip.ogg', 50, 1, -1) + return (BRUTELOSS) + + +// Mimana - invisible sprites are totally a feature! +/obj/item/seeds/banana/mime + name = "pack of mimana seeds" + desc = "They're seeds that grow into mimana trees. When grown, keep away from mime." + icon_state = "seed-mimana" + species = "mimana" + plantname = "Mimana Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/banana/mime + growthstages = 4 + mutatelist = list() + reagents_add = list("nothing" = 0.1, "mutetoxin" = 0.1, "nutriment" = 0.02) + rarity = 15 + +/obj/item/weapon/reagent_containers/food/snacks/grown/banana/mime + seed = /obj/item/seeds/banana/mime + name = "mimana" + desc = "It's an excellent prop for a mime." + icon_state = "mimana" + trash = /obj/item/weapon/grown/bananapeel/mimanapeel + filling_color = "#FFFFEE" + +/obj/item/weapon/grown/bananapeel/mimanapeel + seed = /obj/item/seeds/banana/mime + name = "mimana peel" + desc = "A mimana peel." + icon_state = "mimana_peel" + +// Bluespace Banana +/obj/item/seeds/banana/bluespace + name = "pack of bluespace banana seeds" + desc = "They're seeds that grow into bluespace banana trees. When grown, keep away from bluespace clown." + icon_state = "seed-banana-blue" + species = "bluespacebanana" + icon_grow = "banana-grow" + plantname = "Bluespace Banana Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/banana/bluespace + mutatelist = list() + genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/teleport) + reagents_add = list("singulo" = 0.2, "banana" = 0.1, "vitamin" = 0.04, "nutriment" = 0.02) + rarity = 30 + +/obj/item/weapon/reagent_containers/food/snacks/grown/banana/bluespace + seed = /obj/item/seeds/banana/bluespace + name = "bluespace banana" + icon_state = "banana_blue" + trash = /obj/item/weapon/grown/bananapeel/bluespace + filling_color = "#0000FF" + +/obj/item/weapon/grown/bananapeel/bluespace + seed = /obj/item/seeds/banana/bluespace + name = "bluespace banana peel" + desc = "A peel from a bluespace banana." + icon_state = "banana_peel_blue" + + +// Other +/obj/item/weapon/grown/bananapeel/specialpeel //used by /obj/item/clothing/shoes/clown_shoes/banana_shoes + name = "synthesized banana peel" + desc = "A synthetic banana peel." + +/obj/item/weapon/grown/bananapeel/specialpeel/Crossed(AM) + if(..()) + qdel(src) \ No newline at end of file diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm new file mode 100644 index 0000000000000..ac7def35c741b --- /dev/null +++ b/code/modules/hydroponics/grown/beans.dm @@ -0,0 +1,46 @@ +// Soybeans +/obj/item/seeds/soya + name = "pack of soybean seeds" + desc = "These seeds grow into soybean plants." + icon_state = "seed-soybean" + species = "soybean" + plantname = "Soybean Plants" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans + maturation = 4 + production = 4 + potency = 15 + growthstages = 4 + icon_grow = "soybean-grow" + icon_dead = "soybean-dead" + mutatelist = list(/obj/item/seeds/soya/koi) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05) + +/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans + seed = /obj/item/seeds/soya + name = "soybeans" + desc = "It's pretty bland, but oh the possibilities..." + gender = PLURAL + icon_state = "soybeans" + filling_color = "#F0E68C" + bitesize_mod = 2 + +// Koibean +/obj/item/seeds/soya/koi + name = "pack of koibean seeds" + desc = "These seeds grow into koibean plants." + icon_state = "seed-koibean" + species = "koibean" + plantname = "Koibean Plants" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/koibeans + potency = 10 + mutatelist = list() + reagents_add = list("carpotoxin" = 0.05, "vitamin" = 0.04, "nutriment" = 0.05) + rarity = 20 + +/obj/item/weapon/reagent_containers/food/snacks/grown/koibeans + seed = /obj/item/seeds/soya/koi + name = "koibean" + desc = "Something about these seems fishy." + icon_state = "koibeans" + filling_color = "#F0E68C" + bitesize_mod = 2 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm new file mode 100644 index 0000000000000..529f6914820ab --- /dev/null +++ b/code/modules/hydroponics/grown/berries.dm @@ -0,0 +1,180 @@ +// Berries +/obj/item/seeds/berry + name = "pack of berry seeds" + desc = "These seeds grow into berry bushes." + icon_state = "seed-berry" + species = "berry" + plantname = "Berry Bush" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/berries + lifespan = 20 + maturation = 5 + production = 5 + yield = 2 + icon_grow = "berry-grow" // Uses one growth icons set for all the subtypes + icon_dead = "berry-dead" // Same for the dead icon + mutatelist = list(/obj/item/seeds/berry/glow, /obj/item/seeds/berry/poison) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/berries + seed = /obj/item/seeds/berry + name = "bunch of berries" + desc = "Nutritious!" + icon_state = "berrypile" + gender = PLURAL + filling_color = "#FF00FF" + bitesize_mod = 2 + +// Poison Berries +/obj/item/seeds/berry/poison + name = "pack of poison-berry seeds" + desc = "These seeds grow into poison-berry bushes." + icon_state = "seed-poisonberry" + species = "poisonberry" + plantname = "Poison-Berry Bush" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison + mutatelist = list(/obj/item/seeds/berry/death) + reagents_add = list("toxin" = 0.25, "vitamin" = 0.04, "nutriment" = 0.1) + rarity = 10 // Mildly poisonous berries are common in reality + +/obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison + seed = /obj/item/seeds/berry/poison + name = "bunch of poison-berries" + desc = "Taste so good, you could die!" + icon_state = "poisonberrypile" + filling_color = "#C71585" + +// Death Berries +/obj/item/seeds/berry/death + name = "pack of death-berry seeds" + desc = "These seeds grow into death berries." + icon_state = "seed-deathberry" + species = "deathberry" + plantname = "Death Berry Bush" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/berries/death + lifespan = 30 + potency = 50 + mutatelist = list() + reagents_add = list("lexorin" = 0.25, "toxin" = 0.35, "vitamin" = 0.04, "nutriment" = 0.1) + rarity = 30 + +/obj/item/weapon/reagent_containers/food/snacks/grown/berries/death + seed = /obj/item/seeds/berry/death + name = "bunch of death-berries" + desc = "Taste so good, you could die!" + icon_state = "deathberrypile" + filling_color = "#708090" + +// Glow Berries +/obj/item/seeds/berry/glow + name = "pack of glow-berry seeds" + desc = "These seeds grow into glow-berry bushes." + icon_state = "seed-glowberry" + species = "glowberry" + plantname = "Glow-Berry Bush" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/berries/glow + lifespan = 30 + endurance = 25 + mutatelist = list() + genes = list(/datum/plant_gene/trait/glow/berry) + reagents_add = list("uranium" = 0.25, "vitamin" = 0.04, "nutriment" = 0.1) + rarity = 20 + +/obj/item/weapon/reagent_containers/food/snacks/grown/berries/glow + seed = /obj/item/seeds/berry/glow + name = "bunch of glow-berries" + desc = "Nutritious!" + icon_state = "glowberrypile" + filling_color = "#7CFC00" + +// Cherries +/obj/item/seeds/cherry + name = "pack of cherry pits" + desc = "Careful not to crack a tooth on one... That'd be the pits." + icon_state = "seed-cherry" + species = "cherry" + plantname = "Cherry Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/cherries + lifespan = 35 + endurance = 35 + maturation = 5 + production = 5 + growthstages = 5 + icon_grow = "cherry-grow" + icon_dead = "cherry-dead" + mutatelist = list(/obj/item/seeds/cherry/blue) + reagents_add = list("nutriment" = 0.07, "sugar" = 0.07) + +/obj/item/weapon/reagent_containers/food/snacks/grown/cherries + seed = /obj/item/seeds/cherry + name = "cherries" + desc = "Great for toppings!" + icon_state = "cherry" + gender = PLURAL + filling_color = "#FF0000" + bitesize_mod = 2 + +// Blue Cherries +/obj/item/seeds/cherry/blue + name = "pack of blue cherry pits" + desc = "The blue kind of cherries" + icon_state = "seed-bluecherry" + species = "bluecherry" + plantname = "Blue Cherry Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries + mutatelist = list() + rarity = 10 + +/obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries + seed = /obj/item/seeds/cherry/blue + name = "blue cherries" + desc = "They're cherries that are blue." + icon_state = "bluecherry" + filling_color = "#6495ED" + bitesize_mod = 2 + + +// Grapes +/obj/item/seeds/grape + name = "pack of grape seeds" + desc = "These seeds grow into grape vines." + icon_state = "seed-grapes" + species = "grape" + plantname = "Grape Vine" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/grapes + lifespan = 50 + endurance = 25 + maturation = 3 + production = 5 + yield = 4 + growthstages = 2 + icon_grow = "grape-grow" + icon_dead = "grape-dead" + mutatelist = list(/obj/item/seeds/grape/green) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1, "sugar" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/grapes + seed = /obj/item/seeds/grape + name = "bunch of grapes" + desc = "Nutritious!" + icon_state = "grapes" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/no_raisin + filling_color = "#FF1493" + bitesize_mod = 2 + +// Green Grapes +/obj/item/seeds/grape/green + name = "pack of green grape seeds" + desc = "These seeds grow into green-grape vines." + icon_state = "seed-greengrapes" + species = "greengrape" + plantname = "Green-Grape Vine" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/grapes/green + reagents_add = list("salglu_solution" = 0.25, "vitamin" = 0.04, "nutriment" = 0.1, "sugar" = 0.1) + // No rarity: technically it's a beneficial mutant, but it's not exactly "new"... + mutatelist = list() + +/obj/item/weapon/reagent_containers/food/snacks/grown/grapes/green + seed = /obj/item/seeds/grape/green + name = "bunch of green grapes" + icon_state = "greengrapes" + filling_color = "#7FFF00" \ No newline at end of file diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm new file mode 100644 index 0000000000000..8b6274c4e0973 --- /dev/null +++ b/code/modules/hydroponics/grown/cereals.dm @@ -0,0 +1,63 @@ +// Wheat +/obj/item/seeds/wheat + name = "pack of wheat seeds" + desc = "These may, or may not, grow into wheat." + icon_state = "seed-wheat" + species = "wheat" + plantname = "Wheat Stalks" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat + production = 1 + yield = 4 + potency = 15 + oneharvest = 1 + icon_dead = "wheat-dead" + mutatelist = list(/obj/item/seeds/wheat/oat) + reagents_add = list("nutriment" = 0.04) + +/obj/item/weapon/reagent_containers/food/snacks/grown/wheat + seed = /obj/item/seeds/wheat + name = "wheat" + desc = "Sigh... wheat... a-grain?" + gender = PLURAL + icon_state = "wheat" + filling_color = "#F0E68C" + bitesize_mod = 2 + +// Oat +/obj/item/seeds/wheat/oat + name = "pack of oat seeds" + desc = "These may, or may not, grow into oat." + icon_state = "seed-oat" + species = "oat" + plantname = "Oat Stalks" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/oat + mutatelist = list() + +/obj/item/weapon/reagent_containers/food/snacks/grown/oat + seed = /obj/item/seeds/wheat/oat + name = "oat" + desc = "Eat oats, do squats." + gender = PLURAL + icon_state = "oat" + filling_color = "#556B2F" + bitesize_mod = 2 + +// Rice +/obj/item/seeds/wheat/rice + name = "pack of rice seeds" + desc = "These may, or may not, grow into rice." + icon_state = "seed-rice" + species = "rice" + plantname = "Rice Stalks" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/rice + mutatelist = list() + growthstages = 3 + +/obj/item/weapon/reagent_containers/food/snacks/grown/rice + seed = /obj/item/seeds/wheat/rice + name = "rice" + desc = "Rice to meet you." + gender = PLURAL + icon_state = "rice" + filling_color = "#FAFAD2" + bitesize_mod = 2 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm new file mode 100644 index 0000000000000..707b92e4ee87e --- /dev/null +++ b/code/modules/hydroponics/grown/chili.dm @@ -0,0 +1,91 @@ +// Chili +/obj/item/seeds/chili + name = "pack of chili seeds" + desc = "These seeds grow into chili plants. HOT! HOT! HOT!" + icon_state = "seed-chili" + species = "chili" + plantname = "Chili Plants" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/chili + lifespan = 20 + maturation = 5 + production = 5 + yield = 4 + potency = 20 + icon_grow = "chili-grow" // Uses one growth icons set for all the subtypes + icon_dead = "chili-dead" // Same for the dead icon + mutatelist = list(/obj/item/seeds/chili/ice, /obj/item/seeds/chili/ghost) + reagents_add = list("capsaicin" = 0.25, "vitamin" = 0.04, "nutriment" = 0.04) + +/obj/item/weapon/reagent_containers/food/snacks/grown/chili + seed = /obj/item/seeds/chili + name = "chili" + desc = "It's spicy! Wait... IT'S BURNING ME!!" + icon_state = "chilipepper" + filling_color = "#FF0000" + bitesize_mod = 2 + +// Ice Chili +/obj/item/seeds/chili/ice + name = "pack of ice pepper seeds" + desc = "These seeds grow into ice pepper plants." + icon_state = "seed-icepepper" + species = "chiliice" + plantname = "Ice Pepper Plants" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/icepepper + lifespan = 25 + maturation = 4 + production = 4 + rarity = 20 + mutatelist = list() + reagents_add = list("frostoil" = 0.25, "vitamin" = 0.02, "nutriment" = 0.02) + +/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper + seed = /obj/item/seeds/chili/ice + name = "ice pepper" + desc = "It's a mutant strain of chili" + icon_state = "icepepper" + filling_color = "#0000CD" + bitesize_mod = 2 + +// Ghost Chili +/obj/item/seeds/chili/ghost + name = "pack of ghost chili seeds" + desc = "These seeds grow into a chili said to be the hottest in the galaxy." + icon_state = "seed-chilighost" + species = "chilighost" + plantname = "chilighost" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili + endurance = 10 + maturation = 10 + production = 10 + yield = 3 + rarity = 20 + mutatelist = list() + reagents_add = list("condensedcapsaicin" = 0.3, "capsaicin" = 0.55, "nutriment" = 0.04) + +/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili + seed = /obj/item/seeds/chili/ghost + name = "ghost chili" + desc = "It seems to be vibrating gently." + icon_state = "ghostchilipepper" + var/mob/held_mob + filling_color = "#F8F8FF" + bitesize_mod = 4 + +/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/attack_hand(mob/user) + ..() + if( istype(src.loc, /mob) ) + held_mob = src.loc + SSobj.processing |= src + +/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/process() + if(held_mob && src.loc == held_mob) + if( (held_mob.l_hand == src) || (held_mob.r_hand == src)) + if(hasvar(held_mob,"gloves") && held_mob:gloves) + return + held_mob.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT + if(prob(10)) + held_mob << "Your hand holding [src] burns!" + else + held_mob = null + ..() \ No newline at end of file diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm new file mode 100644 index 0000000000000..cec228a8f4ada --- /dev/null +++ b/code/modules/hydroponics/grown/citrus.dm @@ -0,0 +1,119 @@ +// Citrus - base type +/obj/item/weapon/reagent_containers/food/snacks/grown/citrus + seed = /obj/item/seeds/lime + name = "citrus" + desc = "It's so sour, your face will twist." + icon_state = "lime" + bitesize_mod = 2 + +// Lime +/obj/item/seeds/lime + name = "pack of lime seeds" + desc = "These are very sour seeds." + icon_state = "seed-lime" + species = "lime" + plantname = "Lime Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lime + lifespan = 55 + endurance = 50 + yield = 4 + potency = 15 + mutatelist = list(/obj/item/seeds/orange) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05) + +/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lime + seed = /obj/item/seeds/lime + name = "lime" + desc = "It's so sour, your face will twist." + icon_state = "lime" + filling_color = "#00FF00" + +// Orange +/obj/item/seeds/orange + name = "pack of orange seeds" + desc = "Sour seeds." + icon_state = "seed-orange" + species = "orange" + plantname = "Orange Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange + lifespan = 60 + endurance = 50 + yield = 5 + potency = 20 + icon_grow = "lime-grow" + icon_dead = "lime-dead" + mutatelist = list(/obj/item/seeds/lime) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05) + +/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange + seed = /obj/item/seeds/orange + name = "orange" + desc = "It's an tangy fruit." + icon_state = "orange" + filling_color = "#FFA500" + +// Lemon +/obj/item/seeds/lemon + name = "pack of lemon seeds" + desc = "These are sour seeds." + icon_state = "seed-lemon" + species = "lemon" + plantname = "Lemon Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lemon + lifespan = 55 + endurance = 45 + yield = 4 + icon_grow = "lime-grow" + icon_dead = "lime-dead" + mutatelist = list(/obj/item/seeds/cash) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05) + +/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lemon + seed = /obj/item/seeds/lemon + name = "lemon" + desc = "When life gives you lemons, be grateful they aren't limes." + icon_state = "lemon" + filling_color = "#FFD700" + +// Money Lemon +/obj/item/seeds/cash + name = "pack of money seeds" + desc = "When life gives you lemons, mutate them into cash." + icon_state = "seed-cash" + species = "cashtree" + plantname = "Money Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/shell/moneyfruit + icon_grow = "lime-grow" + icon_dead = "lime-dead" + lifespan = 55 + endurance = 45 + yield = 4 + reagents_add = list("nutriment" = 0.05) + rarity = 50 // Nanotrasen approves... + +/obj/item/weapon/reagent_containers/food/snacks/grown/shell/moneyfruit + seed = /obj/item/seeds/cash + name = "Money Fruit" + desc = "Looks like a lemon with someone buldging from the inside." + icon_state = "moneyfruit" + bitesize_mod = 2 + +/obj/item/weapon/reagent_containers/food/snacks/grown/shell/moneyfruit/add_juice() + ..() + switch(seed.potency) + if(0 to 10) + trash = /obj/item/weapon/spacecash + if(11 to 20) + trash = /obj/item/weapon/spacecash/c10 + if(21 to 30) + trash = /obj/item/weapon/spacecash/c20 + if(31 to 40) + trash = /obj/item/weapon/spacecash/c50 + if(41 to 50) + trash = /obj/item/weapon/spacecash/c100 + if(51 to 60) + trash = /obj/item/weapon/spacecash/c200 + if(61 to 80) + trash = /obj/item/weapon/spacecash/c500 + else + trash = /obj/item/weapon/spacecash/c1000 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm new file mode 100644 index 0000000000000..54ee9db28bc1f --- /dev/null +++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm @@ -0,0 +1,43 @@ +// Cocoa Pod +/obj/item/seeds/cocoapod + name = "pack of cocoa pod seeds" + desc = "These seeds grow into cacao trees. They look fattening." //SIC: cocoa is the seeds. The trees are spelled cacao. + icon_state = "seed-cocoapod" + species = "cocoapod" + plantname = "Cocao Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod + lifespan = 20 + maturation = 5 + production = 5 + yield = 2 + growthstages = 5 + icon_grow = "cocoapod-grow" + icon_dead = "cocoapod-dead" + mutatelist = list(/obj/item/seeds/cocoapod/vanillapod) + reagents_add = list("cocoa" = 0.25, "nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod + seed = /obj/item/seeds/cocoapod + name = "cocoa pod" + desc = "Fattening... Mmmmm... chucklate." + icon_state = "cocoapod" + filling_color = "#FFD700" + bitesize_mod = 2 + +// Vanilla Pod +/obj/item/seeds/cocoapod/vanillapod + name = "pack of vanilla pod seeds" + desc = "These seeds grow into vanilla trees. They look fattening." + icon_state = "seed-vanillapod" + species = "vanillapod" + plantname = "Vanilla Tree" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/vanillapod + mutatelist = list() + reagents_add = list("vanilla" = 0.25, "nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/vanillapod + seed = /obj/item/seeds/cocoapod/vanillapod + name = "vanilla pod" + desc = "Fattening... Mmmmm... vanilla." + icon_state = "vanillapod" + filling_color = "#FFD700" \ No newline at end of file diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm new file mode 100644 index 0000000000000..8121b2efe0bb5 --- /dev/null +++ b/code/modules/hydroponics/grown/corn.dm @@ -0,0 +1,83 @@ +// Corn +/obj/item/seeds/corn + name = "pack of corn seeds" + desc = "I don't mean to sound corny..." + icon_state = "seed-corn" + species = "corn" + plantname = "Corn Stalks" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/corn + maturation = 8 + oneharvest = 1 + potency = 20 + growthstages = 3 + icon_grow = "corn-grow" // Uses one growth icons set for all the subtypes + icon_dead = "corn-dead" // Same for the dead icon + mutatelist = list(/obj/item/seeds/corn/snapcorn) + reagents_add = list("cornoil" = 0.1, "vitamin" = 0.04, "nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/corn + seed = /obj/item/seeds/corn + name = "ear of corn" + desc = "Needs some butter!" + icon_state = "corn" + cooked_type = /obj/item/weapon/reagent_containers/food/snacks/popcorn + filling_color = "#FFFF00" + trash = /obj/item/weapon/grown/corncob + bitesize_mod = 2 + +/obj/item/weapon/grown/corncob + name = "corn cob" + desc = "A reminder of meals gone by." + icon_state = "corncob" + item_state = "corncob" + w_class = 1 + throwforce = 0 + throw_speed = 3 + throw_range = 7 + +/obj/item/weapon/grown/corncob/attackby(obj/item/weapon/grown/W, mob/user, params) + ..() + if(is_sharp(W)) + user << "You use [W] to fashion a pipe out of the corn cob!" + new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc) + user.unEquip(src) + qdel(src) + return + +// Snapcorn +/obj/item/seeds/corn/snapcorn + name = "pack of snapcorn seeds" + desc = "Oh snap!" + icon_state = "seed-snapcorn" + species = "snapcorn" + plantname = "Snapcorn Stalks" + product = /obj/item/weapon/grown/snapcorn + mutatelist = list() + rarity = 10 + +/obj/item/weapon/grown/snapcorn + seed = /obj/item/seeds/corn/snapcorn + name = "snap corn" + desc = "A cob with snap pops" + icon_state = "snapcorn" + item_state = "corncob" + w_class = 1 + throwforce = 0 + throw_speed = 3 + throw_range = 7 + var/snap_pops = 1 + +/obj/item/weapon/grown/snapcorn/add_juice() + ..() + snap_pops = max(round(seed.potency/8), 1) + +/obj/item/weapon/grown/snapcorn/attack_self(mob/user) + ..() + user << "You pick up a snap pops from the cob." + var/obj/item/toy/snappop/S = new /obj/item/toy/snappop(user.loc) + if(ishuman(user)) + user.put_in_hands(S) + snap_pops -= 1 + if(!snap_pops) + new /obj/item/weapon/grown/corncob(user.loc) + qdel(src) \ No newline at end of file diff --git a/code/modules/hydroponics/grown/eggplant.dm b/code/modules/hydroponics/grown/eggplant.dm new file mode 100644 index 0000000000000..f99d07ff4d72d --- /dev/null +++ b/code/modules/hydroponics/grown/eggplant.dm @@ -0,0 +1,42 @@ +// Eggplant +/obj/item/seeds/eggplant + name = "pack of eggplant seeds" + desc = "These seeds grow to produce berries that look nothing like eggs." + icon_state = "seed-eggplant" + species = "eggplant" + plantname = "Eggplants" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant + yield = 2 + potency = 20 + icon_grow = "eggplant-grow" + icon_dead = "eggplant-dead" + mutatelist = list(/obj/item/seeds/eggplant/eggy) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant + seed = /obj/item/seeds/eggplant + name = "eggplant" + desc = "Maybe there's a chicken inside?" + icon_state = "eggplant" + filling_color = "#800080" + bitesize_mod = 2 + +// Egg-Plant +/obj/item/seeds/eggplant/eggy + desc = "These seeds grow to produce berries that look a lot like eggs." + icon_state = "seed-eggy" + species = "eggy" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy + lifespan = 75 + production = 12 + mutatelist = list() + reagents_add = list("nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy + seed = /obj/item/seeds/eggplant/eggy + name = "Egg-plant" + desc = "There MUST be a chicken inside." + icon_state = "eggyplant" + trash = /obj/item/weapon/reagent_containers/food/snacks/egg + filling_color = "#F8F8FF" + bitesize_mod = 2 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm new file mode 100644 index 0000000000000..8687fe9218907 --- /dev/null +++ b/code/modules/hydroponics/grown/flowers.dm @@ -0,0 +1,199 @@ +// Poppy +/obj/item/seeds/poppy + name = "pack of poppy seeds" + desc = "These seeds grow into poppies." + icon_state = "seed-poppy" + species = "poppy" + plantname = "Poppy Plants" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/poppy + endurance = 10 + maturation = 8 + yield = 6 + potency = 20 + oneharvest = 1 + growthstages = 3 + icon_grow = "poppy-grow" + icon_dead = "poppy-dead" + mutatelist = list(/obj/item/seeds/poppy/geranium, /obj/item/seeds/poppy/lily) + reagents_add = list("hotline" = 0.05, "nutriment" = 0.05) + +/obj/item/weapon/reagent_containers/food/snacks/grown/poppy + seed = /obj/item/seeds/poppy + name = "poppy" + desc = "Long-used as a symbol of rest, peace, and death." + icon_state = "poppy" + slot_flags = SLOT_HEAD + filling_color = "#FF6347" + bitesize_mod = 3 + +// Lily +/obj/item/seeds/poppy/lily + name = "pack of lily seeds" + desc = "These seeds grow into lilies." + icon_state = "seed-lily" + species = "lily" + plantname = "Lily Plants" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/poppy/lily + mutatelist = list() + +/obj/item/weapon/reagent_containers/food/snacks/grown/poppy/lily + seed = /obj/item/seeds/poppy/lily + name = "lily" + desc = "A beautiful orange flower" + icon_state = "lily" + filling_color = "#FFA500" + +// Geranium +/obj/item/seeds/poppy/geranium + name = "pack of geranium seeds" + desc = "These seeds grow into geranium." + icon_state = "seed-geranium" + species = "geranium" + plantname = "Geranium Plants" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/poppy/geranium + mutatelist = list() + +/obj/item/weapon/reagent_containers/food/snacks/grown/poppy/geranium + seed = /obj/item/seeds/poppy/geranium + name = "geranium" + desc = "A beautiful blue flower" + icon_state = "geranium" + filling_color = "#008B8B" + + +// Harebell +/obj/item/seeds/harebell + name = "pack of harebell seeds" + desc = "These seeds grow into pretty little flowers." + icon_state = "seed-harebell" + species = "harebell" + plantname = "Harebells" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/harebell + lifespan = 100 + endurance = 20 + maturation = 7 + production = 1 + yield = 2 + potency = 30 + oneharvest = 1 + growthstages = 4 + plant_type = PLANT_WEED + reagents_add = list("nutriment" = 0.04) + +/obj/item/weapon/reagent_containers/food/snacks/grown/harebell + seed = /obj/item/seeds/harebell + 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" + slot_flags = SLOT_HEAD + filling_color = "#E6E6FA" + bitesize_mod = 3 + + +// Sunflower +/obj/item/seeds/sunflower + name = "pack of sunflower seeds" + desc = "These seeds grow into sunflowers." + icon_state = "seed-sunflower" + species = "sunflower" + plantname = "Sunflowers" + product = /obj/item/weapon/grown/sunflower + endurance = 20 + production = 2 + yield = 2 + oneharvest = 1 + growthstages = 3 + icon_grow = "sunflower-grow" + icon_dead = "sunflower-dead" + mutatelist = list(/obj/item/seeds/sunflower/moonflower, /obj/item/seeds/sunflower/novaflower) + reagents_add = list("cornoil" = 0.08, "nutriment" = 0.04) + +/obj/item/weapon/grown/sunflower // FLOWER POWER! + seed = /obj/item/seeds/sunflower + name = "sunflower" + desc = "It's beautiful! A certain person might beat you to death if you trample these." + icon_state = "sunflower" + damtype = "fire" + force = 0 + slot_flags = SLOT_HEAD + throwforce = 0 + w_class = 1 + throw_speed = 1 + throw_range = 3 + +/obj/item/weapon/grown/sunflower/attack(mob/M, mob/user) + M << " [user] smacks you with a sunflower!FLOWER POWER" + user << "Your sunflower's FLOWER POWERstrikes [M]" + +// Moonflower +/obj/item/seeds/sunflower/moonflower + name = "pack of moonflower seeds" + desc = "These seeds grow into moonflowers." + icon_state = "seed-moonflower" + species = "moonflower" + plantname = "Moonflowers" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/moonflower + mutatelist = list() + reagents_add = list("moonshine" = 0.1, "vitamin" = 0.02, "nutriment" = 0.02) + rarity = 15 + +/obj/item/weapon/reagent_containers/food/snacks/grown/moonflower + seed = /obj/item/seeds/sunflower/moonflower + name = "moonflower" + desc = "Store in a location at least 50 yards away from werewolves." + icon_state = "moonflower" + slot_flags = SLOT_HEAD + filling_color = "#E6E6FA" + bitesize_mod = 2 + +// Novaflower +/obj/item/seeds/sunflower/novaflower + name = "pack of novaflower seeds" + desc = "These seeds grow into novaflowers." + icon_state = "seed-novaflower" + species = "novaflower" + plantname = "Novaflowers" + product = /obj/item/weapon/grown/novaflower + mutatelist = list() + reagents_add = list("condensedcapsaicin" = 0.25, "capsaicin" = 0.3, "nutriment" = 0) + rarity = 20 + +/obj/item/weapon/grown/novaflower + seed = /obj/item/seeds/sunflower/novaflower + name = "novaflower" + desc = "These beautiful flowers have a crisp smokey scent, like a summer bonfire." + icon_state = "novaflower" + damtype = "fire" + force = 0 + slot_flags = SLOT_HEAD + throwforce = 0 + w_class = 1 + throw_speed = 1 + throw_range = 3 + attack_verb = list("roasted", "scorched", "burned") + +/obj/item/weapon/grown/novaflower/add_juice() + ..() + force = round((5 + seed.potency / 5), 1) + +/obj/item/weapon/grown/novaflower/attack(mob/living/carbon/M, mob/user) + if(!..()) return + if(istype(M, /mob/living)) + M << "You are lit on fire from the intense heat of the [name]!" + M.adjust_fire_stacks(seed.potency / 20) + M.IgniteMob() + +/obj/item/weapon/grown/novaflower/afterattack(atom/A as mob|obj, mob/user,proximity) + if(!proximity) return + if(force > 0) + force -= rand(1, (force / 3) + 1) + else + usr << "All the petals have fallen off the [name] from violent whacking!" + usr.unEquip(src) + qdel(src) + +/obj/item/weapon/grown/novaflower/pickup(mob/living/carbon/human/user) + ..() + if(!user.gloves) + user << "The [name] burns your bare hand!" + user.adjustFireLoss(rand(1, 5)) \ No newline at end of file diff --git a/code/modules/hydroponics/grown/grass_carpet.dm b/code/modules/hydroponics/grown/grass_carpet.dm new file mode 100644 index 0000000000000..a4f3e55b60467 --- /dev/null +++ b/code/modules/hydroponics/grown/grass_carpet.dm @@ -0,0 +1,81 @@ +// Grass +/obj/item/seeds/grass + name = "pack of grass seeds" + desc = "These seeds grow into grass. Yummy!" + icon_state = "seed-grass" + species = "grass" + plantname = "Grass" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/grass + lifespan = 40 + endurance = 40 + maturation = 2 + production = 5 + yield = 5 + growthstages = 2 + icon_grow = "grass-grow" + icon_dead = "grass-dead" + mutatelist = list(/obj/item/seeds/grass/carpet) + reagents_add = list("nutriment" = 0.02) + +/obj/item/weapon/reagent_containers/food/snacks/grown/grass + seed = /obj/item/seeds/grass + name = "grass" + desc = "Green and lush." + icon_state = "grassclump" + filling_color = "#32CD32" + bitesize_mod = 2 + +/obj/item/weapon/reagent_containers/food/snacks/grown/grass/attack_self(mob/user) + user << "You prepare the astroturf." + var/grassAmt = 1 + round(seed.potency / 50) // The grass we're holding + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/grass/G in user.loc) // The grass on the floor + grassAmt += 1 + round(G.seed.potency) + qdel(G) + while(grassAmt > 0) + var/obj/item/stack/tile/GT = new /obj/item/stack/tile/grass(user.loc) + if(grassAmt >= GT.max_amount) + GT.amount = GT.max_amount + else + GT.amount = grassAmt + for(var/obj/item/stack/tile/grass/GR in user.loc) + if(GR != GT && GR.amount < GR.max_amount) + GR.attackby(GT, user) //we try to transfer all old unfinished stacks to the new stack we created. + grassAmt -= GT.max_amount + qdel(src) + return + +// Carpet +/obj/item/seeds/grass/carpet + name = "pack of carpet seeds" + desc = "These seeds grow into stylish carpet samples." + icon_state = "seed-carpet" + species = "carpet" + plantname = "Carpet" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/carpet + mutatelist = list(/obj/item/seeds/grass/carpet) + rarity = 10 + +/obj/item/weapon/reagent_containers/food/snacks/grown/carpet + seed = /obj/item/seeds/grass/carpet + name = "carpet" + desc = "The textile industry's dark secret." + icon_state = "carpetclump" + +/obj/item/weapon/reagent_containers/food/snacks/grown/carpet/attack_self(mob/user) + user << "You roll out the red carpet." + var/carpetAmt = 1 + round(seed.potency / 50) // The carpet we're holding + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/carpet/C in user.loc) // The carpet on the floor + carpetAmt += 1 + round(C.seed.potency / 50) + qdel(C) + while(carpetAmt > 0) + var/obj/item/stack/tile/CT = new /obj/item/stack/tile/carpet(user.loc) + if(carpetAmt >= CT.max_amount) + CT.amount = CT.max_amount + else + CT.amount = carpetAmt + for(var/obj/item/stack/tile/carpet/CA in user.loc) + if(CA != CT && CA.amount < CA.max_amount) + CA.attackby(CT, user) //we try to transfer all old unfinished stacks to the new stack we created. + carpetAmt -= CT.max_amount + qdel(src) + return \ No newline at end of file diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm new file mode 100644 index 0000000000000..013b93c94b544 --- /dev/null +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -0,0 +1,89 @@ +// A very special plant, deserving it's own file. + +/obj/item/seeds/kudzu + name = "pack of kudzu seeds" + desc = "These seeds grow into a weed that grows incredibly fast." + icon_state = "seed-kudzu" + species = "kudzu" + plantname = "Kudzu" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod + lifespan = 20 + endurance = 10 + yield = 4 + growthstages = 4 + plant_type = PLANT_WEED + rarity = 30 + var/list/mutations = list() + reagents_add = list("charcoal" = 0.04, "nutriment" = 0.02) + +/obj/item/seeds/kudzu/Copy() + var/obj/item/seeds/kudzu/S = ..() + S.mutations = mutations.Copy() + return S + +/obj/item/seeds/kudzu/suicide_act(mob/user) + user.visible_message("[user] swallows the pack of kudzu seeds! It looks like \he's trying to commit suicide..") + plant(user) + return (BRUTELOSS) + +/obj/item/seeds/kudzu/proc/plant(mob/user) + if(istype(user.loc,/turf/space)) + return + var/turf/T = get_turf(src) + message_admins("Kudzu planted by [key_name_admin(user)](?) (FLW) at ([T.x],[T.y],[T.z] - (JMP))",0,1) + investigate_log("was planted by [key_name(user)] at ([T.x],[T.y],[T.z])","kudzu") + new /obj/effect/spacevine_controller(user.loc, mutations, potency, production) + qdel(src) + +/obj/item/seeds/kudzu/attack_self(mob/user) + plant(user) + user << "You plant the kudzu. You monster." + +/obj/item/seeds/kudzu/get_analyzer_text() + var/text = ..() + var/text_string = "" + for(var/datum/spacevine_mutation/SM in mutations) + text_string += "[(text_string == "") ? "" : ", "][SM.name]" + text += "\n- Plant Mutations: [(text_string == "") ? "None" : text_string]" + return text + +/obj/item/seeds/kudzu/on_chem_reaction(datum/reagents/S) + var/list/temp_mut_list = list() + + if(S.has_reagent("sterilizine", 5)) + for(var/datum/spacevine_mutation/SM in mutations) + if(SM.quality == NEGATIVE) + temp_mut_list += SM + if(prob(20)) + mutations.Remove(pick(temp_mut_list)) + temp_mut_list.Cut() + if(S.has_reagent("welding_fuel", 5)) + for(var/datum/spacevine_mutation/SM in mutations) + if(SM.quality == POSITIVE) + temp_mut_list += SM + if(prob(20)) + mutations.Remove(pick(temp_mut_list)) + temp_mut_list.Cut() + if(S.has_reagent("phenol", 5)) + for(var/datum/spacevine_mutation/SM in mutations) + if(SM.quality == MINOR_NEGATIVE) + temp_mut_list += SM + if(prob(20)) + mutations.Remove(pick(temp_mut_list)) + if(S.has_reagent("blood", 15)) + production += rand(15, -5) + if(S.has_reagent("amatoxin", 5)) + production += rand(5, -15) + if(S.has_reagent("plasma", 5)) + potency += rand(5, -15) + if(S.has_reagent("holywater", 10)) + potency += rand(15, -5) + + +/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod + seed = /obj/item/seeds/kudzu + 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 = "#6B8E23" + bitesize_mod = 2 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm new file mode 100644 index 0000000000000..3460cde8926d9 --- /dev/null +++ b/code/modules/hydroponics/grown/melon.dm @@ -0,0 +1,45 @@ +// Watermelon +/obj/item/seeds/watermelon + name = "pack of watermelon seeds" + desc = "These seeds grow into watermelon plants." + icon_state = "seed-watermelon" + species = "watermelon" + plantname = "Watermelon Vines" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/watermelon + lifespan = 50 + endurance = 40 + icon_dead = "watermelon-dead" + mutatelist = list(/obj/item/seeds/watermelon/holy) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.2) + +/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon + seed = /obj/item/seeds/watermelon + name = "watermelon" + desc = "It's full of watery goodness." + icon_state = "watermelon" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice + slices_num = 5 + dried_type = null + w_class = 3 + filling_color = "#008000" + bitesize_mod = 3 + +// Holymelon +/obj/item/seeds/watermelon/holy + name = "pack of holymelon seeds" + desc = "These seeds grow into holymelon plants." + icon_state = "seed-holymelon" + species = "holymelon" + plantname = "Holy Melon Vines" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/holymelon + mutatelist = list() + reagents_add = list("holywater" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1) + rarity = 20 + +/obj/item/weapon/reagent_containers/food/snacks/grown/holymelon + seed = /obj/item/seeds/watermelon/holy + name = "holymelon" + desc = "The water within this melon has been blessed by some deity that's particularly fond of watermelon." + icon_state = "holymelon" + filling_color = "#FFD700" + dried_type = null \ No newline at end of file diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm new file mode 100644 index 0000000000000..de334bb609882 --- /dev/null +++ b/code/modules/hydroponics/grown/misc.dm @@ -0,0 +1,94 @@ +// Weeds +/obj/item/seeds/weeds + name = "pack of weed seeds" + desc = "Yo mang, want some weeds?" + icon_state = "seed" + species = "weeds" + plantname = "Starthistle" + lifespan = 100 + endurance = 50 // damm pesky weeds + maturation = 5 + production = 1 + yield = -1 + potency = -1 + oneharvest = 1 + growthstages = 4 + plant_type = PLANT_WEED + + +// Cabbage +/obj/item/seeds/cabbage + name = "pack of cabbage seeds" + desc = "These seeds grow into cabbages." + icon_state = "seed-cabbage" + species = "cabbage" + plantname = "Cabbages" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage + lifespan = 50 + endurance = 25 + maturation = 3 + production = 5 + yield = 4 + growthstages = 1 + mutatelist = list(/obj/item/seeds/replicapod) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage + seed = /obj/item/seeds/cabbage + name = "cabbage" + desc = "Ewwwwwwwwww. Cabbage." + icon_state = "cabbage" + filling_color = "#90EE90" + bitesize_mod = 2 + + +// Sugarcane +/obj/item/seeds/sugarcane + name = "pack of sugarcane seeds" + desc = "These seeds grow into sugarcane." + icon_state = "seed-sugarcane" + species = "sugarcane" + plantname = "Sugarcane" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane + lifespan = 60 + endurance = 50 + maturation = 3 + yield = 4 + growthstages = 3 + reagents_add = list("sugar" = 0.25) + +/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane + seed = /obj/item/seeds/sugarcane + name = "sugarcane" + desc = "Sickly sweet." + icon_state = "sugarcane" + filling_color = "#FFD700" + bitesize_mod = 2 + + +// Gatfruit +/obj/item/seeds/gatfruit + name = "pack of gatfruit seeds" + desc = "These seeds grow into .357 revolvers." + icon_state = "seed-gatfruit" + species = "gatfruit" + plantname = "gatfruit" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/shell/gatfruit + lifespan = 20 + endurance = 20 + maturation = 40 + production = 10 + yield = 2 + potency = 60 + growthstages = 2 + rarity = 60 // Obtainable only with xenobio+superluck. + reagents_add = list("sulfur" = 0.1, "carbon" = 0.1, "nitrogen" = 0.07, "potassium" = 0.05) + +/obj/item/weapon/reagent_containers/food/snacks/grown/shell/gatfruit + seed = /obj/item/seeds/gatfruit + name = "gatfruit" + desc = "It smells like burning." + icon_state = "gatfruit" + origin_tech = "combat=3" + trash = /obj/item/weapon/gun/projectile/revolver + bitesize_mod = 2 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm new file mode 100644 index 0000000000000..560d05bad4ad4 --- /dev/null +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -0,0 +1,266 @@ +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom + name = "mushroom" + bitesize_mod = 2 + + +// Reishi +/obj/item/seeds/reishi + name = "pack of reishi mycelium" + desc = "This mycelium grows into something medicinal and relaxing." + icon_state = "mycelium-reishi" + species = "reishi" + plantname = "Reishi" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi + lifespan = 35 + endurance = 35 + maturation = 10 + production = 5 + yield = 4 + potency = 15 + oneharvest = 1 + growthstages = 4 + plant_type = PLANT_MUSHROOM + reagents_add = list("morphine" = 0.35, "charcoal" = 0.35, "nutriment" = 0) + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi + seed = /obj/item/seeds/reishi + name = "reishi" + desc = "Ganoderma lucidum: A special fungus known for its medicinal and stress relieving properties." + icon_state = "reishi" + filling_color = "#FF4500" + + +// Fly Amanita +/obj/item/seeds/amanita + name = "pack of fly amanita mycelium" + desc = "This mycelium grows into something horrible." + icon_state = "mycelium-amanita" + species = "amanita" + plantname = "Fly Amanitas" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita + lifespan = 50 + endurance = 35 + maturation = 10 + production = 5 + yield = 4 + oneharvest = 1 + growthstages = 3 + plant_type = PLANT_MUSHROOM + mutatelist = list(/obj/item/seeds/angel) + reagents_add = list("mushroomhallucinogen" = 0.04, "amatoxin" = 0.35, "nutriment" = 0) + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita + seed = /obj/item/seeds/amanita + name = "fly amanita" + desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." + icon_state = "amanita" + filling_color = "#FF0000" + + +// Destroying Angel +/obj/item/seeds/angel + name = "pack of destroying angel mycelium" + desc = "This mycelium grows into something devastating." + icon_state = "mycelium-angel" + species = "angel" + plantname = "Destroying Angels" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel + lifespan = 50 + endurance = 35 + maturation = 12 + production = 5 + yield = 2 + potency = 35 + oneharvest = 1 + growthstages = 3 + plant_type = PLANT_MUSHROOM + reagents_add = list("mushroomhallucinogen" = 0.04, "amatoxin" = 0.8, "nutriment" = 0) + rarity = 30 + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel + seed = /obj/item/seeds/angel + name = "destroying angel" + desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amatoxins." + icon_state = "angel" + filling_color = "#C0C0C0" + + +// Liberty Cap +/obj/item/seeds/liberty + name = "pack of liberty-cap mycelium" + desc = "This mycelium grows into liberty-cap mushrooms." + icon_state = "mycelium-liberty" + species = "liberty" + plantname = "Liberty-Caps" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap + maturation = 7 + production = 1 + yield = 5 + potency = 15 + oneharvest = 1 + growthstages = 3 + plant_type = PLANT_MUSHROOM + reagents_add = list("mushroomhallucinogen" = 0.25, "nutriment" = 0.02) + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap + seed = /obj/item/seeds/liberty + name = "liberty-cap" + desc = "Psilocybe Semilanceata: Liberate yourself!" + icon_state = "libertycap" + filling_color = "#DAA520" + + +// Plump Helmet +/obj/item/seeds/plump + name = "pack of plump-helmet mycelium" + desc = "This mycelium grows into helmets... maybe." + icon_state = "mycelium-plump" + species = "plump" + plantname = "Plump-Helmet Mushrooms" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet + maturation = 8 + production = 1 + yield = 4 + potency = 15 + oneharvest = 1 + growthstages = 3 + plant_type = PLANT_MUSHROOM + mutatelist = list(/obj/item/seeds/plump/walkingmushroom) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet + seed = /obj/item/seeds/plump + name = "plump-helmet" + desc = "Plumus Hellmus: Plump, soft and s-so inviting~" + icon_state = "plumphelmet" + filling_color = "#9370DB" + + +// Walking Mushroom +/obj/item/seeds/plump/walkingmushroom + name = "pack of walking mushroom mycelium" + desc = "This mycelium will grow into huge stuff!" + icon_state = "mycelium-walkingmushroom" + species = "walkingmushroom" + plantname = "Walking Mushrooms" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom + lifespan = 30 + endurance = 30 + maturation = 5 + yield = 1 + mutatelist = list() + reagents_add = list("vitamin" = 0.05, "nutriment" = 0.12) + rarity = 30 + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom + seed = /obj/item/seeds/plump/walkingmushroom + name = "walking mushroom" + desc = "Plumus Locomotus: The beginning of the great walk." + icon_state = "walkingmushroom" + filling_color = "#9370DB" + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user) + if(istype(user.loc,/turf/space)) + return + var/mob/living/simple_animal/hostile/mushroom/M = new /mob/living/simple_animal/hostile/mushroom(user.loc) + M.maxHealth += round(seed.endurance / 4) + M.melee_damage_lower += round(seed.potency / 20) + M.melee_damage_upper += round(seed.potency / 20) + M.move_to_delay -= round(seed.production / 50) + M.health = M.maxHealth + qdel(src) + user << "You plant the walking mushroom." + + +// Chanterelle +/obj/item/seeds/chanter + name = "pack of chanterelle mycelium" + desc = "This mycelium grows into chanterelle mushrooms." + icon_state = "mycelium-chanter" + species = "chanter" + plantname = "Chanterelle Mushrooms" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle + lifespan = 35 + endurance = 20 + maturation = 7 + production = 1 + yield = 5 + potency = 15 + oneharvest = 1 + growthstages = 3 + plant_type = PLANT_MUSHROOM + reagents_add = list("nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle + seed = /obj/item/seeds/chanter + name = "chanterelle cluster" + desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" + icon_state = "chanterelle" + filling_color = "#FFA500" + + +// Glowshroom +/obj/item/seeds/glowshroom + name = "pack of glowshroom mycelium" + desc = "This mycelium -glows- into mushrooms!" + icon_state = "mycelium-glowshroom" + species = "glowshroom" + plantname = "Glowshrooms" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom + lifespan = 120 //ten times that is the delay + endurance = 30 + maturation = 15 + production = 1 + yield = 3 //-> spread + potency = 30 //-> brightness + oneharvest = 1 + growthstages = 4 + plant_type = PLANT_MUSHROOM + rarity = 20 + genes = list(/datum/plant_gene/trait/glow) + mutatelist = list(/obj/item/seeds/glowshroom/glowcap) + reagents_add = list("radium" = 0.05, "nutriment" = 0.04) + +/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." + icon_state = "glowshroom" + filling_color = "#00FA9A" + var/effect_path = /obj/effect/glowshroom + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user) + if(istype(user.loc,/turf/space)) + return + var/obj/effect/glowshroom/planted = new effect_path(user.loc) + planted.delay = planted.delay - seed.production * 100 //So the delay goes DOWN with better stats instead of up. :I + planted.endurance = seed.endurance + planted.yield = seed.yield + planted.potency = seed.potency + user << "You plant [src]." + qdel(src) + + +// Glowcap +/obj/item/seeds/glowshroom/glowcap + name = "pack of glowcap mycelium" + desc = "This mycelium -powers- into mushrooms!" + icon_state = "mycelium-glowcap" + species = "glowcap" + icon_grow = "glowshroom-grow" + icon_dead = "glowshroom-dead" + plantname = "Glowcaps" + plant_type = PLANT_MUSHROOM + product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap + genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/cell_charge) + mutatelist = list() + reagents_add = list("nutriment" = 0.04) + rarity = 30 + +/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap + seed = /obj/item/seeds/glowshroom/glowcap + name = "glowcap cluster" + desc = "Mycena Ruthenia: This species of mushroom glows in the dark, but aren't bioluminescent. They're warm to the touch..." + icon_state = "glowcap" + filling_color = "#00FA9A" + //effect_path = /obj/effect/glowshroom/glowcap \ No newline at end of file diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm new file mode 100644 index 0000000000000..431f69ce9ad61 --- /dev/null +++ b/code/modules/hydroponics/grown/nettle.dm @@ -0,0 +1,116 @@ +/obj/item/seeds/nettle + name = "pack of nettle seeds" + desc = "These seeds grow into nettles." + icon_state = "seed-nettle" + species = "nettle" + plantname = "Nettles" + product = /obj/item/weapon/grown/nettle/basic + lifespan = 30 + endurance = 40 // tuff like a toiger + yield = 4 + growthstages = 5 + plant_type = PLANT_WEED + mutatelist = list(/obj/item/seeds/nettle/death) + reagents_add = list("sacid" = 0.5) + +/obj/item/seeds/nettle/death + name = "pack of death-nettle seeds" + desc = "These seeds grow into death-nettles." + icon_state = "seed-deathnettle" + species = "deathnettle" + plantname = "Death Nettles" + product = /obj/item/weapon/grown/nettle/death + endurance = 25 + maturation = 8 + yield = 2 + mutatelist = list() + reagents_add = list("facid" = 0.5, "sacid" = 0.5) + rarity = 20 + + +/obj/item/weapon/grown/nettle //abstract type + name = "nettle" + desc = "It's probably not wise to touch it with bare hands..." + icon = 'icons/obj/weapons.dmi' + icon_state = "nettle" + damtype = "fire" + force = 15 + hitsound = 'sound/weapons/bladeslice.ogg' + throwforce = 5 + w_class = 1 + throw_speed = 1 + throw_range = 3 + origin_tech = "combat=1" + attack_verb = list("stung") + +/obj/item/weapon/grown/nettle/suicide_act(mob/user) + user.visible_message("[user] is eating some of the [src.name]! It looks like \he's trying to commit suicide.") + return (BRUTELOSS|TOXLOSS) + +/obj/item/weapon/grown/nettle/pickup(mob/living/user) + ..() + if(!iscarbon(user)) + return 0 + var/mob/living/carbon/C = user + if(ishuman(user)) + var/mob/living/carbon/human/H = C + if(H.gloves) + return 0 + var/organ = ((H.hand ? "l_":"r_") + "arm") + var/obj/item/organ/limb/affecting = H.get_organdatum(organ) + if(affecting.take_damage(0, force)) + H.update_damage_overlays(0) + else + C.take_organ_damage(0,force) + C << "The nettle burns your bare hand!" + return 1 + +/obj/item/weapon/grown/nettle/afterattack(atom/A as mob|obj, mob/user,proximity) + if(!proximity) return + if(force > 0) + force -= rand(1, (force / 3) + 1) // When you whack someone with it, leaves fall off + else + usr << "All the leaves have fallen off the nettle from violent whacking." + usr.unEquip(src) + qdel(src) + + +/obj/item/weapon/grown/nettle/basic + seed = /obj/item/seeds/nettle + +/obj/item/weapon/grown/nettle/basic/add_juice() + ..() + force = round((5 + seed.potency / 5), 1) + + +/obj/item/weapon/grown/nettle/death + seed = /obj/item/seeds/nettle/death + name = "deathnettle" + desc = "The glowing nettle incites rage in you just from looking at it!" + icon_state = "deathnettle" + force = 30 + throwforce = 15 + origin_tech = "combat=3" + +/obj/item/weapon/grown/nettle/death/add_juice() + ..() + force = round((5 + seed.potency / 2.5), 1) + +/obj/item/weapon/grown/nettle/death/pickup(mob/living/carbon/user) + ..() + if(..()) + if(prob(50)) + user.Paralyse(5) + user << "You are stunned by the Deathnettle when you try picking it up!" + +/obj/item/weapon/grown/nettle/death/attack(mob/living/carbon/M, mob/user) + if(!..()) return + if(istype(M, /mob/living)) + M << "You are stunned by the powerful acid of the Deathnettle!" + add_logs(user, M, "attacked", src) + + //M.adjust_blurriness(force/7) + if(prob(20)) + M.Paralyse(force / 6) + M.Weaken(force / 15) + M.drop_item() \ No newline at end of file diff --git a/code/modules/hydroponics/grown/potato.dm b/code/modules/hydroponics/grown/potato.dm new file mode 100644 index 0000000000000..7ada77c855785 --- /dev/null +++ b/code/modules/hydroponics/grown/potato.dm @@ -0,0 +1,68 @@ +// Potato +/obj/item/seeds/potato + name = "pack of potato seeds" + desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" + icon_state = "seed-potato" + species = "potato" + plantname = "Potato Plants" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/potato + lifespan = 30 + maturation = 10 + production = 1 + yield = 4 + oneharvest = 1 + growthstages = 4 + icon_grow = "potato-grow" + icon_dead = "potato-dead" + mutatelist = list(/obj/item/seeds/potato/sweet) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/potato + seed = /obj/item/seeds/potato + name = "potato" + desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" + icon_state = "potato" + filling_color = "#E9967A" + bitesize = 100 + +/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W, mob/user, params) + ..() + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if (C.use(5)) + user << "You add some cable to the potato and slide it inside the battery encasing." + var/obj/item/weapon/stock_parts/cell/potato/pocell = new /obj/item/weapon/stock_parts/cell/potato(user.loc) + pocell.maxcharge = seed.potency * 20 + + // The secret of potato supercells! + var/datum/plant_gene/trait/cell_charge/G = seed.get_gene(/datum/plant_gene/trait/cell_charge) + if(G) // 10x charge for deafult cell charge gene - 20 000 with 100 potency. + pocell.maxcharge *= G.rate*1000 + pocell.charge = pocell.maxcharge + pocell.desc = "A rechargable starch based power cell. This one has a power rating of [pocell.maxcharge], and you should not swallow it." + + if(reagents.has_reagent("plasma", 2)) + pocell.rigged = 1 + + qdel(src) + return + else + user << "You need five lengths of cable to make a potato battery!" + return + +// Sweet Potato +/obj/item/seeds/potato/sweet + name = "pack of sweet potato seeds" + desc = "These seeds grow into sweet potato plants." + icon_state = "seed-sweetpotato" + species = "sweetpotato" + plantname = "Sweet Potato Plants" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet + mutatelist = list() + reagents_add = list("vitamin" = 0.1, "sugar" = 0.1, "nutriment" = 0.1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet + seed = /obj/item/seeds/potato/sweet + name = "sweet potato" + desc = "It's sweet." + icon_state = "sweetpotato" \ No newline at end of file diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm new file mode 100644 index 0000000000000..85090ccb79ef4 --- /dev/null +++ b/code/modules/hydroponics/grown/pumpkin.dm @@ -0,0 +1,51 @@ +// Pumpkin +/obj/item/seeds/pumpkin + name = "pack of pumpkin seeds" + desc = "These seeds grow into pumpkin vines." + icon_state = "seed-pumpkin" + species = "pumpkin" + plantname = "Pumpkin Vines" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin + lifespan = 50 + endurance = 40 + growthstages = 3 + icon_grow = "pumpkin-grow" + icon_dead = "pumpkin-dead" + mutatelist = list(/obj/item/seeds/pumpkin/blumpkin) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.2) + +/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin + seed = /obj/item/seeds/pumpkin + name = "pumpkin" + desc = "It's large and scary." + icon_state = "pumpkin" + filling_color = "#FFA500" + bitesize_mod = 2 + +/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + ..() + if(is_sharp(W)) + user.show_message("You carve a face into [src]!", 1) + new /obj/item/clothing/head/hardhat/pumpkinhead(user.loc) + qdel(src) + return + +// Blumpkin +/obj/item/seeds/pumpkin/blumpkin + name = "pack of blumpkin seeds" + desc = "These seeds grow into blumpkin vines." + icon_state = "seed-blumpkin" + species = "blumpkin" + plantname = "Blumpkin Vines" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin + mutatelist = list() + reagents_add = list("ammonia" = 0.2, "nutriment" = 0.2) + rarity = 20 + +/obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin + seed = /obj/item/seeds/pumpkin/blumpkin + name = "blumpkin" + desc = "The pumpkin's toxic sibling." + icon_state = "blumpkin" + filling_color = "#87CEFA" + bitesize_mod = 2 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm new file mode 100644 index 0000000000000..ffe8657f35fe6 --- /dev/null +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -0,0 +1,107 @@ +// A very special plant, deserving it's own file. + +/obj/item/seeds/replicapod + name = "pack of replica pod seeds" + desc = "These seeds grow into replica pods. They say these are used to harvest humans." + icon_state = "seed-replicapod" + species = "replicapod" + plantname = "Replica Pod" + product = /mob/living/carbon/human //verrry special -- Urist + lifespan = 50 + endurance = 8 + maturation = 10 + production = 1 + yield = 1 //seeds if there isn't a dna inside + oneharvest = 1 + potency = 30 + var/ckey = null + var/realName = null + var/datum/mind/mind = null + var/blood_gender = null + var/blood_type = null + var/list/features = null + var/factions = null + var/contains_sample = 0 + +/obj/item/seeds/replicapod/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W,/obj/item/weapon/reagent_containers/syringe)) + if(!contains_sample) + for(var/datum/reagent/blood/bloodSample in W.reagents.reagent_list) + if(bloodSample.data["mind"] && bloodSample.data["cloneable"] == 1) + mind = bloodSample.data["mind"] + ckey = bloodSample.data["ckey"] + realName = bloodSample.data["real_name"] + blood_gender = bloodSample.data["gender"] + blood_type = bloodSample.data["blood_type"] + features = bloodSample.data["features"] + factions = bloodSample.data["factions"] + W.reagents.clear_reagents() + user << "You inject the contents of the syringe into the seeds." + contains_sample = 1 + else + user << "The seeds reject the sample!" + else + user << "The seeds already contain a genetic sample!" + ..() + +/obj/item/seeds/replicapod/get_analyzer_text() + var/text = ..() + if(contains_sample) + text += "\n It contains a blood sample!" + return text + + +/obj/item/seeds/replicapod/harvest(mob/user = usr) //now that one is fun -- Urist + var/obj/machinery/hydroponics/parent = loc + var/make_podman = 0 + var/ckey_holder = null + if(config.revival_pod_plants) + if(ckey) + for(var/mob/M in player_list) + if(istype(M, /mob/dead/observer)) + var/mob/dead/observer/O = M + if(O.ckey == ckey && O.can_reenter_corpse) + make_podman = 1 + break + else + if(M.ckey == ckey && M.stat == DEAD && !M.suiciding) + make_podman = 1 + break + else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key + for(var/mob/M in player_list) + if(mind && M.mind && ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding) + if(istype(M, /mob/dead/observer)) + var/mob/dead/observer/O = M + if(!O.can_reenter_corpse) + break + make_podman = 1 + ckey_holder = M.ckey + break + + if(make_podman) //all conditions met! + var/mob/living/carbon/human/podman = new /mob/living/carbon/human(parent.loc) + if(realName) + podman.real_name = realName + else + podman.real_name = "Pod Person [rand(0,999)]" + mind.transfer_to(podman) + if(ckey) + podman.ckey = ckey + else + podman.ckey = ckey_holder + podman.gender = blood_gender + podman.faction |= factions + if(!features["mcolor"]) + features["mcolor"] = "#59CE00" + hardset_dna(podman,null,null,podman.real_name,blood_type,/datum/species/plant/pod,features)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman + podman.set_cloned_appearance() + + else //else, one packet of seeds. maybe two + var/seed_count = 1 + if(prob(getYield() * 20)) + seed_count++ + for(var/i=0,iThe tomato is twitching and shaking, preventing you from eating it.
" + return + ..() + +/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack_self(mob/user) + if(awakening || istype(user.loc,/turf/space)) + return + user << "You begin to awaken the Killer Tomato..." + awakening = 1 + + spawn(30) + if(!qdeleted(src)) + var/mob/living/simple_animal/hostile/killertomato/K = new /mob/living/simple_animal/hostile/killertomato(get_turf(src.loc)) + K.maxHealth += round(seed.endurance / 3) + K.melee_damage_lower += round(seed.potency / 10) + K.melee_damage_upper += round(seed.potency / 10) + K.move_to_delay -= round(seed.production / 50) + K.health = K.maxHealth + K.visible_message("The Killer Tomato growls as it suddenly awakens.") + if(user) + user.unEquip(src) + qdel(src) \ No newline at end of file diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm new file mode 100644 index 0000000000000..9b1a685ac5915 --- /dev/null +++ b/code/modules/hydroponics/grown/towercap.dm @@ -0,0 +1,92 @@ +/obj/item/seeds/tower + name = "pack of tower-cap mycelium" + desc = "This mycelium grows into tower-cap mushrooms." + icon_state = "mycelium-tower" + species = "towercap" + plantname = "Tower Caps" + product = /obj/item/weapon/grown/log + lifespan = 80 + endurance = 50 + maturation = 15 + production = 1 + yield = 5 + potency = 50 + oneharvest = 1 + growthstages = 3 + icon_dead = "towercap-dead" + plant_type = PLANT_MUSHROOM + mutatelist = list(/obj/item/seeds/tower/steel) + +/obj/item/seeds/tower/steel + name = "pack of steel-cap mycelium" + desc = "This mycelium grows into steel logs." + icon_state = "mycelium-steelcap" + species = "steelcap" + plantname = "Steel Caps" + product = /obj/item/weapon/grown/log/steel + mutatelist = list() + rarity = 20 + + + + +/obj/item/weapon/grown/log + seed = /obj/item/seeds/tower + name = "tower-cap log" + desc = "It's better than bad, it's good!" + icon_state = "logs" + force = 5 + throwforce = 5 + w_class = 3 + throw_speed = 2 + throw_range = 3 + origin_tech = "materials=1" + attack_verb = list("bashed", "battered", "bludgeoned", "whacked") + var/plank_type = /obj/item/stack/sheet/mineral/wood + var/plank_name = "wooden planks" + var/list/accepted = list(/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco, + /obj/item/weapon/reagent_containers/food/snacks/grown/tea, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus, + /obj/item/weapon/reagent_containers/food/snacks/grown/wheat) + + +/obj/item/weapon/grown/log/attackby(obj/item/weapon/W, mob/user, params) + ..() + if(is_sharp(W)) + user.show_message("You make [plank_name] out of \the [src]!", 1) + var/obj/item/stack/plank = new plank_type(user.loc, 1 + round(seed.potency / 25)) + var/old_plank_amount = plank.amount + for(var/obj/item/stack/ST in user.loc) + if(ST != plank && istype(ST, plank_type) && ST.amount < ST.max_amount) + ST.attackby(plank, user) //we try to transfer all old unfinished stacks to the new stack we created. + if(plank.amount > old_plank_amount) + user << "You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name]." + qdel(src) + + if(is_type_in_list(W,accepted)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/leaf = W + if(leaf.dry) + user.show_message("You wrap \the [W] around the log, turning it into a torch!") + var/obj/item/device/flashlight/flare/torch/T = new /obj/item/device/flashlight/flare/torch(user.loc) + usr.unEquip(W) + usr.put_in_active_hand(T) + qdel(leaf) + qdel(src) + return + else + usr << "You must dry this first!" + +/obj/item/weapon/grown/log/tree + seed = null + name = "wood log" + desc = "TIMMMMM-BERRRRRRRRRRR!" + +/obj/item/weapon/grown/log/steel + seed = /obj/item/seeds/tower/steel + name = "steel-cap log" + desc = "It's made of metal." + icon_state = "steellogs" + accepted = list() + plank_type = /obj/item/stack/rods + plank_name = "rods" \ No newline at end of file diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index f4c35d60c2427..b2104f19d3365 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -5,336 +5,80 @@ /obj/item/weapon/grown // Grown weapons name = "grown_weapon" icon = 'icons/obj/hydroponics/harvest.dmi' - var/seed = null - var/plantname = "" - var/product //a type path - var/lifespan = 0 - var/endurance = 15 - var/maturation = 7 - var/production = 7 - var/yield = 2 - var/potency = 20 var/plant_type = 0 + var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item. -/obj/item/weapon/grown/New(newloc, new_potency = 50) +/obj/item/weapon/grown/New(newloc, var/obj/item/seeds/new_seed = null) ..() - potency = new_potency - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) - - transform *= TransformUsingVariable(potency, 100, 0.5) - - if(seed && lifespan == 0) //This is for adminspawn or map-placed growns. They get the default stats of their seed type. This feels like a hack but people insist on putting these things on the map... - var/obj/item/seeds/S = new seed(src) - lifespan = S.lifespan - endurance = S.endurance - maturation = S.maturation - production = S.production - yield = S.yield - qdel(S) //Foods drop their contents when eaten, so delete the default seed. - create_reagents(50) - add_juice() - -/obj/item/weapon/grown/proc/add_juice() - if(reagents) - return 1 - return 0 - -/obj/item/weapon/grown/log - seed = /obj/item/seeds/towermycelium - name = "tower-cap log" - desc = "It's better than bad, it's good!" - icon_state = "logs" - force = 5 - throwforce = 5 - w_class = 3.0 - throw_speed = 2 - throw_range = 3 - plant_type = 2 - origin_tech = "materials=1" - attack_verb = list("bashed", "battered", "bludgeoned", "whacked") - var/plank_type = /obj/item/stack/sheet/mineral/wood - var/plank_name = "wooden planks" - var/list/accepted = list(/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco, - /obj/item/weapon/reagent_containers/food/snacks/grown/tobacco/space, - /obj/item/weapon/reagent_containers/food/snacks/grown/tea/aspera, - /obj/item/weapon/reagent_containers/food/snacks/grown/tea/astra, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/weapon/reagent_containers/food/snacks/grown/wheat) - - -/obj/item/weapon/grown/log/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - ..() - if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy) || istype(W, /obj/item/weapon/twohanded/chainsaw) && W:wielded) - user.show_message("You make [plank_name] out of \the [src]!", 1) - var/obj/item/stack/plank = new plank_type(user.loc, 1 + round(potency / 25)) - var/old_plank_amount = plank.amount - for(var/obj/item/stack/ST in user.loc) - if(ST != plank && istype(ST, plank_type) && ST.amount < ST.max_amount) - ST.attackby(plank, user) //we try to transfer all old unfinished stacks to the new stack we created. - if(plank.amount > old_plank_amount) - user << "You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name]." - qdel(src) - - if(is_type_in_list(W,accepted)) - var/obj/item/weapon/reagent_containers/food/snacks/grown/leaf = W - if(leaf.dry) - user.show_message("You wrap \the [W] around the log, turning it into a torch!") - var/obj/item/device/flashlight/flare/torch/T = new /obj/item/device/flashlight/flare/torch(user.loc) - usr.unEquip(W) - usr.put_in_active_hand(T) - qdel(leaf) - qdel(src) - return - else - usr << " You must dry this first." - -/obj/item/weapon/grown/log/steel - seed = /obj/item/seeds/steelmycelium - name = "steel-cap log" - desc = "It's made of metal." - icon_state = "steellogs" - accepted = list() - plank_type = /obj/item/stack/rods - plank_name = "rods" - -/obj/item/weapon/grown/sunflower // FLOWER POWER! - seed = /obj/item/seeds/sunflowerseed - name = "sunflower" - desc = "It's beautiful! A certain person might beat you to death if you trample these." - icon_state = "sunflower" - damtype = "fire" - force = 0 - slot_flags = SLOT_HEAD - throwforce = 0 - w_class = 1.0 - throw_speed = 1 - throw_range = 3 - -/obj/item/weapon/grown/sunflower/attack(mob/M as mob, mob/user as mob) - M << " [user] smacks you with a sunflower!FLOWER POWER" - user << " Your sunflower's FLOWER POWER strikes [M]" - - -/obj/item/weapon/grown/novaflower - seed = /obj/item/seeds/novaflowerseed - name = "novaflower" - desc = "These beautiful flowers have a crisp smokey scent, like a summer bonfire." - icon_state = "novaflower" - damtype = "fire" - force = 0 - slot_flags = SLOT_HEAD - throwforce = 0 - w_class = 1.0 - throw_speed = 1 - throw_range = 3 - plant_type = 0 - attack_verb = list("roasted", "scorched", "burned") - grind_reagents = list("capsaicin" = 0, "condensedcapsaicin" = 0) - -/obj/item/weapon/grown/novaflower/add_juice() - if(..()) - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("capsaicin", round((potency / 3.5), 1)) - reagents.add_reagent("condensedcapsaicin", round((potency / 4), 1)) - force = round((5 + potency / 5), 1) - -/obj/item/weapon/grown/novaflower/attack(mob/living/carbon/M as mob, mob/user as mob) - if(!..()) return - if(istype(M, /mob/living)) - M << "You are lit on fire from the intense heat of the [name]!" - M.adjust_fire_stacks(potency / 20) - M.IgniteMob() - -/obj/item/weapon/grown/novaflower/afterattack(atom/A as mob|obj, mob/user as mob,proximity) - if(!proximity) return - if(endurance > 0) - endurance -= rand(1, (endurance / 3) + 1) - else - usr << "All the petals have fallen off the [name] from violent whacking." - usr.unEquip(src) - qdel(src) - -/obj/item/weapon/grown/novaflower/pickup(mob/living/carbon/human/user as mob) - if(!user.gloves) - user << "The [name] burns your bare hand!" - user.adjustFireLoss(rand(1, 5)) - - -/obj/item/weapon/grown/nettle //abstract type - name = "nettle" - desc = "It's probably not wise to touch it with bare hands..." - icon = 'icons/obj/weapons.dmi' - icon_state = "nettle" - damtype = "fire" - force = 15 - hitsound = 'sound/weapons/bladeslice.ogg' - throwforce = 5 - w_class = 1.0 - throw_speed = 1 - throw_range = 3 - plant_type = 1 - origin_tech = "combat=1" - attack_verb = list("stung") - grind_reagents = list("sacid" = 0) -/obj/item/weapon/grown/nettle/suicide_act(mob/user) - user.visible_message("[user] is eating some of the [src.name]! It looks like \he's trying to commit suicide.") - return (BRUTELOSS|TOXLOSS) - -/obj/item/weapon/grown/nettle/pickup(mob/living/user as mob) - if(!iscarbon(user)) - return 0 - var/mob/living/carbon/C = user - if(ishuman(user)) - var/mob/living/carbon/human/H = C - if(H.gloves) - return 0 - var/organ = ((H.hand ? "l_":"r_") + "arm") - var/datum/organ/limb/L = H.get_organdatum(organ) - if(L && L.exists()) - var/obj/item/organ/limb/affecting = L.organitem - if(affecting && affecting.take_damage(0, force)) - H.update_damage_overlays(0) - else - C.take_organ_damage(0,force) - C << "The nettle burns your bare hand!" - return 1 - -/obj/item/weapon/grown/nettle/afterattack(atom/A as mob|obj, mob/user as mob,proximity) - if(!proximity) return - if(force > 0) - force -= rand(1, (force / 3) + 1) // When you whack someone with it, leaves fall off - else - usr << "All the leaves have fallen off the nettle from violent whacking." - usr.unEquip(src) + if(new_seed) + seed = new_seed.Copy() + else if(ispath(seed)) + // This is for adminspawn or map-placed growns. They get the default stats of their seed type. + seed = new seed() + seed.adjust_potency(50-seed.potency) + else // Something is terribly wrong qdel(src) + return + pixel_x = rand(-5, 5) + pixel_y = rand(-5, 5) -/obj/item/weapon/grown/nettle/basic - seed = /obj/item/seeds/nettleseed - -/obj/item/weapon/grown/nettle/basic/add_juice() - ..() - reagents.add_reagent("sacid", round((potency / 2), 1)) - force = round((5 + potency / 5), 1) + for(var/datum/plant_gene/trait/T in seed.genes) + T.on_new(src, newloc) + if(istype(src, seed.product)) // no adding reagents if it is just a trash item + seed.prepare_result(src) + add_juice() + transform *= TransformUsingVariable(seed.potency, 100, 0.5) -/obj/item/weapon/grown/nettle/death - seed = /obj/item/seeds/deathnettleseed - name = "deathnettle" - desc = "The glowing \black nettle incites rage\black in you just from looking at it!" - icon_state = "deathnettle" - force = 30 - throwforce = 15 - origin_tech = "combat=3" - grind_reagents = list("pacid" = 0) -/obj/item/weapon/grown/nettle/death/add_juice() +/obj/item/weapon/grown/attackby(obj/item/O, mob/user, params) ..() - reagents.add_reagent("pacid", round((potency / 2), 1)) - force = round((5 + potency / 2.5), 1) - -/obj/item/weapon/grown/nettle/death/pickup(mob/living/carbon/user as mob) - if(..()) - if(prob(50)) - user.Paralyse(5) - user << "You are stunned by the Deathnettle when you try picking it up!" - -/obj/item/weapon/grown/nettle/death/attack(mob/living/carbon/M as mob, mob/user as mob) - if(!..()) return - if(istype(M, /mob/living)) - M << "You are stunned by the powerful acid of the Deathnettle!" - add_logs(user, M, "attacked", object= "[src.name]") - - M.eye_blurry += force/7 - if(prob(20)) - M.Paralyse(force / 6) - M.Weaken(force / 15) - M.drop_item() - - -/obj/item/weapon/grown/bananapeel - name = "banana peel" - desc = "A peel from a banana." - icon = 'icons/obj/items.dmi' - icon_state = "banana_peel" - item_state = "banana_peel" - w_class = 1.0 - throwforce = 0 - throw_speed = 3 - throw_range = 7 - -/obj/item/weapon/grown/bananapeel/suicide_act(mob/user) - user.visible_message("[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.") - playsound(loc, 'sound/misc/slip.ogg', 50, 1, -1) - return (BRUTELOSS) + if (istype(O, /obj/item/device/analyzer/plant_analyzer)) + var/msg = "*---------*\n This is \a [src]\n" + msg += seed.get_analyzer_text() + msg += "" + usr << msg + return -/obj/item/weapon/grown/bananapeel/Crossed(AM as mob|obj) - if (istype(AM, /mob/living/carbon)) - var/mob/living/carbon/M = AM - var/stun = Clamp(potency / 20, 1, 5) - var/weaken = Clamp(potency / 25, 0.5, 4) - M.slip(stun, weaken, src) +/obj/item/weapon/grown/proc/add_juice() + if(reagents) return 1 + return 0 -/obj/item/weapon/grown/bananapeel/specialpeel //used by /obj/item/clothing/shoes/clown_shoes/banana_shoes - name = "synthesized banana peel" - desc = "A synthetic banana peel." - -/obj/item/weapon/grown/bananapeel/specialpeel/Crossed(AM) - if(..()) qdel(src) - -/obj/item/weapon/grown/bananapeel/mimanapeel - name = "mimana peel" - desc = "A mimana peel." - icon = 'icons/obj/hydroponics/harvest.dmi' - icon_state = "mimana_peel" - - -/obj/item/weapon/grown/corncob - name = "corn cob" - desc = "A reminder of meals gone by." - icon_state = "corncob" - item_state = "corncob" - w_class = 1.0 - throwforce = 0 - throw_speed = 3 - throw_range = 7 -/obj/item/weapon/grown/corncob/attackby(obj/item/weapon/grown/W as obj, mob/user as mob, params) +/obj/item/weapon/grown/Crossed(atom/movable/AM) + var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip) + if(S && iscarbon(AM)) + var/mob/living/carbon/M = AM + var/stun = max(seed.potency * S.rate * 2, 1) + var/weaken = max(seed.potency * S.rate, 0.5) + if(M.slip(stun, weaken, src)) + for(var/datum/plant_gene/trait/T in seed.genes) + T.on_slip(src, M) + return 1 ..() - if(is_sharp(W)) - user << "You use [W] to fashion a pipe out of the corn cob!" - new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc) - user.unEquip(src) - qdel(src) - return -/obj/item/weapon/grown/snapcorn - name = "snap corn" - desc = "A cob with snap pops" - icon_state = "snapcorn" - item_state = "corncob" - w_class = 1.0 - throwforce = 0 - throw_speed = 3 - throw_range = 7 - var/snap_pops = 1 -/obj/item/weapon/grown/snapcorn/add_juice() +// Glow gene procs +/obj/item/weapon/grown/Destroy() + var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow) + if(G && ismob(loc)) + loc.set_light(-G.get_lum(seed)) + return ..() + +/obj/item/weapon/grown/pickup(mob/user) ..() - snap_pops = max(round(potency/8), 1) + var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow) + if(G) + set_light(0) + user.set_light(G.get_lum(seed)) -/obj/item/weapon/grown/snapcorn/attack_self(mob/user as mob) +/obj/item/weapon/grown/dropped(mob/user) ..() - user << "You pick up a snap pops from the cob." - var/obj/item/toy/snappop/S = new /obj/item/toy/snappop(user.loc) - if(ishuman(user)) - user.put_in_hands(S) - snap_pops -= 1 - if(!snap_pops) - new /obj/item/weapon/grown/corncob(user.loc) - qdel(src) + var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow) + if(G) + user.set_light(-G.get_lum(seed)) + set_light(G.get_lum(seed)) \ No newline at end of file diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 5ed7c6d1a0e73..c6cef589f23fa 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -19,7 +19,6 @@ var/lastproduce = 0 //Last time it was harvested var/lastcycle = 0 //Used for timing of cycles. var/cycledelay = 200 //About 10 seconds / cycle - var/planted = 0 //Is it occupied? var/harvest = 0 //Ready to harvest? var/obj/item/seeds/myseed = null //The currently planted seed var/rating = 1 @@ -96,22 +95,15 @@ return connected -/obj/machinery/hydroponics/bullet_act(var/obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables. - if(!planted) - ..() - return +/obj/machinery/hydroponics/bullet_act(obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables. + if(!myseed) + return ..() if(istype(Proj ,/obj/item/projectile/energy/floramut)) mutate() else if(istype(Proj ,/obj/item/projectile/energy/florayield)) - if(myseed.yield == 0)//Oh god don't divide by zero you'll doom us all. - adjustSYield(1 * rating) - //world << "Yield increased by 1, from 0, to a total of [myseed.yield]" - else if(prob(1/(myseed.yield * myseed.yield) * 100))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2... - adjustSYield(1 * rating) - //world << "Yield increased by 1, to a total of [myseed.yield]" + return myseed.bullet_act(Proj) else - ..() - return + return ..() /obj/machinery/hydroponics/process() @@ -122,9 +114,12 @@ if(world.time > (lastcycle + cycledelay)) lastcycle = world.time - if(planted && !dead) + if(myseed && !dead) // Advance age age++ + if(age < myseed.maturation) + lastproduce = age + needs_update = 1 //Nutrients////////////////////////////////////////////////////////////// @@ -133,7 +128,7 @@ adjustNutri(-1 / rating) // Lack of nutrients hurts non-weeds - if(nutrilevel <= 0 && myseed.plant_type != 1) + if(nutrilevel <= 0 && myseed.plant_type != PLANT_WEED) adjustHealth(-rand(1,3)) //Photosynthesis///////////////////////////////////////////////////////// @@ -141,7 +136,7 @@ if(isturf(loc)) var/turf/currentTurf = loc var/lightAmt = (currentTurf.get_lumcount() * 10) - if(myseed.plant_type == 2) // Mushroom + if(myseed.plant_type == PLANT_MUSHROOM) if(lightAmt < 2) adjustHealth(-1 / rating) else // Non-mushroom @@ -196,7 +191,7 @@ adjustWater(-rand(1,6) / rating) // If the plant is dry, it loses health pretty fast, unless mushroom - if(waterlevel <= 10 && myseed.plant_type != 2) //Add CO2 check here? + if(waterlevel <= 10 && myseed.plant_type != PLANT_MUSHROOM) adjustHealth(-rand(0,1) / rating) if(waterlevel <= 0) adjustHealth(-rand(0,2) / rating) @@ -223,7 +218,7 @@ adjustHealth(-1 / rating) // If it's a weed, it doesn't stunt the growth - if(weedlevel >= 5 && myseed.plant_type != 1 ) + if(weedlevel >= 5 && myseed.plant_type != PLANT_WEED) adjustHealth(-1 / rating) //Health & Age/////////////////////////////////////////////////////////// @@ -253,8 +248,8 @@ // Weeeeeeeeeeeeeeedddssss if(weedlevel >= 10 && prob(50)) // At this point the plant is kind of fucked. Weeds can overtake the plant spot. - if(planted) - if(myseed.plant_type == 0) // If a normal plant + if(myseed) + if(myseed.plant_type == PLANT_NORMAL) // If a normal plant weedinvasion() else weedinvasion() // Weed invasion into empty tray @@ -275,9 +270,9 @@ if (mutmod == 2) if(prob(50)) //50% mutate() - else if(prob(75)) //37.5% + else if(prob(50)) //25% hardmutate() - else if(prob(10)) //1/80 + else if(prob(50)) //12.5% mutatespecie() return return @@ -287,6 +282,21 @@ //Refreshes the icon and sets the luminosity overlays.Cut() + update_icon_hoses() + + if(myseed) + update_icon_plant() + update_icon_lights() + + if(myseed && myseed.get_gene(/datum/plant_gene/trait/glow)) + var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow) + set_light(G.get_lum(myseed)) + else + set_light(0) + + return + +/obj/machinery/hydroponics/proc/update_icon_hoses() var/n = 0 for(var/Dir in cardinal) @@ -297,52 +307,56 @@ icon_state = "hoses-[n]" - UpdateDescription() - - if(planted) - var/image/I - if(dead) - I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-dead") - else if(harvest) - if(myseed.plant_type == 2) // Shrooms don't have a -harvest graphic - I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-grow[myseed.growthstages]") - else - I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-harvest") - else if(age < myseed.maturation) - var/t_growthstate = ((age / myseed.maturation) * myseed.growthstages ) // Make sure it won't crap out due to HERPDERP 6 stages only - I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-grow[round(t_growthstate)]") - lastproduce = age //Cheating by putting this here, it means that it isn't instantly ready to harvest +/obj/machinery/hydroponics/proc/update_icon_plant() + var/image/I + if(dead) + I = image('icons/obj/hydroponics/growing.dmi', icon_state = myseed.icon_dead) + else if(harvest) + if(!myseed.icon_harvest) + I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.icon_grow][myseed.growthstages]") else - I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.species]-grow[myseed.growthstages]") // Same - I.layer = MOB_LAYER + 0.1 - overlays += I - - if(waterlevel <= 10) - overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowwater3") - if(nutrilevel <= 2) - overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lownutri3") - if(health <= (myseed.endurance / 2)) - overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowhealth3") - if(weedlevel >= 5 || pestlevel >= 5 || toxic >= 40) - overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_alert3") - if(harvest) - overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_harvest3") - - if(istype(myseed,/obj/item/seeds/glowshroom)) - set_light(round(myseed.potency / 10)) + I = image('icons/obj/hydroponics/growing.dmi', icon_state = myseed.icon_harvest) else - set_light(0) + var/t_growthstate = min(round((age / myseed.maturation) * myseed.growthstages), myseed.growthstages) + I = image('icons/obj/hydroponics/growing.dmi', icon_state = "[myseed.icon_grow][t_growthstate]") + I.layer = MOB_LAYER + 0.1 + overlays += I + +/obj/machinery/hydroponics/proc/update_icon_lights() + if(waterlevel <= 10) + overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowwater3") + if(nutrilevel <= 2) + overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lownutri3") + if(health <= (myseed.endurance / 2)) + overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_lowhealth3") + if(weedlevel >= 5 || pestlevel >= 5 || toxic >= 40) + overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_alert3") + if(harvest) + overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "over_harvest3") - return -/obj/machinery/hydroponics/proc/UpdateDescription() - desc = null - if (planted) - desc = "[src] has [myseed.plantname] planted." +/obj/machinery/hydroponics/examine(user) + ..() + if(myseed) + user << "It has [myseed.plantname] planted." if (dead) - desc += " It's dead." + user << "It's dead." else if (harvest) - desc += " It's ready to harvest." + user << "It's ready to harvest." + else if (health <= (myseed.endurance / 2)) + user << "It looks unhealthy." + else + user << "[src] is empty." + + user << "Water: [waterlevel]/[maxwater]" + user << "Nutrient: [nutrilevel]/[maxnutri]" + + if(weedlevel >= 5) + user << "[src] is filled with weeds!" + if(pestlevel >= 5) + user << "[src] is filled with tiny worms!" + user << "" // Empty line for readability. + /obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens. dead = 0 @@ -350,26 +364,26 @@ if(myseed) // In case there's nothing in the tray beforehand oldPlantName = myseed.plantname qdel(myseed) + myseed = null else oldPlantName = "Empty tray" switch(rand(1,18)) // randomly pick predominative weed if(16 to 18) - myseed = new /obj/item/seeds/reishimycelium + myseed = new /obj/item/seeds/reishi(src) if(14 to 15) - myseed = new /obj/item/seeds/nettleseed + myseed = new /obj/item/seeds/nettle(src) if(12 to 13) - myseed = new /obj/item/seeds/harebell + myseed = new /obj/item/seeds/harebell(src) if(10 to 11) - myseed = new /obj/item/seeds/amanitamycelium + myseed = new /obj/item/seeds/amanita(src) if(8 to 9) - myseed = new /obj/item/seeds/chantermycelium + myseed = new /obj/item/seeds/chanter(src) if(6 to 7) - myseed = new /obj/item/seeds/towermycelium + myseed = new /obj/item/seeds/tower(src) if(4 to 5) - myseed = new /obj/item/seeds/plumpmycelium + myseed = new /obj/item/seeds/plump(src) else - myseed = new /obj/item/seeds/weeds - planted = 1 + myseed = new /obj/item/seeds/weeds(src) age = 0 health = myseed.endurance lastcycle = world.time @@ -380,43 +394,36 @@ visible_message("[oldPlantName] overtaken by [myseed.plantname].") -/obj/machinery/hydroponics/proc/mutate(var/lifemut = 2, var/endmut = 5, var/productmut = 1, var/yieldmut = 2, var/potmut = 25) // Mutates the current seed - if(!planted) +/obj/machinery/hydroponics/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25) // Mutates the current seed + if(!myseed) return - adjustSLife(rand(-lifemut,lifemut)) - adjustSEnd(rand(-endmut,endmut)) - adjustSProduct(rand(-productmut,productmut)) - adjustSYield(rand(-yieldmut,yieldmut)) - adjustSPot(rand(-potmut,potmut)) - + myseed.mutate(lifemut, endmut, productmut, yieldmut, potmut) /obj/machinery/hydroponics/proc/hardmutate() mutate(4, 10, 2, 4, 50) /obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant! - if(!planted || dead) + if(!myseed || dead) return var/oldPlantName = myseed.plantname if(myseed.mutatelist.len > 0) var/mutantseed = pick(myseed.mutatelist) qdel(myseed) + myseed = null myseed = new mutantseed - else return - dead = 0 hardmutate() - planted = 1 age = 0 health = myseed.endurance lastcycle = world.time harvest = 0 weedlevel = 0 // Reset - spawn(5) // Wait a while + sleep(5) // Wait a while update_icon() visible_message("[oldPlantName] suddenly mutated into [myseed.plantname]!") @@ -425,18 +432,18 @@ if( weedlevel > 5 ) if(myseed) qdel(myseed) - var/newWeed = pick(/obj/item/seeds/libertymycelium, /obj/item/seeds/angelmycelium, /obj/item/seeds/deathnettleseed, /obj/item/seeds/kudzuseed) + myseed = null + var/newWeed = pick(/obj/item/seeds/liberty, /obj/item/seeds/angel, /obj/item/seeds/nettle/death, /obj/item/seeds/kudzu) myseed = new newWeed dead = 0 hardmutate() - planted = 1 age = 0 health = myseed.endurance lastcycle = world.time harvest = 0 weedlevel = 0 // Reset - spawn(5) // Wait a while + sleep(5) // Wait a while update_icon() visible_message("The mutated weeds in [src] spawned a [myseed.plantname]!") else @@ -461,23 +468,29 @@ else usr << "The pests seem to behave oddly, but quickly settle down..." -/obj/machinery/hydroponics/proc/applyChemicals(var/datum/reagents/S) - - if(!myseed) - return - myseed.on_chem_reaction(S) //In case seeds have some special interactions with special chems, currently only used by vines +/obj/machinery/hydroponics/proc/applyChemicals(datum/reagents/S) + if(myseed) + myseed.on_chem_reaction(S) //In case seeds have some special interactions with special chems, currently only used by vines // Requires 5 mutagen to possibly change species.// Poor man's mutagen. if(S.has_reagent("mutagen", 5) || S.has_reagent("radium", 10) || S.has_reagent("uranium", 10)) switch(rand(100)) - if(91 to 100) plantdies() - if(81 to 90) mutatespecie() - if(66 to 80) hardmutate() - if(41 to 65) mutate() - if(21 to 41) usr << "The plants don't seem to react..." - if(11 to 20) mutateweed() - if(1 to 10) mutatepest() - else usr << "Nothing happens..." + if(91 to 100) + plantdies() + if(81 to 90) + mutatespecie() + if(66 to 80) + hardmutate() + if(41 to 65) + mutate() + if(21 to 41) + usr << "The plants don't seem to react..." + if(11 to 20) + mutateweed() + if(1 to 10) + mutatepest() + else + usr << "Nothing happens..." // 2 or 1 units is enough to change the yield and other stats.// Can change the yield and other stats, but requires more than mutagen else if(S.has_reagent("mutagen", 2) || S.has_reagent("radium", 5) || S.has_reagent("uranium", 5)) @@ -542,7 +555,8 @@ adjustWater(-round(S.get_reagent_amount("chlorine") * 0.5)) adjustWeeds(-rand(1,3)) - // White Phosphorous + water -> phosphoric acid. That's not a good thing really. Phosphoric salts are beneficial though. And even if the plant suffers, in the long run the tray gets some nutrients. The benefit isn't worth that much. + // White Phosphorous + water -> phosphoric acid. That's not a good thing really. + // Phosphoric salts are beneficial though. And even if the plant suffers, in the long run the tray gets some nutrients. The benefit isn't worth that much. if(S.has_reagent("phosphorus", 1)) adjustHealth(-round(S.get_reagent_amount("phosphorus") * 0.75)) adjustNutri(round(S.get_reagent_amount("phosphorus") * 0.1)) @@ -564,7 +578,8 @@ adjustWater(round(S.get_reagent_amount("holywater") * 1)) adjustHealth(round(S.get_reagent_amount("holywater") * 0.1)) - // A variety of nutrients are dissolved in club soda, without sugar. These nutrients include carbon, oxygen, hydrogen, phosphorous, potassium, sulfur and sodium, all of which are needed for healthy plant growth. + // A variety of nutrients are dissolved in club soda, without sugar. + // These nutrients include carbon, oxygen, hydrogen, phosphorous, potassium, sulfur and sodium, all of which are needed for healthy plant growth. if(S.has_reagent("sodawater", 1)) adjustWater(round(S.get_reagent_amount("sodawater") * 1)) adjustHealth(round(S.get_reagent_amount("sodawater") * 0.1)) @@ -588,6 +603,12 @@ adjustToxic(-round(S.get_reagent_amount("plantbgone") * 6)) adjustWeeds(-rand(4,8)) + // why, just why + if(S.has_reagent("napalm", 1)) + adjustHealth(-round(S.get_reagent_amount("napalm") * 6)) + adjustToxic(-round(S.get_reagent_amount("napalm") * 7)) + adjustWeeds(-rand(5,9)) + //Weed Spray if(S.has_reagent("weedkiller", 1)) adjustToxic(round(S.get_reagent_amount("weedkiller") * 0.5)) @@ -608,13 +629,15 @@ if(S.has_reagent("ammonia", 1)) adjustHealth(round(S.get_reagent_amount("ammonia") * 0.5)) adjustNutri(round(S.get_reagent_amount("ammonia") * 1)) - adjustSYield(round(S.get_reagent_amount("ammonia") * 0.01)) + if(myseed) + myseed.adjust_yield(round(S.get_reagent_amount("ammonia") * 0.01)) // This is more bad ass, and pests get hurt by the corrosive nature of it, not the plant. if(S.has_reagent("diethylamine", 1)) adjustHealth(round(S.get_reagent_amount("diethylamine") * 1)) adjustNutri(round(S.get_reagent_amount("diethylamine") * 2)) - adjustSYield(round(S.get_reagent_amount("diethylamine") * 0.02)) + if(myseed) + myseed.adjust_yield(round(S.get_reagent_amount("diethylamine") * 0.02)) adjustPests(-rand(1,2)) // Compost, effectively @@ -706,47 +729,35 @@ reagent_source.update_icon() return 1 - else if(istype(O, /obj/item/seeds/)) - if(!planted) + else if(istype(O, /obj/item/seeds)) + if(!myseed) user.unEquip(O) user << "You plant [O]." dead = 0 myseed = O - planted = 1 age = 1 health = myseed.endurance lastcycle = world.time O.loc = src - if((user.client && user.s_active != src)) - user.client.screen -= O - O.dropped(user) update_icon() else user << "[src] already has seeds in it!" else if(istype(O, /obj/item/device/analyzer/plant_analyzer)) - if(planted && myseed) + if(myseed) user << "*** [myseed.plantname] ***" //Carn: now reports the plants growing, not the seeds. - user << "-Plant Age: [age]" - user << "-Plant Endurance: [myseed.endurance]" - user << "-Plant Lifespan: [myseed.lifespan]" - if(myseed.yield != -1) - user << "-Plant Yield: [myseed.yield]" - user << "-Plant Production: [myseed.production]" - if(myseed.potency != -1) - user << "-Plant Potency: [myseed.potency]" - var/list/text_strings = myseed.get_analyzer_text() - if(text_strings) - for(var/string in text_strings) - user << string + user << "- Plant Age: [age]" + var/list/text_string = myseed.get_analyzer_text() + if(text_string) + user << text_string else user << "No plant found." - user << "-Weed level: [weedlevel] / 10" - user << "-Pest level: [pestlevel] / 10" - user << "-Toxicity level: [toxic] / 100" - user << "-Water level: [waterlevel] / [maxwater]" - user << "-Nutrition level: [nutrilevel] / [maxnutri]" + user << "- Weed level: [weedlevel] / 10" + user << "- Pest level: [pestlevel] / 10" + user << "- Toxicity level: [toxic] / 100" + user << "- Water level: [waterlevel] / [maxwater]" + user << "- Nutrition level: [nutrilevel] / [maxnutri]" user << "" else if(istype(O, /obj/item/weapon/cultivator)) @@ -816,122 +827,13 @@ if(harvest) myseed.harvest() else if(dead) - planted = 0 dead = 0 user << "You remove the dead plant from [src]." qdel(myseed) + myseed = null update_icon() else - if(planted && !dead) - user << "[src] has [myseed.plantname] planted." - if(health <= (myseed.endurance / 2)) - user << "The plant looks unhealthy." - else - user << "[src] is empty." - user << "Water: [waterlevel]/[maxwater]" - user << "Nutrient: [nutrilevel]/[maxnutri]" - if(weedlevel >= 5) // Visual aid for those blind - user << "[src] is filled with weeds!" - if(pestlevel >= 5) // Visual aid for those blind - user << "[src] is filled with tiny worms!" - user << "" // Empty line for readability. - -/obj/item/seeds/proc/getYield() - var/obj/machinery/hydroponics/parent = loc - if (parent.yieldmod == 0) - return min(yield, 1)//1 if above zero, 0 otherwise - return (round(yield * parent.yieldmod * parent.co2mod)) - -/obj/item/seeds/proc/harvest(mob/user = usr) - var/obj/machinery/hydroponics/parent = loc //for ease of access - var/t_amount = 0 - var/list/result = list() - var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc //needed for TK - - var/critfail = 0 //If potency is 0 - - while(t_amount < getYield()) - var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new product(output_loc, potency) - result.Add(t_prod) // User gets a consumable - if(!t_prod) return - t_prod.lifespan = lifespan - t_prod.endurance = endurance - t_prod.maturation = maturation - t_prod.production = production - t_prod.yield = yield - t_prod.potency = potency - t_prod.plant_type = plant_type - if(potency == 0) // :^( - critfail = 1 //Won't play for replica pods, but these don't need the trombone - t_amount++ - - if(critfail) - playsound(loc, 'sound/misc/sadtrombone.ogg', 50, 0) - - parent.update_tray() - - return result - - -/obj/item/seeds/replicapod/harvest(mob/user = usr) //now that one is fun -- Urist - var/obj/machinery/hydroponics/parent = loc - var/make_podman = 0 - var/ckey_holder = null - if(config.revival_pod_plants) - if(ckey) - for(var/mob/M in player_list) - if(istype(M, /mob/dead/observer)) - var/mob/dead/observer/O = M - if(O.ckey == ckey && O.can_reenter_corpse) - make_podman = 1 - break - else - if(M.ckey == ckey && M.stat == 2 && !M.suiciding) - make_podman = 1 - break - else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key - for(var/mob/M in player_list) - if(mind && M.mind && ckey(M.mind.key) == ckey(mind.key) && M.ckey && M.client && M.stat == 2 && !M.suiciding) - if(istype(M, /mob/dead/observer)) - var/mob/dead/observer/O = M - if(!O.can_reenter_corpse) - break - make_podman = 1 - ckey_holder = M.ckey - break - - if(make_podman) //all conditions met! - var/mob/living/carbon/human/podman = new /mob/living/carbon/human(parent.loc) - if(realName) - podman.real_name = realName - else - podman.real_name = "Pod Person [rand(0,999)]" - mind.transfer_to(podman) - if(ckey) - podman.ckey = ckey - else - podman.ckey = ckey_holder - podman.gender = blood_gender - podman.faction |= factions - if(!mutant_color) - mutant_color = "#59CE00" - hardset_dna(podman,null,null,podman.real_name,blood_type,/datum/species/plant/pod,mutant_color)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman - podman.set_cloned_appearance() - - else //else, one packet of seeds. maybe two - var/seed_count = 1 - if(prob(getYield() * 20)) - seed_count++ - for(var/i=0,i0) adjustToxic(-round(adjustamt/4))//Toxicity dilutation code. The more water you put in, the lesser the toxin concentration. -/obj/machinery/hydroponics/proc/adjustHealth(var/adjustamt) - if(planted && !dead) - health += adjustamt - health = max(health, 0) - health = min(health, myseed.endurance) - -/obj/machinery/hydroponics/proc/adjustToxic(var/adjustamt) - toxic += adjustamt - toxic = max(toxic, 0) - toxic = min(toxic, 100) - -/obj/machinery/hydroponics/proc/adjustPests(var/adjustamt) - pestlevel += adjustamt - pestlevel = max(pestlevel, 0) - pestlevel = min(pestlevel, 10) - -/obj/machinery/hydroponics/proc/adjustWeeds(var/adjustamt) - weedlevel += adjustamt - weedlevel = max(weedlevel, 0) - weedlevel = min(weedlevel, 10) - -/// Seed Setters /// -/obj/machinery/hydroponics/proc/adjustSYield(var/adjustamt)//0,10 - if(myseed && myseed.yield != -1) // Unharvestable shouldn't suddenly turn harvestable - myseed.yield += adjustamt - myseed.yield = max(myseed.yield, 0) - myseed.yield = min(myseed.yield, 10) - if(myseed.yield <= 0 && myseed.plant_type == 2) - myseed.yield = 1 // Mushrooms always have a minimum yield of 1. - -/obj/machinery/hydroponics/proc/adjustSLife(var/adjustamt)//10,100 - if(myseed) - myseed.lifespan += adjustamt - myseed.lifespan = max(myseed.lifespan, 10) - myseed.lifespan = min(myseed.lifespan, 100) +/obj/machinery/hydroponics/proc/adjustHealth(adjustamt) + if(myseed && !dead) + health = Clamp(health + adjustamt, 0, myseed.endurance) -/obj/machinery/hydroponics/proc/adjustSEnd(var/adjustamt)//10,100 - if(myseed) - myseed.endurance += adjustamt - myseed.endurance = max(myseed.endurance, 10) - myseed.endurance = min(myseed.endurance, 100) +/obj/machinery/hydroponics/proc/adjustToxic(adjustamt) + toxic = Clamp(toxic + adjustamt, 0, 100) -/obj/machinery/hydroponics/proc/adjustSProduct(var/adjustamt)//2,10 - if(myseed) - myseed.production += adjustamt - myseed.production = max(myseed.production, 2) - myseed.production = min(myseed.production, 10) +/obj/machinery/hydroponics/proc/adjustPests(adjustamt) + pestlevel = Clamp(pestlevel + adjustamt, 0, 10) -/obj/machinery/hydroponics/proc/adjustSPot(var/adjustamt)//0,100 - if(myseed && myseed.potency != -1) //Not all plants have a potency - myseed.potency += adjustamt - myseed.potency = max(myseed.potency, 0) - myseed.potency = min(myseed.potency, 100) +/obj/machinery/hydroponics/proc/adjustWeeds(adjustamt) + weedlevel = Clamp(weedlevel + adjustamt, 0, 10) + +/obj/machinery/hydroponics/proc/spawnplant() // why would you put strange reagent in a hydro tray you monster I bet you also feed them blood + var/list/livingplants = list(/mob/living/simple_animal/hostile/tree, /mob/living/simple_animal/hostile/killertomato) + var/chosen = pick(livingplants) + var/mob/living/simple_animal/hostile/C = new chosen + C.faction = list("plants") /////////////////////////////////////////////////////////////////////////////// /obj/machinery/hydroponics/soil //Not actually hydroponics at all! Honk! @@ -1025,34 +889,14 @@ use_power = 0 unwrenchable = 0 -/obj/machinery/hydroponics/soil/update_icon() // Same as normal but with the overlays removed - Cheridan. - overlays.Cut() +/obj/machinery/hydroponics/soil/update_icon_hoses() + return // Has no hoses - UpdateDescription() - - if(planted) - if(dead) - overlays += image('icons/obj/hydroponics/growing.dmi', icon_state= "[myseed.species]-dead") - else if(harvest) - if(myseed.plant_type == 2) // Shrooms don't have a -harvest graphic - overlays += image('icons/obj/hydroponics/growing.dmi', icon_state= "[myseed.species]-grow[myseed.growthstages]") - else - overlays += image('icons/obj/hydroponics/growing.dmi', icon_state= "[myseed.species]-harvest") - else if(age < myseed.maturation) - var/t_growthstate = ((age / myseed.maturation) * myseed.growthstages ) - overlays += image('icons/obj/hydroponics/growing.dmi', icon_state= "[myseed.species]-grow[round(t_growthstate)]") - lastproduce = age - else - overlays += image('icons/obj/hydroponics/growing.dmi', icon_state= "[myseed.species]-grow[myseed.growthstages]") - - if(istype(myseed,/obj/item/seeds/glowshroom)) - set_light(round(myseed.potency/10)) - else - set_light(0) - return +/obj/machinery/hydroponics/soil/update_icon_lights() + return // Has no lights -/obj/machinery/hydroponics/soil/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/machinery/hydroponics/soil/attackby(obj/item/O, mob/user, params) ..() if(istype(O, /obj/item/weapon/shovel)) - user << "You clear up [src]!" - qdel(src) + user << "You clear up [src]!" + qdel(src) \ No newline at end of file diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm new file mode 100644 index 0000000000000..3dbb809313939 --- /dev/null +++ b/code/modules/hydroponics/plant_genes.dm @@ -0,0 +1,293 @@ +/datum/plant_gene + var/name + +/datum/plant_gene/proc/get_name() // Used for manipulator display and gene disk name. + return name + +/datum/plant_gene/proc/can_add(obj/item/seeds/S) + return !istype(S, /obj/item/seeds/sample) // Samples can't accept new genes + +/datum/plant_gene/proc/Copy() + return new type + + + + +// Core plant genes store 5 main variables: lifespan, endurance, production, yield, potency +/datum/plant_gene/core + var/value + +/datum/plant_gene/core/get_name() + return "[name] [value]" + +/datum/plant_gene/core/proc/apply_stat(obj/item/seeds/S) + return + +/datum/plant_gene/core/New(var/i = null) + ..() + if(!isnull(i)) + value = i + +/datum/plant_gene/core/Copy() + var/datum/plant_gene/core/C = ..() + C.value = value + return C + +/datum/plant_gene/core/can_add(obj/item/seeds/S) + if(!..()) + return FALSE + return S.get_gene(src.type) + +/datum/plant_gene/core/lifespan + name = "Lifespan" + value = 25 + +/datum/plant_gene/core/lifespan/apply_stat(obj/item/seeds/S) + S.lifespan = value + + +/datum/plant_gene/core/endurance + name = "Endurance" + value = 15 + +/datum/plant_gene/core/endurance/apply_stat(obj/item/seeds/S) + S.endurance = value + + +/datum/plant_gene/core/production + name = "Production Speed" + value = 6 + +/datum/plant_gene/core/production/apply_stat(obj/item/seeds/S) + S.production = value + + +/datum/plant_gene/core/yield + name = "Yield" + value = 3 + +/datum/plant_gene/core/yield/apply_stat(obj/item/seeds/S) + S.yield = value + + +/datum/plant_gene/core/potency + name = "Potency" + value = 10 + +/datum/plant_gene/core/potency/apply_stat(obj/item/seeds/S) + S.potency = value + + +// Reagent genes store reagent ID and reagent ratio. Amount of reagent in the plant = 1 + (potency * rate) +/datum/plant_gene/reagent + name = "Nutriment" + var/reagent_id = "nutriment" + var/rate = 0.04 + +/datum/plant_gene/reagent/get_name() + return "[name] production [rate*100]%" + +/datum/plant_gene/reagent/proc/set_reagent(reag_id) + reagent_id = reag_id + name = "UNKNOWN" + + var/datum/reagent/R = chemical_reagents_list[reag_id] + if(R && R.id == reagent_id) + name = R.name + +/datum/plant_gene/reagent/New(reag_id = null, reag_rate = 0) + ..() + if(reag_id && reag_rate) + set_reagent(reag_id) + rate = reag_rate + +/datum/plant_gene/reagent/Copy() + var/datum/plant_gene/reagent/G = ..() + G.name = name + G.reagent_id = reagent_id + G.rate = rate + return G + +/datum/plant_gene/reagent/can_add(obj/item/seeds/S) + if(!..()) + return FALSE + for(var/datum/plant_gene/reagent/R in S.genes) + if(R.reagent_id == reagent_id) + return FALSE + return TRUE + + +// Various traits affecting the product. Each must be somehow useful. +/datum/plant_gene/trait + var/rate = 0.05 + var/examine_line = "" + var/list/origin_tech = null + var/trait_id // must be set and equal for any two traits of the same type + +/datum/plant_gene/trait/Copy() + var/datum/plant_gene/trait/G = ..() + G.rate = rate + return G + +/datum/plant_gene/trait/can_add(obj/item/seeds/S) + if(!..()) + return FALSE + + for(var/datum/plant_gene/trait/R in S.genes) + if(trait_id && R.trait_id == trait_id) + return FALSE + if(type == R.type) + return FALSE + return TRUE + +/datum/plant_gene/trait/proc/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc) + if(origin_tech) // This ugly code segment adds RnD tech levels to resulting plants. + if(G.origin_tech) + var/list/tech = params2list(G.origin_tech) + for(var/t in origin_tech) + if(t in tech) + tech[t] = max(tech[t], origin_tech[t]) + else + tech[t] = origin_tech[t] + G.origin_tech = list2params(tech) + else + G.origin_tech = list2params(origin_tech) + return + +/datum/plant_gene/trait/proc/on_consume(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) + return +/datum/plant_gene/trait/proc/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) + return +/datum/plant_gene/trait/proc/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target) + return + + + +/datum/plant_gene/trait/squash + // Allows the plant to be squashed when thrown or slipped on, leaving a colored mess and trash type item behind. + // Also splashes everything in target turf with reagents and applies other trait effects (teleporting, etc) to the target by on_squash. + // For code, see grown.dm + name = "Liquid Contents" + examine_line = "It has a lot of liquid contents inside." + +/*/datum/plant_gene/trait/squash/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) + G.squash(target)*/ + + +/datum/plant_gene/trait/slip + // Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery. + // Applies other trait effects (teleporting, etc) to the target by on_slip. + // For code, see grown.dm + name = "Slippery Skin" + rate = 0.1 + examine_line = "It has a very slippery skin." + + +/datum/plant_gene/trait/cell_charge + // Cell recharging trait. Charges all mob's power cells to (potency*rate)% mark when eaten. + // Generates sparks on squash. + // Small (potency*rate*5) chance to shock squish or slip target for (potency*rate*5) damage. + // Multiplies max charge by (rate*1000) when used in potato power cells. + name = "Electrical Activity" + rate = 0.01 + origin_tech = list("powerstorage" = 4) + +/datum/plant_gene/trait/cell_charge/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) + var/power = G.seed.potency*rate*5 + if(prob(power)) + C.electrocute_act(round(power), G, 1, 1) + +/datum/plant_gene/trait/cell_charge/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target) + if(iscarbon(target)) + var/mob/living/carbon/C = target + var/power = G.seed.potency*rate*5 + if(prob(power)) + C.electrocute_act(round(power), G, 1, 1) + +/datum/plant_gene/trait/cell_charge/on_consume(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) + if(!G.reagents.total_volume) + var/batteries_recharged = 0 + for(var/obj/item/weapon/stock_parts/cell/C in target.GetAllContents()) + var/newcharge = min(G.seed.potency*0.01*C.maxcharge, C.maxcharge) + if(C.charge < newcharge) + C.charge = newcharge + if(isobj(C.loc)) + var/obj/O = C.loc + O.update_icon() //update power meters and such + C.update_icon() + batteries_recharged = 1 + if(batteries_recharged) + target << "Your batteries are recharged!" + + + +/datum/plant_gene/trait/glow + // Makes plant glow. Makes plant in tray glow too. + // Adds potency*rate luminosity to products. + name = "Bioluminescence" + rate = 0.1 + examine_line = "It emits a soft glow." + trait_id = "glow" + +/datum/plant_gene/trait/glow/proc/get_lum(obj/item/seeds/S) + return round(S.potency*rate) + +/datum/plant_gene/trait/glow/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc) + ..() + if(ismob(newloc)) + G.pickup(newloc)//adjusts the lighting on the mob + else + G.set_light(get_lum(G.seed)) + +/datum/plant_gene/trait/glow/berry + name = "Strong Bioluminescence" + rate = 0.2 + + +/datum/plant_gene/trait/teleport + // Makes plant teleport people when squashed or slipped on. + // Teleport radius is calculated as max(round(potency*rate), 1) + name = "Bluespace Activity" + rate = 0.1 + origin_tech = list("bluespace" = 3) + +/datum/plant_gene/trait/teleport/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target) + if(isliving(target)) + var/teleport_radius = max(round(G.seed.potency / 10), 1) + var/turf/T = get_turf(target) + new /obj/effect/decal/cleanable/molten_item(T) //Leave a pile of goo behind for dramatic effect... + do_teleport(target, T, teleport_radius) + +/datum/plant_gene/trait/teleport/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) + var/teleport_radius = max(round(G.seed.potency / 10), 1) + var/turf/T = get_turf(C) + C << "You slip through spacetime!" + do_teleport(C, T, teleport_radius) + if(prob(50)) + do_teleport(G, T, teleport_radius) + else + new /obj/effect/decal/cleanable/molten_item(T) //Leave a pile of goo behind for dramatic effect... + qdel(G) + + +/datum/plant_gene/trait/noreact + // Makes plant NOREACT until squashed. + name = "Separated Chemicals" + +/datum/plant_gene/trait/noreact/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc) + ..() + G.flags |= NOREACT + +/datum/plant_gene/trait/noreact/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target) + G.flags &= ~NOREACT + G.reagents.handle_reactions() + + +/datum/plant_gene/trait/maxchem + // 2x to max reagents volume. + name = "Densified Chemicals" + rate = 2 + +/datum/plant_gene/trait/maxchem/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc) + ..() + G.reagents.maximum_volume *= rate \ No newline at end of file diff --git a/code/modules/hydroponics/sample.dm b/code/modules/hydroponics/sample.dm new file mode 100644 index 0000000000000..4478671b2fb2f --- /dev/null +++ b/code/modules/hydroponics/sample.dm @@ -0,0 +1,44 @@ +var/list/chem_t1_reagents = list( + "hydrogen", "oxygen", "silicon", + "phosphorus", "sulfur", "carbon", + "nitrogen", "water" +) + +var/list/chem_t2_reagents = list( + "lithium", "copper", "mercury", + "sodium", "iodine", "bromine" +) // "sugar", "sacid" removed because they are already in roundstart plants + +var/list/chem_t3_reagents = list( + "ethanol", "chlorine", "potassium", + "aluminium", "radium", "fluorine", + "iron", "welding_fuel", "silver", + "stable_plasma" +) + +var/list/chem_t4_reagents = list( + "oil", "ash", "acetone", + "saltpetre", "ammonia", "diethylamine" +) + +/obj/item/seeds/sample + name = "plant sample" + icon_state = "sample-empty" + potency = -1 + yield = -1 + var/sample_color = "#FFFFFF" + +/obj/item/seeds/sample/New() + ..() + if(sample_color) + var/image/I = image(icon, icon_state = "sample-filling") + I.color = sample_color + overlays += I + +/obj/item/seeds/sample/get_analyzer_text() + return " The DNA of this sample is damaged beyond recovery, it can't support life on it's own.\n*---------*" + +/obj/item/seeds/sample/alienweed + name = "alien weed sample" + icon_state = "alienweed" + sample_color = null \ No newline at end of file diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index f3be9c55e3a85..bc0dc740e214c 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -9,32 +9,20 @@ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/)) var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O while(t_amount < t_max) - var/obj/item/seeds/t_prod = new F.seed(O.loc, O) - 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 + var/obj/item/seeds/t_prod = F.seed.Copy() + t_prod.loc = O.loc t_amount++ qdel(O) return 1 - else if(istype(O, /obj/item/weapon/grown/)) + else if(istype(O, /obj/item/weapon/grown)) var/obj/item/weapon/grown/F = O - if(F.seed) - while(t_amount < t_max) - var/obj/item/seeds/t_prod = new F.seed(O.loc, O) - 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++ - qdel(O) - return 1 - else return 0 + while(t_amount < t_max) + var/obj/item/seeds/t_prod = F.seed.Copy() + t_prod.loc = O.loc + t_amount++ + qdel(O) + return 1 /*else if(istype(O, /obj/item/stack/tile/grass)) var/obj/item/stack/tile/grass/S = O diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 7c244cbc38528..9e12ba81932d1 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -3,1531 +3,255 @@ // ******************************************************** /obj/item/seeds - name = "pack of seeds" + name = "A pack of seeds." icon = 'icons/obj/hydroponics/seeds.dmi' - icon_state = "seed" //Unknown plant seed - these shouldn't exist in-game. - w_class = 1 //Pocketable. - var/plantname = "Plants" //Name of plant when planted. - var/product //A type path. The thing that is created when the plant is harvested. - var/species = "" //Used to update icons. Should match the name in the sprites. - var/lifespan = 0 //How long before the plant begins to take damage from age. - var/endurance = 0 //Amount of health the plant has. - var/maturation = 0 //Used to determine which sprite to switch to when growing. - var/production = 0 //Changes the amount of time needed for a plant to become harvestable. - var/yield = 0 //Amount of growns created per harvest. If is -1, the plant/shroom/weed is never meant to be harvested. - var/oneharvest = 0 //If a plant is cleared from the tray after harvesting, e.g. a carrot. - var/potency = -1 //The 'power' of a plant. Generally effects the amount of reagent in a plant, also used in other ways. - var/growthstages = 0 //Amount of growth sprites the plant has. - var/plant_type = 0 //0 = 'normal plant'; 1 = weed; 2 = shroom - var/rarity = 0 //How rare the plant is. Used for giving points to cargo when shipping off to Centcom. - var/list/mutatelist = list() //The type of plants that this plant can mutate into. - -/obj/item/seeds/New(loc, parent) + icon_state = "seed" // Unknown plant seed - these shouldn't exist in-game. + w_class = 1 // Pocketable. + var/plantname = "Plants" // Name of plant when planted. + var/product // A type path. The thing that is created when the plant is harvested. + var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overriden. + + var/icon_grow // Used to override grow icon (default is "[species]-grow"). You can use one grow icon for multiple closely related plants with it. + var/icon_dead // Used to override dead icon (default is "[species]-dead"). You can use one dead icon for multiple closely related plants with it. + var/icon_harvest // Used to override harvest icon (default is "[species]-harvest"). If null, plant will use [icon_grow][growthstages]. + + var/lifespan = 25 // How long before the plant begins to take damage from age. + var/endurance = 15 // Amount of health the plant has. + var/maturation = 6 // Used to determine which sprite to switch to when growing. + var/production = 6 // Changes the amount of time needed for a plant to become harvestable. + var/yield = 3 // Amount of growns created per harvest. If is -1, the plant/shroom/weed is never meant to be harvested. + var/oneharvest = 0 // If a plant is cleared from the tray after harvesting, e.g. a carrot. + var/potency = 10 // The 'power' of a plant. Generally effects the amount of reagent in a plant, also used in other ways. + var/growthstages = 6 // Amount of growth sprites the plant has. + var/plant_type = PLANT_NORMAL // 0 = PLANT_NORMAL; 1 = PLANT_WEED; 2 = PLANT_MUSHROOM; 3 = PLANT_ALIEN + var/rarity = 0 // How rare the plant is. Used for giving points to cargo when shipping off to Centcom. + var/list/mutatelist = list() // The type of plants that this plant can mutate into. + var/list/genes = list() // Plant genes are stored here, see plant_genes.dm for more info. + var/list/reagents_add = list() + // A list of reagents to add to product. + // Format: "reagent_id" = potency multiplier + // Stronger reagents must always come first to avoid being displaced by weaker ones. + // Total amount of any reagent in plant is calculated by formula: 1 + round(potency * multiplier) + + +/obj/item/seeds/New(loc, nogenes = 0) ..() pixel_x = rand(-8, 8) pixel_y = rand(-8, 8) -/obj/item/seeds/proc/get_analyzer_text() //in case seeds have something special to tell to the analyzer - return + if(!icon_grow) + icon_grow = "[species]-grow" -/obj/item/seeds/proc/on_chem_reaction(var/datum/reagents/S) //in case seeds have some special interaction with special chems - return + if(!icon_dead) + icon_dead = "[species]-dead" -/obj/item/seeds/attackby(var/obj/item/O as obj, var/mob/user as mob, params) - if (istype(O, /obj/item/device/analyzer/plant_analyzer)) - user << "*** [plantname] ***" - user << "-Plant Endurance: [endurance]" - user << "-Plant Lifespan: [lifespan]" - user << "-Species Discovery Value: [rarity]" + if(!icon_harvest && plant_type != PLANT_MUSHROOM && yield != -1) + icon_harvest = "[species]-harvest" + + if(!nogenes) // not used on Copy() + genes += new /datum/plant_gene/core/lifespan(lifespan) + genes += new /datum/plant_gene/core/endurance(endurance) if(yield != -1) - user << "-Plant Yield: [yield]" - user << "-Plant Production: [production]" + genes += new /datum/plant_gene/core/yield(yield) + genes += new /datum/plant_gene/core/production(production) if(potency != -1) - user << "-Plant Potency: [potency]" - var/list/text_strings = get_analyzer_text() - if(text_strings) - for(var/string in text_strings) - user << string - return - ..() // Fallthrough to item/attackby() so that bags can pick seeds up - -/obj/item/seeds/chiliseed - name = "pack of chili seeds" - desc = "These seeds grow into chili plants. HOT! HOT! HOT!" - icon_state = "seed-chili" - species = "chili" - plantname = "Chili Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/chili - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - yield = 4 - potency = 20 - plant_type = 0 - growthstages = 6 - rarity = 0 // CentComm knows about this species already, it's in exotic seeds crates. - mutatelist = list(/obj/item/seeds/icepepperseed, /obj/item/seeds/chilighost) - -/obj/item/seeds/replicapod - name = "pack of replica pod seeds" - desc = "These seeds grow into replica pods. They say these are used to harvest humans." - icon_state = "seed-replicapod" - species = "replicapod" - plantname = "Replica Pod" - product = /mob/living/carbon/human //verrry special -- Urist - lifespan = 50 - endurance = 8 - maturation = 10 - production = 1 - yield = 1 //seeds if there isn't a dna inside - oneharvest = 1 - potency = 30 - plant_type = 0 - growthstages = 6 - var/ckey = null - var/realName = null - var/datum/mind/mind = null - var/blood_gender = null - var/blood_type = null - var/mutant_color = null - var/factions = null - var/contains_sample = 0 - -/obj/item/seeds/replicapod/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W,/obj/item/weapon/reagent_containers/syringe)) - if(!contains_sample) - for(var/datum/reagent/blood/bloodSample in W.reagents.reagent_list) - if(bloodSample.data["mind"] && bloodSample.data["cloneable"] == 1) - mind = bloodSample.data["mind"] - ckey = bloodSample.data["ckey"] - realName = bloodSample.data["real_name"] - blood_gender = bloodSample.data["gender"] - blood_type = bloodSample.data["blood_type"] - mutant_color = bloodSample.data["mutant_color"] - factions = bloodSample.data["factions"] - W.reagents.clear_reagents() - user << "You inject the contents of the syringe into the seeds." - contains_sample = 1 - else - user << "The seeds reject the sample!" + genes += new /datum/plant_gene/core/potency(potency) + + for(var/p in genes) + if(ispath(p)) + genes -= p + genes += new p + + for(var/reag_id in reagents_add) + genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id]) + +/obj/item/seeds/proc/Copy() + var/obj/item/seeds/S = new type(null, 1) + // Copy all the stats + S.lifespan = lifespan + S.endurance = endurance + S.maturation = maturation + S.production = production + S.yield = yield + S.potency = potency + S.genes = list() + for(var/g in genes) + var/datum/plant_gene/G = g + S.genes += G.Copy() + S.reagents_add = reagents_add.Copy() // Faster than grabbing the list from genes. + return S + +/obj/item/seeds/proc/get_gene(typepath) + return (locate(typepath) in genes) + +/obj/item/seeds/proc/reagents_from_genes() + reagents_add = list() + for(var/datum/plant_gene/reagent/R in genes) + reagents_add[R.reagent_id] = R.rate + +/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25) + adjust_lifespan(rand(-lifemut,lifemut)) + adjust_endurance(rand(-endmut,endmut)) + adjust_production(rand(-productmut,productmut)) + adjust_yield(rand(-yieldmut,yieldmut)) + adjust_potency(rand(-potmut,potmut)) + + +/obj/item/seeds/bullet_act(obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables. + if(istype(Proj, /obj/item/projectile/energy/florayield)) + + var/rating = 1 + if(istype(loc, /obj/machinery/hydroponics)) + var/obj/machinery/hydroponics/H = loc + rating = H.rating + + if(yield == 0)//Oh god don't divide by zero you'll doom us all. + adjust_yield(1 * rating) + else if(prob(1/(yield * yield) * 100))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2... + adjust_yield(1 * rating) + else + return ..() + + +// Harvest procs +/obj/item/seeds/proc/getYield() + var/return_yield = yield + + var/obj/machinery/hydroponics/parent = loc + if(istype(loc, /obj/machinery/hydroponics)) + if(parent.yieldmod == 0) + return_yield = min(return_yield, 1)//1 if above zero, 0 otherwise else - user << "The seeds already contain a genetic sample." - ..() - - -/obj/item/seeds/grapeseed - name = "pack of grape seeds" - desc = "These seeds grow into grape vines." - icon_state = "seed-grapes" - species = "grape" - plantname = "Grape Vine" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/grapes - lifespan = 50 - endurance = 25 - maturation = 3 - production = 5 - yield = 4 - potency = 10 - plant_type = 0 - growthstages = 2 - mutatelist = list(/obj/item/seeds/greengrapeseed) - -/obj/item/seeds/greengrapeseed - name = "pack of green grape seeds" - desc = "These seeds grow into green-grape vines." - icon_state = "seed-greengrapes" - species = "greengrape" - plantname = "Green-Grape Vine" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/grapes/green - lifespan = 50 - endurance = 25 - maturation = 3 - production = 5 - yield = 4 - potency = 10 - plant_type = 0 - growthstages = 2 - rarity = 0 // Technically it's a beneficial mutant, but it's not exactly "new"... - -/obj/item/seeds/cabbageseed - name = "pack of cabbage seeds" - desc = "These seeds grow into cabbages." - icon_state = "seed-cabbage" - species = "cabbage" - plantname = "Cabbages" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage - lifespan = 50 - endurance = 25 - maturation = 3 - production = 5 - yield = 4 - potency = 10 - plant_type = 0 - growthstages = 1 - mutatelist = list(/obj/item/seeds/replicapod) - -/obj/item/seeds/berryseed - name = "pack of berry seeds" - desc = "These seeds grow into berry bushes." - icon_state = "seed-berry" - species = "berry" - plantname = "Berry Bush" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/berries - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - yield = 2 - potency = 10 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/glowberryseed,/obj/item/seeds/poisonberryseed) - -/obj/item/seeds/glowberryseed - name = "pack of glow-berry seeds" - desc = "These seeds grow into glow-berry bushes." - icon_state = "seed-glowberry" - species = "glowberry" - plantname = "Glow-Berry Bush" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/berries/glow - lifespan = 30 - endurance = 25 - maturation = 5 - production = 5 - yield = 2 - potency = 10 - plant_type = 0 - growthstages = 6 - rarity = 20 - -/obj/item/seeds/bananaseed - name = "pack of banana seeds" - desc = "They're seeds that grow into banana trees. When grown, keep away from clown." - icon_state = "seed-banana" - species = "banana" - plantname = "Banana Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/banana - lifespan = 50 - endurance = 30 - maturation = 6 - production = 6 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/mimanaseed) - -/obj/item/seeds/mimanaseed - name = "pack of mimana seeds" - desc = "They're seeds that grow into mimana trees. When grown, keep away from mime." - icon_state = "seed-mimana" - species = "mimana" - plantname = "Mimana Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/mimana - lifespan = 50 - endurance = 30 - maturation = 6 - production = 6 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 6 - -/obj/item/seeds/eggplantseed - name = "pack of eggplant seeds" - desc = "These seeds grow to produce berries that look nothing like eggs." - icon_state = "seed-eggplant" - species = "eggplant" - plantname = "Eggplants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant - lifespan = 25 - endurance = 15 - maturation = 6 - production = 6 - yield = 2 - potency = 20 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/eggyseed) - -/obj/item/seeds/eggyseed - name = "pack of eggplant seeds" - desc = "These seeds grow to produce berries that look a lot like eggs." - icon_state = "seed-eggy" - species = "eggy" - plantname = "Eggplants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy - lifespan = 75 - endurance = 15 - maturation = 6 - production = 12 - yield = 2 - plant_type = 0 - growthstages = 6 - rarity = 0 // CentComm ships these to us in the exotic seeds crate. - -/obj/item/seeds/bloodtomatoseed - name = "pack of blood-tomato seeds" - desc = "These seeds grow into blood-tomato plants." - icon_state = "seed-bloodtomato" - species = "bloodtomato" - plantname = "Blood-Tomato Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood - lifespan = 25 - endurance = 20 - maturation = 8 - production = 6 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 6 - rarity = 20 - -/obj/item/seeds/tomatoseed - name = "pack of tomato seeds" - desc = "These seeds grow into tomato plants." - icon_state = "seed-tomato" - species = "tomato" - plantname = "Tomato Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato - lifespan = 25 - endurance = 15 - maturation = 8 - production = 6 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/bluetomatoseed, /obj/item/seeds/bloodtomatoseed, /obj/item/seeds/killertomatoseed) - -/obj/item/seeds/killertomatoseed - name = "pack of killer-tomato seeds" - desc = "These seeds grow into killer-tomato plants." - icon_state = "seed-killertomato" - species = "killertomato" - plantname = "Killer-Tomato Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer - lifespan = 25 - endurance = 15 - maturation = 8 - production = 6 - yield = 2 - potency = 10 - plant_type = 0 - oneharvest = 1 - growthstages = 2 - rarity = 30 - -/obj/item/seeds/bluetomatoseed - name = "pack of blue-tomato seeds" - desc = "These seeds grow into blue-tomato plants." - icon_state = "seed-bluetomato" - species = "bluetomato" - plantname = "Blue-Tomato Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue - lifespan = 25 - endurance = 15 - maturation = 8 - production = 6 - yield = 2 - potency = 10 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/bluespacetomatoseed) - rarity = 20 - -/obj/item/seeds/bluespacetomatoseed - name = "pack of blue-space tomato seeds" - desc = "These seeds grow into blue-space tomato plants." - icon_state = "seed-bluespacetomato" - species = "bluespacetomato" - plantname = "Blue-Space Tomato Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace - lifespan = 25 - endurance = 15 - maturation = 8 - production = 6 - yield = 2 - potency = 10 - plant_type = 0 - growthstages = 6 - rarity = 50 - -/obj/item/seeds/cornseed - name = "pack of corn seeds" - desc = "I don't mean to sound corny..." - icon_state = "seed-corn" - species = "corn" - plantname = "Corn Stalks" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/corn - lifespan = 25 - endurance = 15 - maturation = 8 - production = 6 - yield = 3 - plant_type = 0 - oneharvest = 1 - potency = 20 - growthstages = 3 - mutatelist = list(/obj/item/seeds/snapcornseed) - -/obj/item/seeds/snapcornseed - name = "pack of snapcorn seeds" - desc = "Oh snap!" - icon_state = "seed-snapcorn" - species = "snapcorn" - plantname = "Snapcorn Stalks" - product = /obj/item/weapon/grown/snapcorn - lifespan = 25 - endurance = 15 - maturation = 8 - production = 6 - yield = 3 - plant_type = 0 - oneharvest = 1 - potency = 20 - growthstages = 3 - -/obj/item/seeds/poppyseed - name = "pack of poppy seeds" - desc = "These seeds grow into poppies." - icon_state = "seed-poppy" - species = "poppy" - plantname = "Poppy Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/poppy - lifespan = 25 - endurance = 10 - maturation = 8 - production = 6 - yield = 6 - potency = 20 - plant_type = 0 - oneharvest = 1 - growthstages = 3 - mutatelist = list(/obj/item/seeds/bluetomatoseed, /obj/item/seeds/bloodtomatoseed) - -/obj/item/seeds/geraniumseed - name = "pack of geranium seeds" - desc = "These seeds grow into geranium." - icon_state = "seed-geranium" - species = "geranium" - plantname = "geranium Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/poppy/geranium - lifespan = 25 - endurance = 10 - maturation = 8 - production = 6 - yield = 6 - potency = 20 - plant_type = 0 - oneharvest = 1 - growthstages = 3 - -/obj/item/seeds/lilyseed - name = "pack of lily seeds" - desc = "These seeds grow into lilies." - icon_state = "seed-lily" - species = "lily" - plantname = "Lily Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/poppy/lily - lifespan = 25 - endurance = 10 - maturation = 8 - production = 6 - yield = 6 - potency = 20 - plant_type = 0 - oneharvest = 1 - growthstages = 3 - -/obj/item/seeds/potatoseed - name = "pack of potato seeds" - desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" - icon_state = "seed-potato" - species = "potato" - plantname = "Potato Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/potato - lifespan = 30 - endurance = 15 - maturation = 10 - production = 1 - yield = 4 - plant_type = 0 - oneharvest = 1 - potency = 10 - growthstages = 4 - mutatelist = list(/obj/item/seeds/sweetpotatoseed) - -/obj/item/seeds/sweetpotatoseed - name = "pack of sweet potato seeds" - desc = "These seeds grow into sweet potato plants" - icon_state = "seed-sweetpotato" - species = "sweetpotato" - plantname = "Sweet Potato Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/sweetpotato - lifespan = 30 - endurance = 15 - maturation = 10 - production = 1 - yield = 4 - plant_type = 0 - oneharvest = 1 - potency = 10 - growthstages = 4 - -/obj/item/seeds/icepepperseed - name = "pack of ice-pepper seeds" - desc = "These seeds grow into ice-pepper plants." - icon_state = "seed-icepepper" - species = "chiliice" - plantname = "Ice-Pepper Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/icepepper - lifespan = 25 - endurance = 15 - maturation = 4 - production = 4 - yield = 4 - potency = 20 - plant_type = 0 - growthstages = 6 - rarity = 20 - -/obj/item/seeds/soyaseed - name = "pack of soybean seeds" - desc = "These seeds grow into soybean plants." - icon_state = "seed-soybean" - species = "soybean" - plantname = "Soybean Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans - lifespan = 25 - endurance = 15 - maturation = 4 - production = 4 - yield = 3 - potency = 15 - plant_type = 0 - growthstages = 4 - mutatelist = list(/obj/item/seeds/koiseed) - -/obj/item/seeds/koiseed - name = "pack of koibean seeds" - desc = "These seeds grow into koibean plants." - icon_state = "seed-koibean" - species = "soybean" - plantname = "Koibean Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/koibeans - lifespan = 25 - endurance = 15 - maturation = 4 - production = 4 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 4 - rarity = 20 - -/obj/item/seeds/wheatseed - name = "pack of wheat seeds" - desc = "These may, or may not, grow into wheat." - icon_state = "seed-wheat" - species = "wheat" - plantname = "Wheat Stalks" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat - lifespan = 25 - endurance = 15 - maturation = 6 - production = 1 - yield = 4 - potency = 15 - oneharvest = 1 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/oatseed, /obj/item/seeds/riceseed) - -/obj/item/seeds/oatseed - name = "pack of oat seeds" - desc = "These may, or may not, grow into oat." - icon_state = "seed-oat" - species = "oat" - plantname = "oat Stalks" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/oat - lifespan = 25 - endurance = 15 - maturation = 6 - production = 1 - yield = 4 - potency = 15 - oneharvest = 1 - plant_type = 0 - growthstages = 6 - -/obj/item/seeds/riceseed - name = "pack of rice seeds" - desc = "These may, or may not, grow into rice." - icon_state = "seed-rice" - species = "rice" - plantname = "rice Stalks" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/rice - lifespan = 25 - endurance = 15 - maturation = 6 - production = 1 - yield = 4 - potency = 15 - oneharvest = 1 - plant_type = 0 - growthstages = 6 - -/obj/item/seeds/carrotseed - name = "pack of carrot seeds" - desc = "These seeds grow into carrots." - icon_state = "seed-carrot" - species = "carrot" - plantname = "Carrots" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/carrot - lifespan = 25 - endurance = 15 - maturation = 10 - production = 1 - yield = 5 - potency = 10 - oneharvest = 1 - plant_type = 0 - growthstages = 3 - mutatelist = list(/obj/item/seeds/parsnipseed) - -/obj/item/seeds/parsnipseed - name = "pack of parsnip seeds" - desc = "These seeds grow into parsnips." - icon_state = "seed-parsnip" - species = "parsnip" - plantname = "Parsnip" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/parsnip - lifespan = 25 - endurance = 15 - maturation = 10 - production = 1 - yield = 5 - potency = 10 - oneharvest = 1 - plant_type = 0 - growthstages = 3 - -/obj/item/seeds/reishimycelium - name = "pack of reishi mycelium" - desc = "This mycelium grows into something medicinal and relaxing." - icon_state = "mycelium-reishi" - species = "reishi" - plantname = "Reishi" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi - lifespan = 35 - endurance = 35 - maturation = 10 - production = 5 - yield = 4 - potency = 15 - oneharvest = 1 - growthstages = 4 - plant_type = 2 - -/obj/item/seeds/amanitamycelium - name = "pack of fly amanita mycelium" - desc = "This mycelium grows into something horrible." - icon_state = "mycelium-amanita" - species = "amanita" - plantname = "Fly Amanitas" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita - lifespan = 50 - endurance = 35 - maturation = 10 - production = 5 - yield = 4 - potency = 10 - oneharvest = 1 - growthstages = 3 - plant_type = 2 - mutatelist = list(/obj/item/seeds/angelmycelium) - -/obj/item/seeds/angelmycelium - name = "pack of destroying angel mycelium" - desc = "This mycelium grows into something devastating." - icon_state = "mycelium-angel" - species = "angel" - plantname = "Destroying Angels" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel - lifespan = 50 - endurance = 35 - maturation = 12 - production = 5 - yield = 2 - potency = 35 - oneharvest = 1 - growthstages = 3 - plant_type = 2 - rarity = 30 + return_yield *= parent.yieldmod + + return return_yield + +/obj/item/seeds/proc/harvest(mob/user = usr) + var/obj/machinery/hydroponics/parent = loc //for ease of access + var/t_amount = 0 + var/list/result = list() + var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc //needed for TK + var/product_name + while(t_amount < getYield()) + var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new product(output_loc, src) + result.Add(t_prod) // User gets a consumable + if(!t_prod) + return + t_amount++ + product_name = t_prod.name + if(getYield() >= 1) + feedback_add_details("food_harvested","[product_name]|[getYield()]") + parent.update_tray() + + return result + +/obj/item/seeds/proc/prepare_result(var/obj/item/weapon/reagent_containers/food/snacks/grown/T) + if(T.reagents) + for(var/reagent_id in reagents_add) + if(reagent_id == "blood") // Hack to make blood in plants always O- + T.reagents.add_reagent(reagent_id, 1 + round(potency * reagents_add[reagent_id], 1), list("blood_type"="O-")) + continue + + T.reagents.add_reagent(reagent_id, 1 + round(potency * reagents_add[reagent_id]), 1) + return 1 + + +/// Setters procs /// +/obj/item/seeds/proc/adjust_yield(adjustamt) + if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable + yield = Clamp(yield + adjustamt, 0, 10) + + if(yield <= 0 && plant_type == PLANT_MUSHROOM) + yield = 1 // Mushrooms always have a minimum yield of 1. + var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/yield) + C.value = yield + +/obj/item/seeds/proc/adjust_lifespan(adjustamt) + lifespan = Clamp(lifespan + adjustamt, 10, 100) + var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan) + C.value = lifespan + +/obj/item/seeds/proc/adjust_endurance(adjustamt) + endurance = Clamp(endurance + adjustamt, 10, 100) + var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance) + C.value = endurance + +/obj/item/seeds/proc/adjust_production(adjustamt) + if(yield != -1) + production = Clamp(production + adjustamt, 2, 10) + var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production) + C.value = production + +/obj/item/seeds/proc/adjust_potency(adjustamt) + if(potency != -1) + potency = Clamp(potency + adjustamt, 0, 100) + var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency) + C.value = potency -/obj/item/seeds/libertymycelium - name = "pack of liberty-cap mycelium" - desc = "This mycelium grows into liberty-cap mushrooms." - icon_state = "mycelium-liberty" - species = "liberty" - plantname = "Liberty-Caps" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap - lifespan = 25 - endurance = 15 - maturation = 7 - production = 1 - yield = 5 - potency = 15 - oneharvest = 1 - growthstages = 3 - plant_type = 2 -/obj/item/seeds/chantermycelium - name = "pack of chanterelle mycelium" - desc = "This mycelium grows into chanterelle mushrooms." - icon_state = "mycelium-chanter" - species = "chanter" - plantname = "Chanterelle Mushrooms" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle - lifespan = 35 - endurance = 20 - maturation = 7 - production = 1 - yield = 5 - potency = 15 - oneharvest = 1 - growthstages = 3 - plant_type = 2 - -/obj/item/seeds/towermycelium - name = "pack of tower-cap mycelium" - desc = "This mycelium grows into tower-cap mushrooms." - icon_state = "mycelium-tower" - species = "towercap" - plantname = "Tower Caps" - product = /obj/item/weapon/grown/log - lifespan = 80 - endurance = 50 - maturation = 15 - production = 1 - yield = 5 - potency = 50 - oneharvest = 1 - growthstages = 3 - plant_type = 2 - mutatelist = list(/obj/item/seeds/steelmycelium) - -/obj/item/seeds/steelmycelium - name = "pack of steel-cap mycelium" - desc = "This mycelium grows into steel logs." - icon_state = "mycelium-steelcap" - species = "steelcap" - plantname = "Steel Caps" - product = /obj/item/weapon/grown/log/steel - lifespan = 80 - endurance = 50 - maturation = 15 - production = 1 - yield = 5 - potency = 50 - oneharvest = 1 - growthstages = 3 - plant_type = 2 - -/obj/item/seeds/glowshroom - name = "pack of glowshroom mycelium" - desc = "This mycelium -glows- into mushrooms!" - icon_state = "mycelium-glowshroom" - species = "glowshroom" - plantname = "Glowshrooms" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom - lifespan = 120 //ten times that is the delay - endurance = 30 - maturation = 15 - production = 1 - yield = 3 //-> spread - potency = 30 //-> brightness - oneharvest = 1 - growthstages = 4 - plant_type = 2 - rarity = 20 - -/obj/item/seeds/plumpmycelium - name = "pack of plump-helmet mycelium" - desc = "This mycelium grows into helmets... maybe." - icon_state = "mycelium-plump" - species = "plump" - plantname = "Plump-Helmet Mushrooms" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet - lifespan = 25 - endurance = 15 - maturation = 8 - production = 1 - yield = 4 - potency = 15 - oneharvest = 1 - growthstages = 3 - plant_type = 2 - mutatelist = list(/obj/item/seeds/walkingmushroommycelium) - -/obj/item/seeds/walkingmushroommycelium - name = "pack of walking mushroom mycelium" - desc = "This mycelium will grow into huge stuff!" - icon_state = "mycelium-walkingmushroom" - species = "walkingmushroom" - plantname = "Walking Mushrooms" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom - lifespan = 30 - endurance = 30 - maturation = 5 - production = 1 - yield = 1 - potency = 10 - oneharvest = 1 - growthstages = 3 - plant_type = 2 - rarity = 30 - -/obj/item/seeds/nettleseed - name = "pack of nettle seeds" - desc = "These seeds grow into nettles." - icon_state = "seed-nettle" - species = "nettle" - plantname = "Nettles" - product = /obj/item/weapon/grown/nettle/basic - lifespan = 30 - endurance = 40 // tuff like a toiger - maturation = 6 - production = 6 - yield = 4 - potency = 10 - oneharvest = 0 - growthstages = 5 - plant_type = 1 - mutatelist = list(/obj/item/seeds/deathnettleseed) - -/obj/item/seeds/deathnettleseed - name = "pack of death-nettle seeds" - desc = "These seeds grow into death-nettles." - icon_state = "seed-deathnettle" - species = "deathnettle" - plantname = "Death Nettles" - product = /obj/item/weapon/grown/nettle/death - lifespan = 30 - endurance = 25 - maturation = 8 - production = 6 - yield = 2 - potency = 10 - oneharvest = 0 - growthstages = 5 - plant_type = 1 - rarity = 10 - -/obj/item/seeds/weeds - name = "pack of weed seeds" - desc = "Yo mang, want some weeds?" - icon_state = "seed" - species = "weeds" - plantname = "Starthistle" - lifespan = 100 - endurance = 50 // damm pesky weeds - maturation = 5 - production = 1 - yield = -1 - potency = -1 - oneharvest = 1 - growthstages = 4 - plant_type = 1 - -/obj/item/seeds/harebell - name = "pack of harebell seeds" - desc = "These seeds grow into pretty little flowers." - icon_state = "seed-harebell" - species = "harebell" - plantname = "Harebells" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/harebell - lifespan = 100 - endurance = 20 - maturation = 7 - production = 1 - yield = 2 - potency = 30 - oneharvest = 1 - growthstages = 4 - plant_type = 1 - -/obj/item/seeds/sunflowerseed - name = "pack of sunflower seeds" - desc = "These seeds grow into sunflowers." - icon_state = "seed-sunflower" - species = "sunflower" - plantname = "Sunflowers" - product = /obj/item/weapon/grown/sunflower - lifespan = 25 - endurance = 20 - maturation = 6 - production = 2 - yield = 2 - potency = 10 - oneharvest = 1 - growthstages = 3 - plant_type = 0 - mutatelist = list(/obj/item/seeds/moonflowerseed,/obj/item/seeds/novaflowerseed) - -/obj/item/seeds/moonflowerseed - name = "pack of moonflower seeds" - desc = "These seeds grow into moonflowers." - icon_state = "seed-moonflower" - species = "moonflower" - plantname = "Moonflowers" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/moonflower - lifespan = 25 - endurance = 20 - maturation = 6 - production = 2 - yield = 2 - potency = 15 - oneharvest = 1 - growthstages = 3 - plant_type = 0 - rarity = 10 - -/obj/item/seeds/novaflowerseed - name = "pack of novaflower seeds" - desc = "These seeds grow into novaflowers." - icon_state = "seed-novaflower" - species = "novaflower" - plantname = "Novaflowers" - product = /obj/item/weapon/grown/novaflower - lifespan = 25 - endurance = 20 - maturation = 6 - production = 2 - yield = 2 - potency = 20 - oneharvest = 1 - growthstages = 3 - plant_type = 0 - -/obj/item/seeds/appleseed - name = "pack of apple seeds" - desc = "These seeds grow into apple trees." - icon_state = "seed-apple" - species = "apple" - plantname = "Apple Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/apple - lifespan = 55 - endurance = 35 - maturation = 6 - production = 6 - yield = 5 - potency = 10 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/goldappleseed) - -/obj/item/seeds/poisonedappleseed - name = "pack of apple seeds" - desc = "These seeds grow into apple trees." - icon_state = "seed-apple" - species = "apple" - plantname = "Apple Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned - lifespan = 55 - endurance = 35 - maturation = 6 - production = 6 - yield = 5 - potency = 10 - plant_type = 0 - growthstages = 6 - rarity = 50 // Source of cyanide, and impossible obtain normally. - -/obj/item/seeds/goldappleseed - name = "pack of golden apple seeds" - desc = "These seeds grow into golden apple trees. Good thing there are no firebirds in space." - icon_state = "seed-goldapple" - species = "goldapple" - plantname = "Golden Apple Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold - lifespan = 55 - endurance = 35 - maturation = 10 - production = 10 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 6 - rarity = 40 // Alchemy! - -/obj/item/seeds/ambrosiavulgarisseed - name = "pack of ambrosia vulgaris seeds" - desc = "These seeds grow into common ambrosia, a plant grown by and from medicine." - icon_state = "seed-ambrosiavulgaris" - species = "ambrosiavulgaris" - plantname = "Ambrosia Vulgaris" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris - lifespan = 60 - endurance = 25 - maturation = 6 - production = 6 - yield = 6 - potency = 5 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/ambrosiadeusseed) - -/obj/item/seeds/ambrosiadeusseed - name = "pack of ambrosia deus seeds" - desc = "These seeds grow into ambrosia deus. Could it be the food of the gods..?" - icon_state = "seed-ambrosiadeus" - species = "ambrosiadeus" - plantname = "Ambrosia Deus" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus - lifespan = 60 - endurance = 25 - maturation = 6 - production = 6 - yield = 6 - potency = 5 - plant_type = 0 - growthstages = 6 - rarity = 40 - -/obj/item/seeds/whitebeetseed - name = "pack of white-beet seeds" - desc = "These seeds grow into sugary beet producing plants." - icon_state = "seed-whitebeet" - species = "whitebeet" - plantname = "White-Beet Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet - lifespan = 60 - endurance = 50 - maturation = 6 - production = 6 - yield = 6 - oneharvest = 1 - potency = 10 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/redbeetseed) - -/obj/item/seeds/redbeetseed - name = "pack of redbeet seeds" - desc = "These seeds grow into red beet producing plants." - icon_state = "seed-redbeet" - species = "redbeet" - plantname = "Red-Beet Plants" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/redbeet - lifespan = 60 - endurance = 50 - maturation = 6 - production = 6 - yield = 6 - oneharvest = 1 - potency = 10 - plant_type = 0 - growthstages = 6 - -/obj/item/seeds/sugarcaneseed - name = "pack of sugarcane seeds" - desc = "These seeds grow into sugarcane." - icon_state = "seed-sugarcane" - species = "sugarcane" - plantname = "Sugarcane" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane - lifespan = 60 - endurance = 50 - maturation = 3 - production = 6 - yield = 4 - potency = 10 - plant_type = 0 - growthstages = 3 - -/obj/item/seeds/watermelonseed - name = "pack of watermelon seeds" - desc = "These seeds grow into watermelon plants." - icon_state = "seed-watermelon" - species = "watermelon" - plantname = "Watermelon Vines" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/watermelon - lifespan = 50 - endurance = 40 - maturation = 6 - production = 6 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/holymelonseed) - -/obj/item/seeds/holymelonseed - name = "pack of holymelon seeds" - desc = "These seeds grow into holymelon plants." - icon_state = "seed-holymelon" - species = "holymelon" - plantname = "Holy Melon Vines" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/holymelon - lifespan = 50 - endurance = 40 - maturation = 6 - production = 6 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 6 - -/obj/item/seeds/pumpkinseed - name = "pack of pumpkin seeds" - desc = "These seeds grow into pumpkin vines." - icon_state = "seed-pumpkin" - species = "pumpkin" - plantname = "Pumpkin Vines" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin - lifespan = 50 - endurance = 40 - maturation = 6 - production = 6 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 3 - mutatelist = list(/obj/item/seeds/blumpkinseed) - -/obj/item/seeds/blumpkinseed - name = "pack of blumpkin seeds" - desc = "These seeds grow into blumpkin vines." - icon_state = "seed-blumpkin" - species = "blumpkin" - plantname = "Blumpkin Vines" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin - lifespan = 50 - endurance = 40 - maturation = 6 - production = 6 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 3 - -/obj/item/seeds/limeseed - name = "pack of lime seeds" - desc = "These are very sour seeds." - icon_state = "seed-lime" - species = "lime" - plantname = "Lime Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lime - lifespan = 55 - endurance = 50 - maturation = 6 - production = 6 - yield = 4 - potency = 15 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/orangeseed) - -/obj/item/seeds/lemonseed - name = "pack of lemon seeds" - desc = "These are sour seeds." - icon_state = "seed-lemon" - species = "lemon" - plantname = "Lemon Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lemon - lifespan = 55 - endurance = 45 - maturation = 6 - production = 6 - yield = 4 - potency = 10 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/cashseed) - -/obj/item/seeds/cashseed - name = "pack of money seeds" - desc = "When life gives you lemons, mutate them into cash." - icon_state = "seed-cash" - species = "cashtree" - plantname = "Money Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/shell/moneyfruit - lifespan = 55 - endurance = 45 - maturation = 6 - production = 6 - yield = 4 - potency = 10 - plant_type = 0 - growthstages = 6 - rarity = 50 // Nanotrasen approves... but are these seeds even attainable? Drag the tray to the shuttle? - -/obj/item/seeds/orangeseed - name = "pack of orange seed" - desc = "Sour seeds." - icon_state = "seed-orange" - species = "orange" - plantname = "Orange Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange - lifespan = 60 - endurance = 50 - maturation = 6 - production = 6 - yield = 5 - potency = 20 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/limeseed) - -/obj/item/seeds/poisonberryseed - name = "pack of poison-berry seeds" - desc = "These seeds grow into poison-berry bushes." - icon_state = "seed-poisonberry" - species = "poisonberry" - plantname = "Poison-Berry Bush" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - yield = 2 - potency = 10 - plant_type = 0 - growthstages = 6 - mutatelist = list(/obj/item/seeds/deathberryseed) - rarity = 10 // Mildly poisonous berries are common in reality - -/obj/item/seeds/deathberryseed - name = "pack of death-berry seeds" - desc = "These seeds grow into death berries." - icon_state = "seed-deathberry" - species = "deathberry" - plantname = "Death Berry Bush" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/berries/death - lifespan = 30 - endurance = 20 - maturation = 5 - production = 5 - yield = 3 - potency = 50 - plant_type = 0 - growthstages = 6 - rarity = 30 - -/obj/item/seeds/grassseed - name = "pack of grass seeds" - desc = "These seeds grow into grass. Yummy!" - icon_state = "seed-grass" - species = "grass" - plantname = "Grass" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/grass - lifespan = 40 - endurance = 40 - maturation = 2 - production = 5 - yield = 5 - potency = 10 - plant_type = 0 - growthstages = 2 - mutatelist = list(/obj/item/seeds/carpetseed) - -/obj/item/seeds/carpetseed - name = "pack of carpet seeds" - desc = "These seeds grow into stylish carpet samples." - icon_state = "seed-carpet" - species = "carpet" - plantname = "Carpet" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/carpet - lifespan = 40 - endurance = 40 - maturation = 2 - production = 5 - yield = 5 - potency = 10 - plant_type = 0 - growthstages = 2 - -/obj/item/seeds/cocoapodseed - name = "pack of cocoa pod seeds" - desc = "These seeds grow into cacao trees. They look fattening." //SIC: cocoa is the seeds. The trees are spelled cacao. - icon_state = "seed-cocoapod" - species = "cocoapod" - plantname = "Cacao Tree" //Idem - product = /obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - yield = 2 - potency = 10 - plant_type = 0 - growthstages = 5 - mutatelist = list(/obj/item/seeds/vanillapodseed) - -/obj/item/seeds/vanillapodseed - name = "pack of vanilla pod seeds" - desc = "These seeds grow into vanilla trees. They look fattening." - icon_state = "seed-vanillapod" - species = "vanillapod" - plantname = "Vanilla Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/vanillapod - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - yield = 2 - potency = 10 - plant_type = 0 - growthstages = 5 - -/obj/item/seeds/cherryseed - name = "pack of cherry pits" - desc = "Careful not to crack a tooth on one... That'd be the pits." - icon_state = "seed-cherry" - species = "cherry" - plantname = "Cherry Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/cherries - lifespan = 35 - endurance = 35 - maturation = 5 - production = 5 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 5 - -/obj/item/seeds/bluecherryseed - name = "pack of blue cherry pits" - desc = "The blue kind of cherries" - icon_state = "seed-bluecherry" - species = "bluecherry" - plantname = "Blue Cherry Tree" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries - lifespan = 35 - endurance = 35 - maturation = 5 - production = 5 - yield = 3 - potency = 10 - plant_type = 0 - growthstages = 5 - -/obj/item/seeds/kudzuseed - name = "pack of kudzu seeds" - desc = "These seeds grow into a weed that grows incredibly fast." - icon_state = "seed-kudzu" - species = "kudzu" - plantname = "Kudzu" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod - lifespan = 20 - endurance = 10 - maturation = 6 - production = 6 - yield = 4 - potency = 10 - growthstages = 4 - plant_type = 1 - rarity = 30 - var/list/mutations = list() - -/obj/item/seeds/kudzuseed/New(loc, obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod/parent) - ..() - if(parent) - mutations = parent.mutations +/obj/item/seeds/proc/get_analyzer_text() //in case seeds have something special to tell to the analyzer + var/text = "" + switch(plant_type) + if(PLANT_NORMAL) + text += "- Plant type: Normal plant\n" + if(PLANT_WEED) + text += "- Plant type: Weed. Can grow in nutrient-poor soil.\n" + if(PLANT_MUSHROOM) + text += "- Plant type: Mushroom. Can grow in dry soil.\n" + else + text += "- Plant type: UNKNOWN \n" + if(potency != -1) + text += "- Potency: [potency]\n" + if(yield != -1) + text += "- Yield: [yield]\n" + text += "- Maturation speed: [maturation]\n" + if(yield != -1) + text += "- Production speed: [production]\n" + text += "- Endurance: [endurance]\n" + text += "- Lifespan: [lifespan]\n" + if(rarity) + text += "- Species Discovery Value: [rarity]\n" + + text += "*---------*" + + return text + +/obj/item/seeds/proc/on_chem_reaction(datum/reagents/S) //in case seeds have some special interaction with special chems + return -/obj/item/seeds/kudzuseed/harvest() - var/list/prod = ..() - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod/K in prod) - K.mutations = mutations +/obj/item/seeds/attackby(obj/item/O, mob/user, params) + if (istype(O, /obj/item/device/analyzer/plant_analyzer)) + user << "*---------*\n This is \a [src]." + var/text = get_analyzer_text() + if(text) + user << "[text]" -/obj/item/seeds/kudzuseed/attack_self(mob/user as mob) - if(istype(user.loc,/turf/space)) return - var/turf/T = get_turf(src) - user << "You plant the kudzu. You monster." - message_admins("Kudzu planted by [key_name_admin(user)](?) (FLW) at ([T.x],[T.y],[T.z] - (JMP))",0,1) - investigate_log("was planted by [key_name(user)] at ([T.x],[T.y],[T.z])","kudzu") - new /obj/effect/spacevine_controller(user.loc, mutations, potency, production) - qdel(src) - -/obj/item/seeds/kudzuseed/get_analyzer_text() - var/list/mut_text = list() - var/text_string = "" - for(var/datum/spacevine_mutation/SM in mutations) - text_string += "[(text_string == "") ? "" : ", "][SM.name]" - mut_text += "-Plant Mutations: [(text_string == "") ? "None" : text_string]" - return mut_text + ..() // Fallthrough to item/attackby() so that bags can pick seeds up -/obj/item/seeds/kudzuseed/on_chem_reaction(var/datum/reagents/S) - var/list/temp_mut_list = list() - if(S.has_reagent("sterilizine", 5)) - for(var/datum/spacevine_mutation/SM in mutations) - if(SM.quality == NEGATIVE) - temp_mut_list += SM - if(prob(20)) - mutations.Remove(pick(temp_mut_list)) - temp_mut_list.Cut() - if(S.has_reagent("fuel", 5)) - for(var/datum/spacevine_mutation/SM in mutations) - if(SM.quality == POSITIVE) - temp_mut_list += SM - if(prob(20)) - mutations.Remove(pick(temp_mut_list)) - temp_mut_list.Cut() - if(S.has_reagent("phenol", 5)) - for(var/datum/spacevine_mutation/SM in mutations) - if(SM.quality == MINOR_NEGATIVE) - temp_mut_list += SM - if(prob(20)) - mutations.Remove(pick(temp_mut_list)) - if(S.has_reagent("blood", 15)) - production += rand(15, -5) - if(S.has_reagent("amatoxin", 5)) - production += rand(5, -15) - if(S.has_reagent("plasma", 5)) - potency += rand(5, -15) - if(S.has_reagent("holywater", 10)) - potency += rand(15, -5) -/obj/item/seeds/chilighost - name = "pack of ghost chili seeds" - desc = "These seeds grow into a chili said to be the hottest in the galaxy." - icon_state = "seed-chilighost" - species = "chilighost" - plantname = "chilighost" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili - lifespan = 20 - endurance = 10 - maturation = 10 - production = 10 - yield = 3 - potency = 20 - plant_type = 0 - growthstages = 6 - rarity = 20 -/obj/item/seeds/gatfruit - name = "pack of gatfruit seeds" - desc = "These seeds grow into .357 revolvers." - icon_state = "seed-gatfruit" - species = "gatfruit" - plantname = "gatfruit" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/gatfruit - lifespan = 20 - endurance = 20 - maturation = 40 - production = 10 - yield = 2 - potency = 60 - plant_type = 0 - growthstages = 2 - rarity = 50 // Seems admin-only. -/obj/item/seeds/coffee_arabica_seed - name = "pack of coffee arabica seeds" - desc = "These seeds grow into coffee arabica bushes." - icon_state = "seed-coffeea" - species = "coffeea" - plantname = "Coffee Arabica Bush" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/coffee/arabica - lifespan = 30 - endurance = 20 - maturation = 5 - production = 5 - yield = 5 - potency = 10 - plant_type = 0 - growthstages = 5 - mutatelist = list(/obj/item/seeds/coffee_robusta_seed) -/obj/item/seeds/coffee_robusta_seed - name = "pack of coffee robusta seeds" - desc = "These seeds grow into coffee robusta bushes." - icon_state = "seed-coffeer" - species = "coffeer" - plantname = "Coffee Robusta Bush" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/coffee/robusta - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - yield = 5 - potency = 10 - plant_type = 0 - growthstages = 5 - rarity = 20 +// Checks plants for broken tray icons. Use Advanced Proc Call to activate. +// Maybe some day it would be used as unit test. +/proc/check_plants_growth_stages_icons() + var/list/states = icon_states('icons/obj/hydroponics/growing.dmi') + var/list/paths = typesof(/obj/item/seeds) - /obj/item/seeds -/obj/item/seeds/tobacco_seed - name = "pack of tobacco seeds" - desc = "These seeds grow into tobacco plants." - icon_state = "seed-tobacco" - species = "tobacco" - plantname = "Tobacco Plant" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/tobacco - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - oneharvest = 1 - yield = 10 - potency = 10 - plant_type = 0 - growthstages = 3 - mutatelist = list(/obj/item/seeds/tobacco_space_seed) + for(var/seedpath in paths) + var/obj/item/seeds/seed = new seedpath -/obj/item/seeds/tobacco_space_seed - name = "pack of space tobacco seeds" - desc = "These seeds grow into space tobacco plants." - icon_state = "seed-stobacco" - species = "stobacco" - plantname = "Space Tobacco Plant" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/tobacco/space - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - oneharvest = 1 - yield = 10 - potency = 10 - plant_type = 0 - growthstages = 3 - rarity = 20 + for(var/i in 1 to seed.growthstages) + if("[seed.icon_grow][i]" in states) + continue + world << "[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!" -/obj/item/seeds/tea_aspera_seed - name = "pack of tea aspera seeds" - desc = "These seeds grow into tea plants." - icon_state = "seed-teaaspera" - species = "teaaspera" - plantname = "Tea Aspera Plant" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/tea/aspera - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - yield = 5 - potency = 10 - plant_type = 0 - growthstages = 5 - mutatelist = list(/obj/item/seeds/tea_astra_seed) + if(!(seed.icon_dead in states)) + world << "[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!" -/obj/item/seeds/tea_astra_seed - name = "pack of tea astra seeds" - desc = "These seeds grow into tea plants." - icon_state = "seed-teaastra" - species = "teaastra" - plantname = "Tea Astra Plant" - product = /obj/item/weapon/reagent_containers/food/snacks/grown/tea/astra - lifespan = 20 - endurance = 15 - maturation = 5 - production = 5 - yield = 5 - potency = 10 - plant_type = 0 - growthstages = 5 - rarity = 20 + if(seed.icon_harvest) // mushrooms have no grown sprites, same for items with no product + if(!(seed.icon_harvest in states)) + world << "[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!" \ No newline at end of file diff --git a/code/modules/mining/abandoned_crate.dm b/code/modules/mining/abandoned_crate.dm index 7e58f4b3f6716..d008e7b875f65 100644 --- a/code/modules/mining/abandoned_crate.dm +++ b/code/modules/mining/abandoned_crate.dm @@ -48,7 +48,7 @@ for(var/i = 0, i < 3, i++) new /obj/item/weapon/reagent_containers/glass/beaker/noreact(src) if(31 to 35) - new /obj/item/seeds/cashseed(src) + new /obj/item/seeds/cash(src) if(36 to 40) new /obj/item/weapon/melee/baton(src) if(41 to 45) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 0b6c02c517693..bc2a23d0a7ee5 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -1452,20 +1452,20 @@ return O.juice_reagents /obj/machinery/reagentgrinder/proc/get_grownweapon_amount(obj/item/weapon/grown/O) - if (!istype(O)) - return 5 - else if (O.potency == -1) - return 5 - else - return round(O.potency) + if (!istype(O)) + return 5 + else if (O.seed.potency == -1) + return 5 + else + return round(O.seed.potency) /obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/weapon/reagent_containers/food/snacks/grown/O) - if (!istype(O)) - return 5 - else if (O.potency == -1) - return 5 - else - return round(5*sqrt(O.potency)) + if (!istype(O)) + return 5 + else if (O.seed.potency == -1) + return 5 + else + return round(5*sqrt(O.seed.potency)) /obj/machinery/reagentgrinder/proc/remove_object(obj/item/O) holdingitems -= O diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index cd1dd5078667c..f1143ecb570b7 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -26,7 +26,7 @@ ..() if (!possible_transfer_amounts) src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT - if (vol > 0) + if (isnum(vol) && vol > 0) volume = vol create_reagents(volume) if(spawned_disease) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index ab8cc8dba8205..dff48a32bea2c 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -62,9 +62,7 @@ other types of metals and chemistry for reagents). name = "Component Design Disk" desc = "A disk for storing device design data for construction in lathes." icon = 'icons/obj/cloning.dmi' - icon_state = "datadisk2" - item_state = "card-id" - w_class = 1.0 + icon_state = "datadisk1" materials = list(MAT_METAL=30, MAT_GLASS=10) var/datum/design/blueprint diff --git a/config/admins.txt b/config/admins.txt deleted file mode 100644 index cb1a3cd4cc9b2..0000000000000 --- a/config/admins.txt +++ /dev/null @@ -1,16 +0,0 @@ -############################################################################################### -# Basically, ckey goes first. Rank goes after the "=" # -# Case is not important for ckey. # -# Case IS important for the rank. # -# All punctuation (spaces etc) EXCEPT '-', '_' and '@' will be stripped from rank names. # -# Ranks can be anything defined in admin_ranks.txt # -# NOTE: if the rank-name cannot be found in admin_ranks.txt, they will not be adminned! ~Carn # -# NOTE: syntax was changed to allow hyphenation of ranknames, since spaces are stripped. # -############################################################################################### -BigSlice = Host -Sliceocelot = Host -Kubbrz6 = Midimin -M00nm4nhere = Midimin -Roleplay Rascal = Admin -SpaghettiScience = Midimin -Memeoo = Trial Admin diff --git a/icons/effects/tomatodecal.dmi b/icons/effects/tomatodecal.dmi index a67e1a5e934ed8bff73c3466fc07e84484f3f169..8296ad0b495913decec0bd7e1950f49e12844a20 100644 GIT binary patch literal 8291 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 diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi index 255481f2d5b52dbd87ad4e3bda78795a6dba7cc1..9b35f0851ad369342401600302c890cbe4c23c03 100644 GIT binary patch literal 17964 zcmchP?IkQNc7OQb=%Q$j*eX{4lc(;;k1N*X~xx)JH_O@lOSx=U%KYg6yy z`}@7;-1k2B{Bh26?|mK+*J95(#vF5wF+L+EU)0{n<31vL1ONc;YlTOS7! zS3!RcWmR<4%6%PfJ&)M#^*m%!bma4spOb9a&06w5C@u;s;*AYUWs*&2#FYveN5pTP zQ@o`jR!OZWDw>#(XsrPWFebuUec# zC;!VU+#Dv^SYn-6;`o{s|GfmiV`JnixTtBP+-A=36 zV^@Qbt2p1jC)Q2AA|eJ95H*jp2b{CxL;Uf!MDfuhpGY1^km;niK>goiJic@2>TqO5 z@yH!0Zl=8csFkl~XpYVcze*Rp*~hYmpqw3%md8K~PfPfY2(#oj^+!A<&|me@M^2VY z4Sjwd0P*~>i`7H*tG6H|nn|;^w@pFqhNxea<5_5vU8eQ9@RI9}Sk}%b++gQFdH%!b zJ+berx^wkr@{R2)Fhl;ZdePBLuWg$>*BseB#Sf=?hpu9v>;V8Y!0T61>K>{4X;9n%}>L1+u zsF$MGL?{$YqNc!b6p&AY`OCGQ$th*?qIVU?BKW(pdD3?a2iU=M__WZb(1^46h;z~= z&xrSk^DrT)2@a#fN*hvpyf>;8L7-JVGG)r{MB#fCZYvuu*B$kq&b>d4@4WuZpQ61Y z2&{38h0Kgwp3!cf{OI*Z!9ayJn!-?}W*%u-$#Rn|J|F3y#l8yFa%W%@Ft-q*Mx`B# zsp>WVOnXs2OL_ic2~pdl0c&?gEiSSf;RH;A2d=}J7#Zbuo15?Nt`{VDyCS36BM)x+ zhycIx@>#qh2xm3U%;<;%^rjk8stIc{|65t~Qv1E(k~wr2A=h?p-C9uaBH;7qmuCG> zY-cOGpFV!tetkcZQsXQEx4z$PN^hZ^gW#__n?k+T=NuEx!D%>}F5d7pU*jPIKYl(s zT827*ZxPO_IUAxxI+2;W*pWy| zj5$pc&sRSe%vLk+k7%gT$aG++Rs|`!&7I0vVng45Y=DHLoG8g@s5(9&P0Od z($|qP=~s!}#9X&)dM+-!Cufv_j_W;H?)Q=<(52}|G2gxgZEaa5BqcEw8!WjUS)R#_ zb5OXtR172_f;npYRA#33r{z^ta7D$$ViOZFR8>{Gy1KXwNY*^6mt#YtqRe43-Y@MJ z1X0ng>sm82r*W5kEH-CvEV}Qv(N=P-sIhdnN&JpGMEATDt)}jE)mXk!ntv5nPSiL9 z07Juld}As9nXCT(egHse@%kv&r2t6!LEIVkMaBy8v#NG`L1N4|1QZkzdwaIw<}$Vh z5*bKs@NXi6ECWrq&5pt6T9gPsqx@@VhQ z;+d|mpU-LLpf_%AiedR>mU zNkW26Fy4=7epyJaWJC!`yWd0gTg1m~Lqfs_`aXC6S-wMSenN~2Tq1fOslY^DB=P@T zS-jIYk=QC)A~M6|~i=w+|D0M~i{fCB#+S{1R{9#_QK^1YKJ$E$ z7Uyru#*|y{K@=*asuH-5O|queM4f>7NWkIQS$9cXK}Ty7HhM!-X6+bS;=+fOmv?xV z2t@4wCp4x^T~jZwL!c363X9~(^00`LFwjfzpD-lnvUr0I81gRrKG;4V24XzrgjR5DLN|ygt?3fQDO^OPMsk zT{;k>xVPt6o9bG>OmQasbnUp{QnGK+%H_-?x~Tf`kQD8>a(s-N5m^95`|6k5)X+&| zf}EAWt+Uh+AFE#Vee5+lEqfKFq3Q;gzIecuUL!QaA1p!sn z^HTZM>(^K}x7Wt-Y8{V*&s3Nc{Q6aOy1Tne;zv1;@1YbeL}5qp@3t=Y93)pQj3pfd9yh=wV zVF;IH7wrn08kw7blarI0mJg}Gz{X91g}|zGY{-;t=;cPylx7_<>wDxzrE0zzd6liP`Xa`UH@bs4oh{m{C@qERr z2V=XqJKy_psM}!wVDgrX!*Dx~PkPese&g&!r;AkJ#x0*v$&h%Sn!gyW6QfDmvzQQ2 z^T;EN9#(pios*+8Q~p#bWf5;_yv<{Go@{-5R97O9hfZ#7-mv>pOGoEfDaBkk?Cpgl z0qUs((uWo=nu`K`U1!?7hPbqLol`My#x)2vRgcoioViFYwSw(_Jht#8x=_mWh=o6j z7}qZII4ovw?5@PH^rbFIpEqY^UG_d-QU256Bl#7_cH~#(;wtqhGl{Ur;QqBj4v^;m59MeT;NlYg<`=4ieHM8nuwXGh1%=4Qz4wSOy=X_&+* zH=I#)xRv%qzuDvE`0W>a8<+W3$bP}$_EXe*zbniR;6}X~MTh;$52JX>M`puj_nf+< zY1X>8adG`a;&`3FQ!(73c?cuN@BPl$oHem2lHO?~cwn$_e_%a=#0^p2N?1&+LtS?h_A?nQZZPmsIYXTC>gr0f33=BRAtcoEBI~3peN#eMI2kSS z$ld~0QBlFhG3@cdeV|luRl;Jq%5v`eOP6_x2d+RsYmxHqfx(icJGsPBw+$P`>%`Ip z+ME4O@1olP#GgdN!vW4#7vbnUQ$_|F9@?yNPYU9=^kBvp{QL=LJCoQxOAVxCY;W2d zVm1TbX<&j_AUH~#Chd>hxP;Sh%#)K787nJhP?5`x{7s_$?4Wn+>+3qLKDROH=}W`E z*4Ec&!-!ey)2Rz@{|K=kZZi(IazOe*RJH3k7Jas@Oyzg&ry?X>RnDSB{#t4ctEJD) z>596AlZNnbT3I^X4hEuDi!Y&m2RcYNY~68WJO?K?gJ#ij6d%R#fs)20fs( z%BSZE>=~fjbg6+t=nLN~)7ld@CB((kgMx$C{4uCT)5Cgb&uuWbOGxVw%V>b0!7rh-OS`|k^xy~MC*>rr_N}8R3Zaf%E5p3Jym}99 z@AJ>>8BvTD+o^oY;>fjAMWJkVty*<1K!OCNioGA4G9gWN8i;&G4FRdywgtMz;PA1r zDZA0WX*$`Ca><*IcTGGtnHi5L89Lve|Nhrg5EMPiTzZq9E{k}4Ugf*yImR2Gstt3T zCasx%ZTKB?-Az;n>&_eUa`r8e!u5NshlzQy1Ijs^)=}q#GflJMji%M_Hplf9J^z^H zt|RI9hO)A<#)4<4;7p^KNj%4d z7+a+&Er%_xfymsd;Y2p~uh!6zDjwA^lfkx%Dk}p+t%g<;~+l}1-4KyAn3HUb~s#2^u&N;w4BchNL5go}G<*i0!{a0C*da$2G) zy9hmn9P>BGP~K zNQyu|DtYiR@001QM|RQAY?*$pYtsjm<8T{g4-imN4k3F(!I-VSmc+F7-HMi9aWUH~ zdHJfYu2;rql_Y#QtCJ~rZ;p&RXlYRxDX1F0Cw%)x%gTxk@G^c-qe(71{n0ZyU|`Ba zCyxXmdoPxMnhlRoPI7n!t~f-FdmJznXs%K6-tquli<7f+Y)VQ|-;3{@z{12bIZ0TN zBflZe+rdx@Sw>|+2Gh1cDdq1vMg!Z1U$5?B+#V$smC-XXVSRVe z)A;g3H2jp9IEYfjZRHaW*M7PPA-oqC#U{n!=az7P6__W;73H0K-iU14hWfA_$9Nkb z+ouwB6cz!Xjp@L6>;8a(fl)Nl)keJgr$9zeMBTlA$I0JhCm71#SCQfcX03LT=%qyL-E&JIMrZV`keB8uZQqBezceS8T+MVo?8< zBMLI|p0FYZ3rjX9W&lnS0J4xh&Bb|{<|gByzy*q&@bTjS(Bd|eR*`%TS&k+#IbR!I zRn2ZI1N{B{FVEjGYqCSh%Y4)S1129uON0bvv<4VVvRvZ83LgQ8>&sJiLGQnFe3@Dn z9mFsgjERW}06y4#WU^B0tZE{Aj%z)^UpUsQk_tCaQyU!)Z4vuK&bQ*{2e=*oeqFWe zGQeI30BmdnzXHKi{z5)kLN87Sxu#9cJChW2JD~h!z@!4lhx(|SHT56rYuvUIXu0`# zvfT~N+VGsGH5TXV-*?z1%SsdIlyx^+qPz2Cg` z{3x=nG0|#uwzJujQW>DWigw-}oqgGDtHiz3nI-=V+ z>m3zel87M#OAv^@zs_!eJ=VfjMWSc4OiUcg8gYf^$^oGaC~_P-`(l<>BSk zIX~aDj-unIm=~a!*D?5==PXzP8GWhi_=FP-6rKVr+p`!_QlE|YtFs5RPVXcdlkZZ- z4Nw7IJ^?PJvp&DH)R84cZtFK+ug=Lf&_>pTMG==x0mmSSYrv41Y#-Rq&*HmkY~xv= z9_iuu_<-RQ7)9xwp1^K3BJM#WvD%+iHY%`VfEnONRqChLN+ozb&Qa3P2466K|D&X2 za!%ZH%%KMI41S)L$r)i}JqtQXmxCor$&@Qi4Gm*ES4>?WjENy+(yC!sDJg=Lwf@ne zN&N6hk_yPOIOvc3`FMFPS@hoO3`d#gc8-*>`xxkHeIAgVYo!uSaT8_5?hM8=xxK!! zOk=W`e1XD;z!1 ztTDEgh;(XRVA`H?Os0&CjF5~pied8dBJb=6yqM~nLd`Uyk&gP#T z-rrqF6shz!Y^Hk+-l4{d8$z*UHkv$+KIW5Wm-E3zSK{NJ0BxnJ0v%#)DD+eU`#-diZ|C4&P79cX1Cc~lml1x5TE4Rrs}1O zuB(PA6f(+SuMU3`JPeIf91>V7qh_Afa}&_UI^7*bmFxBdS9rUAUJ{@@_2cmnZwU*@KM+Ou9NK0`I7C`fH zV*L^sp3^oG=_5yxEFUl<2O=au^0Ff+t>5HjNpEn4Ny^t==?=Z97VGt$AlUudr2 z0V>&qNNtll!(T4!Z#(|ZlKg;3df&b=8Wl995DOfAN%*D=GU3NV^q7FdaC*F5rO)K0 zaPO227r4L}huMnQn9OOThnEy{)YQ}?baZt8LZ8Yl!VtTYZwkuFPd=KM=-AtH3>&ig zdHG!$or7D!B`QELU8-N@fta_eTV%XJ?3NX~A1u{>I%D~C@pq9Udchmgw9mf^&r=#) zs05K*61Q2{=*-Ly;-Vx`Pj0|yq(t*>yXdnbAL_-D7w4OF(ZUAIBqti&Ta4&7=aY?f z%^?l1>8YY~lM-I+tf%Sel4_$U3J3>`cX+wRe~|@SU{WXv5quv6RHpt}5qeaK*}qmK z);qZ*o^o2tSP+ST2S_0C(^!wC~OdILN8j+Vynqfb96YY$6^|2C+V zaSnrCb2)De4y!LSh>D8F#K-6IA>SXyaRz#-iuD9vUax$7-Jt2CmkT}W>%9cu^KQ0( zKRY9Hu(M;A-WZf(2lCj&Q0FRSLBi7DJ1z^nc;R0A#o1bWMJnvGZza7`Rqv~;6{(cY zJZlY?d5B$xE`G(*D<_|8=<0@I3`+|N3Nr2p#3GXs`cLHh#_VTtF)Hu`ujyyQv(CT7e;FbpBiRH6XG)X7 z+~(F&OB2mDxS#qw0SOW6Bqr!AV{dglF<-&mtxAnGzI~f1r^OR$nCqc>%KdA{%J)i% z4ROAUQBzbfzB?{zluh~V+qYkReNrG8i<9dV5)w*=0_7jO!`$2lW*d?4M=m6_|B@Xre)zg<_&NaudjQW8ctC3+Jf?WYyxT3ozl-sCdd)2OO zz7AsHd%J5mB;NBP!y6g!*eNU+VKgv!_s#ggDe!C?{&FR$1yWi1X|cq5v{_fOU z*IlIgQ(&QKoxT-ym>0S65tET#E zKiWNeN*=bWu>9rhdG4nenDe$$W5Bz@KqY6~qMyZG!MKjU`q<-rISBvnS_%05OFYbH z`ufQ>GllO9DnJquWY5BW?iA^wMdURMkwyit3D=u`OVV)b3>Fl<9dst;vt~f?EBy(v znv2XHxxP7>s^i_48{355dG6{ZGfulB`Mu5Q^5_Z^5TLP)X`RZb;QbPHyq(|2*Hj71 zvl0jsKR6lD%ec7OEcw^yo~wiN!5dkdr10xxf0P@|X?;k~ia*kiB8~R(aU%C6K9nAK zlt#LYl0N;$;&sxPccYa6KCaw7QYY%h8cYtc8-_^8Ut~fwk4QkEOPd*W{}5Ov+cf0C z?s)w19M(q`wp(u3*CgHBP=XJET7*2%KG-`Hzi&P(kxJw@S`zfS#tPV?I2HZB#=!s5 zs8UJ`T1=zqpVu|%za`uk-2;TKMF#r6vGVnn6_)l)`QFHISx86;(wVls3fa?jm6*TF zxr`ySwNd%tDiNpb1`eD(*D1LssrlR5Wan$4)8O>n%VjtR@H_tM1SZW_gEliPzV?-V zX!wfzj2pGRz5Vd$0tqO&MP2=&h8e(>hVO^wbxpd^Vg#XHLD?OcQrF69&ZYSC{Lkfi z3gq-Jh99K$N-i#%rV*JJw}fb6Yk#@Xl~p9p3--Pj6ZcsZiGfFZ_DPlNuBO{I{P~Bb zr61pxisao}u3S%CH8W^zaf4_uTORlp`K0ChTXxe5&JWuT__I4-L6mfivf85Ac@C(nTMw)%Ed3T8LR3zBRrAb)6U@~2=jqQq zJU)-$SA9RmyHlQRHDPSk#IuU(IZKl6o8EGGbAoR8`VE07Xs~cj^yYW+Yo;q!&crb_ z(NTtgWPdYOFQco^)i^#i20)z z9SPYX+tDbg#+Ev3D{F(^vrBOT1Jqh3?FIvJ_Sh4RfhP*tcPxJ>^qzU-J2%2lq(uk-#SN@{|?oNf-6^#K0zWI-5$*-AL+hK`U5%!1`6=T)C|e5M=jD3oD4iZg0bI% zD%N|frk2mV6Y~oQ@i3lo8K;f`Fyw%u&qyDTKc&1q*BoGwNaNmlD~Us^AlK-7?=xh1 z4oVNM_jeuwvr5#W+s>HBO`yj#Py_i1U$JR#+qY9Hab-Q+j(;0nDh4Hs1wiNsRX=h+sKI+xnuh<8vOetuR;gU-mF44*a)7br1Xcl*3hy*h^pQQ=# z208BwjAU78+M3pzkGWDbzBQhKrE65u!LSS@ap)KOixC(2dw`>`0QW3-|x#qNF(WhZmQAz(~lJ7U& zx1%#Ujd@2N>_%GAa{7`(xf=p*%8be#tfz6azE+Twy9X~W< z(Z91WoD;EPq?R`{V7`%b?;?x}?D1n|8JHc5aJjs?vUZ!Anp|-jGb=$(QxQr37Gx|F zQgL_dT`e5IvwLt=6kzt$1!WZXBHA7aT=KDN1MR?&reSh(YW&i84cd3K#TX&ZuOiRWDSdkJE6AQj$ z88gFEjkpau2*=2fK+L?RQ-|RnEGG%2wB%lx9qjl&!%3Yp*%P!56j@Lb23MAv()Oc` zJ*-(Hx&E3&99zM&az8~MjOS&9AwHX`rpfxLl6HDAdQ{l;pCdz0(vJhD?b@l{SbF*R z=)jXAGPY0rhlsOXv@0GTcBy1psSPDTmQvtQugB-9usxl5p#{K~CkZ81gCKr%Gkj`9 z*@1aXoj5XhQFVRab9pMvDDB{O`{yK^m(lrWJ$n<3u$)3BzsM`~Eeg(oo;YWi-3?cs zjPs)?{GQ|AqLEj~c0H^DhRjgxfNs|^Q6QMw(26?|38y*}M@mp|j%0Pm`qfF{J0#1> zQux1s1((a)zP>YgTmoFD381q=U!OtdTfgG269Yo;u=mLJ2Kkb>Hl zD}$FTA#U?q2x!V(c7{lIr^`UQeCHV~A#L)b$6gja)2x{n@tlHE3-~W$IOfy;0;QBi zmU=4wk}m}{;+=czLd0_v0T){n1x6h8B%Mm<4c3Y?>U)B}z6XRuWr0KuIz5#+BQ>?( z@l0WXIqUx?vYGr)<8IetEit87MPR+UjfILP=9i1_PV+~SY=eVd&4$i-nLY z?~$u-%tB{QV2gCfORD@^@jE%+X#b+=`+z&A?;ip=;j_J>WX=E-dWv=0n@8O`Drxck zgqlThA=xD*u8Q-u8jhM{Q^AA@s^9m*Fii|n`+>~!l<~`fV=c$Gn?6_n0gp~SEps&+ zt9DdH9RctpkB-;K4wxc!=I99p_x~EJTmH&yH9R;`RmL5Nf;j?k_o95iQPJjI4l=?a zKm`=a!?3)V49r$5_myXc1Boq&BiKy|xY5cT&}pUWvs47ZT1l= zs}@221`i@TqT23kC4#wh0&?;JJWAn+*Ku>oGp_Sr-O<39<*TEC~D%! z@}dafdNg3EN76HIz_IW;JuaiLWqSwyq4Q0ea3sjP@x(7Rbq&MGexvYeklf)Z&xrBF zk60XlZPGpEB?WG`t3w~lHXI>2j}!F1dybKf8aJBE$Rn3kB8mf{yzmv<35+x3Y;D;@ zP6v%?hy=lZm924Q>w&f(Z$FAUf#q)k-d~2hBTucIhK9G4T+E=%=&S;oeIC#06L3z| zD;!VI<_0x&6UiIY4Y&=%?sX;e_vJrt(9Nv1GDSeHt5Br#iM*finE94i8YuZPilklP zkp)+FEXO*Y5&%Xw`*B7^yxWYJSW2gL>DN>syB=3jy^YOx>8)W}0eOO4qffE_vN^p^ zkZU)EZAg)~a-y*)kLUN&E0>sv&q zW5N2k59gLr*gGi&>z}pPIZXKmSKVFToMHux_Duc_!)aq^DyoeIjOgTVm80hPr`(y< zxqzf&1{8HHL5GilMj|!m%4x#iq`m5-L+e==M#V&-7T` zJf=1ol$L1a<)iS(NV5<;N_0|(ErJ)fogx0He!XRY)oHYH+f*yE(;Ypa^>lXUP|npE zk6qdtU9GUPNz`GS|MX-dlQkzpfFc|3eR?jnPQKAH;UTUlf(Pr$;%jf2AL?u)t}mMU zPruX?K-9LtSRs*h2^(qVK3x7|zXu>-htf7AqRO zdZmb$sb?>aCSPD?i@7~}sB;nQXOX`IYheH11=Rno-Ttq`b}c<@rbqguK>3RTnk+KX zSXasNn*3BSUaJhWHhPQY=Paal&Rkan>+offk^5<`C!}C!csq5Xiby?mb~){g*u9_C zZ+{~nCM%bZb!qV#{`b}l_f?-jyTghf^t#CDXTbhzqG=0x+TyZekqV%>XAy$s)` zNWUPcP&U@wGh;)%r+FK|vqDMNyv4J+E0n_>3wM3?W`xiy%9*(Lms45T4#HoJaZ!u? zfxgiFJ~GUiIP^Vm&izPJSmUk$%Q?1`x)$=L(;j0%-axy@^QWI2Oadx}EQ><2os9 zhQnU87Qm>iyu9cuAjaXWwzsXh@r4ijVXe62UV2i0@43BaJDx$_KPzUt-f4wl9diO5 zSkKmnwDiu={L&PCTw^_u+B9byg9LMtPI%kKV{vR~ET`}(1dT3)t3O|0#J~W|rNbNK z(OykSab&q%vk*csFX+nh3QRO5q3H+G|EDpe;09AoQGU`{V%Kfz@rt{Hk7;hn4KqHr zp=MzONw-VO$PBUMyem|D_YOJpgi#VPoTUm55FShyOF_fHNYQ_j_fDr9Rbkollo?bv zZu61!Av${Y)b|WBJAq(&r3XCnp_;$bIN8~UiYsGdV-GJbLKO4ppm2d_peRSBcDy;( zskxb3h1bb*^YYrs=wHCyIlx?8!06|RD+8U|s4?&RIs{*RgfHe!1jIJKm94Ri5$tpR zws;n4JaWEUyJ&#u*(w$XvuC6$=~qgz&fAZ~z4h)V4?Q8N?P4d1YrZ1<^Xk4!K`Fxh0Vu>iqR#DxjCmz7mjM>8hTv<#-GPR=8A z%*=fZL@}qm!*_3$3K~lLZEvRyeNh@3EC?TSci2J;ZyzV0v=!ba-`0HlFvn^9!vJxL zTay9iOmIfMOP&G*=WPa#*Vd8UyojKo$DHTyA&{%D5r1R++YE6GVF^W7_ z(srUMp7mM0%{TgS3uZ5k{eBMqj^f#tYQ$CyyUxqaHQJx6bKIMG2}r6$TA?#;W8mCW z>70!f+;@{0Y8OK|YOPxf&vq2|!4exLC0GZEO)y_-esjfea|M_q3!<;!1Kj=nYTDYN z$vb3RNKBlpU|J3XY*!%I7j)jh0T1x%{(dBn#cBEUNyJ0IG$PxgI(Zn4K#x>qQv}i(pN7dxQ$h4QCH(27nDM7BwcXqZxRsx}Y#C!%XvK&qoLdko_ z%=F|Dqbup+m+MB)JYG*9aP#jp`nhJw>(w|DSgnD(-!HaWo+q59DP_okJ3`lE0JpR? z^lLh@gS#92qkQckMT_B7tHk{9Cj)UDJu%|jDcBD>CVA&vNuMhUSA8cWi_6uhf*3CP z#~>&W?cjFbF@VQ4?ihJ4O_e1_odqo@qphFp8OH>9w8U4~$#xtPQ6Q4b!L~p!Z1@GI zh}ob*Nzrn?Xk_>)#2Xrpdntj>r0rdFRi=jIdsAnHFI4*!f2qg_yD5AZE3&QbzNQuC zopQQgB*CZB-mDeA`*X6*UtxFq`ts5UtOqdu5%W0A92+JfBYWiQ>x)AzP66;LEoKzv z9;70kk~=ilSvJEFNJ{vowBU?AtR+O}@-@026y+>co3(6qeXk97DX(v?PLel~T&m+4 zr%({f)iej*ely0Au09VoDIC`$NRijT>NYxo>X-CmviS&stg$-;D)ss|wG#Vrt&-Zm zfaI*OfWeM7CA;3h7Nvh;e7xnKae;Sq(9Ow$f8!ARb=vF)XGx`|P`Q&;gXUQTl>`ul|H_%sR{dWLSnY z@^3@@oI|6H>_z+R+5QmtX*bphK|B(iS3>zLFR*}euM7M9Hg`+Zd%ECFet zdmIiQd>j!G5!l+=x{=kH02Y9wI+mXtROI&KKQv9&WJsU@Ak6EeH!(C3?I2XGCY#38 zNj^m*%!u(LR+ZQ%U|i5>Wuib^x{VHjErmOLtsl4yQ5FvU-#%lRBKLq4EV-^%^is)a zXb|@g3{+T+GcIYs%k{F1cEJ`ckP2~zFP`L0K$3(T+qzKy9*g0VsHlm1WlCAZ_4R!2 z{k+Wb3L9phH|TQk5@atX=jxa%6szuhiwr-5#4?93du$y|et|v*|G|XYDi&9M7l(YM zzRxgksjhxvhNUGql`j@`gGPI_U64_UOU_??o&8Wcnz=q`Rb{jdTwD8y8DLeQ@QDMW zH6b93yZ>)rwb7CVJ#ZP$W7YM%t23#RU8AJk_PwkXzC?8^s5gJM$2QS?YssRn{ZmiJdE3V+TnPJsl=8sR?6>k=CSub=yC_%n;Iy z1{@w9$0b8KkTcEK;F<~uCw=C{bi}*s=Trtha1KQC>xEhrZA=;@51TRJrO7cmI=dGuU_RsZqpq5L=av8TRw z*Mcfy9$QNL7_aoNJj?UM-8=jbg6>zu&*hB>5Be>6+{j10Vz=tGkRtRk83eT{kyc{m zsoJ#+p?R}ZVxOvKNjy@CZIUyd-;PirdgR;ABK=kZK%bXfeYk~_ru$RnvFbmr@DGCm z;%h!HT}>Tq;?B*kt^y=Pn+!od2-`BI^^-%wJF}b?J`71lzcdw$C;4wEc=qHD!66eY$-FVJa?C$T}4|oMj)6aKC+ywT) zHD?k80sZ^zcJV~WT(xJ)k!F$|9vG2Q1W#!NT8Bxq@@|)tH*A!b>yZqL(171JUI|OL z#`t@D4Rl|xeuLh#AtIM^+6ty?;^Zmx)lK17XcW)x*1$aEP0F97@w+3L4=;I&EA$aN zn$EQ$gw!&^Py6LyI)c_VuTT0=hoed4+XMMsh(h@jPJO+$z(%Q`%8u2~xDH3;E_So8 zIr6}k5AUOH5<#~;QXn(GhnI-Y4AMKMiy{LZTEj&0BP;!T3%TW__+ zo$nt*P0qwgnxgy)e0}h|Xa(6-nu=mfs=_l&f1}2E0i`>mtAQP)Aj0?6iwO zl>+UPyqp{z`%trI$?@x7CrE>+4mfSpfNA`99YgNb2a?4; z7jGE9m$!JlzN#cB3AKRhJAh3D9{1hU6gyd>OBrQtBPCTd0FAS;V9bgKZD<(`p~#AU zGY@H&cO2WLpN;j#sfsg$*W$`GiZqc3TAAQ*xKUZt3R??S zmzp37V6@8PB+{XSXf1_hs7q7v@Ad|Vu`s960=kuFxU{W7^ZN$zrC>O zpa%B@wAd(s_xY>^-r2LY#e0t(n`aIdFBwXk;{T>CRarz&VL50*Wx!fZ0yjABGrfik zdNb&V&_j(MFKQnZWcbXj{&EN15fcjw_w`9%)BVxJbRZ3gY^Jv#DJVpn@>Ive_9=}Wjd$WQ-t4cjzYd3DosauV?482HOYEH&>i5Fgk`;Rp^We&CC~5a+%Z96| ztD^#-z&f&Jdk!WIDowv^1n7VKm@W3x@~Obb`)Qjt@Rknej@pG4F?9WE_f zb@yYBi}Vu!+jaBlhs^dZPq9NuFhHFsy!dD=KT;NRkciXDbNJWyeB$7+<}|;HHLoA= z<7G&EKLO;-=R!!0-!mSH{PM=CN)mEr1a~N;!lbujdYZ(fHwp~^ud9)< zKHN|Q+ddUuzi!_e%c(h!rV=A-y*($_EYS^e-R+W3(0zi6af&ZYKDop%Ou4A;+ z`iodOzP)An7SN$;WEP1-vNOL%-IH%5)C3D&!*eDGl;VdhMdT?ZTGu}G7OB`yQ!o&5 zFfnm?ge1k=M_RcxUuTG&MMn9#9$4`Qi#vMGGMmU*>)-PHu`(SlzF!uI?`VP4P3Ju$ z2xL|e@V8xJgO%igUK?!VdP>d^t;HlH^B_8LadGW(BPsc0psNAW(5QU20_(ZKmxT?iYC zp1OKqL_`jwSU@z`7f?=Z+NKYH$6frgH}Prf-{ zMkC^N3v0&(su=+{g}3+Dckiow!oI?scbB(ZzU#%Zvao2&%A(CTUC1+*XsN5aurQk8 zHJ^FXM;iTBT9klZDP){NP?x@_njZgIYLVc6ctt@Ohf|-O9q{i4CGF-*D^RJCjE#*k zv9ZTVbJixSiosu}X)qPrM}TwDQs1Tu`jjueyHGV0*Zd; zoPgANGK}GIf9r~ZM8jx4Y1W6j-z@@$377D)G448YgL$}l$CSCT3$K!bvaQ7rkO((e z45DUXWnJCe!~hOY4<%Lf)6A&>US3`>@~ufrcVdXX#U&-kbT14qyatkVIJ>Rqc!0$Gj$ujB=PW{p-@Ws1XLB$Vm6VXGBmJdYSzV9Krrt7lQ5MeB12sggMNx+*#v8p&Qttjs_%&cY9GSvTbc+l2AUX zAs@;hG&I0ZV96tA+-_?BW(L3fxr)Q=4$2uuHkQ#7-ZaBo=>~IVwxgZ$lLCnfd_mj# z2>0?$_zPTXqVwM0o^9|! zT{F?IcX;c3U3g<*(e?Lx?m-tqO2)q8GAYn5Q!jQX z4@L&EfsS_*3^FBIQd&Nj#lszi3_N)o?Y1NM{CW4ja7JK7M&>`Z<(3wOALUQR0$O(~ z$4jfl}oyiX&YFXz2z|qk$LV3n* z6lIq336wtleZ`+oCyLwM-Lg!~%yOC=s^AZFnkYYp!3My@w(I%!_Ehf_A`0#!b5>CY z<4BvLMh!G1OvKU-lwA!UEJZP1VS?jUXgt4v3P`vi)8K{?4~41f%Gg4NjK*N?8Cl|GJol!={u6< zRZb7V@S`4Uyy&lhP94?To}?9I4IU{3^i7ijGssh;=1chOxZ2>dHBz-!qzuS%tj0{$0M@Z1al literal 16911 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 tJZ)cg}gw%=GlU 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 HdC30&j&Sfn diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index bb70e0b5946ef2a6c2dcb6bcbb5f919db6f98881..c82f15e3012f2410bde4556e549561007734e0e4 100644 GIT binary patch literal 19641 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