From 9074629123d8e6d2d9f23141f89b2d49d31df764 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Fri, 12 Jun 2015 04:14:28 -0400 Subject: [PATCH] Aquariums and Pet Rocks! Adds fishbowls, fish tanks, and wall aquariums. - Buildable with glass - Fish Tanks and Wall Aquariums also have built-in lights that can be toggled - Wall Aquariums block atmos just like a full window or wall. Adds fish and fish/aquarium related items: - Goldfish, Clownfish, Sharks, and Baby Space Carp - Eggs can be obtained for each of these fish types and a dud egg type. - Fish food, fish nets, egg scoops, tank brushes - These are used to maintain your aquarium Adds new vendor: CritterCare! - Sells pet supplies and pet rocks! - Moved pet collars from the clothing machine into the CritterCare Adds new room/area: Pet Store! - Located between the Port Emergency Storage and Auxilary Tool Storage (across from the Vault) - Contains a CritterCare machine, 2 fishbowls, a bucket, and a sink Adjusts some Cargo order options! - New category: Vending - Contains all the vending machine refill crates - Renamed the Bartending Supply Crate to Bar Supply Crate to avoid confusion - Removes the coffee refill canisters from the Bar Supply Crate, placed them into the new Coffee Supply Crate - Adds new Clothing Supply Crate, contains refill canisters for the Hatlord 9000, Suitlord 9000, Shoelord 9000, and ClothesMate vendors - Adds new Pet Supply Crate, contains refill canisters for the new CritterCare vendor Makes the ClothesMate and CritterCare vendors constructable - Using a screwdriver on a vendor circuitboard will now have a chance to set it to the ClothesMate or CritterCare setting, in addition to the previously possible settings like Booze-o-mat and Shoelord 9000. New reagent: Fishwater - Obtained by using an empty reagent_container on any aquarium that has some water in it. - Ingesting fishwater has a 30% chance per cycle to make you vomit (what did you expect from dirty water and fish poo?) - Fishwater is good for botany, as it provides both water and nutrients to hydro trays ADDITIONAL FIXES! - Fixes the abandoned bar's misaligned area (mostly a mapper thing, will also ensure an APC in the area will properly power the entire area (and not space) - Fixes a couple instances of piping mistakes where there were manifolds and straight pipes on the same tile, preventing vent-crawlers from being able to navigate properly - One was in security, another was the back room of hydroponics - Fixed a missing pipe in the AI upload causing the vent to be disconnected from the pipe network --- _maps/map_files/cyberiad/cyberiad.dmm | 122 +-- code/datums/supplypacks.dm | 119 +-- code/game/area/Space Station 13 areas.dm | 4 + code/game/machinery/constructable_frame.dm | 4 +- code/game/machinery/vending.dm | 31 +- .../game/objects/items/stacks/sheets/glass.dm | 20 +- code/game/objects/items/toys.dm | 25 +- .../objects/items/weapons/vending_items.dm | 7 +- code/modules/fish/fish_eggs.dm | 42 ++ code/modules/fish/fish_items.dm | 52 ++ code/modules/fish/fishtank.dm | 701 ++++++++++++++++++ code/modules/hydroponics/trays/tray.dm | 4 +- code/modules/reagents/Chemistry-Reagents.dm | 18 + icons/obj/fish_items.dmi | Bin 0 -> 6806 bytes icons/obj/toy.dmi | Bin 31776 -> 32429 bytes icons/obj/vending.dmi | Bin 78765 -> 80772 bytes icons/obj/vending_restock.dmi | Bin 1224 -> 1304 bytes paradise.dme | 3 + 18 files changed, 1042 insertions(+), 110 deletions(-) create mode 100644 code/modules/fish/fish_eggs.dm create mode 100644 code/modules/fish/fish_items.dm create mode 100644 code/modules/fish/fishtank.dm create mode 100644 icons/obj/fish_items.dmi diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 6b2ea7b2792..5c2aea57011 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -979,7 +979,7 @@ "asQ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/lobby) "asR" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/security/prison/cell_block/C) "asS" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor,/area/security/prison/cell_block/C) -"asT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor,/area/security/prison/cell_block/C) +"asT" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "asU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/security/prison/cell_block/C) "asV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/security/prison/cell_block/C) "asW" = (/obj/machinery/newscaster{pixel_x = -28; pixel_y = 1},/obj/structure/table/woodentable,/obj/machinery/light/small/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) @@ -1365,8 +1365,8 @@ "aAm" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/stool/bed/chair/sofa,/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness) "aAn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/barber{pixel_y = 30},/obj/structure/stool/bed/chair/sofa/left,/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness) "aAo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness) -"aAp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/space) -"aAq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/space) +"aAp" = (/obj/structure/table/woodentable,/obj/item/toy/cards/deck/black,/turf/simulated/floor/wood,/area/maintenance/abandonedbar) +"aAq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor,/area/security/prison/cell_block/C) "aAr" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aAs" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/maintenance/fsmaint2) "aAt" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "Fore Starboard Solar APC"; pixel_x = -25; pixel_y = 3},/turf/simulated/floor/plating,/area/solar/auxstarboard) @@ -1522,7 +1522,7 @@ "aDn" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/crew_quarters/fitness) "aDo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aDp" = (/turf/simulated/wall,/area/maintenance/abandonedbar) -"aDq" = (/obj/structure/lattice,/turf/space,/area/maintenance/abandonedbar) +"aDq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "aDr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "aDs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "aDt" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) @@ -1572,8 +1572,8 @@ "aEl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aEm" = (/obj/structure/table,/obj/item/weapon/paper/holodeck,/turf/simulated/floor,/area/crew_quarters/fitness) "aEn" = (/turf/simulated/floor/plating/airless,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/solar/auxstarboard) -"aEo" = (/turf/space,/area/maintenance/abandonedbar) -"aEp" = (/obj/structure/table/woodentable,/obj/item/toy/cards/deck/black,/turf/simulated/floor/wood,/area/space) +"aEo" = (/obj/structure/table/woodentable,/obj/structure/mirror{pixel_x = -28},/obj/item/weapon/storage/pill_bottle/random_drug_bottle,/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/maintenance/abandonedbar) +"aEp" = (/obj/item/weapon/stool,/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "purplecorner"},/area/maintenance/abandonedbar) "aEq" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (WEST)"; icon_state = "wooden_chair_wings"; dir = 8},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) "aEr" = (/turf/simulated/floor/wood,/area/maintenance/abandonedbar) "aEs" = (/obj/item/stack/tile/wood,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) @@ -1628,8 +1628,8 @@ "aFp" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/crew_quarters/fitness) "aFq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aFr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aFs" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/plating,/area/space) -"aFt" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (WEST)"; icon_state = "wooden_chair_wings"; dir = 8},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/space) +"aFs" = (/obj/structure/table/woodentable,/obj/item/weapon/lipstick/random,/obj/structure/sign/poster{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/abandonedbar) +"aFt" = (/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/maintenance/abandonedbar) "aFu" = (/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) "aFv" = (/obj/item/trash/liquidfood,/turf/simulated/floor/wood,/area/maintenance/abandonedbar) "aFw" = (/obj/structure/sink/kitchen{pixel_y = 25},/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) @@ -1696,9 +1696,9 @@ "aGF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aGG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aGH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_chapel_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "solar_chapel_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "solar_chapel_airlock"; pixel_x = 25; req_access_txt = "13"; tag_airpump = "solar_chapel_pump"; tag_chamber_sensor = "solar_chapel_sensor"; tag_exterior_door = "solar_chapel_outer"; tag_interior_door = "solar_chapel_inner"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aGI" = (/obj/machinery/light_construct/small{dir = 8},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/space) -"aGJ" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aGK" = (/obj/item/weapon/shard,/obj/item/stack/rods,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating{dir = 9; icon_regular_floor = "escape"},/area/space) +"aGI" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "escape"},/area/maintenance/abandonedbar) +"aGJ" = (/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating{dir = 4; icon_regular_floor = "whitecorner"},/area/maintenance/abandonedbar) +"aGK" = (/obj/item/trash/cheesie,/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/maintenance/abandonedbar) "aGL" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "escape"},/area/maintenance/abandonedbar) "aGM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating{dir = 5; icon_regular_floor = "escape"},/area/maintenance/abandonedbar) "aGN" = (/obj/item/weapon/lighter/random,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) @@ -1762,10 +1762,10 @@ "aHT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aHU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aHV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aHW" = (/obj/item/trash/cheesie,/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/maintenance/fsmaint2) -"aHX" = (/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating{dir = 4; icon_regular_floor = "whitecorner"},/area/maintenance/fsmaint2) -"aHY" = (/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/space) -"aHZ" = (/obj/structure/door_assembly,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aHW" = (/obj/structure/door_assembly,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) +"aHX" = (/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/maintenance/abandonedbar) +"aHY" = (/obj/item/weapon/shard,/obj/item/stack/rods,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating{dir = 9; icon_regular_floor = "escape"},/area/maintenance/abandonedbar) +"aHZ" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/maintenance/abandonedbar) "aIa" = (/obj/item/stack/tile/plasteel,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "aIb" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating{dir = 4; icon_regular_floor = "escape"},/area/maintenance/abandonedbar) "aIc" = (/obj/structure/stool,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) @@ -1816,9 +1816,9 @@ "aIV" = (/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Starboard Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/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},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aIW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aIX" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aIY" = (/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/maintenance/fsmaint2) -"aIZ" = (/obj/structure/table/woodentable,/obj/item/weapon/lipstick/random,/obj/structure/sign/poster{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aJa" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "escape"},/area/space) +"aIY" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) +"aIZ" = (/obj/machinery/light_construct/small{dir = 8},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) +"aJa" = (/turf/simulated/wall,/area/civilian/pet_store) "aJb" = (/obj/item/stack/rods,/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/maintenance/abandonedbar) "aJc" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "escape"},/area/maintenance/abandonedbar) "aJd" = (/obj/item/trash/pistachios,/obj/machinery/light_construct,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) @@ -1878,8 +1878,8 @@ "aKf" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aKg" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aKh" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aKi" = (/obj/item/weapon/stool,/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "purplecorner"},/area/maintenance/fsmaint2) -"aKj" = (/obj/structure/table/woodentable,/obj/structure/mirror{pixel_x = -28},/obj/item/weapon/storage/pill_bottle/random_drug_bottle,/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/maintenance/fsmaint2) +"aKi" = (/obj/machinery/door/airlock/glass{name = "Pet Store"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/civilian/pet_store) +"aKj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/civilian/pet_store) "aKk" = (/turf/simulated/wall/r_wall,/area/maintenance/fsmaint2) "aKl" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/arrival/station) "aKm" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/arrival/station) @@ -2487,7 +2487,7 @@ "aVQ" = (/turf/simulated/floor{dir = 2; icon_state = "asteroid"; tag = "icon-asteroid (NORTH)"},/turf/simulated/floor{tag = "icon-siding2 (NORTH)"; icon_state = "siding2"; dir = 1},/turf/simulated/floor{tag = "icon-siding1 (NORTH)"; icon_state = "siding1"; dir = 1},/area/hydroponics) "aVR" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Hydroponics Pasture"; req_access_txt = "35"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) "aVS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) -"aVT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) +"aVT" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/hallway/primary/port) "aVU" = (/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) "aVV" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = -31},/obj/machinery/light,/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) "aVW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) @@ -2619,7 +2619,7 @@ "aYs" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/port) "aYt" = (/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera{c_tag = "Port Hallway"; dir = 1},/turf/simulated/floor,/area/hallway/primary/port) "aYu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/port) -"aYv" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/hallway/primary/port) +"aYv" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/primary/port) "aYw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/hallway/primary/port) "aYx" = (/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/hallway/primary/port) "aYy" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/hallway/primary/central/nw) @@ -2693,9 +2693,9 @@ "aZO" = (/turf/simulated/wall,/area/maintenance/port) "aZP" = (/turf/simulated/wall,/area/storage/emergency2) "aZQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock{name = "Port Emergency Storage"; req_access_txt = "0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2) -"aZR" = (/obj/structure/table,/turf/simulated/floor,/area/hallway/primary/port) -"aZS" = (/obj/structure/table,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/primary/port) -"aZT" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/closet/emcloset,/turf/simulated/floor,/area/hallway/primary/port) +"aZR" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) +"aZS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) +"aZT" = (/obj/machinery/light_switch{pixel_x = -24},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "aZU" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/hallway/primary/port) "aZV" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/primary/port) "aZW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atm{pixel_x = 24},/turf/simulated/floor,/area/hallway/primary/port) @@ -2792,9 +2792,9 @@ "bbJ" = (/obj/machinery/vending/shoedispenser,/turf/simulated/floor,/area/crew_quarters/locker) "bbK" = (/turf/simulated/floor/plating,/area/maintenance/port) "bbL" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/port) -"bbM" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/storage/emergency2) -"bbN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2) -"bbO" = (/obj/machinery/light_switch{pixel_y = 28},/obj/item/device/flashlight/flare,/turf/simulated/floor/plating,/area/storage/emergency2) +"bbM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/emergency2) +"bbN" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/carpet,/area/civilian/pet_store) +"bbO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/civilian/pet_store) "bbP" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency2) "bbQ" = (/turf/simulated/wall,/area/storage/tools) "bbR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/storage/tools) @@ -2865,10 +2865,10 @@ "bde" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/port) "bdf" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plating,/area/storage/emergency2) "bdg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2) -"bdh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2) -"bdi" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/emergency2) -"bdj" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency2) -"bdk" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/storage/emergency2) +"bdh" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/carpet,/area/civilian/pet_store) +"bdi" = (/obj/item/device/flashlight/flare,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/emergency2) +"bdj" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plating,/area/storage/emergency2) +"bdk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor,/area/hallway/primary/port) "bdl" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/camera{c_tag = "Auxiliary Tool Storage"; dir = 2},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/storage/tools) "bdm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor,/area/storage/tools) "bdn" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/storage/tools) @@ -2938,9 +2938,9 @@ "bez" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/locker) "beA" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Locker Room East"; dir = 8; network = list("SS13")},/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/crew_quarters/locker) "beB" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency2) -"beC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/emergency2) -"beD" = (/turf/simulated/floor/plating,/area/storage/emergency2) -"beE" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/emergency2) +"beC" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) +"beD" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) +"beE" = (/obj/structure/table/woodentable,/obj/machinery/fishtank/bowl,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "beF" = (/obj/machinery/portable_atmospherics/canister/air,/obj/effect/decal/warning_stripes/white/hollow,/turf/simulated/floor/plating,/area/storage/emergency2) "beG" = (/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor,/area/storage/tools) "beH" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/storage/tools) @@ -3110,7 +3110,7 @@ "bhP" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) "bhQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/port) "bhR" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/port) -"bhS" = (/obj/item/clothing/gloves/color/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/under/rainbow,/turf/simulated/floor/plating,/area/maintenance/port) +"bhS" = (/obj/machinery/vending/crittercare,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "bhT" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/storage/tools) "bhU" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/storage/tools) "bhV" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/item/device/multitool,/turf/simulated/floor,/area/storage/tools) @@ -3556,7 +3556,7 @@ "bqt" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "AI Upload APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bqu" = (/obj/machinery/computer/borgupload,/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -29},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bqv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/light,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) -"bqw" = (/obj/structure/table,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/item/weapon/aiModule/reset/purge,/obj/item/weapon/aiModule/core/full/antimov,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bqw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small,/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency2) "bqx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "bqy" = (/obj/machinery/light{dir = 8},/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqz" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -5655,6 +5655,7 @@ "ceM" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/blueshield) "ceN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/wall,/area/ntrep) "ceO" = (/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/ntrep) +"ceP" = (/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "ceQ" = (/obj/machinery/door_control{id = "representative"; name = "Privacy Shutters Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "73"},/obj/machinery/computer/secure_data,/turf/simulated/floor/wood,/area/ntrep) "ceR" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/obj/structure/closet/secure_closet/ntrep,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/ntrep) "ceS" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera{c_tag = "Aft Primary Hallway 1"; dir = 4; network = list("SS13")},/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) @@ -8106,6 +8107,7 @@ "cZU" = (/obj/structure/closet/wardrobe/black,/obj/machinery/camera{c_tag = "Aft Port Solar Access"; dir = 1; network = list("SS13")},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/aft) "cZV" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft) "cZW" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"cZX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "cZY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door_control{id = "maint2"; name = "Blast Control Door B"; pixel_x = -28; pixel_y = 4},/obj/machinery/door_control{id = "maint1"; name = "Blast Control Door A"; pixel_x = -28; pixel_y = -6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "cZZ" = (/obj/structure/janitorialcart,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "daa" = (/obj/structure/table/glass,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -8127,7 +8129,9 @@ "daq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/maintenance/electrical) "dar" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plating,/area/maintenance/electrical) "das" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating,/area/maintenance/electrical) +"dat" = (/obj/item/clothing/gloves/color/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/under/rainbow,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) "dau" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"dav" = (/obj/structure/table,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/item/weapon/aiModule/reset/purge,/obj/item/weapon/aiModule/core/full/antimov,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "day" = (/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/electrical) "daz" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/electrical) "daA" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/electrical) @@ -8214,11 +8218,7 @@ "dcl" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/rust,/area/maintenance/abandonedbar) "dcm" = (/turf/simulated/wall/rust,/area/maintenance/fsmaint2) "dcn" = (/turf/simulated/wall/r_wall/rust,/area/maintenance/fsmaint2) -"dco" = (/turf/simulated/wall/rust,/area/space) "dcp" = (/obj/structure/mineral_door/wood{name = "Abandoned Bar"},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) -"dcr" = (/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/maintenance/abandonedbar) -"dcs" = (/turf/simulated/floor/plating,/area/maintenance/abandonedbar) -"dcu" = (/turf/space,/area/maintenance/fsmaint2) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8306,15 +8306,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaapBaaaasrassassassassastasuasvaswaswaswaswasxaaaaczaaaaaaaaaamlaoRaoRaoSamlaaaaaaaaaaoTaoUaoVaoWaoXaoYaoYaoYaoZaoZaoZaoZapaapbapcapcapcapdapeapfapdapcapcapcapgaphapiapjapkapiaplaphapmapmapmapnapoapmappapqaprapsaptapuapvaoIaoJapwapwamiapxapyapzamiapAamiaabasqaabaaaapCaqDapEaaaaaaapCaqDapEaaaaaaapCaqDapEaabaabaaaaabaoOaabaaaaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaycatlatlatlatlatlaaaatmaaaatlatlatlatlatlaabaczaaaaaaaaaamUapGaoRapHamlampapIaocapJapKapLapMapNapOapPapQaoZapRapSapTapUapVapWapXapYapZaqaaqbaqcaqdaqeapWaqfaqgaqhaqiaqjaqkaqlaqgapmaqmaqnaqoaqpapmaqqaqraqsaqtaquaqvapvaoIaqwaqxaqyaqzaqAaqAaqBamiaqCamiaabasqaabaaaapCaqDapEaaaaaaapCaqDapEaaaaaaapCaqDapEaaaaaaaaaaabasqaabaaaaaaawTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaabaaaaaaaaaaxyaaaaaaaaaaabaaaaaaaaaaczaaaaaaaaaamlaqEaoRaoRaqFaqGaqHaqIaqJaqKanjaqLaqManeaneaqNaoZaqOaqPaqQaqRaqSaqTaqUaqVaqWaqXaqYaqZaqVaraarbarcardarearfargarhariarjarkarlarmarnaroapmarparqarqarrarqarsapvaoIanTanTanTanTartanTaruarvarwamiarxaxvarAaaaaaaaoOaabaabaabaabaoOaabaabaabaabaoOaabaabaabaabaxwaxxarAaabaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaabarBarBarBarBarBaaaatmaaaarBarBarBarBarBaabaczaaaaaaaaaamlarDarDarDamlampamqamqarEarFarGaojarHarIanearJaoZarKarLarMarNarOarParQarRarSarTarUarVarWarXarParYarjarZasaasbarZariascapmasdaseasfasgapmashasiarqarrarqasjapvaskaslasmasnasmasoaspamiamiaoJamiasqaxWaxXaryaryaxvaryaryaryaryaxvaryaryaryaryaxvaryaryaryaxYaxZaxWasqaabaaaamjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaaaaIRaIRaApaAqaAqaDraDraDsaDpaDpaDqaDqaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaasrassassassassastasuasvaswaswaswaswasxaaaaczaaaaaaaaaasyaszaszaszasAasBaaaaaaaoUaoUaoUaoUaoUasCaneasDasEaoZaoZaoZasFasGapcapcapcapcasHasIapcapcapcasJasKasLasMasNasOasPariasQapmasRasSasTasUasVasWasXasYasZarqataapvatbatcatdateatfatgathatiatjatkamiayKaxvayLaabaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabayPayQayLaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaIRaIRaFsaEpaFtaEraEsaEtaEuaEqaDpaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabayZatlatlatlatlatlaaaatmaaaatlatlatlatlatlaabaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUatnaneasDasEatoapSapTapUapVapWatpapYatqatratsattatuatvapWatwatxatyatzatAatAatBatCapmatDatEatFatGapmatHatIatJarrarqatKapvatbartatcatcatcatLanTatMatNatOamiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabazDaabaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaIRaIRaIRaIRaGIaEraFuaEraFuaFvaEraEraEraFwaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaaaaaabaaaaabaaaaaaazJaaaaaaaabaaaaabaaaaaaaczaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaoUatPaneatQasEaqOatRatSatTatUatVatWatXatYatZauaaubaucaudaueaufaugaugauhaugaugauiaujaukaulaumapmaunapmauoaupauqaurausautapvatbauuauvauvauvauwauxauyauzauAamiaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaEnaabaabaaaaaaaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaIRaAsaGJdcmaGKaGLaGMaGNaEraEraGOaGPaEraGQaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaczaczaabaabaabaabaDxaDyaDxaabaabaabaabaczaczaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUauBaneauCasEarKauDauEauFauGarParQauHauIauJauKauIauLarXarPauMauNauOauNauNauOauNauPapmasRauQapmauRapmauSauTauUauVauWauWauXauYauZavaavaavaavbavcavdaveaveaveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaFqaFraFqaabaabaaaaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaIRaHXaHWaHZaHYaIaaIbaEraEraEraIcaIdaEraIeaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaagaaaaaaaaaaaaaabaaaaabaaaaaaaabaaaaEFaEGaEHaaaaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavfavfavfavfavfaoUaoUavgaoUasEasEasEavhaviavjavkavkavlavkavlavkavkavmasJasJavnavoavpavqavoavpavqavravsavsavsavsavsapmavtavuavvavvavwavvavxavyavaavzavAavBavbavCavDavEavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaaaaGGaGHaGGaaaaabaaaaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaIRaIZaIYdcmaJaaJbaJcaJdaEraJfaJgaJhaJiaDpaJjaDqaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaaaaabaaaaaaaabaFJaFKaFLaFMaFNaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavGavHavIavJavKavLavMavNavMavOavMavMavPavQavQavQavQavQavRavSavTavQavQavQavQavUavQavQavQavQavVavWavXavYavZawaawbawcapuawdaweawfawgawhawiawjawkavaawlawmawnavbawoawpawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaabaHRaHSaHTaHUaHVaabaaaaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaIRaKjaKidcmaIRdckdcodcldcpaDpaDpaDpaDpaMUaDpaDqaDqaEoaEoaEoaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaabaaaaabaaaaaaaabaHaaHbaHcaHdaHaaABaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawrawsawtawuawYawvawwawxawyavVavVavVawzavVavVavVavVavVawAavVavVavVavVavVavVawBavVavVavVavVawCavVawDavVawEavVavVawFapuawGawHawIawJawfawKawjawLavaawMawNawOawPawQawRawSavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaIUaIVaIWaIXaIUaabaaaaabaaaaaaaabaaaaaaaabaabaaaaaaaMUaMUdcmaMUdcmaLHdcrdcsdckdcsaLHaLHaAraMUdcudcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaABaABaABaABaABaabaabaHaaADaAGaIuaHaaBuaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawUawVawWawXctIavfawZaxaaxbaxcaxdaxeaxfaxgaxaaxcaxcaxcaxhaxcaxcaxcaxcaxcaxcaxiaxjaxkaxkaxkaxlaxmaxnaxmaxoaxpaxmaxqapuaxraxraxraxraxraxrawjawkavaaxsawmaxtavbawoaxuawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaIUaKeaKfaKgaIUaabaaaaabaaaaaaaabaaaaaaaMUazCaMUazCaMUaAraLHaLHaLHaLHaLHaLHaLHaLHaLHaNaaAsaMUdcudcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaabarBarBarBarBarBaaaatmaaaarBarBarBarBarBaabaczaaaaaaaaaamlarDarDarDamlampamqamqarEarFarGaojarHarIanearJaoZarKarLarMarNarOarParQarRarSarTarUarVarWarXarParYarjarZasaasbarZariascapmasdaseasfasgapmashasiarqarrarqasjapvaskaslasmasnasmasoaspamiamiaoJamiasqaxWaxXaryaryaxvaryaryaryaryaxvaryaryaryaryaxvaryaryaryaxYaxZaxWasqaabaaaamjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaaaaDpaDpaDqaDraDraDraDraDsaDpaDpaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaasrassassassassastasuasvaswaswaswaswasxaaaaczaaaaaaaaaasyaszaszaszasAasBaaaaaaaoUaoUaoUaoUaoUasCaneasDasEaoZaoZaoZasFasGapcapcapcapcasHasIapcapcapcasJasKasLasMasNasOasPariasQapmasRasSaAqasUasVasWasXasYasZarqataapvatbatcatdateatfatgathatiatjatkamiayKaxvayLaabaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabayPayQayLaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaDpaDpasTaApaEqaEraEsaEtaEuaEqaDpaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabayZatlatlatlatlatlaaaatmaaaatlatlatlatlatlaabaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUatnaneasDasEatoapSapTapUapVapWatpapYatqatratsattatuatvapWatwatxatyatzatAatAatBatCapmatDatEatFatGapmatHatIatJarrarqatKapvatbartatcatcatcatLanTatMatNatOamiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabazDaabaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaDpaDpaDpaDpaIZaEraFuaEraFuaFvaEraEraEraFwaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaaaaaabaaaaabaaaaaaazJaaaaaaaabaaaaabaaaaaaaczaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaoUatPaneatQasEaqOatRatSatTatUatVatWatXatYatZauaaubaucaudaueaufaugaugauhaugaugauiaujaukaulaumapmaunapmauoaupauqaurausautapvatbauuauvauvauvauwauxauyauzauAamiaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaEnaabaabaaaaaaaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaDpaHZaIYdckaHYaGLaGMaGNaEraEraGOaGPaEraGQaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaczaczaabaabaabaabaDxaDyaDxaabaabaabaabaczaczaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUauBaneauCasEarKauDauEauFauGarParQauHauIauJauKauIauLarXarPauMauNauOauNauNauOauNauPapmasRauQapmauRapmauSauTauUauVauWauWauXauYauZavaavaavaavbavcavdaveaveaveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaFqaFraFqaabaabaaaaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaDpaGJaGKaHWaHXaIaaIbaEraEraEraIcaIdaEraIeaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaagaaaaaaaaaaaaaabaaaaabaaaaaaaabaaaaEFaEGaEHaaaaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavfavfavfavfavfaoUaoUavgaoUasEasEasEavhaviavjavkavkavlavkavlavkavkavmasJasJavnavoavpavqavoavpavqavravsavsavsavsavsapmavtavuavvavvavwavvavxavyavaavzavAavBavbavCavDavEavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaaaaGGaGHaGGaaaaabaaaaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaDpaFsaFtdckaGIaJbaJcaJdaEraJfaJgaJhaJiaDpaJjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaaaaabaaaaaaaabaFJaFKaFLaFMaFNaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavGavHavIavJavKavLavMavNavMavOavMavMavPavQavQavQavQavQavRavSavTavQavQavQavQavUavQavQavQavQavVavWavXavYavZawaawbawcapuawdaweawfawgawhawiawjawkavaawlawmawnavbawoawpawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaabaHRaHSaHTaHUaHVaabaaaaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaDpaEoaEpdckaDpdckdckdcldcpaDpaDpaDpaDpaDpaDpaabaabaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaabaaaaabaaaaaaaabaHaaHbaHcaHdaHaaABaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawrawsawtawuawYawvawwawxawyavVavVavVawzavVavVavVavVavVawAavVavVavVavVavVavVawBavVavVavVavVawCavVawDavVawEavVavVawFapuawGawHawIawJawfawKawjawLavaawMawNawOawPawQawRawSavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaIUaIVaIWaIXaIUaabaaaaabaaaaaaaabaaaaaaaabaabaaaaaaaMUaDpdckaDpdckaLHaKaaLHdcmaLHaLHaLHaAraMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaABaABaABaABaABaabaabaHaaADaAGaIuaHaaBuaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawUawVawWawXctIavfawZaxaaxbaxcaxdaxeaxfaxgaxaaxcaxcaxcaxhaxcaxcaxcaxcaxcaxcaxiaxjaxkaxkaxkaxlaxmaxnaxmaxoaxpaxmaxqapuaxraxraxraxraxraxrawjawkavaaxsawmaxtavbawoaxuawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaIUaKeaKfaKgaIUaabaaaaabaaaaaaaabaaaaaaaMUazCaMUazCaMUaAraLHaLHaLHaLHaLHaLHaLHaLHaLHaNaaAsaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaBAaBzaBAaaaaaaaaaaABaABaABaABaCCaBGaCDaABaaaaaaaHaaJtaCEaJvaDzayYaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavfavfavfavfavfavfaxzaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIaxGaxJaxGaxKaxKaxKaxKaxKaxKaxLaxKaxKaxMaxNaxOaxPaxzaxQaxzaxRaxzaxzaqzaBlanTanTanTanTaxSawkavaaxTawmaxUavbaxVawRawSavFavcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaBAaChaBAaaaaabaIUaAtaLvaLwaIUaKkaKkaKkaKkaKkaAuaAwaAvaMUaBiaLHaNaaAsdcmaLHdcmdcmdcmaMUaBkaMUaMUaMUaMUaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaayaaybayaaaaaaaaabaABaBwaEIaEEayYaFOayYaABaGZaHeaHaaHaaHfaKBaDzayYaABaABaHhaHgaHeaABaABaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxAaydayeayfaxEaygaxGayhayiayjaykaylaymaynayoaypayqayraysaytayuayvavVavWaywayxayyayzayzayzayzayzayAayzayzayzayzayBayCayDayEayFayGayHayIayJawoawqavcaabayMayNayNayNayNayNayOaabaabaaaaaaaaaaaaaDkaCoaDkaaaaKkaIUaIUaMXaMYaIUaCqaLHaLHaLHdcmaBFaLHaCsaMUaLHaLHaLHaDbdcmaLHaMUaDhaDfaMUaLHaDiaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayRaySayTaaaayUayVayWaabaabayXayYayXaaaaaaaabaABaIqaItaIsaIyaIxaCraABaJrayYaMfaJsaKwaJuaJuaJuaJuaJuaJuaJuaJuaKxaABaaaaKyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaazbazcazdaxEaygaxGazeazfazgaykazhaziazjazjazjazjazjaysazjazkavQavVavWaxzazlazmaznaznaznaznazoazpazqazqazqazqazqazqazrazsaztazuazvazwazxazyavcavcazzazAazBazBazBazBazBazAazzaabaaaaaaaaaaaaaHFaGDdbZaaaaKkaCBaEfaEcaEhaLHaLHaLHdcmaLHdcmaEiaLHaLHaMUaLHaEkaEjaEiaBkaLHaMUaFjaCFaMUaLHaDjaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8334,21 +8334,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPsaLMaLMaKnaLTaNxaLMaNxaPtaNxaLMaNxaLTaNyaNzaIhaGTaPuaJqaJqaPvaPwcZFaPwaJqczPczPczPczPcZHcZGcZJcZIczPaPCaPDaPEaMmaMmaPFaMmaPGaPHaPIaJwaaaaIAaIAaPJaPKaPJaIAaIAaaaaFPaFUaFVaPLaPMaPNaNYaPOaFVaCJaERaFWaFXaPPaKYaIGaFXaIHaFXaIGaLaaPQaERaERaERaPRaPSaPTaPUaPVaPWamiamiaPXaPYaPZaQaaILaQbaJQaILaQcaILaQdaILaQeaQfaQgaQhaQiaQjaQkaQlaQmaQnaQoaQpaQqaQoaQoaQraQoaQlaQsaQlaLFdbQaQldbRdbTdbSaQwdbUaQxdbVdbXdbWdbYaQBaLEaQCaQDaQEaQFaQGaQHaQIaQJaOUaQKaQLaOVaQMaQNaQOaQPaPbaQQaPdaPeaPfaUndcaaLJaQSaQTaQTaQUaPpaPpaPpaPpaPqaPraaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLUaQVaQWaNwaLTaNxaLMaNxaLMaNxaLMaNxaLTaNyaNzaIhaGTaQXaQYaQZaRaaRbaRbaFzaRdaReaRfaRgcZKcZMcZLcATcZNczPaRlaRmaRnaRoaRpcZOaRraRsaRtaRuaJwaaaaabaaaaRvaRwaRvaaaaabaaaazEaFUaFVaRxaRyaRzaRAaRBaFVaCJaERaRCaRDaHoaREaRFaHraRGaHraRHaRIaRJaERaRKaRLaRMaRNaROaRPaRQaRRaaaaaaaPXaRSaRTaRUaILaRVaRWaJQaJQaRXaJQaJQaJQaRYaINaRZaINaSaaSbaINaScaINaSdaSeaSfaSgaShaSiaSdaSjaSkaSlaSmaSlaSlaSlaSlaSnaSlaSlaSoaSldcbaUbaSlaSqaLHaOQaSraQFaSsaStaSuaSvaSwaSxaSyaSzaOVaSAaSBaSCaSDaSEaQQaPdaPeaPfaSFaSGaLJaSHaQTaQTaQUaPpaPpaPpaPpaPqaPraaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSIaSJaKmaLKaLTaLMaSKaSLaLMaLMaSMaSKaLTaLUaSNaSOaGTaSPaSQaSRaSSaSRaSRaSRaSRaSRaSTaFzczPcZQcZPcZQczPczPaSVaSWaSXaJzaJzaJzaJzaSVaSYaSZaJwaTaaTbaTbaTcaTdaTeaTbaTbaTfaTgaThaFVaTiaFVaTjaTkaTlaFVaTmaERaERaERaERaTnaToaTpaTqaTpaTraTsaERaERaTtaRNaRNaRNaRNaTuaTvaTwaTxaTyaPXaTzaRTaTAaILaILaILaILaILaILaILaINaINaRYaTBaTCaTDaTEaTFaTGaTHaTIaSdaTJaTKaTLaTMaTNaSdaTOaTPaTQaTRaTQaTSaTTaTUaTVaTWaTXaTYaTZdccaVUaSlaUcaOHaUdaUeaUfaSsaUgaSuaSvaUhaOVaUiaUjaUkaUlaUmaQPaQPaOVaOVaPdaPeaPfaUnaUoaLJaUpaUqaUraUsaUtaUuaPpaPpaUvaPraaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSIaKmaKnaKmaKmaKoaKpaKmaKmaKnaSJaUwazEaUxaSPaEvaUyaUyaUzaUyaUAaAyaUBaUCaFzaUDaYgaUGaUGaUHaUIaUGaUJaUGaUGaUGaUKaUGaUGaULaUMaUNaUOaUPaUQaUOaURaUOaUOaUOaUOaUSaUTaUUaUGaUGaUVaUWaUXaUYaUZaVaaVbaVcaVdaVeaVfaVfaVfaVfaVfaVfaVgaVhaViaVjaVkaVlaVmaVnaVoaVpaRNaRNaVqaVraVsaVraVsaVtaVuaVvaVwaVxaVyaINaVzaVAaVBaVCaVDaVDaVEaVFaVGaVHaSdaVIaVJaVKaVKaVLaSdaVMaVNaVOaVPaVQaVQaVRaVSaVTaVUaVVaVWaVXaVYaVUaSlaSqdauaOQaWbaWcaWcaWdaWeaWcaWfaOVaWgaWhaOVaWiaWjaQPaWkaOVaWlaWmaWnaPfaNqaNqaLJaWoaNsaWpaWqaNsaNsaNsaNsaNsabCacUaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvaWraWsaJlaJlaJlaJlaWtaWraEvaJnazEaWuaWvaWwaWxaWyaWzaWzaWAaAyaWBaUCaWCaWDaYgcZRaWFaWGaWHaWHaWIaWJaWJaWJaWKaWLaWLaWMaWNaWOaWHaWHaWPaWQaWRaWSaWTaWTaWUaWTaWVaWQaWQaWQaWWaUWaUXaUYaUZaUZaUZaUZaWXaUZaUZaUZaUZaUZaUZaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXiaXiaXjaXkaXkaXkaXlaVyaVyaVyaXmaXnaVyaINaXoaXpaVDaVDaXqaVDaXraXsaVGaXtaSdaXuaXvaXwaXxaXyaSdaXzaXAaXBaXCaXDaXEaSlaXFaXGaXFaSlaSlaSlaSoaSlaSlaSqaLHaOQaXHaQFaQFaQFaXIaQFaXJaOVaOVaOVaOVaOVaOVaOVaXKaOVaPfaPfaPeaPfaXLaXMaNqaXNaXOaXPaXQaXRaXSaXTaXUaXVaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaIfazEaWwaCzaIhaXWaXXaXYaXZaIhaCzaYaaYbazEaYcaSPaWwaYdaYeaWzaWzaWAaAyaYfaUCaFzaWDaYgaUGaYhaYiaUGaUGaYjaYkaYlaUGaYmaYnaYoaYnaYpaYqaYnaYnaYraYnaYnaYsaYtaYnaYuaYnaYvaUGaUGaUGaYwaYxaYyaYzaYAaYBaYAaYCaYDaYCaYCaYCaYCaYCaYCaYEaYFaYGaYGaYGaYGaYHaYGaYIaYJaYGaYGaYKaYLaYMaYMaYMaYMaYMaYMaYMaYNaVyaVyaINaYOaYPaYQaYRaYRaYSaYTaXsaVGaYUaSdaSdaSdaSdaSdaYVaSdaYWaYXaYYaYZaTQaZaaSlaZbaZcaZdaZeaZfaZgaZhaZiaSlaSqaWaaOQaZjaZkaQFaZlaZmaQFaZnaZnaOQaZoaZpbeKaNqaZraZsaZtaPfaPfaZuaZvaNqaZwaNqaZxaXOaZyaZzaZAaXOaXOaZBaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaFxaWraSOaGTaFzaFzaGUaSOaWraSOaZDaZEaZFaZGaFxaZHaZHaUzaZHaUAaAyaZIaUCaFzaAyaSUaSUaZJaZKaZKaZKaZKaZKaZKaZLaZMaZKaZKaZKaZKaZKaZKaZNaZOaZPaZPaZQaZPaZPaZPaZRaZSaZTaZUaZVaZWaSUaZXaZXaZYaZYaZYaZZbaabaabaabaabaabaababbacbadbaebafbaebagbagbahbaibajbakbalbacbamaTxaTxaTxaTxaTxaTxbanbaobaobaoaINbapbaqbarbarbarbarbasbatbaubavbawbaxbcjbazbaAbaBaSdaSdbaCbaDbaEbaFbaGaSlbaHbaIbaJbaJbaJbaJbaKbaLaSlbaMdcjaOQbaNaQFaZlaZlaZmaZlaQFbaOaOQbaPbaQbaRaNqaPfbaSbaTbaUbaUbaVbaWbaXbaYbaZbbabbbbbcbbdaXQaXOaXObbeaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtdcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbbMbbNbbObbPaZPaZPaZPbbQbbQbbRbbSbbQbbQbbQbbTaUZaVebbUaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaabcgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcobcpbcqbcrbcsbctbcuaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaZCaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFxbcObcPbcObcObcObcObcObcObcPbcObcObcQaFzbcRbcSbcTaFzbcUaFzbcVbcWbcXbcYbcZaAybbxbbxbdaaZKbdbbbBbbBbbBbbBbbBbbEbdcbbBbbBbbBbddaZKbbKbdeaZPbdfbdgbdhbdhbdibdjbdkbbQbdlbdmbdnbdobdpbdqbbTaUZaVebbUaaaaaaaaaaaabacbacbacbacbdrbdsbdtbdubdvbdwbdxbdybdzbdAbdBbacbacbacbacaaaaaaaaaaaabcgbchaVyaVybdCbavbdDbdEbdFbavbdGbdHaLmbdIbdJbdKbavbaybdLbcmbdMbdNbcmbdObdPbdQbdRbcmbdSbdTbdUbcxbcybcybcxbdVbdWaSlaSqdauaOQbaNaQFaZlaZlaZmaZlaQFaQFbdYbdZaQFbeaaNqbebbecbedbcHbcHbeebedbefaNqbegbehaXObeibeibejbeiaXObbebekbelbembembenaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEazEbeobepbepbepbepbepbepbepaInazEaAybeqberbesbesbesbesbesbesbetbesbesbesaAybbxbbKbeuaZKbevbbBbbBbewbexbeybezbewbbBbbBbbBbeAaZKbbKbbLaZPbeBbeCbeDbeDbeEbeFbdkbbQbeGbeHbeIbeJbnEbeLbeMbeNaVebeObePbeQbacbacbacbeRbeSbeTbeUbeVbeVbeWbeXbeVbeYbeVbeZbfabfbbfcbfdbfebacbacbacbeQbambffbchaVyaVyaINbfgbdDbdJbdFbavbfhbfibavbfjbfkbdKbavbaybcmbcmbflbfmbfnbfobfpbfqbfrbcmbfsbdTbftbcxbcybcybfubfvbdWaSlaSqaLHaOQbfxbfybfzaZlaZmbfAaQFaQFbfBaQFbfCbfDaNqbfEbfFbfGbcHbcHbfHbfGbfIaNqbfJbehaXOaXOaXOaXQaXOaXObfKbfLbfMbfNbfObfPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQaabbfRaIiaFBbfSbesbfTbfUbfVbfWbfXbfYbfZbgabesbjjbgcbgdbgeaZKbgfbbBbbBbewbeybggbghbewbbBbbBbgibgjaZKbbKbbLaZPaZPbgkaZPaZPaZPaZPaZPbbQbglbeJbgmbeJbgnbeLbbTbgoaVeaVfaVfbgpbgqbgrbacbgsbdtbgtbeVbeVbgubgvbgwbgxbgwbgybgzbgAbgBbgCbgDbgEbacbgFbgqbgGbgHbgIbchaVyaVybdCbavbgJbavbavbavbgKbgLbavbfjbgMbdKbavbaybcmbcmbgNbgObgPbgQbgRbgSbfrbgTaSlbgUbftbcxbcybcybcxbfvbgVaSlbgWbgXaOQbgYaOQaOQbgZaZmbhabhbaQFbhcbhdaUgbhebaZbhfbhgbhhbhibhibhjbhkbhlbaZbhmbhnaXObhoaXOaXQaXOaXObhpbhqbelbembembhraNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbhsbhtbhuaGTbcRbesbfTbhvbhwbfTbhxbhybhzbhAbesbhBbhCbhDaZOaZKbhEbhFbhGbhHbhIbhJbhKbhLbhLbhLbhMbhNaZKbbKbgcbhObhPbhQbbKbbKbhRaZObhSbbQbhTbhUbhVbhWbhXbhYbbTbgoaUZaUZaUZbhZbiabibbicbidbiebeVbifbigbihbiibijbikbilbimbinbiobipbidbiqbirbisbitbiubivbiwbixbiyaVybizaINbavbiAbiBbdKbavbiCbiDbavbiEbiFbdKbavbaybcmbcmbcmbcnbcmbiGbcmbgSbfrbiHaSlbiIbftbcxbcybcybcxbfvbiJaSlbiKbiLbiMbiNbiObiPbiQbiRbiSbiSbiSbiSbiSbiSbiTbiUbiVbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXOaXOaXOaXQaXOaXObiZaZCbjabjabjaaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbjbbjcbjdbjebcRbesbjfbfTbjgbjgbjgbjhbfTbjibesbqbbjkbhDbjlbjlbjlbjlbjmbjlbjnbbBbjobjpbjqbjqbjrbjsaZKbjtbjubjvbjwbjxbjybjybjzbjAbjBbjCbjCbjCbjCbjCbjDbbQbbTbjEbjFbjGbjHbjIbjJbjKbjLbjMbikbjNbjObjPbjPbjPbjPbjQbjPbjRbjSbjTbjUbjNbjVbjWbacbjXbjYbjZbkabkbbkcaVyaVybdCbavbkdbavbavbavaOsbavbavbkebkebkfbkfbkgbcmbcmbkhbkibcmbcmbcmbkjbkkbklaSlbdWbftbcxbcxbcxbcxbfvbkmaSlbknbkobkobkpbkobkqaZlaZlaZlaZlbkraZlaZlaZlbksbiXbcHbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXObcKbcKbcLbcKaXObktaZCbkubkvbkwaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSIaKmaKnaKmaKmaKoaKpaKmaKmaKnaSJaUwazEaUxaSPaEvaUyaUyaUzaUyaUAaAyaUBaUCaFzaUDaYgaUGaUGaUHaUIaUGaUJaUGaUGaUGaUKaUGaUGaULaUMaUNaUOaUPaUQaUOaURaUOaUOaUOaUOaUSaUTaUUaUGaUGaUVaUWaUXaUYaUZaVaaVbaVcaVdaVeaVfaVfaVfaVfaVfaVfaVgaVhaViaVjaVkaVlaVmaVnaVoaVpaRNaRNaVqaVraVsaVraVsaVtaVuaVvaVwaVxaVyaINaVzaVAaVBaVCaVDaVDaVEaVFaVGaVHaSdaVIaVJaVKaVKaVLaSdaVMaVNaVOaVPaVQaVQaVRaVSbeCaVUaVVaVWaVXaVYaVUaSlaSqdauaOQaWbaWcaWcaWdaWeaWcaWfaOVaWgaWhaOVaWiaWjaQPaWkaOVaWlaWmaWnaPfaNqaNqaLJaWoaNsaWpaWqaNsaNsaNsaNsaNsabCacUaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvaWraWsaJlaJlaJlaJlaWtaWraEvaJnazEaWuaWvaWwaWxaWyaWzaWzaWAaAyaWBaUCaWCaWDaYgcZRaWFaWGaWHaWHaWIaWJaWJaWJaWKaWLaWLaWMaWNaWOaWHaWHaWPaWQaWRaWSaWTaWTaWUbdkaWVaWQaWQaWQaWWaUWaUXaUYaUZaUZaUZaUZaWXaUZaUZaUZaUZaUZaUZaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXiaXiaXjaXkaXkaXkaXlaVyaVyaVyaXmaXnaVyaINaXoaXpaVDaVDaXqaVDaXraXsaVGaXtaSdaXuaXvaXwaXxaXyaSdaXzaXAaXBaXCaXDaXEaSlaXFaXGaXFaSlaSlaSlaSoaSlaSlaSqaLHaOQaXHaQFaQFaQFaXIaQFaXJaOVaOVaOVaOVaOVaOVaOVaXKaOVaPfaPfaPeaPfaXLaXMaNqaXNaXOaXPaXQaXRaXSaXTaXUaXVaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaIfazEaWwaCzaIhaXWaXXaXYaXZaIhaCzaYaaYbazEaYcaSPaWwaYdaYeaWzaWzaWAaAyaYfaUCaFzaWDaYgaUGaYhaYiaUGaUGaYjaYkaYlaUGaYmaYnaYoaYnaYpaYqaYnaYnaYraYnaYnaYsaYtaYnaYuaYsaYvaVTaUGaUGaYwaYxaYyaYzaYAaYBaYAaYCaYDaYCaYCaYCaYCaYCaYCaYEaYFaYGaYGaYGaYGaYHaYGaYIaYJaYGaYGaYKaYLaYMaYMaYMaYMaYMaYMaYMaYNaVyaVyaINaYOaYPaYQaYRaYRaYSaYTaXsaVGaYUaSdaSdaSdaSdaSdaYVaSdaYWaYXaYYaYZaTQaZaaSlaZbaZcaZdaZeaZfaZgaZhaZiaSlaSqaWaaOQaZjaZkaQFaZlaZmaQFaZnaZnaOQaZoaZpbeKaNqaZraZsaZtaPfaPfaZuaZvaNqaZwaNqaZxaXOaZyaZzaZAaXOaXOaZBaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaFxaWraSOaGTaFzaFzaGUaSOaWraSOaZDaZEaZFaZGaFxaZHaZHaUzaZHaUAaAyaZIaUCaFzaAyaSUaSUaZJaZKaZKaZKaZKaZKaZKaZLaZMaZKaZKaZKaZKaZKaZKaZNaZOaZPaZPaZQaZPaJaaKjaKiaJaaJaaZUaZVaZWaSUaZXaZXaZYaZYaZYaZZbaabaabaabaabaabaababbacbadbaebafbaebagbagbahbaibajbakbalbacbamaTxaTxaTxaTxaTxaTxbanbaobaobaoaINbapbaqbarbarbarbarbasbatbaubavbawbaxbcjbazbaAbaBaSdaSdbaCbaDbaEbaFbaGaSlbaHbaIbaJbaJbaJbaJbaKbaLaSlbaMdcjaOQbaNaQFaZlaZlaZmaZlaQFbaOaOQbaPbaQbaRaNqaPfbaSbaTbaUbaUbaVbaWbaXbaYbaZbbabbbbbcbbdaXQaXOaXObbeaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtdcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbdjbdgbdiaJabdhbbObbNaJabbQbbRbbSbbQbbQbbQbbTaUZaVebbUaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaabcgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcobcpbcqbcrbcsbctbcuaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaZCaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFxbcObcPbcObcObcObcObcObcObcPbcObcObcQaFzbcRbcSbcTaFzbcUaFzbcVbcWbcXbcYbcZaAybbxbbxbdaaZKbdbbbBbbBbbBbbBbbBbbEbdcbbBbbBbbBbddaZKbbKbdeaZPbdfbbMbeFaJaaZTaZSaZRaJabdlbdmbdnbdobdpbdqbbTaUZaVebbUaaaaaaaaaaaabacbacbacbacbdrbdsbdtbdubdvbdwbdxbdybdzbdAbdBbacbacbacbacaaaaaaaaaaaabcgbchaVyaVybdCbavbdDbdEbdFbavbdGbdHaLmbdIbdJbdKbavbaybdLbcmbdMbdNbcmbdObdPbdQbdRbcmbdSbdTbdUbcxbcybcybcxbdVbdWaSlaSqdauaOQbaNaQFaZlaZlaZmaZlaQFaQFbdYbdZaQFbeaaNqbebbecbedbcHbcHbeebedbefaNqbegbehaXObeibeibejbeiaXObbebekbelbembembenaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEazEbeobepbepbepbepbepbepbepaInazEaAybeqberbesbesbesbesbesbesbetbesbesbesaAybbxbbKbeuaZKbevbbBbbBbewbexbeybezbewbbBbbBbbBbeAaZKbbKbbLaZPbeBbqwbbPaJabeEcePcZXaJabeGbeHbeIbeJbnEbeLbeMbeNaVebeObePbeQbacbacbacbeRbeSbeTbeUbeVbeVbeWbeXbeVbeYbeVbeZbfabfbbfcbfdbfebacbacbacbeQbambffbchaVyaVyaINbfgbdDbdJbdFbavbfhbfibavbfjbfkbdKbavbaybcmbcmbflbfmbfnbfobfpbfqbfrbcmbfsbdTbftbcxbcybcybfubfvbdWaSlaSqaLHaOQbfxbfybfzaZlaZmbfAaQFaQFbfBaQFbfCbfDaNqbfEbfFbfGbcHbcHbfHbfGbfIaNqbfJbehaXOaXOaXOaXQaXOaXObfKbfLbfMbfNbfObfPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQaabbfRaIiaFBbfSbesbfTbfUbfVbfWbfXbfYbfZbgabesbjjbgcbgdbgeaZKbgfbbBbbBbewbeybggbghbewbbBbbBbgibgjaZKbbKbbLaZPaZPbgkaZPaJabeEbeDbhSaJabglbeJbgmbeJbgnbeLbbTbgoaVeaVfaVfbgpbgqbgrbacbgsbdtbgtbeVbeVbgubgvbgwbgxbgwbgybgzbgAbgBbgCbgDbgEbacbgFbgqbgGbgHbgIbchaVyaVybdCbavbgJbavbavbavbgKbgLbavbfjbgMbdKbavbaybcmbcmbgNbgObgPbgQbgRbgSbfrbgTaSlbgUbftbcxbcybcybcxbfvbgVaSlbgWbgXaOQbgYaOQaOQbgZaZmbhabhbaQFbhcbhdaUgbhebaZbhfbhgbhhbhibhibhjbhkbhlbaZbhmbhnaXObhoaXOaXQaXOaXObhpbhqbelbembembhraNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbhsbhtbhuaGTbcRbesbfTbhvbhwbfTbhxbhybhzbhAbesbhBbhCbhDaZOaZKbhEbhFbhGbhHbhIbhJbhKbhLbhLbhLbhMbhNaZKbbKbgcbhObhPbhQbhRaJaaJaaJaaJaaJabhTbhUbhVbhWbhXbhYbbTbgoaUZaUZaUZbhZbiabibbicbidbiebeVbifbigbihbiibijbikbilbimbinbiobipbidbiqbirbisbitbiubivbiwbixbiyaVybizaINbavbiAbiBbdKbavbiCbiDbavbiEbiFbdKbavbaybcmbcmbcmbcnbcmbiGbcmbgSbfrbiHaSlbiIbftbcxbcybcybcxbfvbiJaSlbiKbiLbiMbiNbiObiPbiQbiRbiSbiSbiSbiSbiSbiSbiTbiUbiVbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXOaXOaXOaXQaXOaXObiZaZCbjabjabjaaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbjbbjcbjdbjebcRbesbjfbfTbjgbjgbjgbjhbfTbjibesbqbbjkbhDbjlbjlbjlbjlbjmbjlbjnbbBbjobjpbjqbjqbjrbjsaZKbjtbjubjvbjwbjxbjzbjAbjBdatbjBbjCbjCbjCbjCbjCbjDbbQbbTbjEbjFbjGbjHbjIbjJbjKbjLbjMbikbjNbjObjPbjPbjPbjPbjQbjPbjRbjSbjTbjUbjNbjVbjWbacbjXbjYbjZbkabkbbkcaVyaVybdCbavbkdbavbavbavaOsbavbavbkebkebkfbkfbkgbcmbcmbkhbkibcmbcmbcmbkjbkkbklaSlbdWbftbcxbcxbcxbcxbfvbkmaSlbknbkobkobkpbkobkqaZlaZlaZlaZlbkraZlaZlaZlbksbiXbcHbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXObcKbcKbcLbcKaXObktaZCbkubkvbkwaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbkybkzbhubkAaZGbkBbfTbkCbjgbjgbjgbjhbkCbfTbesbkDbkEbhDbjlbkFbkGbkHbkIbjlbkJbkKbkLaZKbkMbkNbkObkPaZKbbKbkQbkRbkRbkSbkRbkRbkRbkRbkTbkUbkUbkUbkVbkUbkWbkXbkYbkZblablbblbblbblbblbblbblcbldblcbjPbjPbleblfblgblhblibljbleblkbjPbllblmbllbllbllbllbllbllbllbkcaVyaVyaINblnblobavblpbavblqbavblrblsbltbkfbluaSdblvblwaSdaSdblxblyblyblyaSdaSdaSlblzblAblBblBblBblBblAblCaSlblDbkobkobkpblEaOQblFblGblHblIblJblKblLblMblNaNqblOaPfblPbcHbcHblPaPfblQaNqblRbehaXObeibeibejbeiaXObiZaZCbjabjabjaaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQblSaFxblTblUblVbesbhvbhvbhvbfTblWblXblYblZbesbmabmbbhDbjlbmcbjlbmdbmebjlbmfbmgbmhaZKbkMbkNbkObmiaZKbbKbkQbkRbmjbmkbmlbmmbmnbkRbmobmpbmqbmrbkXbkXbkXbkXbmsbmtbmublbbmvbmwbmxbmybmzbmAbmBbmCbjPbmDblgbmEbmFbmGbmFbmEblgbmHbjPbmIbmJbmKbmLbmMbmNbmObmPbllbmQbmRbmRbmSaINaINaINaINbmTbdCbmTbmUaINaSbaINaINaSdaSdaSdaSdbmVbmWbmWbmWbmWbmXbmYaSlbmZbnabmZbnbbnbbmZbnabmZaSlblDbkobkobncblEaOQaOQaOQaOQaOQbgYaOQaOQaOQaOQaNqbndbnebnfbnfbnfbnfbngaNqaNqbnhbniaXOaXOaXOaXQaXOaXObhpbekbnjbembembnkaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIfazEbnlaJlbhuaAyaAyaAyaAyaAyaAybnmbnnbesbesbesbesbesbesbnobesbesbesbnpbnpbnqbjlbnrbnsbmdbntbjlbnubnvbnuaZKbkMbkNbkObnwaZKbbKbkQbkRbnxbnybnzbmmbnzbkRbmobnAbnBbnCbnDbEVbnFbkXbnGbnHbmubnIbnJbnKbnLbnMbnMbnLbnNbnObjPbnPblgblgbnQbnRbmFbmEblgbnSbjTbnTbnUbnVbnWbnXbnYbnVbnZbllboabobbocbodboebofbogbohbohbohbohbohbohboibojbokbolbohbombohbohbohbohbohbohbohbohbonboobopbopbopbopbopbopboqbofborbosbosbotboubovboubowbouboxboybozbouboAboBboCboDboEboEboEboEboEboEboEboFboGboHboHboHboHboIboHboJboKboLboMboNbfOboOaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPaaaaabboQaIiboRboSboTboUboUboUboUboUboVboWboXboYboZbpabnqbjlbjlbjlbpbbmebjlaZKaZKaZKaZKbkMbpcbpdbpeaZKbpfbpgbkRbphbpibmmbnzbpjbkRbmobpkbnBbnCbnCbplbpmbkXbpnbnHbmubpobppbpqbprbpsbptbpubnNbpvbjPbpwbnQblgbpxbpybpxblgbnQbpzblkbpAbnVbnVbnWbpBbnYbnVbpCbllbpDbocbocbodboebofbohbohbohbohbohbohbohbpEbohbohbohbohbohbohbpFbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpHbpIbpJboEboEbpKbkobkobkobkobkobkpbkobkobkobkobkobkobkobkobkobkobkobkobpLbkobpMbpNaXOaXOaXOaXOaXOaXOaXObpObhqbelbembembenaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbhsbhtbpPbpQbpRbpSbpSbpSbpTbpSbpSbpUbpVbpWaZOaZOaZObpXbjlbkFbpYbpZbntbjlbqabsubqaaZKaZKaZKaZKbqcaZKbqdbkQbkRbqebqfbnzbqgbqhbkRbmobkXbqibnCbnCbnCbqjbkXbqkbnHbmubqlbqmbpqbprbqnbqobpubnNbqpbjPbqqbqrblgbqsbqtbqubmEbqvbqwbqxbqybqzbqAbqBbqCbqDbnVbqEbllbqFbqGbocbodboebofbohbqHbohbohbohbohbqIbqJbqJbqJbqJbqKbohbohbohbohbqLbohbqHbqMbohbqNbqObqPbohbqQbqRbqRbqSbqTbqUbqVbkobkobkobkobkobkobkobqWbqXbqYbkobkobkobkobkobkobkobkobkobkobqZbrabrabrbbrcbrdbrebrfbrfbrfbrfbrgbrhbriaabaaaaaaaabaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtdcdaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbhsbhtbpPbpQbpRbpSbpSbpSbpTbpSbpSbpUbpVbpWaZOaZOaZObpXbjlbkFbpYbpZbntbjlbqabsubqaaZKaZKaZKaZKbqcaZKbqdbkQbkRbqebqfbnzbqgbqhbkRbmobkXbqibnCbnCbnCbqjbkXbqkbnHbmubqlbqmbpqbprbqnbqobpubnNbqpbjPbqqbqrblgbqsbqtbqubmEbqvdavbqxbqybqzbqAbqBbqCbqDbnVbqEbllbqFbqGbocbodboebofbohbqHbohbohbohbohbqIbqJbqJbqJbqJbqKbohbohbohbohbqLbohbqHbqMbohbqNbqObqPbohbqQbqRbqRbqSbqTbqUbqVbkobkobkobkobkobkobkobqWbqXbqYbkobkobkobkobkobkobkobkobkobkobqZbrabrabrbbrcbrdbrebrfbrfbrfbrfbrgbrhbriaabaaaaaaaabaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtdcdaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbrjbrkbrlbrmbrnbpSbrobrpbrqbrqbrrbrsbrtbrubrvbrvbrwbrxbjlbjlbjlbmdbrybmcaZOaZOaZOaZObrzbbKbbKbrAbjybrBbrCbrDbrEbrFbrGbrHbrIbkRbrJbkXbrKbnCbnCbnCbrLbrMbrNbnHbrOblbbrPbrQbnLbnLbnLbnLbnNbrRbjPbrSbrTbjPbjPbjPbjPbjPbjPbjPblkbllbrUbrVbrWbrXbrYbrZbsabllbsbbscbscbsdbsdbsdbsdbsdbsdbsdbsebsebsfbsgbshbshbsgbsfbsebsebsibsibsibsibsibsibsjbsjbskbsjbsjbsjbsjbsjbslbsmbsnbsobkobkobspbspbsqbsqbsqbsqbsqbsrbrabrabqZbrabkobrabrabrabrabssbstbstbstbstbsFbsvbsvbsvbsvbsvbsvbsvbsvbsvaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbkybkzbpPbpQbswbpSbsxbpSbsybszbpSbpUbpUbdabsAbsBbsBbsCbjlbkFbsDbmdbsEbmcbsHbsGbujbsIbsJbsKbsKbsLbsKbsMbsNbkRbsObsPbsQbsRbsSbrDbsTbkXbsUbnCbnCbsVbsWbsXbrNbnHbsYblbbsZbtabtbbtcbtdbtebtfblbblbbtgbthbtibtjbtkbtjbtlbthaaabtmbllbtnbtobtpbtqbrYbnVbtrbllbtsbttbtubsdbtvbtwbtxbtybtzbtAbtBbtCbtDbtEbtFbtFbtEbtGbtHbtIbsibtJbtLbtKbtMbsibtNbtObtPbtQbtRbtSbtSbtTbslbtUbtVbtWbtXbtWbtYbtYbsqbtZbuabubbsqbucbudbucbsqbuebrabssbstbufbugbufbstbuhbuibstbuwbukbulbumaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPaaabunaWwbuoblUbupbpSbuqbpSburbusbutbuubpSbuvbwHbuxbuybsCbjlbjlbjlbjlbjlbjlbuzbuAbuBbuCbuDbkRbkRbkRbkRbkRbkRbkRbuEbkRbkRbkRbuFbkRbuGbuHbuIbnCbnCbnCbuJbrMbuKbnHbuLblbbuMbtablcblcblcblbbuNblbbuObuPbuQbuRbuSbuTbuUbuVbuWbuXbuYbllbuZbnVbvabvbbrYbvcbnVbllbvdbvebvfbsdbvgbvhbvibvjbvkbvlbvmbtFbtFbtFbtFbtFbtFbtFbvnbvobvpbvqbvrbvsbvtbsibvubvvbvwbvxbvybvzbvvbtTbslbvAbtVbvBbvCbvDbvEbvEbvFbvGbvHbvIbvJbvKbvLbvMbsqbvNbvObvPbstbvQbvRbvSbvTbvTbvUbstbvVbvWbvXbumaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 8e73f62d3ce..776108ecbef 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -14,8 +14,9 @@ var/const/supply_science = 5 var/const/supply_organic = 6 var/const/supply_materials = 7 var/const/supply_misc = 8 +var/const/supply_vend = 9 -var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engineer,supply_medical,supply_science,supply_organic,supply_materials,supply_misc) +var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engineer,supply_medical,supply_science,supply_organic,supply_materials,supply_misc,supply_vend) /proc/get_supply_group_name(var/cat) switch(cat) @@ -35,6 +36,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine return "Raw Materials" if(8) return "Miscellaneous" + if(9) + return "Vending" /datum/supply_packs @@ -961,17 +964,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine containername = "Beekeeping crate" access = access_hydroponics -/datum/supply_packs/organic/vending - name = "Bartending Supply Crate" - contains = list(/obj/item/weapon/vending_refill/boozeomat, - /obj/item/weapon/vending_refill/boozeomat, - /obj/item/weapon/vending_refill/boozeomat, - /obj/item/weapon/vending_refill/coffee, - /obj/item/weapon/vending_refill/coffee, - /obj/item/weapon/vending_refill/coffee) - cost = 20 - containername = "bartending supply crate" - /datum/supply_packs/organic/foodcart name = "Food Cart crate" contains = list(/obj/structure/foodcart) @@ -979,30 +971,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine containertype = /obj/structure/largecrate containername = "food cart crate" -/datum/supply_packs/organic/vending/snack - name = "Snack Supply Crate" - contains = list(/obj/item/weapon/vending_refill/snack, - /obj/item/weapon/vending_refill/snack, - /obj/item/weapon/vending_refill/snack) - cost = 15 - containername = "snacks supply crate" - -/datum/supply_packs/organic/vending/cola - name = "Softdrinks Supply Crate" - contains = list(/obj/item/weapon/vending_refill/cola, - /obj/item/weapon/vending_refill/cola, - /obj/item/weapon/vending_refill/cola) - cost = 15 - containername = "softdrinks supply crate" - -/datum/supply_packs/organic/vending/cigarette - name = "Cigarette Supply Crate" - contains = list(/obj/item/weapon/vending_refill/cigarette, - /obj/item/weapon/vending_refill/cigarette, - /obj/item/weapon/vending_refill/cigarette) - cost = 15 - containername = "cigarette supply crate" - ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Materials /////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -1306,13 +1274,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine containername = "crate" //let's keep it subtle, eh? contraband = 1 -/datum/supply_packs/misc/autodrobe - name = "Autodrobe Supply Crate" - contains = list(/obj/item/weapon/vending_refill/autodrobe, - /obj/item/weapon/vending_refill/autodrobe) - cost = 15 - containername = "autodrobe supply crate" - /datum/supply_packs/misc/formalwear //This is a very classy crate. name = "Formal-wear Crate" contains = list(/obj/item/clothing/under/blacktango, @@ -1378,3 +1339,75 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/weapon/beach_ball) cost = 20 containername = "polo supply crate" + + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Vending ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_packs/vending + name = "HEADER" + group = supply_vend + +/datum/supply_packs/vending/autodrobe + name = "Autodrobe Supply Crate" + contains = list(/obj/item/weapon/vending_refill/autodrobe, + /obj/item/weapon/vending_refill/autodrobe) + cost = 15 + containername = "autodrobe supply crate" + +/datum/supply_packs/vending/clothes + name = "Clothing Supply Crate" + contains = list(/obj/item/weapon/vending_refill/suitdispenser, + /obj/item/weapon/vending_refill/shoedispenser, + /obj/item/weapon/vending_refill/hatdispenser, + /obj/item/weapon/vending_refill/clothing) + cost = 15 + containername = "clothing supply crate" + +/datum/supply_packs/vending/pets + name = "Pet Supply Crate" + contains = list(/obj/item/weapon/vending_refill/crittercare, + /obj/item/weapon/vending_refill/crittercare) + cost = 15 + containername = "pet supply crate" + +/datum/supply_packs/vending/bar + name = "Bar Supply Crate" + contains = list(/obj/item/weapon/vending_refill/boozeomat, + /obj/item/weapon/vending_refill/boozeomat, + /obj/item/weapon/vending_refill/boozeomat) + cost = 15 + containername = "bar supply crate" + +/datum/supply_packs/vending/coffee + name = "Coffee Supply Crate" + contains = list(/obj/item/weapon/vending_refill/coffee, + /obj/item/weapon/vending_refill/coffee, + /obj/item/weapon/vending_refill/coffee) + cost = 15 + containername = "coffee supply crate" + +/datum/supply_packs/vending/snack + name = "Snack Supply Crate" + contains = list(/obj/item/weapon/vending_refill/snack, + /obj/item/weapon/vending_refill/snack, + /obj/item/weapon/vending_refill/snack) + cost = 15 + containername = "snacks supply crate" + +/datum/supply_packs/vending/cola + name = "Softdrinks Supply Crate" + contains = list(/obj/item/weapon/vending_refill/cola, + /obj/item/weapon/vending_refill/cola, + /obj/item/weapon/vending_refill/cola) + cost = 15 + containername = "softdrinks supply crate" + +/datum/supply_packs/vending/cigarette + name = "Cigarette Supply Crate" + contains = list(/obj/item/weapon/vending_refill/cigarette, + /obj/item/weapon/vending_refill/cigarette, + /obj/item/weapon/vending_refill/cigarette) + cost = 15 + containername = "cigarette supply crate" diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index e6be0ea5281..eb1f76e48cd 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1118,6 +1118,10 @@ var/list/ghostteleportlocs = list() name = "\improper Clothing Shop" icon_state = "Theatre" +/area/civilian/pet_store + name = "\improper Pet Store" + icon_state = "Theatre" + /area/holodeck name = "\improper Holodeck" icon_state = "Holodeck" diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index b0c1ff709ea..a2042720a7f 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -199,7 +199,9 @@ to destroy them and players will be able to make replacements. /obj/machinery/vending/autodrobe = "AutoDrobe", /obj/machinery/vending/hatdispenser = "Hatlord 9000", /obj/machinery/vending/suitdispenser = "Suitlord 9000", - /obj/machinery/vending/shoedispenser = "Shoelord 9000") + /obj/machinery/vending/shoedispenser = "Shoelord 9000", + /obj/machinery/vending/clothing = "ClothesMate", + /obj/machinery/vending/crittercare = "CritterCare") /obj/item/weapon/circuitboard/vendor/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index bf18a7e5111..dad171e0e59 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1216,7 +1216,7 @@ /obj/item/clothing/accessory/scarf/purple=1,/obj/item/clothing/accessory/scarf/yellow=1,/obj/item/clothing/accessory/scarf/orange=1, /obj/item/clothing/accessory/scarf/lightblue=1,/obj/item/clothing/accessory/scarf/white=1,/obj/item/clothing/accessory/scarf/black=1, /obj/item/clothing/accessory/scarf/zebra=1,/obj/item/clothing/accessory/scarf/christmas=1,/obj/item/clothing/accessory/stripedredscarf=1, - /obj/item/clothing/accessory/stripedbluescarf=1,/obj/item/clothing/accessory/stripedgreenscarf=1,/obj/item/clothing/accessory/petcollar =3,/obj/item/clothing/accessory/waistcoat=1, + /obj/item/clothing/accessory/stripedbluescarf=1,/obj/item/clothing/accessory/stripedgreenscarf=1,/obj/item/clothing/accessory/waistcoat=1, /obj/item/clothing/under/sundress=2,/obj/item/clothing/under/stripeddress = 1, /obj/item/clothing/under/sailordress = 1, /obj/item/clothing/under/redeveninggown = 1, /obj/item/clothing/under/blacktango=1,/obj/item/clothing/suit/jacket=3, /obj/item/clothing/glasses/regular=2,/obj/item/clothing/head/sombrero=1,/obj/item/clothing/suit/poncho=1, /obj/item/clothing/suit/ianshirt=1,/obj/item/clothing/shoes/laceup=2,/obj/item/clothing/shoes/black=4, @@ -1250,3 +1250,32 @@ /obj/item/weapon/pen/red = 5) contraband = list(/obj/item/toy/crayon/mime = 1,/obj/item/toy/crayon/rainbow = 1) premium = list(/obj/item/weapon/contraband/poster = 5) + +/obj/machinery/vending/crittercare + name = "CritterCare" + desc = "A vending machine for pet supplies." + product_slogans = "Stop by for all your animal's needs!;Cuddly pets deserve a stylish collar!;Pets in space, what could be more adorable?;Freshest fish eggs in the system!;Rocks are the perfect pet, buy one today!" + product_ads = "House-training costs extra!;Now with 1000% more cat hair!;Allergies are a sign of weakness!;Dogs are man's best friend. Remember that Vulpkanin!; Heat lamps for Unathi!; Vox-y want a cracker?" + vend_delay = 34 + icon_state = "crittercare" + products = list(/obj/item/clothing/accessory/petcollar = 5, /obj/item/weapon/fish_net = 5, /obj/item/weapon/fishfood = 5, + /obj/item/weapon/tank_brush = 5, /obj/item/weapon/egg_scoop = 5, /obj/item/fish_eggs/goldfish = 5, + /obj/item/fish_eggs/clownfish = 5, /obj/item/fish_eggs/shark = 5, /obj/item/toy/pet_rock = 5, + ) + prices = list(/obj/item/clothing/accessory/petcollar = 50, /obj/item/weapon/fish_net = 15, /obj/item/weapon/fishfood = 15, + /obj/item/weapon/tank_brush = 15, /obj/item/weapon/egg_scoop = 15, /obj/item/fish_eggs/goldfish = 10, + /obj/item/fish_eggs/clownfish = 10, /obj/item/fish_eggs/shark = 10, /obj/item/toy/pet_rock = 100, + ) + contraband = list(/obj/item/fish_eggs/babycarp = 5) + premium = list(/obj/item/toy/pet_rock/fred = 1, /obj/item/toy/pet_rock/roxie = 1) + refill_canister = /obj/item/weapon/vending_refill/crittercare + +/obj/machinery/vending/crittercare/New() + ..() + component_parts = list() + var/obj/item/weapon/circuitboard/vendor/V = new(null) + V.set_type(type) + component_parts += V + component_parts += new /obj/item/weapon/vending_refill/crittercare(0) + component_parts += new /obj/item/weapon/vending_refill/crittercare(0) + component_parts += new /obj/item/weapon/vending_refill/crittercare(0) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index d65a4d33383..cd9a551a4f4 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -68,7 +68,7 @@ return 0 var/title = "Sheet-Glass" title += " ([src.amount] sheet\s left)" - switch(alert(title, "Would you like full tile glass or one direction?", "One Direction", "Full Window", "Cancel", null)) + switch(input(title, "What would you like to construct?") in list("One Direction Window", "Full Window", "Fishbowl", "Fish Tank", "Wall Aquarium", "Cancel")) if("One Direction") if(!src) return 1 if(src.loc != user) return 1 @@ -118,6 +118,24 @@ W.anchored = 0 W.air_update_turf(1) src.use(2) + if("Fish Tank") + if(!src) return 1 + if(src.loc != user) return 1 + if(src.amount < 3) + user << "\red You need more glass to do that." + return 1 + var/obj/machinery/fishtank/F = new /obj/machinery/fishtank/tank(user.loc, 0) + F.air_update_turf(1) + src.use(3) + if("Wall Aquarium") + if(!src) return 1 + if(src.loc != user) return 1 + if(src.amount < 4) + user << "\red You need more glass to do that." + return 1 + var/obj/machinery/fishtank/F = new /obj/machinery/fishtank/wall(user.loc, 0) + F.air_update_turf(1) + src.use(4) return 0 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index f9441690da7..f675e472702 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1365,4 +1365,27 @@ obj/item/toy/cards/deck/syndicate/black new /obj/item/toy/character/thief(src) new /obj/item/toy/character/wizard(src) new /obj/item/toy/character/cthulhu(src) - new /obj/item/toy/character/lich(src) \ No newline at end of file + new /obj/item/toy/character/lich(src) + + +//Pet Rocks, just like from the 70's! + +/obj/item/toy/pet_rock + name = "pet rock" + desc = "The perfect pet!" + icon = 'icons/obj/toy.dmi' + icon_state = "pet_rock" + w_class = 2 + force = 5 + throwforce = 5 + attack_verb = list("attacked", "bashed", "smashed", "stoned") + +/obj/item/toy/pet_rock/fred + name = "fred" + desc = "Fred, the bestest boy pet in the whole wide universe!" + icon_state = "fred" + +/obj/item/toy/pet_rock/roxie + name = "roxie" + desc = "Roxie, the bestest girl pet in the whole wide universe!" + icon_state = "roxie" \ No newline at end of file diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm index e296670581a..306d0ba890a 100644 --- a/code/game/objects/items/weapons/vending_items.dm +++ b/code/game/objects/items/weapons/vending_items.dm @@ -76,4 +76,9 @@ /obj/item/weapon/vending_refill/clothing machine_name = "ClothesMate" icon_state = "refill_clothes" - charges = 20// of 62 \ No newline at end of file + charges = 20// of 62 + +/obj/item/weapon/vending_refill/crittercare + machine_name = "CritterCare" + icon_state = "refill_pet" + charges = 17// of 54 diff --git a/code/modules/fish/fish_eggs.dm b/code/modules/fish/fish_eggs.dm new file mode 100644 index 00000000000..902616755dd --- /dev/null +++ b/code/modules/fish/fish_eggs.dm @@ -0,0 +1,42 @@ + +/obj/item/fish_eggs + name = "fish eggs" + desc = "Eggs laid by a fish. This cluster seems... empty?" + icon = 'icons/obj/fish_items.dmi' + icon_state = "eggs" + w_class = 2.0 + var/fish_type = null //Holds the name of the fish that the egg is for + +/obj/item/fish_eggs/New() + ..() + +var/global/list/fish_eggs_list = list("dud" = /obj/item/fish_eggs, + "goldfish" = /obj/item/fish_eggs/goldfish, + "clownfish" = /obj/item/fish_eggs/clownfish, + "shark" = /obj/item/fish_eggs/shark, + "babycarp" = /obj/item/fish_eggs/babycarp, + ) + +/obj/item/fish_eggs/goldfish + name = "goldfish eggs" + desc = "Goldfish eggs, surprisingly, don't contain actual gold." + icon_state = "gold_eggs" + fish_type = "goldfish" + +/obj/item/fish_eggs/clownfish + name = "clownfish eggs" + desc = "Even as eggs, they are funnier than the clown. HONK!" + icon_state = "clown_eggs" + fish_type = "clownfish" + +/obj/item/fish_eggs/shark + name = "shark eggs" + desc = "We're gonna need a- Oh wait, they're still eggs." + icon_state = "shark_eggs" + fish_type = "shark" + +/obj/item/fish_eggs/babycarp + name = "baby space carp eggs" + desc = "Eggs from the substantially smaller form of the intergalactic terror." + icon_state = "babycarp_eggs" + fish_type = "babycarp" diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm new file mode 100644 index 00000000000..b1171871c25 --- /dev/null +++ b/code/modules/fish/fish_items.dm @@ -0,0 +1,52 @@ + +/obj/item/weapon/egg_scoop + name = "fish egg scoop" + desc = "A small scoop to collect fish eggs with." + icon = 'icons/obj/fish_items.dmi' + icon_state = "egg_scoop" + slot_flags = SLOT_BELT + throwforce = 0 + w_class = 2.0 + throw_speed = 3 + throw_range = 7 + +/obj/item/weapon/fish_net + name = "fish net" + desc = "A tiny net to capture fish with. It's a death sentence!" + icon = 'icons/obj/fish_items.dmi' + icon_state = "net" + slot_flags = SLOT_BELT + throwforce = 0 + w_class = 2.0 + throw_speed = 3 + throw_range = 7 + + suicide_act(mob/user) //"A tiny net is a death sentence: it's a net and it's tiny!" https://www.youtube.com/watch?v=FCI9Y4VGCVw + viewers(user) << "[user] placed the [src.name] on top of \his head, \his fingers tangled in the netting! It looks like \he's trying to commit suicide." + return(OXYLOSS) + +/obj/item/weapon/fishfood + name = "fish food can" + desc = "A small can of Carp's Choice brand fish flakes. The label shows a smiling Space Carp." + icon = 'icons/obj/fish_items.dmi' + icon_state = "fish_food" + throwforce = 1 + w_class = 2.0 + throw_speed = 3 + throw_range = 7 + +/obj/item/weapon/tank_brush + name = "aquarium brush" + desc = "A brush for cleaning the inside of aquariums. Contains a built-in odor neutralizer." + icon = 'icons/obj/fish_items.dmi' + icon_state = "brush" + slot_flags = SLOT_BELT + throwforce = 0 + w_class = 2.0 + throw_speed = 3 + throw_range = 7 + attack_verb = list("scrubbed", "brushed", "scraped") + + suicide_act(mob/user) + viewers(user) << "[user] is vigorously scrubbing \himself raw with the [src.name]! It looks like \he's trying to commit suicide." + return(BRUTELOSS|FIRELOSS) diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm new file mode 100644 index 00000000000..591329480f9 --- /dev/null +++ b/code/modules/fish/fishtank.dm @@ -0,0 +1,701 @@ + +////////////////////////////// +// Fish Tanks! // +////////////////////////////// + + +/obj/machinery/fishtank + name = "placeholder tank" + desc = "So generic, it might as well have no description at all." + icon = 'icons/obj/fish_items.dmi' + icon_state = "tank1" + density = 0 + anchored = 0 + throwpass = 0 + + var/tank_type = "" // Type of aquarium, used for icon updating + var/water_capacity = 0 // Number of units the tank holds (varies with tank type) + var/water_level = 0 // Number of units currently in the tank (new tanks start empty) + var/light_switch = 0 // 0 = off, 1 = on (off by default) + var/filth_level = 0.0 // How dirty the tank is (max 10) + var/lid_switch = 0 // 0 = open, 1 = closed (open by default) + var/max_fish = 0 // How many fish the tank can support (varies with tank type, 1 fish per 50 units sounds reasonable) + var/food_level = 0 // Amount of fishfood floating in the tank (max 10) + var/fish_count = 0 // Number of fish in the tank + var/list/fish_list = null // Tracks the current types of fish in the tank + var/egg_count = 0 // How many fish eggs can be harvested from the tank (capped at the max_fish value) + var/list/egg_list = null // Tracks the current types of harvestable eggs in the tank + + var/has_lid = 0 // 0 if the tank doesn't have a lid/light, 1 if it does + var/max_health = 0 // Can handle a couple hits + var/cur_health = 0 // Current health, starts at max_health + var/leaking = 0 // 0 if not leaking, 1 if minor leak, 2 if major leak (not leaking by default) + var/shard_count = 0 // Number of glass shards to salvage when broken (1 less than the number of sheets to build the tank) + +/obj/machinery/fishtank/bowl + name = "fish bowl" + desc = "A small bowl capable of housing a single fish, commonly found on desks. This one has a tiny treasure chest in it!" + icon_state = "bowl1" + density = 0 // Small enough to not block stuff + anchored = 0 // Small enough to move even when filled + throwpass = 1 // Just like at the county fair, you can't seem to throw the ball in to win the goldfish + pass_flags = PASSTABLE // Small enough to pull onto a table + + tank_type = "bowl" + water_capacity = 50 // Not very big, therefore it can't hold much + max_fish = 1 // What a lonely fish + + has_lid = 0 + max_health = 15 // Not very sturdy + cur_health = 15 + shard_count = 0 // No salvageable shards + +/obj/machinery/fishtank/tank + name = "fish tank" + desc = "A large glass tank designed to house aquatic creatures. Contains an integrated water circulation system." + icon = 'icons/obj/fish_items.dmi' + icon_state = "tank1" + density = 1 + anchored = 1 + throwpass = 1 // You can throw objects over this, despite it's density, because it's short enough. + + tank_type = "tank" + water_capacity = 200 // Decent sized, holds almost 2 full buckets + max_fish = 4 // Room for a few fish + + has_lid = 1 + max_health = 50 // Average strength, will take a couple hits from a toolbox. + cur_health = 50 + shard_count = 2 + + +/obj/machinery/fishtank/wall + name = "wall aquarium" + desc = "This aquarium is massive! It completely occupies the same space as a wall, and looks very sturdy too!" + icon_state = "wall1" + density = 1 + anchored = 1 + throwpass = 0 // This thing is the size of a wall, you can't throw past it. + + tank_type = "wall" + water_capacity = 500 // This thing fills an entire tile, it holds a lot. + max_fish = 10 // Plenty of room for a lot of fish + + has_lid = 1 + max_health = 100 // This thing is a freaking wall, it can handle abuse. + cur_health = 100 + shard_count = 3 + + +////////////////////////////// +// VERBS & PROCS // +////////////////////////////// + +/obj/machinery/fishtank/verb/toggle_lid_verb() + set name = "Toggle Tank Lid" + set category = "Object" + set src in view(1) + toggle_lid(usr) + +/obj/machinery/fishtank/proc/toggle_lid(var/mob/living/user) + lid_switch = !lid_switch + update_icon() + +/obj/machinery/fishtank/verb/toggle_light_verb() + set name = "Toggle Tank Light" + set category = "Object" + set src in view(1) + toggle_light(usr) + +/obj/machinery/fishtank/proc/toggle_light(var/mob/living/user) + light_switch = !light_switch + if(light_switch) + set_light(2,2,"#a0a080") + else + set_light(0) + +////////////////////////////// +// NEW() PROCS // +////////////////////////////// + +/obj/machinery/fishtank/New() + ..() + fish_list = new/list() + egg_list = new/list() + if(!has_lid) //Tank doesn't have a lid/light, remove the verbs for then + verbs -= /obj/machinery/fishtank/verb/toggle_lid_verb + verbs -= /obj/machinery/fishtank/verb/toggle_light_verb + +/obj/machinery/fishtank/tank/New() + ..() + if(prob(5)) //5% chance to get the castle decoration + icon_state = "tank2" + +////////////////////////////// +// ICON PROCS // +////////////////////////////// + +/obj/machinery/fishtank/update_icon() + overlays.Cut() + + //Update Alert Lights + if(has_lid) //Skip the alert lights for aquariums that don't have lids (fishbowls) + if(egg_count > 0) //There is at least 1 egg to harvest + overlays += "over_egg" + if(lid_switch == 1) //Lid is closed, lid status light is red + overlays += "over_lid_1" + else //Lid is open, lid status light is green + overlays += "over_lid_0" + if(food_level > 5) //Food_level is high and isn't a concern yet + overlays += "over_food_0" + else if(food_level > 2) //Food_level is starting to get low, but still above the breeding threshold + overlays += "over_food_1" + else //Food_level is below breeding threshold, or fully consumed, feed the fish! + overlays += "over_food_2" + overlays += "over_leak_[leaking]" //Green if we aren't leaking, light blue and slow blink if minor link, dark blue and rapid flashing for major leak + + //Update water overlay + if(water_level == 0) return //Skip the rest of this if there is no water in the aquarium + var/water_type = "_clean" //Default to clean water + if(filth_level > 5) water_type = "_dirty" //Show dirty water above filth_level 5 (breeding threshold) + if(water_level > (water_capacity * 0.85)) //Show full if the water_level is over 85% of water_capacity + overlays += "over_[tank_type]_full[water_type]" + else if(water_level > (water_capacity * 0.35)) //Show half-full if the water_level is over 35% of water_capacity + overlays += "over_[tank_type]_half[water_type]" + + return + +////////////////////////////// +// PROCESS PROC // +////////////////////////////// + +//Stops atmos from passing wall tanks, since they are effectively full-windows. +/obj/machinery/fishtank/wall/CanAtmosPass(var/turf/T) + return 0 + +/obj/machinery/fishtank/process() + //Start by counting fish in the tank + fish_count = 0 + for(var/fish in fish_list) + if(fish) + fish_count ++ + + //Check if the water level can support the current number of fish + if((fish_count * 50) > water_level) + if(prob(50)) //Not enough water for all the fish, chance to kill one + kill_fish() //Chance passed, kill a random fish + filth_level += 2 //Dead fish raise the filth level quite a bit, reflect this + + //Check filth_level + check_filth_level() + if(filth_level == 10 && fish_count > 0) //This tank is nasty and possibly unsuitable for fish if any are in it + if(prob(30)) //Chance for a fish to die each cycle while the tank is this nasty + kill_fish() //Kill a random fish, don't raise filth level since we're at cap already + + //Check breeding conditions + if(fish_count >=2 && egg_count < max_fish) //Need at least 2 fish to breed, but won't breed if there are as many eggs as max_fish + if(food_level > 2 && filth_level <=5) //Breeding is going to use extra food, and the filth_level shouldn't be too high + if(prob(((fish_count - 2) * 5)+10)) //Chances increase with each additional fish, 10% base + 5% per additional fish + egg_count ++ //A new set of eggs were laid, increase egg_count + egg_list.Add(select_egg_type()) //Add the new egg to the egg_list for storage + food_level -= 2 //Remove extra food for the breeding process + + //Handle standard food and filth adjustments + check_food_level() + var/ate_food = 0 + if(food_level > 0 && prob(50)) //Chance for the fish to eat some food + if(food_level >= (fish_count * 0.1)) //If there is at least enough food to go around, feed all the fish + food_level -= fish_count * 0.1 + else //Use up the last of the food + food_level = 0 + ate_food = 1 + check_food_level() + + if(water_level > 0) //Don't dirty the tank if it has no water + if(filth_level < 10 && prob(25)) //Chance for the tank to get dirtier if the filth_level isn't 10 + if(ate_food && prob(30)) //If they ate this cycle, there is an additional chance they make a bigger mess + filth_level += fish_count * 0.1 + else //If they didn't make the big mess, make a little one + filth_level += 0.1 + check_filth_level() + + //Handle special interactions + handle_special_interactions() + + //Handle water leakage from damage + if(water_level > 0) //Can't leak water if there is no water in the tank + if(leaking == 2) //At or below 25% health, the tank will lose 10 water_level per cycle (major leak) + water_level -= 10 + else if(leaking == 1) //At or below 50% health, the tank will lose 1 water_level per cycle (minor leak) + water_level -= 1 + check_water_level() + +////////////////////////////// +// SUPPORT PROCS // +////////////////////////////// + +/obj/machinery/fishtank/proc/handle_special_interactions() + for(var/fish in fish_list) + switch(fish) + if("catfish") //Catfish have a small chance of cleaning some filth since they are a bottom-feeder + if((filth_level > 0) && prob(25)) + filth_level -= 0.1 + if("feederfish") //Feeder fish have a small chance of sacrificing themselves to produce some food + if(fish_count < 2) //Don't sacrifice the last fish, there's nothing to eat it + continue + if(food_level <= 7.5 && prob(25)) + kill_fish("feederfish") //Kill the fish to reflect it's sacrifice, but don't increase the filth_level + food_level += 1 //The corpse became food for the other fish, ecology at it's finest + check_food_level() + check_filth_level() + check_water_level() + +/obj/machinery/fishtank/proc/check_water_level() + if(water_level < 0) //Water_level cannot be negative, set it to 0 if it is + water_level = 0 + if(water_level > water_capacity) //Water_level cannot exceed capacity, set it to capacity if it does + water_level = water_capacity + update_icon() + +/obj/machinery/fishtank/proc/check_filth_level() + if(filth_level < 0) //Filth_level cannot be negative, set it to 0 if it is + filth_level = 0 + if(filth_level > 10) //Filth_level cannot exceed 10 (cap), set it to 10 if it does + filth_level = 10 + +/obj/machinery/fishtank/proc/check_food_level() + if(food_level < 0) //Food_level cannot be negative, set it to 0 if it is + food_level = 0 + if(food_level > 10) //Food_level cannot exceed 10 (cap), set it to 10 if it does + food_level = 10 + +/obj/machinery/fishtank/proc/check_health() + //Max value check + if(cur_health > max_health) //Cur_health cannot exceed max_health, set it to max_health if it does + cur_health = max_health + //Leaking status check + if(cur_health <= (max_health * 0.25)) //Major leak at or below 25% health (-10 water/cycle) + leaking = 2 + else if(cur_health <= (max_health * 0.5)) //Minor leak at or below 50% health (-1 water/cycle) + leaking = 1 + else //Not leaking above 50% health + leaking = 0 + //Destruction check + if(cur_health <= 0) //The tank is broken, destroy it + destroy() + +/obj/machinery/fishtank/proc/kill_fish(var/type = null) + //Check if we were passed a fish to kill, otherwise kill a random one + if(type) + fish_list.Remove(type) //Kill a fish of the specified type + fish_count -- //Lower fish_count to reflect the death of a fish, so the everything else works fine + else + fish_list.Remove(pick(fish_list)) //Kill a random fish + fish_count -- //Lower fish_count to reflect the death of a fish, so the everything else works fine + +/obj/machinery/fishtank/proc/add_fish(var/type = null) + //Check if we were passed a fish type + if(type) + fish_list.Add("[type]") //Add a fish of the specified type + fish_count ++ //Increase fish_count to reflect the introduction of a fish, so the everything else works fine + //Announce the new fish + src.visible_message("A new [type] hatched in \the [src]!") + //Null type fish are dud eggs, give a message to inform the player + else + usr << "The eggs disolve in the water. They were duds!" + +/obj/machinery/fishtank/proc/select_egg_type() + var/fish = pick(fish_list) //Select a fish from the fish in the tank + if(prob(25)) //25% chance to be a dud (blank) egg + fish = "dud" + var/obj/item/fish_eggs/egg_path = null //Create empty variable to receive the egg_path + egg_path = fish_eggs_list[fish] //Locate the corresponding path from fish_eggs_list that matches the fish + if(!egg_path) //The fish wasn't located in the fish_eggs_list, potentially due to a typo, so return a dud egg + return /obj/item/fish_eggs + else //The fish was located in the fish_eggs_list, so return the proper egg + return egg_path + +/obj/machinery/fishtank/proc/harvest_eggs(var/mob/user) + if(!egg_count) //Can't harvest non-existant eggs + return + + if(egg_count > max_fish) //Make sure the number of eggs doesn't exceed the max_fish for the tank + egg_count = max_fish //If you somehow exceeded the cap, set the egg_count to max, destroy the excess later + + while(egg_count > 0) //Loop until you've harvested all the eggs + var/obj/item/fish_eggs/egg = pick(egg_list) //Select an egg at random + egg = new egg(get_turf(user)) //Spawn the egg at the user's feet + egg_list.Remove(egg) //Remove the egg from the egg_list + egg_count -- //Decrease the egg_count and begin again + + egg_list.Cut() //Destroy any excess eggs, clearing the egg_list + +/obj/machinery/fishtank/proc/destroy(var/deconstruct = 0) + var/turf/T = get_turf(src) //Store the tank's turf for atmos updating after deletion of tank + if(!deconstruct) //Check if we are deconstructing or breaking the tank + var/shards_left = shard_count + while(shards_left > 0) //Produce the appropriate number of glass shards + new /obj/item/weapon/shard(get_turf(src)) + shards_left -- + if(water_level) //Spill any water that was left in the tank when it broke + spill_water() + else //We are deconstructing, make glass sheets instead of shards + var/sheets = shard_count + 1 //Deconstructing it salvages all the glass used to build the tank + new /obj/item/stack/sheet/glass(get_turf(src), sheets) //Produce the appropriate number of glass sheets, in a single stack + qdel(src) //QDel the tank and it's contents + T.air_update_turf(1) //Update the air for the turf, to avoid permanent atmos sealing with wall tanks + +/obj/machinery/fishtank/proc/spill_water() + switch(tank_type) + if("bowl") //Fishbowl: Wets it's own tile + var/turf/T = get_turf(src) + if(!istype(T, /turf/simulated)) return + var/turf/simulated/S = T + S.MakeSlippery() + if("tank") //Fishtank: Wets it's own tile and the 4 adjacent tiles (cardinal directions) + var/turf/ST = get_turf(src) + if(istype(ST, /turf/simulated)) + var/turf/simulated/ST2 = ST + ST2.MakeSlippery() + var/list/L = ST.CardinalTurfs() + for(var/turf/T in L) + if(!istype(T, /turf/simulated)) continue + var/turf/simulated/S = T + S.MakeSlippery() + if("wall") //Wall-tank: Wets it's own tile and the surrounding 8 tiles (3x3 square) + for(var/turf/T in trange(1, src.loc)) + if(!istype(T, /turf/simulated)) continue + var/turf/simulated/S = T + S.MakeSlippery() + +////////////////////////////// Note from FalseIncarnate: +// EXAMINE PROC // This proc is massive, messy, and probably could be handled better. +////////////////////////////// Feel free to try cleaning it up if you think of a better way to do it. + +/obj/machinery/fishtank/examine() + ..() + var/examine_message = "" + //Approximate water level + if(water_level == 0) + examine_message += "\The [src] is empty! " + else if(water_level < water_capacity * 0.1) + examine_message += "\The [src] is nearly empty! " + else if(water_level <= water_capacity * 0.25) + examine_message += "\The [src] is about one-quarter filled. " + else if(water_level <= water_capacity * 0.5) + examine_message += "\The [src] is about half filled. " + else if(water_level <= water_capacity * 0.75) + examine_message += "\The [src] is about three-quarters filled. " + else if(water_level < water_capacity) + examine_message += "\The [src] is nearly full! " + else if (water_level == water_capacity) + examine_message += "\The [src] is full! " + + //Approximate filth level + if(filth_level == 0) + examine_message += "[src] is spotless! " + else if(filth_level <= 2.5) + examine_message += "[src] looks like the glass has been smudged. " + else if(filth_level <= 5) //This is the breeding threshold + examine_message += "[src] has some algae growth in it. " + else if(filth_level <= 7.5) + examine_message += "[src] has a lot of algae growth in it. " + else if(filth_level < 10) + examine_message += "[src] is getting hard to see into! Someone should clean it soon! " + else if(filth_level == 10) + examine_message += "[src] is absolutely disgusting! Someone should clean it NOW! " + + //Approximate food level + if(!fish_count) //Check if there are fish in the tank + if(food_level > 0) //Don't report a tank that has neither fish nor food in it + examine_message += "There's some food in [src], but no fish! " + else //We've got fish, report the food level + if(food_level == 0) + examine_message += "The fish look very hungry! " + else if(food_level < 2) + examine_message += "The fish are nibbling on the last of their food. " + else if(food_level < 10) //Breeding is possible + examine_message += "The fish seem happy! " + else if(food_level == 10) + examine_message += "There is a solid layer of fish food at the top. " + + //Report the number of harvestable eggs + if(egg_count) //Don't bother if there isn't any eggs + examine_message += "There are [egg_count] eggs able to be harvested! " + + //Report the number and types of live fish if there is water in the tank + if(fish_count == 0) + examine_message += "\The [src] doesn't contain any live fish. " + else + //Build a message reporting the types of fish + var/fish_num = fish_count + var/message = "You spot " + while(fish_num > 0) + if(fish_count > 1 && fish_num == 1) //If there were at least 2 fish, and this is the last one, add "and" to the message + message += "and " + message += "a [fish_list[fish_num]]" + fish_num -- + if(fish_num > 0) //There's more fish, add a comma to the message + message +=", " + message +="." //No more fish, end the message with a period + //Display the number of fish and previously constructed message + examine_message += "\The [src] contains [fish_count] live fish. [message] " + + //Report lid state for tanks and wall-tanks + if(has_lid) //Only report if the tank actually has a lid + //Report lid state + if(lid_switch) + examine_message += "The lid is closed. " + else + examine_message += "The lid is open. " + + //Report if the tank is leaking/cracked + if(water_level > 0) //Tank has water, so it's actually leaking + if(leaking == 1) examine_message += "\The [src] is leaking." + if(leaking == 2) examine_message += "\The [src] is leaking profusely!" + else //No water, report the cracks instead + if(leaking == 1) examine_message += "\The [src] is cracked." + if(leaking == 2) examine_message += "\The [src] is nearly shattered!" + + + //Finally, report the full examine_message constructed from the above reports + usr << "[examine_message]" + +////////////////////////////// +// ATACK PROCS // +////////////////////////////// + +/obj/machinery/fishtank/attack_animal(mob/living/simple_animal/M as mob) + if(istype(M, /mob/living/simple_animal/pet/cat)) + if(M.a_intent == "help") //Cats can try to fish in open tanks on help intent + if(lid_switch) //Can't fish in a closed tank. Fishbowls are ALWAYS open. + M.visible_message("[M.name] stares at into \the [src] while sitting perfectly still.", "The lid is closed, so you stare into \the [src] intently.") + else + if(fish_count) //Tank must actually have fish to try catching one + M.visible_message("[M.name] leaps up onto \the[src] and attempts to fish through the opening!", "You jump up onto \the [src] and begin fishing through the opening!") + spawn(10) + if(water_level && prob(45)) //If there is water, there is a chance the cat will slip, Syndicat will spark like E-N when this happens + M.visible_message("[M.name] slipped and got soaked!", "You slipped and got soaked!") + if(istype(M, /mob/living/simple_animal/pet/cat/Syndi)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + else //No water or didn't slip, get that fish! + M.visible_message("[M.name] caught and devoured a live fish!", "You catch and devour a live fish, yum!") + kill_fish() //Kill a random fish + M.health = M.maxHealth //Eating fish heals the predator + else + usr << "There are no fish in [src]!" + else + attack_generic(M, M.harm_intent_damage) + else if(istype(M, /mob/living/simple_animal/hostile/bear)) + if(M.a_intent == "help") //Bears can try to fish in open tanks on help intent + if(lid_switch) //Can't fish in a closed tank. Fishbowls are ALWAYS open. + M.visible_message("[M.name] scrapes it's claws along \the [src]'s lid.", "The lid is closed, so you scrape your claws against \the [src]'s lid.") + else + if(fish_count) //Tank must actually have fish to try catching one + M.visible_message("[M.name] reaches into \the[src] and attempts to fish through the opening!", "You reach into \the [src] and begin fishing through the opening!") + spawn(5) + if(water_level && prob(5)) //Bears are good at catching fish, only a 5% chance to fail + M.visible_message("[M.name] swipes at the water!", "You just barely missed that fish!") + else //No water or didn't slip, get that fish! + M.visible_message("[M.name] caught and devoured a live fish!", "You catch and devour a live fish, yum!") + kill_fish() //Kill a random fish + M.health = M.maxHealth //Eating fish heals the predator + else + usr << "There are no fish in [src]!" + else + attack_generic(M, M.harm_intent_damage) + else + if(M.melee_damage_upper > 0) //If the simple_animal has a melee_damage_upper defined, use that for the damage + attack_generic(M, M.melee_damage_upper) + else if(M.a_intent == "harm") //Let any simple_animal try to break tanks when on harm intent + if(M.harm_intent_damage <= 0) return //If it doesn't do damage, don't bother with the attack + attack_generic(M, M.harm_intent_damage) + check_health() + +/obj/machinery/fishtank/attack_alien(mob/living/user as mob) + if(islarva(user)) return + attack_generic(user, 15) + +/obj/machinery/fishtank/attack_slime(mob/living/user as mob) + var/mob/living/carbon/slime/S = user + if (!S.is_adult) + return + attack_generic(user, rand(10, 15)) + +/obj/machinery/fishtank/attack_hand(mob/user as mob) + if(HULK in user.mutations) + user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) + user.visible_message("[user] smashes through [src]!") + destroy() + else if (usr.a_intent == "harm") + user.changeNext_move(CLICK_CD_MELEE) + playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1) + usr.visible_message("\red [usr.name] bangs against the [src.name]!", \ + "\red You bang against the [src.name]!", \ + "You hear a banging sound.") + else + user.changeNext_move(CLICK_CD_MELEE) + playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1) + usr.visible_message("[usr.name] taps on the [src.name].", \ + "You tap on the [src.name].", \ + "You hear a knocking sound.") + return + +/obj/machinery/fishtank/proc/hit(var/damage, var/sound_effect = 1) + cur_health = max(0, cur_health - damage) + if(sound_effect) + playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) + check_health() + +/obj/machinery/fishtank/proc/attack_generic(mob/living/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + cur_health -= damage + if(cur_health <= 0) + user.visible_message("[user] smashes through \the [src]!") + destroy() + else //for nicer text~ + user.visible_message("[user] smashes into \the [src]!") + playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) + check_health() + +/obj/machinery/fishtank/attackby(var/obj/item/O, var/mob/user as mob) + //Welders repair damaged tanks on help intent, damage on all others + if(istype(O, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = O + if(user.a_intent == "help") + if(W.isOn()) + if(cur_health < max_health) + usr << "You repair some of the cracks on \the [src]." + cur_health += 20 + check_health() + else + usr << "There is no damage to fix!" + else + if(cur_health < max_health) + usr << "[W.name] must on to repair this damage." + else + user.changeNext_move(CLICK_CD_MELEE) + hit(W.force) + return + //Open reagent containers add and remove water + if(O.is_open_container()) + if(istype(O, /obj/item/weapon/reagent_containers/glass)) + if(lid_switch) + usr << "Open the lid on [src] first!" + return + var/obj/item/weapon/reagent_containers/glass/C = O + //Containers with any reagents will get dumped in + if(C.reagents.total_volume) + var/water_value = 0 + water_value += C.reagents.get_reagent_amount("water") //Water is full value + water_value += C.reagents.get_reagent_amount("holywater") //Holywater is full value + water_value += C.reagents.get_reagent_amount("tonic") * 0.25 //Tonic water is 25% value + water_value += C.reagents.get_reagent_amount("sodawater") * 0.50 //Sodawater is 50% value + water_value += C.reagents.get_reagent_amount("fishwater") * 0.75 //Fishwater is 75% value, to account for the fish poo + water_value += C.reagents.get_reagent_amount("ice") * 0.80 //Ice is 80% value + var/message = "" + if(!water_value) //The container has no water value, clear everything in it + message = "The filtration process removes everything, leaving the water level unchanged." + C.reagents.clear_reagents() + else + if(water_level == water_capacity) + usr << "[src] is already full!" + return + else + message = "The filtration process purifies the water, raising the water level." + water_level += water_value + if(water_level == water_capacity) + message += " You filled \the [src] to the brim!" + if(water_level > water_capacity) + message += " You overfilled \the [src] and some water runs down the side, wasted." + C.reagents.clear_reagents() + check_water_level() + user.visible_message("[user.name] pours the contents of [C.name] into \the [src].", "[message]") + return + //Empty containers will scoop out water, filling the container as much as possible from the water_level + else + if(water_level == 0) + usr << "[src] is empty!" + else + if(water_level >= C.volume) //Enough to fill the container completely + C.reagents.add_reagent("fishwater", C.volume) + water_level -= C.volume + user.visible_message("[user.name] scoops out some water from \the [src].", "You completely fill [C.name] from \the [src].") + else //Fill the container as much as possible with the water_level + C.reagents.add_reagent("fishwater", water_level) + water_level = 0 + user.visible_message("[user.name] scoops out some water from \the [src].", "You fill [C.name] with the last of the water in \the [src].") + check_water_level() + return + //Wrenches can deconstruct empty tanks, but not tanks with any water. Kills any fish left inside and destroys any unharvested eggs in the process + if(istype(O, /obj/item/weapon/wrench)) + if(water_level == 0) + usr << "\blue Now disassembling [src]" + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user,50)) + destroy(1) + else + usr << "[src] must be empty before you disassemble it!" + return + //Fish eggs + else if(istype(O, /obj/item/fish_eggs)) + var/obj/item/fish_eggs/egg = O + //Don't add eggs if there is no water (they kinda need that to live) + if(water_level == 0) + usr << "[src] has no water; [egg.name] won't hatch without water!" + else + //Don't add eggs if the tank already has the max number of fish + if(fish_count >= max_fish) + usr << "[src] can't hold any more fish." + else + add_fish(egg.fish_type) + qdel(egg) + return + //Fish food + else if(istype(O, /obj/item/weapon/fishfood)) + //Only add food if there is water and it isn't already full of food + if(water_level) + if(food_level < 10) + if(fish_count == 0) + user.visible_message("[user.name] shakes some fish food into the empty [src]... How sad.", "You shake some fish food into the empty [src]... If only it had fish.") + else + user.visible_message("[user.name] feeds the fish in \the [src]. The fish look excited!", "You feed the fish in \the [src]. They look excited!") + food_level += 10 + else + usr << "[src] already has plenty of food in it. You decide to not add more." + else + usr << "[src] doesn't have any water in it. You should fill it with water first." + check_food_level() + return + //Fish egg scoop + else if(istype(O, /obj/item/weapon/egg_scoop)) + if(egg_count) + user.visible_message("[user.name] harvests some fish eggs from \the [src].", "You scoop the fish eggs out of \the [src].") + harvest_eggs(user) + else + user.visible_message("[user.name] fails to harvest any fish eggs from \the [src].", "There are no fish eggs in \the [src] to scoop out.") + return + //Fish net + if(istype(O, /obj/item/weapon/fish_net)) + if(fish_count > 0) + var/caught_fish = pick(fish_list) + usr << "You catch and remove a [caught_fish] from \the [src]." + kill_fish(caught_fish) + //TODO: Fish object spawning, need to get sprites before I can code the fish objects + else + usr << "There are no fish in \the [src] to catch!" + return + //Tank brush + if(istype(O, /obj/item/weapon/tank_brush)) + if(filth_level == 0) + usr << "[src] is already spotless!" + else + filth_level = 0 + user.visible_message("[user.name] scrubs the inside of \the [src], cleaning the filth.", "You scrub the inside of \the [src], cleaning the filth.") + else if(O && O.force) + user.visible_message("\The [src] has been attacked by [user.name] with \the [O]!") + hit(O.force) + return diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index da6cf21d909..b142a1fa9b1 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -71,7 +71,8 @@ "adminordrazine" = 1, "eznutrient" = 1, "robustharvest" = 1, - "left4zed" = 1 + "left4zed" = 1, + "fishwater" = 0.75, ) var/global/list/weedkiller_reagents = list( "fluorine" = -4, @@ -98,6 +99,7 @@ "phosphorus" = -0.5, "water" = 1, "sodawater" = 1, + "fishwater" = 1, ) // Beneficial reagents also have values for modifying yield_mod and mut_mod (in that order). diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 61f1db03b17..ebb3a0d2dcf 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -205,6 +205,24 @@ datum reagent_state = LIQUID color = "#B97A57" + fishwater + name = "Fish Water" + id = "fishwater" + description = "Smelly water from a fish tank. Gross!" + reagent_state = LIQUID + color = "#757547" + + on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M << "Oh god, why did you drink that?" + if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version) + if(prob(50)) // 50/50 chance of green vomit vs normal vomit + M.fakevomit(1) + else + M.fakevomit(0) + ..() + return + water name = "Water" id = "water" diff --git a/icons/obj/fish_items.dmi b/icons/obj/fish_items.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f21be0bb9e697f98f57bd4282a3d9de305a23626 GIT binary patch literal 6806 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 A&Hw-a literal 0 HcmV?d00001 diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 6eec85eca7167b9af373c30d26c6a79b7646a329..0bd2935fe91daac1168d51a6c21c002428ecd493 100644 GIT binary patch delta 8887 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 Ca@=wN diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 3368ccb533164703a1ac8f6241f46f6bc4a7a97c..718cdf5ebde9156a25d35c06c7a0f299063193b9 100755 GIT binary patch delta 3704 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 delta 980 zcmV;_11tQP3djkt0|9@SdQ@0+L}hbha%pgMX>V=-0C=2JR&a84_w-Y6@%7{?OD!tS z%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5sVFrqGbbm$I4?0dTZxM^ zC9|j)C~U~ZnO2mTn+joLD9+8#P9;`xQht6F(TbDva}tSFo0Wf0g0aOVrMbi_&&e;z zNG-;tTv@@@&jlRV0Lqwd=jUeamjD0*3`s;mRA_Kd z5ol=zeT({_yuFbl zzFMW+^*lmIIro3L4C6n8Ist8!apHNd>ylC)cDa1Szii}iLH*)CK%5ZwD>HC^zZ#3CTUl9IS^YDr`^tBa zl=0hO8E}6^<@r8NXq?1|J6ql#oSdArozn5cTv1fUM`Jn~kCLJRu0I$Q4N$&^`lqJ` zp2Xw0kUgCuhx&c<{UC^nON4ncq9q1`5Bk)6KM0~zWB!k6Y~+1|7h)qe#YY+yfl%aSt#*JHOBwK-Fkt5UJtzax#CJTnY|7(1hO_LDh5(`Fa=x z;sNM^T3|Yx&93AOXsq%yO{07bdhCK;YYpbXT;_kJ2i)KaBsn?Te&R{;A z2ZkQ(&S0#cK`Li(eRHe3AMhm-`Cjb-{~abE?+?jHcR%0;g5TWg^ZhW8`5t$JteO{FdkYmsd5v))LS6 z>+F5~o~`qI-*kPE@7G)<`M$P6RlcunVDr7z|E!+~9*1+8q1&hc0000