diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 3a678eb865f..5c980819262 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -82,6 +82,7 @@ CREATE TABLE `characters` ( `speciesprefs` int(1) NOT NULL, `socks` mediumtext NOT NULL, `body_accessory` mediumtext NOT NULL, + `gear` mediumtext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=18747 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index dd633bbf876..c0ae0cbf523 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -82,6 +82,7 @@ CREATE TABLE `SS13_characters` ( `speciesprefs` int(1) NOT NULL, `socks` mediumtext NOT NULL, `body_accessory` mediumtext NOT NULL, + `gear` mediumtext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=18747 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index bb50f35b41d..3be13fd3d97 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -111,9 +111,9 @@ "acg" = (/turf/simulated/wall/r_wall,/area/security/prison) "ach" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison) "aci" = (/obj/machinery/seed_extractor,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) -"acj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/flora/kirbyplants{icon_state = "applebush"; layer = 4.1; tag = "icon-applebush"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) +"acj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "applebush"; layer = 4.1; tag = "icon-applebush"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "ack" = (/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/security/prison) -"acl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/flora/kirbyplants{layer = 4.1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) +"acl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/twohanded/required/kirbyplants{layer = 4.1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acm" = (/obj/machinery/biogenerator,/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "Prison Hydroponics"; network = list("SS13","Prison")},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acn" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison) "aco" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/item/seeds/ambrosiavulgarisseed,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) @@ -150,7 +150,7 @@ "acT" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{tag = "icon-warndark (NORTHEAST)"; icon_state = "warndark"; dir = 5},/area/prison/solitary{name = "Prisoner Education Chamber"}) "acU" = (/obj/item/weapon/soap/nanotrasen,/obj/item/weapon/bikehorn/rubberducky,/obj/machinery/shower{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/prison) "acV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/prison) -"acW" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/flora/kirbyplants{tag = "icon-plant-13"; icon_state = "plant-13"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) +"acW" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/twohanded/required/kirbyplants{tag = "icon-plant-13"; icon_state = "plant-13"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acX" = (/obj/structure/table,/obj/item/weapon/folder,/obj/item/weapon/paper/hydroponics,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acY" = (/obj/structure/table,/obj/machinery/computer/library/public,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acZ" = (/obj/machinery/computer/arcade,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) @@ -404,7 +404,7 @@ "ahN" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/sign/pods{pixel_y = 30},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) "ahO" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/flasher_button{id = "insaneflash"; pixel_y = 26},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) "ahP" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) -"ahQ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/flora/kirbyplants{icon_state = "plant-16"; layer = 4.1; tag = "icon-plant-16"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'WARNING: Criminally Insane Inmates', describing the possible hazards of those contained within."; name = "WARNING: Criminally Insane Inmates"; pixel_y = 32},/turf/simulated/floor/plasteel,/area/security/prison) +"ahQ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-16"; layer = 4.1; tag = "icon-plant-16"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'WARNING: Criminally Insane Inmates', describing the possible hazards of those contained within."; name = "WARNING: Criminally Insane Inmates"; pixel_y = 32},/turf/simulated/floor/plasteel,/area/security/prison) "ahR" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison) "ahS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/light/small{dir = 1},/obj/item/weapon/storage/secure/safe{name = "armory safe A"; pixel_x = 6; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "ahT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) @@ -435,7 +435,7 @@ "ais" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ait" = (/obj/item/weapon/skeleton/r_arm,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aiu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) -"aiv" = (/obj/structure/flora/kirbyplants{icon_state = "applebush"; layer = 4.1; tag = "icon-applebush"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/security/prison) +"aiv" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "applebush"; layer = 4.1; tag = "icon-applebush"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/security/prison) "aiw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/prison) "aix" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/prison) "aiy" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/prison) @@ -1050,7 +1050,7 @@ "auj" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/camera/autoname{dir = 4; network = list("SS13")},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "auk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aul" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aum" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/Doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) +"aum" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) "aun" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel,/area/security/podbay) "auo" = (/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/maintenance/starboard) "aup" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) @@ -1326,7 +1326,7 @@ "azz" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "azA" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/starboard) "azB" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/starboard) -"azC" = (/obj/structure/flora/kirbyplants,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) +"azC" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "azD" = (/obj/structure/spacepoddoor,/obj/machinery/door/poddoor/multi_tile/three_tile_ver{id_tag = "mechpodbay"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/mechanic_workshop) "azE" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "azF" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/maintenance/starboard) @@ -1648,7 +1648,7 @@ "aFJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/crew_quarters/sleep) "aFK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/sign/pods{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/sleep) "aFL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboard) -"aFM" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/flora/kirbyplants{icon_state = "plant-20"; layer = 4.1; pixel_y = 3; tag = "icon-plant-20"},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) +"aFM" = (/obj/effect/decal/cleanable/cobweb,/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-20"; layer = 4.1; pixel_y = 3; tag = "icon-plant-20"},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) "aFN" = (/obj/item/clothing/head/helmet/space/rig/engineering,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) "aFO" = (/obj/structure/dispenser,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) "aFP" = (/obj/machinery/camera{c_tag = "Engineering - Storage"; dir = 2; network = list("SS13")},/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) @@ -1955,9 +1955,9 @@ "aLE" = (/obj/structure/table,/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 21},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plasteel,/area/construction) "aLF" = (/obj/structure/closet/toolcloset,/obj/machinery/light_construct{dir = 1},/turf/simulated/floor/plasteel,/area/construction) "aLG" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/plasteel,/area/construction) -"aLH" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/supply) +"aLH" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/shuttle/supply) "aLI" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/supply) -"aLJ" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/supply) +"aLJ" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/shuttle/supply) "aLK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/quartermaster/miningdock{name = "\improper Mining Office"}) "aLL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/mining{name = "Mining Office"; req_access_txt = "48"},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock{name = "\improper Mining Office"}) "aLM" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/quartermaster/storage) @@ -2058,7 +2058,7 @@ "aND" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/machinery/requests_console{department = "Law office"; pixel_x = 0; pixel_y = 32},/obj/machinery/newscaster{pixel_x = -31; pixel_y = 0},/turf/simulated/floor/wood,/area/lawoffice) "aNE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aNF" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/briefcase{pixel_x = -3; pixel_y = 2},/obj/item/weapon/storage/secure/briefcase{pixel_x = 2; pixel_y = -2},/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/wood,/area/lawoffice) -"aNG" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "Law Office APC"; pixel_y = 24},/obj/structure/flora/kirbyplants{icon_state = "plant-21"; layer = 4.1; tag = "icon-plant-21"},/turf/simulated/floor/wood,/area/lawoffice) +"aNG" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "Law Office APC"; pixel_y = 24},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1; tag = "icon-plant-21"},/turf/simulated/floor/wood,/area/lawoffice) "aNH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/lawoffice) "aNI" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/fore) "aNJ" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -32},/obj/effect/landmark{name = "blobstart"},/obj/machinery/door_control{id = "Toilet1"; name = "Lock Control"; normaldoorcontrol = 1; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) @@ -2191,7 +2191,7 @@ "aQg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "aQh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/porta_turret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "aQi" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) -"aQj" = (/obj/structure/sign/kiddieplaque{pixel_y = 32},/obj/structure/table,/obj/machinery/camera/motion{c_tag = "AI Upload Chamber - Fore"; network = list("SS13","RD","AIUpload")},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) +"aQj" = (/obj/structure/sign/kiddieplaque{pixel_y = 32},/obj/structure/table,/obj/machinery/camera/motion{c_tag = "AI Upload Chamber - Fore"; network = list("SS13","RD","AIUpload")},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "aQk" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "aQl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/porta_turret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "aQm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) @@ -2475,7 +2475,7 @@ "aVE" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) "aVF" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) "aVG" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) -"aVH" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/structure/flora/kirbyplants{icon_state = "plant-03"; layer = 4.1; tag = "icon-plant-03"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/locker) +"aVH" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-03"; layer = 4.1; tag = "icon-plant-03"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/locker) "aVI" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/locker) "aVJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/locker) "aVK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/locker) @@ -2665,10 +2665,10 @@ "aZm" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 5; health = 120; icon_state = "twindow"; reinf = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals"}) "aZn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Arrivals Expansion Area"; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals"}) "aZo" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"aZp" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/supply) +"aZp" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/supply) "aZq" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/shuttle/supply) "aZr" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/shuttle/supply) -"aZs" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/supply) +"aZs" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/shuttle/supply) "aZt" = (/turf/simulated/wall,/area/quartermaster/storage) "aZu" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Cargo Bay - Port"; dir = 4; network = list("SS13")},/obj/machinery/conveyor{dir = 2; id = "QMLoad"; movedir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage) "aZv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/quartermaster/storage) @@ -2728,7 +2728,7 @@ "bax" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/engine/engineering) "bay" = (/obj/machinery/camera/emp_proof{c_tag = "Aft Arm - Far"; dir = 8; network = list("Singulo")},/turf/simulated/floor/plating/airless,/area/engine/engineering) "baz" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) -"baA" = (/obj/structure/flora/kirbyplants{icon_state = "plant-13"; layer = 4.1; tag = "icon-plant-13"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) +"baA" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-13"; layer = 4.1; tag = "icon-plant-13"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "baB" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "baC" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "baD" = (/obj/structure/stool/bed/chair,/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) @@ -2766,7 +2766,7 @@ "bbj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload_foyer) "bbk" = (/obj/machinery/door/airlock/highsecurity{name = "Secure Network Access"; req_access_txt = "19"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/turret_protected/ai_upload_foyer) "bbl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload_foyer) -"bbm" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/flora/kirbyplants{icon_state = "applebush"; layer = 4.1; tag = "icon-applebush"},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 9},/area/hallway/primary/central) +"bbm" = (/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "applebush"; layer = 4.1; tag = "icon-applebush"},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 9},/area/hallway/primary/central) "bbn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/hallway/primary/central) "bbo" = (/obj/structure/sign/double/map/left{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-left-MS"; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/hallway/primary/central) "bbp" = (/obj/structure/sign/double/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = 32},/obj/machinery/camera{c_tag = "Central Primary Hallway - Fore"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/central) @@ -2776,7 +2776,7 @@ "bbt" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/central) "bbu" = (/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/hallway/primary/central) "bbv" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/hallway/primary/central) -"bbw" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/flora/kirbyplants{icon_state = "plant-16"; layer = 4.1; tag = "icon-plant-16"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "neutral"},/area/hallway/primary/central) +"bbw" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-16"; layer = 4.1; tag = "icon-plant-16"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "neutral"},/area/hallway/primary/central) "bbx" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Courtroom"; opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom) "bby" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Crew Quarters Access"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/crew_quarters/locker) "bbz" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Crew Quarters Access"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/crew_quarters/locker) @@ -2904,7 +2904,7 @@ "bdR" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals"}) "bdS" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bdT" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) -"bdU" = (/obj/structure/flora/kirbyplants{icon_state = "plant-05"; layer = 4.1; tag = "icon-plant-05"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) +"bdU" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-05"; layer = 4.1; tag = "icon-plant-05"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bdV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/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/plasteel{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bdW" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/entry{name = "Arrivals"}) "bdX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) @@ -3059,7 +3059,7 @@ "bgQ" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "bgR" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/wall/r_wall,/area/turret_protected/ai) "bgS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"bgT" = (/obj/structure/table,/obj/structure/flora/kirbyplants{icon_state = "plant-09"; name = "Photosynthetic Potted plant"; pixel_y = 10; tag = "icon-plant-09"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"bgT" = (/obj/structure/table,/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-09"; name = "Photosynthetic Potted plant"; pixel_y = 10; tag = "icon-plant-09"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "bgU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) "bgV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bgW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) @@ -3131,12 +3131,12 @@ "bik" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/machinery/door/window{dir = 8; icon_state = "left"; name = "Tertiary AI Core Access"; pixel_x = 0; req_access_txt = "16"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bil" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "bim" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "MiniSat Exterior Starboard-Fore"; dir = 4; network = list("MiniSat")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction/hallway{name = "\improper MiniSat Exterior"}) -"bin" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/shuttle/arrival/station) +"bin" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/shuttle/arrival/station) "bio" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/arrival/station) "bip" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "biq" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/arrival/station) "bir" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/shuttle/arrival/station) -"bis" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/shuttle/arrival/station) +"bis" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/shuttle/arrival/station) "bit" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) "biu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/security/checkpoint2{name = "Customs"}) "biv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11},/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint2{name = "Customs"}) @@ -3600,7 +3600,7 @@ "brl" = (/obj/machinery/power/port_gen/pacman,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 31},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/tcomeast{name = "\improper MiniSat East Wing"}) "brm" = (/obj/machinery/computer/security/telescreen{dir = 2; name = "MiniSat Camera Monitor"; network = list("MiniSat","tcomm"); pixel_x = 0; pixel_y = 29},/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/tcomeast{name = "\improper MiniSat East Wing"}) "brn" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1; name = "Auxiliary MiniSat Distribution Port"},/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 31},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/tcomeast{name = "\improper MiniSat East Wing"}) -"bro" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/shuttle/arrival/station) +"bro" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/arrival/station) "brp" = (/obj/structure/closet/emcloset,/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "brq" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "brr" = (/obj/structure/sign/double/map/left{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-left-MS"; pixel_y = -32},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) @@ -3699,7 +3699,7 @@ "btg" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/tcomeast{name = "\improper MiniSat East Wing"}) "bth" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/shuttle/plating,/area/shuttle/arrival/station) "bti" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/shuttle/arrival/station) -"btj" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/shuttle/arrival/station) +"btj" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/shuttle/arrival/station) "btk" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/camera{c_tag = "Arrivals - Station Entrance"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "btl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel,/area/hallway/secondary/entry{name = "Arrivals"}) "btm" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) @@ -4026,10 +4026,10 @@ "bzv" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bzw" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bzx" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) -"bzy" = (/obj/structure/flora/kirbyplants{icon_state = "plant-18"; layer = 4.1; tag = "icon-plant-18"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) +"bzy" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-18"; layer = 4.1; tag = "icon-plant-18"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bzz" = (/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/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bzA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/hallway/secondary/entry{name = "Arrivals"}) -"bzB" = (/obj/structure/flora/kirbyplants{icon_state = "plant-10"; layer = 4.1; tag = "icon-plant-10"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/hallway/primary/port) +"bzB" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-10"; layer = 4.1; tag = "icon-plant-10"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/hallway/primary/port) "bzC" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/hallway/primary/port) "bzD" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/camera{c_tag = "Port Primary Hallway - Port"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hallway/primary/port) "bzE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/hallway/primary/port) @@ -4121,7 +4121,7 @@ "bBm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/item/clothing/head/welding,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/tcomeast{name = "\improper MiniSat East Wing"}) "bBn" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/emergency{pixel_x = 3; pixel_y = -3},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/tcomeast{name = "\improper MiniSat East Wing"}) "bBo" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/tcomeast{name = "\improper MiniSat East Wing"}) -"bBp" = (/obj/structure/flora/kirbyplants{icon_state = "plant-20"; layer = 4.1; tag = "icon-plant-20"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) +"bBp" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-20"; layer = 4.1; tag = "icon-plant-20"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bBq" = (/obj/structure/stool/bed/chair,/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/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bBr" = (/obj/structure/stool/bed/chair,/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bBs" = (/turf/simulated/floor/plasteel{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/hallway/secondary/entry{name = "Arrivals"}) @@ -4166,7 +4166,7 @@ "bCf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bCg" = (/obj/machinery/hologram/holopad,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bCh" = (/obj/machinery/camera{c_tag = "Council Chamber"; dir = 2; network = list("SS13")},/obj/machinery/light{dir = 1},/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) -"bCi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/computer/account_database,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 250; oxygen = 0; temperature = 0},/area/bridge) +"bCi" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) "bCj" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/light_switch{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bCk" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "bCl" = (/obj/item/weapon/hand_labeler,/obj/item/stack/packageWrap,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/woodentable,/obj/item/device/eftpos,/turf/simulated/floor/wood,/area/crew_quarters/heads) @@ -4441,7 +4441,7 @@ "bHu" = (/obj/structure/stool/bed/chair/comfy/black,/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/wood,/area/library) "bHv" = (/obj/machinery/vending/coffee,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/library) "bHw" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/library) -"bHx" = (/obj/structure/flora/kirbyplants{tag = "icon-plant-22"; icon_state = "plant-22"},/turf/simulated/floor/wood,/area/library) +"bHx" = (/obj/item/weapon/twohanded/required/kirbyplants{tag = "icon-plant-22"; icon_state = "plant-22"},/turf/simulated/floor/wood,/area/library) "bHy" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bHz" = (/obj/machinery/door/poddoor/shutters/preopen{id_tag = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "loadingarea"; tag = "loading"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bHA" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge/meeting_room{name = "\improper Command Hallway"}) @@ -4496,7 +4496,7 @@ "bIx" = (/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "bIy" = (/obj/machinery/microwave{pixel_x = 0; pixel_y = 4},/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/tcommsat/computer{name = "\improper Telecoms Control Room"}) "bIz" = (/obj/machinery/light/small,/obj/item/weapon/storage/box/donkpockets,/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/tcommsat/computer{name = "\improper Telecoms Control Room"}) -"bIA" = (/obj/structure/flora/kirbyplants{tag = "icon-plant-21"; icon_state = "plant-21"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/tcommsat/computer{name = "\improper Telecoms Control Room"}) +"bIA" = (/obj/item/weapon/twohanded/required/kirbyplants{tag = "icon-plant-21"; icon_state = "plant-21"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/tcommsat/computer{name = "\improper Telecoms Control Room"}) "bIB" = (/obj/structure/filingcabinet{pixel_x = 3},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/tcommsat/computer{name = "\improper Telecoms Control Room"}) "bIC" = (/obj/machinery/light/small,/obj/item/weapon/folder,/obj/item/weapon/folder,/obj/machinery/camera{c_tag = "Telecoms - Control Room"; dir = 1; network = list("SS13","tcomm")},/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/tcommsat/computer{name = "\improper Telecoms Control Room"}) "bID" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Telecoms Admin"; departmentType = 5; name = "Telecoms RC"; pixel_x = 0; pixel_y = -30},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/paper_bin{pixel_x = -1; pixel_y = 6},/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/tcommsat/computer{name = "\improper Telecoms Control Room"}) @@ -4814,12 +4814,12 @@ "bOD" = (/obj/item/stack/sheet/rglass{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/device/flashlight,/obj/structure/closet/crate,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/teleporter{name = "\improper Teleporter Room"}) "bOE" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/teleporter{name = "\improper Teleporter Room"}) "bOF" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/crate,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/teleporter{name = "\improper Teleporter Room"}) -"bOG" = (/obj/machinery/light{dir = 1},/obj/structure/flora/kirbyplants,/turf/simulated/floor/wood,/area/blueshield) +"bOG" = (/obj/machinery/light{dir = 1},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/wood,/area/blueshield) "bOH" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/wood,/area/blueshield) "bOI" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/blueshield) "bOJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/wood,/area/blueshield) "bOK" = (/obj/machinery/light{dir = 1},/obj/machinery/power/apc{dir = 4; name = "Blueshield Office APC"; pixel_x = 24; pixel_y = -3},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/blueshield) -"bOL" = (/obj/machinery/light{dir = 1},/obj/structure/flora/kirbyplants,/turf/simulated/floor/wood,/area/ntrep) +"bOL" = (/obj/machinery/light{dir = 1},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/wood,/area/ntrep) "bOM" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/wood,/area/ntrep) "bON" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/ntrep) "bOO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/wood,/area/ntrep) @@ -4958,7 +4958,7 @@ "bRr" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "bRs" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/telecomms/bus/preset_four,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "bRt" = (/obj/machinery/blackbox_recorder,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) -"bRu" = (/obj/structure/flora/kirbyplants{icon_state = "plant-06"; level = 4.1; tag = "icon-plant-06"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) +"bRu" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-06"; level = 4.1; tag = "icon-plant-06"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bRv" = (/obj/structure/stool/bed/chair,/obj/effect/landmark/start{name = "Civilian"},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bRw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bRx" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) @@ -5049,12 +5049,12 @@ "bTe" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "MiniSat Exterior Aft-Starboard"; dir = 4; network = list("MiniSat")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction/hallway{name = "\improper MiniSat Exterior"}) "bTf" = (/obj/structure/table/reinforced,/obj/item/device/flashlight,/obj/item/device/radio,/obj/machinery/camera{c_tag = "Engineering Equipment East"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "bTg" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) -"bTh" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bTh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/computer/account_database,/turf/simulated/floor/bluegrid,/area/bridge) "bTi" = (/obj/item/stack/sheet/cardboard,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/maintenance/starboard) "bTj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "bTk" = (/obj/machinery/light_switch{name = "light switch "; dir = 2; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "bTl" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) -"bTm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/sign/double/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = -32},/obj/structure/flora/kirbyplants{icon_state = "plant-03"; layer = 4.1; tag = "icon-plant-03"},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 6},/area/hallway/secondary/entry{name = "Arrivals"}) +"bTm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/sign/double/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = -32},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-03"; layer = 4.1; tag = "icon-plant-03"},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 6},/area/hallway/secondary/entry{name = "Arrivals"}) "bTn" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor/wood,/area/security/vacantoffice) "bTo" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor/wood,/area/security/vacantoffice) "bTp" = (/obj/structure/mirror{pixel_x = -28},/obj/item/weapon/lipstick/black,/obj/item/weapon/lipstick/jade{pixel_x = 2; pixel_y = 2},/obj/item/weapon/lipstick/purple{pixel_x = -2; pixel_y = -2},/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -5609,7 +5609,7 @@ "cdS" = (/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "cdT" = (/turf/simulated/wall,/area/medical/medbay2{name = "Medbay Storage"}) "cdU" = (/turf/simulated/wall,/area/security/checkpoint/medical) -"cdV" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/structure/flora/kirbyplants{icon_state = "applebush"; layer = 4.1; tag = "icon-applebush"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central) +"cdV" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "applebush"; layer = 4.1; tag = "icon-applebush"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central) "cdW" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central) "cdX" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central) "cdY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central) @@ -5622,7 +5622,7 @@ "cef" = (/obj/machinery/camera{c_tag = "Central Primary Hallway - Aft-Starboard"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "purplecorner"},/area/hallway/primary/central) "ceg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; icon_state = "purplecorner"},/area/hallway/primary/central) "ceh" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "purplecorner"},/area/hallway/primary/central) -"cei" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/flora/kirbyplants{icon_state = "plant-10"; layer = 4.1; tag = "icon-plant-10"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "purplecorner"},/area/hallway/primary/central) +"cei" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-10"; layer = 4.1; tag = "icon-plant-10"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "purplecorner"},/area/hallway/primary/central) "cej" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/obj/machinery/newscaster{pixel_y = -29},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/hallway/primary/central) "cek" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;7;35;8;47"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cel" = (/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/hallway/primary/central) @@ -5971,7 +5971,7 @@ "ckQ" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/medbay{name = "Medbay Central"}) "ckR" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteyellow"},/area/medical/medbay{name = "Medbay Central"}) "ckS" = (/obj/effect/landmark/start{name = "Paramedic"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteyellow"},/area/medical/medbay{name = "Medbay Central"}) -"ckT" = (/obj/structure/flora/kirbyplants{tag = "icon-plant-11"; icon_state = "plant-11"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteyellow"},/area/medical/medbay{name = "Medbay Central"}) +"ckT" = (/obj/item/weapon/twohanded/required/kirbyplants{tag = "icon-plant-11"; icon_state = "plant-11"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteyellow"},/area/medical/medbay{name = "Medbay Central"}) "ckU" = (/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/medical/medbay{name = "Medbay Central"}) "ckV" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/aft) "ckW" = (/obj/machinery/autolathe{icon_state = "autolathe"; name = "public autolathe"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) @@ -5980,7 +5980,7 @@ "ckZ" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell/potato,/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "cla" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "clb" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) -"clc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -30},/obj/structure/flora/kirbyplants{layer = 4.1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) +"clc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -30},/obj/item/weapon/twohanded/required/kirbyplants{layer = 4.1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "cld" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "cle" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "clf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/checkpoint/science{name = "Security Post - Research Division"}) @@ -6016,7 +6016,7 @@ "clJ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/external{req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "clK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/maintenance/aft{name = "Aft Maintenance"}) "clL" = (/obj/item/trash/pistachios,/obj/structure/closet,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"clM" = (/obj/structure/flora/kirbyplants{tag = "icon-plant-25"; icon_state = "plant-25"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"clM" = (/obj/item/weapon/twohanded/required/kirbyplants{tag = "icon-plant-25"; icon_state = "plant-25"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "clN" = (/obj/item/weapon/storage/box,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "clO" = (/obj/structure/closet/crate,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "clP" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) @@ -6468,7 +6468,7 @@ "cut" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) "cuu" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "cuv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) -"cuw" = (/obj/structure/flora/kirbyplants{icon_state = "plant-10"; layer = 4.1; tag = "icon-plant-10"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) +"cuw" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-10"; layer = 4.1; tag = "icon-plant-10"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) "cux" = (/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurplecorner"},/area/toxins/explab) "cuy" = (/obj/structure/stool/bed/chair/office/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "cuz" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/weapon/folder/white,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) @@ -6904,7 +6904,7 @@ "cCN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera{c_tag = "Research Division Hallway - Mech Bay"; dir = 4; network = list("SS13","RD")},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "cCO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cCP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"},/area/medical/research{name = "Research Division"}) -"cCQ" = (/obj/machinery/power/apc{dir = 2; name = "RD Office APC"; pixel_x = 0; pixel_y = -27},/obj/structure/cable/yellow,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/flora/kirbyplants/dead,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) +"cCQ" = (/obj/machinery/power/apc{dir = 2; name = "RD Office APC"; pixel_x = 0; pixel_y = -27},/obj/structure/cable/yellow,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants/dead,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cCR" = (/obj/machinery/hologram/holopad,/obj/machinery/light,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cCS" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/machinery/light{dir = 4},/obj/structure/window/reinforced/polarized{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/item/weapon/hemostat,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) "cCT" = (/obj/structure/closet/secure_closet/RD,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) @@ -7380,7 +7380,7 @@ "cLV" = (/obj/structure/sign/securearea{pixel_x = 0; pixel_y = 32},/obj/machinery/shower{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/medical/virology) "cLW" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3{name = "Medbay Aft"}) "cLX" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreen"},/area/medical/medbay3{name = "Medbay Aft"}) -"cLY" = (/obj/structure/flora/kirbyplants{icon_state = "plant-21"; layer = 4.1; pixel_x = -3; pixel_y = 3; tag = "icon-plant-21"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreencorner"},/area/medical/medbay3{name = "Medbay Aft"}) +"cLY" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1; pixel_x = -3; pixel_y = 3; tag = "icon-plant-21"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreencorner"},/area/medical/medbay3{name = "Medbay Aft"}) "cLZ" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) "cMa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) "cMb" = (/obj/structure/table,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) @@ -7703,14 +7703,14 @@ "cSg" = (/obj/machinery/door/morgue{name = "Relic Closet"; req_access_txt = "22"},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) "cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/internal/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) "cSi" = (/obj/machinery/door/airlock/maintenance{name = "Chapel Maintenance Access "; req_access_txt = "0"; req_one_access_txt = "12;27"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cSj" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Departure Lounge - Port Fore"; dir = 4; network = list("SS13")},/obj/structure/flora/kirbyplants{icon_state = "plant-24"; layer = 4.1; tag = "icon-plant-24"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSj" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Departure Lounge - Port Fore"; dir = 4; network = list("SS13")},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-24"; layer = 4.1; tag = "icon-plant-24"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSl" = (/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 2},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSm" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSn" = (/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cSq" = (/obj/machinery/light{dir = 4},/obj/machinery/camera{c_tag = "Departure Lounge - Starboard Fore"; dir = 8; network = list("SS13")},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/flora/kirbyplants{icon_state = "plant-14"; layer = 4.1; tag = "icon-plant-14"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cSq" = (/obj/machinery/light{dir = 4},/obj/machinery/camera{c_tag = "Departure Lounge - Starboard Fore"; dir = 8; network = list("SS13")},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-14"; layer = 4.1; tag = "icon-plant-14"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSr" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Aft Maintenance APC"; pixel_y = -24},/obj/structure/cable/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) "cSs" = (/obj/machinery/door/poddoor/preopen{id_tag = "xeno_blastdoor"; name = "biohazard containment door"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) "cSt" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor/preopen{id_tag = "xeno_blastdoor"; name = "biohazard containment door"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) @@ -7900,14 +7900,14 @@ "cVV" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main) "cVW" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) "cVX" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) -"cVY" = (/obj/machinery/camera{c_tag = "Departure Lounge - Port Aft"; dir = 4; network = list("SS13")},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/structure/flora/kirbyplants{icon_state = "plant-04"; layer = 4.1; tag = "icon-plant-04"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cVY" = (/obj/machinery/camera{c_tag = "Departure Lounge - Port Aft"; dir = 4; network = list("SS13")},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-04"; layer = 4.1; tag = "icon-plant-04"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cVZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cWa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cWb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cWc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/beacon,/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{id_tag = "escape_dock_north_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access_txt = "13"; tag_airpump = "escape_dock_north_pump"; tag_chamber_sensor = "escape_dock_north_sensor"; tag_exterior_door = "escape_dock_north_outer"; tag_interior_door = "escape_dock_north_inner"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cWd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cWe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=9.5-Escape2"; location = "9-Escape"},/mob/living/simple_animal/bot/secbot{auto_patrol = 1; health = 35; maxHealth = 35; name = "Inspector Johnson"},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) -"cWf" = (/obj/machinery/camera{c_tag = "Departure Lounge - Starboard Aft"; dir = 8; network = list("SS13")},/obj/machinery/light{dir = 4},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/flora/kirbyplants{icon_state = "plant-16"; layer = 4.1; tag = "icon-plant-16"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) +"cWf" = (/obj/machinery/camera{c_tag = "Departure Lounge - Starboard Aft"; dir = 8; network = list("SS13")},/obj/machinery/light{dir = 4},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-16"; layer = 4.1; tag = "icon-plant-16"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cWg" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cWh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cWi" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/toxins/xenobiology{name = "\improper Secure Lab"}) @@ -8330,7 +8330,7 @@ "dej" = (/obj/structure/closet/secure_closet/psychiatrist,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/medical/psych) "dek" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet,/area/medical/psych) "del" = (/obj/structure/stool/bed/chair/comfy/beige,/obj/machinery/door_control{id = "psychoffice"; name = "Privacy Shutters Control"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/carpet,/area/medical/psych) -"dem" = (/obj/machinery/power/apc{dir = 4; name = "Psychiatrist APC"; pixel_x = 25},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/flora/kirbyplants{tag = "icon-plant-25"; icon_state = "plant-25"},/turf/simulated/floor/carpet,/area/medical/psych) +"dem" = (/obj/machinery/power/apc{dir = 4; name = "Psychiatrist APC"; pixel_x = 25},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/item/weapon/twohanded/required/kirbyplants{tag = "icon-plant-25"; icon_state = "plant-25"},/turf/simulated/floor/carpet,/area/medical/psych) "den" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "deo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/medical/psych) "dep" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/medical/psych) @@ -8586,11 +8586,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablOblPblQblRbkbblSblTblSblTblSblTblSbkbblUblVbccbgVblWbgXblXblYblZbmabmbbmcbgXbmdbmebmfbmgbmhbmibmjbmkbmlbmmbmnbmobmpbmqbmrbmsbmtbmubmvbmwbmxbmybmzbmAbiVbfIbmSbhqbmQbmCbmDbmEbhqbmFbmGbjeabqabqbmHboBbopbpVboHbqfbqdbqhbqgbqkbqjbqlbmTabqabqbhwbmUbmVbmWbmXbmYbmZbnabhwbhybnbbncbndbnebnfbnebngbnhbnibnebnebnebnjbnebnkbnlbnmbnnbnebnebnobnkbngbnjbnpbnqbnobnrbnsbntbnubnvbnwbnxbnybnzbnAbnBbnCbnDdfpdfmdftdfqdfxdfudfydeZaoNdflabqaaaaaaaaaaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqaefblDblEbnKblEbnLaXOaaaaaaaaaaXLbnMbnNbdJbnObnPbnQbnRbnSbnTbdIbrQaXLaXLaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiqbkbbkbbipbkbblSblTblSbnVblSblTblSbkbblUblVbccbnWbnXbnYbnZboabobbocbobbiubiubodboebhcbfwbofbogbohboibojbokbolbfwbombonbojbkCboobfwbrXboqborbosbotbiUbkIbfIbkJbhqboubovbowboxbhqboybozbjebkWboAbkWbsbboCboDboEboDboFboDboEboDboGbscbkWboAbkWbhwboIboIboIboJboKboLboMbhwboNboOboPboQboRboSboRboTboRboUboRboRboRboVboRboWboXboYboZboRboRbpabpbbpcboVbpdboVbpebpfbpgbntbphbpibpibpjbpkbpibpidfzdfBdfAdfGdfDdfIdfHdfKdfJdgddfLdgKazDabqaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbpraaaaaaaaaabqbjRbjRbjObpsaXIaXOaaaaaaaaaaXLaXLblHbdIbdIbdIbptbdIbdIbdIbdIbsebsdbsfaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablObpwbpxblRbkbblSblTblSblTblSblTblSbkbblUblVbccbpybpzbpAbpBbpCbpDbpDbpEbpFbpBbpGbpHbpIbfwbpJbpKbpLbpMbpNbpObpPbfwbpQbpRbpSbpTbpUbfwbsibpWbpXbpYbpZbfGbqabjnbqbbqcbqcbqcbqcbqcbhtbtPbqebhtbkWbtSbtRbtTboEboEboEboEbqiboEboEboEboEbtZbtYbubbkWbqmbqnbqobqpbqqbqrbqrbqsbhwbqtbqubqvbqwbqxbqybqxbqzbqxbqAbqxbqxbqBbqxbqxbqCbqDbqxbqEbqBbqFbqGbqCbqHbqxbqIbqJbqKbqLbqMbqNbqObqPbqQbqRbpnbqSbqSbqTdgMdgLdgOdgNdgPanqanqanqanqanqanqanqanqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabqYbqZbrabrbbrcbrdbrebrfaXIaXLaXLaXLaXLaXLbrgbrhbrgbrgbribrjbribrkbrkbrlbrmbrnbudaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobiobjZbrpbkbbrqbkbbrrbrsbkbbrtbkbbkibrubccbgVbrvbrwbrxbrybrzbrAbrBbrCbrxbrDbrEbrFbfwbrGbhabrHbrIbfwbfwbfwbfwbfwbhabrJbrKbfwbfwbiUbrLbrMbiUbiUbzObehbfIbrObqcbrPbumbrRbqcbrSbrTbrUbrVbrWburbrYbrZbsabsabvWbwfbwebvWbvWbsabsabsgbshbwgbkWbhwboIboIboIbsjboIboIboIbhwbskbfIbslbZibsnbsobsnbsmbspbspbspbspbspbspaoGaoGbsqaoGaoGaoGbsrbThaoGaoGaoGbstaoGbsubsvbswbsxbsybszbsAbsBbqSbsCbsCbsDbqUbsEbjNbntbsFbsGbsHbsIbsJbsJbsKbsLabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabqYbsMbsNaaaabqbsObsPbsQbsRbsSbsTbrgbsUbsVbsWbsXbsYbsZbrgbtabtbbtcbtdbtebtfbtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobiobjZbrpbkbbrqbkbbrrbrsbkbbrtbkbbkibrubccbgVbrvbrwbrxbrybrzbrAbrBbrCbrxbrDbrEbrFbfwbrGbhabrHbrIbfwbfwbfwbfwbfwbhabrJbrKbfwbfwbiUbrLbrMbiUbiUbzObehbfIbrObqcbrPbumbrRbqcbrSbrTbrUbrVbrWburbrYbrZbsabsabvWbwfbwebvWbvWbsabsabsgbshbwgbkWbhwboIboIboIbsjboIboIboIbhwbskbfIbslbZibsnbsobsnbsmbspbspbspbspbspbspaoGaoGbsqaoGaoGaoGbsrbCiaoGaoGaoGbstaoGbsubsvbswbsxbsybszbsAbsBbqSbsCbsCbsDbqUbsEbjNbntbsFbsGbsHbsIbsJbsJbsKbsLabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabqYbsMbsNaaaabqbsObsPbsQbsRbsSbsTbrgbsUbsVbsWbsXbsYbsZbrgbtabtbbtcbtdbtebtfbtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobthbiobiqbiobiobiqbiobipbtibtjaWDbtkbtlbtmbfGbtnbtobtpbtobtqbfGbtrbtsbttbtubtvbtwbtxbtybtzbtwbtAbtBbtwbtvbtvbtCbtvbtDbtEbtFbtGbtHbtvbtIbtJbtKbkJbtLbtMbtNbtObqcbjebjebjebjebkWbwmbtQboEboEboEbtUboEbtVbtWbtXboEboEbwnbuabAkbucbhwbwobuebufbugbuhboIbuibhwbujbfIbukbuldedbunbuobsmbupbuqbwpbusbutbuubuvbuwbuxaoGbuybuzbuAbuBbuCaoGaxcbuDaoGbuEbuFbuGbnEbuHbuHbuHbuIbuJbqSbqSbuKbuLbuMbuNbuObuPbuQbuRbuSbuTbuTbuUbuVbuWbuWbuWbuXdgQbuWbuWbuWbuWbuWbuXbuWbuWbuWbuWbuWbuWbuXbuWbuYbuZbuTbuTbuTbvabvbbvcbvdbvdbvebvfbvgbvhbvibvjbvkbvlbvmbvnbvobvpbvqbvrbvsbvtbvubvvbbXbbXbvwaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqaaabccbdRbccbccbccbccbccbccbdRbccaaaaWDbvxbvybvzbfGbvAbvBbvCbvBbvDbfGbvEbvFbvGbvHbvHbvIbvJbvHbvHbvKbvLbvMbvNbvHbvHbvObvHbvHbvHbvPbvQbvRbvRbvSbvTbvUbvVbqcbyobvXbvYbqcbvZbwabwbbwcbwdboEbtQboEbypbywbwhbwibwjbwibwkbyJbyxbAbbyQbAkbwqbhwbwrbwsbwtbwubwvbhwbhwbhwbhybwwbwxbsmbwybwzbwAbsmbwBbwCbwDbwEbwFbwGbwHbwIbwJbwKbwLbwMbwNbwObwPbwQbwRbwSaoGbsubwTbwUbntbwVbwWbwXbwYbwZbxabxbbxcbxdbqUbxebxfbxgbxhbxiaWCaaaaaabxjbsNabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabxkbxlbsLaaaabqaZhbxmbxnbxobxpbxqbxrbxsbxtbxubxvbxwbxxbxybxzbxAbxBbxCbxDbtfbxEbxFaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccabqaaaabqaaabccbxGbccbxHbxIbfebxJbccbxGbccbccaWDbgVbxKbxLbfGbxMbvBbxNbvBbxObfGbxPbxQbxRbxSbxTbxUbxVbxWbxXbxYbxZbyabxTbxTbxTbybbxTbycbydbxVbyebxTbxTbyfbygbyhbvVbqcbyibyjbykbylbymbynbymbymbwdbAjbAebyqbyqbyqbyrbysbytbyubyvbyqbyqbyqbBWbCcbkWbhwbyybyzbyAbyBbyCbhwbyDbyEbyFbyGbwxbsnbyHbyIbCdbsmbyKbyLbyMbyNbspbspaoGaoGbyOaoGaoGaoGbyPbCeaoGaoGbyRbySaoGbyTbwTbyUbntbjNbjNbjNbjNbyVbjNbjNbyWbyXbyYbntbntbyZbzabzbbzcaaabqYbzdaaaabqaaaaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabxkbxlbsLabqbzebzfbzgbzhbzibzjbrgbzkbzlbzmbznbzobzpbrgbzqbzrbzsbrkbztbzubtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbccbdQbccaWDbccbdRbccbzvbaBbzwbzxbccbdRbccbzybzzbzAbtlbtmbfGbzBbzCbtpbzCbzBbfGbzDbzEbzFbfGbzGbzHbzIbfGapfbzJapfbzKbzKbzLbzMbzNbzLbzKbzKbzKbzKbzKbzKdeDbzPbzQbzRbzSbzTbzUbzVbzWbzVbzXbzYbzZbAabCfbAcbAdbCibAdbAdbAfbAgbAhbyqbyqbAibyqbCkbAkbhwbAlbAmbAnbAobApbAqbhwbArbhtbAsbbrbAtbsmbsmbsmbsmbsmbAubAvbspbspbspbAwbAxbspbAybAzbAAaoGazpbABaoGbACbADbAEbAFbAGbAHbAIbAJbAKbALbAMbAKbANbAObjNbAPbAQbARbASbATbAUbAVbAWbAXbsJbAYbAZabqabqabqabqabqaaaabqaaaabqaaaabqaaaabqaaaaaaaaaaaaaaaaaaabqbpraaabxkbBabrbbBbbBcbrebpsaXIaXLbBdbBebBfbBgbBhbBibrgbrgbBjbBkbBlbrkbrkbBmbBnbBoaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbccbdQbccaWDbccbdRbccbzvbaBbzwbzxbccbdRbccbzybzzbzAbtlbtmbfGbzBbzCbtpbzCbzBbfGbzDbzEbzFbfGbzGbzHbzIbfGapfbzJapfbzKbzKbzLbzMbzNbzLbzKbzKbzKbzKbzKbzKdeDbzPbzQbzRbzSbzTbzUbzVbzWbzVbzXbzYbzZbAabCfbAcbAdbThbAdbAdbAfbAgbAhbyqbyqbAibyqbCkbAkbhwbAlbAmbAnbAobApbAqbhwbArbhtbAsbbrbAtbsmbsmbsmbsmbsmbAubAvbspbspbspbAwbAxbspbAybAzbAAaoGazpbABaoGbACbADbAEbAFbAGbAHbAIbAJbAKbALbAMbAKbANbAObjNbAPbAQbARbASbATbAUbAVbAWbAXbsJbAYbAZabqabqabqabqabqaaaabqaaaabqaaaabqaaaabqaaaaaaaaaaaaaaaaaaabqbpraaabxkbBabrbbBbbBcbrebpsaXIaXLbBdbBebBfbBgbBhbBibrgbrgbBjbBkbBlbrkbrkbBmbBnbBoaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbBpbaBbaCbBqbBrbaBbaBbBsbBtbchbBubBvbBvbBvbBwbBxbBybBzbBAbBBbBCbBDbBEbBFbBGbBBbBHbBIbBJbBKbBKbBLbBKbBKarKbBMbBNbzKbBObBPbBQbBRbBSbzKbBTbBUbzKbBTbBUbzKbzPbfIbkJbqcbBVbClbBXbqcbBYbBZbCabCbbwdbAkbDrbyqboEbDVbCgboEboEbAkbChbDWbCjbyqbEfbEgbhwbCmbCnbCobCpbCqbCrbCsbCtbhtbhybbrbhzbspbCubCvbCwbCxbCybCzbCAbspbCBbCCbCDbCEbCFbCGbCHaoGaoGaoGaoGaoGaoGbCIaoGbCJbCKbCLbCMbCNbCNbCNbCNbCNbCMbCMbCNbCObCPbCQbCRbCSbCTbCUbCVbCMbCMbCMabqaaaaaaaaaabqaaaabqaaaabqaaaabeaaaabeaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqarBbicaXIaXObCWaXLbCXbCYbCZbDabDbbDcbDdbDebDfbDgbDhbDibbXbbXbDjaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccbcdbcebcebDkbcebDlbDmbDnbDnbDobDnbDpbDqbEJbDsbDtbDubDvbDwbpBbDxbDybDzbDAbDBbDCbDDbDEbDFbDGbDHbDIbDJbBKbDKbDLanHbzKbDMbDNbBQbBRbBSbzKbDObDPbzKbDObDPbzKbDQbfIbkJbqcbqcbDRbqcbqcbqcbDSbDTbDUbqcbFJbtQbDXboEbwibwibDYbDZbEabEbbEcbEdbEebshbFUbEhbEibEjbEkbElbEmbEnbhwbEobhtbEpbbrbhzbspbEqbErbCybEsbCybEtbCybEubEvbCHbEwbExbEybEzbEAbEBbECbEDbEEbEFbEGbEHaoGbEIbwTbHCbCMbEKbELbEMbENbEObCMbEPbEQbERbESbETbEUbEVbEWbEXbEYbEZbFabCMabqabqabqabqabqabqabqaaaabeaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaXLbFebFfbFgbDabFhbFibFjbFkbFlbFmbFnbDaaXLaaaaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccaWDbccbdQbccaWDbccbccbccaWDbccaWDaWDaWDbnWbnXapfbFoapfapfbFpbFqbFpbFrbFpbFpbFpbFpbBKbBKbFsbFtbBKbBKbBKbFuaoXbzKbFvbFwbBQbFxbzKbzKbFybzKbzKbFzbzKbzKbFAbfIbkJbFBbFCbFDbFEbFFbFGbFDbFDbFHbFIbAkbHDbAdbFKbFLbFMbFNbFObFPbFQbFRbFSbyqbFTbAkbhwbFVbFWbFXbFYbFZbGabhwbGbbhtbhybbrbhzbspbGcbGdbGebGdbGfbGgbGhbGibEvbCHbGjbGkbCHbEvbGlbGmbGnbGobGpbGqbEGbySaoGbGrbGsbGtbGubGvbGwbGxbGybGzbCMbGAbGBbGCbGDbETbGEbGFbGGbGHbGIbGJbGKbCMabqbGLbGLbGLbGLbGLabqaaabFcaaabFbaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaZhbFdaXOaaaaXLbGMbGNbGObDabGPbGQbGRbGSbGTbGUbGVbDaaXLaaaaaaaUUbjPaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm index 288ac0f9044..90fdad55ab1 100644 --- a/_maps/map_files/MetaStation/z2.dmm +++ b/_maps/map_files/MetaStation/z2.dmm @@ -401,7 +401,7 @@ "hK" = (/turf/unsimulated/floor/grass,/area/centcom/control) "hL" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/control) "hM" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/control) -"hN" = (/obj/structure/flora/kirbyplants,/turf/unsimulated/floor{icon_state = "green"; dir = 9},/area/centcom/evac) +"hN" = (/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "green"; dir = 9},/area/centcom/evac) "hO" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{dir = 1; icon_state = "green"},/area/centcom/evac) "hP" = (/turf/unsimulated/floor{dir = 1; icon_state = "green"},/area/centcom/evac) "hQ" = (/obj/structure/rack,/turf/unsimulated/floor{dir = 1; icon_state = "green"},/area/centcom/evac) @@ -518,7 +518,7 @@ "lv" = (/turf/unsimulated/floor{icon_state = "neutral"; dir = 8},/area/tdome/tdomeobserve) "lw" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdomeobserve) "lx" = (/turf/unsimulated/floor{icon_state = "neutral"; dir = 4},/area/tdome/tdomeobserve) -"ly" = (/obj/structure/flora/kirbyplants,/turf/unsimulated/floor{icon_state = "red"; dir = 10},/area/centcom/evac) +"ly" = (/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "red"; dir = 10},/area/centcom/evac) "lz" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/centcom/evac) "lA" = (/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/centcom/evac) "lB" = (/obj/structure/rack,/obj/item/toy/katana,/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/centcom/evac) diff --git a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm index e68167fea13..5003686f08a 100644 --- a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm @@ -20,7 +20,7 @@ "at" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) "au" = (/obj/machinery/light/small,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) "av" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"},/area/awaymission/BMPship/Fore) -"aw" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/awaymission/BMPship/Aft) +"aw" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/awaymission/BMPship/Fore) "ax" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/BMPship/Aft) "ay" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"},/area/awaymission/BMPship/Aft) "az" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"},/area/awaymission/BMPship/Aft) @@ -28,7 +28,7 @@ "aB" = (/obj/machinery/door/airlock/silver{locked = 1},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/awaymission/BMPship/Aft) "aC" = (/turf/simulated/shuttle/wall{tag = "icon-swall4"; icon_state = "swall4"},/area/awaymission/BMPship/Aft) "aD" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/awaymission/BMPship/Aft) -"aE" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/awaymission/BMPship/Aft) +"aE" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/BMPship/Aft) "aF" = (/turf/simulated/shuttle/wall,/area/awaymission/BMPship/Aft) "aG" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) "aH" = (/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) @@ -116,7 +116,7 @@ "cl" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/BMPship/Midship) "cm" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"},/area/awaymission/BMPship/Midship) "cn" = (/turf/simulated/shuttle/wall{tag = "icon-swall15"; icon_state = "swall15"},/area/awaymission/BMPship/Aft) -"co" = (/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "packerMed"},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) +"co" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/awaymission/BMPship/Aft) "cp" = (/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "packerMed"},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft) "cq" = (/obj/structure/largecrate,/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/awaymission/BMPship/Aft) "cr" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) @@ -128,7 +128,7 @@ "cx" = (/obj/machinery/door_control{id = "packerCargo"; pixel_y = -24},/obj/machinery/light/small,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) "cy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) "cz" = (/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/awaymission/BMPship/Aft) -"cA" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/awaymission/BMPship/Fore) +"cA" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/BMPship/Fore) "cB" = (/turf/simulated/floor/plasteel{tag = "icon-carpet"; icon_state = "carpet"},/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/awaymission/BMPship/Fore) "cC" = (/turf/simulated/floor/plasteel{tag = "icon-carpet"; icon_state = "carpet"},/area/awaymission/BMPship/Fore) "cD" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc/noalarm{dir = 1; locked = 0; pixel_y = 24; req_access = ""},/turf/simulated/floor/plasteel{tag = "icon-carpet"; icon_state = "carpet"},/area/awaymission/BMPship/Fore) @@ -277,7 +277,7 @@ "fq" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "fr" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility/full,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/BMPship/Aft) "fs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) -"ft" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/awaymission/BMPship/Aft) +"ft" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/awaymission/BMPship/Aft) "fu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-carpet15-7 (EAST)"; icon_state = "carpet15-7"; dir = 4},/area/awaymission/BMPship/Fore) "fv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-carpet15-13 (EAST)"; icon_state = "carpet15-13"; dir = 4},/area/awaymission/BMPship/Fore) "fw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-carpet15-7 (EAST)"; icon_state = "carpet15-7"; dir = 4},/area/awaymission/BMPship/Fore) @@ -317,7 +317,7 @@ "ge" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Aft) "gf" = (/obj/structure/mopbucket,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "gg" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/kitchen/knife,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) -"gh" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/awaymission/BMPship/Fore) +"gh" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/awaymission/BMPship/Fore) "gi" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plasteel{tag = "icon-carpetside"; icon_state = "carpetside"},/area/awaymission/BMPship/Fore) "gj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plasteel{tag = "icon-carpetside"; icon_state = "carpetside"},/area/awaymission/BMPship/Fore) "gk" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/awaymission/BMPship/Midship) @@ -334,7 +334,7 @@ "gv" = (/obj/item/stack/cable_coil,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "gw" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) "gx" = (/obj/item/stack/sheet/mineral/uranium{amount = 50},/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) -"gy" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/space) +"gy" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/space) "gz" = (/turf/simulated/floor/plating/airless{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/awaymission/BMPship/Fore) "gA" = (/obj/structure/lattice,/turf/space,/area/awaymission/BMPship/Fore) "gB" = (/turf/simulated/floor/plating/airless{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/awaymission/BMPship/Fore) @@ -449,7 +449,7 @@ "iG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) "iH" = (/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) "iI" = (/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) -"iJ" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/awaymission/BMPship/Fore) +"iJ" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/awaymission/BMPship/Fore) "iK" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/BMPship/Fore) "iL" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) "iM" = (/turf/simulated/mineral/random/high_chance_clown,/area/awaymission) @@ -503,25 +503,25 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafagagahagaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakalamanaoaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapalalaqararaoaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaaaaaaaaaaaaaaaaaaaaaaaaatakauamarararavaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasawaxaxaxaxaxaxaxaxaxayaxaxaxazaAaBaCazazaxaDaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaaasaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaVaVaVaVaVaWaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafagagahagawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakalamanaoawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapalalaqararaoawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaaaaaaaaaaaaaaaaaaaaaaaaatakauamarararavawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaEaxaxaxaxaxaxaxaxaxayaxaxaxazaAaBaCazazaxaDcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaaasaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaVaVaVaVaVaWcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafagagahagagagagagagagaiaaaaaaaaaaaaasaXaYaHaHaZaHaHaHbaaHaHbbbcbdbdbebdbdbfbgbhbdbibjaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkblbmbnbobpbqbpbqbpbrbsaaaaaaaaaaasbtaYaHbuaHaHaHaGaHbvaNaNbwbxbybdbzbdbdbAbBbCbDbdbjaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbFbGbnbHararararararbIaaaaaaasawaFaHbuaYaHbuaHaHaHaZaHaHaHbJbcbKbdbdbdbdbLbMbNbdbdbOaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPbQbFbnarbRbRbSbRbRbTbUaaaaaaawbVbtbuaHbWbXaHaHaHbYbZbWbYbZaPbccacbcccccdccccccccbyceaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfcgchcicjckclclclclclcmclclclcmcnaxaxaxaxaAcococpaCaxaxaxaxbVcqcrcsctcrcrcucvcwcxcyczaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCcCcDcCcEcFcGcHcIcJcKcIcLcGcMcNcOcPcQcRcMcMcMcMcScTcUcScVcWaxaxaxaxaxaxaxaxayaAcXaCcnaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcYcZcYdacCcEcMdbcHdcdcdcdccLcMcMdddedededfcMcMcMcMdgdgcMdgcMdhdididjdkdldmdldnaPdodpdqdrazaxayaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCdsdtdsdudvcEcMcMcHdcdwdcdccLcMcMdxdydzdAdBcMcMcMcMcMcMcMcMcMaPdjdCdjbJdDdEdFdGaPdHdpdododIdJcWazaxaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbFbGbnbHararararararbIaaaaaaasaEaFaHbuaYaHbuaHaHaHaZaHaHaHbJbcbKbdbdbdbdbLbMbNbdbdbOaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPbQbFbnarbRbRbSbRbRbTbUaaaaaaaEbVbtbuaHbWbXaHaHaHbYbZbWbYbZaPbccacbcccccdccccccccbyceaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfcgchcicjckclclclclclcmclclclcmcnaxaxaxaxaAcpcpcpaCaxaxaxaxbVcqcrcsctcrcrcucvcwcxcyczaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCcCcDcCcEcFcGcHcIcJcKcIcLcGcMcNcOcPcQcRcMcMcMcMcScTcUcScVcWaxaxaxaxaxaxaxaxayaAcXaCcncoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcYcZcYdacCcEcMdbcHdcdcdcdccLcMcMdddedededfcMcMcMcMdgdgcMdgcMdhdididjdkdldmdldnaPdodpdqdrazaxaycoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCdsdtdsdudvcEcMcMcHdcdwdcdccLcMcMdxdydzdAdBcMcMcMcMcMcMcMcMcMaPdjdCdjbJdDdEdFdGaPdHdpdododIdJcWazaxcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCcCdKdLdMdNdOcEcMcMdPdQdQdRdQdScMcMdTcMdUdVdVdVdVdVdVdVdVdVdWcMdhdjdXdjdraxaxaxaxbVdHdYdZeaebecbbedeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciegegegeheiejekelddemeneoeoeoeoeoeodWcMddcMepcMeqerererererererepcMaPdjesdjdjdjdjdjetaPeuevbdewbdexeyezeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAeBeCegcYcZcYcZeDeEeoeFererererereGeHcMeIcMepeJeKeLeKeKeKeKeMeNeOePbbdjeseQeReReSdjdjaPeTeUbdeVeWeXbJezeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeZfaegfbdtdsdtfcdTcMcMerfdfefdfffgepfhepcMepcMfierererererererepfjfkflfmfnfofpfqdjdjaPfreUbdewbdfscWayaxftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeZfaegcYfufvfwfxddcMcMerfdfdfgfffgfyeofzeofAcMcMcMcMcMfBcMcMcMepcMfCdjesfDfofofEdjdjaPfFevfoewbdfGcWazaxaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeZfaegcYfufvfwfxddcMcMerfdfdfgfffgfyeofzeofAcMcMcMcMcMfBcMcMcMepcMfCdjesfDfofofEdjdjaPfFevfoewbdfGcWazaxcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfJegdsfKdsdtcCfLcMcMerfMfdfgfNfgepcMfOcMepcMcMfPcMcMcMcMcMcMfQdVfRfSfTfDfUfofEdjdjaPfFevfofVeWfWbbfXeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUegegegegfYegfZgadTemcMerfdfggbffgcepcMdTcMepcMeqerererererererepgdgeflfmfngffoggdjetaPeuevfobdbddJeyezeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaghahagaggigjagagaggkcMcMerfgfgfgglfgepgmddcMepgngogpgqgqgqgqeMeNeOgrbJdjesgsgtgtgudjdjaPdHeUbdgvbdgwbJgxeeefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -584,3 +584,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/RandomZLevels/centcomAway.dmm b/_maps/map_files/RandomZLevels/centcomAway.dmm index fe4583e5be0..11cab2ce739 100644 --- a/_maps/map_files/RandomZLevels/centcomAway.dmm +++ b/_maps/map_files/RandomZLevels/centcomAway.dmm @@ -442,7 +442,7 @@ "iz" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/turf/simulated/floor/wood,/area/awaymission/centcomAway/courtroom) "iA" = (/obj/structure/sign/vacuum,/turf/simulated/wall/r_wall,/area/awaymission/centcomAway/hangar) "iB" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/hangar) -"iC" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/general) +"iC" = (/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/general) "iD" = (/obj/machinery/door/airlock/centcom,/turf/simulated/floor/plasteel{icon_state = "floor"},/area/awaymission/centcomAway/general) "iE" = (/obj/machinery/door/airlock/centcom{name = "Centcom Security"; opacity = 1; req_access_txt = "101"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/general) "iF" = (/obj/structure/closet/secure_closet/injection,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/centcomAway/courtroom) diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm index 71c30499550..57218ff1ad2 100644 --- a/_maps/map_files/RandomZLevels/moonoutpost19.dmm +++ b/_maps/map_files/RandomZLevels/moonoutpost19.dmm @@ -483,7 +483,7 @@ "jo" = (/obj/effect/decal/cleanable/flour,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "jp" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "jq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/effect/decal/cleanable/blood/oil{color = "black"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) -"jr" = (/obj/structure/flora/kirbyplants{desc = "A plastic potted plant."; layer = 4.1; pixel_y = 3},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) +"jr" = (/obj/item/weapon/twohanded/required/kirbyplants{desc = "A plastic potted plant."; layer = 4.1; pixel_y = 3},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "js" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "jt" = (/obj/structure/stool/bed/chair,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "ju" = (/obj/structure/table,/obj/item/weapon/newspaper,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) @@ -728,7 +728,7 @@ "nZ" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plasteel{carbon_dioxide = 48.7; dir = 2; heat_capacity = 1e+006; icon_state = "neutralcorner"; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "oa" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{carbon_dioxide = 48.7; heat_capacity = 1e+006; icon_plating = "asteroidplating"; icon_state = "asteroidplating"; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "ob" = (/obj/structure/stool/bed/chair/comfy/black,/turf/simulated/floor/plating{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) -"oc" = (/obj/structure/flora/kirbyplants{desc = "A plastic potted plant."; layer = 4.1; pixel_y = 3},/turf/simulated/floor/plasteel{carbon_dioxide = 48.7; heat_capacity = 1e+006; icon_state = "neutral"; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) +"oc" = (/obj/item/weapon/twohanded/required/kirbyplants{desc = "A plastic potted plant."; layer = 4.1; pixel_y = 3},/turf/simulated/floor/plasteel{carbon_dioxide = 48.7; heat_capacity = 1e+006; icon_state = "neutral"; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "od" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating{carbon_dioxide = 48.7; heat_capacity = 1e+006; icon_plating = "asteroidplating"; icon_state = "asteroidplating"; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "oe" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) "of" = (/obj/item/trash/candy,/turf/simulated/floor/plating/airless/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/awaycontent/a3{always_unpowered = 1; ambientsounds = list('sound/ambience/ambimine.ogg'); has_gravity = 1; name = "Khonsu 19"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0}) diff --git a/_maps/map_files/RandomZLevels/spacebattle.dmm b/_maps/map_files/RandomZLevels/spacebattle.dmm index 9f278c80c36..0baeb1bcaf4 100644 --- a/_maps/map_files/RandomZLevels/spacebattle.dmm +++ b/_maps/map_files/RandomZLevels/spacebattle.dmm @@ -91,11 +91,11 @@ "bM" = (/obj/structure/window/reinforced,/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/cruiser) "bN" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/cruiser) "bO" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/cruiser) -"bP" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/awaymission/spacebattle/cruiser) +"bP" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/spacebattle/cruiser) "bQ" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/awaymission/spacebattle/cruiser) "bR" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"},/area/awaymission/spacebattle/cruiser) "bS" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/spacebattle/cruiser) -"bT" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/awaymission/spacebattle/cruiser) +"bT" = (/turf/space,/turf/simulated/shuttle/wall{dir = 3; icon_state = "swall_f10"; layer = 2; tag = "icon-swall_f10"},/area/awaymission/spacebattle/cruiser) "bU" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_l (EAST)"; icon_state = "burst_l"; dir = 4},/turf/space,/area/awaymission/spacebattle/cruiser) "bV" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-engine"; icon_state = "engine"},/area/awaymission/spacebattle/cruiser) "bW" = (/obj/machinery/computer/telecomms/monitor,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) @@ -170,7 +170,7 @@ "dn" = (/turf/simulated/floor/plasteel{tag = "icon-damaged4"; icon_state = "damaged4"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) "do" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "spacebattlepod2"; name = "Front Hull Door"; opacity = 1; tag = "icon-pdoor0"},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/cruiser) "dp" = (/turf/simulated/floor/plasteel{tag = "icon-damaged1"; icon_state = "damaged1"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/cruiser) -"dq" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/awaymission/spacebattle/cruiser) +"dq" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/awaymission/spacebattle/cruiser) "dr" = (/obj/effect/decal/cleanable/blood,/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/spacebattle/cruiser) "ds" = (/turf/simulated/shuttle/wall{tag = "icon-swall15"; icon_state = "swall15"},/area/awaymission/spacebattle/cruiser) "dt" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"},/area/awaymission/spacebattle/cruiser) @@ -266,7 +266,7 @@ "ff" = (/obj/machinery/door/poddoor{id_tag = "spacebattlestorage"; name = "Secure Storage"},/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser) "fg" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/awaymission/spacebattle/cruiser) "fh" = (/obj/machinery/computer/security/telescreen,/turf/simulated/shuttle/wall,/area/awaymission/spacebattle/cruiser) -"fi" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/awaymission/spacebattle/cruiser) +"fi" = (/turf/space,/area/awaymission/spacebattle/cruiser) "fj" = (/obj/machinery/door/airlock/external,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate4) "fk" = (/obj/structure/closet/crate,/obj/item/clothing/glasses/material,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) "fl" = (/obj/structure/closet/crate,/obj/item/weapon/light/tube,/obj/item/weapon/light/tube,/obj/item/weapon/light/tube,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser) @@ -407,7 +407,7 @@ "hQ" = (/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission/spacebattle/cruiser) "hR" = (/obj/structure/toilet,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission/spacebattle/cruiser) "hS" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/spacebattle/cruiser) -"hT" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"},/area/awaymission/spacebattle/cruiser) +"hT" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/awaymission/spacebattle/cruiser) "hU" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission/spacebattle/cruiser) "hV" = (/turf/simulated/shuttle/wall{tag = "icon-swall1"; icon_state = "swall1"},/area/awaymission/spacebattle/cruiser) "hW" = (/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/spacebattle/cruiser) @@ -615,13 +615,13 @@ abababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababbUbVcdbZbZbZdedededfdfdgdgdhdhdhdididicbhOhPhQcbhRcbhRcbhRcbhRcbhRcbbZbZcbgFgFgFgFgFgFgFhScbbZbZcObSbSbSbSbSeGbSbSbSbScabSbSbSbSeGbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSeHcacacphTabababababababababababababababababababababababababdqdtbZbZbZbZbZbZbZbZbZbZbZbZcGcWcWababababababababababababababababababababababababababababhphehfhfhfhfhfhfhfgXgMabababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcdbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbhPhPhPcbhUhVhUhVhUhVhUhVhUcbbZbZcbgFhvgFgFgFgFhWhXcbbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcYbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbabababababababababababababababababababababababababababcbbZbZbZbZbZbZbZbZbZbZcYbZcVcWdbababababababababababababababababababababababababababababhphehfhfhfhfhfhfhfhghhabababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcdbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbhYhPhZcbhPhPhPhPhPhPiahPhPcabZchcbgFgFgFgFgFibgRgFcbbZcYbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbabababababababababababababababababababababababababababcbbZbZbZbZbZbZbZbZbZbZbZbZdacWcWababababababababababababababababababababababababababababhphehfhfhfhfhfhfhfhghqabababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcsbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbhPhPhPgDichPhPhPhPhPidhPhPcabZbZcbieifgFieifgFieifcbbZbZcrbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbShTabababababababababababababababababababababababababababdqbSbSbSbSbSbSbSbSbSbSbSbSbSbSfiababababababababababababababababababababababababababababiggXgXgXgXgXgXgXgXgXhzabababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcsbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbhPhPhPgDichPhPhPhPhPidhPhPcabZbZcbieifgFieifgFieifcbbZbZcrbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbShTabababababababababababababababababababababababababababdqbSbSbSbSbSbSbSbSbSbSbSbSbSbShTababababababababababababababababababababababababababababiggXgXgXgXgXgXgXgXgXhzabababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcsbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbhYhPhQhVhPhPhPhPhPhPiahPihcbbZbZcbgFgFgFgFgFgFgFgFcbbZbZcGcHcHcHcHcHcHcGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgLhzababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcsbZbZbZbZbZbZbZcobZbZbZbZbZbZbZbZcbhPhPhPhUhPhPhPhPhPhPhPhPihcbbZbZcbiiijikiiijikiiijcbbZbZcGcHcHcHcHcHcHcGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcdbZbZbZbZbZbZbZbZbZilbZimcKcJbZcmcpbQbQbQbQbQbQbQbQbQbQbQbQbQeHbZbZcObSbSbSbSbSbSbSbSeHbZbZcpbQbQbQbQbQbQfiababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcdbZbZbZbZbZbZbZbZbZilbZimcKcJbZcmcpbQbQbQbQbQbQbQbQbQbQbQbQbQeHbZbZcObSbSbSbSbSbSbSbSeHbZbZcpbQbQbQbQbQbQhTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababccbVcdbZbZbZbZbZbZbZbZbZbZbZbZbZcKincKcabZbZbZbZimbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZcbabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiobVbWipbZbZbZbZbZbZimbZbZbZcIcIcKcmcKcabZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbZchbZbZbZbZbZbZbZbZbZbZbZcbabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdqbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQeGbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbSbSbSbSbSbSbSbSbSbSbSfiabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdqbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQeGbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbQbSbSbSbSbSbSbSbSbSbSbShTabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab @@ -730,3 +730,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index ce1e5a290e9..d3c520a6696 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -1,324 +1,718 @@ -"aa" = (/turf/space,/area/space) -"ab" = (/turf/unsimulated/wall,/area/space) -"ac" = (/turf/unsimulated/wall,/area/awaymission) -"ad" = (/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/wall,/area/awaymission) -"ae" = (/obj/machinery/power/terminal,/turf/simulated/floor/plating,/area/awaymission) -"af" = (/obj/machinery/power/apc/noalarm{dir = 1; pixel_y = 32},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission) -"ag" = (/mob/living/simple_animal/hostile/alien/queen,/turf/simulated/floor/carpet,/area/awaymission) -"ah" = (/obj/item/stack/cable_coil/random,/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/awaymission) -"ai" = (/turf/simulated/floor/plating,/area/awaymission) -"aj" = (/obj/machinery/power/smes/magical,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission) -"ak" = (/obj/structure/toilet{dir = 1},/obj/structure/alien/weeds{icon_state = "weeds2"},/obj/item/organ/internal/body_egg/alien_embryo,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"al" = (/obj/machinery/shower{dir = 8},/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"am" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/awaymission) -"an" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission) -"ao" = (/turf/simulated/wall,/area/awaymission) -"ap" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/plating,/area/awaymission) -"aq" = (/turf/unsimulated/beach/water,/area/awaymission) -"ar" = (/obj/structure/window{dir = 4},/obj/machinery/shower,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/awaymission) -"as" = (/obj/structure/rack,/obj/item/clothing/suit/apron,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/holidaypriest,/obj/item/clothing/suit/judgerobe,/obj/item/clothing/suit/storage/labcoat,/obj/item/clothing/suit/nun,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/suit/wizrobe/fake,/obj/item/clothing/suit/wizrobe/marisa/fake,/obj/effect/decal/cleanable/greenglow,/turf/simulated/floor/carpet,/area/awaymission) -"at" = (/obj/structure/rack,/obj/item/clothing/head/collectable/police,/obj/item/clothing/head/nun_hood,/obj/item/clothing/head/mailman,/obj/item/clothing/head/nursehat,/obj/item/clothing/head/wizard/fake,/obj/item/clothing/head/powdered_wig,/obj/item/clothing/head/wizard/marisa/fake,/obj/machinery/camera{c_tag = "Gold Suite"; c_tag_order = 999; network = list("Hotel")},/obj/item/clothing/mask/gas/sexyclown,/turf/simulated/floor/carpet,/area/awaymission) -"au" = (/obj/structure/rack,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/head/kitty,/obj/item/clothing/head/rabbitears,/obj/item/clothing/mask/muzzle,/obj/item/clothing/accessory/stethoscope,/turf/simulated/floor/carpet,/area/awaymission) -"av" = (/obj/structure/dresser,/turf/simulated/floor/carpet,/area/awaymission) -"aw" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/awaymission) -"ax" = (/obj/structure/rack,/obj/item/clothing/suit/apron,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/holidaypriest,/obj/item/clothing/suit/judgerobe,/obj/item/clothing/suit/storage/labcoat,/obj/item/clothing/suit/nun,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/suit/wizrobe/fake,/obj/item/clothing/suit/xenos,/obj/item/clothing/suit/wizrobe/marisa/fake,/turf/simulated/floor/carpet,/area/awaymission) -"ay" = (/obj/structure/rack,/obj/item/clothing/head/collectable/police,/obj/item/clothing/head/nun_hood,/obj/item/clothing/head/mailman,/obj/item/clothing/head/nursehat,/obj/item/clothing/head/wizard/fake,/obj/item/clothing/head/powdered_wig,/obj/item/clothing/head/xenos,/obj/item/clothing/head/wizard/marisa/fake,/obj/machinery/camera{c_tag = "Silver Suite"; c_tag_order = 999; network = list("Hotel")},/obj/item/clothing/mask/gas/sexyclown,/turf/simulated/floor/carpet,/area/awaymission) -"az" = (/turf/simulated/floor/wood,/area/awaymission) -"aA" = (/obj/structure/toilet,/obj/machinery/light/small{dir = 1},/obj/machinery/camera{c_tag = "Bathroom1"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aB" = (/obj/structure/toilet,/obj/machinery/light/small{dir = 1},/obj/machinery/camera{c_tag = "Bathroom2"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aC" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aD" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/camera{c_tag = "Locker Room"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aE" = (/obj/structure/toilet,/obj/machinery/light/small{dir = 1},/obj/machinery/camera{c_tag = "Bathroom3"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aF" = (/obj/structure/toilet,/obj/machinery/light/small{dir = 1},/obj/machinery/camera{c_tag = "Bathroom4"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aG" = (/obj/structure/window{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/awaymission) -"aH" = (/turf/simulated/floor/carpet,/area/awaymission) -"aI" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/turf/simulated/floor/carpet,/area/awaymission) -"aJ" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/hop,/turf/simulated/floor/carpet,/area/awaymission) -"aK" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/wood,/area/awaymission) -"aL" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/wood,/area/awaymission) -"aM" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/wood,/area/awaymission) -"aN" = (/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aO" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aP" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aQ" = (/obj/machinery/light{dir = 8},/obj/item/weapon/soap/deluxe,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/awaymission) -"aR" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/awaymission) -"aS" = (/obj/structure/window{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/awaymission) -"aT" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/wood,/area/awaymission) -"aU" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/wood,/area/awaymission) -"aV" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/wood,/area/awaymission) -"aW" = (/obj/machinery/door/airlock,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aX" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aY" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"aZ" = (/obj/machinery/door/window/eastleft,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"ba" = (/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"bb" = (/obj/machinery/door_control{id = "Gold Suite"; name = "Gold Suite Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet,/area/awaymission) -"bc" = (/obj/machinery/door_control{id = "Silver Suite"; name = "Silver Suite Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet,/area/awaymission) -"bd" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/wood,/area/awaymission) -"be" = (/obj/machinery/gateway,/turf/simulated/floor/wood,/area/awaymission) -"bf" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/wood,/area/awaymission) -"bg" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"bh" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"bi" = (/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"bj" = (/obj/structure/mirror,/obj/structure/sink{icon_state = "sink"; dir = 4; pixel_x = -12; pixel_y = 2},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"bk" = (/obj/machinery/door/airlock/gold{id_tag = "Gold Suite"; name = "Gold Suite"},/turf/simulated/floor/carpet,/area/awaymission) -"bl" = (/obj/machinery/door/airlock/silver{id_tag = "Silver Suite"; name = "Silver Suite"},/turf/simulated/floor/carpet,/area/awaymission) -"bm" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 1},/area/space) -"bn" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/awaymission) -"bo" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/space) -"bp" = (/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission) -"bq" = (/obj/machinery/light,/turf/simulated/floor/carpet,/area/awaymission) -"br" = (/obj/structure/stool/bed/chair/comfy,/turf/simulated/floor/carpet,/area/awaymission) -"bs" = (/turf/unsimulated/wall/fakeglass,/area/space) -"bt" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/carpet,/area/awaymission) -"bu" = (/obj/machinery/light{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/carpet,/area/awaymission) -"bv" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet,/area/awaymission) -"bw" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"},/area/awaymission) -"bx" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/awaymission) -"by" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitebluecorner"},/area/awaymission) -"bz" = (/obj/machinery/door/airlock{id_tag = "Room301"; name = "Room301"},/turf/simulated/floor/plasteel,/area/awaymission) -"bA" = (/obj/machinery/door/airlock{id_tag = "Room302"; name = "Room302"},/turf/simulated/floor/plasteel,/area/awaymission) -"bB" = (/obj/machinery/door/airlock{id_tag = "Room303"; name = "Room303"},/turf/simulated/floor/plasteel,/area/awaymission) -"bC" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/awaymission) -"bD" = (/turf/simulated/shuttle/floor,/area/awaymission) -"bE" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/awaymission) -"bF" = (/obj/machinery/camera{c_tag = "Room 301"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/carpet,/area/awaymission) -"bG" = (/obj/machinery/door_control{name = "Room301 Bolt Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; id = "Room301"; normaldoorcontrol = 1; specialfunctions = 4},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"bH" = (/obj/machinery/camera{c_tag = "Room 302"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/carpet,/area/awaymission) -"bI" = (/obj/machinery/door_control{id = "Room302"; name = "Room302 Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"bJ" = (/obj/structure/dresser,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/turf/simulated/floor/carpet,/area/awaymission) -"bK" = (/obj/machinery/camera{c_tag = "Room 303"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/carpet,/area/awaymission) -"bL" = (/obj/machinery/door_control{id = "Room303"; name = "Room303 Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"bM" = (/obj/machinery/light{dir = 1},/turf/unsimulated/beach/water,/area/awaymission) -"bN" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/awaymission) -"bO" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet,/area/awaymission) -"bP" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/turf/simulated/floor/carpet,/area/awaymission) -"bQ" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/carpet,/area/awaymission) -"bR" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/space) -"bS" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/carpet,/area/awaymission) -"bT" = (/obj/structure/window,/turf/simulated/floor/carpet,/area/awaymission) -"bU" = (/obj/machinery/door/window/southright,/turf/simulated/floor/carpet,/area/awaymission) -"bV" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission) -"bW" = (/obj/structure/mirror,/turf/simulated/wall,/area/awaymission) -"bX" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"bY" = (/obj/machinery/shower{dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"bZ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"ca" = (/obj/structure/toilet{dir = 1},/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"cb" = (/obj/machinery/light{dir = 8},/turf/unsimulated/beach/water,/area/awaymission) -"cc" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/beach/water,/area/awaymission) -"cd" = (/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet,/area/awaymission) -"ce" = (/obj/machinery/door/airlock{id_tag = "Room201"; name = "Room201"},/turf/simulated/floor/plasteel,/area/awaymission) -"cf" = (/obj/machinery/door/airlock{id_tag = "Room202"; name = "Room202"},/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/turf/simulated/floor/plasteel,/area/awaymission) -"cg" = (/obj/machinery/door/airlock{id_tag = "Room203"; name = "Room203"},/turf/simulated/floor/plasteel,/area/awaymission) -"ch" = (/obj/machinery/camera{c_tag = "Room 201"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/carpet,/area/awaymission) -"ci" = (/obj/machinery/door_control{id = "Room201"; name = "Room201 Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"cj" = (/obj/structure/dresser,/obj/item/weapon/lipstick/jade,/turf/simulated/floor/carpet,/area/awaymission) -"ck" = (/obj/machinery/camera{c_tag = "Room 202"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/carpet,/area/awaymission) -"cl" = (/obj/machinery/door_control{id = "Room202"; name = "Room202 Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"cm" = (/obj/machinery/camera{c_tag = "Room 203"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/carpet,/area/awaymission) -"cn" = (/obj/machinery/door_control{id = "Room203"; name = "Room203 Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"co" = (/obj/structure/dresser,/obj/item/weapon/lipstick/purple,/turf/simulated/floor/carpet,/area/awaymission) -"cp" = (/obj/machinery/light,/turf/unsimulated/beach/water,/area/awaymission) -"cq" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/green,/turf/simulated/floor/carpet,/area/awaymission) -"cr" = (/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/turf/simulated/floor/carpet,/area/awaymission) -"cs" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/turf/simulated/floor/carpet,/area/awaymission) -"ct" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor/carpet,/area/awaymission) -"cu" = (/obj/item/weapon/beach_ball,/turf/simulated/shuttle/floor,/area/awaymission) -"cv" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/flour{desc = "Rather caked in there."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet,/area/awaymission) -"cw" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"},/area/awaymission) -"cx" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/awaymission) -"cy" = (/obj/machinery/door/window/southright,/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/turf/simulated/floor/carpet,/area/awaymission) -"cz" = (/obj/structure/window,/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/turf/simulated/floor/carpet,/area/awaymission) -"cA" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/awaymission) -"cB" = (/obj/structure/table,/turf/simulated/floor/carpet,/area/awaymission) -"cC" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"cD" = (/obj/structure/stool,/turf/simulated/floor/carpet,/area/awaymission) -"cE" = (/obj/machinery/door/airlock{id_tag = "Room101"; name = "Room101"},/turf/simulated/floor/plasteel,/area/awaymission) -"cF" = (/obj/machinery/door/airlock{id_tag = "Room102"; name = "Room102"},/turf/simulated/floor/plasteel,/area/awaymission) -"cG" = (/obj/machinery/door/airlock{id_tag = "Room103"; name = "Room103"},/turf/simulated/floor/plasteel,/area/awaymission) -"cH" = (/obj/machinery/camera{c_tag = "Room 101"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/carpet,/area/awaymission) -"cI" = (/obj/machinery/door_control{id = "Room101"; name = "Room101 Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"cJ" = (/obj/structure/dresser,/obj/item/clothing/head/xenos,/turf/simulated/floor/carpet,/area/awaymission) -"cK" = (/obj/machinery/camera{c_tag = "Room 102"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/carpet,/area/awaymission) -"cL" = (/obj/machinery/door_control{id = "Room102"; name = "Room102 Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"cM" = (/obj/effect/decal/cleanable/blood/gibs/old,/turf/simulated/floor/carpet,/area/awaymission) -"cN" = (/obj/machinery/camera{c_tag = "Room 103"; c_tag_order = 999; network = list("Hotel")},/turf/simulated/floor/carpet,/area/awaymission) -"cO" = (/obj/machinery/door_control{id = "Room103"; name = "Room103 Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"cP" = (/turf/simulated/floor/plasteel,/area/awaymission) -"cQ" = (/mob/living/simple_animal/hostile/retaliate/goat,/turf/simulated/floor/plasteel,/area/awaymission) -"cS" = (/obj/structure/stool/bed/nest,/turf/simulated/floor/carpet,/area/awaymission) -"cT" = (/obj/structure/stool/bed/alien,/obj/item/xenos_claw,/turf/simulated/floor/carpet,/area/awaymission) -"cU" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/yellow,/turf/simulated/floor/carpet,/area/awaymission) -"cV" = (/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/carpet,/area/awaymission) -"cW" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/carpet,/area/awaymission) -"cX" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/red,/turf/simulated/floor/carpet,/area/awaymission) -"cY" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel,/area/awaymission) -"cZ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/turf/simulated/floor/plasteel,/area/awaymission) -"da" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/awaymission) -"db" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/structure/table,/turf/simulated/floor/plasteel,/area/awaymission) -"dc" = (/obj/effect/gibspawner/xeno,/turf/simulated/floor/carpet,/area/awaymission) -"dd" = (/obj/effect/decal/remains/human,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"de" = (/obj/structure/stool/bed/alien,/obj/item/clothing/suit/xenos,/turf/simulated/floor/carpet,/area/awaymission) -"df" = (/obj/machinery/optable,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/carpet,/area/awaymission) -"dg" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/red,/obj/effect/decal/cleanable/blood/gibs/old,/turf/simulated/floor/carpet,/area/awaymission) -"dh" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/plasteel,/area/awaymission) -"di" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/turf/simulated/floor/plasteel,/area/awaymission) -"dj" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/turf/simulated/floor/plasteel,/area/awaymission) -"dk" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor/plasteel,/area/awaymission) -"dl" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/structure/table,/obj/item/weapon/book/manual/chef_recipes,/turf/simulated/floor/plasteel,/area/awaymission) -"dm" = (/obj/structure/window,/obj/structure/alien/weeds/node,/turf/simulated/floor/carpet,/area/awaymission) -"dn" = (/obj/structure/window,/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/carpet,/area/awaymission) -"do" = (/obj/machinery/door/window/southright,/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/carpet,/area/awaymission) -"dp" = (/obj/structure/table/woodentable,/obj/item/weapon/lipstick/black,/turf/simulated/floor/carpet,/area/awaymission) -"dq" = (/obj/structure/window,/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/cleanable/blood/gibs/old,/turf/simulated/floor/carpet,/area/awaymission) -"dr" = (/obj/structure/window,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/carpet,/area/awaymission) -"ds" = (/obj/machinery/door/window/southright,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/carpet,/area/awaymission) -"dt" = (/obj/machinery/vending/dinnerware,/turf/simulated/floor/plasteel,/area/awaymission) -"du" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/alien/weeds,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"dw" = (/obj/machinery/door/window/eastleft,/obj/structure/alien/weeds,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission) -"dy" = (/obj/machinery/light,/turf/simulated/floor/plasteel,/area/awaymission) -"dz" = (/obj/machinery/processor,/turf/simulated/floor/plasteel,/area/awaymission) -"dA" = (/obj/machinery/chem_master/condimaster,/turf/simulated/floor/plasteel,/area/awaymission) -"dB" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor/plasteel,/area/awaymission) -"dC" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel,/area/awaymission) -"dD" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/simulated/floor/plasteel,/area/awaymission) -"dE" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/plasteel,/area/awaymission) -"dF" = (/obj/structure/kitchenspike,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel,/area/awaymission) -"dG" = (/obj/machinery/door/airlock,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/plasteel,/area/awaymission) -"dH" = (/obj/item/weapon/bananapeel,/obj/item/toy/spinningtoy,/turf/simulated/floor/carpet,/area/awaymission) -"dI" = (/obj/structure/barricade/wooden,/turf/simulated/floor/carpet,/area/awaymission) -"dJ" = (/obj/item/target/syndicate,/turf/simulated/floor/carpet,/area/awaymission) -"dK" = (/obj/item/trash/candy,/turf/simulated/floor/carpet,/area/awaymission) -"dL" = (/obj/item/toy/spinningtoy,/turf/simulated/floor/carpet,/area/awaymission) -"dM" = (/obj/item/weapon/gun/projectile/shotgun/toy/crossbow,/turf/simulated/floor/carpet,/area/awaymission) -"dN" = (/obj/structure/barricade/wooden,/obj/structure/barricade/wooden,/turf/simulated/floor/carpet,/area/awaymission) -"dO" = (/obj/machinery/door/airlock,/turf/simulated/floor/carpet,/area/awaymission) -"dP" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/wall,/area/awaymission) -"dQ" = (/obj/effect/decal/remains/human,/obj/item/clothing/head/soft/red,/turf/simulated/floor/carpet,/area/awaymission) -"dR" = (/obj/item/toy/prize/honk,/turf/simulated/floor/carpet,/area/awaymission) -"dS" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/carpet,/area/awaymission) -"dT" = (/obj/machinery/vending/sovietsoda,/turf/simulated/floor/carpet,/area/awaymission) -"dU" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; dir = 4; network = "Hotel"; use_power = 1},/turf/simulated/floor/carpet,/area/awaymission) -"dV" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"dW" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; network = "Hotel"; use_power = 0},/turf/simulated/floor/carpet,/area/awaymission) -"dX" = (/turf/simulated/wall/cult,/area/awaymission) -"dY" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/engine/cult,/area/awaymission) -"dZ" = (/obj/effect/decal/remains/human,/turf/simulated/floor/carpet,/area/awaymission) -"ea" = (/obj/item/trash/candle,/obj/item/trash/candle,/obj/item/trash/candle,/turf/simulated/floor/carpet,/area/awaymission) -"eb" = (/obj/machinery/vending/snack,/turf/simulated/floor/carpet,/area/awaymission) -"ec" = (/obj/structure/stool/bed/chair{dir = 1},/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet,/area/awaymission) -"ed" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/carpet,/area/awaymission) -"ee" = (/turf/simulated/floor/engine/cult,/area/awaymission) -"ef" = (/obj/effect/gibspawner/human,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/engine/cult,/area/awaymission) -"eg" = (/obj/item/toy/sword,/turf/simulated/floor/carpet,/area/awaymission) -"eh" = (/obj/machinery/vending/cola,/turf/simulated/floor/carpet,/area/awaymission) -"ei" = (/obj/item/candle,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/engine/cult,/area/awaymission) -"ej" = (/obj/effect/rune,/obj/item/organ/brain,/turf/simulated/floor/engine/cult,/area/awaymission) -"ek" = (/obj/item/candle,/turf/simulated/floor/engine/cult,/area/awaymission) -"el" = (/obj/item/weapon/tome,/turf/simulated/floor/engine/cult,/area/awaymission) -"em" = (/obj/effect/rune,/turf/simulated/floor/engine/cult,/area/awaymission) -"en" = (/obj/structure/stool/bed/chair/comfy,/obj/item/device/soulstone,/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/remains/human,/turf/simulated/floor/engine/cult,/area/awaymission) -"eo" = (/obj/effect/gibspawner/human,/turf/simulated/floor/engine/cult,/area/awaymission) -"ep" = (/obj/item/trash/sosjerky,/turf/simulated/floor/carpet,/area/awaymission) -"eq" = (/obj/structure/table/woodentable,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor/carpet,/area/awaymission) -"er" = (/obj/item/latexballon,/obj/item/latexballon,/turf/simulated/floor/carpet,/area/awaymission) -"es" = (/obj/structure/rack,/obj/item/key,/obj/item/key,/obj/item/key,/obj/item/key,/obj/item/key,/turf/simulated/floor/carpet,/area/awaymission) -"et" = (/obj/structure/stool/bed/chair/comfy,/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet,/area/awaymission) -"eu" = (/obj/structure/stool/bed/chair/comfy,/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet,/area/awaymission) -"ev" = (/obj/item/weapon/restraints/legcuffs,/turf/simulated/floor/engine/cult,/area/awaymission) -"ew" = (/obj/machinery/space_heater,/turf/simulated/floor/carpet,/area/awaymission) -"ex" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission) -"ey" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; dir = 1; network = "Hotel"; use_power = 0},/turf/simulated/floor/carpet,/area/awaymission) -"ez" = (/obj/item/weapon/melee/cultblade,/turf/simulated/floor/engine/cult,/area/awaymission) -"eA" = (/obj/item/weapon/kitchen/knife/butcher{blood_DNA = 1e+009},/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/engine/cult,/area/awaymission) -"eB" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/awaymission) -"eC" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/awaymission) -"eD" = (/obj/structure/table/woodentable,/obj/item/weapon/clipboard,/obj/item/weapon/paper,/turf/simulated/floor/carpet,/area/awaymission) -"eE" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor/carpet,/area/awaymission) -"eF" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/turf/simulated/floor/carpet,/area/awaymission) -"eG" = (/turf/unsimulated/wall/fakeglass{dir = 10; icon_state = "fakewindows"},/area/space) -"eH" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/space) -"eI" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/space) -"eJ" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/simulated/floor/plating,/area/awaymission) -"eK" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/awaymission) -"eL" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/awaymission) -"eM" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/space) -"eN" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/awaymission) -"eO" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/plating,/area/awaymission) -"eP" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/awaymission) -"eQ" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/shuttle/wall{icon_state = "swallc4"; dir = 2},/area/awaymission) -"eR" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor,/area/awaymission) -"eS" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/awaymission) -"eT" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor,/area/awaymission) -"eU" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/floor/plating/airless,/area/awaymission) -"eV" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/space,/area/awaymission) -"eW" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/old,/turf/simulated/shuttle/floor,/area/awaymission) -"eX" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor,/area/awaymission) -"eY" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/old,/turf/simulated/shuttle/floor,/area/awaymission) -"eZ" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/awaymission) -"fa" = (/turf/simulated/shuttle/wall{icon_state = "swallc1"; dir = 2},/area/awaymission) -"fb" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor,/area/awaymission) -"fc" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/cleanable/blood/old,/turf/simulated/shuttle/floor,/area/awaymission) -"fd" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/awaymission) +"aa" = (/turf/unsimulated/wall{icon = 'icons/turf/mining.dmi'; icon_state = "rock"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"ab" = (/turf/unsimulated/wall/metal,/area/awaymission/undersea{requires_power = 0}) +"ac" = (/turf/unsimulated/wall{icon = 'icons/turf/mining.dmi'; icon_state = "rock"},/area/awaymission/beach) +"ad" = (/turf/unsimulated/floor/lava/dense,/area/awaymission) +"ae" = (/turf/unsimulated/wall/metal,/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"af" = (/turf/unsimulated/wall{dynamic_lighting = 0; icon = null},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ag" = (/turf/template_noop,/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ah" = (/turf/template_noop,/area/template_noop) +"ai" = (/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"aj" = (/obj/machinery/light{dir = 1},/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"ak" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"al" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"am" = (/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"an" = (/obj/effect/view_portal{id = "mazeland_111"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ao" = (/obj/effect/view_portal/visual{dir = 4; dist = 2; id = "mazeland_121"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ap" = (/obj/effect/view_portal/visual{dir = 1; dist = 2; id = "mazeland_332"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"aq" = (/obj/effect/view_portal/visual{dir = 1; dist = 5; frustrum = 1; id = "mazeland_room"; radius = 0},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ar" = (/obj/effect/view_portal/visual{dir = 1; dist = 2; id = "mazeland_331"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"as" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"at" = (/turf/unsimulated/beach/sand,/area/awaymission/beach) +"au" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"av" = (/obj/effect/view_portal{id = "mazeland_211"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"aw" = (/obj/effect/view_portal{id = "mazeland"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ax" = (/obj/effect/view_portal{id = "mazeland_411"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ay" = (/mob/living/simple_animal/hostile/retaliate/carp,/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"az" = (/obj/effect/view_portal{id = "mazeland_112"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"aA" = (/obj/effect/view_portal/visual{dir = 4; dist = 2; id = "mazeland_122"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"aB" = (/obj/effect/view_portal{id = "mazeland_31"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"aC" = (/turf/unsimulated/wall/metal,/area/awaymission{name = "Snowland"; requires_power = 0}) +"aD" = (/turf/unsimulated/wall{dynamic_lighting = 0; icon = null},/area/awaymission{name = "Snowland"; requires_power = 0}) +"aE" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"aF" = (/obj/item/weapon/paper/hotel_scrap_5,/turf/unsimulated/beach/sand,/area/awaymission/beach) +"aG" = (/mob/living/simple_animal/hostile/pirate,/turf/unsimulated/beach/sand,/area/awaymission/beach) +"aH" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"aI" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"aJ" = (/obj/effect/view_portal/visual{dir = 1; dist = 3; id = "snowland_room"; radius = 3},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"aK" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/mob/living/simple_animal/hostile/bear,/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"aL" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"aM" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"aN" = (/obj/effect/view_portal/visual{dir = 8; dist = 2; id = "mazeland_111"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"aO" = (/obj/effect/view_portal{id = "mazeland_121"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"aP" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"aQ" = (/obj/effect/view_portal/visual{dir = 8; dist = 2; id = "mazeland_31"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"aR" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows"; opacity = 1},/area/awaymission{name = "Snowland"; requires_power = 0}) +"aS" = (/turf/unsimulated/wall/fakeglass{dir = 4; icon_state = "fakewindows"; opacity = 0},/area/awaymission{name = "Snowland"; requires_power = 0}) +"aT" = (/obj/effect/view_portal{id = "snowland"},/obj/effect/decal/snow/sand/surround{icon_state = "gravsnow_surround"; dir = 1},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"aU" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows"; opacity = 0},/area/awaymission{name = "Snowland"; requires_power = 0}) +"aV" = (/turf/unsimulated/wall/fakeglass{dir = 4; icon_state = "fakewindows"; opacity = 1},/area/awaymission{name = "Snowland"; requires_power = 0}) +"aW" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"aX" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"aY" = (/obj/machinery/light{dir = 8},/mob/living/simple_animal/hostile/retaliate/carp,/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"aZ" = (/obj/structure/ladder/dive_point/anchor{id = "weirddive"; layer = 4.5},/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"ba" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"bb" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 4},/obj/structure/closet/athletic_mixed,/turf/unsimulated/beach/sand,/area/awaymission/beach) +"bc" = (/turf/unsimulated/wall{icon_state = "sandstone6"},/area/awaymission/beach) +"bd" = (/turf/unsimulated/wall{icon_state = "sandstone12"},/area/awaymission/beach) +"be" = (/turf/unsimulated/wall{icon_state = "sandstone10"},/area/awaymission/beach) +"bf" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 8},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"bg" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"bh" = (/obj/effect/decal/snow/sand/edge{icon_state = "gravsnow_corner"; dir = 1},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/machinery/light{dir = 8},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bi" = (/obj/effect/decal/snow/sand/edge{icon_state = "gravsnow_corner"; dir = 1},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bj" = (/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bk" = (/obj/effect/decal/snow/sand/edge{icon_state = "gravsnow_corner"; dir = 1},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bl" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/obj/effect/decal/snow/clean/edge,/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"bm" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal/snow/clean/edge{icon_state = "snow_corner"; dir = 6},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"bn" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 4},/obj/item/clothing/shoes/sandal,/obj/item/clothing/shoes/sandal,/obj/item/clothing/shoes/sandal,/obj/structure/closet/crate,/turf/unsimulated/beach/sand,/area/awaymission/beach) +"bo" = (/turf/unsimulated/wall{icon_state = "sandstone3"},/area/awaymission/beach) +"bp" = (/turf/unsimulated/wall{dynamic_lighting = 0; icon = null},/area/awaymission/beach) +"bq" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand,/area/awaymission/beach) +"br" = (/obj/effect/view_portal/visual{dir = 8; dist = 2; id = "mazeland_212"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"bs" = (/obj/effect/view_portal{id = "mazeland_122"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"bt" = (/obj/effect/view_portal{id = "mazeland_212"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"bu" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bv" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bw" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bx" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"by" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"bz" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 4},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"bA" = (/turf/unsimulated/wall{icon_state = "sandstone1"},/area/awaymission/beach) +"bB" = (/obj/effect/view_portal/visual{dir = 1; dist = 3; id = "beach_room"; radius = 2},/turf/unsimulated/floor,/area/awaymission/beach) +"bC" = (/mob/living/simple_animal/crab{faction = list("neutral","pirate")},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"bD" = (/turf/unsimulated/floor/lava,/area/awaymission) +"bE" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/obj/structure/closet/crate/secure/loot,/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"bF" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"bG" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bH" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bI" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bJ" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 1},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"bK" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 1},/obj/effect/view_portal{id = "beach"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"bL" = (/obj/effect/decal/snow/sand/edge{dir = 9; icon_state = "gravsnow_corner"; name = "rough sand"},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"bM" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 1},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"bN" = (/obj/effect/decal/snow/sand/edge{dir = 5; icon_state = "gravsnow_corner"; name = "rough sand"},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"bO" = (/obj/effect/view_portal{id = "mazeland_213"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"bP" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light,/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"bQ" = (/obj/effect/view_portal{id = "mazeland_413"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"bR" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/obj/effect/decal/snow/clean/edge{icon_state = "snow_corner"; dir = 6},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"bS" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bT" = (/obj/structure/flora/bush,/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bU" = (/obj/structure/flora/grass/green,/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"bV" = (/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"bW" = (/obj/effect/view_portal/visual{dir = 1; dist = 7; id = "mazeland_213"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"bX" = (/obj/effect/view_portal/visual{dir = 1; dist = 7; id = "mazeland_413"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"bY" = (/obj/effect/view_portal/visual{dist = 2; id = "mazeland_131"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"bZ" = (/obj/effect/view_portal{id = "mazeland_331"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ca" = (/obj/effect/view_portal{id = "mazeland_332"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"cb" = (/obj/effect/view_portal/visual{dist = 2; id = "mazeland_132"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"cc" = (/obj/structure/window/reinforced/tinted,/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"cd" = (/obj/machinery/door/window/southright,/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"ce" = (/obj/structure/window/reinforced/tinted,/obj/machinery/light,/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"cf" = (/obj/effect/light_emitter{invisibility = 101; light_color = "#ffffc0"; light_power = 2},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"cg" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 4},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"ch" = (/obj/effect/view_portal{id = "mazeland_131"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ci" = (/obj/effect/view_portal{id = "mazeland_132"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"cj" = (/obj/effect/view_portal/visual{dir = 2; dist = 7; id = "mazeland_411"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ck" = (/obj/effect/view_portal/visual{dir = 2; dist = 7; id = "mazeland_211"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"cl" = (/turf/unsimulated/wall/metal,/area/awaymission/spacehotel) +"cm" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"cn" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"co" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"cp" = (/obj/machinery/shower{dir = 8},/obj/structure/curtain/open/shower{anchored = 1; opacity = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; opacity = 1},/area/awaymission/spacehotel) +"cq" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 8},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"cr" = (/obj/item/candle/eternal,/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"cs" = (/obj/structure/mirror{dir = 8; pixel_x = -28},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ct" = (/obj/machinery/light{dir = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"cu" = (/obj/structure/mirror{dir = 4; pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"cv" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/structure/closet/crate/secure/loot,/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"cw" = (/obj/structure/flora/tree/pine,/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"cx" = (/obj/effect/view_portal{id = "poolland"},/obj/machinery/light/small,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"cy" = (/turf/unsimulated/floor,/area/awaymission/undersea{requires_power = 0}) +"cz" = (/obj/effect/levelref{id = "lavaland"; name = "lavaland"},/obj/effect/light_emitter{invisibility = 101; light_color = "#ffffc0"; light_power = 2},/obj/effect/rune,/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"cA" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/mob/living/simple_animal/hostile/bear,/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"cB" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"cC" = (/obj/structure/flora/grass/both,/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"cD" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/sand,/area/awaymission/beach) +"cE" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 10},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"cF" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"cG" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal/snow/clean/edge,/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"cH" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/beach/coastline,/area/awaymission/beach) +"cI" = (/obj/effect/waterfall{dir = 1; water_frequency = 104},/turf/unsimulated/beach/coastline,/area/awaymission/beach) +"cJ" = (/turf/unsimulated/beach/coastline,/area/awaymission/beach) +"cK" = (/obj/effect/waterfall{dir = 1; water_frequency = 97},/turf/unsimulated/beach/coastline,/area/awaymission/beach) +"cL" = (/obj/effect/waterfall{dir = 1; water_frequency = 94},/turf/unsimulated/beach/coastline,/area/awaymission/beach) +"cM" = (/obj/effect/waterfall{dir = 1; water_frequency = 192},/turf/unsimulated/beach/coastline,/area/awaymission/beach) +"cN" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/beach/coastline/dense,/area/awaymission/beach) +"cO" = (/turf/unsimulated/floor/chasm,/area/awaymission) +"cP" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 6},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"cQ" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal/snow/clean/edge{icon_state = "snow_corner"; dir = 6},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission{name = "Snowland"; requires_power = 0}) +"cR" = (/obj/machinery/poolcontroller/seacontroller,/turf/unsimulated/wall/metal,/area/awaymission/undersea{requires_power = 0}) +"cS" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/beach/water,/area/awaymission/beach) +"cT" = (/turf/unsimulated/beach/water,/area/awaymission/beach) +"cU" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/water/dense,/area/awaymission/beach) +"cV" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"cW" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"cX" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"cY" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/water,/area/awaymission/beach) +"cZ" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/water,/area/awaymission/beach) +"da" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/beach/water,/area/awaymission/beach) +"db" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/beach/water,/area/awaymission/beach) +"dc" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/beach/water,/area/awaymission/beach) +"dd" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 8},/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 4},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"de" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"df" = (/obj/item/weapon/mop,/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"dg" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/water,/area/awaymission/beach) +"dh" = (/obj/effect/decal/snow/sand/edge,/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"di" = (/obj/structure/mopbucket,/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"dj" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 6},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"dk" = (/turf/unsimulated/floor/chasm,/area/awaymission{name = "Snowland"; requires_power = 0}) +"dl" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 10},/turf/unsimulated/floor/snow,/area/awaymission{name = "Snowland"; requires_power = 0}) +"dm" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/beach/water/edge_drop,/area/awaymission/beach) +"dn" = (/turf/unsimulated/beach/water/drop,/area/awaymission/beach) +"do" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/beach/water/edge_drop,/area/awaymission/beach) +"dp" = (/obj/effect/light_emitter{invisibility = 101; light_color = "#ffffc0"; light_power = 2},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/floor/chasm,/area/awaymission{name = "Snowland"; requires_power = 0}) +"dq" = (/obj/effect/light_emitter{invisibility = 101; light_color = "#ffffc0"; light_power = 2},/turf/unsimulated/floor/chasm,/area/awaymission{name = "Snowland"; requires_power = 0}) +"dr" = (/obj/effect/light_emitter{invisibility = 101; light_color = "#ffffc0"; light_power = 2},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/floor/chasm,/area/awaymission{name = "Snowland"; requires_power = 0}) +"ds" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/water/deep/dense,/area/awaymission/beach) +"dt" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/water/deep/dense,/area/awaymission/beach) +"du" = (/turf/unsimulated/beach/water/deep/dense,/area/awaymission/beach) +"dv" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/beach/water/deep/dense,/area/awaymission/beach) +"dw" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/floor/chasm,/area/awaymission{name = "Snowland"; requires_power = 0}) +"dx" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/turf/unsimulated/floor/chasm,/area/awaymission{name = "Snowland"; requires_power = 0}) +"dy" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_n"},/turf/unsimulated/floor/chasm,/area/awaymission{name = "Snowland"; requires_power = 0}) +"dz" = (/obj/machinery/light{dir = 8},/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"dA" = (/obj/structure/ladder/dive_point/anchor{layer = 4.5},/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"dB" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/beach/water/deep/dense,/area/awaymission/beach) +"dC" = (/turf/unsimulated/beach/water/drop/dense,/area/awaymission/beach) +"dD" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_e"},/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_s"},/turf/unsimulated/beach/water/deep/dense,/area/awaymission/beach) +"dE" = (/obj/effect/decal/snow/sand/edge{name = "rough sand"},/obj/effect/decal/snow/sand/edge{name = "rough sand"; icon_state = "gravsnow_corner"; dir = 1},/turf/unsimulated/floor{icon_state = "asteroid"; name = "cave"},/area/awaymission) +"dF" = (/turf/unsimulated/floor/lava,/area/awaymission{name = "Snowland"; requires_power = 0}) +"dG" = (/obj/effect/decal{name = "rock"; icon = 'icons/turf/mining.dmi'; icon_state = "rock_side_w"},/turf/unsimulated/beach/water/drop/dense,/area/awaymission/beach) +"dH" = (/turf/unsimulated/floor/lava/dense,/area/awaymission{name = "Snowland"; requires_power = 0}) +"dI" = (/obj/machinery/light,/turf/unsimulated/beach/water/deep/wood_floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"; name = "Pool Floor"},/area/awaymission/undersea{requires_power = 0}) +"dJ" = (/turf/unsimulated/wall{icon_state = "sandstone2"},/area/awaymission) +"dK" = (/obj/effect/view_portal/visual{dist = 3; id = "cultroom"},/turf/template_noop,/area/awaymission) +"dL" = (/turf/unsimulated/wall{icon_state = "sandstone5"},/area/awaymission) +"dM" = (/turf/unsimulated/wall{icon_state = "sandstone12"},/area/awaymission) +"dN" = (/turf/unsimulated/wall{icon_state = "sandstone9"},/area/awaymission) +"dO" = (/turf/space,/area/space) +"dP" = (/obj/effect/view_portal{id = "turbinespace"},/turf/space,/area/space) +"dQ" = (/turf/unsimulated/wall,/area/space) +"dR" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows"; opacity = 0},/area/space) +"dS" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/space) +"dT" = (/turf/unsimulated/wall/fakeglass{dir = 4; icon_state = "fakewindows"; opacity = 0},/area/space) +"dU" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows"; opacity = 0},/area/awaymission/spacehotel) +"dV" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/awaymission/spacehotel) +"dW" = (/turf/unsimulated/wall/fakeglass{dir = 4; icon_state = "fakewindows"; opacity = 0},/area/awaymission/spacehotel) +"dX" = (/turf/template_noop,/area/awaymission/spacehotel) +"dY" = (/obj/machinery/camera{c_tag = "Room 110"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"dZ" = (/obj/machinery/camera{c_tag = "Room 111"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"ea" = (/obj/machinery/camera{c_tag = "Room 112"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"eb" = (/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ec" = (/obj/structure/toilet,/obj/machinery/light/small{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"ed" = (/obj/structure/closet/secure_closet/personal,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"ee" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/camera{c_tag = "Room X"; c_tag_order = 999; network = list("Hotel")},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"ef" = (/obj/machinery/camera{c_tag = "Room 210"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"eg" = (/obj/machinery/camera{c_tag = "Room 211"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"eh" = (/obj/machinery/camera{c_tag = "Room 212"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"ei" = (/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"ej" = (/obj/machinery/light/small{dir = 8},/obj/item/weapon/paper/hotel_scrap_2,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"ek" = (/obj/machinery/light/small{dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"el" = (/obj/machinery/light/small{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"em" = (/obj/effect/landmark/map_loader/hotel_room,/turf/template_noop,/area/awaymission/spacehotel) +"en" = (/obj/machinery/door/airlock,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"eo" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/obj/machinery/light{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"ep" = (/obj/machinery/light{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"eq" = (/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"er" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 12; pixel_y = 2},/obj/machinery/light{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"es" = (/obj/effect/decal/cleanable/flour{desc = "Probably."},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"et" = (/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour{desc = "Probably."},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"eu" = (/obj/machinery/light{dir = 1},/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission/spacehotel) +"ev" = (/obj/machinery/door/unpowered/hotel_door{icon = 'icons/obj/doors/Doorgold.dmi'; id = 110},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ew" = (/obj/machinery/door/unpowered/hotel_door{icon = 'icons/obj/doors/Doorgold.dmi'; id = 111},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ex" = (/obj/machinery/door/unpowered/hotel_door{icon = 'icons/obj/doors/Doorgold.dmi'; id = 112},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ey" = (/obj/machinery/door/unpowered/hotel_door{icon = 'icons/obj/doors/Doorgold.dmi'; id = 210},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ez" = (/obj/machinery/door/unpowered/hotel_door{icon = 'icons/obj/doors/Doorgold.dmi'; id = 211},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eA" = (/obj/machinery/door/unpowered/hotel_door{icon = 'icons/obj/doors/Doorgold.dmi'; id = 212},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eB" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 1},/area/space) +"eC" = (/obj/machinery/light{dir = 1},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eD" = (/obj/machinery/light,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eE" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/space) +"eF" = (/obj/structure/closet/crate/bin,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eG" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eH" = (/obj/machinery/light{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eI" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eJ" = (/obj/structure/stool/bed/chair/comfy,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eK" = (/obj/structure/window/reinforced,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eL" = (/turf/unsimulated/wall/fakeglass,/area/space) +"eM" = (/turf/unsimulated/floor{dir = 2; icon_state = "whitebluecorner"},/area/awaymission/spacehotel) +"eN" = (/turf/unsimulated/floor{dir = 2; icon_state = "whiteblue"},/area/awaymission/spacehotel) +"eO" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor{dir = 8; icon_state = "whitebluecorner"},/area/awaymission/spacehotel) +"eP" = (/obj/machinery/light{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eQ" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eR" = (/turf/unsimulated/floor/upperlevel,/area/awaymission/upperlevel) +"eS" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor/upperlevel,/area/awaymission/upperlevel) +"eT" = (/obj/machinery/door/unpowered/hotel_door{id = 107},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eU" = (/obj/machinery/door/unpowered/hotel_door{id = 108},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eV" = (/obj/machinery/door/unpowered/hotel_door{id = 109},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"eW" = (/obj/effect/decal{icon = 'icons/turf/floors.dmi'; icon_state = "wood_siding13"; name = "wood siding"},/turf/unsimulated/floor/grass,/area/awaymission/spacehotel) +"eX" = (/turf/unsimulated/floor{dir = 4; icon_state = "whiteblue"},/area/awaymission/spacehotel) +"eY" = (/turf/simulated/shuttle/floor,/area/awaymission/spacehotel) +"eZ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/awaymission/spacehotel) +"fa" = (/obj/machinery/door/unpowered/hotel_door{id = 207},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fb" = (/obj/machinery/door/unpowered/hotel_door{id = 208},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fc" = (/obj/machinery/door/unpowered/hotel_door{id = 209},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fd" = (/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fe" = (/obj/machinery/camera{c_tag = "Room 107"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"ff" = (/obj/machinery/camera{c_tag = "Room 108"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fg" = (/obj/machinery/camera{c_tag = "Room 109"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fh" = (/obj/effect/decal{icon = 'icons/turf/floors.dmi'; icon_state = "wood_siding12"; name = "wood siding"},/turf/unsimulated/floor/grass,/area/awaymission/spacehotel) +"fi" = (/obj/structure/window/plasmabasic,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fj" = (/turf/unsimulated/beach/water/drop,/area/awaymission/spacehotel) +"fk" = (/obj/machinery/light{dir = 1},/turf/unsimulated/beach/water/drop,/area/awaymission/spacehotel) +"fl" = (/turf/unsimulated/beach/water/deep,/area/awaymission/spacehotel) +"fm" = (/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/awaymission/spacehotel) +"fn" = (/obj/machinery/camera{c_tag = "Room 207"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fo" = (/obj/machinery/camera{c_tag = "Room 208"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fp" = (/obj/machinery/camera{c_tag = "Room 209"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fq" = (/obj/structure/window/plasmabasic{icon_state = "plasmawindow"; dir = 4},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fr" = (/turf/unsimulated/beach/water{icon = 'icons/turf/floors.dmi'; icon_state = "light_on"},/area/awaymission/spacehotel) +"fs" = (/obj/structure/window/plasmabasic{icon_state = "plasmawindow"; dir = 8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ft" = (/turf/unsimulated/beach/water,/area/awaymission/spacehotel) +"fu" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows3"},/area/space) +"fv" = (/obj/effect/landmark/map_loader/hotel_room{dir = 1},/turf/template_noop,/area/awaymission/spacehotel) +"fw" = (/mob/living/simple_animal/hostile/retaliate/carp,/turf/unsimulated/beach/water{icon = 'icons/turf/floors.dmi'; icon_state = "light_on"},/area/awaymission/spacehotel) +"fx" = (/obj/effect/landmark{name = "awaystart"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fy" = (/obj/structure/window/plasmabasic{icon_state = "plasmawindow"; dir = 1},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fz" = (/obj/structure/mirror,/turf/unsimulated/wall/metal,/area/awaymission/spacehotel) +"fA" = (/obj/effect/decal{icon = 'icons/turf/floors.dmi'; icon_state = "wood_siding14"; name = "wood siding"},/turf/unsimulated/floor/grass,/area/awaymission/spacehotel) +"fB" = (/obj/machinery/light{dir = 8},/turf/unsimulated/beach/water/drop,/area/awaymission/spacehotel) +"fC" = (/obj/structure/ladder/dive_point/buoy,/obj/structure/ladder/dive_point/buoy{id = "weirddive"; invisibility = 101},/turf/unsimulated/beach/water/deep,/area/awaymission/spacehotel) +"fD" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/beach/water/deep,/area/awaymission/spacehotel) +"fE" = (/obj/machinery/light,/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fF" = (/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fG" = (/obj/structure/closet/crate/bin,/obj/item/weapon/paper/crumpled/hotel_scrap_1,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fH" = (/obj/effect/landmark{name = "awaystart"},/turf/unsimulated/beach/water,/area/awaymission/spacehotel) +"fI" = (/obj/machinery/door/unpowered/hotel_door{id = 104},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fJ" = (/obj/machinery/door/unpowered/hotel_door{id = 105},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fK" = (/obj/machinery/door/unpowered/hotel_door{id = 106},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fL" = (/obj/machinery/door/unpowered/hotel_door{id = 204},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fM" = (/obj/machinery/door/unpowered/hotel_door{id = 205},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fN" = (/obj/machinery/door/unpowered/hotel_door{id = 206},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"fO" = (/obj/machinery/camera{c_tag = "Room 104"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fP" = (/obj/machinery/camera{c_tag = "Room 105"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fQ" = (/obj/machinery/camera{c_tag = "Room 106"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fR" = (/obj/machinery/light,/turf/unsimulated/beach/water/drop,/area/awaymission/spacehotel) +"fS" = (/obj/machinery/camera{c_tag = "Room 204"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fT" = (/obj/machinery/camera{c_tag = "Room 205"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fU" = (/obj/machinery/camera{c_tag = "Room 206"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"fV" = (/obj/item/weapon/beach_ball,/turf/simulated/shuttle/floor,/area/awaymission/spacehotel) +"fW" = (/turf/unsimulated/wall/metal,/area/awaymission) +"fX" = (/obj/effect/levelref{id = "hotel"; name = "hotel level 1"},/turf/unsimulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/awaymission/spacehotel) +"fY" = (/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/awaymission/spacehotel) +"fZ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor{dir = 1; icon_state = "whitebluecorner"},/area/awaymission/spacehotel) +"ga" = (/obj/effect/levelref{id = "hotel"; name = "hotel level 2"},/turf/unsimulated/floor/upperlevel,/area/awaymission/upperlevel) +"gb" = (/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 1},/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gc" = (/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 1},/obj/structure/stool/bed/chair/sofa/left{icon_state = "sofaend_left"; dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gd" = (/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 1},/obj/structure/table/woodentable,/obj/machinery/light{dir = 1},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ge" = (/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 1},/obj/structure/stool/bed/chair/sofa/right{icon_state = "sofaend_right"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gf" = (/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 1},/obj/structure/table/woodentable,/obj/machinery/light{dir = 1},/obj/item/weapon/paper/hotel_scrap_3,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gg" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gh" = (/obj/structure/table,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gi" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gj" = (/obj/structure/stool/bed/chair/sofa{icon_state = "sofamiddle"; dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gk" = (/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gl" = (/obj/structure/stool/bed/chair/sofa{icon_state = "sofamiddle"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gm" = (/obj/structure/stool/bed/chair/sofa/right{icon_state = "sofaend_right"; dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow"; dir = 8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gn" = (/obj/structure/stool/bed/chair/sofa/left{icon_state = "sofaend_left"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"go" = (/obj/machinery/light{dir = 8},/turf/template_noop,/area/awaymission/spacehotel) +"gp" = (/obj/structure/stool,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gq" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/closet/crate/bin,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gr" = (/obj/effect/landmark/map_loader/random{template_list = "light_floor_1.dmm;light_floor_2.dmm;light_floor_3.dmm"},/turf/template_noop,/area/awaymission/spacehotel) +"gs" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/template_noop,/area/awaymission/spacehotel) +"gt" = (/obj/machinery/door/unpowered/hotel_door{id = 101},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gu" = (/obj/machinery/door/unpowered/hotel_door{id = 102},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gv" = (/obj/machinery/door/unpowered/hotel_door{id = 103},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gw" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gx" = (/obj/machinery/door/unpowered/hotel_door{id = 201},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gy" = (/obj/machinery/door/unpowered/hotel_door{id = 202},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gz" = (/obj/machinery/door/unpowered/hotel_door{id = 203},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"gA" = (/obj/machinery/camera{c_tag = "Room 101"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"gB" = (/obj/machinery/camera{c_tag = "Room 102"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"gC" = (/obj/machinery/camera{c_tag = "Room 103"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"gD" = (/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gE" = (/mob/living/carbon/human/interactive/away/hotel/chef,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gF" = (/obj/machinery/camera{c_tag = "Room 201"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"gG" = (/obj/machinery/camera{c_tag = "Room 202"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"gH" = (/obj/machinery/camera{c_tag = "Room 203"; c_tag_order = 999; network = list("Hotel")},/turf/template_noop,/area/awaymission/spacehotel) +"gI" = (/obj/structure/stool,/turf/template_noop,/area/awaymission/spacehotel) +"gJ" = (/obj/structure/closet/crate/bin,/obj/item/weapon/paper/crumpled/hotel_scrap_6,/turf/template_noop,/area/awaymission/spacehotel) +"gK" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 1},/area/awaymission/spacehotel) +"gL" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gM" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/dough,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gN" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gO" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/rawsticks,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gP" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"gQ" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/awaymission/spacehotel) +"gR" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gS" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gT" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gU" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gV" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/salmonmeat,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gW" = (/obj/structure/table,/obj/item/weapon/book/manual/chef_recipes,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"gX" = (/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"gY" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"gZ" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"ha" = (/mob/living/carbon/human/interactive/away/hotel/bartender,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"hb" = (/turf/unsimulated/wall/fakeglass,/area/awaymission/spacehotel) +"hc" = (/obj/machinery/vending/dinnerware,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"hd" = (/obj/machinery/light,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"he" = (/obj/machinery/processor,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"hf" = (/obj/machinery/chem_master/condimaster,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"hg" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"hh" = (/obj/structure/table,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"hi" = (/obj/structure/closet/crate/bin,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"hj" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"hk" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"hl" = (/obj/structure/kitchenspike,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/awaymission/spacehotel/kitchen) +"hm" = (/obj/machinery/vending/boozeomat,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"hn" = (/obj/machinery/light,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"ho" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"hp" = (/obj/structure/table,/obj/machinery/chem_dispenser/soda,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"hq" = (/obj/structure/table,/obj/machinery/chem_dispenser/beer,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"hr" = (/obj/machinery/light,/obj/structure/table,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"hs" = (/obj/structure/closet/crate/bin,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"ht" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "150"},/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor,/area/awaymission/spacehotel) +"hu" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "150"},/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{icon_state = "whiteyellowfull"},/area/awaymission/spacehotel) +"hv" = (/turf/unsimulated/floor,/area/awaymission/spacehotel) +"hw" = (/turf/unsimulated/wall{dynamic_lighting = 0; icon = null},/area/awaymission/spacehotel) +"hx" = (/obj/effect/view_portal/visual{dir = 8; dist = 0; id = "hotel_11"; radius = 0},/turf/unsimulated/floor,/area/awaymission/spacehotel) +"hy" = (/obj/effect/view_portal{id = "hotel_21"},/turf/unsimulated/floor{icon_state = "ramptop"; dir = 4},/area/awaymission/spacehotel) +"hz" = (/obj/machinery/light{dir = 1},/turf/unsimulated/floor{icon_state = "rampbottom"; dir = 4},/area/awaymission/spacehotel) +"hA" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows3"},/area/awaymission/spacehotel) +"hB" = (/turf/unsimulated/floor{icon_state = "whiteyellow"; dir = 1},/area/awaymission/spacehotel) +"hC" = (/obj/machinery/light{dir = 1},/turf/unsimulated/floor{icon_state = "whiteyellow"; dir = 1},/area/awaymission/spacehotel) +"hD" = (/turf/unsimulated/floor{icon_state = "whiteyellowcorner"; dir = 1},/area/awaymission/spacehotel) +"hE" = (/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/spacehotel) +"hF" = (/turf/unsimulated/floor{icon_state = "whiteyellowcorner"; dir = 4},/area/awaymission/spacehotel) +"hG" = (/obj/structure/ladder{height = 1; icon_state = "ladder10"; id = "service"},/turf/unsimulated/floor{icon_state = "whiteyellow"; dir = 5},/area/awaymission/spacehotel) +"hH" = (/turf/unsimulated/floor{icon_state = "ramptop"; dir = 4},/area/awaymission/spacehotel) +"hI" = (/obj/effect/view_portal{id = "hotel_11"},/turf/unsimulated/floor{icon_state = "rampbottom"; dir = 4},/area/awaymission/spacehotel) +"hJ" = (/obj/effect/view_portal/visual{dir = 4; dist = 0; id = "hotel_21"; opacity = 0; radius = 0},/turf/unsimulated/floor,/area/awaymission/spacehotel) +"hK" = (/obj/machinery/light{dir = 1},/turf/unsimulated/floor/upperlevel,/area/awaymission/upperlevel) +"hL" = (/obj/machinery/light/built{icon_state = "tube1"; dir = 1},/turf/unsimulated/floor{icon_state = "whiteyellow"; dir = 1},/area/awaymission/spacehotel) +"hM" = (/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{icon_state = "whiteyellow"; dir = 1},/area/awaymission/spacehotel) +"hN" = (/obj/effect/decal/cleanable/blood/old,/obj/structure/ladder{height = 2; icon_state = "ladder01"; id = "service"},/turf/unsimulated/floor{icon_state = "whiteyellow"; dir = 5},/area/awaymission/spacehotel) +"hO" = (/obj/effect/view_portal/visual{dir = 8; dist = 7; id = "hotel_12"; radius = 2},/turf/unsimulated/floor,/area/awaymission/spacehotel) +"hP" = (/obj/effect/view_portal{id = "hotel_22"},/turf/unsimulated/floor{icon_state = "ramptop"; dir = 4},/area/awaymission/spacehotel) +"hQ" = (/turf/unsimulated/floor{icon_state = "rampbottom"; dir = 4},/area/awaymission/spacehotel) +"hR" = (/obj/machinery/door/airlock/glass{name = "Employees Only"; req_access_txt = "150"},/turf/unsimulated/floor{dir = 8; icon_state = "whitered"},/area/awaymission/spacehotel) +"hS" = (/turf/unsimulated/floor{icon_state = "whiteyellow"; dir = 4},/area/awaymission/spacehotel) +"hT" = (/obj/effect/view_portal{id = "hotel_12"},/turf/unsimulated/floor{icon_state = "rampbottom"; dir = 4},/area/awaymission/spacehotel) +"hU" = (/obj/effect/view_portal/visual{dir = 4; dist = 0; id = "hotel_22"; opacity = 0; radius = 0},/turf/unsimulated/floor,/area/awaymission/spacehotel) +"hV" = (/obj/machinery/door/airlock/glass{icon_state = "door_locked"; locked = 1; name = "Employees Only"; req_access_txt = "150"},/obj/item/tape/police{icon_state = "police_door"; layer = 3.2},/turf/unsimulated/floor{dir = 8; icon_state = "whitered"},/area/awaymission/spacehotel) +"hW" = (/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{icon_state = "white"},/area/awaymission/spacehotel) +"hX" = (/obj/effect/view_portal/visual{dir = 8; dist = 0; id = "hotel_13"; radius = 0},/turf/unsimulated/floor,/area/awaymission/spacehotel) +"hY" = (/obj/effect/view_portal{id = "hotel_23"},/turf/unsimulated/floor{icon_state = "ramptop"; dir = 4},/area/awaymission/spacehotel) +"hZ" = (/obj/machinery/light,/turf/unsimulated/floor{icon_state = "rampbottom"; dir = 4},/area/awaymission/spacehotel) +"ia" = (/turf/unsimulated/floor{icon_state = "whiteyellow"},/area/awaymission/spacehotel) +"ib" = (/turf/unsimulated/floor{icon_state = "whiteyellowcorner"; dir = 8},/area/awaymission/spacehotel) +"ic" = (/turf/unsimulated/floor{icon_state = "whiteyellowcorner"},/area/awaymission/spacehotel) +"id" = (/turf/unsimulated/floor{icon_state = "whiteyellow"; dir = 6},/area/awaymission/spacehotel) +"ie" = (/turf/unsimulated/wall/fakeglass{dir = 1; icon_state = "fakewindows2"},/area/space) +"if" = (/obj/effect/view_portal{id = "hotel_13"},/turf/unsimulated/floor{icon_state = "rampbottom"; dir = 4},/area/awaymission/spacehotel) +"ig" = (/obj/effect/view_portal/visual{dir = 4; dist = 0; id = "hotel_23"; opacity = 0; radius = 0},/turf/unsimulated/floor,/area/awaymission/spacehotel) +"ih" = (/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{icon_state = "whiteyellow"},/area/awaymission/spacehotel) +"ii" = (/obj/machinery/door/airlock{name = "Supply"; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission/spacehotel) +"ij" = (/obj/machinery/door/airlock/glass{name = "Mail Room"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ik" = (/obj/machinery/door/airlock{name = "Security"; req_access_txt = "150"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"il" = (/obj/machinery/door/airlock{name = "Electrical Room"; req_access_txt = "150"},/obj/structure/cable/heavyduty{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/unsimulated/floor,/area/awaymission/spacehotel) +"im" = (/obj/machinery/door/airlock{name = "Employees Only"; req_access_txt = "150"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"in" = (/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/wall/metal,/area/awaymission/spacehotel) +"io" = (/obj/effect/decal/cleanable/blood/old,/obj/structure/falsewall,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"ip" = (/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission/spacehotel) +"iq" = (/obj/structure/closet/crate/secure/loot,/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission/spacehotel) +"ir" = (/turf/unsimulated/floor{icon_state = "warning"; dir = 8},/area/awaymission/spacehotel) +"is" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"it" = (/obj/machinery/vending/sovietsoda,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"iu" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; dir = 4; name = "Hotel Security Monitor"; network = list("Hotel"); use_power = 0},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"iv" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"iw" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; name = "Hotel Security Monitor"; network = list("Hotel"); use_power = 0},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ix" = (/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iy" = (/obj/item/stack/cable_coil/random,/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iz" = (/obj/structure/cable/heavyduty{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iA" = (/obj/machinery/computer/account_database,/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iB" = (/turf/unsimulated/floor/wood,/area/awaymission/spacehotel) +"iC" = (/obj/structure/window/basic{icon_state = "window"; dir = 8},/obj/structure/flora/ausbushes/fernybush,/turf/unsimulated/floor/grass,/area/awaymission/spacehotel) +"iD" = (/turf/unsimulated/wall{icon = 'icons/turf/walls/cult_wall.dmi'; icon_state = "cult"; desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick"},/area/awaymission/spacehotel) +"iE" = (/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"iF" = (/obj/structure/closet/crate/plastic,/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission/spacehotel) +"iG" = (/obj/machinery/vending/snack,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"iH" = (/obj/structure/stool/bed/chair{dir = 1},/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"iI" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"iJ" = (/obj/structure{desc = "It appears to be similar to a SMES."; icon = 'icons/obj/power.dmi'; icon_state = "smes"; name = "WaffeCo PSU"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iK" = (/obj/structure{desc = "It appears to be some sort of generator."; icon = 'icons/obj/power.dmi'; icon_state = "teg"; name = "WaffeCo PGU"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iL" = (/obj/machinery/power/supermatter_shard,/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iM" = (/obj/machinery/gateway{dir = 9},/turf/unsimulated/floor{icon_state = "warning"; dir = 9},/area/awaymission/spacehotel) +"iN" = (/obj/machinery/gateway{dir = 1},/turf/unsimulated/floor{icon_state = "warning"; dir = 1},/area/awaymission/spacehotel) +"iO" = (/obj/machinery/gateway{dir = 5},/turf/unsimulated/floor{icon_state = "warning"; dir = 5},/area/awaymission/spacehotel) +"iP" = (/obj/structure/window/basic{icon_state = "window"; dir = 8},/obj/structure/flora/grass/both,/turf/unsimulated/floor/grass,/area/awaymission/spacehotel) +"iQ" = (/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"iR" = (/obj/effect/gibspawner/human,/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"iS" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters/preopen,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"iT" = (/obj/machinery/vending/cola,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"iU" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; dir = 4; name = "Hotel Security Monitor"; network = list("Hotel"); use_power = 0},/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"iV" = (/obj/machinery/light/small{dir = 8},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iW" = (/obj/structure/cable/heavyduty{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/heavyduty{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iX" = (/obj/structure/cable/heavyduty{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iY" = (/obj/structure/cable/heavyduty{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/heavyduty{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/heavyduty{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"iZ" = (/obj/structure/cable/heavyduty{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/unsimulated/floor/plating{icon_state = "platingdmg1"},/area/awaymission/spacehotel) +"ja" = (/obj/structure/cable/heavyduty{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/heavyduty{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"jb" = (/obj/machinery/light/small{dir = 4},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"jc" = (/obj/machinery/gateway{dir = 8},/turf/unsimulated/floor{icon_state = "warning"; dir = 8},/area/awaymission/spacehotel) +"jd" = (/obj/machinery/gateway/centeraway{calibrated = 0},/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission/spacehotel) +"je" = (/obj/machinery/gateway{dir = 4},/turf/unsimulated/floor{icon_state = "warning"; dir = 4},/area/awaymission/spacehotel) +"jf" = (/obj/structure/window/basic{icon_state = "window"; dir = 8},/obj/structure/flora/rock,/obj/structure/flora/grass/brown,/turf/unsimulated/floor/grass,/area/awaymission/spacehotel) +"jg" = (/obj/item/candle,/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"jh" = (/obj/effect/rune,/obj/item/organ/brain,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"ji" = (/obj/item/candle,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"jj" = (/obj/item/weapon/tome,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"jk" = (/obj/structure/closet/crate/critter,/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission/spacehotel) +"jl" = (/obj/machinery/door/airlock/glass{name = "Lobby"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jm" = (/obj/effect/spawner/snpc_squad{squad_type = /mob/living/carbon/human/interactive/away/hotel/guard},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jn" = (/obj/structure{desc = "It appears to be similar to a SMES."; icon = 'icons/obj/power.dmi'; icon_state = "smes"; name = "WaffeCo PSU"},/turf/unsimulated/floor/plating{icon_state = "platingdmg1"},/area/awaymission/spacehotel) +"jo" = (/obj/effect/decal/remains/human,/obj/item/clothing/head/soft/red,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jp" = (/obj/item/toy/prize/honk,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jq" = (/obj/item/toy/spinningtoy,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jr" = (/obj/item/weapon/bananapeel,/obj/item/toy/spinningtoy,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"js" = (/obj/structure/barricade/wooden,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jt" = (/obj/machinery/door/airlock/glass,/obj/item/tape/engineering{icon_state = "engineering_door"; layer = 3.2},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ju" = (/obj/machinery/gateway{dir = 10},/turf/unsimulated/floor{icon_state = "warning"; dir = 10},/area/awaymission/spacehotel) +"jv" = (/obj/machinery/gateway,/turf/unsimulated/floor{icon_state = "warning"},/area/awaymission/spacehotel) +"jw" = (/obj/machinery/gateway{dir = 6},/turf/unsimulated/floor{icon_state = "warning"; dir = 6},/area/awaymission/spacehotel) +"jx" = (/obj/structure/window/basic{icon_state = "window"; dir = 8},/obj/structure/flora/ausbushes/palebush,/turf/unsimulated/floor/grass,/area/awaymission/spacehotel) +"jy" = (/obj/item/device/flashlight/lantern{on = 1},/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"jz" = (/obj/effect/rune,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"jA" = (/obj/structure/stool/bed/chair/comfy,/obj/item/device/soulstone,/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/remains/human,/obj/effect/view_portal{id = "cultroom"},/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"jB" = (/obj/effect/gibspawner/human,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"jC" = (/obj/machinery/atm{pixel_y = 32},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jD" = (/obj/effect/decal/warning_stripes/white/hollow,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jE" = (/obj/item/weapon/paper/pamphlet{pixel_x = -8; pixel_y = 4},/obj/structure/table/reinforced,/obj/item/weapon/paper/pamphlet/hotel{pixel_x = 8; pixel_y = 8},/obj/item/weapon/paper/pamphlet/hotel{pixel_x = 8; pixel_y = 4},/obj/item/weapon/paper/pamphlet/hotel{pixel_x = 8},/obj/item/weapon/paper/pamphlet/hotel{pixel_x = 8; pixel_y = -4},/obj/item/weapon/paper/pamphlet/hotel{pixel_x = 8; pixel_y = -8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"jF" = (/obj/item/latexballon,/obj/item/latexballon,/obj/structure/table/glass,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"jG" = (/obj/structure/rack,/obj/item/key,/obj/item/key,/obj/item/key,/obj/item/key,/obj/item/key,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"jH" = (/obj/structure/stool/bed/chair/comfy,/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jI" = (/obj/structure/stool/bed/chair/comfy,/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jJ" = (/obj/structure/cable/heavyduty{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"jK" = (/obj/structure/cable/heavyduty{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/heavyduty{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"jL" = (/obj/structure/cable/heavyduty{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"jM" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jN" = (/obj/item/trash/candle,/obj/item/trash/candle,/obj/item/trash/candle,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jO" = (/obj/structure/window/basic{icon_state = "window"; dir = 8},/obj/structure/flora/bush,/turf/unsimulated/floor/grass,/area/awaymission/spacehotel) +"jP" = (/obj/item/weapon/restraints/legcuffs,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"jQ" = (/obj/structure/closet/crate/secure/unknownchemicals,/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission/spacehotel) +"jR" = (/obj/structure/closet/crate/bin,/obj/item/weapon/paper/crumpled/hotel_scrap_7,/turf/unsimulated/floor{icon_state = "floor"},/area/awaymission/spacehotel) +"jS" = (/obj/structure/table/reinforced,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"jT" = (/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"jU" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; dir = 1; name = "Hotel Security Monitor"; network = list("Hotel"); use_power = 0},/obj/machinery/light,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jV" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; dir = 1; name = "Hotel Security Monitor"; network = list("Hotel"); use_power = 0},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jW" = (/obj/machinery/light/small,/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"jX" = (/obj/item/toy/sword,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jY" = (/obj/item/target/syndicate,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"jZ" = (/obj/item/trash/sosjerky,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ka" = (/obj/item/weapon/gun/projectile/shotgun/toy/crossbow,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"kb" = (/obj/machinery/space_heater,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"kc" = (/obj/machinery/door/airlock{name = "Supply Closet"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"kd" = (/obj/machinery/door/airlock/glass{name = "Gateway"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ke" = (/obj/item/weapon/melee/cultblade,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"kf" = (/obj/item/weapon/kitchen/knife/butcher{blood_DNA = 1e+009},/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) +"kg" = (/obj/machinery/light{dir = 8},/obj/structure/stool/bed/chair/sofa/left{icon_state = "sofaend_left"; dir = 4},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"kh" = (/obj/effect/hotel_controller,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ki" = (/obj/item/weapon/pen,/obj/structure/table/reinforced,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"kj" = (/obj/structure/stool/bed/chair{dir = 8},/mob/living/carbon/human/interactive/away/hotel/concierge,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"kk" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"kl" = (/obj/structure/stool/bed/chair/sofa{icon_state = "sofamiddle"; dir = 4},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"km" = (/obj/item/weapon/clipboard,/obj/item/weapon/paper,/obj/structure/table/reinforced,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"kn" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"ko" = (/obj/structure/filingcabinet/filingcabinet,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"kp" = (/obj/structure/filingcabinet/filingcabinet,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"kq" = (/obj/structure/stool/bed/chair/sofa/corner{dir = 4},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"kr" = (/obj/structure/stool/bed/chair/sofa{dir = 1},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ks" = (/obj/machinery/light,/obj/structure/stool/bed/chair/sofa/left{dir = 1},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"kt" = (/obj/machinery/light,/obj/structure/stool/bed/chair/sofa/right{dir = 1},/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"ku" = (/obj/structure/stool/bed/chair/sofa/left{dir = 1},/obj/effect/decal/warning_stripes/white/hollow,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel) +"kv" = (/obj/item/weapon/paper_bin,/obj/structure/table/glass,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"kw" = (/obj/structure/table/glass,/turf/unsimulated/floor/carpet,/area/awaymission/spacehotel/reception) +"kx" = (/turf/unsimulated/wall/fakeglass{dir = 10; icon_state = "fakewindows"},/area/space) +"ky" = (/turf/unsimulated/wall/fakeglass{dir = 4; icon_state = "fakewindows"; opacity = 1},/area/space) +"kz" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/unsimulated/floor/plating,/area/awaymission/spacehotel) +"kA" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/space) +"kB" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 6},/area/space) +"kC" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/awaymission) +"kD" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/awaymission) +"kE" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/awaymission) +"kF" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/awaymission) +"kG" = (/turf/unsimulated/wall/fakeglass{dir = 4; icon_state = "fakewindows"; opacity = 1},/area/awaymission) +"kH" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/awaymission) +"kI" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/plating,/area/awaymission) +"kJ" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/awaymission) +"kK" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/space) +"kL" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/space) +"kM" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/space) +"kN" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows3"},/area/awaymission) +"kO" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/shuttle/wall{icon_state = "swallc4"; dir = 2},/area/awaymission) +"kP" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor,/area/awaymission) +"kQ" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/awaymission) +"kR" = (/obj/structure/stool/bed/chair{dir = 8},/obj/item/weapon/paper/hotel_scrap_4,/turf/simulated/shuttle/floor,/area/awaymission) +"kS" = (/turf/simulated/shuttle/floor,/area/awaymission) +"kT" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor,/area/awaymission) +"kU" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/unsimulated/floor/plating/airless,/area/awaymission) +"kV" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/space,/area/awaymission) +"kW" = (/turf/simulated/shuttle/wall{icon_state = "swallc4"; dir = 2},/area/space) +"kX" = (/turf/simulated/shuttle/wall/interior,/area/space) +"kY" = (/turf/simulated/shuttle/wall{icon_state = "swall3"},/area/space) +"kZ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/space,/area/space) +"la" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/old,/turf/simulated/shuttle/floor,/area/awaymission) +"lb" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor,/area/awaymission) +"lc" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/old,/turf/simulated/shuttle/floor,/area/awaymission) +"ld" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/awaymission) +"le" = (/turf/simulated/shuttle/wall{icon_state = "swallc1"; dir = 2},/area/awaymission) +"lf" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor,/area/awaymission) +"lg" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/cleanable/blood/old,/turf/simulated/shuttle/floor,/area/awaymission) +"lh" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/space) +"li" = (/turf/simulated/shuttle/wall{icon_state = "swallc1"; dir = 2},/area/space) +"lj" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/awaymission) +"lk" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/space) +"ll" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"lm" = (/obj/structure/curtain/open/shower,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/awaymission{name = "Amazing Place"; requires_power = 0}) +"ln" = (/obj/item/weapon/paper/hotel_scrap_8,/turf/unsimulated/floor{name = "engraved floor"; icon_state = "cult"},/area/awaymission/spacehotel) (1,1,1) = {" -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacadacacacacacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacaeaiahaiaiaiafaiaiaiaiaiaiacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaabababababababababababababababababababacajamamamamamanaiaiaiaiaiaiacababababababababababababababababababaaaaaaaaaa -aaaaaaabaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoapaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoabaaaaaaaaaa -aaaaaaabaoaqaqarasatauavawaoaqaqaraxayauavawaoazazazazazazazazazazazazazaoaAaoaBaoaCaCaCaDaCaCaCaoaEaoaFaoaoabaaaaaaaaaa -aaaaaaabaoaqaqaGaHaHaHaHaIaoaqaqaGaHaHaHaHaJaoaHazazazazaKaLaMazazazazaoaoaNaoaNaoaOaNaNaNaNaNaPaoaNaoaNaoaoabaaaaaaaaaa -aaaaaaabaoaQaRaSaHaHaHaHaIaoaQaRaSaHaHaHaHaJaoaHaHazazazaTaUaVazazazaHaoaoaWaoaWaoaoaoaoaWaoaoaoaoaWaoaWaoaoabaaaaaaaaaa -aaaaaaabaoaXaYaZaHaHbaaHbbaoaXaYaZaHaHbaaHbcaoaHaHaHazazbdbebfazazaHaHaobgaNaNaNaNaNbhaNaNaNbhaNaNbibiaNbjaoababaaaaaaaa -aaaaaaabaoaoaoaobkbkaoaoaoaoaoaoaoblblaoaoaoaoaHaHaHaHazazazazazazaHaHaoaoaoaoaoaoaoaoaNaNaNaoaoaoaoaoaoaoaoaoabaaaaaaaa -aaaaaaaabmaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHazazazazaHaHaHaHbnaHaHaHaHaHaHbnaHaHaHbnaHaHaHaHaHaHbnaoabaaaaaaaa -aaaaaaaaboaHbpaHaHaHbpaHaHaHbpaHaHaHbpaHaHaHbpaHaHaHaHaHbqaHbqaHaHaHaHaHaHaHbraHaHbraHaHbraHaHbraHaHbraHaHaHaoabaaaaaaaa -aaaaaaaabsaHaHaHaHaHbqaHaHaHaHaHbqaHaHaHaHaHaHaHaHaHaHbtaobuaobvaHaHaHbwbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbyaoabaaaaaaaa -aaaaaaabaoaoaobzaoaoaoaoaobAaoaoaoaoaobBaoaoaoaHaHaHaHaHbnaHbnaHaHaHaHbCbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbEaoabaaaaaaaa -aaaaaaabaoaHbFbGaHavaoaHbHbIaHbJaoaHbKbLaHavaoaHaHaHaHaHaHaHaHaHaHaHaHbCbDaqaqaqaqaqaqaqbMaqaqaqaqaqaqaqbDbNbmaaaaaaaaaa -aaaaaaabaobvaHbaaHbOaobvaHaHaHbPaobvaHaHaHbQaoaHaHaHaHaHbpaHbpaHaHaHaHbCbDaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqbDbNboaaaaaaaaaa -aaaaaaaabRaHaHaHaHbSaoaHaHaHaHbPaoaHaHaHaHbQaoaHaHaHaHaHaHaHaHaHaHaHaHbCbDaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqbDbNboaaaaaaaaaa -aaaaaaabaobTbTbUbTbVaobTbTbUbTbVaobTbTbUbTbVaoaHaHaHaHaHaHaHaHaHaHaHaHbCbDaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqbDbNboaaaaaaaaaa -aaaaaaabbWbXaYaZbYaobWbXaYaZbYaobWbZcaaZbYaoaoaHaHaHaHaHbpaHbpaHaHaHaHbCbDaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqbDbNboaaaaaaaaaa -aaaaaaabaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaHaHaHaHaHaHaHaHaHaHaHaHbCbDcbaqaqaqaqaqaqaqaqaqaqaqaqaqccbDbNboaaaaaaaaaa -aaaaaaaabmaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHbqaHbqaHaHaHaHbCbDaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqbDbNboaaaaaaaaaa -aaaaaaaaboaHbpaHaHaHbpaHaHaHbpaHaHaHbpaHaHaHbpaHaHaHaHbtaobuaobvaHaHaHbCbDaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqbDbNboaaaaaaaaaa -aaaaaaaabsaHaHaHaHaHbqaHaHcdcdaHbqaHaHaHaHaHaHaHaHaHaHaHbnaHbnaHaHaHaHbCbDaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqbDbNboaaaaaaaaaa -aaaaaaabaoaoaoceaoaoaoaoaocfaoaoaoaoaocgaoaoaoaHaHaHaHaHaHaHaHaHaHaHaHbCbDaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqbDbNboaaaaaaaaaa -aaaaaaabaoaHchciaHcjaoaHckclaHavaoaHcmcnaHcoaoaHaHaHaHaHbpaHbpaHaHaHaHbCbDaqaqaqaqaqaqaqcpaqaqaqaqaqaqaqbDbNbsaaaaaaaaaa -aaaaaaabaobvaHaHaHcqaocrcrcrcrcsaobvaHaHaHctaoaHaHaHaHaHaHaHaHaHaHaHaHbCbDbDbDcubDbDbDbDbDbDbDbDbDbDbDbDbDbEaoabaaaaaaaa -aaaaaaaabRaHaHaHaHcqaoaHcrcrcrcvaoaHaHaHaHctaoaHaHaHaHaHaHaHaHaHaHaHaHcwaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRcxaoabaaaaaaaa -aaaaaaabaobTbTbUbTbVaobTbTcyczbVaobTbTbUbTbVaoaHaHaHaHaHbpaHbpaHaHaHaobvaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHbmaaaaaaaaaa -aaaaaaabbWbXaYaZbYaobWbXaYaZbYaobWbXaYaZbYaoaoaHaHaHaHaHaHaHaHaHaHaHaHaHcAcBcCcAcBcCcAcBcCcAcBcCcAcBcCcAcBcCboaaaaaaaaaa -aaaaaaabaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaHaHaHaHaHaHaHaHaHaHaHaobvaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHboaaaaaaaaaa -aaaaaaaabmaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHbqaHbqaHaHaHaHaHcAcBcCcAcBcCcAcBcCcAcBcCcAcBcCcAcBcCboaaaaaaaaaa -aaaaaaaaboaHbpaHaHaHbpaHaHaHbpaHaHaHbpaHaHaHbpaHaHaHaHbtaobuaobvaHaHaobvaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHbsaaaaaaaaaa -aaaaaaaabsaHaHaHaHaHbqaHaHaHaHaHbqaHaHaHaHaHaHaHaHaHaHaHbnaHbnaHaHaHaHaHcDcDcDcDcDcDcDcDcDcDcDcDcDcDcDcDcDbtaoabaaaaaaaa -aaaaaaabaoaoaocEaoaoaoaoaocFaoaoaoaoaocGaoaoaoaHaHaHaHaHbpaHbpaHaHaHaHcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBcBaoabaaaaaaaa -aaaaaaabaoaHcHcIaHcJaoaHcKcLaHavaocMcNcOaHavaoaHaHaHaHaHaHaHaHaHaHaHaHcBcPcPcPcQcPcPcPcPcPcPcPcPcPcPcPcQcPcPaoabaaaaaaaa -aaaaaaabaoaHaHagcScTaobvaHaHaHcUaocVcWcWaHcXaoaHaHaHaHaHaHaHaHaHaHaHaHaocYcPcZdadbdbcPcPcPcPcPdadadadadacPcYaoabaaaaaaaa -aaaaaaaabRaHdcddcSdeaoaHaHaHaHcUaocWdfcWaHdgaoaHaHaHaHaHbpaHbpaHaHaHaHaodhcPdadidjdkcPcPcPcQcPdadadldadacPdhaoabaaaaaaaa -aaaaaaabaodmdndodndpaobTbTbUbTbVaodqdrdsdrbVaoaHaHaHaHaHaHaHaHaHaHaHaHaodtcPcQcPcPcPcPcPcPcPcPcPcPcPcPcPcPdtaoabaaaaaaaa -aaaaaaabbWduakdwalaobWbXaYaZbYaobWbXaYaZbYaoaoaHaHaHaHaHbqaHbqaHaHaHaHaocPdydzdAdBdCcQdycPdycPcPdDdEdFcPdycQaoabaaaaaaaa -aaaaaaabaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaHaHaHaHbtaobuaobvaHaHaHaoaoaoaoaoaoaoaoaodGaoaoaoaoaoaoaoaoaoaoabaaaaaaaa -aaaaaaabaoaHaHaHaHaHaHaHaHaHdHaHaHaHaHaHdIdIdIaHaHaHaHaHbnaHbnaHaHaHaHaHaHaHaHbnaHaHaHaHaHaHaHaHaHaHcWaHaHcWbmaaaaaaaaaa -aaaaaaabaodJaHdKaHaHaHaHaHaHaHdHaHaHaHaHdIdIdIaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHcWcWcWcWaHboaaaaaaaaaa -aaaaaaabaoaHaHaHaHaHaHdHaHaHaHaHaHdLaHaHaHdIdIdIaHaHaHaHbpaHbpaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHcWcWaHcWaHaHbsaaaaaaaaaa -aaaaaaabaodMaHdJaHaHaHaHaHaHaHdLaHaHaHaHaHaHdNaoaHaHaHaHaHaHaHaHaHaHaHaoaoaoaodOaoaoaoaoaoaodPdPdPaoaoaoaoaoaoabaaaaaaaa -aaaaaaabaodQdRaHaHaHaHdLaHaHaHaHaHaHdLaHaHaHaHaodSaHaHaHaHaHaHaHaHaHdTaodUdVaHaHaHdWdWdWaodXdXdYdXdXdXdXdXdXaoabaaaaaaaa -aaaaaaabaoaodZeaaHdHaHaHaHdHaHaHdHaHaHaHaHaHaHaodSaHaHaHbpaHbpaHaHaHebaodUcCaHaHaHecededaodXeeefeedXdXdXdXeeaoabaaaaaaaa -aaaaaaababaoegdJaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaodSaHaHaHaHaHaHaHaHaHehaodUdVaHaHaHaHaHaHaodXeeeeeiejekeeeeelaoabaaaaaaaa -aaaaaaaaabaoaHaHaHaHaHdLaHaHaHaHaHdHaHaHaHdIdIaoaoaoaoaodOaodOaoaoaoaoaodUcCaHaHaHaHaHaHaoeeeeeeemenemeeeoeeaoabaaaaaaaa -aaaaaaaaabaoaHepaHaHaHaHaHaHaHaHdHaHaHaHaHdIdIaoaHaHaHaHaHbnaHaHeqeresaobvaHaHbretbreuetaodXeeeeekemekeeeveeaoabaaaaaaaa -aaaaaaaaabaoewewaHaHaHaHaHaHaHaHaHaHaHaHaHdIdIdOaHaHaHaHbpaHbpaHexaHaHdOaHaHaHeyeyeyeyeyaodXezeoeeeeeAeedXdXaoabaaaaaaaa -aaaaaaaaabaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaobvaHaHaHaHaHaHaHeBeCaHdPaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoabaaaaaaaa -aaaaaaaaabababababababababababababababababababbmaHaHaHaHaHaHaHaHeDcCeEaoababababababababababababababababababababaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboaHaHaHaHbpaHbpaHexaHeEaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboaHaHaHaHaHaHaHbqexeFexaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeGeHeHeIaoeJaoeJaoaoaoaoaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeJaoeJababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeKeLeMeHeIeNeOeNeOeNeMeHeIeNePaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeKbReQeReSeSeSbDbDbDbDbDeSeSeSeTeUeVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabReWeXbDbDbDbDbDeSeSeSbDbDbDbDeYeUeVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZbRfabDeSeWeSbDbDeRbDbDfbfceSeTeUeVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZeNeMeHeIeNeLeLeLeNeMeHeIeNfdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababacacacacacacacacacacacacacacacacacacacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeafaeafaeagagagagagaeafaeahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaiaiaiajaiaiaiabacacacacacacacacacacacacacakalacacacacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeamamanaoafaeapaeaqaeagagagagagaearaeahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaiaiaiaiaiaiaiabacacacacacacacacacacacakasatatasasasasalacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeauaeaeaeaeaeavaeawaeaeaeaeaeaeaeaxaeahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaiaiaiaiayaiaiabacacacacacacacakasasasatatatatatatatatatasasalacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeamamazaAafaeamaeamamaBaAafaeamamamaeahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaaaaaaaaaaaCaDaDaDaDaDaCaaaaaaaaaaaaaaaaabaiaiaiaiaiaiaiabacaEasasasasasatatatatatatatatataFatataGatataHacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaIaeaeaeaeaeaeaeaPaeamaeahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaaaaaaaaaaaCaDaDaJaDaDaCaaaaaaaaaKaaaaaaabaiaiaiaiaiaiaiabacacaLatatatatatatataMaMaMatatatatatatatatatatalacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeafaNaOamamaeaPamamaeafaQamamamaeauaeahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaaaaaaaaaaaCaRaSaTaUaVaCaaaaaaaWaXaaaaaaabaYaiaiaiaiaZbaabacacaLatatatatatatbbbcbdbebfatatatatatatatatatbgacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaPaeamaeauaeaeaeaeaeaeaeamaeahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaaaaaaaaaaaabhbibjbibkaaaaaablbmaaaaaaaaabaiaiaiaiaiaiaiabacacaLatatatatatatbnbobpbobfatatatatbqatatataHacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeafbrbsamamaeamaeamambtaAafaellaeamaeahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaaaaaaaaaabubjbjbjbjbjbvaaaabwbxaaaaaaaaabaiaiaiaiaiaiaiabacacbyatatatatatatbzbAbBbAbfatbCatatatatatataHacacadadadadadadadadbDbDbDbDbDbDbDbDbDbDbDbDbDadadadadadadadadaeaeaeaeaeaeaeamaeaeaeaeaeaeaelmamamaeahahahahahahahahahahahahahahahahahahahahahahah +aabEbFaabGbHbHbHbjbjbjbjbjbjbjbHbHbjbjbIaaaaaaabaiaiaiaiaiaiaiabacacacaLatatatatatatbJbKbJatatatatatatatatataHacacadadadadadadadadbDbDbDbLbMbMbNbDbDbDbDbDbDadadadadadadadadaeagaeafaeafaebOaeambPamaeagaeaeaebQaeahahahahahahahahahahahahahahahahahahahahahahah +aaaabRbSbjbjbTbjbjbUbjbjbjbjbjbjbTbjbjbjbvaaaaabaiaiaiaiaiaiaiabacacacaLatatbCatatatatatatatatatatatatatatataHacacadadadadadadadadbDbDbLbVbVbVbVbMbMbMbNbDbDadadadadadadadadaeagaebWaebXaebYaebZaecaaeagagagaecbaeahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaabwbjbjbjbjbjbjbjbjbjbjbjbjbjbjbUbxaaaaabcccccdceaiaiaiabacacacaLatatatatatatatatatatatatatatatatatataHacacadadadadadadadadbDbLbVbVcfbVbVbVcfbVcgbDbDadadadadadadadadaeagaechaeciaeafaecjaeckaeagagagaeafaeahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaabwbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbxaaaaclcmcncocpclabababacacacaLatatatatatatatatatbqatatatatatatatataHacacadadadadadadadadbDcqbVbVbVbVcrbVbVbVcgbDbDadadadadadadadadaeagaecsctcuaeagaeafaeafaeagagagagagagahahahahahahahahahahahahahahahahahahahahahahah +aaaacvaabwbjbjcwbjbjbjbUbjbjbjbjbjbjbjbjbxaaaaclclclclcxclcycycyacacakatatatatatatatatatatatatatatatatatatatatalacadadadadadadadadbDcqbVbVbVcrczcrbVbVbVbNbDadadadadadadadadaeagaeaeaeaeaeagagagagagagagagagagagagahahahahahahahahahahahahahahahahahahahahahahah +aacAcBaabwbjbjbjbjbjbjbjbjcCbjbjcwbjbjbjbxaaaacycycyclclclcycycyacacbycDatatatatatatatatatatatatatatatatatatatbgacadadadadadadadadbDcEbVbVbVbVcrbVbVbVbVcgbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +aacFcGaabwbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbxaaaacycycycycycycycycyacacacaccHcIcJcJcJcJcJcKcJcJcLcJcJcKcJcMcJcJcNacacadadadadadadadadbDcOcqbVcfbVbVbVcfbVbVcPbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +aacQbjbHbjbjbjbjbjcwbjbjbjbjbjbjbjbjbjbjbjbvaaabcRabababababababacacacaccScTcTcTcTcTcTcTcTcTcTcTcTcTcTcTcTcTcUacacadadadadadadadadbDbDcEcVbVbVbVbVbVcVcPcObDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +aacWcXbjbjbjbjbjbjbjbjbjbjbjbUbjbjbjbjcCbjbxaaabababababababababacacacaccYcTcTcTcTcTcTcTcTcTcTcTcTcTcTcTcZdaacacacadadadadadadadadbDbDcOcOcEcVbVcVcPcOcObDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +aaaaaacWbjbjcwbjbjbjbjbjbjbjbjbjbjcwbjbjbjbxaaabaiaiaiajaiaiaiabacacacacacdbcZcTcTcTcTcTcTcTcTcTcTcTcTdcacacacacacadadadadadadadadbDbDbDbDcOcOddcOcObDbDbDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaabwbjcCbjbjbjbUbjbjbjbjbjbjbjcXcXcXdeaaabaiaiaidfaiaiaiabacacacacacacaccScTcTcTcTcTcTcTcTcTcTcTdgacacacacacadadadadadadadadbDbDbDbDbDbDddbDbDbDbDbDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaacWcXcXcXcXbjdhdhbjcXcXcXcXdeaaaaaaaaaaabaidiaiaiaiaiaiabacacacacacacaccYcZcTcTcTcTcTcTcTcTcZdaacacacacacacadadadadadadadadbDbDbDbDbDbLcPbDbDbDbDbDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaaaaaaaaaaaadjdkdkdlaaaaaaaaaaaaaaaaaaaaabaiaiaiaiaiaiaiabacacacacacacacacacdmdndndndndndndoacacacacacacacacadadadadadadadadbDbDbDbDbDddcObDbDbDbDbDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +aaaaaaaaaaaaaaaaaadpdqdqdraaaaaaaaaaaaaaaaaaaaabaiaiaiaiaiaiaiabacacacacacacacacacdsdtdudududududvacacacacacacacacadadadadadadadadbDbDbDbDbDddbDbDbDbDbDbDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dwdwdwdxaaaaaadydwdkdkdkdkdwdwdwdxaaaaaaaaaaaaabdzaiaiaiaidAbaabacacacacacacacacacacacdBdududCdtdDacacacacacacacacadadadadadadadadbDbDbDbDbDcEdEbNbDbDbDbDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dkdkdkdkdwdwdwdkdkdkdFdFdkdkdkdkdkdwdwdwdwdwdwabaiaiaiaiaiaiaiabacacacacacacacacacacacdsdCdudvacacacacacacacacacacadadadadadadadadbDbDbDbDbDcOcOddbDbDbDbDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dkdkdkdkdkdkdkdkdkdFdFdFdFdkdkdkdkdkdkdkdkdkdkabaiaiaiaiaiaiaiabacacacacacacacacacacacacdGdudDacacacacacacacacacacadadadadadadadadbDbDbDbDbDbDbLcPbDbDbDbDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dHdHdHdHdkdkdkdFdFdFdFdFdFdFdFdFdFdkdkdkdkdkdkabaiaiaiaiaiaiaiabacacacacacacacacacacacacdBdvacacacacacacacacacacacadadadadadadadadadadadadbDbDddcObDbDbDbDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHabaiaiaiaiaiaiaiabacacacacacacacacacacacacdBdvacacacacacacacacacacacadadadadadadadadadadadadbDbDddbDbDbDbDbDbDadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHabaiaiaidIaiaiaiabacacacacacacacacacacacacdBdvacacacacacacacacacacacadadadadadadadadadadadadaddJdKdJadadadadadadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHabababababababababahahahahahahahahahahahahahahahahahahahahahahahahahadadadadadadadadadadadadaddLdMdNadadadadadadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahadadadadadadadadadadadadadcOcOcOadadadadadadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahadadadadadadadadadadadadadadadadadadadadadadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahadadadadadadadadadadadadadadadadadadadadadadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahadadadadadadadadadadadadadadadadadadadadadadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHdHahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahadadadadadadadadadadadadadadadadadadadadadadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahadadadadadadadadadadadadadadadadadadadadadadadadadadadadadahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdPdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdQdQdQdQdQdOdOdOdQdQdQdQdQdQdQdOdOdOdQdQdQdQdQdQdQdOdOdOdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdOdOdOdOdOdOdOdOdOdQdQdQdQdQdOdOdOdQdQdQdQdQdQdQdOdOdOdQdQdQdQdQdQdQdOdOdOdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdOdOdOdOdOdOdO +dOdOdOdOdOdOdQclclclcldRdSdTclclclclclclcldRdSdTclclclclclclcldRdSdTclclclclclclclclclclclclclclclclclclclclclclclcldQdOdOdOdOdOdOdOdOdOdQclclclcldRdSdTclclclclclclcldRdSdTclclclclclclcldUdVdWclclclclclclclclclclclclclclclclclclclclclclclcldQdOdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdYdXdXdXdXcldXdXdXdXdZdXdXdXdXcldXdXdXdXeadXdXdXdXclebebcleccleccledededeeedededclecclecclcldQdOdOdOdOdOdOdOdOdOdQcldXdXdXdXefdXdXdXdXcldXdXdXdXegdXdXdXdXcldXdXdXdXehdXdXdXdXclebebcleccleccledededeeedededclecclecclcldQdOdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXdXdXdXdXcldXdXdXdXdXdXdXdXdXcldXdXdXdXdXdXdXdXdXclebclcleicleiclejeieieieieiekcleicleiclcldQdOdOdOdOdOdOdOdOdOdQcldXdXdXdXdXdXdXdXdXcldXdXdXdXdXdXdXdXdXcldXdXdXdXdXdXdXdXdXclebclcleicleicleleieieieieiekcleicleiclcldQdOdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXemdXdXdXdXcldXdXdXdXemdXdXdXdXcldXdXdXdXemdXdXdXdXclebclclenclenclclclclenclclclclenclenclcldQdOdOdOdOdOdOdOdOdOdQcldXdXdXdXemdXdXdXdXcldXdXdXdXemdXdXdXdXcldXdXdXdXemdXdXdXdXclebclclenclenclclclclenclclclclenclenclcldQdOdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXdXdXdXdXcldXdXdXdXdXdXdXdXdXcldXdXdXdXdXdXdXdXdXclebcleoeieieieieiepeieieiepeieieqeqeiercldQdQdOdOdOdOdOdOdOdOdQcldXdXdXdXdXdXdXdXdXcldXdXdXdXdXdXdXdXdXcldXdXdXdXdXdXdXdXdXclebcleoeieieseteiepeieieiepeieieieieieucldQdQdOdOdOdOdOdO +dOdOdOdOdOdOdQclclclclclevclclclclclclclclclewclclclclclclclclclexclclclclclclclclclclclclclcleieieiclclclclclclclclcldQdOdOdOdOdOdOdOdOdQclclclclcleyclclclclclclclclclezclclclclclclclclcleAclclclclclclclclclclclclclcleieieiclclclclclclclclcldQdOdOdOdOdOdO +dOdOdOdOdOdOdOeBebebebebebeCebebebebebeCebebebebebebebebebebebeDebeDebebebebebeCebebebebebebeCebebebeCebebebebebebeCcldQdOdOdOdOdOdOdOdOdOeBebebebebebebebebebebebebebebebebebebebebebebebeDebeDebebebebebeCebebebebebebeCebebebeCebebebebebebeCcldQdOdOdOdOdOdO +dOdOdOdOdOdOdOeEeFebebebebebebebebebebebebebebebebebebebebebeGcleHcleIebebebebebebebeJebebeJebebeJebebeJebebeJebebebcldQdOdOdOdOdOdOdOdOdOeEeFebebebebebebebebebebebebebebebebebebebebebeGcleHcleIebebebebeKeKeKeKeKeKeKeKeKeKeKeKeKeKeKeKeKeKeKcldQdOdOdOdOdOdO +dOdOdOdOdOdOdOeLebebebebebeDebebebebebeDebebebebebebebebebebebeCebeCebebebebebeMeNeNeNeNeNeNeNeNeNeNeNeNeNeNeNeNeNeOcldQdOdOdOdOdOdOdOdOdOeLebebebebebeDebebebebebeDebebebebebebebebebebebePeKePebebebebeQeReReReReReReReReReReReReReReReReReReScldQdOdOdOdOdOdO +dOdOdOdOdOdOdQclclcleTclclclclcleUclclclclcleVclclclebebeWebebebebebebebeWebebeXeYeYeYeYeYeYeYeYeYeYeYeYeYeYeYeYeYeZcldQdOdOdOdOdOdOdOdOdQclclclfaclclclclclfbclclclclclfcclclclebebeWebeQeReReRfdebeWebeQeReReReReReReReReReReReReReReReReReReScldQdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXfedXdXdXcldXffdXdXdXcldXfgdXdXdXclebebfhebebfififiebebfhebebeXeYfjfjfjfjfjfjfjfkflflflflflflfleYfmeBdOdOdOdOdOdOdOdOdOdQcldXfndXdXdXcldXfodXdXdXcldXfpdXdXdXclebebfhebeQeReReRfdebfhebeQeReReReReReReReReReReReReReReReReReReReBdOdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebfqfrfrfrfsebfhebebeXeYfjftftftftftftfjflflflflflflfleYfmeEdOdOdOdOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebeQeReReRfdebfhebeQeReReReReReReReReReReReReReReReReReReReEdOdOdOdOdOdOdO +dOdOdOdOdOdOdOfudXdXfvdXdXcldXdXfvdXdXcldXdXfvdXdXclebebfhebfqfrfwfrfsebfhebebeXeYfjftftftftftftfjflflflflflflfleYfmeEdOdOdOdOdOdOdOdOdOdOfudXdXfvdXdXcldXdXfvdXdXcldXdXfvdXdXclebebfhebeQeReReRfdebfhebeQeReReReReReReReReReReReReReReReReReReReEdOdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebfqfrfrfrfsebfhebebeXeYfjftftftftftftfjflflflflflflfleYfmeEdOdOdOdOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebeQeReReRfdebfhebeQeReReReReReReReReReReReReReReReReReReReEdOdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebfxfhebebfyfyfyebebfhebebeXeYfjftftftftftftfjflflflflflflfleYfmeEdOdOdOdOdOdOdOdOdOdQfzdXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebeQeReReRfdebfhebeQeReReReReReReReReReReReReReReReReReReReEdOdOdOdOdOdOdO +dOdOdOdOdOdOdQclclclclclclclclclclclclclclclclclclclebebfAebebebebebebebfAebebeXeYfBftftftftftftfjflflflflflfCfDeYfmeEdOdOdOdOdOdOdOdOdOdQclclclclclclclclclclclclclclclclclclclebebfAebeQeReReRfdebfAebeQeReReReReReReReReReReReReReReReReReReReEdOdOdOdOdOdOdO +dOdOdOdOdOdOdOeBebebebebebebebebebebebebebebebebebebebebebebebeDebeDebebebebebeXeYfjftftftftftftfjflflflflflflfleYfmeEdOdOdOdOdOdOdOdOdOdOeBebebebebebebebebebebebebebebebebebebebebebebebfEfFfEebebebebeQeReReReReReReReReReReReReReReReReReReReEdOdOdOdOdOdOdO +dOdOdOdOdOdOdOeEfGebebebebebebebebebebebebebebebebebebebebebeGcleHcleIebebebebeXeYfjftftftfHftftfjflflflflflflfleYfmeEdOdOdOdOdOdOdOdOdOdOeEeFebebebebebebebebebebebebebebebebebebebebebeGcleHcleIebebebeQeReReReReReReReReReReReReReReReReReReReEdOdOdOdOdOdOdO +dOdOdOdOdOdOdOeLebebebebebeDebebebebebeDebebebebebebebebebebebeCebeCebebebebebeXeYfjftftftftftftfjflflflflflflfleYfmeEdOdOdOdOdOdOdOdOdOdOeLebebebebebeDebebebebebeDebebebebebebebebebebebePeKePebebebebeQeReReReReReReReReReReReReReReReReReReReEdOdOdOdOdOdOdO +dOdOdOdOdOdOdQclclclfIclclclclclfJclclclclclfKclclclebebeWebebebebebebebeWebebeXeYfjftftftftftftfjflflflflflflfleYfmeEdOdOdOdOdOdOdOdOdOdQclclclfLclclclclclfMclclclclclfNclclclebebeWebeQeReReRfdebeWebeQeReReReReReReReReReReReReReReReReReReReEdOdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXfOdXdXdXcldXfPdXdXdXcldXfQdXdXdXclebebfhebebfififiebebfhebebeXeYfjfjfjfjfjfjfjfRflflflflflflfleYfmeLdOdOdOdOdOdOdOdOdOdQcldXfSdXdXdXcldXfTdXdXdXcldXfUdXdXdXclebebfhebeQeReReRfdebfhebeQeReReReReReReReReReReReReReReReReReReReLdOdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebfqfrfrfrfsebfhebebeXeYeYeYfVeYeYeYeYeYeYeYeYeYeYeYeYeYeZfWdQdOdOdOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebeQeReReRfdebfhebeQeReReReReReReReReReReReReReReReReReReScldQdOdOdOdOdOdO +dOdOdOdOdOdOdOfudXdXfvdXdXcldXdXfvdXdXcldXdXfvdXdXclebebfhebfqfrfwfrfsebfhebebfXfYfYfYfYfYfYfYfYfYfYfYfYfYfYfYfYfYfZfWdQdOdOdOdOdOdOdOdOdOfudXdXfvdXdXcldXdXfvdXdXcldXdXfvdXdXclebebfhebeQeReReRfdebfhebeQgaeReReReReReReReReReReReReReReReReReScldQdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebfqfrfrfrfsebfhebcleIebebebebebebebebebebebebebebebebebebeBdOdOdOdOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebeQeReReRfdebfhebclgbgcgdgegcgdgegcgdgegcgdgegcgfgegcgdgeeBdOdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebebfyfyfyebebfhebebebggghgiggghgiggghgiggghgiggghgiggghgieEdOdOdOdOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebeQeReReRfdebfhebebebgjgkglgjgkglgjgkglgjgkglgjgkglgjgkgleEdOdOdOdOdOdOdO +dOdOdOdOdOdOdQclclclclclclclclclclclclclclclclclclclebebfAebebebebebebebfAebcleIebebebebebebebebebebebebebebebebebebeEdOdOdOdOdOdOdOdOdOdQclclclclclclclclclclclclclclclclclclclebebfAebeQeReReRfdebfAebcleIgmgkgngmgkgngmgkgngmgkgngmgkgngmgkgneEdOdOdOdOdOdOdO +dOdOdOdOdOdOdOeBebebebebebebebebebebebebebebebebebebebebebebebeDebeDebebebebebebggghgiggghgiggghgiggghgiggghgiggghgieEdOdOdOdOdOdOdOdOdOdOeBebebebebebebebebebebebebebebebebebebebebebebebfEfFfEebebebebebdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXeEdOdOdOdOdOdOdO +dOdOdOdOdOdOdOeEeFebebebebebebebebebebebebebebebebebebebebebeGcleHcleIebebebcleIebebebebebebebebebebebebebebebebebebeLdOdOdOdOdOdOdOdOdOdOeEeFebebebebebebebebebebebebebebebebebebebebebeGcleHcleIebebebclgodXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXeLdOdOdOdOdOdOdO +dOdOdOdOdOdOdOeLebebebebebeDebebebebebeDebebebebebebebebebebebeCebeCebebebebebebgpgpgpgpgpgpgpgpgpgpgpgpgpgpgpgpgpgqcldQdOdOdOdOdOdOdOdOdOeLebebebebebeDebebebebebeDebebebebebebebebebebebePeKePebebebebebdXdXdXdXdXdXdXdXdXgrdXdXdXdXdXdXdXdXgscldQdOdOdOdOdOdO +dOdOdOdOdOdOdQclclclgtclclclclclguclclclclclgvclclclebebeWebebebebebebebeWebebgwgwgwgwgwgwgwgwgwgwgwgwgwgwgwgwgwgwgwcldQdOdOdOdOdOdOdOdOdQclclclgxclclclclclgyclclclclclgzclclclebebeWebeQeReReRfdebeWebclgodXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXgAdXdXdXcldXgBdXdXdXcldXgCdXdXdXclebebfhebebfififiebebfhebebgwgDgDgDgDgEgDgDgDgDgDgDgDgDgDgDgDgDgDcldQdOdOdOdOdOdOdOdOdQcldXgFdXdXdXcldXgGdXdXdXcldXgHdXdXdXclebebfhebeQeReReRfdebfhebebdXgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgJcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebfqfrfrfrfsebfhebebgKgDgDgLgMgNgMgDgDgDgDgDgMgNgOgNgNgDgDcldQdOdOdOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebeQeReReRfdebfhebebgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPgPcldQdOdOdOdOdOdO +dOdOdOdOdOdOdOfudXdXfvdXdXcldXdXfvdXdXcldXdXfvdXdXclebebfhebfqfrfwfrfsebfhebebgQgDgDgRgSgTgUgDgDgDgDgDgVgNgWgNgNgDgDcldQdOdOdOdOdOdOdOdOdOfudXdXfvdXdXcldXdXfvdXdXcldXdXfvdXdXclebebfhebeQeReReRfdebfhebebgPgXgXgXgXgXgXgXgXgXgXgXgXgXgXgXgXgXgYcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhfxfqfrfrfrfsebfhebebgQgDgDgDgDgDgDgDgDgDgDgDgDgDgDgDgDgDgDcldQdOdOdOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebeQeReReRfdebfhebebgKgZgXgXgXgXgXhagXgXgXgXgXgXgXgXgXgXgZcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQcldXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebebfyfyfyebebfhebebhbhchdhehfhghhgDhdgDhdgDhihjhkhlgDhdhccldQdOdOdOdOdOdOdOdOdQfzdXdXdXdXdXcldXdXdXdXdXcldXdXdXdXdXclebebfhebeQeReReRfdebfhebebhbhmhngXgXhohphqhrgXhrhqhpgYgYhsgXhnhmcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQclclclclclclclclclclclclclclclclclclclebebfAebebebebebebebfAebebclclclclclclclclclhtclclclclclclclclclcldQdOdOdOdOdOdOdOdOdQclclclclclclclclclclclclclclclclclclclebebfAebeQeReReRfdebfAebebclclclclclclclclclhuclclclclclclclclclcldQdOdOdOdOdOdO +dOdOdOdOdOdOdOeBhvhvhvhvhvhvhwhxhyhzebebebeCebebebeCebebebebebeDebeDebebebebebhAhBhBhBhBhChBhBhDhEhFhBhBhChBhBhBhChGeBdOdOdOdOdOdOdOdOdOdOeBebeCebebebeChHhIhJhKeReReRhKeReReRhKfdebebebebfEfFfEebebebebebhAhBhBhBhBhLhBhBhDhEhFhBhBhLhBhMhBhLhNeBdOdOdOdOdOdOdO +dOdOdOdOdOdOdOeEhvhvhvhvhvhvhwhOhPhQebebebebebebebebebebebebeGcleHcleIebebebebhRhEhEhEhEhEhEhEhEhEhEhEhEhEhEhEhEhEhSeEdOdOdOdOdOdOdOdOdOdOeEebebebebebebhHhThUeReReReReReReReReRfdebebebeGcleHcleIebebebebhVhEhEhEhEhEhEhEhEhEhEhEhEhEhWhWhWhWhSeEdOdOdOdOdOdOdO +dOdOdOdOdOdOdOeLhvhvhvhvhvhvhwhXhYhZebebebeDebebebeDebebebebebeCebeCebebebebebhAiaiaibhEiciaiaiaiaiaiaiaiaiaiaiaiaideLdOdOdOdOdOdOdOdOdOdOieebebebebebebhHifigeReReReReReReReReRfdebebebebeCebeCebebebebebhAiaiaibhEiciaiaiaiaiaiaiaihihiaihiaideLdOdOdOdOdOdOdO +dOdOdOdOdOdOdQclclclclclclclclclclclcliiclclclijclclebebebebebebebebebebebebebclclclclikclclclclclclclclclilclclclclcldQdOdOdOdOdOdOdOdOdOieebebebebebebfFfFfFfFfFfFfFfFfFfFfFfFebebebebebebebebebebebebebclclclclimclclclclclclinioinclclclclclcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQclipipipipipipipipiqipipipirclebebebclisebebebebebebebebebebebitcliuivebebebiwiwiwclixixiyixizixixixiAcldQdOdOdOdOdOdOdOdOdOieebebebebebebebebebebebebebebebebebebebebebebebebebebebebebebitclebiBiBiBiBiBebiCcliDiDiEiDiDiDiDiDiDcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQclipipiFipipipiqipipipipipircleIebebclisebebebebebebebebebebebiGcliugiebebebiHiIiIcliJiKiJiLiziLiJiKiJcldQdOdOdOdOdOdOdOdOdOeLebeDebebebeDebebebeDebebebeDebebebeDebebebebebebebebebebebebiGclebiBiMiNiOiBebiPcliDlniRiQiDiDiDiDiQcldQdOdOdOdOdOdO +dOdOdOdOdOdOdOfuipipipipiqipipipipipipipiriSebebebclisebebebebebebebebebebebiTcliUivebebebebebeGcliViWiXiXiYiXiZjajbcldQdOdOdOdOdOdOdOdOdQclclclclclclclclclclclclclclclclclclclisisisebebebebebebebebebiTcleIiBjcjdjeiBeGjfcliDiQiQjgjhjiiQiQjjcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQclipjkipipipipipipipipipipiriSebebebclclclclclcljlcljlclclclclclcliugiebebebebebjmcliJiKjniLiziLiJiKiJcldQdOdOdOdOdOdOdOdOdQcljojpebebebebjqebebebebebjrebebjsjsclclclclclcljtcljtclclclclclclebiBjujvjwiBebjxcliQjyiQjzjAjziQjBiQcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQclipipipipiFipipiqipipipipircleIebebijebebjCebeCebebebeCjDjEjFjGclebebebeJjHeJjIjHclixjJiXiXjKiXiXjLixcldQdOdOdOdOdOdOdOdOdQclebjMjNebebjqebebebebebjrebebebjsjsclebebebebeCebebebeCebebebebclebiBiBiBiBiBebjOcliDiQiQjijzjijyjPiQcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQcljQipipipipipipipipipipjRirclebebebijebebebebebebebebebjDjSjTjTikebebebjUjVjVjVjVcliJiKiJiLjWiLiJiKiJcldQdOdOdOdOdOdOdOdOdQclebjXjYjZkaebjYebebjqebebkbkbebjsjskcebebebebebebebebebebebebebkdebebebeDebebebiCcliDkejBiQiQkfiQiDiDcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQclclclclclclclclclclclclclclclclclclclkgebebfxfxfxebkhebjDkikjkkinclclclclclclclclclclclclclclclclclclcldQdOdOdOdOdOdOdOdOdQclclclclclclclclclclclclclclclclclclcleIebebebebebebebebebebebebinclclclclclclclclclclclclclclclclclclcldQdOdOdOdOdOdO +dOdOdOdOdOdOdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQclklebebfxfxfxebebebjDkmknkocldQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdOdOdOdOdOdOdOdOdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQclebebebebebebebebebebebebebcldQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOeBklebebebebebebebebjDjSjTkpeBdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOeBebebebebebebebebebebebebebeBdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOeEkqkrkrkrksebebebktkujSkvkwiedOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOeEebebebebeDebebebeDebebebebiedOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOkxdSdSdSkyclkzclkzclkAdSdSdSkBdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOkxdSdSdSkyclclclclclkAdSdSdSkBdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdQkzclkzdQdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdQdQdQdQdQdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOkCkDkEkFkGkHkIkHkIkHkEkFkGkHkJdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOkKkLkLkLkLkLkLkLkLkLkLkLkLkLkMdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOkCkNkOkPkQkRkQkSkSkSkSkSkQkQkQkTkUkVdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOkKkLkWkXkXkXkXkXkXkXkXkXkXkXkXkXkYkZdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOkNlalbkSkSkSkSkSkQkQkQkSkSkSkSlckUkVdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOkYkXkXkXkXkXkXkXkXkXkXkXkXkXkXkXkYkZdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOldkNlekSkQlakQkSkSkPkSkSlflgkQkTkUkVdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOlhkLlikXkXkXkXkXkXkXkXkXkXkXkXkXkYkZdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOldkHkEkFkGkHkDkDkDkHkEkFkGkHljdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOlhkLkLkLkLkLkLkLkLkLkLkLkLkLlkdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO +dOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdOdO "} + diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm index 4934529dbf1..bf7e67bcd2d 100644 --- a/_maps/map_files/RandomZLevels/stationCollision.dmm +++ b/_maps/map_files/RandomZLevels/stationCollision.dmm @@ -295,7 +295,7 @@ "fI" = (/turf/simulated/wall/cult,/area/awaymission/midblock) "fJ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/midblock) "fK" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/midblock) -"fL" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/awaymission/arrivalblock) +"fL" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/arrivalblock) "fM" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/awaymission/arrivalblock) "fN" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/awaymission/arrivalblock) "fO" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/awaymission/arrivalblock) @@ -383,6 +383,7 @@ "hs" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "ht" = (/obj/structure/stool/bed/chair{dir = 1},/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/awaymission/arrivalblock) "hu" = (/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) +"hv" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/awaymission/arrivalblock) "hw" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "hx" = (/obj/machinery/door/window/southleft{name = "Windoor"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/arrivalblock) "hy" = (/obj/item/ammo_casing/c10mm{pixel_x = 2; pixel_y = 5},/obj/item/ammo_casing/c10mm{pixel_x = -4; pixel_y = -5},/obj/item/ammo_casing/c10mm,/turf/simulated/floor/plasteel/airless,/area/awaymission/midblock) @@ -404,6 +405,7 @@ "hO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hP" = (/obj/effect/decal/remains/human,/obj/item/weapon/kitchen/knife/butcher,/obj/item/weapon/kitchen/knife,/obj/item/clothing/head/chefhat,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hQ" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/midblock) +"hR" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/awaymission/arrivalblock) "hS" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/midblock) "hT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/midblock) "hU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/midblock) @@ -541,7 +543,6 @@ "kz" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l"; icon_state = "propulsion_l"},/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_l"; icon_state = "burst_l"},/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l"; icon_state = "propulsion_l"},/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating,/area/awaymission/arrivalblock) "kA" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (NORTH)"; icon_state = "propulsion_l"; dir = 1},/obj/structure/window/reinforced,/turf/space,/area/awaymission/arrivalblock) "kB" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (NORTH)"; icon_state = "propulsion_r"; dir = 1},/obj/structure/window/reinforced,/turf/space,/area/awaymission/arrivalblock) -"kC" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/awaymission/arrivalblock) "kD" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "kE" = (/obj/machinery/vending/hydroseeds,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "kF" = (/obj/structure/sink/kitchen{pixel_y = 32},/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) @@ -580,10 +581,8 @@ "lm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/southblock) "ln" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/southblock) "lo" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/southblock) -"lp" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/awaymission/arrivalblock) "lq" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/awaymission/arrivalblock) "lr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/arrivalblock) -"ls" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/awaymission/arrivalblock) "lt" = (/obj/structure/closet/crate/hydroponics,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "lu" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "lv" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) @@ -680,12 +679,13 @@ aafZgbgbgbgbgbfZhEiDilgzgzgzgzgzgzjogzgzgzjpjpiYiYjqiYiYiYiYjriYiYiYjsjtjujujuju aafZgcgcgbgcgcfZhVhuhqjyjzjAiljBhujChuhuhuhuhuiYjDjEjFiYjGjHjHjIjJiYjKjEjujLjMjNjOjPjujQjQjRjRjSjQjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa aafZgbgbgbgbgbfZjUjViDhqhWhujWjyhujXhuhuhuhuhuiYjYjZkaiYkbkckdkekfiYjKkgjujLkhkikjjPjujQjQjQjQjQkkjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa aafZklklklklklfZgzkmknkokmkngzgzgzgzgzjpgzgzgziYiYiYiYiYiYiYkpiYjriYjKjEjukqkrksktkujukvjQkwjQjQjQjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aagakxkykykykzgaaafLkAgRkBkCaagzkDkEkFhukGjzhuiYkfjHkfiYkHjHjHkIkfiYjKjEjukJkKkLkKkMjujQkkjQkNjQjQjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aagakxkykykykzgaaafLkAgRkBfQaagzkDkEkFhukGjzhuiYkfjHkfiYkHjHjHkIkfiYjKjEjukJkKkLkKkMjujQkkjQkNjQjQjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaafZkOkPkQfZaagzhuhujzhuhujzhuiYkRjKkSiYkRjKjKjKkTiYjKjEjukUkVkWkVkXjujQjQjSjQjQkkjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaafZkOgbkQfZaagzhujzhujzhuhuhuiYkfkdkfkpkRjKkYkZlaiYjKjEjulbkVkWkVlcjukkjQjQldkwjQjTaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaafZkOgckQfZaagzlehulfhulghuhuiYiYiYiYiYlhjKlijKljiYjKjEjulkkVkWkVlljujujujujulmlnloaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaalplqlrlqlsaagzlthuluhulvjzhuiYlwlxlyiYkRjKlijKlziYjKlAjujujulBjujujulClDlEjuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaahvlqlrlqhRaagzlthuluhulvjzhuiYlwlxlyiYkRjKlijKlziYjKlAjujujulBjujujulClDlEjuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaagzltlFlGlHhuhuhuiYlIkfkfkpkRjKlJjKlKiYlLlMlNlOlOlPlOlQlRlSlTlUjuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaagzgzgzgzgzgzgzgziYlVlWlXiYkfkdlYlZmaiYjKjKjKmbmbmbmbmcjulCmdmejuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYjujujujujuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm index 9bae9a8215c..04d8818ad02 100644 --- a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm @@ -169,7 +169,7 @@ "dm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "dn" = (/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "do" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) -"dp" = (/obj/structure/flora/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "greencorner"; tag = "icon-greencorner"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) +"dp" = (/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 2; heat_capacity = 1e+006; icon_state = "greencorner"; tag = "icon-greencorner"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "dq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "dr" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "ds" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) @@ -304,7 +304,7 @@ "fR" = (/obj/structure/table/woodentable,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "fS" = (/obj/machinery/light/small,/obj/machinery/alarm/monitor{dir = 1; frequency = 1439; locked = 0; pixel_y = -23; req_access = null},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/dresser,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "fT" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) -"fU" = (/obj/structure/flora/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) +"fU" = (/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "fV" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/machinery/camera{c_tag = "Central Hallway"; dir = 1; network = list("UO45")},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "fW" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -28},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "fX" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) @@ -526,7 +526,7 @@ "kf" = (/obj/machinery/suit_storage_unit/engine,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a6{has_gravity = 1; name = "UO45 Gateway"}) "kg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaycontent/a6{has_gravity = 1; name = "UO45 Gateway"}) "kh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaycontent/a6{has_gravity = 1; name = "UO45 Gateway"}) -"ki" = (/obj/structure/flora/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) +"ki" = (/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "kj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{tag = "icon-whitepurplecorner (EAST)"; icon_state = "whitepurplecorner"; dir = 4; heat_capacity = 1e+006},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "kk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitepurple"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "kl" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "whitepurplecorner"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) @@ -665,7 +665,7 @@ "mO" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "mP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "mQ" = (/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) -"mR" = (/obj/effect/decal/cleanable/dirt,/obj/structure/flora/kirbyplants{layer = 5},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) +"mR" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "mS" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "mT" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "mU" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) @@ -790,7 +790,7 @@ "pj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door_control{desc = "A remote control-switch whichs locks the research division down in the event of a biohazard leak or contamination."; id = "UO45_biohazard"; name = "Biohazard Door Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "201"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "pk" = (/obj/structure/closet/secure_closet{icon_broken = "secbroken"; icon_closed = "sec"; icon_locked = "sec1"; icon_off = "secoff"; icon_opened = "secopen"; icon_state = "sec1"; locked = 1; name = "security officer's locker"; req_access_txt = "201"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/item/weapon/restraints/handcuffs,/obj/item/device/flash,/obj/item/weapon/reagent_containers/spray/pepper,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "pl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) -"pm" = (/obj/structure/flora/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) +"pm" = (/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "pn" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "po" = (/obj/machinery/light/small{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "pp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock{id_tag = "awaydorm4"; name = "Dorm 4"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) @@ -893,7 +893,7 @@ "ri" = (/obj/machinery/light/small{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "rj" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "rk" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) -"rl" = (/obj/structure/flora/kirbyplants{layer = 5},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) +"rl" = (/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "rm" = (/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/obj/structure/dispenser{pixel_x = -1},/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "rn" = (/obj/machinery/light/small{dir = 1},/obj/structure/table,/obj/item/weapon/tank/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/weapon/tank/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/machinery/newscaster{pixel_y = 32},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "ro" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) @@ -1149,7 +1149,7 @@ "we" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) "wf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) "wg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched1"; tag = "icon-floorscorched1 (WEST)"},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) -"wh" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/flora/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) +"wh" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/twohanded/required/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) "wi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) "wj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; tag = "icon-manifold-r-f (EAST)"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) "wk" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating/airless/asteroid{carbon_dioxide = 173.4; heat_capacity = 1e+006; name = "Cave Floor"; nitrogen = 135.1; oxygen = 0; temperature = 363.9; toxins = 229.8},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) diff --git a/_maps/map_files/RandomZLevels/wildwest.dmm b/_maps/map_files/RandomZLevels/wildwest.dmm index 4cc4825b777..ae596b4b18b 100644 --- a/_maps/map_files/RandomZLevels/wildwest.dmm +++ b/_maps/map_files/RandomZLevels/wildwest.dmm @@ -43,7 +43,7 @@ "aQ" = (/obj/item/weapon/paper{info = "meat grinder requires sacri"},/turf/simulated/floor/engine/cult,/area/awaymission/wwvault) "aR" = (/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "aS" = (/obj/effect/landmark/corpse/syndicatecommando,/turf/simulated/floor/engine/cult,/area/awaymission/wwvault) -"aT" = (/turf/simulated/mineral,/area/awaymission/wwrefine) +"aT" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/simulated/mineral,/area/awaymission/wwrefine) "aU" = (/turf/simulated/wall/mineral/sandstone,/area/awaymission/wwrefine) "aV" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/simulated/wall/mineral/sandstone,/area/awaymission/wwmines) "aW" = (/obj/effect/decal/cleanable/blood/gibs/body{tag = "icon-gibup1"; icon_state = "gibup1"},/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) @@ -311,6 +311,8 @@ "fY" = (/obj/machinery/washing_machine,/turf/simulated/floor/wood,/area/awaymission/wwmines) "fZ" = (/obj/effect/decal/cleanable/blood/gibs/body{tag = "icon-gibup1"; icon_state = "gibup1"},/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/awaymission/wwmines) "ga" = (/obj/item/weapon/hatchet,/turf/simulated/floor/wood,/area/awaymission/wwmines) +"gb" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/wwrefine) +"gc" = (/turf/space,/turf/simulated/shuttle/wall{dir = 3; icon_state = "swall_f10"; layer = 2; tag = "icon-swall_f10"},/area/awaymission/wwrefine) "gd" = (/obj/effect/landmark/corpse/syndicatecommando{mobname = "Syndicate Commando"},/turf/simulated/floor/grass,/area/awaymission/wwgov) "ge" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-fwindow (NORTH)"; icon_state = "fwindow"; dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/turf/simulated/floor/plasteel,/area/awaymission/wwrefine) "gf" = (/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-fwindow (NORTH)"; icon_state = "fwindow"; dir = 1},/obj/structure/grille,/turf/simulated/floor/plasteel,/area/awaymission/wwrefine) @@ -321,19 +323,17 @@ "gk" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/grass,/area/awaymission/wwgov) "gl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-fwindow (EAST)"; icon_state = "fwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/obj/structure/grille,/turf/simulated/floor/plasteel,/area/awaymission/wwrefine) "gm" = (/obj/effect/decal/cleanable/blood,/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/simulated/mineral,/area/awaymission/wwmines) -"gn" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"},/area/awaymission/wwrefine) +"gn" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/awaymission/wwrefine) "go" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/wwrefine) "gp" = (/turf/simulated/shuttle/wall{tag = "icon-swall8"; icon_state = "swall8"},/area/awaymission/wwrefine) "gq" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle{tag = "icon-floor2"; icon_state = "floor2"},/area/awaymission/wwrefine) "gr" = (/turf/simulated/shuttle/wall{tag = "icon-swall4"; icon_state = "swall4"},/area/awaymission/wwrefine) -"gs" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"},/area/awaymission/wwrefine) +"gs" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/awaymission/wwrefine) "gt" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"},/area/awaymission/wwrefine) "gu" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle{tag = "icon-floor2"; icon_state = "floor2"},/area/awaymission/wwrefine) "gv" = (/turf/simulated/shuttle{tag = "icon-floor2"; icon_state = "floor2"},/area/awaymission/wwrefine) -"gw" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"},/area/awaymission/wwrefine) "gx" = (/turf/simulated/shuttle/wall{tag = "icon-swallc1"; icon_state = "swallc1"},/area/awaymission/wwrefine) "gy" = (/turf/simulated/shuttle/wall{tag = "icon-swallc2"; icon_state = "swallc2"},/area/awaymission/wwrefine) -"gz" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"},/area/awaymission/wwrefine) "gA" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwmines) "gB" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/obj/item/clothing/mask/gas/syndicate,/obj/item/weapon/tank/oxygen,/turf/simulated/shuttle{tag = "icon-floor2"; icon_state = "floor2"},/area/awaymission/wwrefine) "gC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-fwindow"; icon_state = "fwindow"},/turf/simulated/shuttle{tag = "icon-floor2"; icon_state = "floor2"},/area/awaymission/wwrefine) @@ -570,71 +570,71 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababaFaFababababababacaaaaacacaaaaaaaaaGaGaGaGaGaGaGaGaNaLaOaOaOaOaPaOaOaOaLaNaNaGaLaOaOaLaLaLaNaGaLaLaLaIaIaIaLaLaLaLaGaGaGaGaGaGaGaGaGaGaLaLaLaLaLaLaNaNaLaLaLaNaNaNaNaNaLaLaLaLaLaNaLaLaLaLaNaNaNaGaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacaaacaaacaaaaabaQacabaaaaacacaaacaaaaaaaaaaaaaaaGaGaGaGaGaGaGaNaLaLaLaRaRaRaRaRaRaRaRaOaOaOaOaOaRaRaRaPaLaLaLaLaRaLaLaRaLaLaRaRaLaLaLaLaLaLaLaLaLaLaLaLaRaLaLaRaLaLaLaLaRaLaNaLaLaLaLaLaRaRaRaLaLaLaRaRaLaNaNaNaNaNaGaGaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacacacacacaaaaabaSacabaaaaacacaaacacaaaaaaaaaaaaaGaGaGaGaGaGaGaLaLaPaOaOaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaRaRaLaRaRaLaRaRaRaRaRaRaLaRaRaRaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaLaLaLaLaLaLaNaGaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaacacacacaaaaabacacabaaacacacaaaaacacaaaaaaaaaGaGaGaGaGaGaGaGaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaacacacaaaaabacacabaaacaaacaaaaaaacacacaGaGaGaGaGaGaGaTaTaUaVaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaLaLaLaLaIaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacacacacacacacaaaaaaaaaaaaaaaaaaaGaGaGaGaGaUaUaUaUaUaUaUaRaRaRaRaRaRaRaRaRaWaRaRaRaRaRaRaRaRaRaRaRaRaRaRaXaRaRaWaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaYaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaLaRaRaRaIaNaGaGaaaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaGaGaGaGaUaZbababababbaRaRaRaRaRaXaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaXaRaRaRaRaRaRaRaRaRaRaRaRaRaRaWaRaRaRaRaRaRaRaRaRaRaRaXaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaGaGaGaUbabababababbaRaRaRaRaRaRaRbcaRaRaRaRaRaRaRaRaRaRaRbdaRaRaRaRaRaRaRaRaRaRaRaRaXaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaLaNaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaGaGbeaUbabababaaUaUaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaWaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbdaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaNaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaGaGaGbebabfbababaaUaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbgaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaGaGaUaUbababababaaUaLaRaRaRaRaRbhbhbhbhbhbhbhbhbhbhbibhbhbhbhbhbhbhbhbhbhbhbjbhbhbhbhbhbhbhbhbhbhbhbhbhbibhbhbhbhbhbhbhbhbhbhbhbhbkbkbhbhbhbhbhbhbhbhbhbhaRbdaRaRaRaRaRaRaRaRaRaRaRaLaNaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaGaGaGaUbfbabablbabmaUaLaRaRaRaRaRbjbhbhbhbhbhbhbhbhbhbibkbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbkbhbhbhbhbhbhbhbhbhbhbhbhbhbhbnbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhaRaRaWaRaRaRaRaRaRaRaRaRaLaLaNaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaUbabababababaaUaLaRaRaXaRaRbhbhbhbnbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbkbhaRaRaRaRaRaRaXaRaRaRaRaRaLaLaLaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaUbababobababfaUaLaRaRaRaRaRbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbkbhbhbhbhbhbhbibhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaUaUbabababfbabaaUaLaRaRaRaRaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbqbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpaaaaaaaabpbpbpbpbpbpbpbpbpbpaabpaabpbpbpbpaaaaaabpbpbpbpbpbpbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaUbrbabababababaaUaLaRaRaRaRaRbkbhbhbhaRbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsaRbhbhbhbhaRbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaLaLaGaGaGaGaGaaaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaabpbtbububububububtbtbtbtbtbububtbtbtbubtbtbtbtbubububububtbtbtbtbtaabpaabpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaUbababababababaaUaLaRaRaRaRaRbhbhbhbhaRbsbvbwbwbxbwbwbwbsbybzeSbzbBbsaRbhbhbCbhaRbsbDbDbDfQbDbDbDgEbBbBbEcebFbGbBgFbhbhbhbhgGbwbwbHgHbJbwbKbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaabpbLbMbNbObObObObObObObObObObObObObObObObObObObObObObObObObObObObPbMbQaaaaaabpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaUbabababfbababaaUaLaRaRaRaRaRbhbhbhbhaRbsgIbRbwbwbwbSgJbsbhbhbhbhbhbsaRbhbhbhbhaRbsbDbDbDbDbDbDbDbhbhbhbhbhbhbhbhbhbhbhbhbhbhbwbwbwbwbwbwbwbsaRbhbhbhbhaRaXaRaRaRaRaRaRaRaRaRaRaRaLaLaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaabpbTbUbVbVbVbVbVbVbVbVbVbWbVbVbVbVbVbVbVbVbVbVbWbVbVbVbVbVbVbVbVbVbXbQaaaaaaaabpbpaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaUbfbababababfbaaUaLaRaWaRaRbdbhbhbhbhaRbsbwbwbwbwbwbwbwbsbhbhbhbhbhbsaRbhbkbhbhaRbsbDbDbDbDbDbDbDbBbBbBbBbBbBbBbAbBbYbBbBbBbZbwbwbwbwcabwbwbsaRbhbhbhbhaRaRaRaRaRaRaRaXaRaRaRaRaRaRaLaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaabpbTcbbVbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbVccbQaaaaaaaaaabpbpaaaaaaaaaaaaaaaaaaaaaaaGaGaGaUbababababababaaUaLaRaRaRaRaRbhbhbkbhaRbsgIbRcdbwbwbSgJbsbsbsbsbscfbsaRbhbnbhbhaRbsgKcgbDbDchcgbDbBcicicicicicicicibhbhbhbhbBbwbwbwbwbwbwgJbsaRbhbhbCbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaabpbTcbbVbMcjcjcjcjcjcjbMckclgLclclckgMclckckgLckclbMcmcngNcncpbMbVcccqaaaaaaaaaaaabpcrbpaaaaaaaaaaaaaaaaaaaGaGaGaUbababababababmaUaLaRaRaRaRaRbibhbhbhaRbsbwbwbwbwbwbwbwcfbhbhbhbhbhbsaRbhbhbhbhaRbsbDbDbDcsbDbDbDbBbhbhbhbhbhbhbhbhbhbhbhbhbBbwbwbwbwbwbwbwbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaLaLaRaLaIaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaabpbTcbbVbMckckckclckckbMckctctctctcuctcuckcvcvclckbMcncncncncnbMbWcccqaaaaaaaaaabpbpbpbpbpbpaaaaaaaaaaaaaaaGaGaGaUbabmbabmbababaaUaLaRaRaRaRaRbhbhbhbhaRbsbsbsbsbsbsbsbsbsbhbhbhbhgObsaRbhcwbhbhaRbsbDbDbDbDbDbDbDbBbhbhbhbhgPbhbhgPbhbhbhbhbBbwbwbwbwbwbwbwbsaRbhbhbhbhaRaRcxaRaRaRaRaRaRaRaRaLaLaLaLaIaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabpbpbLcbbVbMgQczckckckgRbMgScuctctctctctctcAckckckgRbMgTcncBcCgUbMbVcccqbpbpaabpbpbpaaaaaabpbpbpbpaaaaaaaaaGaGaGaGaUbababababababaaUaLaRaRaRaRaRbhbhbhbhaRbscDbhgVbhbhbhgVbhbhbhbhbhbhbsaRbhbhbhbhaRbsbBbBbBbBbBbBbBbBbhbhbhgWbsgXgObsgXbhbhbhbBbBbBcEcFbBbBbBbsaRbkbhbnbhaRaRaRaRaRaRaRaRaRaRaRaRaLaLaLaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabpaabTcbbVbMcGcHckckcIckcJckctctctctcKctctcAckckckckbMcncncncncnbMbWccbQaacrbpbpaaaaaaaaaaaaaaaabpbpbpaaaaaGaGaGaGaUbfbabababababaaUaLaRaRaRaRaRbhbibhbhaRbscDbhbhbsbsbhbhbsbsbhbhbsbsbsaRbhbhbhbhaRbsbhcicicicicicibhbhbhbhbhgVbhbhgVbhbhbhbhbhcicicicicicibhbsaRbhbhbhbhaRaRaRaRaRaRaRaRaWaRaRaRaRaRaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabpaabTcLbVbMcyczckckckckbMckctctctctctctctcMckckckckcJcncncncncnbMbVcNbQaabpaaaaaaaaaaaaaaaaaaaaaaaabpaaaGaGaGaGaGaUbabfbacObababaaUaLaRaYaRaRaXbhbhbhbhaRbscDbCbhcDbsbhbhbsbhbhbhbhbhbsaRbhbhbhbhaRbsbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbsaRbhbhbhbhaRaRaRaXaRaRaRaRaRaRaRaRaRaRaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabpaabLbMbVbMckckckckckckbMckctctcPctctctctcMckckckckbMcncQcRcScnbMbVbMbQaabpaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaUbababababababaaUaLaRaRaRaRaRbhbhbhbhaRbscDbhbhcDbsbhbhbsgYbhbhbhgZbsaRbhbhbhbkaRbscVbBcWbhcVbBcWbhcVbBcWbhcVbBcWbhcVbBcWbhcVbBcWbhcVbBcWbhbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaacrbpbLcXbVbMgSckcIckclgRbMgSctctctctctctctcMckckckgRbMhacncYcngUbMbVcZbQaabpbpaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaUbababababfbabaaUaLaRaRaRaRaRbhbhbkbhaRbscDbhgPcDbsbhbhbscTbhbhbhcUbsaRbkbhbhbhaRbsbhhbbhbhbhbhhbbhbhbhbhhbbhbhbhbhhbbhbhbhbhhbbhbhbhbhhbbhbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaabpbpaabTcbbVbMckckckckckclbMckcuctdactctctctckckckckckbMcncncncncnbMbVccbQbpbpbpbpaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaUaUbabababababadbaUaLaRaRaRaRaRbhbhbhbhaRbsbsbsbsbsbscfcfbsbsdcdcbsbsbsaRbhbhbjbhaRbsbsbsbsdcdcdcbsbsbsbsbsbsbsdddebsbsbsbsbsbsbsdcdcdcbsbsbsbsaRcwbhbkbhaRaRaRaYaRaRaRaRaRaRaRaRaRaLaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbMckdgclckckckbMckckhcckckckhccIckckhcckckbMdhdhhddjdjbMbVcccqbpaaaabpbpbpbpaaaaaaaGaGaGaGaGaGaGaGaGaUaUbfbmbabababmbabaaUaLaRaRaRaRaRbhbhbhbhaRaRaRaRaRaRhedkaRheaRaRaRaRaRaRaRbhbhbhbhaRaRaRaRheaRaRaRheaRaRaRaRaRheaXdkheaRaRaRaRaRheaRaRaRheaRaRaRaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbMbMbMbMbMbMbMbMbMbMbMcJcJbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbVcccqaaaaaaaaaaaabpbpbpaGaGaGaGaGaGaGaGaGaGaUaZbabababababababfaUaLaRaRaRaRaRbhbhbibhbhbhbhbhbhbhbhdlbkbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhdmbhbhbhbhbhdlbhbhbhbkbhbhbhbhbhbhbhbhbhbhbhbjbhbhbhaRaRaRaRdnaRaRaRaRaRaRaRaRaLaLaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbVbVbVbVbVbVdobVbVbVhfbVbVhfbVbVbVbVbVbVbVbVbVbVbVbVbVbVdocccqbpaaaaaaaaaaaaaaaGaGaGaUaUaUaUaUaUaUaUaUbabababababfbaaUaUaUaLaRaRaRaRaRbhbhdpbhbhbhbhbhbhbhbhdlbhbhbhbhbhbhbhbhbhbhbhbhcwbhbhbhbhbhbhbhbhbhbhbhbibhbhbhbhdlbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhaRaRaRaRaRaRaRaXaRaRaRaRaRaLaLaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVdobVbVbVbVbVbVbVbVbVbVbVdqbVbVbVbVbVbVdobVbVbVdrbVbVbVbVbVccbQbpaaaaaaaaaaaaaaaGaGaGaUaZbabmbababfbabababababababmbaaUaNaLaLaRaRaRaRaRbibhbhbhbhbhbhbhbhbhbhbhbhbhbhbibhbhbhbhbhbhbhbhbhbhbhbhbhbkbhbhbhbhbhbhbhbhbhbhbhdlbhbhbhbhbjbhbhcwbhbkbhbhbhbhbhbhbhbkbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbVbVbMbMbMbVbVbVbVbVbVbVbWbVbVbVbVbVbVdqbVdrbVbVbVbVbWbVbVccbQbpaaaaaaaaaaaaaGaGaGaGaUbababababababababmbababfbaaUaUaUaLaLaRaRaWaRaRaRbqbhbhbhbhbhbhbnbhbhbhbhbhbhbhdlbhbkbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhdlbhbhbhbhbhbhbhbhbhbhbhbhbhbhbnbhbhbhbhaRaRaRaRhgaRaRhgaRaRaRaRaRaLaLaGaGaaaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbVbVbMdsbMbVbVbVdrbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVdtbVbVbVccbQbpbpaaaaaaaaaaaGaGaGaGaUbabfbababablbabababababaaUaUaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRhgdkaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbhbhdpbhbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsdcdcbsbsbsbsbsaLaLaNaGaGaGaGaaaaaaaaaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaabpbpaadfcbdrbVbVbMdubMbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVdobVbVdrbVbVbWbVccbQbpbpbpaaaaaGaGaGaGaGaGaUbabababababababababfbabaaUaNaNaLaLaRaRaRaRaRaRaRaWaRaRaRaRaRaRbsbsbsbsbsbsbsbscfbsbsbsbsbsbsbsaRaRbsbsbsbsbsbsbsbsbsbsbsbsbsaRbjbhbhbhbsbhbhbhgVbhbhgVbibhbhbsdvhhdvdvdvbhdvbsbhbhgVbhbhbhgVbhbhbsaNaNaNaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabpbpdfcLbVbVbVbVbVhfbVbVbVbVbVbVbVbVbVbVbVdwbVbVbVbVbVbVbVbVbVbVbVbVcNbQbpaabpbpbpaGaGaGaGaGaGaUbmbabababfbabababaaUaUaUaUaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsbwhibwbwhibwbsbhbshjbwbwbwbwbsaRaRbsbhdygVdybhdybhdygVdybhbsaRbhbhbhbhbsbhbDdzbDdAdBbDbDbDbhdCbhbhbhbhbhbhbhbsdDcwdEbhbjbhdFdGbhdHaNaNaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaabpdfbMdIdJdJdJdJdJdJdJdJdJdJdKdLdLdIdJdJdJdJdJdJdJdJdJdJdJdJdJdJdKbMbQbpaaaabpaGaGaGaGaGaGaGaUbababababababmbabaaUaNaNaNaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsdMbwbwbwbwdNbsbhbsdxbwbwbwbwbsaRaRbsbhbhbhbhbhbhbhbhbhbhbhbsaRbkbhbhbhbsbhbDdOdPdQdRdSdTbDbhbsbhbhbhbhdGbhbhbsbBbhdEbhbhbhdFbhbhbsaNaNaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabpbpaadUdUdUdUdUdUdUdUdUdUdUdVdWdXdYdZdUdUdUdUdUdUdVdUdUdUdUdUdUdVdUdUbpcraaaabpbpbpaGaGaGaGaGaUbbbbaUaUaUaUbabmaUaUaNaNaLaLaRaRaRaRaXaRaRaRaRaReaaRaRaXaRaRaRbsdMbxebbwbwdNbsgObsecbwebbwbwbsaRaRbsbhdybhdybhdybhedbhdybhbsaRbhbhbhbhbsgXbDeedQbDbDdQefdzgObsdvbhbhbhbhbhbhbsdDbhdEbhbhcwdFbhbhdHaNaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabpbpaaaaaaaaaaaaaaaaaabpbpbpbpdfeheibQaaaaaaaaaaaabpbpbpbpbpbpbpbpbpbpbpbpbpaaaaaacraGaGejejejejekekejejejaUaUaUaUaNaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsdMbwbwelbwdNbsbhbsdxbwbwbxbwbsaRaRbsgXbhbibhbhbhbhbhbhbhgObsaRbhbhbhbhbsbhbDdOdSbDbDdSdTembhbsdvdvbhbhbhhkbhdCbhbhbhdGbhbhdFbhbhbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpaaaaaaaaaaaabpbpaaaaaadfeneobQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpbpbpejejejepeqerekekekekejejejejaNaNaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsdMhlbwbwhldNbsbhbshjbwbwbwbwbsaRaRbsbhbhbhbhbhbCbhbhbhbhbhcfaRbhbhbnbhbsbhbDeedRbDbDdRefbDbhbsbsbsbsbsbsbsbsbsbhesesesesbhdFbhbhdHaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpbpbpbpbpbpaaaaaaaadfdXetbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejekekekekekekekekekekekekejaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaXaRaRaRaRbsbsbsbwbwbsbsbscfbsbsbwbwbsbsbsaWaRbsbheubhdybhdybhevbhdybhbshmbhbhbhbhbshnbDdOdQbDbDewexbDgObsbyhobybybyhobybsbhdDhpbBdDbhgPbhbhbsaNaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfeheybQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaezekekekekekekekekekekekekejaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsbhbhbhbhbhbhbhbhbhbhbhbhbhbhbsdkaRbsgXbhbhbhbhbhbhbhbhbhgObsaRbhdpbhbhbsbhbDeedSdQdPdRefeAbhbsbhbhbhbhbhbhbhbsbsbsbsbsbseBbsbsbsbsaNaNaNaGaGaGaGaaaaaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfeCdYbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeDeEeFeGekekekekekekekekekekekekejaNaNaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsbhbheHbhbsbsbsbsbsbsbhbhbhbhbsdkaWbsbhdybhevbhdybhdybhdybhbsaRbhbhbhbhbsbhbDbDbDeIeJeKbDbDbhdCbhcwbhbhbjbhbhdCeLhqeMeNeOeOePhreLbsaNaNaNaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfdXeQbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRekekeRekekekekekekekekekekekekejaNaNaNaLaRaRaRaRaXaRaRaRaRaRaRaNaNaRaRaRaRaRaRbsgXbhbhbhbhhshshshsbhbhbhbhgObsdkaRbsbhbhbhbhbhbhbhbhbhbhbhbsaRbhbhbhbhbsbhbhbhgPbhbhgPbhbhbhbsbhbhbhbhbhbhbhbseLeLeLeTeUeVeLeLeLbsaNaNaNaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfendYbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeDeEeEeWekekekekekekekekekekekekejaNaNaNaLaRaRaRaRaRaRaRaRaRaRaRaNaNaNaRaRaRaRaRbsbhbhbhgPdpbibhbhbhbhgPbhbhbhbsdkaRbsbhbhgPbhbhbhbhbhgPbhbhbsaRbhbhbhbhbsbsbsbsbseXeXbsbsbsbsbsbsbsbsbsbsbsbsbseLeLeYeLeLeVeLeLhtbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfdXeibQaaaaaaaaaaaaaaaaaaaaaabpbpaaaaaaaaaaaaaaaaaaaaeZekekekekekekekekekekekekejaNaNaNaLaRaRaRaRaRaRaRaRbdaRaRaRaNaNaNaRaRaRaRbsfabsfabsfabsfabsbsfabsfabsfbbsaRaXfcbsbsbseBbsbsbsbsbsbsbsbsaRbhbhcwbhfdfebhgVbBbhbhbsbhbhgVbhbhbsbhbhgVbhbhbsffeLfgeLffeLfgeLeLbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaabtbtbtbtbtbtbtbtbtbtbtbtbtbtfhdLdLfibtbtbtbtbtbtaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaafjekekekekekekekekekekekekejaNaNaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaNaNaNaRaRaRbsbsbsbsbsbsbsbsbsbsbsfcbsbsbsbsaRaRfkaRaWaRaRaRaRflaRaWaRaRaRaRbhbhbhgObshubhbhbBfmbhbsbhfnbBfmbhbsbhfobBfpbhbseLeLeLfqeLeLeLfqeLbsaNaNaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabTfrfsfsfsfsfsfsfsfsfsfsfsfsfsfsftftfsfsfsfsfsfsfufvbpbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaejekekekekekekfwekekekekekejaNaLaLaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaNaNaNaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaReaaWfxfcbsbsbsbsbseBbsbsbsbsbsbsaRbjbhbhfycfbhbhbhbBbhbhbsbhbhegbhbCbsbjbhbhbhbhbsdcdcdcbsdCbseLfzeLbsaNaNaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBfvbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaaafCekekekekekekekekekekekekejaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaNaNaRaRaRaRaRaRbsbsbsbsbsbsbsbsbsbsbsbsfcdkbsfDbhbhbhbhgVbhbhbhbhbhbsaRbhfEbhbhcfbhbhbhbBfmgObsbhfnbBfmbjbsbhfobBfpbhbsbhbhbhbhbhdceLeLhtbsaNaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftfFfFfGfHfIfIbpbpbpaaaaaaaaaaaaaaaaaaaaaaeZekekekekekekfJekekekekekejaNaLaRaRaRaRaRaRaRaRaRaRaPaRaNaNaNaNaNaNaNaRaRaRaRaRaRbsfKbhbhbhbhgVbhbhbhbhbhbsdkeBbhbhbhbhdpcwbhbhbhbhbhddaRbhbjbhgObshubjbhbBbhbhbsgXbhbBbhgObsgXcwfLbhgObsbsbsbsbhbhdceLfMeLbsaNaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftfNftfNfIfIfIbpbpaaaaaaaaaaaaaaaaaaaaaaaafjekekekekekekekekekekekekejaNaLaRaRaRaRaRaRaNaNaNaNaNaNaNaNaNaNaNaNaNaRaRaRaRaRaRbsbhbhbhbhbjbhfObhbjdGbhbsflbsbhbhdGbhbhbhbhbhbhcwbhbshmbhfPbhbhbsfebhbhbBbhbhbsbhfnbBfmbhbsbhfobBfpbhbshvbhbshnbhdceLeLeLbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabTfAftftfSftftftftftftftftftftftftftftftftftfsfsfTfHfIbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaejekekekekekekekekekekekekejaLaLaRaRaRaRaLaLaLaLaLaLaLaLaLaLaLaLaLfUaLaLaRaRaRaRaRbsbhbhbhbhbhfPfVdpbhfWbhcfaRbsgXbhbhbhbhbhfRbhbhbhgObsdnbhbhbhbheBfXbhbhbBfmgObsbhbhbhbhbhbsbhbhbhbhbhbsfYbhcfbhbhdceLfZeLbsaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBfvbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaafCekekekekekekekekekekekekejaLaPaRaRaLaLaLaLaRaRaRaRaRaRaRaRdnaRaRaRaLaLaLaRaRaRaRbsgXdpbhbhbhbhbhbhgabhgOeBhmbsbhbhbhbhbhbhdpbhbhdGbheBaRbhbhbhbhbsfebhbhbBbhbhbsbsbscfbseBbsbsbscfbsbsbsbseBbsbhbhdceLeLhtbsaNaNaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZekekekekekekekekekekekekejaLaLaLaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaReaaRaLaLaLaRaRaRbsbhbhbjbhbnbhbhdpbhbhbhbsaWbsbhbhcwbhbhbhbibhbhbhbhbsaRaRaRaRaRbsgXbhcwbBbBbhbsbhbhbjbhbhcwbhbhbhbhbhbhbhbhbhbjbhbseLfMeLbsaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafjekekekekekekekekekekekekejaGaNaNaLaLaRaRaRaRaRaLaLaLfUaRaRaRaRaRaRaRaRaRaLaLaRaRbsbhbhbhbhbhbhbhbhdGbhbhbsaRbsbhbhbhgPbhbhgPbhbhbhbhfcaRaXaRaRaRbsbhbhgPbhbhcwcfbhbhgPbhdGbhbhbhgPbhbhfPcwbhgPbhbhbseLeLeLbsaNaNaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftgdftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejgeeEeWeRgfggezgeeEghejejejaGaNaNaLaRaRaRaRaRaRaLaLaLaLaLaLaLaRaRaReaaRaRaRaLaLaLbsbsbsbsbsfcaRbsbsbsbsbsbsaRbsbsbsbseBdcdcbsbsbsbsbsbsaRaRaRaRaRbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsaNaNaNaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZekeZaaaaaaaaaaaGaGaGaGaNaLaLaRaRaRaRaRaRaRaRaRaRaLaLaLaLaLaLaRaRaRaRaRfUaLaLaRaRaRaRaRaRfcbsbsaRaRaRaRaRaRaRaRheaRaRheaRaRaRaRaRaRaRaRaRaRaLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaacacacacaaaaabacacabaaacacacaaaaacacaaaaaaaaaGaGaGaGaGaGaIaIaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaNaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaacacacaaaaabacacabaaacaaacaaaaaaacacacaGaGaGaIaIaIaIaTaTaUaVaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaLaLaLaLaIaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacacacacacacacaaaaaaaaaaaaaaaaaaaGaGaGaGaIaUaUaUaUaUaUaUaRaRaRaRaRaRaRaRaRaWaRaRaRaRaRaRaRaRaRaRaRaRaRaRaXaRaRaWaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaYaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaLaRaRaRaIaNaGaGaaaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaGaGaGaIaUaZbababababbaRaRaRaRaRaXaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaXaRaRaRaRaRaRaRaRaRaRaRaRaRaRaWaRaRaRaRaRaRaRaRaRaRaRaXaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaGaIaIaUbabababababbaRaRaRaRaRaRaRbcaRaRaRaRaRaRaRaRaRaRaRbdaRaRaRaRaRaRaRaRaRaRaRaRaXaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaLaNaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaGaIbeaUbabababaaUaUaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaWaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbdaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaNaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaGaIaIbebabfbababaaUaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbgaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaGaIaUaUbababababaaUaLaRaRaRaRaRbhbhbhbhbhbhbhbhbhbhbibhbhbhbhbhbhbhbhbhbhbhbjbhbhbhbhbhbhbhbhbhbhbhbhbhbibhbhbhbhbhbhbhbhbhbhbhbhbkbkbhbhbhbhbhbhbhbhbhbhaRbdaRaRaRaRaRaRaRaRaRaRaRaLaNaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaGaGaIaUbfbabablbabmaUaLaRaRaRaRaRbjbhbhbhbhbhbhbhbhbhbibkbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbkbhbhbhbhbhbhbhbhbhbhbhbhbhbhbnbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhaRaRaWaRaRaRaRaRaRaRaRaRaLaLaNaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaIaUbabababababaaUaLaRaRaXaRaRbhbhbhbnbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbkbhaRaRaRaRaRaRaXaRaRaRaRaRaLaLaLaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaIaIaUbababobababfaUaLaRaRaRaRaRbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbkbhbhbhbhbhbhbibhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaIaUaUbabababfbabaaUaLaRaRaRaRaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbqbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpaaaaaaaabpbpbpbpbpbpbpbpbpbpaabpaabpbpbpbpaaaaaabpbpbpbpbpbpbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaIaUbrbabababababaaUaLaRaRaRaRaRbkbhbhbhaRbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsaRbhbhbhbhaRbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaLaLaGaGaGaGaGaaaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaabpbtbububububububtbtbtbtbtbububtbtbtbubtbtbtbtbubububububtbtbtbtbtaabpaabpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaIaUbababababababaaUaLaRaRaRaRaRbhbhbhbhaRbsbvbwbwbxbwbwbwbsbybzeSbzbBbsaRbhbhbCbhaRbsbDbDbDfQbDbDbDgEbBbBbEcebFbGbBgFbhbhbhbhgGbwbwbHgHbJbwbKbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaabpbLbMbNbObObObObObObObObObObObObObObObObObObObObObObObObObObObObPbMbQaaaaaabpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaIaUbabababfbababaaUaLaRaRaRaRaRbhbhbhbhaRbsgIbRbwbwbwbSgJbsbhbhbhbhbhbsaRbhbhbhbhaRbsbDbDbDbDbDbDbDbhbhbhbhbhbhbhbhbhbhbhbhbhbhbwbwbwbwbwbwbwbsaRbhbhbhbhaRaXaRaRaRaRaRaRaRaRaRaRaRaLaLaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaabpbTbUbVbVbVbVbVbVbVbVbVbWbVbVbVbVbVbVbVbVbVbVbWbVbVbVbVbVbVbVbVbVbXbQaaaaaaaabpbpaaaaaaaaaaaaaaaaaaaaaaaaaGaGaIaUbfbababababfbaaUaLaRaWaRaRbdbhbhbhbhaRbsbwbwbwbwbwbwbwbsbhbhbhbhbhbsaRbhbkbhbhaRbsbDbDbDbDbDbDbDbBbBbBbBbBbBbBbAbBbYbBbBbBbZbwbwbwbwcabwbwbsaRbhbhbhbhaRaRaRaRaRaRaRaXaRaRaRaRaRaRaLaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaabpbTcbbVbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbVccbQaaaaaaaaaabpbpaaaaaaaaaaaaaaaaaaaaaaaGaGaIaUbababababababaaUaLaRaRaRaRaRbhbhbkbhaRbsgIbRcdbwbwbSgJbsbsbsbsbscfbsaRbhbnbhbhaRbsgKcgbDbDchcgbDbBcicicicicicicicibhbhbhbhbBbwbwbwbwbwbwgJbsaRbhbhbCbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaNaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaabpbTcbbVbMcjcjcjcjcjcjbMckclgLclclckgMclckckgLckclbMcmcngNcncpbMbVcccqaaaaaaaaaaaabpcrbpaaaaaaaaaaaaaaaaaaaGaGaIaUbababababababmaUaLaRaRaRaRaRbibhbhbhaRbsbwbwbwbwbwbwbwcfbhbhbhbhbhbsaRbhbhbhbhaRbsbDbDbDcsbDbDbDbBbhbhbhbhbhbhbhbhbhbhbhbhbBbwbwbwbwbwbwbwbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaLaLaRaLaIaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaabpbTcbbVbMckckckclckckbMckctctctctcuctcuckcvcvclckbMcncncncncnbMbWcccqaaaaaaaaaabpbpbpbpbpbpaaaaaaaaaaaaaaaGaGaIaUbabmbabmbababaaUaLaRaRaRaRaRbhbhbhbhaRbsbsbsbsbsbsbsbsbsbhbhbhbhgObsaRbhcwbhbhaRbsbDbDbDbDbDbDbDbBbhbhbhbhgPbhbhgPbhbhbhbhbBbwbwbwbwbwbwbwbsaRbhbhbhbhaRaRcxaRaRaRaRaRaRaRaRaLaLaLaLaIaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabpbpbLcbbVbMgQczckckckgRbMgScuctctctctctctcAckckckgRbMgTcncBcCgUbMbVcccqbpbpaabpbpbpaaaaaabpbpbpbpaaaaaaaaaGaGaGaIaUbababababababaaUaLaRaRaRaRaRbhbhbhbhaRbscDbhgVbhbhbhgVbhbhbhbhbhbhbsaRbhbhbhbhaRbsbBbBbBbBbBbBbBbBbhbhbhgWbsgXgObsgXbhbhbhbBbBbBcEcFbBbBbBbsaRbkbhbnbhaRaRaRaRaRaRaRaRaRaRaRaRaLaLaLaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabpaabTcbbVbMcGcHckckcIckcJckctctctctcKctctcAckckckckbMcncncncncnbMbWccbQaacrbpbpaaaaaaaaaaaaaaaabpbpbpaaaaaGaGaGaIaUbfbabababababaaUaLaRaRaRaRaRbhbibhbhaRbscDbhbhbsbsbhbhbsbsbhbhbsbsbsaRbhbhbhbhaRbsbhcicicicicicibhbhbhbhbhgVbhbhgVbhbhbhbhbhcicicicicicibhbsaRbhbhbhbhaRaRaRaRaRaRaRaRaWaRaRaRaRaRaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabpaabTcLbVbMcyczckckckckbMckctctctctctctctcMckckckckcJcncncncncnbMbVcNbQaabpaaaaaaaaaaaaaaaaaaaaaaaabpaaaGaGaGaGaIaUbabfbacObababaaUaLaRaYaRaRaXbhbhbhbhaRbscDbCbhcDbsbhbhbsbhbhbhbhbhbsaRbhbhbhbhaRbsbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbsaRbhbhbhbhaRaRaRaXaRaRaRaRaRaRaRaRaRaRaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabpaabLbMbVbMckckckckckckbMckctctcPctctctctcMckckckckbMcncQcRcScnbMbVbMbQaabpaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaIaUbababababababaaUaLaRaRaRaRaRbhbhbhbhaRbscDbhbhcDbsbhbhbsgYbhbhbhgZbsaRbhbhbhbkaRbscVbBcWbhcVbBcWbhcVbBcWbhcVbBcWbhcVbBcWbhcVbBcWbhcVbBcWbhbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaacrbpbLcXbVbMgSckcIckclgRbMgSctctctctctctctcMckckckgRbMhacncYcngUbMbVcZbQaabpbpaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaIaIaUbababababfbabaaUaLaRaRaRaRaRbhbhbkbhaRbscDbhgPcDbsbhbhbscTbhbhbhcUbsaRbkbhbhbhaRbsbhhbbhbhbhbhhbbhbhbhbhhbbhbhbhbhhbbhbhbhbhhbbhbhbhbhhbbhbsaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabpbpaabTcbbVbMckckckckckclbMckcuctdactctctctckckckckckbMcncncncncnbMbVccbQbpbpbpbpaaaaaaaaaaaaaaaaaGaGaGaGaGaGaIaIaUaUbabababababadbaUaLaRaRaRaRaRbhbhbhbhaRbsbsbsbsbsbscfcfbsbsdcdcbsbsbsaRbhbhbjbhaRbsbsbsbsdcdcdcbsbsbsbsbsbsbsdddebsbsbsbsbsbsbsdcdcdcbsbsbsbsaRcwbhbkbhaRaRaRaYaRaRaRaRaRaRaRaRaRaLaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbMckdgclckckckbMckckhcckckckhccIckckhcckckbMdhdhhddjdjbMbVcccqbpaaaabpbpbpbpaaaaaaaGaGaGaGaGaGaGaGaIaUaUbfbmbabababmbabaaUaLaRaRaRaRaRbhbhbhbhaRaRaRaRaRaRhedkaRheaRaRaRaRaRaRaRbhbhbhbhaRaRaRaRheaRaRaRheaRaRaRaRaRheaXdkheaRaRaRaRaRheaRaRaRheaRaRaRaRbhbhbhbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbMbMbMbMbMbMbMbMbMbMbMcJcJbMbMbMbMbMbMbMbMbMbMbMbMbMbMbMbVcccqaaaaaaaaaaaabpbpbpaGaIaIaIaIaIaIaIaIaIaUaZbabababababababfaUaLaRaRaRaRaRbhbhbibhbhbhbhbhbhbhbhdlbkbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhdmbhbhbhbhbhdlbhbhbhbkbhbhbhbhbhbhbhbhbhbhbhbjbhbhbhaRaRaRaRdnaRaRaRaRaRaRaRaRaLaLaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbVbVbVbVbVbVdobVbVbVhfbVbVhfbVbVbVbVbVbVbVbVbVbVbVbVbVbVdocccqbpaaaaaaaaaaaaaaaGaGaIaUaUaUaUaUaUaUaUaUbabababababfbaaUaUaUaLaRaRaRaRaRbhbhdpbhbhbhbhbhbhbhbhdlbhbhbhbhbhbhbhbhbhbhbhbhcwbhbhbhbhbhbhbhbhbhbhbhbibhbhbhbhdlbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhaRaRaRaRaRaRaRaXaRaRaRaRaRaLaLaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVdobVbVbVbVbVbVbVbVbVbVbVdqbVbVbVbVbVbVdobVbVbVdrbVbVbVbVbVccbQbpaaaaaaaaaaaaaaaGaGaIaUaZbabmbababfbabababababababmbaaUaNaLaLaRaRaRaRaRbibhbhbhbhbhbhbhbhbhbhbhbhbhbhbibhbhbhbhbhbhbhbhbhbhbhbhbhbkbhbhbhbhbhbhbhbhbhbhbhdlbhbhbhbhbjbhbhcwbhbkbhbhbhbhbhbhbhbkbhaRaRaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbVbVbMbMbMbVbVbVbVbVbVbVbWbVbVbVbVbVbVdqbVdrbVbVbVbVbWbVbVccbQbpaaaaaaaaaaaaaGaGaGaIaUbababababababababmbababfbaaUaUaUaLaLaRaRaWaRaRaRbqbhbhbhbhbhbhbnbhbhbhbhbhbhbhdlbhbkbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhdlbhbhbhbhbhbhbhbhbhbhbhbhbhbhbnbhbhbhbhaRaRaRaRhgaRaRhgaRaRaRaRaRaLaLaGaGaaaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabpaaaadfcbbVbVbVbMdsbMbVbVbVdrbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVdtbVbVbVccbQbpbpaaaaaaaaaaaGaGaGaIaUbabfbababablbabababababaaUaUaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRhgdkaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbhbhdpbhbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsdcdcbsbsbsbsbsaLaLaNaGaGaGaGaaaaaaaaaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaabpbpaadfcbdrbVbVbMdubMbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVbVdobVbVdrbVbVbWbVccbQbpbpbpaaaaaGaGaGaGaGaIaUbabababababababababfbabaaUaNaNaLaLaRaRaRaRaRaRaRaWaRaRaRaRaRaRbsbsbsbsbsbsbsbscfbsbsbsbsbsbsbsaRaRbsbsbsbsbsbsbsbsbsbsbsbsbsaRbjbhbhbhbsbhbhbhgVbhbhgVbibhbhbsdvhhdvdvdvbhdvbsbhbhgVbhbhbhgVbhbhbsaLaNaNaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabpbpdfcLbVbVbVbVbVhfbVbVbVbVbVbVbVbVbVbVbVdwbVbVbVbVbVbVbVbVbVbVbVbVcNbQbpaabpbpbpaGaGaGaGaGaIaUbmbabababfbabababaaUaUaUaUaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsbwhibwbwhibwbsbhbshjbwbwbwbwbsaRaRbsbhdygVdybhdybhdygVdybhbsaRbhbhbhbhbsbhbDdzbDdAdBbDbDbDbhdCbhbhbhbhbhbhbhbsdDcwdEbhbjbhdFdGbhdHaLaNaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaabpdfbMdIdJdJdJdJdJdJdJdJdJdJdKdLdLdIdJdJdJdJdJdJdJdJdJdJdJdJdJdJdKbMbQbpaaaabpaGaGaGaGaGaGaIaUbababababababmbabaaUaNaNaNaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsdMbwbwbwbwdNbsbhbsdxbwbwbwbwbsaRaRbsbhbhbhbhbhbhbhbhbhbhbhbsaRbkbhbhbhbsbhbDdOdPdQdRdSdTbDbhbsbhbhbhbhdGbhbhbsbBbhdEbhbhbhdFbhbhbsaLaNaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabpbpaadUdUdUdUdUdUdUdUdUdUdUdVdWdXdYdZdUdUdUdUdUdUdVdUdUdUdUdUdUdVdUdUbpcraaaabpbpbpaGaIaIaIaIaUbbbbaUaUaUaUbabmaUaUaNaNaLaLaRaRaRaRaXaRaRaRaRaReaaRaRaXaRaRaRbsdMbxebbwbwdNbsgObsecbwebbwbwbsaRaRbsbhdybhdybhdybhedbhdybhbsaRbhbhbhbhbsgXbDeedQbDbDdQefdzgObsdvbhbhbhbhbhbhbsdDbhdEbhbhcwdFbhbhdHaLaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabpbpaaaaaaaaaaaaaaaaaabpbpbpbpdfeheibQaaaaaaaaaaaabpbpbpbpbpbpbpbpbpbpbpbpbpaaaaaacraIaIejejejejekekejejejaUaUaUaUaNaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsdMbwbwelbwdNbsbhbsdxbwbwbxbwbsaRaRbsgXbhbibhbhbhbhbhbhbhgObsaRbhbhbhbhbsbhbDdOdSbDbDdSdTembhbsdvdvbhbhbhhkbhdCbhbhbhdGbhbhdFbhbhbsaLaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpaaaaaaaaaaaabpbpaaaaaadfeneobQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpbpbpejejejepeqerekekekekejejejejaNaNaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsdMhlbwbwhldNbsbhbshjbwbwbwbwbsaRaRbsbhbhbhbhbhbCbhbhbhbhbhcfaRbhbhbnbhbsbhbDeedRbDbDdRefbDbhbsbsbsbsbsbsbsbsbsbhesesesesbhdFbhbhdHaLaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbpbpbpbpbpbpbpaaaaaaaadfdXetbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejekekekekekekekekekekekekejaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaXaRaRaRaRbsbsbsbwbwbsbsbscfbsbsbwbwbsbsbsaWaRbsbheubhdybhdybhevbhdybhbshmbhbhbhbhbshnbDdOdQbDbDewexbDgObsbyhobybybyhobybsbhdDhpbBdDbhgPbhbhbsaLaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfeheybQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaezekekekekekekekekekekekekejaNaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsbhbhbhbhbhbhbhbhbhbhbhbhbhbhbsdkaRbsgXbhbhbhbhbhbhbhbhbhgObsaRbhdpbhbhbsbhbDeedSdQdPdRefeAbhbsbhbhbhbhbhbhbhbsbsbsbsbsbseBbsbsbsbsaLaNaNaGaGaGaGaaaaaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfeCdYbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeDeEeFeGekekekekekekekekekekekekejaNaNaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRbsbhbheHbhbsbsbsbsbsbsbhbhbhbhbsdkaWbsbhdybhevbhdybhdybhdybhbsaRbhbhbhbhbsbhbDbDbDeIeJeKbDbDbhdCbhcwbhbhbjbhbhdCeLhqeMeNeOeOePhreLbsaLaNaNaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfdXeQbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRekekeRekekekekekekekekekekekekejaNaNaNaLaRaRaRaRaXaRaRaRaRaRaRaNaNaRaRaRaRaRaRbsgXbhbhbhbhhshshshsbhbhbhbhgObsdkaRbsbhbhbhbhbhbhbhbhbhbhbhbsaRbhbhbhbhbsbhbhbhgPbhbhgPbhbhbhbsbhbhbhbhbhbhbhbseLeLeLeTeUeVeLeLeLbsaLaNaNaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfendYbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeDeEeEeWekekekekekekekekekekekekejaNaNaNaLaRaRaRaRaRaRaRaRaRaRaRaNaNaNaRaRaRaRaRbsbhbhbhgPdpbibhbhbhbhgPbhbhbhbsdkaRbsbhbhgPbhbhbhbhbhgPbhbhbsaRbhbhbhbhbsbsbsbsbseXeXbsbsbsbsbsbsbsbsbsbsbsbsbseLeLeYeLeLeVeLeLhtbsaLaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfdXeibQaaaaaaaaaaaaaaaaaaaaaabpbpaaaaaaaaaaaaaaaaaaaaeZekekekekekekekekekekekekejaNaNaNaLaRaRaRaRaRaRaRaRbdaRaRaRaNaNaNaRaRaRaRbsfabsfabsfabsfabsbsfabsfabsfbbsaRaXfcbsbsbseBbsbsbsbsbsbsbsbsaRbhbhcwbhfdfebhgVbBbhbhbsbhbhgVbhbhbsbhbhgVbhbhbsffeLfgeLffeLfgeLeLbsaLaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaabtbtbtbtbtbtbtbtbtbtbtbtbtbtfhdLdLfibtbtbtbtbtbtaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaafjekekekekekekekekekekekekejaNaNaLaLaRaRaRaRaRaRaRaRaRaRaRaRaRaNaNaNaRaRaRbsbsbsbsbsbsbsbsbsbsbsfcbsbsbsbsaRaRfkaRaWaRaRaRaRflaRaWaRaRaRaRbhbhbhgObshubhbhbBfmbhbsbhfnbBfmbhbsbhfobBfpbhbseLeLeLfqeLeLeLfqeLbsaLaNaNaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabTfrfsfsfsfsfsfsfsfsfsfsfsfsfsfsftftfsfsfsfsfsfsfufvbpbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaejekekekekekekfwekekekekekejaNaLaLaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaNaNaNaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaReaaWfxfcbsbsbsbsbseBbsbsbsbsbsbsaRbjbhbhfycfbhbhbhbBbhbhbsbhbhegbhbCbsbjbhbhbhbhbsdcdcdcbsdCbseLfzeLbsaLaNaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBfvbpbpbpbpaaaaaaaaaaaaaaaaaaaaaaaafCekekekekekekekekekekekekejaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaNaNaRaRaRaRaRaRbsbsbsbsbsbsbsbsbsbsbsbsfcdkbsfDbhbhbhbhgVbhbhbhbhbhbsaRbhfEbhbhcfbhbhbhbBfmgObsbhfnbBfmbjbsbhfobBfpbhbsbhbhbhbhbhdceLeLhtbsaLaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftfFfFfGfHfIfIbpbpbpaaaaaaaaaaaaaaaaaaaaaaeZekekekekekekfJekekekekekejaNaLaRaRaRaRaRaRaRaRaRaRaPaRaNaNaNaNaNaNaNaRaRaRaRaRaRbsfKbhbhbhbhgVbhbhbhbhbhbsdkeBbhbhbhbhdpcwbhbhbhbhbhddaRbhbjbhgObshubjbhbBbhbhbsgXbhbBbhgObsgXcwfLbhgObsbsbsbsbhbhdceLfMeLbsaLaNaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftfNftfNfIfIfIbpbpaaaaaaaaaaaaaaaaaaaaaaaafjekekekekekekekekekekekekejaNaLaRaRaRaRaRaRaNaNaNaNaNaNaNaNaNaNaNaNaNaRaRaRaRaRaRbsbhbhbhbhbjbhfObhbjdGbhbsflbsbhbhdGbhbhbhbhbhbhcwbhbshmbhfPbhbhbsfebhbhbBbhbhbsbhfnbBfmbhbsbhfobBfpbhbshvbhbshnbhdceLeLeLbsaLaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabTfAftftfSftftftftftftftftftftftftftftftftftfsfsfTfHfIbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaejekekekekekekekekekekekekejaLaLaRaRaRaRaLaLaLaLaLaLaLaLaLaLaLaLaLfUaLaLaRaRaRaRaRbsbhbhbhbhbhfPfVdpbhfWbhcfaRbsgXbhbhbhbhbhfRbhbhbhgObsdnbhbhbhbheBfXbhbhbBfmgObsbhbhbhbhbhbsbhbhbhbhbhbsfYbhcfbhbhdceLfZeLbsaLaNaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBfvbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaafCekekekekekekekekekekekekejaLaPaRaRaLaLaLaLaRaRaRaRaRaRaRaRdnaRaRaRaLaLaLaRaRaRaRbsgXdpbhbhbhbhbhbhgabhgOeBhmbsbhbhbhbhbhbhdpbhbhdGbheBaRbhbhbhbhbsfebhbhbBbhbhbsbsbscfbseBbsbsbscfbsbsbsbseBbsbhbhdceLeLhtbsaLaNaNaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZekekekekekekekekekekekekejaLaLaLaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaReaaRaLaLaLaRaRaRbsbhbhbjbhbnbhbhdpbhbhbhbsaWbsbhbhcwbhbhbhbibhbhbhbhbsaRaRaRaRaRbsgXbhcwbBbBbhbsbhbhbjbhbhcwbhbhbhbhbhbhbhbhbhbjbhbseLfMeLbsaLaNaNaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafjekekekekekekekekekekekekejaGaNaNaLaLaRaRaRaRaRaLaLaLfUaRaRaRaRaRaRaRaRaRaLaLaRaRbsbhbhbhbhbhbhbhbhdGbhbhbsaRbsbhbhbhgPbhbhgPbhbhbhbhfcaRaXaRaRaRbsbhbhgPbhbhcwcfbhbhgPbhdGbhbhbhgPbhbhfPcwbhgPbhbhbseLeLeLbsaLaNaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftgdftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejgeeEeWeRgfggezgeeEghejejejaGaNaNaLaRaRaRaRaRaRaLaLaLaLaLaLaLaRaRaReaaRaRaRaLaLaLbsbsbsbsbsfcaRbsbsbsbsbsbsaRbsbsbsbseBdcdcbsbsbsbsbsbsaRaRaRaRaRbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsaLaNaNaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftftftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZekeZaaaaaaaaaaaGaGaGaGaNaLaLaRaRaRaRaRaRaRaRaRaRaLaLaLaLaLaLaRaRaRaRaRfUaLaLaRaRaRaRaRaRfcbsbsaRaRaRaRaRaRaRaRheaRaRheaRaRaRaRaRaRaRaRaRaRaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaLaNaNaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaabTfAftftftftftftftfSftftftftftftftftftftftftftftfBbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZekeZaaaaaaaaaGaGaGaGaGaNaLaRaRaRaRaRaRaRaRaRaRaRaRaRaRfUaLaLaLaRaRaReaaRaRaLaRaReaaRaLaLaLaLaLaLaLaLaRaRaLaLaLaLaLaRaRaLaLaRaRaLaRaRaRaRaLaLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaGaGaGaGaGaGaGaGaaaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaabTgigjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgkbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagleRglaaaaaaaaaGaGaGaGaNaNaLaLaLaLaLaLaRaRaRaRaRaRaRaRaRaRaLaLaLaLaLaRaRaRaRgmaRaWaRaRfUaNaNaNaNaNaNaLaLaLaLaNaNaNaLaLaLaLaLaLaLaLaRaLaLaLaLaLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaGaGaGaGaGaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaadUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagngogpgqgrgogsaaaaaaaGaGaGaNaNaNaLaLaLaLaLaLfUaLaLaRaRaRaRaRaRaRaRaLaLaLaLaRaRaWeaaRaRaRaRaLaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaNaNaNaNaLaLaLaGaGaGaNaNaNaNaNaNaNaNaNaNaNaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaadUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUdUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagbgogpgqgrgogcaaaaaaaGaGaGaNaNaNaLaLaLaLaLaLfUaLaLaRaRaRaRaRaRaRaRaLaLaLaLaRaRaWeaaRaRaRaRaLaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaNaNaNaNaLaLaLaGaGaGaNaNaNaNaNaNaNaNaNaNaNaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtgugugvgugugtaaaaaaaGaGaGaNaNaLaLaRaRaRaRaLaLaNaLaLaRaRaRaRaRaRaRaRaLaNaLaLaRaRaReaaRgmaLaLaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaaaGaGaGaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtgugugvgugugtaaaaaaaaaGaGaGaLaLaRaRaRaRaRaRaLaLaNaLaLaLaRaRaRaRaRaRaLaLaLaLaLaRaWaRaRaLaGaaaaaaaaaGaGaGaGaGaaaGaaaaaaaGaGaGaGaaaGaGaGaGaGaGaGaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaaaaaaaGaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtgugugvgugugtaaaaaaaaaGaGaGaLaRaRaRaRaRaRaRaRaLaLaLaNaLaLaRaRaRaRaRaRaRaRaLaLaLgmaRaRaLaGaaaaaaaaaaaGaGaGaaaaaaaaaaaaaaaGaGaaaaaaaGaGaGaaaaaaaaaaaaaGaGaGaGaGaaaaaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaaaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwgxgvgvgvgygzaaaaaaaGaGaGaLaLaRaRaRaRaRaRaRaRaRaRaLaLaLaLaLaRaRaRaRaRaRaRaRaRaLaLaRaRaLaGaaaaaaaaaaaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagngxgvgvgvgygsaaaaaaaGaGaGaLaLaRaRaRaRaRaRaRaRaRaRaLaLaLaLaLaRaRaRaRaRaRaRaRaRaLaLaRaRaLaGaaaaaaaaaaaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtgvgvgvgtaaaaaaaaaGaGaGaLaRaRaRaRaRaRaRaRaRaRaRaLfUaRaRaLaLaLaLaLaLfUaLaRaRaLaLaLaLaLaGaaaaaaaaaaaaaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtgvgugvgtaaaaaaaaaGaGaGaLaRaRaRaRaRaRaRgAgAaRaRaRaLaRaRaRaLaLaLaLaLaLaLaLaRaRaLaNaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtgBgBgBgtaaaaaaaaaGaGaGaLaRaLaLaRaRaRaRgAgAaRaRaRaRaRaRaRaRaRaRaRaRaRaLaLaRaRfUaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwgogCgogzaaaaaaaaaGaGaGaLaLaLaRaRaRaRaRgAgAaRaRaRaRaRgDaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagngogCgogsaaaaaaaaaGaGaGaLaLaLaRaRaRaRaRgAgAaRaRaRaRaRgDaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaNaNaNaLaLaLaLaLaLaLaLaLaLfUaLaLaLaRaRaRaRaRaRaRaRaRaRaRaRaLaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaNaNaNaNaNaGaGaGaGaGaLaLaLaLaLfUaLaLaLaLaLaLaLaLaNaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 6a8fb071c95..553d98e3ebd 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -140,7 +140,7 @@ "acJ" = (/obj/machinery/computer/secure_data,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "acK" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/cartridge/detective,/obj/item/device/megaphone,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "acL" = (/obj/machinery/photocopier,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) -"acM" = (/obj/structure/flora/kirbyplants,/obj/machinery/newscaster/security_unit{pixel_y = 33},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) +"acM" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/newscaster/security_unit{pixel_y = 33},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) "acN" = (/obj/machinery/light/small,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/closet/secure_closet/injection,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "acO" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) "acP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/stool/bed,/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/execution{name = "\improper Prisoner Transfer Center"}) @@ -384,7 +384,7 @@ "aht" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway) "ahu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/securehallway) "ahv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/security/podbay) -"ahw" = (/obj/structure/flora/kirbyplants,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) +"ahw" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "ahx" = (/obj/structure/table/reinforced,/obj/item/device/flashlight,/obj/item/device/radio{pixel_y = 6},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "ahy" = (/obj/machinery/light,/obj/structure/table/reinforced,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/item/device/radio/intercom/department/security{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "ahz" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) @@ -882,9 +882,9 @@ "aqX" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/unary/portables_connector{layer = 2},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aqY" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "security_airlock"; pixel_x = -25; req_access_txt = "13"; tag_airpump = "security_pump"; tag_chamber_sensor = "security_sensor"; tag_exterior_door = "security_outer"; tag_interior_door = "security_inner"},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aqZ" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) -"ara" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/shuttle/abandoned) +"ara" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/shuttle/abandoned) "arb" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/shuttle/abandoned) -"arc" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/shuttle/abandoned) +"arc" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/shuttle/abandoned) "ard" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) "are" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall/interior{tag = "icon-swall_f9"; icon_state = "swall_f9"},/area/shuttle/abandoned) "arf" = (/obj/machinery/sleeper{dir = 8},/obj/machinery/light{dir = 1},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) @@ -2033,13 +2033,13 @@ "aNe" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint1"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aNf" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fsmaint2) "aNg" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fsmaint2) -"aNh" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/arrival/station) +"aNh" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/shuttle/abandoned) "aNi" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/arrival/station) "aNj" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "aNk" = (/obj/structure/window/full/shuttle{icon_state = "window4"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/station) "aNl" = (/obj/structure/window/full/shuttle{icon_state = "window8"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/station) "aNm" = (/turf/simulated/shuttle/wall{icon_state = "swall14"; dir = 2},/area/shuttle/arrival/station) -"aNn" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/arrival/station) +"aNn" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/abandoned) "aNo" = (/obj/machinery/camera{c_tag = "Arrivals East"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry) "aNp" = (/obj/structure/closet/secure_closet/security,/obj/machinery/light{dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint2) "aNq" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint2) @@ -2416,7 +2416,7 @@ "aUx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/camera{c_tag = "EVA Southeast"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva) "aUy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) "aUz" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva) -"aUA" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/hallway/primary/central/north) +"aUA" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/hallway/primary/central/north) "aUB" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Central Hallway North"; dir = 2; network = list("SS13")},/obj/machinery/alarm{pixel_y = 23},/obj/item/flag/nt,/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/hallway/primary/central/north) "aUC" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "bluecorner"},/area/hallway/primary/central/north) "aUD" = (/turf/simulated/floor/plasteel,/area/hallway/primary/central/north) @@ -2466,7 +2466,7 @@ "aVv" = (/obj/structure/closet/coffin,/obj/machinery/door/window/eastleft{dir = 8; name = "Coffin Storage"; req_access_txt = "22"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) "aVw" = (/obj/item/weapon/storage/bible,/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main) "aVx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel,/area/escapepodbay) -"aVy" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/arrival/station) +"aVy" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/shuttle/trade/sol) "aVz" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/shuttle/arrival/station) "aVA" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "aVB" = (/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) @@ -2553,7 +2553,7 @@ "aXe" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/engine,/area/escapepodbay) "aXf" = (/obj/machinery/light,/turf/simulated/floor/engine,/area/escapepodbay) "aXg" = (/obj/structure/spacepoddoor{luminosity = 3},/obj/machinery/door/poddoor/multi_tile/four_tile_ver{id_tag = "escapepodbay"; layer = 3.1; req_one_access_txt = "13"},/turf/simulated/floor/engine,/area/escapepodbay) -"aXh" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/arrival/station) +"aXh" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/trade/sol) "aXi" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry) "aXj" = (/obj/structure/stool/bed/chair/comfy/beige,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/hallway/secondary/entry) "aXk" = (/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/hallway/secondary/entry) @@ -2695,7 +2695,7 @@ "aZQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/central/ne) "aZR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/central/ne) "aZS" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA2"; location = "Dorm"},/turf/simulated/floor/plasteel,/area/hallway/primary/central/ne) -"aZT" = (/obj/machinery/camera{c_tag = "Bar East"; network = list("SS13")},/obj/machinery/newscaster{pixel_y = 32},/obj/structure/flora/kirbyplants,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"aZT" = (/obj/machinery/camera{c_tag = "Bar East"; network = list("SS13")},/obj/machinery/newscaster{pixel_y = 32},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aZU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/crew_quarters/bar) "aZV" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/plasteel,/area/storage/primary) "aZW" = (/obj/machinery/door/window{dir = 4; name = "Bar Door"; req_access_txt = "25"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/crew_quarters/bar) @@ -3432,7 +3432,7 @@ "bnZ" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/library) "boa" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/wood,/area/library) "bob" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/machinery/light/small,/turf/simulated/floor/wood,/area/library) -"boc" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/flora/kirbyplants,/turf/simulated/floor/wood,/area/library) +"boc" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/wood,/area/library) "bod" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "boe" = (/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/chapel/main) "bof" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) @@ -3485,13 +3485,13 @@ "bpa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bpb" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bpc" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Captain's Office APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/wood,/area/crew_quarters/captain) -"bpd" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/flora/kirbyplants,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bpd" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bpe" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central/ne) "bpf" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/central/ne) "bpg" = (/obj/structure/sign/directions/evac{dir = 4},/obj/structure/sign/directions/medical{dir = 4; pixel_y = 7},/obj/structure/sign/directions/science{dir = 4},/turf/simulated/wall,/area/crew_quarters/bar) "bph" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Diner"},/turf/simulated/floor/plasteel,/area/crew_quarters/bar) "bpi" = (/obj/structure/sign/barsign,/turf/simulated/wall,/area/crew_quarters/bar) -"bpj" = (/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/obj/structure/flora/kirbyplants,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bpj" = (/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bpk" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) "bpl" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) "bpm" = (/obj/machinery/camera{c_tag = "Starboard Primary Hallway 2"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) @@ -3517,7 +3517,7 @@ "bpG" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/quartermaster/office) "bpH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bpI" = (/turf/simulated/floor/plasteel,/area/quartermaster/office) -"bpJ" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) +"bpJ" = (/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) "bpK" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_y = 30},/obj/item/stack/tape_roll,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 1},/area/quartermaster/office) "bpL" = (/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/rcs,/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 5},/area/quartermaster/office) "bpM" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central/west) @@ -3755,7 +3755,7 @@ "buk" = (/turf/simulated/wall/r_wall,/area/medical/morgue) "bul" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/ward) "bum" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/hallway/primary/starboard/east) -"bun" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) +"bun" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard/east) "buo" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/starboard/east) "bup" = (/turf/simulated/wall/r_wall,/area/assembly/robotics) "buq" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "purple"},/area/hallway/primary/starboard/east) @@ -3830,7 +3830,7 @@ "bvH" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/reception) "bvI" = (/obj/machinery/camera{c_tag = "Medbay Lobby East"; network = list("SS13")},/obj/structure/stool,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) "bvJ" = (/obj/structure/stool,/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) -"bvK" = (/obj/machinery/newscaster{pixel_x = 30},/obj/machinery/alarm{pixel_y = 26},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/reception) +"bvK" = (/obj/machinery/newscaster{pixel_x = 30},/obj/machinery/alarm{pixel_y = 26},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/reception) "bvL" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/bodyscanner,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/exam_room) "bvM" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/obj/machinery/body_scanconsole,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/exam_room) "bvN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera{c_tag = "Medbay Examination Room"; network = list("SS13")},/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/exam_room) @@ -3941,9 +3941,9 @@ "bxO" = (/turf/simulated/wall,/area/medical/research{name = "Research Division"}) "bxP" = (/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bxQ" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/medical/research{name = "Research Division"}) -"bxR" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/clothing/glasses/welding,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab) +"bxR" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/clothing/glasses/welding,/obj/machinery/door_control{id = "rdlab"; name = "Research and Development Lab Shutters Control"; pixel_x = -24; pixel_y = 0; req_access_txt = "47"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab) "bxS" = (/obj/structure/stool,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab) -"bxT" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/door_control{id = "rdlab"; name = "Research and Development Lab Shutters Control"; pixel_x = 24; pixel_y = 24; req_access_txt = "47"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab) +"bxT" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/lab) "bxU" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bxV" = (/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bxW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4670,7 +4670,7 @@ "bLP" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Head of Personnel"},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bLQ" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/yellow,/obj/item/device/eftpos,/obj/item/weapon/book/manual/sop_supply,/turf/simulated/floor/plasteel,/area/quartermaster/office) "bLR" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) -"bLS" = (/obj/machinery/computer/guestpass,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) +"bLS" = (/obj/machinery/computer/guestpass{pixel_y = 30},/obj/machinery/photocopier,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab) "bLT" = (/obj/machinery/computer/message_monitor,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/server) "bLU" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/server) "bLV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/server) @@ -4708,8 +4708,8 @@ "bMB" = (/obj/machinery/cell_charger,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay Cryogenics"; network = list("SS13")},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) "bMC" = (/obj/machinery/camera{c_tag = "Medbay Cloning"; network = list("SS13")},/obj/structure/closet/wardrobe/medic_white,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) "bMD" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bME" = (/obj/machinery/disposal,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bMF" = (/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/medical1,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/medical/genetics) +"bME" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) +"bMF" = (/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/medical1,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 27},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/medical/genetics) "bMG" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/camera{c_tag = "Research Genetics North"; network = list("Research","SS13")},/obj/machinery/power/apc{dir = 1; name = "Genetics APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics) "bMH" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bMI" = (/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/weapon/hand_labeler,/obj/structure/closet/walllocker/emerglocker/north,/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics) @@ -4760,7 +4760,7 @@ "bNB" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 4},/area/hallway/primary/central/sw) "bNC" = (/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "hopqueue"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/central/sw) "bND" = (/obj/structure/filingcabinet/chestdrawer,/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 10},/area/crew_quarters/heads) -"bNE" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Personnel's Desk"; departmentType = 5; name = "Head of Personnel Requests Console"; pixel_y = -30},/obj/machinery/camera{c_tag = "Head of Personnel's Office"; dir = 1; network = list("SS13")},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) +"bNE" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Personnel's Desk"; departmentType = 5; name = "Head of Personnel Requests Console"; pixel_y = -30},/obj/machinery/camera{c_tag = "Head of Personnel's Office"; dir = 1; network = list("SS13")},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bNF" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Head of Personnel's Office"},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bNG" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/crew_quarters/heads) "bNH" = (/obj/machinery/blackbox_recorder,/turf/simulated/floor/bluegrid,/area/server) @@ -4864,7 +4864,7 @@ "bPB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) "bPC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) "bPD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) -"bPE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Genetics Cloning"; req_access_txt = "0"; req_one_access_txt = "5;9"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) +"bPE" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/medical/genetics) "bPF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) "bPG" = (/obj/effect/landmark/start{name = "Geneticist"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) "bPH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) @@ -4872,7 +4872,7 @@ "bPJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) "bPK" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bPL" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) -"bPM" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) +"bPM" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) "bPN" = (/turf/simulated/wall/r_wall,/area/toxins/server_coldroom) "bPO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/toxins/server_coldroom) "bPP" = (/turf/simulated/wall/r_wall,/area/toxins/server) @@ -4953,9 +4953,9 @@ "bRm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall,/area/medical/genetics_cloning) "bRn" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable,/obj/item/roller,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) "bRo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bRp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bRq" = (/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{dir = 0; name = "station intercom (General)"; pixel_x = -28},/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/stokcubes,/obj/item/weapon/storage/box/neaeracubes,/obj/structure/table/glass,/obj/item/weapon/storage/box/wolpincubes,/obj/item/weapon/storage/box/farwacubes,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) -"bRr" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/roller,/obj/item/weapon/storage/box/disks,/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) +"bRp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Genetics Cloning"; req_access_txt = "0"; req_one_access_txt = "5;9"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) +"bRq" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) +"bRr" = (/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/crew_quarters/hor) "bRs" = (/obj/machinery/r_n_d/server/robotics,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) "bRt" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) "bRu" = (/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 1; name = "Server Coldroom APC"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 250; oxygen = 0; temperature = 0},/area/toxins/server_coldroom) @@ -4974,7 +4974,7 @@ "bRH" = (/obj/machinery/computer/mecha,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bRI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/rack,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/crew_quarters/hor) "bRJ" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/crew_quarters/hor) -"bRK" = (/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/crew_quarters/hor) +"bRK" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bRL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bRM" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_x = -30; pixel_y = 0},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) "bRN" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Shaft Miner"},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) @@ -5021,9 +5021,9 @@ "bSC" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo) "bSD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/medical/genetics_cloning) "bSE" = (/obj/machinery/clonepod/biomass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bSF" = (/obj/machinery/computer/cloning,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) +"bSF" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) "bSG" = (/obj/machinery/dna_scannernew,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) -"bSH" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) +"bSH" = (/obj/machinery/computer/cloning,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning) "bSI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bSJ" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bSK" = (/obj/structure/stool/bed/chair/office/dark,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) @@ -5045,7 +5045,7 @@ "bTa" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bTb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bTc" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) -"bTd" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/photocopier,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) +"bTd" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) "bTe" = (/obj/machinery/atmospherics/unary/outlet_injector/on,/turf/simulated/floor/plating/airless,/area/toxins/mixing) "bTf" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/mining) "bTg" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/mining) @@ -5114,12 +5114,12 @@ "bUr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bUs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bUt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/hor) -"bUu" = (/obj/machinery/power/apc{dir = 8; name = "RD Office APC"; pixel_x = -25},/obj/structure/cable,/obj/machinery/light_switch{pixel_y = -23},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) +"bUu" = (/obj/machinery/power/apc{dir = 8; name = "RD Office APC"; pixel_x = -25},/obj/structure/cable,/obj/machinery/light_switch{pixel_y = -23},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bUv" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/photocopier/faxmachine{department = "Research Director's Office"},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bUw" = (/obj/item/weapon/cartridge/signal/toxins,/obj/item/weapon/cartridge/signal/toxins{pixel_x = -4; pixel_y = 2},/obj/item/weapon/cartridge/signal/toxins{pixel_x = 4; pixel_y = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera{c_tag = "Research Director's Office"; dir = 1; network = list("Research","SS13")},/obj/item/clothing/glasses/welding/superior,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bUx" = (/obj/structure/closet/secure_closet/RD,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bUy" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) -"bUz" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) +"bUz" = (/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/glass,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) "bUA" = (/turf/simulated/wall/r_wall,/area/toxins/mixing) "bUB" = (/obj/machinery/atmospherics/pipe/simple/insulated,/turf/simulated/wall/r_wall,/area/toxins/mixing) "bUC" = (/turf/simulated/wall/r_wall{desc = "A specially coated wall that resists temperatures for Science"; max_temperature = 1e+009; name = "Coated Reinforced Wall"},/area/toxins/mixing) @@ -5186,7 +5186,7 @@ "bVL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bVM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) "bVN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics) -"bVO" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) +"bVO" = (/obj/machinery/photocopier,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor) "bVP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/wall/r_wall,/area/toxins/server_coldroom) "bVQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/toxins/server_coldroom) "bVR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/toxins/server) @@ -5222,7 +5222,7 @@ "bWv" = (/obj/structure/table,/obj/item/weapon/coin/silver,/turf/simulated/floor/plasteel,/area/quartermaster/qm) "bWw" = (/obj/structure/table,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6; pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4; pixel_y = 7},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel,/area/quartermaster/qm) "bWx" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/apmaint) -"bWy" = (/obj/machinery/light{dir = 1},/obj/structure/flora/kirbyplants,/turf/simulated/floor/wood,/area/blueshield) +"bWy" = (/obj/machinery/light{dir = 1},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/wood,/area/blueshield) "bWz" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/wood,/area/blueshield) "bWA" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/blueshield) "bWB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/wood,/area/blueshield) @@ -5238,7 +5238,7 @@ "bWL" = (/obj/structure/closet/jcloset,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel,/area/janitor) "bWM" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel,/area/janitor) "bWN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/machinery/newscaster{pixel_y = 30},/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plasteel,/area/janitor) -"bWO" = (/obj/vehicle/janicart,/turf/simulated/floor/plasteel,/area/janitor) +"bWO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/vehicle/janicart,/turf/simulated/floor/plasteel,/area/janitor) "bWP" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/janitor) "bWQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/reagent_dispensers/spacecleanertank{pixel_y = 30},/turf/simulated/floor/plasteel,/area/janitor) "bWR" = (/obj/machinery/door/window/westleft{name = "Janitoral Delivery"; req_access_txt = "26"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/janitor) @@ -5277,7 +5277,7 @@ "bXy" = (/obj/machinery/light,/obj/machinery/camera{c_tag = "Research Genetics South"; dir = 1; network = list("Research","SS13")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) "bXz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) "bXA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) -"bXB" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/medical/genetics) +"bXB" = (/obj/item/roller,/obj/item/weapon/storage/box/disks,/obj/structure/table/glass,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) "bXC" = (/obj/machinery/power/apc{dir = 1; name = "Telescience Pad APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/engine,/area/toxins/explab_chamber) "bXD" = (/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/engine,/area/toxins/explab_chamber) "bXE" = (/turf/simulated/floor/engine,/area/toxins/explab_chamber) @@ -5458,8 +5458,8 @@ "caX" = (/obj/machinery/computer/shuttle/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "caY" = (/obj/machinery/mineral/equipment_vendor,/turf/simulated/floor/plasteel{dir = 10; icon_state = "brown"},/area/quartermaster/miningdock) "caZ" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/quartermaster/miningdock) -"cba" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/apmaint) -"cbb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"cba" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"cbb" = (/obj/effect/decal/cleanable/dirt,/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cbc" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cbd" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/apmaint) "cbe" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -5536,8 +5536,8 @@ "ccx" = (/obj/structure/table,/obj/item/weapon/storage/box/syndidonkpockets,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "ccy" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "ccz" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) -"ccA" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/apmaint) -"ccB" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"ccA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"ccB" = (/obj/structure/stool/bed,/turf/simulated/floor/plating,/area/maintenance/apmaint) "ccC" = (/obj/machinery/power/apc{dir = 2; name = "Cargo Maintenance APC"; pixel_y = -24},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/apmaint) "ccD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/apmaint) "ccE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j1s"; name = "HoP Office"; sortType = 15},/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -5582,7 +5582,7 @@ "cdr" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/medical/medbreak) "cds" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/medical/medbreak) "cdt" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall,/area/medical/medbreak) -"cdu" = (/obj/structure/flora/kirbyplants,/obj/machinery/door_control{id = "psychoffice"; name = "Privacy Shutters Control"; pixel_x = -25; pixel_y = 0},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/wood,/area/medical/psych) +"cdu" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/door_control{id = "psychoffice"; name = "Privacy Shutters Control"; pixel_x = -25; pixel_y = 0},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/wood,/area/medical/psych) "cdv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/wood,/area/medical/psych) "cdw" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/wood,/area/medical/psych) "cdx" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/wood,/area/medical/psych) @@ -5760,7 +5760,7 @@ "cgN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) "cgO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) "cgP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/medbay2) -"cgQ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) +"cgQ" = (/obj/structure/stool/bed/chair/office/dark,/obj/item/device/radio/intercom{dir = 0; name = "station intercom (General)"; pixel_x = -28; pixel_y = -28},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) "cgR" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "cgS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "cgT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) @@ -5978,7 +5978,7 @@ "ckX" = (/obj/machinery/light/small{dir = 1},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "ckY" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "ckZ" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cla" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/turf/simulated/floor/plating/airless,/area/space) +"cla" = (/obj/structure/table/glass,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/maintenance/apmaint) "clb" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating/airless,/area/space) "clc" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cld" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/emcloset,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/incinerator) @@ -6362,7 +6362,7 @@ "csr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) "css" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cst" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) -"csu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"csu" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/apmaint) "csv" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"; tag = "icon-pipe-j1 (WEST)"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) "csw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) "csx" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/hallway/primary/aft) @@ -6489,7 +6489,7 @@ "cuO" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cuP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cuQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) -"cuR" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"cuR" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/apmaint) "cuS" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/assembly/assembly_line) "cuT" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cuU" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel,/area/hallway/primary/aft) @@ -6531,7 +6531,7 @@ "cvE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_xeno_pump"; tag_exterior_door = "solar_xeno_outer"; frequency = 1379; id_tag = "solar_xeno_airlock"; tag_interior_door = "solar_xeno_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_xeno_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_xeno_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "solar_xeno_pump"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cvF" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/radio{pixel_y = 6},/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) "cvG" = (/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) -"cvH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) +"cvH" = (/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) "cvI" = (/obj/structure/table/woodentable,/obj/structure/disposalpipe/segment,/obj/item/weapon/book/manual/sop_general,/turf/simulated/floor/wood,/area/library) "cvJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/aft) "cvK" = (/turf/simulated/wall,/area/assembly/assembly_line) @@ -6589,7 +6589,7 @@ "cwK" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/turf/simulated/floor/engine,/area/toxins/test_chamber) "cwL" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/toxins/test_chamber) "cwM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"cwN" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/space) +"cwN" = (/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cwO" = (/obj/structure/table,/obj/item/pod_parts/core,/obj/item/weapon/circuitboard/mecha/pod,/obj/item/clothing/glasses/welding{pixel_y = 12},/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) "cwP" = (/obj/machinery/door_control{id = "mechpod"; name = "Mechanic's Inner Door Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "70"},/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/sheet/mineral/plasma{amount = 30},/turf/simulated/floor/plasteel,/area/engine/mechanic_workshop) "cwQ" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/spod_part_fabricator,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/engine/mechanic_workshop) @@ -6599,7 +6599,6 @@ "cwU" = (/turf/simulated/wall,/area/engine/mechanic_workshop) "cwV" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/aft) "cwW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/aft) -"cwX" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating/airless,/area/assembly/assembly_line) "cwY" = (/obj/item/weapon/table_parts,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/assembly/assembly_line) "cwZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/assembly/assembly_line) "cxa" = (/obj/item/weapon/camera_assembly,/turf/simulated/floor/plasteel,/area/assembly/assembly_line) @@ -6767,7 +6766,7 @@ "cAg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/engine,/area/toxins/test_chamber) "cAh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cAi" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "xeno_airlock_exterior"; id_tag = "xeno_airlock_control"; tag_interior_door = "xeno_airlock_interior"; name = "Xenobiology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreencorner"},/area/toxins/xenobiology) -"cAj" = (/obj/machinery/atmospherics/unary/outlet_injector/on,/turf/simulated/floor/plating/airless,/area/maintenance/incinerator) +"cAj" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cAk" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/port) "cAl" = (/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/assembly/assembly_line) "cAm" = (/obj/machinery/atmospherics/unary/vent_pump{on = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/assembly/assembly_line) @@ -6783,9 +6782,9 @@ "cAw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/wall,/area/engine/break_room) "cAx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel,/area/engine/break_room) "cAy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/engine/break_room) -"cAz" = (/obj/machinery/power/apc{dir = 4; name = "Centcomm Rep APC"; pixel_x = 24; pixel_y = -3},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/flora/kirbyplants,/turf/simulated/floor/wood,/area/ntrep) +"cAz" = (/obj/machinery/power/apc{dir = 4; name = "Centcomm Rep APC"; pixel_x = 24; pixel_y = -3},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/wood,/area/ntrep) "cAA" = (/obj/effect/landmark/start{name = "Station Engineer"},/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/plasteel,/area/engine/break_room) -"cAB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel,/area/engine/break_room) +"cAB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel,/area/engine/break_room) "cAC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/wall/r_wall,/area/atmos/control) "cAD" = (/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/atmos/control) "cAE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/wall/r_wall,/area/atmos/control) @@ -6828,7 +6827,7 @@ "cBp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cBq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cBr" = (/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) -"cBs" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"cBs" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cBt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/engine/break_room) "cBu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/structure/table,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/t_scanner,/turf/simulated/floor/plasteel,/area/engine/break_room) "cBv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/engine/break_room) @@ -6855,8 +6854,8 @@ "cBQ" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cBR" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cBS" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) -"cBT" = (/obj/structure/flora/kirbyplants,/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 10},/area/medical/patients_rooms) -"cBU" = (/obj/structure/flora/kirbyplants,/obj/effect/decal/warning_stripes/southwestcorner,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/medical/patients_rooms) +"cBT" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 10},/area/medical/patients_rooms) +"cBU" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/effect/decal/warning_stripes/southwestcorner,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/medical/patients_rooms) "cBV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cBW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/medical/virology) "cBX" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/medical/virology) @@ -6962,11 +6961,11 @@ "cDT" = (/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "cDU" = (/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/medical/virology) "cDV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/virology) -"cDW" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (SOUTHWEST)"; icon_state = "whitegreen"; dir = 10},/area/medical/virology) +"cDW" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (SOUTHWEST)"; icon_state = "whitegreen"; dir = 10},/area/medical/virology) "cDX" = (/obj/structure/stool/bed/chair/office/light{dir = 4},/obj/effect/landmark/start{name = "Virologist"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cDY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreencorner"},/area/medical/virology) "cDZ" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plating,/area/medical/virology) -"cEa" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (SOUTHEAST)"; icon_state = "whitegreen"; dir = 6},/area/medical/virology) +"cEa" = (/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{tag = "icon-whitegreen (SOUTHEAST)"; icon_state = "whitegreen"; dir = 6},/area/medical/virology) "cEb" = (/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreencorner"},/area/medical/virology) "cEc" = (/obj/machinery/light_switch{pixel_x = -4; pixel_y = 24},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "viro_lab_airlock_control"; name = "Virology Lab Access Console"; pixel_x = 6; pixel_y = 24; req_one_access_txt = "39"; tag_exterior_door = "viro_lab_airlock_exterior"; tag_interior_door = "viro_lab_airlock_interior"},/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreencorner"},/area/medical/virology) "cEd" = (/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6987,8 +6986,8 @@ "cEs" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/unary/portables_connector,/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/portsolar) "cEt" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar) "cEu" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes{charge = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar) -"cEv" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/portsolar) -"cEw" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/aft) +"cEv" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/maintenance/apmaint) +"cEw" = (/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/maintenance/apmaint) "cEx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/aft) "cEy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/aft) "cEz" = (/obj/machinery/optable{name = "Robotics Operating Table"},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/assembly_line) @@ -7105,7 +7104,7 @@ "cGG" = (/obj/machinery/power/solar_control{id = "portsolar"; name = "Aft Port Solar Control"; track = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/portsolar) "cGH" = (/turf/simulated/floor/plating,/area/maintenance/portsolar) "cGI" = (/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Engineering Shuttle Access APC"; pixel_x = 0; pixel_y = 25; shock_proof = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) -"cGJ" = (/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) +"cGJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/apmaint) "cGK" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/aft) "cGL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/aft) "cGM" = (/obj/machinery/computer/security/engineering,/obj/machinery/light_switch{pixel_x = -27},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -7209,7 +7208,7 @@ "cIG" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cIH" = (/obj/machinery/alarm{pixel_y = 25},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cII" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology) -"cIJ" = (/obj/structure/flora/kirbyplants,/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) +"cIJ" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "cIK" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/toxins/test_chamber) "cIL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/binary/valve/digital{color = ""; dir = 4; name = "Gas Mix Outlet Valve"},/turf/simulated/floor/plasteel,/area/atmos/distribution) "cIM" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/plasteel{dir = 5; icon_state = "green"},/area/atmos/distribution) @@ -7452,7 +7451,7 @@ "cNp" = (/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/storage/secure) "cNq" = (/obj/machinery/floodlight,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/storage/secure) "cNr" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) -"cNs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) +"cNs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) "cNt" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure) "cNu" = (/obj/machinery/camera{c_tag = "Engineering West"; dir = 4; network = list("SS13")},/obj/structure/dispenser,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cNv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -8191,7 +8190,7 @@ "dbA" = (/turf/simulated/wall,/area/medical/patient_b) "dbB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "bluecorner"},/area/medical/patients_rooms) "dbC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/medical/patients_rooms) -"dbD" = (/obj/structure/flora/kirbyplants,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel{dir = 5; icon_state = "blue"},/area/medical/patients_rooms) +"dbD" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel{dir = 5; icon_state = "blue"},/area/medical/patients_rooms) "dbE" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/medical/patients_rooms) "dbF" = (/turf/simulated/wall/r_wall,/area/medical/patient_c) "dbG" = (/obj/structure/stool/bed,/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/medical/patient_c) @@ -8216,7 +8215,7 @@ "dbZ" = (/obj/machinery/iv_drip,/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/medical/patient_c) "dca" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/door_control{id = "medprivacyc"; name = "Privacy Shutters"; pixel_y = -30},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitered"},/area/medical/patient_c) "dcb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/medical/patients_rooms) -"dcc" = (/obj/machinery/light,/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{dir = 10; icon_state = "blue"},/area/medical/patients_rooms) +"dcc" = (/obj/machinery/light,/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{dir = 10; icon_state = "blue"},/area/medical/patients_rooms) "dcd" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1},/turf/simulated/floor/plating/airless,/area/maintenance/turbine) "dce" = (/obj/machinery/light_switch{pixel_x = -24; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/medical/patients_rooms) "dcf" = (/obj/machinery/power/apc{dir = 4; cell_type = 15000; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/medical/patients_rooms) @@ -8337,8 +8336,8 @@ "deq" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/weapon/crowbar/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate) "der" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/escape) "des" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/supply) -"det" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/shuttle/supply) -"deu" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/shuttle/supply) +"det" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/shuttle/arrival/station) +"deu" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/shuttle/arrival/station) "dev" = (/turf/simulated/shuttle/floor,/area/shuttle/supply) "dew" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/shuttle/supply) "dex" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/supply) @@ -8358,9 +8357,9 @@ "deL" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall/interior{tag = "icon-swall_f6"; icon_state = "swall_f6"},/area/shuttle/supply) "deM" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/shuttle/supply) "deN" = (/turf/simulated/shuttle/wall{tag = "icon-swall15"; icon_state = "swall15"; dir = 2},/area/shuttle/supply) -"deO" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/shuttle/supply) +"deO" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/arrival/station) "deP" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/airless,/area/shuttle/supply) -"deQ" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/shuttle/supply) +"deQ" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/shuttle/arrival/station) "deR" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_l"; icon_state = "burst_l"},/turf/space,/area/shuttle/supply) "deS" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/supply) "deT" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_r"; icon_state = "burst_r"},/turf/space,/area/shuttle/supply) @@ -8408,8 +8407,8 @@ "dfJ" = (/obj/machinery/door/unpowered/shuttle,/obj/docking_port/mobile{dir = 8; dwidth = 10; height = 35; id = "whiteship"; name = "NT Medical Ship"; roundstart_move = "whiteship_away"; width = 21},/obj/docking_port/stationary{dir = 8; dwidth = 10; height = 35; id = "whiteship_home"; name = "north of SS13"; width = 21},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) "dfK" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) "dfL" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) -"dfM" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/shuttle/abandoned) -"dfN" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/shuttle/abandoned) +"dfM" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/shuttle/supply) +"dfN" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/shuttle/supply) "dfO" = (/obj/structure/window/full/shuttle{icon_state = "15"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/abandoned) "dfP" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) "dfQ" = (/obj/item/weapon/shard,/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/abandoned) @@ -8742,7 +8741,7 @@ "dmf" = (/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass_engineering{name = "Mechanic Workshop"; req_access_txt = "70"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/mechanic_workshop) "dmg" = (/obj/item/device/radio/intercom{pixel_y = -30},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small,/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (WEST)"; icon_state = "wooden_chair_wings"; dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) "dmh" = (/obj/machinery/camera{c_tag = "Bar South"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/gameboard,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"dmi" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/trade/sol) +"dmi" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/supply) "dmj" = (/turf/simulated/shuttle/wall{icon_state = "swall14"; dir = 2},/area/shuttle/trade/sol) "dmk" = (/obj/machinery/door/airlock/external{frequency = 1450; icon_state = "door_locked"; id_tag = "trade_sol_outer"; locked = 1; name = "External Access"; req_access = null; req_access_txt = "160"},/turf/simulated/shuttle/plating,/area/shuttle/trade/sol) "dml" = (/obj/structure/window/full/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/trade/sol) @@ -8767,7 +8766,7 @@ "dmE" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1450; master_tag = "trade_sol"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "160"},/turf/simulated/shuttle/floor,/area/shuttle/trade/sol) "dmF" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/light/spot,/turf/simulated/shuttle/floor,/area/shuttle/trade/sol) "dmG" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/trade/sol) -"dmH" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/trade/sol) +"dmH" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/shuttle/supply) "dmI" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/trade/sol) "dmJ" = (/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 11; id = "trade_dock"; name = "port bay 4 at Cyberiad"; width = 5},/turf/space,/area/space) "dmK" = (/obj/machinery/door/airlock/external{id_tag = "trade_dock"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) @@ -8796,6 +8795,79 @@ "dnh" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/quartermaster/office) "dni" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/office) "dnj" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j1s"; sortType = 13},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"dnk" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/space) +"dnl" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Alternate Construction Area"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnm" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnn" = (/obj/structure/curtain/open/shower,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/maintenance/apmaint) +"dno" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnq" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnr" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dns" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnt" = (/turf/simulated/wall,/area/maintenance/consarea) +"dnu" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnv" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnw" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnx" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dny" = (/obj/structure/sign/poster{pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnz" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnA" = (/turf/simulated/floor/plasteel,/area/maintenance/consarea) +"dnB" = (/obj/structure/table,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnC" = (/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnD" = (/obj/item/weapon/screwdriver,/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnE" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 4},/turf/simulated/floor/plating/airless,/area/maintenance/incinerator) +"dnF" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnG" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnH" = (/obj/item/stack/sheet/metal{amount = 10},/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnI" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnJ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnK" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnL" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Alternate Construction Area"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnO" = (/obj/item/stack/sheet/glass{amount = 10},/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnP" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/aft) +"dnR" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dnS" = (/obj/item/weapon/table_parts,/turf/simulated/floor/plasteel,/area/maintenance/consarea) +"dnT" = (/obj/item/stack/rods{amount = 8},/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnU" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnV" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "Alternate Construction Area APC"; pixel_x = 25},/turf/simulated/floor/plating,/area/maintenance/consarea) +"dnW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/mechanic_workshop) +"dnX" = (/obj/machinery/door/airlock/maintenance{name = "Mechanic Workshop Maintenance"; req_access = null; req_access_txt = "70"},/turf/simulated/floor/plating,/area/maintenance/aft) +"dnY" = (/turf/simulated/wall/r_wall,/area/maintenance/consarea) +"dnZ" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"doa" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dob" = (/obj/structure/spacepoddoor,/obj/machinery/door/poddoor/multi_tile/three_tile_ver{id_tag = "mechpodbayouter"; layer = 3.1; req_access_txt = "70"},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"doc" = (/obj/machinery/light,/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"dod" = (/obj/machinery/door_control{desc = "A remote control-switch for the pod doors."; id = "mechpodbayouter"; name = "Pod Door Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "70"},/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"doe" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"dof" = (/obj/structure/grille,/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/engine/mechanic_workshop) +"dog" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/engine/mechanic_workshop) +"doh" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/aft) +"doi" = (/turf/simulated/wall,/area/maintenance/aft) +"doj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/aft) +"dok" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/aft) +"dol" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/aft) +"dom" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) +"don" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft) +"doo" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/aft) +"dop" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft) +"doq" = (/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/aft) +"dor" = (/obj/effect/spawner/window/reinforced,/turf/simulated/wall,/area/maintenance/aft) +"dos" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/maintenance/aft) +"dot" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/aft) +"dou" = (/obj/machinery/power/apc{dir = 8; name = "Aft Maintenance APC"; pixel_x = -24},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/aft) +"dov" = (/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"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating,/area/maintenance/aft) +"dow" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"dox" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"doy" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/stack/sheet/metal{amount = 2},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"doz" = (/obj/item/weapon/table_parts,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"doA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/apmaint) +"doB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/engine,/area/engine/mechanic_workshop) +"doC" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/maintenance/aft) +"doD" = (/obj/item/stack/sheet/metal{amount = 10},/turf/simulated/floor/plating,/area/space) +"doE" = (/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/stokcubes,/obj/item/weapon/storage/box/neaeracubes,/obj/structure/table/glass,/obj/item/weapon/storage/box/wolpincubes,/obj/item/weapon/storage/box/farwacubes,/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/medical/genetics) (1,1,1) = {" bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8829,15 +8901,15 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfvdfydfaardardarddfzardarddfhdfAdfBdftdfhardarddfCardardardardargcUKaaecUKareardardarddfDardardardargasRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfvdfFdfEardardarddfrardarddfhardardarddfhardarddfGardardardardarddfHdfIdfHardardardardardardardardarddfJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfvdfidfiardardarddfzardarddfhdfKdfwarddfhardarddfCardardardarddfscUKaaecUKdeWardardardardardarddfLdfsasRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfvardardardardarddfhardardargaaeaaedfrareardarddfhdfxardarddfscUKdfMbikdfNasOaaeaaeaaeaaeaaeaaeaaeasOdfMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfOardardardarddfPdeYdeWardardardardardardardarddfharddfsarbasOdfMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfhdfRdfQdfSarddfscUKasOaaeaaearbdeWardardardarddeYaaecUKdfMdfobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfvardardardardarddfhardardargaaeaaedfrareardarddfhdfxardarddfscUKaNhbikaNnasOaaeaaeaaeaaeaaeaaeaaeasOaNhbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfOardardardarddfPdeYdeWardardardardardardardarddfharddfsarbasOaNhbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfhdfRdfQdfSarddfscUKasOaaeaaearbdeWardardardarddeYaaecUKaNhdfobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdeYdeWdfadfTdfscUKaredfVdfUdfWargasRardarddfkdfXdfldeZdfYaaeasPbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfNasOaaedfZasOareardardardardarddfhardarddfsarbasRdffdgadeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgbardardardardardardarddgcdfKdfscUKdfMdfNdgedgddeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgfarddggardardardardarddeYarbcUKdfMbikbikdfNdgedeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaagaafaajaaiaaiaaiaakaafaaJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfNaaearbdeWarddghdgidfscUKasOdfMbikbikbikbikdfNarbdfnbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlbmOcaVbZycaXcaWccwccwbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdfNasOaaeaaeaaeasOdfMbikbikbikbikbikbikbikdfNdfMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNnasOaaedfZasOareardardardardarddfhardarddfsarbasRdffdgadeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgbardardardardardardarddgcdfKdfscUKaNhaNndgedgddeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgfarddggardardardardarddeYarbcUKaNhbikbikaNndgedeVdeUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaagaafaajaaiaaiaaiaakaafaaJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNnaaearbdeWarddghdgidfscUKasOaNhbikbikbikbikaNnarbdfnbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlbmOcaVbZycaXcaWccwccwbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNnasOaaeaaeaaeasOaNhbikbikbikbikbikbikbikaNnaNhbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlccxcaVcaVccycaVcaVcczbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcyacSKcaVcaVcTOcaVcTWbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGaafaafaafddwaafaafaafdelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8872,11 +8944,11 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafAafyaeAafyafAafyaeAbikagSahCahDahEahFahGahHahIahJahKahLahMahNagvahOahRahQairahSahTahUahVahWahXahYahZahUaiaaibaicaidahYahZahUahUahAadaadaadaadaadaaieaieaieahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQaabaabaabahBaabaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafyafAaeAafyafyafAaeAbikagSaifaigaihagSaiiaijaikailaimainaioaipagvaiqaisahhamuaitaiuahUaivaiwaixaiyaizaiAaiBaiCaiDaiEaiFaiGbOIaiHahAaieaieaieaieaieaieaieaieahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQbikbikbikaiIbikbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafAafyaiJaeAafAafyaiKaeAbikagSaiLaiMaiNagSaiOaiOaiOaiOaiPaiQaiRaiSagvaiTaiUaiVaiWaiXaiYahUaiZajaajbajcajdajeajfajgaiDaiEajhaiGajhajiahAaieaieaieaieaieaieaieaieahAagQagQajjaabagQagQagQagQagQagQagQagQagQagQagQagQagQagQaabaabajkajlajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmidmddmkdmjdmldmddmddmmdmddmddmnbikbikbikbikbikbikbikbikbikafxaabajnaabafxbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaeAajoajpajqajrajoajpajqajsajtajuajuajuajuajuajuajuajuajvajwajxajyajzajAajBajCajDajEajFajGahUajHajIajJajKajdajeajKajgajLaiEaiCaiCajMajNajOaieaieaieaieaieaieaieaieahAaabaabaabaabaabaabbikaabbikaabaabaabaabaabaabaabaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVydmddmkdmjdmldmddmddmmdmddmddmnbikbikbikbikbikbikbikbikbikafxaabajnaabafxbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaeAajoajpajqajrajoajpajqajsajtajuajuajuajuajuajuajuajuajvajwajxajyajzajAajBajCajDajEajFajGahUajHajIajJajKajdajeajKajgajLaiEaiCaiCajMajNajOaieaieaieaieaieaieaieaieahAaabaabaabaabaabaabbikaabbikaabaabaabaabaabaabaabaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmpdmodmrdmqdmtdmsdmsdmsdmvdmudmwbikbikbikacGacGacGafxafxaabaabbikajQbikaabaabafxafxacGacGacGbikbikbikbikbikbikbikbikbikbikbikbikaeAajRajSajTafyajUajVajWakcajtajYajZakaakbaknakdakdajuakeakfakgakhakiajBakjakkaklakmalJajFakoakpamwakqajKakraksaktakuakvakwakxakxakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmxdmodmzdmydmsdmAdmAdmAdmAdmAdmBbikbikbikacGbikbikaabbikaabbikbikajQbikbikaabbikaabbikbikacGbikbikbikbikbikbikbikbikbikbikbikbikaeAakFafyakGakHakIakJakKakLajtakMakNakOakOakPakQakRajuakSakTakUakVakiakWakXakYakZalaalbalcaldaleaAEalfalgalhalialjalkallalmaiCaiCaiCalnajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabbikbikaabaloaabaabbikbikaloaabbikaabaabajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmCdmodmEdmDdmAdmAdmAdmAdmGdmFdmwbikbikbikacGaabalpalpalpalpalpbikalqbikalpalpalpalpalpaabacGbikbikbikbikbikbikbikbikbikbikbikbikaeAalralsakGafyaltakJalualvajtalwalxalyalzakQakQakRajualAalBalCalDalEajBalFalGaklalHalIajFajXalKalLalLalMajdalNalOalPalQaiCaiFaiGaiCalRahAahAahAahAahAahAahAahAahAahAaabaloaabbikajkajlajmbikbikajkajlajmbikbikajkajlajmaabaabbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmHdmddmddmddmldmddmddmmdmddmddmIbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamaalZaowanxambbikbikbikamcaeAaeAaeAamdamdameamfamgamdajuamhamiamjamkamlammamnajuamoampamqakVamrajGamsamtaXNamvaYjajGamxamyamzamAamBamCamDamEamFamGaiCajhamHamIamJahAamKamKamKamKamKbikbikbikbikaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaXhdmddmddmddmldmddmddmmdmddmddmIbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamaalZaowanxambbikbikbikamcaeAaeAaeAamdamdameamfamgamdajuamhamiamjamkamlammamnajuamoampamqakVamrajGamsamtaXNamvaYjajGamxamyamzamAamBamCamDamEamFamGaiCajhamHamIamJahAamKamKamKamKamKbikbikbikbikaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikamOamNamQamPamOamRamSamSamTamUamVamWamXamYamZanaanbancajuajuandaneajuajuajuajuajuanfanganhanianfajGajBajCanjajEajFajGankanlanmannahUahUahUahUannanoanpanmahUahAayjahAanrantansansanubikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikaabbikbikbikaEEanwanzanyanBanAanDanCanAanGanGanHanIanJanKanLanManNanOanPanQanRanSanTanSanSanUanVanWanXanYanSanZaoaaobaocaodaoeaofaogaohanSaoiaojaokaolaomaonaooaopaoqaoraosaplaotaovaEHaouaoyaoxbikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOanEaoAanFamOamRamSamSamSaoBaoHaoIaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoWaoZapaaoTapbapcapdaoTaoTapdaoXapcapeaoTaoTapbapcaoVapfapgaphapiapjapkaplapmapnaovaozansansapobikaacapqaacbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikaabaabajkajPajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8905,13 +8977,13 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaDEaKzaKAaKzaKBaJraJraKCaKzaKAaKzaKDaKEaKFaKGaxVazHaGpaGpaxVaxVaxVaKHaKHaKHazNaKHaKHaKHaKHaKHaGvaDMaDMaDMaDMaDMaDMaDMaJFaKIaJGbikaabbikaabbikaabbikaabbikaJGaJLaJMaKJaKKaKLaKMaKNaJMaGvaIKaKOaKOaKPaKQaKRaKSaKTaKSaKUaKVaKWaKOaKOaIKaJZaxqaKXazIaKbaGKaGLaCZaDaaDbaEgaKYaKZaLaaLbaLcaLcaLdaLeaLcaLeaLfaLgaLhaLiaLjaLkaLlaCfaKraChaChaChaChaChaKrayGaCtayHaLmaLnayJayGayJaCtayHayGaCtaDxayGaLoayHayGaLpayHayJaLqaLrayGaLsayHayJaAkaAkaDxaAkaLtaDCaLuaIhaLvaLwaLvaIhaLxaDCaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaLyaCuaLzaGdaKzaLAaLBaLCaLDaKzaGdaLEaInaCuaLFaLGaxVazHazHazHazHazHazHaKHaLHaLIaLJaLKaLLaLMaLHaKHaLNaLOaIDaIDaIDaIDaIDaIDaLPaLQaJGaabaLRaLRaLRaLRaLRaLRaLRaabaJGaJLaJMaLSaLTaLUaLVaLSaJMaGvaIKaIKaIKaIKaLWaLXaJOaLYaJOaLXaLZaIKaIKaIKaIKaJZaxqaMaazIaKbaGKaFAaCZaDaaDbaFBaMbaMcaMcaMcaMcaMcaMcaMcaMdaMcaMeaMeaMeaMeaMeaMfayGaCfaKraChaChaChaChaChaKrayGayGayHaMgaLnayJaMhayGayHayHayGayHaDxayJayHayHayGayHayHayJaDxayIayGayHayHayJaMiayHaDxayHaMjaMkaMkaDCaDCaDCaDCaDCaDCaDCaDDaDDaDDaDDaDDaabbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaKAaKzaKzaKzaKzaKzaKzaKAaInaMlaCuaMmaMnaMoaMoaMoaMoaMoaMoaMpaKHaLHaMqaLJaMraMqaMqaLHaKHaMsaMtaMuaMuaMuaMuaMuaMuaMuaMuaMvbikaLRaMwaMxaMyaMzaMAaLRbikaJGaJLaJMaMBaMCaMDaMEaLSaJMaGvaIKaMFaMFaKPaMGaMHaKSaKTaKSaMHaMIaMJaKOaKOaIKaJZaxqaKaazIaMKaBRaMLaCZaDaaDbaEgaMbaMcaMMaMNaMOaMOaMcaMPaMQaMRaMeaMSaMTaMUaMeaMVayGbikaMWaMXaMXaMXaMXaMXaMYbikayGayHaMZaNaayJayJayGayGayJayJaNbaNcayJayGazxayGayGayJayJaNdaNeayGayGayGaHYaMiayHaDxayHaMjazwayKaFSayGaNfaNgaNfayGayGayGaabaabaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNhaNiaNjaNiaNiaNkaNlaNiaNiaNjaNmaNnaCuaKBaNoaMoaNpaNqaNraNsaNtaNuaKHaLHaMqaLJaNvaMqaMqaLHaKHaNwaNxaNyaNzaNAaNBaNCaNDaNEaNFaMvaabaLRaNGaNHaNIaNJaNKaLRaabaJGaJLaJMaNLaNMaNNaNOaNPaJMaGvaIKaJNaJOaNQaNRaLXaJOaNSaJOaLXaNTaNUaJOaJYaIKaJZaxqaNVazIaKbaEeaEfaCZaDaaDbaNWaNXaMcaNYaMQaMQaMQaNZaOaaObaOcaMeaOdaOeaOfaOgaOhazxbikbikbikbikbikbikbikbikbikayGaOiaOjaOkaOlaOmayGaEtayHaHVaDxayHayGbikayGayHayHayHayHaDxaOnaOoaOpaOpaOpaOpaOqaOraOsaOtaOuaOvaOuaOwaOxaOxaOyaOzaOAaOBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNhaNmaNiaODaOEaOFaOGaOHaOIaOJaOKaOLaOMaONaOOaKzaKBaOPaMoaOQaORaOSaOTaOSaOUaKHaOVaMqaOWaOXaOYaOXaOZaPaaPbaPcaPdaPdaPdaPdaPdaPdaPeaPfaMvbikaLRaPgaNHaPhaNJaPiaLRbikaJGaJLaJMaPjaPkaPlaPmaPnaJMaGvaIKaPoaPoaKPaPpaMHaKSaPqaKSaMHaPraKWaPsaPsaIKaPtazUaPuazIaKbaEeaPvaPvaPvaPvaPwaPxaPyaPzaPAaPBaPBaPBaPCaPBaPDaPEaPFaPGaPHaPEaPIaPJazxayGayGayGayGayGayGayGayGayGayGayGayGaBMayGayGayGayGayHaDxaOiazvaabazvayHaPLaPMaPNaPOaPPaPQaPRaPRaPRaPRaPSaPTaPUaPVaPWaPXaPWaPYaPWaPWaPZaQabpqaQbaQcaQdaQeaQeaQeaQeaQeaQeaQeaQeaQeabLadbbikbikbikbikbikbikbikaaabdBaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdetaNiaNjaNiaNiaNkaNlaNiaNiaNjaNmdeuaCuaKBaNoaMoaNpaNqaNraNsaNtaNuaKHaLHaMqaLJaNvaMqaMqaLHaKHaNwaNxaNyaNzaNAaNBaNCaNDaNEaNFaMvaabaLRaNGaNHaNIaNJaNKaLRaabaJGaJLaJMaNLaNMaNNaNOaNPaJMaGvaIKaJNaJOaNQaNRaLXaJOaNSaJOaLXaNTaNUaJOaJYaIKaJZaxqaNVazIaKbaEeaEfaCZaDaaDbaNWaNXaMcaNYaMQaMQaMQaNZaOaaObaOcaMeaOdaOeaOfaOgaOhazxbikbikbikbikbikbikbikbikbikayGaOiaOjaOkaOlaOmayGaEtayHaHVaDxayHayGbikayGayHayHayHayHaDxaOnaOoaOpaOpaOpaOpaOqaOraOsaOtaOuaOvaOuaOwaOxaOxaOyaOzaOAaOBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdetaNmaNiaODaOEaOFaOGaOHaOIaOJaOKaOLaOMaONaOOaKzaKBaOPaMoaOQaORaOSaOTaOSaOUaKHaOVaMqaOWaOXaOYaOXaOZaPaaPbaPcaPdaPdaPdaPdaPdaPdaPeaPfaMvbikaLRaPgaNHaPhaNJaPiaLRbikaJGaJLaJMaPjaPkaPlaPmaPnaJMaGvaIKaPoaPoaKPaPpaMHaKSaPqaKSaMHaPraKWaPsaPsaIKaPtazUaPuazIaKbaEeaPvaPvaPvaPvaPwaPxaPyaPzaPAaPBaPBaPBaPCaPBaPDaPEaPFaPGaPHaPEaPIaPJazxayGayGayGayGayGayGayGayGayGayGayGayGaBMayGayGayGayGayHaDxaOiazvaabazvayHaPLaPMaPNaPOaPPaPQaPRaPRaPRaPRaPSaPTaPUaPVaPWaPXaPWaPYaPWaPWaPZaQabpqaQbaQcaQdaQeaQeaQeaQeaQeaQeaQeaQeaQeabLadbbikbikbikbikbikbikbikaaabdBaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaQgaQhaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaQmaMoaQnaQoaQpaQqaQraQsaKHaQtaMqaQuaQvaQwaQxaQyaKHaQzaPdaPdaPdaPdaPdaPdaPdaPeaQAaMvaabaLRaQBaQCaQDaQEaQFaLRaabaJGaJLaJMaQGaQHaQIaQJaQKaJMaGvaIKaIKaIKaIKaQLaLXaJOaLYaJOaLXaQMaIKaIKaIKaIKaQNaQOaQPazIaMKaQQaQRaQRaQRaQSaQTaQUaQVaQWaQXaQVaQYaQZaRaaQVaRbaRcaRdaReaRfaMeaRgaRhaRiaRjaRjaRhaRkaRlaRlaRlaRlaRlaRmaRnaRlaRoaRpaRqaRraRsaRvaRuaTkaRwaRxaRwaRyaRzayHayGaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRIaRKaRLaRMaRNaROaRPaOCbbVaTCaRTaRUaQdaRVaRWaRXaRYaRZaSaaSbaScaSdaprbikbikbikbikbikbikbikaaabfmbifbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSfaOFaOFaNjaOMaQjaOFaQjaSgaQjaOFaQjaOMaQkaQlaKzaKBaShaMoaMoaSiaSjaSkaSjaMoaKHaKHaKHaKHaSlaSmaSnaSoaKHaSpaSqaSraPdaPdaZVaPdaStaSuaSvaMvbikaLRaLRaSwaSxaSwaLRaLRbikaJGaJLaJMaSyaSzaSAaQJaSBaJMaGvaIKaJNaJOaSCaNRaLXaJOaLYaJOaLXaNTaSDaIKaIKaIKaSEaSFaSGaSHaSIaSJamKamKaSKaSLaSMaSNaMcaSOaMQaMcaSPaMcaSQaMcaSRaSSaSTaSUaSVaTeaSXaSYaSZaTaaTbaTcaTdaTbaTbaUjaTbaSYaTfaSYaOvaTgaSYaThaTiaTjaTmaTlaToaTnaTqaTpaWIaTraOuaTsaTtaTuaTvaTwaTxaTyaTzaRHaTAaTBaRIcLhaTDaTEaTFaROaTGaRQaRRaRSaTHaTIaQdaTJaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikaaabfmbigbijbihbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaTMaTNaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaTOaTPaTQaTRaTSaTSaJraTTaTUaTVaTWaTXaTYaTZaMqcoCaKHaUbaUcaUdaUeaUfaUgaUhaUiaUZaUkaMvbikaabbikaUlaUmaUlbikaabbikaJGaJLaJMaUnaUoaUpaUqaUraJMaGvaIKaUsaUtaKPaUuaUvaKSaUwaKSaUxaUyaUzaIKaUAaUBaUCaUDaUEaUFaUGaUHbikbikaSKaUIaUJaUKaMcaULaUMaMQaMQaUNaMQaMQaMQaUOaMeaUPaMeaUQaURaMeaUSaMeaUTaUUaUVaUWaUXaUYaUTbwNaVaaVbaVcaVbaVbaVbaVbaVdaWLaVbaVeaVfaWFaWBaVbaVhayHaRDaViaTvaVjaVkaVlaVmaVnaVoaVpaVqaRIaVraVsaVtaVuaVvaTGaRQaRRaRSaRTaVwaQdaVxaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikbdBblqbjMbmKbjMbqQbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLaVMaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaJGaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKbKgaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWuaWtaUTaWvaWwaWxaWyaWzaUTaWAaWGaWCaWDaWCaWEaWHaYDaWNaYFaWJaWKaYGaWMaYEaVbaWOaRtaWPaWQaWRaVjbtTcvIaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgaprbikbikbikbikbikaaabfmbqRbmKbmKbmKbqSbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzaXhaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqaXtaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXRaXPaXPaXPaXPaXPaXPaXPaXQaXWaXXaXSaXTaXUaXVaXYaZHaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYkbBvaYmaYlaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaYAaYBaYCaYHbbFbalbbHbbGbbJaVgaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbbikbikbikbikbqUbqTbqVbmKbmKbrUbthbmKbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdeOaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLaVMaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaJGaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKbKgaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWuaWtaUTaWvaWwaWxaWyaWzaUTaWAaWGaWCaWDaWCaWEaWHaYDaWNaYFaWJaWKaYGaWMaYEaVbaWOaRtaWPaWQaWRaVjbtTcvIaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgaprbikbikbikbikbikaaabfmbqRbmKbmKbmKbqSbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdeOaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzdeQaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqaXtaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXRaXPaXPaXPaXPaXPaXPaXPaXQaXWaXXaXSaXTaXUaXVaXYaZHaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYkbBvaYmaYlaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaYAaYBaYCaYHbbFbalbbHbbGbbJaVgaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbbikbikbikbikbqUbqTbqVbmKbmKbrUbthbmKbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaYYaKzaKzaKzaKzaKzaKzaYYaInaMlaCuaYZaZaaInaZbaZcaZdaZdaZeaDEaZfaXnaZgaZhaXpaZiaZjaZkaZlaZlaZmaZnaZnaZnaZoaZpaZpaZqaZraZsaZlaZlaZtaZpaZvaZwaZxaZxaZyaZzaZAaZuaZuaZuaZBaXGaXHaXIaXJaXJaXJaXJaZCaXJaXJaXJaXJaXJaXJaZDaZEaZNaZFaZGaZJaZIaZLaZKaZMaZNaZNaZNaZOaZPaZPaZPaZQaYiaYiaYiaZRaZSaYiaMebbsaZUaYnaYnbcMaYnaZWaZXaYqaZYaUTaZZbaababbacbadaUTbaebafbagbahbaibajaVbaVbbbKbbLaVbaVbbakbbMbakaVbaVhayHaRDbamaTvaTvaTvbanaTvbaoaRIaRIaRIaRIaRIaRIaRIbapaRIaRSaRSaRRaRSbaqbaraQbbasbatbaubavbawbaxbaybazbaAbikbikbikbikaaabtibtjbtibtibtibtkbtibtlbtibtjbtiaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaLyaCuaInaGdaKzbaBbaCbaDbaEaKzaGdaInaInaCubaFaVEaInbaGbaHaZdaZdaZeaDEbaIaXnaJraZhaXpaXqbaJbaKbaLbaLbaMbaNbaObaLbaPbaLbaQbaLbaRbaSbaLbaLbaWbaLbaLbaUbaVbaLbaWbaXbaYbaZaXqaXqbbabbbbbcbbdbbebbfbbebbgbbhbbgbbgbbgbbgbbgbbgbbibbjbbkbbkbbkbbkbblbbkbbmbbnbbkbbkbbobbpbbqbbqbbqbbqbbqbbqbbqbbraYiaYiaMebcTbbtbbubbvbbvbbwbbxaZXaYqbbyaUTaUTaUTaUTaUTbbzaUTbbAbbBbbCbbDaWCbbEaVbbdfbdcbdgbbIbkZbjrcSNcIgaVbaVhaHYaRDbbNbbOaTvbbPbbQaTvbbRbbRaRDbbSbbTbbUaQbdilbbWbbXaRSaRSbbYbbZaQbbcaaQbbcbbatbccbcdbcebatbatbcfbaAbikbikbikbikbqUbtmbwlbutbwmbtmbmKbutbwmbtmbwlbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaDEaInaYYaKzaKBaJraJraKCaKzaYYaKzbcgbchbcibcjaInbckbckaXkbckaXlaDEbclaXnaJraDEbcmbcmbcnbcobcobcobcobcobcobcpbcqbcobcobcobcobcobcobcrbcsbctbctbcubctbcvbcwbcxbcvbcvbcybczbcAbcmbcBbcBbcCbcCbcCbcDbcDbcDbcDbcDbcDbcDbcDbcEbcFbcFbcGbcFbcHbcHbcHbcHbcIbcJbcHbcEbcKbcKbcKbcKbcKbcKbcKbcKbcLbcLbcLaMebcObcNbcPbcPbcPbcPbgRbcQbcRbmwbcUaZTbcVbcWbcXbcYaUTaUTbcZbdabdbbdabdaaVbcYtbdddcnbdebdebdecZrcZqaVbbdhbdiaRDbdjaTvbbPbbPbbQbbPaTvbdkaRDbdlbdmbdnaQbaRSbdobdpbdqbdqbdrbdsbdtbdubdvbdwbdxbdybdzbavbatbatbdAbaAbikbikbikbikbqUbwnbmKbutbBQbtmbmKbutbBQbtmbmKbFmbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik @@ -8931,56 +9003,56 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjrbtqbtqbtqbtqbtqbtqbtqbtqdjqbikbikaInbwqbdFbwrbrXbwsbrXbwtbuxbwubwvbrZbwwbwxbwybwzbuDblCblCblCblCblCblCbwAbwBbwCbwDbwEbngbngbngbngbngbngbngbwFbngbngbngbwGbngbwHbwIbwJbpIbpIbpIbwKbtLbwLbpNbwMbnqbIDbvcbnrbnrbnrbnqbwObnqbwPbwQbwRbwSbwTbwUbwVbwWbwXbwYbwZbnAbxabqbbxbbxcbtXbxdbqbbnAbzbbxgbANbucbxhbxibxjbxkbxlbxmbxnbvHbvHbvHbvHbvHbvHbvHbvHbxobxpbxqbxrbxsbxtbuhbxubxvbxwbxxbxybxzbxvbxAbukbDdbvXbxCbxDbxEbxFbxFbxGbxHbxIbxJbxKbxLbxMbxNbupbxObxPbxQbusbxRbxSbxTbLSbxUbxVbusbxWbxXbxYbwobikbikbikbikbikbikbikbikbikbikbDybtldemdemdemdenbikdeodepdepdepbtlbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaLyaCuaKzaKzaInaInaInaInaInaInaInaKBaJrbyabrXbybbycbydbyebyebyfbygbyhbyibyibyjbykbtzbtzbtzbtzbtzbtzbylbymbymbynbyobngbypbyqbyrbysbytbyubyvbywbngbyxbyybyzbuVbtLbwJbpIbpIbyAbnmbnmbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObwXbyPbyQbyPbyQbyRbwXbwYbySbyTbyUbyVbyWbyXbyYbyZbzabyTbAObvwbvwbucbzebzdcSCbzfbzgbucbxnbvHbvHbvHbvHbvHbvHbvHbzhbzibzjbzkbzlbxqbzmbuhbznbzobzpbxxbxAbxzbzqbzrbukbIbbztbzubzvbzvbzwbzxbzybzzbzAbzAbzAbzBbzAbzCbzDbzEbzFbzGbzHbzIbzJbzKbzKbzKbzLbusbzMbxXbzNbwobikbikbikbikbikbikbikbikbikbikbikbDyderderderbDzbikbDyderderderbDzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjtdjsdjuaIoaIoaIobdFaJraJrbrXbzVbrXbzWbzXbzYbzZbrXbcsbAabAabAbbAcbAbbAbbAbbAcbAbbcsbcsbngbngbngbAdbngbAebAebAebAebAebAebyvbAfbAgbAhbAibAjbAkbAlbAmbAnbAobApbAqbArbAsbAtbAubAvbAwbAwbAxbAybAzbAAbABbACbADbAEbvjbAFbwVbAGbwTbAHbvjbikbAIbAJbAKbALbAJbAJbAJbAJbAMbnAbCBbvwbCCbAPbAQbARbASbATbAUbucbAVbAWbAXbAYbAZbBabBbbBcbvHbBdbuhbBebzlbBfbBgbuhbBhbBibxwbxxbxAbxzbxvbxAbukbDdbvXbBjbBkbBlbBmbBnbBobBpbBqbBrbBsbBtbBubKpbupbBwbBxbBybusbBzbBAbBBbxUbBCbKwbusbzMbxXbBEbwobikbikbikbikaabaabaabaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjwdjvdjuaJqaJqbBIbBJaJqbBKbrXbBLbycbBMbBNbBObBPbrXbikaabaabdetdesdesdesdesdesdeubikbikbBRbBSbBTbBUbBVbAebAebAebAebAebAebBWbBXbBYbBZbCabCbbCcbCdbnmbnmbCebCfbnmbnmbCgbChbCibCjbCkbClbClbCmbClbCnbCobCpbCqbAEbvjbCrbvlbvlbvlbCsbvjbikbAIbAJbCtbCubCvbCwbCxbCybCzbCAbEsbvwbEtbucbvxbCDbCEbCFbCGbCHbCIbCJbCKbCLbCMbCNbCObCPbCQbCRbCSbCTbzlbCUbCVbuhbCWbCXbCYbCZbDabDbbDcbvVbukbIcbDebDfbDgbDgbDhbDibDjbDkbDlbDmbDnbDobDpbDqbupbDrbBxbDsbusbDtbDubDvbxUbxUbDwbusbxWbxXbDxbwobikbikbikbikaabbDAbFfbDBbFfbDBbFfbFgaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjwdjvdjuaJqaJqbBIbBJaJqbBKbrXbBLbycbBMbBNbBObBPbrXbikaabaabdfMdesdesdesdesdesdfNbikbikbBRbBSbBTbBUbBVbAebAebAebAebAebAebBWbBXbBYbBZbCabCbbCcbCdbnmbnmbCebCfbnmbnmbCgbChbCibCjbCkbClbClbCmbClbCnbCobCpbCqbAEbvjbCrbvlbvlbvlbCsbvjbikbAIbAJbCtbCubCvbCwbCxbCybCzbCAbEsbvwbEtbucbvxbCDbCEbCFbCGbCHbCIbCJbCKbCLbCMbCNbCObCPbCQbCRbCSbCTbzlbCUbCVbuhbCWbCXbCYbCZbDabDbbDcbvVbukbIcbDebDfbDgbDgbDhbDibDjbDkbDlbDmbDnbDobDpbDqbupbDrbBxbDsbusbDtbDubDvbxUbxUbDwbusbxWbxXbDxbwobikbikbikbikaabbDAbFfbDBbFfbDBbFfbFgaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaIndjudjubDEaInaInaLyaCubDFbDGbrXbDHbycbycbycbrXbrXbrXbikbikbikdewdevdevdexdevdevdewbikbikbBRbDIbAebDJbDKbDKbDKbDKbDKbDLbDMbDKbDNbDObDPbDQbDRbDSbDTbnmbDUbpIbDVbDWbtLbDXbDYbDZbCjbCjbCpbEabEbbEcbEdbEebCpbvibAEbvjbEfbEgbEhbqtbEjbvjbikbEkbAJbElbEmbEnbEobEpbEobEqbErbFWbvwbHBbucbEubEubEvbEwbExbEybEzbEAbEBbECbEDbEDbEEbEFbEGbEHbuhbCTbEIaJSbuhbuhbuibEKbELbEMbuibukbukbukbENbIdbvXbEPbBkbBlbEQbDgbDjbERbESbESbETbxJbEUbEVbEWbEXbxPbEYbusbEZbFabxUbFbbFcbFdbusbzMbFebwobwobikbikbikbikaabbFhbFjbFibGSbFkbGTbFhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjydjydjydjAdjzdjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbFobFpbFqbFrbFrbFrbFpbAebyvbAfbAebAebAgbFsbFtbFubFvbFwbFxbFybpIbpIbFzbtLbDXbDYbFAbFBbFCbFDbFEbFFbFGbFHbFIbCpbFJbFKbwRbFLbFMbFNbFObFPbwXbwYbFQbAJbFRbFSbFTbEobFUbEobFVbErbJebvwbKObucbFYbFZbGabGbbGcbGdbGebGfbGgbGgbGhbGibGgbGgbGjbGkbGlbGmbGnbGobGpbGqbGrbGsbGtbGubGvbGwbKhbIebKjbKibvXbGBbGCbGDbGEbGFbxGbGGbESbESbGHbGIbEUbGJbupbGKbGKbGLbusbGMbGNbGObGPbxUbGQbusbzMbGRbwobikbikbikbikbikaabbGUbIybFibFkbFibKkbDBaabbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjCdjEdjDdjGdjFdjIdjHdjFdjJdjLdjKdjydjydjBbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbGWbmrbNkbmrbGXbGYbGZbGYbGYbGYbGYbHabyvbAfbHbbngbngbHcbpIbAibFvbHdbtLbHebHfbHfbHgbHhbHibHjbHkbHlbHmbHnbHobHpbHqbHrbHsbCpbCqbAEbvjbEibHubHvbHwbHxbvjbikbEkbHybHzbHybHybHybHybHybHAbHybKPbvwbKObucbHCbHDbHDbHEbHFbEybHGbHHbHIbHJbHKbHLbHMbHIbHNbHObHPbHQbHRbHSbHTbHTbHUbHVbHWbHXbHYbLibLCbLBbNdbNcbNebIfbIfbIgbIhbIibxGbIjbxJbxJbIkbIlbEUbImbInbIobIpbIqbIrbIsbItbIubIvbIubusbusbIwbEXbGxbLDbLDbLDbLDbLDbGxbFhbFkbFibFkbFkbGTbFhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjHdjHdjHdjMdjFdjNdjNdjFdjOdjHdjHdjQdjPdjydjBbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbLFbKmbIAbKmbIBbAebFqbFrbFrbFrbAebAebyvbAfbICbKobngbIEbpIbAibFvbIFbtLbIGbpIbrsbpIbIHbDXbvvbIIbHlbHmbIJbIKbILbIMbINbIObIPbIQbIRbISbISbITbIUbIVbvjbvjbikbEkbHybIWbIXbIYbIZbJabJbbJcbJdbMhbvwbKObCHbJfbJgbJhbJibJjbEybJkbJlbJmbJnbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbGwchEbIecnfcjubvYbJIbJJbJKbJLbJLbxGbJMbJNbJObxGbJPbEUbJQbxGbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabKbbKcbKdbKebKfbKfbIxbJFbJHbGzbKlbFfbDBbNhbDBbFfbLEaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydjSdjRdjUdjTdjVdjFdjWdjHdjXdjHdjHdjHdjHdjHdjMdjFbikbikbikbikbikbikbikbikbikbikdewdeCdevdevdevcOfdewbFnbBRbBRdezbAebFqbAebAebAebAebAebyvbAfbICbLwbngbLQbpIbKqbKrbpIbKsbpHbpIbpIbKtbtLbDXbvvbIIbHlbHmbCpbKubKvbqzbKxbKybKzbKAbKBbKCbKDbwXbKEbKFbwXbwYbwYbKGbHybKHbKIbKJbKKbKLbKLbKMbKNbMibvwbMjbucbEybKQbEubKRbKSbEybJkbKTbKUbKVbKWbKXbKYbKUbJkbKZbLabLbcchbLbbLcbLbbLdbLdbLebLfbLgbLhbLhcpLbLgbLgbLhbLhbLjbLkbLjbLjbxGbxGbxGbxGbxGbLlbLmbBobxGbLnbLobLpbLqbLqbLrbLsbLtbLubLvbLIbLxbLybLzbLAbLAbEObGAbHZbGxbGzbGzbGzbIabGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdjHdjHdkadkadkadjFdjHdjHdjFdkbdkddkcdkfdkedkgdjFbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbWobKmbIAbKmbFobLGbLHbAebAebAebLGbAebyvbAfbICbNrbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPdiNbLRcobbKzbLTbLUbLVbLWbLXbLYbLZbMabikbikbikbHybMbbMcbMdbMdbMebMfbMgbHybNSbNRbKObNTbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbGxbLDbLDbGxcnccndcnebOQbOSbUHbYdbGzbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdjHdjHdkadkadkadjFdjHdjHdjFdkbdkddkcdkfdkedkgdjFbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevbWobKmbIAbKmbFobLGbLHbAebAebAebLGbAebyvbAfbICbNrbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPdiNbLRcobbKzbLTbLUbLVbLWbLXbLYbLZbMabikbikbikbHybMbbMcbMdbMdbMebMfbMgbHybNSbNRbKObNTbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbPEbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbGxbLDbLDbGxcnccndcnebOQbOSbUHbYdbGzbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdjHdjHdjHdjHdjHdkidjHdjHdjFdjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdeEdeDdeGdeDbNlbNmbNnbNnbNnbNnbNnbNobNpbNqbICbWSbngbNsbNtbNubNvbNwbNxbNybNybNybNzbNzbNAbvvbNBbNCbHmbCpbNDbNEbNFbKvbNGbKzbNHbNIbNJbNKbNLbFNbNMbMabikbikbikbHybNNbNObNPbNQbMebMfbMgbHybPibNUbQObPjbNVbNWbNXbNYbNZbOabObbOcbKUbKUbOdbOebKUbKUbJkbKZbOfbOgbOhbOibOjbOkbLdbOlbOmbOnbOobOpbOqbOrbOrbOsbOtbOubOvbOwbJVbJVbOxbJVbOybJVbOzbJVbOAbOBbOBbOCbODbOEbOFbOGbOHcsjbOJbOKbOLbNabOMcxHbikbikbikbGxbORbJFbOPbOQbGzbOObNibGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkmdkldkodkndjHdjFdjHdjHdjFdjHdkqdkpdkrbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybQPbvwbQQbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbPKbPLbMHbPMbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMcxHbikbikbikbGxbNfbNgbGxbGzbGxbGxbGzbGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjydjydjydjydjydjydjFdjOdjHdksdjHdkudktdkvbikbikbikbikbikbikbikbikbikbikbikbikbikdeJdeIdevdeKdevdeLdeMbikbikbikbikbikbikbikbikbikbikbQgaabbikbikbikbikbOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQRbuabQSbvwbShbSgbSibvwbSjbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRpbLgbRqbMHbMHbMHbRrbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbWHbRGbRHbRIbRJbRKbNabRLbwobikbikbikbGxbGxbGxbGxbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydkxdkwdkydkxdkzdjFdjHdjHdjFdjHdkBdkAdkCbikbikbikbikbikbikbikbikbikbikbikbikbikdeOdeNdePdePdePdeNdeQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbOVbRMbRNbRObRPbNybRQbRRbRSbRTbNzbDXbRUbRVbvvbvvbFXbRWbubbQNbQMbRXbRYbRXbRZbSabSabSbbScbSdbSabSabSebSabSfbSabQMbQRbuabSlbSkbTJbTIbTLbTKbvwbPlbSmbQUbSnbSobSpbJkbSqbSrbSsbStbSubSvbSwbSxbJkbSybSzbLbbSAbSBbSBbSCbSDbSEbSFbSGbLgbSHbSIbMHbSJbSKbLhbPNbSLbSMbSNbSObSPbSQbSRbPPbSSbRAbSTbSTbPTbSUdnjbSWbSXbSYbSZbTabTbbTcbTdbNabOMbwobTebikbikbikbikbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdkDdkDdkDdkDdkDdkEdjHdjHdjFdjydjydjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikdeRdeSdeSdeSdeTbikbikbikbikbikbikbikbikbOUbOTbQebOTbQfbikbikbikbOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTNbTMbTPbTOdlidjmdlkdljdllbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLhbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbPTbUqbUrbUsbUtbUubUvbUwbUxbUybUzbNabOMbUAbUBbUAbUCbUDbUCbUCbUCbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdkDdkDdkDdkFdkGdjFdjHdjHdjFdjHdjHdjHdkHdjHdkIdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbTfbTibThbTgbUIbUIbUIbOVbUJbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbONbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbVybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbPTbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkKdkJdkDdkLdkMdjFdjHdjHdkNdjHdjHdjHdkOdjHdkPdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUEbUFbUEbQebUIbWmbWlbOVbWnbWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZdmbbWEbWFbWGcAzbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRceLbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAbXBbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkmdkldkodkndjHdjFdjHdjHdjFdjHdkqdkpdkrbikbikbikbikbikbikbikbikbikbikbikbikbikdewdevdevdevdevdevdewbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybQPbvwbQQbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbRpbPFbPGbPHbPIbPJbPKbPLbTdbXBbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMcxHbikbikbikbGxbNfbNgbGxbGzbGxbGxbGzbGxbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjydjydjydjydjydjydjFdjOdjHdksdjHdkudktdkvbikbikbikbikbikbikbikbikbikbikbikbikbikdeJdeIdevdeKdevdeLdeMbikbikbikbikbikbikbikbikbikbikbQgaabbikbikbikbikbOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQRbuabQSbvwbShbSgbSibvwbSjbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRqbPEbSFbMHbMHbMHbUzbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbWHbRGbRHbRIbRJbRrbNabRLbwobikbikbikbGxbGxbGxbGxbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjxdjydkxdkwdkydkxdkzdjFdjHdjHdjFdjHdkBdkAdkCbikbikbikbikbikbikbikbikbikbikbikbikbikdmideNdePdePdePdeNdmHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbOVbRMbRNbRObRPbNybRQbRRbRSbRTbNzbDXbRUbRVbvvbvvbFXbRWbubbQNbQMbRXbRYbRXbRZbSabSabSbbScbSdbSabSabSebSabSfbSabQMbQRbuabSlbSkbTJbTIbTLbTKbvwbPlbSmbQUbSnbSobSpbJkbSqbSrbSsbStbSubSvbSwbSxbJkbSybSzbLbbSAbSBbSBbSCbSDbSEbSHbSGbPEcgQbSIbMHbSJbSKbLhbPNbSLbSMbSNbSObSPbSQbSRbPPbSSbRAbSTbSTbPTbSUdnjbSWbSXbSYbSZbTabTbbTcbRKbNabOMbwobTebikbikbikbikbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjZdjYdkDdkDdkDdkDdkDdkEdjHdjHdjFdjydjydjydjydjydjydjBbikbikbikbikbikbikbikbikbikbikbikdeRdeSdeSdeSdeTbikbikbikbikbikbikbikbikbOUbOTbQebOTbQfbikbikbikbOVbOVbTjbTkbRObTlbNybTmbQnbTnbTobNzbDXbTpbTqbTrbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTCbTDbTEbTEbTEbTEbTEbTEbTFbTGbTHbTNbTMbTPbTOdlidjmdlkdljdllbPlbTQbQUbQVbTRbSpbJkbSqbSrbTSbTTbTUbTVbTWbTXbJsbTYbTZbLbbLbbUabUabLbbSDbLdbUbbUcbLgbUdbUebUfbUgbUhbLhbPNbUibUjbUkbUlbUmbUnbUobPPbUpbRAbSTbSTbPTbUqbUrbUsbUtbUubUvbUwbUxbUybVObNabOMbUAbUBbUAbUCbUDbUCbUCbUCbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkhdjYdkDdkDdkDdkFdkGdjFdjHdjHdjFdjHdjHdjHdkHdjHdkIdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbTfbTibThbTgbUIbUIbUIbOVbUJbUKbULbUMbUNbUObUPbUQbUQbURbNzbUSbUTbUUbUVbUVbUWbUXbUYbUVbUZbUZbVabVbbONbUZbUZbVdbQMbQMbVebVfbVfbVfbVgbVhbVfbVfbVibVjbVkbVkbVlbVkbVmbVnbVkbVobVpbVqbPlbVrbVsbSqbVtbVubVvbVwbVxbVybVubJkbSybVzbVAbVBbVCbVDbVEbVFbVGbVHbVIbVJbVKbVLbVMbVNbPMbLhbPNbPNbVPbVQbVRbVSbVRbVTbPPbVUbVVbVWbVWbPTbVXbVYbVZbNabNabNabNabNabNabNabNabOMbUAbWabWbbWcbWdbWdbWebUCbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikaabbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkKdkJdkDdkLdkMdjFdjHdjHdkNdjHdjHdjHdkOdjHdkPdjFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUEbUFbUEbQebUIbWmbWlbOVbWnbWpbWqbWrbWsbNzbWtbWubWvbWwbNzbUTbUTbWxbUVbWybWzbWAbWBbWCbUZdmbbWEbWFbWGcAzbUZbWIbWJbWKbVfbWLbWMbWObWNbWPbWQbWRceLbWTbWUbWVbWWbWXbWYbWZbXabXbbXcbXdbXebXfbXgbXhbSrbXibXjbXkbXlbXmbXnbJsbXobXpbXqbXrbVDbXsbXsbXtbXubLgbXvbXwbXxbXybXzbXAdoEbLhbXCbXDbXEbXFbXEbXEbXGbXHbXIbXJbXKbXLbXMbPTbXNbXObPXbEXbxXbXPbXQbXRbXRbXQbXRbXSbUAbXTbXUbWcbWdbXWbXVbUCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbXXbXYbXXbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkQdkDdkDdkRdjFdjHdjHdjFdkSdjHdjHdkUdkTdjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbTgbUGbUEbUEdeycOWbTkbTkdeAbZAbTkbWqbYhbYibNzbNzbNzbNzbNzbNzbYjbUTbYkbYlbYmbYnbYnbYnbYobUZbYpbYqbYqbYqbYrbYsbYtbYubYvbYwbYxbYybYzbYAbYBbYCbVfbVibYDbVkbYEbYFbYGbYHbYIbVkbSmbQVbSnbSobYJbYKbYLbYMbYNbYObYPbYQbYRbVubYSbYTbYUbYVbYWbYXbYYbYZbZabZbbLgbLgbLgbLgbLgbZcbZdbZebLhbZfbXEbXEbZgbZhbXEbZibZjbZkbZlbRAbZmbZmbPTbPVbZnbPXbEXbUAbZobUAbUAbUAbUAbUAbUAbUAbZpbZqbUCbZrbZtbZsbUCaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbZubXXbXXbZvbWhbWhbXZbXZbZwbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydkWdkVdkXdjFdjHdkYdjFdkZdladjHdjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbQebUFbUFbUFbQebUIbYfbYebZzbZAbTkbZBbZCbZDbZEbZFbZFbZFbZGbUTbUTbUTbWxbUVbZHbYnbZIbYnbZJbUZbYpbYqbZKbYqbZLbUZbZMbZNbZObVfbZPbZQbZRbZSbZTbZUbZVbZWbZXbZYbZZcaacabcaccadbVkbTQbQVbQVcaebYJbYKcafcagcahbXjcaicajcElcalcamcancaocapcaqcarcIfcasbXscatbVAcaucavcawcaxcaycazcaAbZjbZfcaBbXEbXEbXEcaCcaDbZjbZkcaEbRAbZmbZmbPTcaFcaGbPXbEXcaHcaIcaJbUAcaKcaLcaMcaNcaOcaPcaQbUCcaRcaScaTbUCbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikcaUbWhbZubWhbWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydjydjydjydjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbTgbWjbYbbWkbTgbUIbUIbUIbOVcaYcaZcaZcaZbOVbOVbUTcbacbacbbcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfcbncbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlccicbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNcbOcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbPTcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcckccjcdqcclcfeccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabbikbikbikbikbikbWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbYcbOTbYgbOTbZxbikaabbikbOVbOVbUIbUIbUIbOVbikbUTccAccBccCccDbZFccEccFbUVccGccHdmcbYnccJccKccLccMccNccOccPbUZccQccRccSccTccUccUccUccUccVccWccXccYccYccZccZcdacdbcdcbVibPlcddcdecdfcdgcdhbYKcdicbtcdjcdkcdlcdmbSwcdncdocdpcffcdrcdrcdscdrcdrcdrcdtbVAcducdvcdwcdxcdycdzcdAcbPcdBcdCcdDcdEcdFcdCcdGcdHcdCcdIcdJbRBbPTbPTcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebceaceccebcebcebcedceecefcegcehaabbikbikbikbikaabbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabcejbUTbUTbUTcekbUTbUTcelbUVcemcenceocepceqcercescetceucevcewccKcexceycezceAceBceBceBceBceCceDceEceFceGceFceHceIceJceKchvceMceNceOcePceQceRceSceTceUceVceWceXceYceZcfacfbcfccfgbMmbMmcfichOcgHceYchVcfjcfjcfkcfjcflcfmcfncfocbPcfpcfqcfrcfscfrcftcfucfvcdCbPTcfwbPTbPTcfxcfybZnbBxbEXbUAcfzbUAbUAcfAcfBcfCcfDcfEcebcfFcfGcfHcdUcfHcdUcfIcdUcdUbUAcfJcfKcfLcfMaabaabaabaabaabaabaabaabbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcfObXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcejcfPbVccqsbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzbMVcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFciOcgJcgJcgKcgLcgMcgNcgOcgPcbPcgQcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabbikbikbikbikaabbikbikbikbikbikbikbikbWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcejchocfQchpbUTcfSchrchrchrchrchrchrbUZbUZbUZbUZbUZbUZbUZchschtchucWpchwchxchychychzchAcglbGybGychBchCchDbGybGybGycqOchFchGceOchHchIchJcgEchKchLchMbSqchLchNcfdcfdcfdcjncjlcjlcjlcjlckacgIbSqclPchPchQchRchSchTchUclQcbPchWchXcfrchYcfrchZciacibciccidciecifbBxcigcfybZncihbEXbFeciicijcikbwobxXbxXbUAcilcimcinciocipciqcirciscitciucivbUAciwciycixcizbikbikbikbikaahbikbikbikbikbikbikbikbikciAbXXbXXbXXbXXbXXbXXbXXciBciCbXZbXZbXZbXZciDbYabWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcejcejcejcejbUTcfScejbikbikbikbikciEbaTciGciHciIciJciKciLciMciNcmPciPciQciRciSciSciTciUciVciWciWciWciWciXciWbGybGybPlciYciZcjacjbcjccjdchScjecjfcjgcjhcjicjjcjkcjlcfdcnicjpcjpcjpcjpckNclSckUcnjcjqcjrcjscjtcbAcwncjvcbPcjwcjxcjycjzcjAcfrcjBcbPcbPbEXcjCbEXbEXbEXcjDcjEcjFbEXbxXciicjGcjHbwobwobwobUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikbWhccvccvccvccvccvccvcjIbXZccuccvcjJbXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcAjbikaabaabcjKcjKcjKcjKcjKcjKcjLcjKbUTcelcjMbikcjNcjOcjPcjQcjRcjScjTcjUcjVcjWcjXcjYcjZcosckbckcckdckeckfckgckhciVckickjckjckjckkciWbGybGycklcklcklcklckmcklckncknckocklcklckpcklckqckrckscktcksclZaPKcmacmmcmlcmocmnckzckAckBckCckDckEckFcdccbPcbPckGcbPckHcbPckIckJckKcgnckLckMckvckOckPckQckRckSckPbxXciickTbxXbxXckVckWckXchabxXbxXbxXbxXbxXbxXbxXckYckZcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcjJbXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikclaclbclbclbclccldcleclfclgclhclicjLcljcelcjMbikclkcllclmclnclocjSclpclqclrclsciLcltcgdcoaciPcluchyclvchyclwclxclyclzclAclAclAclBciWbGybGycklclCclDclEclFclGclHclHclIclJclKclLclMclNclOcotcfhcpwcmpcmrcmqctbcsZcuoctcckDclVclWclXckzclYcmtcmscmbcmbcmccmdcmecmfcmgcmhcmfcmfcmfcmicmfcmfcmjcmucnpcnlcqRcoXcrGcqScrHcrHcrIcrHcrHcrHcrHcrJcrKcrHcrHcrHcrMcmvbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcmwcmxcmxcmxcmxcmycmzcmAcmBcmCcmCcmDcjKcmEcfScjMbikclkcmFcmGcmHcmIcmJcmKcmLcmIcmIcmMcmNcmOcpxcmQcmQcmRbHtchycmTcmUclyclAclAclAclAcmVciWbGybGycklcmWcmXcmYcmZcnacnbcnbbzsbvWbulbxBclHcnhcklcqQcfdcrLcjpcwscvxcwEcwCcxNcxIckDcnmcnncnockDbJGcumctecnqcnqcnqcnqcnqcnrcnscntcnucnvcnvcnwcnwcnvcnxcnycnzcnAcnBcnCcnDcnEcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcuncnFcnGcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcaUbWhbWhchlchlbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcnIcnJcnKcnJcnLcnMcnNcnOcnPcnQcjKcnRcelcjMbikclkcnScnTcnUcnVcjScnWcnXcnYcnZciLcltcgdcbkchqcgfcoccodciPciPciPcoecofclAclAcogcohciWbGycoicklcojcokcolcomcomcomconcoocomcomcopclHcoqcorcrNcfdcupcjpcxVcxUcxVcxVcxNcEickDcowcoxcoyckDcozcuscoicoAcoAcoAcoAcoAcoDcoDcoDcoAcoAbikbikbikbikckPcoEcoFcoGcnCcoHcoIcoJcoKcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcnCcuncoWcvtcoYcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcpacpbbWhbZubWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikcnHcpccpdcpecpfcmBcpgcphcpicmBcpjcpkcplcpmcjMbikcpncjOcpocjQcppcjScjScpqcprcpscptcpucpvcwqchqcgfcpycpzcpAcpBcpCciVcpDclAclAclAcpEciWbGybGycpFcpFcpGcpHcpIcpIcpIcyFcpJcpJcpJcpKcpFcpGcpMcqQcfdcrLcEjbjVcEYdbndbmcxNclRckDcoucpNcovckDbGycuscoAcoAaabaabbikbikbikbikbikbikbikbikbikbikbikcpRcpScpTcpUcpVcpWcpXcpXcpYcpXcpXcpXcpXcpXcpZcqacqbcqccqdbwocvvbXSbwobwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhcqhcqicqjbWhbWhbXZbXZcqkbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcqlcnJcqmcnJcqncqocqpcqqcnNcqrcjKcqscelcejbikbikbikbikciEcqtcqucqvcqvciLcqwciLcqxcgdcbkcqycqzcqAcqBcqCcqCcqCcqDcqEclAcqFclAcqGciWbGybGycpFcqHcqIcqJcqKcqLcqMcpFcqLcqMcqKcqNdehcqPcpMczecyWczgcEjdbpdbodbrdbqdbsctcckDcpOcpPcpQckDbGycuscoAcvyaabaabaabbikbikbikbikbikbikbikbikbikbikcpRcqUcqVcqWcqXcqYcqZcracrbcpXcpXcrccpXcpXcpZcqbcqbcqbcrdbwocvzbxXbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfcrhcribZvbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadbabLcrjcrjcrjcrjcrjcrjcrjcrjcrkcrkcrkcrkcrkcjKcjKcjKcjKcjKcjKcjKcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcrocrpcrqcrrcrscrtcrucrvcrwcrxcrycrzcrAciWbGybGycpFcrBcrCcqJcqKcqKcrDcpFcrEcqKcqKcqNcqKcrFcpMbGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpbikaabaabaabbikbikbikbikbikbikbikbikbikcpRczNczPcoBcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikaSecsdcsecsfcsgcsgcshcsicspcskcslcsmcsncsocsrcsqcsqcsscsucstctzctzctAcsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcsEcsFcsGcgfcsHcmQcsIcsJcsKcsLcsMcsNcsObGybGycpFcsPcsQcsRcsScsTcsUcpFcsVcsTcsWcsXdlFcsYcwrbikbikbikcEjdbAdbzdbAdbAdbCdbBdbEdbDdbycwFbVibGycuscoDcwpbikbikaabaabaabbikbikbikbikbikbikbikbikctdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecsdctuctvctwctvctxctyctDctCdmedcYdmedmfcxnctEctFctEcgdctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXciFctZcuacnqcubcuccudcuecufcugcuhcuicpFcujcqKcugcukcqKculcwrbikbikbikdbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpbikbikbikaabaabaabbikbikbikbikbikbikbikckPcurczQcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecuBctvcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQcuRceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKcvocpFcvpcqKcqKcqNcqKcyGcwrbikbikbikdbFdbRdbQdbTdbSdbVdbUdbXdbWdbybGychCcyHcuscoAbikbikbikbikbikaabckPckPckPckPckPckPckPckPckPcvucxScvwckPcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikadbabLcrjcrjcrjcrjcrjcrjcvFcvGcvGcvHctBdlXcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhcwicwjcwkcpFcwlcwjcwmcqNcqKcwocpMbikbikbikdbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAbikbikbikbikbikbikckPcwtcwucwvcwwcwxcwycwzcwAcwBczScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGacGafxafxacGafxafxafxagiafxafxaabagiaqZbikaabaabcwNcwNcwNcrjcwOcwPcwQcwRcwScwTcwUcwVcwWcwXcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrcwecpMcpMcxBcpMcpMcxCcxDcxEcxEcxEcxFcxEcyUcpMbikbikbikdbFdbFdbFdbFdbFdbydcedcgdcfdbybGybGyczhcuscoAbikbikbikbikbikbikckPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTckPcxOcxOcMpckPaabbikcwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabaabbikaabaabbikbikaabaabaabbikaqZbikbikbikaabaabcwNcrjcrjcrjcrjcrjcrjcrjcrjcybcwWcwXcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcmScxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTcALceJcAhbGycAMcoAcoAcoAcoAcoAbikbikbikbikdcidchdckdcjdbydclbVibVicuscoAcoAcoAcoAcoAbikbikckPcxOcxOcxOcyZczaczbczcczdcAicAOcAvckPcAVcAYcAWckPbikbikcwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikczoczpczqbikczoczpczqbikczoczpczqaabczraabbikbikbikbikaabaabaabbikbikbikbikbikbikczscwWcwXcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcoacyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBccBPcBNcBNcBNcBNcBNcBQcoAbikbikbikbikdcidchdckdcmcTabGyckObVicusbGybGybGycgmcoAbikbikckPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbckPcCGcCYcCIckPbikbikcwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikczocAkczqbikczocAkczqbikczocAkczqaabaabaabaabbikbikbikbikbikbikbikbikbikaabaabaabczscwWcwXcztcAlcxjcAmcAncAocAocyjcxjcztcApcxjcxjcxjcxjcAqcArcAscAtbZNcAucAPcAwcAxcAycxsczBdlYcAAcxscABctWcsOcACcsLcADcAEcAFcAGcAHcAIcAJcAGcAKcAGcAGcAGcoAcoAcoAcoAcoAcoAcoAcoAcEhcoAbikbikbikbikdcicBTdcqcBUdbycgmcFdbVicFmcFlcFlcFnbGycoAbikbikckPcwtcwucwvcAQcARczbcAScATcAUcFrcIScAXcGscIScGtckPbikbikcwGcwGcBbcCrcBdcwGcwGbwobxXcGycyJcyJcyJbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikafxaabczocAkczqbikczocAkczqaabczocAkczqaabbikbikaabaabaabaabaabbikbikbikbikbikaabbikbikczscwWcvKcBecxjcBfcBgcBhcBicBjcBicBkcBicBlcBmcxfcBncztcztczxcBocBpcBqcBrcBscBtcBucBvcBwcBxcBycBzcBAcBBcBCcBDcBDcBEcBFcBGcBHcBIcBJcBKcBLcBMcrecBOcHucHtcDPcDPcDPcDPcDPcDPcHvcoAcEhclUclUclUclUclUclUcjmbEJcjmcFfclUclUcoAcoAcoAcoAcusbGycoAbikbikckPcxOcBZcxOcCacxRcqUcCbcCccCdcCecqUcqUcCgcqUcChckPbikaabaabcwGcwGcCscwGcwGbikbwobxXcvzcyJcHycHxbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikczocAkczqaabczocAkczqbikczocAkczqbikbikbikbikbikbikaabaabaabbikaabbikaabaabbikbikcybcCicvKcCjcCkcCkcClcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcCmcCncCmcCocCmcrmcCpcCqcFbcCtcCtcCtcCucCvcBCcCwcCxcCycCzcCAcCBcBIcCCcCDcCEcCFcHzcCHcHAcCJaabcCKcCKcCKcCKcCKcHBcoAcHDcHCcIGcHHcIHctackycjocBWckuckycBXcCPcBYcCRcCQcoAcusbGycoAbikbikckPcxOcxOcxOcAQcCTczbcCUcCVcCWcCXcCZcCZcDacqUcDbckPaabaabbikbikbikcIKbikbikbikbwobxXcvzcyJbxXbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxaabbikczocAkczqaabczocAkczqbikczocAkczqaabbikbikbikbikbikbikbikbikaabcDccDdcDdcDdcDdcybcDecwWcDfcDgcDhcDhcDicDjcDkcDlcDlcDlcDlcDmcDncDocDncDncDpcDpcDncDqcDrcDscDtcDtctYcDvcDwcDxcDycDzcDzcDAcDBcDCcDDcDEcDFcCAcDGcBIcDHcDIcDJcDKcILcDMcIMcDOcDPcDQcDRcDScDTcCKcHBcoDcEhclUcvscvqcIOcINcxLckxckwdcrclUcCSczVcuqczVcDUcoAcusbGycoAcoAbikckPcwAcwAcwAcwAcEkcqUcCbdlZcEmcCecqUcEncEocEocEpcEqcXYaabbikbikbikbikbikbikbikbwobxXcGybxXbxXcIPbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcEraabaabaabcEraabbikaabcEraabbikbikbikbikbikbikbikbikcDccDccDccEscEtcEucEvcEwcExcEycDfcDfcEzcEAcvKcvKcEBcECcECcECcECcEDcEEcEFcEEcEEcEEcDtcDtcEGcEHcEIcEJcEKcDzcELcDwcDzcDzcDzcDzcEMcBCcENcEOcCycDFcCAcDFcBIcDHcDIcEPcEQcERcEScETcEUaabcEVcEWcDTcEXcCKcHBcoDcHDcHCcxKcxJczVcxMclUcIIcDVdcsclUcDWcDYczVcEbcEaclUcusbGycITcoAbikckPcwtcwucwvcFjcARczbcFkcJIcGCcJKcJKcFocFpcFqcJLckPaabaabaabbikbikbikbikbikbikbwocJMcvzbwobwobwobwobwoaabaabaabcJNcJNcJNcJNcJNcJNaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabcFscFtcFtcFucFvcFwcFwcFwcFvcFwcFwcFwcFvcFwcFwcFxcFtcFtcFtcFtcFtcFycFzcFAcFBcFCcFDcFEcFFcFGcfRcwWcFHcDfcvKcvKcvKcFIcEBcECcFJcFKcFLcyrcFNcDucFPcFOcFQcFScFTcSpcFVcFWcFXcFScFYcFZcDwcGacDzcDzcDzcGbcBCcGccGccDFcGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncDOcGocDQcGpcDTcDTcCKcHBcoDcEhclUcyMcyLcyNcFfclUcnkclTcFfclUcyQcyScyRcyTcyTclUcusbGycJOcoAbikckPcxOcxPcxOcGAcxRcqUcGBcJPcJJcqUdlWcGDcwAcwAcwAckPbikbikaabaabbikbikbikbikbikbwocyKcvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcGFaabbikaabcGFaabbikaabcGFaabbikbikbikbikbikbikbikbikcDccDccDccGGcGHcFMcDdcGJcfRcGKcExcExcExcExcGLcExcFGcECcGMcGNcGOcGPcGQcGRcGScGTcGUcGVcGWcGXcGYcGZcHacHbcFYcELcDwcHccHdcDzcDzcHecBCcHfcHgcDFcHhcCAcHicHjcHkcHlcHmcHncHocHpcHocHqaabcCKcCKcCKcCKcCKcHBcoAcEhclUcIJcyVcyYcyXcEecEccEgcEfcHwcGucHZczVcIRcIQclUcusbGycJRcoAbikckPcxOcxOcxOcFjcHEcHFcHGcJScHIcCZcCZcCZcHJcHKcHLcHMbikbikbikaabaabbikbikbikbikbwobwocvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxaabaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikaabaabcDccDdcDdcDdcDdcHPcHQcHRcfRcHScfRcfRcEBcHTcfRcECcHUcHVcGOcHWcFNcHXcHYcIacIacIbcIccIdcIedmabRFcIbcIhcIicIjcIkcIlcImcIncIocIpcIqcGfcIrcIscItcIucIvcIwcIxcIycIzcIAcIBcICcIDcDPcDQcIEcIFcIFcCKcHBcoAcEhclUclUclUclUclUcJhcANcBRcJQcMccBScMecMdcMCcBVclUcuscGqcGrcGrcGrcJTcJTcJTcJTcJTcJUcKTcKbcKUcIUczbcIVczbcIWczbcIXcHMbikbikbikbikaabaabbikbikbikbikbwocvzbwoaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikczocHOczqaabczocHOczqbikczocHOczqbikbikbikaabbikbikbikbikaabaabaabbikbikaabaabcJbcJbcJbcJbcJbcJbcJbcJccJbcJbcECcJdcJecGOcHWcFNcJfcFNcFNcJgcDtcJicJjcFWcJkcFRcDtcJmcDzcDwcJncJocJpcIncJqcJrcJscJtcJucJvcJwcJtcJxcJycJzcJAcDFcJBcJCcJDcJEaabcEVcJFcJGcJHcCKcHBcoDcKWcKVcKVcKVcKXclUcFacyLcCLcFecyScCMcyTcyTcyScCNclUcuscGvbVibGycKYcKZcoAbikbikckPcJVcJWcJXcJYcJVcJWcJZcKacJVcJWcLackPaabaabaabaabaabaabaabaabaabaabbwocvzbwobwobwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjcbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikaabaabbikbikaabaabaabcJbcKjcKjcKkcGIcKmcKmcKncKocKocKpcKqcKrcGOcHWcGOcKscGOcGOcGOcDtcKtcKucKvcKwcKxcKycKzcKAcKBcKCcKCcKCcKDcKEcKFcKGcKHcKIcHhcCAcKJcKKcKLcKMcKNcDFcJBcKOcKPcKQcKRcDQcKScIFcIFcCKcHBcoDcEhbVibVibVibYDclUcFgcCOcDXcNDcyScPocPMcyTcPVcPQclUcuscGvbVibGycyHbGycoAbikbikckPcLicLjcLkcwAcLlcLmcLncwAcLocLpcLqckPaabaabbikbikbikbikbikbikbikbikbwocvzbxXbxXbwoaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqaabczocHOczqaabaabaabbikaabbikbikaabaabbikbikbikaabbikbikcJbcKjcKjcKkcLscLscLscLtcLucLvcECcLwcLxcLycLzcLAcLBcLCcLDcLDcLEcLFcLGcGOcGOcGOcLHcLIcLJcLKcLLcLMcLNcLOcLPcECcLQcLQcLRcHhcCAcLScLTcLUcLVcLWcDFcLXcLYcLZcMacMbcCKcCKcCKcCKcCKcHBcoDcEhcLbbGybGybYDclUcNEczVczVcOtcDZcQMcRwcyTdbkcYuclUcuscGvczhbGychCcITcoAbikbikckPcMpcxOcxOcwAcMpcxOcxOcwAcMpcxOcxOckPbikaabaabbikbikbikbikbikbikbikbwocLccyJbxXbwobwobwocJNcJNaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagiaabczocMqczqbikczocMqczqbikczocMqczqaabafxaabaabaabaabaabaabbikbikbikbikbikbikaabcJbcMrcMscLscLscLscMtcMucMucMucMucMucMucMucMvcMwcMxcMycMzcMzcMzcMAcMBdcpdcodcvcMzcMBcMDcMEcMFcLMcMGcLOcLPcMHcMIcMJcMKcMLcMMcMNcMOcKNcMPcMQcMRcMScMTcMUcIDcMVcDQcMWcMXcMXcCKcHBcoAcEhbVicozcLdbYDclUcOBczVcQgcPYcySdcydczcyTdcBdcAclUcuscGvbVibGybVibVicoAaabaabckPcNncBZcxOcwAcNncBZcxOcwAcNncBZcxOckPbikbikaabaabbikbikbikbikbikbikbwocvzcyJcLecyJcLfbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxbikaabbikbikbikaabaabaabbikbikaabaabbikafxaabaabaabaabaabbikbikbikbikbikbikbikaabcJbcNocLscLscLscLscLscMubhGcNpcHscNrcNtcMucNucNvcNwcJecGOcGOcNxdcCcNzcNAcNBdcDcNCdcEcECdcFcMFcLMcNFcLOcNGcECcNHcLQcNIcNJcDFcMNcMOcNKcDFcMQcMRcJBcJCcNLcJEcNMcEVcNNcNOcNPcCKcHBcoAcEhbVicLgcLgbYDclUclUdbldcwclUcEZclUclUclUclUclUclUcuscGvbVibGybGycMfcoAbikbikckPcOacxOcxOcwAcOacxOcxOcwAcOacxOcxOckPbikbikbikaabaabbikbikbikbikbikbwocvzcyJbxXbxXbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik -bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGagiafxafxafxafxacGafxafxacGcOcaabbikbikbikbikbikbikbikbikbikbikbikbikcJbcOdcLucLscLscLscOecMucNpcNqcOkcOlcOmcOncOocOpcOqcOrcGOcOsdcKcOucOvcOwcOxcOycOzcOAdcLcNwcJecOCcODcLKcOEcECcOFcLQcOGcOHcDFcMNcMOcKNcDFcOIcMRcJBcOJcOKcKQcOLcDQcOMcMXcMXcCKcHBcoDcEhcMgchCbJGbYDdcxclUclUcMhclUdcHdcGcFcbVicMjcMibGycuscGvbVibGycMkcITcoAbikbikckPckPckPckPckPckPckPckPckPckPckPckPckPbikbikbikbikaabaabbikbikbwobwobwocvzcyJcMmcMlbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdkkdjydjydjydjydjydjydjydjydjydjydkjbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaacbUTcjMcjMbUTcjMcjMbUTbikbikbikbTgbWjbYbbWkbTgbUIbUIbUIbOVcaYcaZcaZcaZbOVbOVbUTcbbcbaccAcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfcbncbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlccicbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNcbOcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbPTcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcckccjcdqcclcfeccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabbikbikbikbikbikbWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbUTccBcqsbUTccBcqsbUTbikbikbikbYcbOTbYgbOTbZxbikaabbikbOVbOVbOVbOVbOVbOVclabUTcuRcsuccCccDbZFccEccFbUVccGccHdmcbYnccJccKccLccMccNccOccPbUZccQccRccSccTccUccUccUccUccVccWccXccYccYccZccZcdacdbcdcbVibPlcddcdecdfcdgcdhbYKcdicbtcdjcdkcdlcdmbSwcdncdocdpcffcdrcdrcdscdrcdrcdrcdtbVAcducdvcdwcdxcdycdzcdAcbPcdBcdCcdDcdEcdFcdCcdGcdHcdCcdIcdJbRBbPTbPTcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebceaceccebcebcebcedceecefcegcehaabbikbikbikbikaabbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaacbikaacbUTcfQcqsbUTcfQcqsbUTbikbikaabaabaabaabaabaabaabaabaabbUTcqscAjcwNbUTcEvcEwbUTcGJbUTbUTcekbUTbUTcelbUVcemcenceocepceqcercescetceucevcewccKcexceycezceAceBceBceBceBceCceDceEceFceGceFceHceIceJceKchvceMceNceOcePceQceRceSceTceUceVceWceXceYceZcfacfbcfccfgbMmbMmcfichOcgHceYchVcfjcfjcfkcfjcflcfmcfncfocbPcfpcfqcfrcfscfrcftcfucfvcdCbPTcfwbPTbPTcfxcfybZnbBxbEXbUAcfzbUAbUAcfAcfBcfCcfDcfEcebcfFcfGcfHcdUcfHcdUcfIcdUcdUbUAcfJcfKcfLcfMaabaabaabaabaabaabaabaabbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcfObXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabdnkaacaabaDDaDDaacbUTbUTcekbUTbUTcekbUTbUTbUTcjMcjMcjMbUTbUTbUTbUTbUTbUTbUTcqschodnmbUTdnnbUTbUTdnobUTcfPbVccqsbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzbMVcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFciOcgJcgJcgKcgLcgMcgNcgOcgPcbPdomcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabbikbikbikbikaabbikbikbikbikbikbikbikbWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaaccjMcqscqscqscqsdoadnxcqscqscuRdnpdnpdowdnpdnpdnpdnpdnpdnpdnpdnpdnpdnpdnpdnpcsubUTchocfQchpbUTcfSchrchrchrchrchrchrbUZbUZbUZbUZbUZbUZbUZchschtchucWpchwchxchychychzchAcglbGybGychBchCchDbGybGybGycqOchFchGceOchHchIchJcgEchKchLchMbSqchLchNcfdcfdcfdcjncjlcjlcjlcjlckacgIbSqclPchPchQchRchSchTchUclQcbPchWchXcfrchYcfrchZciacibciccidciecifbBxcigcfybZncihbEXbFeciicijcikbwobxXbxXbUAcilcimcinciocipciqcirciscitciucivbUAciwciycixcizbikbikbikbikaahbikbikbikbikbikbikbikbikciAbXXbXXbXXbXXbXXbXXbXXciBciCbXZbXZbXZbXZciDbYabWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaacaabaabaaccjMdnrdnqdnscqscqsdoxcqscqsdnobUTbUTbUTbUTbUTbUTcekbUTbUTbUTbUTdntdntdntdntdntdntdntdntdntbUTcfScejbikbikbikbikciEbaTciGciHciIciJciKciLciMciNcmPciPciQciRciSciSciTciUciVciWciWciWciWciXciWbGybGybPlciYciZcjacjbcjccjdchScjecjfcjgcjhcjicjjcjkcjlcfdcnicjpcjpcjpcjpckNclSckUcnjcjqcjrcjscjtcbAcwncjvcbPcjwcjxcjycjzcjAcfrcjBcbPcbPbEXcjCbEXbEXbEXcjDcjEcjFbEXbxXciicjGcjHbwobwobwobUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbikbikbikbikbikaabbikbikbikbikbikbikbikbWhccvccvccvccvccvccvcjIbXZccuccvcjJbXZbXZbXZbXZbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbUTcjKcjKcjKcjKcjKcjKcjLcjKdnodnubUTcqsdoydnwdnycqsdnydnvdnzdnwdntdnAdnAdntdnBdntdnDdnCdntcqscelcjMbikcjNcjOcjPcjQcjRcjScjTcjUcjVcjWcjXcjYcjZcosckbckcckdckeckfckgckhciVckickjckjckjckkciWbGybGycklcklcklcklckmcklckncknckocklcklckpcklckqckrckscktcksclZaPKcmacmmcmlcmocmnckzckAckBckCckDckEckFcdccbPcbPckGcbPckHcbPckIckJckKcgnckLckMckvckOckPckQckRckSckPbxXciickTbxXbxXckVckWckXchabxXbxXbxXbxXbxXbxXbxXckYckZcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbXZbXZbXZbXZbXZbXZcfNbXZcjJbXZbXZbXZbXZbXZbWhbWhaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdnEclbclbclbclbclbclbclccldcleclfclgclhclicjLdnocnRbUTcqsdozdnwcqscqscqsdnvcwNdnwdntdnAdnFdnCdnCdnGdnCdnHdntcljcelcjMbikclkcllclmclnclocjSclpclqclrclsciLcltcgdcoaciPcluchyclvchyclwclxclyclzclAclAclAclBciWbGybGycklclCclDclEclFclGclHclHclIclJclKclLclMclNclOcotcfhcpwcmpcmrcmqctbcsZcuoctcckDclVclWclXckzclYcmtcmscmbcmbcmccmdcmecmfcmgcmhcmfcmfcmfcmicmfcmfcmjcmucnpcnlcqRcoXcrGcqScrHcrHcrIcrHcrHcrHcrHcrJcrKcrHcrHcrHcrMcmvbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcmwcmxcmxcmxcmxcmycmzcmAcmBcmCcmCcmDcjKdnocqscekcqscqscqscqscqscqscqscqscqsdntdntdnCdnIdnCdntdnCdnIdntcmEcfScjMbikclkcmFcmGcmHcmIcmJcmKcmLcmIcmIcmMcmNcmOcpxcmQcmQcmRbHtchycmTcmUclyclAclAclAclAcmVciWbGybGycklcmWcmXcmYcmZcnacnbcnbbzsbvWbulbxBclHcnhcklcqQcfdcrLcjpcwscvxcwEcwCcxNcxIckDcnmcnncnockDbJGcumctecnqcnqcnqcnqcnqcnrcnscntcnucnvcnvcnwcnwcnvcnxcnycnzcnAcnBcnCcnDcnEcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcuncnFcnGcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcaUbWhbWhchlchlbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcnIcnJcnKcnJcnLcnMcnNcnOcnPcnQcjKdnobUTbUTdnJcjMcjMcjMcjMcjMcjMcjMdnKdntdnCdnCdnCdnCdnLdnCdnCdntcnRcelcjMbikclkcnScnTcnUcnVcjScnWcnXcnYcnZciLcltcgdcbkchqcgfcoccodciPciPciPcoecofclAclAcogcohciWbGycoicklcojcokcolcomcomcomconcoocomcomcopclHcoqcorcrNcfdcupcjpcxVcxUcxVcxVcxNcEickDcowcoxcoyckDcozcuscoicoAcoAcoAcoAcoAcoDcoDcoDcoAcoAbikbikbikbikckPcoEcoFcoGcnCcoHcoIcoJcoKcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcnCcuncoWcvtcoYcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcpacpbbWhbZubWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcpccpdcpecpfcmBcpgcphcpicmBcpjcpkdnMchobUTcqscjMbikbikbikbikbikcjMcqsdnldnAdnOdnCdnCdnCdnCdnPdnNcplcpmcjMbikcpncjOcpocjQcppcjScjScpqcprcpscptcpucpvcwqchqcgfcpycpzcpAcpBcpCciVcpDclAclAclAcpEciWbGybGycpFcpFcpGcpHcpIcpIcpIcyFcpJcpJcpJcpKcpFcpGcpMcqQcfdcrLcEjbjVcEYdbndbmcxNclRckDcoucpNcovckDbGycuscoAcoAaabaabbikbikbikbikbikbikbikbikbikbikbikcpRcpScpTcpUcpVcpWcpXcpXcpYcpXcpXcpXcpXcpXcpZcqacqbcqccqdbwocvvbXSbwobwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWhcqhcqicqjbWhbWhbXZbXZcqkbXZbXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcnHcqlcnJcqmcnJcqncqocqpcqqcnNcqrcjKdoAcwNbUTcfQcejbikbikbikbikbikcejdnRdntdnSdnSdnAdnUdnTdnCdnVdntcqscelcejbikbikbikbikciEcqtcqucqvcqvciLcqwciLcqxcgdcbkcqycqzcqAcqBcqCcqCcqCcqDcqEclAcqFclAcqGciWbGybGycpFcqHcqIcqJcqKcqLcqMcpFcqLcqMcqKcqNdehcqPcpMczecyWczgcEjdbpdbodbrdbqdbsctcckDcpOcpPcpQckDbGycuscoAcvyaabaabaabbikbikbikbikbikbikbikbikbikbikcpRcqUcqVcqWcqXcqYcqZcracrbcpXcpXcrccpXcpXcpZcqbcqbcqbcrdbwocvzbxXbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfcrhcribZvbWgbWhbWhbXZbYabXZbWhbWhaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcjKcjKcjKcjKcjKcjKdnWcrjcrjcrjcrjcrjdnQcrjcrjcrjcrjcrjcrjcrjcrjcrkcrkcrkcrkcrkdnYdnYdnYdnYdnYdnYdnYcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcrocrpcrqcrrcrscrtcrucrvcrwcrxcrycrzcrAciWbGybGycpFcrBcrCcqJcqKcqKcrDcpFcrEcqKcqKcqNcqKcrFcpMbGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpbikaabaabaabbikbikbikbikbikbikbikbikbikcpRczNczPcoBcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaSecsdctvdnZctvdoBcsdcsecsfcsgcsgcshcsicspcskcslcsmcsncsocsrcsqcsqcsscsqcstctzctzctAcsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcsEcsFcsGcgfcsHcmQcsIcsJcsKcsLcsMcsNcsObGybGycpFcsPcsQcsRcsScsTcsUcpFcsVcsTcsWcsXdlFcsYcwrbikbikbikcEjdbAdbzdbAdbAdbCdbBdbEdbDdbycwFbVibGycuscoDcwpbikbikaabaabaabbikbikbikbikbikbikbikbikctdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabaabaabbikbikbikbikaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSecsdctvctvctvdoBcsdctuctvctwctvctxctyctDctCdmedcYdmedmfcxnctEctFctEctEctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXciFctZcuacnqcubcuccudcuecufcugcuhcuicpFcujcqKcugcukcqKculcwrbikbikbikdbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpbikbikbikaabaabaabbikbikbikbikbikbikbikckPcurczQcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSedobctvdocctvdoBcuBdodcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQdoeceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKcvocpFcvpcqKcqKcqNcqKcyGcwrbikbikbikdbFdbRdbQdbTdbSdbVdbUdbXdbWdbybGychCcyHcuscoAbikbikbikbikbikaabckPckPckPckPckPckPckPckPckPcvucxScvwckPcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdogdofcrjcrjcrjcrjdnQcrjcrjcrjcrjdnXcrjcvFcvGcvGcvHctBdlXcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhcwicwjcwkcpFcwlcwjcwmcqNcqKcwocpMbikbikbikdbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAbikbikbikbikbikbikckPcwtcwucwvcwwcwxcwycwzcwAcwBczScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGacGafxafxacGafxafxaabagiaabaqZbikaqZaqZdoidoCdojdojdojdoldokcrjcwOcwPcwQcwRcwScwTcwUcwVcwWcvOcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrcwecpMcpMcxBcpMcpMcxCcxDcxEcxEcxEcxFcxEcyUcpMbikbikbikdbFdbFdbFdbFdbFdbydcedcgdcfdbybGybGyczhcuscoAbikbikbikbikbikbikckPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTckPcxOcxOcMpckPaabbikcwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikaabaabbikaabaabbikbikaabaabaabaabaabdoidoidohdoidoidoncEBcrjcrjcrjcrjcrjcrjcrjcrjcybcwWcvOcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcmScxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTcALceJcAhbGycAMcoAcoAcoAcoAcoAbikbikbikbikdcidchdckdcjdbydclbVibVicuscoAcoAcoAcoAcoAbikbikckPcxOcxOcxOcyZczaczbczcczdcAicAOcAvckPcAVcAYcAWckPbikbikcwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdoDbikacGbikczoczpczqbikczoczpczqbikczoczpczqbikbikdoidoocfRdopdoidoqcGKdojdojdojdojdojdojdojdojdojcEycvOcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcoacyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBccBPcBNcBNcBNcBNcBNcBQcoAbikbikbikbikdcidchdckdcmcTabGyckObVicusbGybGybGycgmcoAbikbikckPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbckPcCGcCYcCIckPbikbikcwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikczocAkczqbikczocAkczqbikczocAkczqbikaqZdoicfRcfRcfRdoidoidorczsdoidoiczsczsdoidoiczsczscwWcvOcztcAlcxjcAmcAncAocAocyjcxjcztcApcxjcxjcxjcxjcAqcArcAscAtbZNcAucAPcAwcAxcAycxsczBdlYcAAcxscABctWcsOcACcsLcADcAEcAFcAGcAHcAIcAJcAGcAKcAGcAGcAGcoAcoAcoAcoAcoAcoAcoAcoAcEhcoAbikbikbikbikdcicBTdcqcBUdbycgmcFdbVicFmcFlcFlcFnbGycoAbikbikckPcwtcwucwvcAQcARczbcAScATcAUcFrcIScAXcGscIScGtckPbikbikcwGcwGcBbcCrcBdcwGcwGbwobxXcGycyJcyJcyJbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikaqZaabczocAkczqbikczocAkczqaabczocAkczqbikaabdoidondosdoqdoibikaabbikbikbikbikbikaabbikbikczscwWcvKcBecxjcBfcBgcBhcBicBjcBicBkcBicBlcBmcxfcBncztcztczxcBocBpcBqcBrcBscBtcBucBvcBwcBxcBycBzcBAcBBcBCcBDcBDcBEcBFcBGcBHcBIcBJcBKcBLcBMcrecBOcHucHtcDPcDPcDPcDPcDPcDPcHvcoAcEhclUclUclUclUclUclUcjmbEJcjmcFfclUclUcoAcoAcoAcoAcusbGycoAbikbikckPcxOcBZcxOcCacxRcqUcCbcCccCdcCecqUcqUcCgcqUcChckPbikaabaabcwGcwGcCscwGcwGbikbwobxXcvzcyJcHycHxbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikczocAkczqaabczocAkczqbikczocAkczqaabbikdoidoiczsdoidoibikaabaabbikaabbikaabaabbikbikcybcCicvKcCjcCkcCkcClcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcCmcCncCmcCocCmcrmcCpcCqcFbcCtcCtcCtcCucCvcBCcCwcCxcCycCzcCAcCBcBIcCCcCDcCEcCFcHzcCHcHAcCJaabcCKcCKcCKcCKcCKcHBcoAcHDcHCcIGcHHcIHctackycjocBWckuckycBXcCPcBYcCRcCQcoAcusbGycoAbikbikckPcxOcxOcxOcAQcCTczbcCUcCVcCWcCXcCZcCZcDacqUcDbckPaabaabbikbikbikcIKbikbikbikbwobxXcvzcyJbxXbxXbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxaqZbikczocAkczqaabczocAkczqbikczocAkczqaabbikbikbikbikbikbikbikbikbikaabcDccDdcDdcDdcDdcybcDecwWcDfcDgcDhcDhcDicDjcDkcDlcDlcDlcDlcDmdotcDocDncDncDpcDpcDncDqcDrcDscDtcDtctYcDvcDwcDxcDycDzcDzcDAcDBcDCcDDcDEcDFcCAcDGcBIcDHcDIcDJcDKcILcDMcIMcDOcDPcDQcDRcDScDTcCKcHBcoDcEhclUcvscvqcIOcINcxLckxckwdcrclUcCSczVcuqczVcDUcoAcusbGycoAcoAbikckPcwAcwAcwAcwAcEkcqUcCbdlZcEmcCecqUcEncEocEocEpcEqcXYaabbikbikbikbikbikbikbikbwobxXcGybxXbxXcIPbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcEraabaabaabcEraabbikaabcEraabbikbikbikbikbikbikbikbikbikcDccDccDccEscEtcEucDddoucExcEycDfcDfcEzcEAcvKcvKcEBcECcECcECcECcEDcEEcEFcEEcEEcEEcDtcDtcEGcEHcEIcEJcEKcDzcELcDwcDzcDzcDzcDzcEMcBCcENcEOcCycDFcCAcDFcBIcDHcDIcEPcEQcERcEScETcEUaabcEVcEWcDTcEXcCKcHBcoDcHDcHCcxKcxJczVcxMclUcIIcDVdcsclUcDWcDYczVcEbcEaclUcusbGycITcoAbikckPcwtcwucwvcFjcARczbcFkcJIcGCcJKcJKcFocFpcFqcJLckPaabaabaabbikbikbikbikbikbikbwocJMcvzbwobwobwobwobwoaabaabaabcJNcJNcJNcJNcJNcJNaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabcFscFtcFtcFucFvcFwcFwcFwcFvcFwcFwcFwcFvcFwcFwcFwcFxcFtcFtcFtcFtcFtcFycFzcFAcFBcFCcFDcFEcFFcFGcfRcwWcFHcDfcvKcvKcvKcFIcEBcECcFJcFKcFLcyrcFNcDucFPcFOcFQcFScFTcSpcFVcFWcFXcFScFYcFZcDwcGacDzcDzcDzcGbcBCcGccGccDFcGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncDOcGocDQcGpcDTcDTcCKcHBcoDcEhclUcyMcyLcyNcFfclUcnkclTcFfclUcyQcyScyRcyTcyTclUcusbGycJOcoAbikckPcxOcxPcxOcGAcxRcqUcGBcJPcJJcqUdlWcGDcwAcwAcwAckPbikbikaabaabbikbikbikbikbikbwocyKcvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabaabcGFaabbikaabcGFaabbikaabcGFaabbikbikbikbikbikbikbikbikbikcDccDccDccGGcGHcFMcDddovcfRcGKcExcExcExcExcGLcExcFGcECcGMcGNcGOcGPcGQcGRcGScGTcGUcGVcGWcGXcGYcGZcHacHbcFYcELcDwcHccHdcDzcDzcHecBCcHfcHgcDFcHhcCAcHicHjcHkcHlcHmcHncHocHpcHocHqaabcCKcCKcCKcCKcCKcHBcoAcEhclUcIJcyVcyYcyXcEecEccEgcEfcHwcGucHZczVcIRcIQclUcusbGycJRcoAbikckPcxOcxOcxOcFjcHEcHFcHGcJScHIcCZcCZcCZcHJcHKcHLcHMbikbikbikaabaabbikbikbikbikbwobwocvzbwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikbikaabaabcDccDdcDdcDdcDdcHPcHQcHRcfRcHScfRcfRcEBcHTcfRcECcHUcHVcGOcHWcFNcHXcHYcIacIacIbcIccIdcIedmabRFcIbcIhcIicIjcIkcIlcImcIncIocIpcIqcGfcIrcIscItcIucIvcIwcIxcIycIzcIAcIBcICcIDcDPcDQcIEcIFcIFcCKcHBcoAcEhclUclUclUclUclUcJhcANcBRcJQcMccBScMecMdcMCcBVclUcuscGqcGrcGrcGrcJTcJTcJTcJTcJTcJUcKTcKbcKUcIUczbcIVczbcIWczbcIXcHMbikbikbikbikaabaabbikbikbikbikbwocvzbwoaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikczocHOczqaabczocHOczqbikczocHOczqbikbikbikbikaabbikbikbikbikaabaabaabbikbikaabaabcJbcJbcJbcJbcJbcJbcJbcJccJbcJbcECcJdcJecGOcHWcFNcJfcFNcFNcJgcDtcJicJjcFWcJkcFRcDtcJmcDzcDwcJncJocJpcIncJqcJrcJscJtcJucJvcJwcJtcJxcJycJzcJAcDFcJBcJCcJDcJEaabcEVcJFcJGcJHcCKcHBcoDcKWcKVcKVcKVcKXclUcFacyLcCLcFecyScCMcyTcyTcyScCNclUcuscGvbVibGycKYcKZcoAbikbikckPcJVcJWcJXcJYcJVcJWcJZcKacJVcJWcLackPaabaabaabaabaabaabaabaabaabaabbwocvzbwobwobwobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdjcbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqbikczocHOczqaabbikbikbikbikbikbikbikbikaabaabbikbikaabaabaabcJbcKjcKjcKkcGIcKmcKmcKncKocKocKpcKqcKrcGOcHWcGOcKscGOcGOcGOcDtcKtcKucKvcKwcKxcKycKzcKAcKBcKCcKCcKCcKDcKEcKFcKGcKHcKIcHhcCAcKJcKKcKLcKMcKNcDFcJBcKOcKPcKQcKRcDQcKScIFcIFcCKcHBcoDcEhbVibVibVibYDclUcFgcCOcDXcNDcyScPocPMcyTcPVcPQclUcuscGvbVibGycyHbGycoAbikbikckPcLicLjcLkcwAcLlcLmcLncwAcLocLpcLqckPaabaabbikbikbikbikbikbikbikbikbwocvzbxXbxXbwoaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxaabczocHOczqbikczocHOczqaabczocHOczqaabaabaabaabbikaabbikbikaabaabbikbikbikaabbikbikcJbcKjcKjcKkcLscLscLscLtcLucLvcECcLwcLxcLycLzcLAcLBcLCcLDcLDcLEcLFcLGcGOcGOcGOcLHcLIcLJcLKcLLcLMcLNcLOcLPcECcLQcLQcLRcHhcCAcLScLTcLUcLVcLWcDFcLXcLYcLZcMacMbcCKcCKcCKcCKcCKcHBcoDcEhcLbbGybGybYDclUcNEczVczVcOtcDZcQMcRwcyTdbkcYuclUcuscGvczhbGychCcITcoAbikbikckPcMpcxOcxOcwAcMpcxOcxOcwAcMpcxOcxOckPbikaabaabbikbikbikbikbikbikbikbwocLccyJbxXbwobwobwocJNcJNaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagiaabczocMqczqbikczocMqczqbikczocMqczqaabafxaabaabaabaabaabaabaabbikbikbikbikbikbikaabcJbcMrcMscLscLscLscMtcMucMucMucMucMucMucMucMvcMwcMxcMycMzcMzcMzcMAcMBdcpdcodcvcMzcMBcMDcMEcMFcLMcMGcLOcLPcMHcMIcMJcMKcMLcMMcMNcMOcKNcMPcMQcMRcMScMTcMUcIDcMVcDQcMWcMXcMXcCKcHBcoAcEhbVicozcLdbYDclUcOBczVcQgcPYcySdcydczcyTdcBdcAclUcuscGvbVibGybVibVicoAaabaabckPcNncBZcxOcwAcNncBZcxOcwAcNncBZcxOckPbikbikaabaabbikbikbikbikbikbikbwocvzcyJcLecyJcLfbwoaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikafxbikaabbikbikbikaabaabaabbikbikaabaabbikafxaabaabaabaabaabaabbikbikbikbikbikbikbikaabcJbcNocLscLscLscLscLscMubhGcNpcHscNrcNtcMucNucNvcNwcJecGOcGOcNxdcCcNzcNAcNBdcDcNCdcEcECdcFcMFcLMcNFcLOcNGcECcNHcLQcNIcNJcDFcMNcMOcNKcDFcMQcMRcJBcJCcNLcJEcNMcEVcNNcNOcNPcCKcHBcoAcEhbVicLgcLgbYDclUclUdbldcwclUcEZclUclUclUclUclUclUcuscGvbVibGybGycMfcoAbikbikckPcOacxOcxOcwAcOacxOcxOcwAcOacxOcxOckPbikbikbikaabaabbikbikbikbikbikbwocvzcyJbxXbxXbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik +bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGagiafxafxafxafxacGafxafxacGcOcbikaabbikbikbikbikbikbikbikbikbikbikbikbikcJbcOdcLucLscLscLscOecMucNpcNqcOkcOlcOmcOncOocOpcOqcOrcGOcOsdcKcOucOvcOwcOxcOycOzcOAdcLcNwcJecOCcODcLKcOEcECcOFcLQcOGcOHcDFcMNcMOcKNcDFcOIcMRcJBcOJcOKcKQcOLcDQcOMcMXcMXcCKcHBcoDcEhcMgchCbJGbYDdcxclUclUcMhclUdcHdcGcFcbVicMjcMibGycuscGvbVibGycMkcITcoAbikbikckPckPckPckPckPckPckPckPckPckPckPckPckPbikbikbikbikaabaabbikbikbwobwobwocvzcyJcMmcMlbxXcxHbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabcJbcJbcJbdeBcOXcOXcOXcMucOYcOZcPacPacPbcPccMzcPdcPecPfcPgcPhdcMcPicPjcPkcPlcPmcPncPidcNcPpcPqcPrcPscPtcPucPvcNHcLQcPwcPxcDFcMNcDFcPycDFcMQcMRcJBcJCcPzcJEcNMcCKcCKcCKcCKcCKcHBcoDcMncKXchCcITcMYcMocMocMocMZbVidcJdcIcFhbVicNacKVcKVcNbcHrczhbGybGycoAcoAbikbikcONaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikaabaabbikbwocyKcNccNdcyJcNfcNebxXcxHbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabcPEcLscLscOXaabaabcMucPHcPIcPacPacPJcMucPKcPLdcOcPNcPOcPPdcPcECcPRcPScPTcGOcPUcECdcQcPWcPXcPNcPNdcRcPZcECcQacLQcQbcQccDFcMNcDFcLScLTcQdcQecMScQfdcScIDcQhcDQcQicQjcQjcCKcHBcoDcNhcNgbVibVicEhbVibVibGycNibVibVicGwbVibVicNkcNjcNmcNlcNQcoAcoAcoAcoAbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikbikaabaabbwocNRcunbOMcyJcyJcyJbxXbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikaabaabcPEcLscLscOXaabbikcMucQscPIcPacPacQtcMucQucQvcECcQwcQxcQxdcTcECcQycQzcQAcQBdcUcECcQxcQxcQxcQwcECcQCcQucECcNHcLQcJlcQEcQFcQGcQHcQIcQJcQKcIAcQLcJCdcVcJEcNMcEVcQNcQOcQPcCKcHBcoAcoAcEhcdbcNScEhcNTbVibGycNVcNUcNXcNWcMocMocNYcGvbVicNZcoAcoAbikbikaabbikbikbikbikaabbikbikbikbikaabbikbikbikbikbikaabbikbikbikbikbikbwobwobwobwobwocOObOMcyJcOQcOPbxXbwoaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 366fa34f260..41715794c29 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -160,7 +160,7 @@ "dd" = (/obj/structure/rack,/obj/item/weapon/kitchen/knife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) "de" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/kitchen/knife/combat,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine,/area/shuttle/gamma/space) "df" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/shard,/obj/item/weapon/kitchen/knife,/obj/item/weapon/storage/firstaid/tactical,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin) -"dg" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/red,/obj/item/clothing/head/helmet/knight/red,/obj/item/weapon/holo/claymore/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_knightarena) +"dg" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/red,/obj/item/clothing/head/helmet/riot/knight/red,/obj/item/weapon/holo/claymore/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_knightarena) "dh" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_knightarena) "di" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/source_knightarena) "dj" = (/turf/simulated/floor/holofloor,/area/holodeck/source_knightarena) @@ -181,7 +181,7 @@ "dy" = (/obj/structure/holowindow{dir = 1},/turf/simulated/floor/holofloor{dir = 4; icon_state = "blue"},/area/holodeck/source_knightarena) "dz" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "blue"},/area/holodeck/source_knightarena) "dA" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "blue"},/area/holodeck/source_knightarena) -"dB" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/blue,/obj/item/clothing/head/helmet/knight/blue,/obj/item/weapon/holo/claymore/blue,/turf/simulated/floor/holofloor{dir = 2; icon_state = "blue"},/area/holodeck/source_knightarena) +"dB" = (/obj/structure/table/holotable,/obj/item/clothing/suit/armor/riot/knight/blue,/obj/item/clothing/head/helmet/riot/knight/blue,/obj/item/weapon/holo/claymore/blue,/turf/simulated/floor/holofloor{dir = 2; icon_state = "blue"},/area/holodeck/source_knightarena) "dC" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 10; icon_state = "blue"},/area/holodeck/source_knightarena) "dD" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 6; icon_state = "blue"},/area/holodeck/source_knightarena) "dE" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/sleeping_carp_scroll,/obj/item/weapon/twohanded/bostaff,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena_source) @@ -309,7 +309,7 @@ "fW" = (/obj/structure/holowindow,/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/source_thunderdomecourt) "fX" = (/turf/space,/turf/unsimulated/wall{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "diagonalWall3"},/area/centcom/control) "fY" = (/obj/structure/urinal{pixel_y = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) -"fZ" = (/obj/item/weapon/mop,/obj/structure/mirror{pixel_x = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) +"fZ" = (/obj/item/device/radio/intercom/syndicate{pixel_x = 0; pixel_y = 25},/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "ga" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "gb" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) "gc" = (/obj/structure/table,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja/holding) @@ -628,6 +628,10 @@ "md" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable,/turf/simulated/floor/plasteel,/area/shuttle/gamma/space) "me" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station) "mf" = (/obj/structure/stool,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) +"mg" = (/obj/item/weapon/mop,/obj/structure/mirror{pixel_x = 28},/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) +"mh" = (/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) +"mi" = (/obj/machinery/door_control{id = "nukeop_ready"; name = "Mission Launch Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "151"},/obj/item/weapon/twohanded/required/kirbyplants,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) +"mj" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/obj/effect/landmark{name = "ERT Director"},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/specops) "mk" = (/obj/structure/stool,/obj/effect/landmark{name = "Syndicate-Spawn"},/obj/effect/decal/warning_stripes/east,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "ml" = (/obj/structure/stool,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/syndicate_mothership) "mm" = (/obj/structure/stool,/obj/structure/sign/poster/legit{pixel_y = 32},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/control) @@ -636,6 +640,7 @@ "mp" = (/obj/structure/stool,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control) "mq" = (/obj/structure/stool,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/evac) "mr" = (/turf/unsimulated/wall,/area/trader_station/sol) +"ms" = (/obj/machinery/teleport/hub/upgraded{admin_usage = 1},/turf/unsimulated/floor{tag = "icon-delivery"; icon_state = "delivery"},/area/admin) "mt" = (/turf/space,/area/syndicate_mothership/elite_squad) "mu" = (/obj/effect/landmark{name = "Syndicate-Commando"; tag = "Commando"},/obj/machinery/light/spot,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad) "mv" = (/obj/machinery/light/spot,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) @@ -689,7 +694,6 @@ "oI" = (/obj/machinery/washing_machine,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "oJ" = (/obj/structure/table,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/storage/fancy/crayons,/obj/machinery/light{dir = 1; on = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "oO" = (/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) -"oP" = (/obj/item/device/radio/intercom/syndicate{pixel_x = 0; pixel_y = 25},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "oQ" = (/obj/machinery/vending/syndisnack,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "oR" = (/obj/machinery/vending/syndicigs,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pa" = (/obj/structure/noticeboard{pixel_x = -32},/obj/item/weapon/paper/syndimemo,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) @@ -708,7 +712,6 @@ "pA" = (/obj/machinery/light,/turf/unsimulated/floor{icon_state = "floor"},/area/syndicate_mothership) "pC" = (/obj/machinery/door/poddoor{id_tag = "nukeop_ready"; name = "Shuttle Dock Door"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "pF" = (/turf/unsimulated/wall/fakeglass,/area/syndicate_mothership) -"pH" = (/obj/machinery/door_control{id = "nukeop_ready"; name = "Mission Launch Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "151"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pR" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership) "pS" = (/obj/structure/table/woodentable,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership) "pT" = (/obj/structure/table/woodentable,/obj/item/device/syndicatedetonator,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership) @@ -933,7 +936,6 @@ "vJ" = (/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "vL" = (/obj/item/device/radio/intercom/specops{pixel_y = -28},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "vM" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "SPECOPS"; name = "Ready Room"; pixel_y = 16; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "ASSAULT"; name = "Assault Armor"; pixel_y = -4; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "specopsoffice"; name = "Privacy Shutters"; pixel_y = 6; req_access_txt = "114"},/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops) -"vN" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/specops) "vO" = (/obj/machinery/computer/artillerycontrol{luminosity = 255},/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/centcom/specops) "vP" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/specops) "vQ" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/control) @@ -1354,7 +1356,6 @@ "IF" = (/obj/structure/table,/obj/item/clothing/gloves/color/yellow,/obj/random/bomb_supply,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "IG" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "IH" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) -"II" = (/obj/machinery/teleport/hub/upgraded,/turf/unsimulated/floor{tag = "icon-delivery"; icon_state = "delivery"},/area/admin) "IJ" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "IK" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/shield/energy,/obj/machinery/recharger/wallcharger{pixel_x = 3; pixel_y = -30},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) "IL" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/shield/energy,/obj/machinery/recharger/wallcharger{pixel_x = 3; pixel_y = -30},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena) @@ -1426,12 +1427,12 @@ aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckck aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaiaNaNaNaNaNaNaNaiacabababababajagagakagakababafabnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNnlnmataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalabababacamnjnjoBoCnjnjanagagagnjaNaNaNaNaNaNaNaNaNaNaNaNaNaNnlmEataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalabababaonjnjoHoIoIoJnjnjnjnjnjnjnjnjaNaNaNaNaNaNaNaNaNaNaNaNnlmEataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalababadaonjaLoOoOoOoOoPoQoRnjfYjMfZnjaNaNaNaNaNaNaNaNaNaNaNaNnlmEataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaNaNaNaNaNaNaNaNaNalababadaonjaLoOoOoOoOfZoQoRnjfYjMmgnjaNaNaNaNaNaNaNaNaNaNaNaNnlmEataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababaiaNaNaNaNaNaNaNaiababababaSnjpaoOmfmfpcoOpdpepWpXpXganjnjnjnjnjnjnjnjnjnjnjnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababaNaNaNaNaNaTagagababaUamnjplmfpmjNmfoOmkppnjpXggnjnjghgjgigxgxhggxgxhxhGnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababaNaNaNaNaNpupvpvpvpvpvoCnjoOmfpwpxmfoOmkppnjnjnjnjnjgjgiiuiwiviFiviHiGhxnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjabababababababaNaNaNaNaNpupvpvpvpvpvoCnjmhmfpwpxmfoOmkppnjnjnjnjnjgjgiiuiwiviFiviHiGhxnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaiaNaNaNaNaNaNaNaNaNpypzpApzpzpzpzpCoOJboOoOoOoOmkppnjnjnjnjnjgjiIiwiviJiSiKiviHiTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNpFaVoBpvpvpvoCnjpHmfmfmfoOoOmkppoBpvpvpvpvpvpviviJiSiUiSiKiviTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNpFaVoBpvpvpvoCnjmimfmfmfmhoOmkppoBpvpvpvpvpvpviviJiSiUiSiKiviTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNaNaWaNaiababaXnjpRpSpTpSjOoOpUpViWiViViXiViViWiFiSiYjjjiiSiFiTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjaYabaNaNaNaNaNaNaNaNaNaNaNaNaNaNaZabaonjqfqgqhqiqjoOoOoOoBpvpvpvpvpvpviviJiSjkiSiSiviTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckckaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnjababaNaNaNaNaNaNaNaNaNaNaNaNaNaNalabaonjnjppqtqrqunjqwoOnjnjnjnjnjgjiIjsiviJiSiKivjtiTnjaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNataNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -1514,7 +1515,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXuWsXsXujuXuRuYuZvavbujvcvdvdvdvdvesXuosXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvjvkvlsXujujvauRvmuRujujvnvdvovpvqvdsXsXsXvrtTtUsqtQtRtZsqsqvsvtvuvvvwsqsqtQtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvkvkvkvxujujujvyvyujujujvzvdvAvBvCbesXvEtTuEtRtRvFtRtRtZsqsqsusususususqsqtQtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXvGvHsXvIvJujujujujvLujsXvdvMvNvOvPsXvQtRtRtRtZsutQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXvGvHsXvIvJujujujujvLujsXvdvMmjvOvPsXvQtRtRtRtZsutQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXbfbfsXsXsXvSvTvUvVvdsXvWtRtRtRvXsutQtRtRtRtRtRtRtRtRtRtRtRtRtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwbwcwdwbwesXiDwgwhwiwjsXwkudududwlsuwmudududududuetRucudududududwnsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNwrwswtwrwesXsXsXsXsXsXsXsqsqsqsqsqsqsqsqsqsqsqsqsqwusqsqsqsqsqsqsqsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN @@ -1617,7 +1618,7 @@ aNaNaNaNHjIiIjIkIrIkIrIkIlImjcjcjcjcjcjcjcjcjcjcjcjcjcInIlIoIsIoIsIoIjIpHjaNaNaN aNaNaNaNHjIiIjIkIkIvIkIkIlImjcjcjcjcjcIwIxIwjcjcjcjcjcInIlIoIoIyIoIoIjIpHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkQkRkxkxkxkAkSaNkQkRkxkxkxkAkSaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIDKDKDKDKlKDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNHjIiIjIkIrIkIrIkIlImjcjcjcjcjcIwIzIwjcjcjcjcjcInIlIoIsIoIsIoIjIpHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkUlikVlkljlmllaNkUlikVlkljlmllaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNIADKDKDKIBDNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNHjIiIjIkIkIkIkIkIlImjcjcjcjcjcjcjcjcjcjcjcjcjcInIlIoIoIoIoIoIjIpHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlylnlAlzlFaNaNaNlylnlAlzlFaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEfICDKDKDKIDEfaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNHjHjHjIEIEIEIEIEjajbjcjcjcjcjcjcjcjcjcjcjcjcjcjbjaIEIEIEIEIEHjHjHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwIFIGIHIIIJDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNHjHjHjIEIEIEIEIEjajbjcjcjcjcjcjcjcjcjcjcjcjcjcjbjaIEIEIEIEIEHjHjHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwIFIGIHmsIJDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNHjIKIKIKIKIKHjIdIeIeIeIeIeIeIeIeIeIeIeIeIeIfHjILILILILILHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMDwDxDyDzDwEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNHjHjHjHjHjHjHjIMINININININIOIPIQINININININIMHjHjHjHjHjHjHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEMaNaNaNEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNHjIMIMIMIRIMISISISISISIMIRIMIMIMHjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm index 04b1791e6c3..0738ff80065 100644 --- a/_maps/map_files/cyberiad/z3.dmm +++ b/_maps/map_files/cyberiad/z3.dmm @@ -2,6 +2,8 @@ "ab" = (/obj/item/trash/cheesie,/turf/space,/area/space) "ac" = (/obj/docking_port/stationary{dir = 8; dwidth = 10; height = 35; id = "whiteship_away"; name = "Deep Space"; width = 21},/turf/space,/area/space) "ad" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_z3"; name = "south of telecomms"; width = 18},/turf/space,/area/space) +"ae" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1381; master_tag = "telecoms_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "61"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) +"af" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1381; master_tag = "telecoms_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "61"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/tcommsat/powercontrol) "aT" = (/obj/structure/lattice,/turf/space,/area/space) "ba" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/space) "bb" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/space) @@ -289,7 +291,6 @@ "hq" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1381; id_tag = "telecoms_pump"},/obj/machinery/light/small{dir = 8},/obj/structure/sign/vacuum{pixel_x = 0; pixel_y = 32},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) "hr" = (/obj/machinery/camera/xray{c_tag = "Telecomms Airlock"; network = list("Telecomms")},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) "hs" = (/obj/machinery/door/airlock/external{frequency = 1381; icon_state = "door_locked"; id_tag = "telecoms_inner"; locked = 1; name = "External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) -"ht" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1381; master_tag = "telecoms_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) "hu" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) "hv" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) "hw" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/camera{c_tag = "Telecomms Foyer"; dir = 2; network = list("Telecomms")},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) @@ -319,7 +320,6 @@ "hU" = (/turf/simulated/floor/plasteel,/area/tcommsat/entrance) "hV" = (/obj/structure/closet/malf/suits,/turf/simulated/floor/plasteel,/area/tcommsat/entrance) "hW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless,/area/tcommsat/powercontrol) -"hX" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1381; master_tag = "telecoms_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "13"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/tcommsat/powercontrol) "hY" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless,/area/tcommsat/powercontrol) "hZ" = (/obj/machinery/light{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) "ia" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) @@ -515,10 +515,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcncncpcsctctctctctcpgPhchdhehfhghdhhhdhigPcpctctctctctcscpcncncraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoclcncncpcpcpcpcpcpcpgPgPgPgPhjhkhlgPgPgPgPcpcpcpcpcpcpcpcncncicmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoclhmhmhmhmhmhmhmhmhmhmgPgPhnhohpgPcncncncncncncncncncncncicmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrhmhqhrhshthuhvhwhxhmgPgPhyhzhAgPgPbWcicjcjcjcjcjcjcjcjcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrhmhqhrhsaehuhvhwhxhmgPgPhyhzhAgPgPbWcicjcjcjcjcjcjcjcjcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahBhmhChDhmhEhFhFhFhGhmgPhHhIhJhdhKgPgPcrbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahBhmhLhmhmhMhNhOhNhPhmhQhRhShThUhUhVgPcraTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdhWhXhYhmhZiaiaiaibicidieifighUhUihgPcraTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdhWafhYhmhZiaiaiaibicidieifighUhUihgPcraTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiiiichiihmijikhFiliminioiphUhUhUhUhVgPcrbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiiiichiihmhmhmhmhmhmhmgPiqiriririsgPgPcrbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaitceiuceivcjcjcjcjcjclgPgPiwixiygPgPcicmbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm index e0701e70cb1..b980f8a7098 100644 --- a/_maps/map_files/cyberiad/z4.dmm +++ b/_maps/map_files/cyberiad/z4.dmm @@ -140,7 +140,7 @@ "cJ" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating/airless,/area/constructionsite/ai) "cK" = (/obj/structure/table,/obj/item/weapon/lighter/random,/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich,/obj/item/clothing/head/chefhat,/obj/item/weapon/storage/box/donkpockets,/obj/structure/sign/fire{pixel_y = 32},/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/engiestation) "cL" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/engiestation) -"cM" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/engiestation) +"cM" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/light{dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/engiestation) "cN" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/structure/sign/singulo{pixel_y = 32},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/engiestation) "cO" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/meatballsoup,/turf/simulated/floor/plasteel{dir = 5; icon_state = "blue"},/area/engiestation) "cP" = (/obj/machinery/pipedispenser/disposal,/turf/simulated/floor/plasteel,/area/engiestation) @@ -186,7 +186,7 @@ "dD" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 10},/area/engiestation) "dE" = (/obj/machinery/light,/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/engiestation) "dF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/engiestation) -"dG" = (/obj/machinery/light_switch{pixel_y = -28},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/engiestation) +"dG" = (/obj/machinery/light_switch{pixel_y = -28},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/engiestation) "dH" = (/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/engiestation) "dI" = (/obj/machinery/door/airlock/glass{name = "Kitchen"},/turf/simulated/floor/plasteel,/area/engiestation) "dJ" = (/obj/machinery/door/airlock/glass{name = "Cabin"},/turf/simulated/floor/plasteel{icon_state = "wood"},/area/engiestation) @@ -196,14 +196,14 @@ "dN" = (/obj/machinery/door/airlock{name = "Restroom"; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/engiestation) "dO" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engiestation) "dP" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel,/area/engiestation) -"dQ" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "wood"},/area/engiestation) +"dQ" = (/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "wood"},/area/engiestation) "dR" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/engiestation) "dS" = (/obj/structure/table,/obj/item/toy/minimeteor,/obj/item/toy/carpplushie,/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/engiestation) "dT" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/engiestation) "dU" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engiestation) "dV" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engiestation) "dW" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engiestation) -"dX" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engiestation) +"dX" = (/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engiestation) "dY" = (/obj/structure/closet/firecloset,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engiestation) "dZ" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/wall,/area/constructionsite/hallway/aft) "ea" = (/obj/machinery/door/airlock/highsecurity{icon_state = "door_closed"; locked = 0; name = "AI Upload Access"; req_access_txt = "16"},/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/aft) diff --git a/_maps/map_files/cyberiad/z5.dmm b/_maps/map_files/cyberiad/z5.dmm index 8d593d21011..131fe41aea3 100644 --- a/_maps/map_files/cyberiad/z5.dmm +++ b/_maps/map_files/cyberiad/z5.dmm @@ -349,8 +349,8 @@ "gK" = (/obj/machinery/light{dir = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/research_outpost/anomaly) "gL" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/research_outpost/anomaly) "gM" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/color/latex,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/research_outpost/anomaly) -"gN" = (/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) -"gO" = (/obj/machinery/door/window/westleft{dir = 4; name = "Monkey Pen"; req_access_txt = "47"},/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) +"gN" = (/obj/machinery/door/window/westleft{dir = 4; name = "Monkey Pen"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) +"gO" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) "gP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "gQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/power/apc{dir = 4; name = "Outpost Hallways APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "gR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/research_outpost/power) @@ -379,14 +379,15 @@ "ho" = (/obj/machinery/door/window/westleft{dir = 8; name = "Locker room"; opacity = 0; req_access_txt = "65"},/turf/simulated/floor/plasteel,/area/research_outpost/anomaly) "hp" = (/turf/simulated/floor/plasteel,/area/research_outpost/anomaly) "hq" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/color/latex,/obj/machinery/camera{c_tag = "Research Outpost Anomaly Lab Storage"; dir = 8; network = list("Research Outpost")},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/research_outpost/anomaly) -"hr" = (/obj/machinery/alarm{dir = 4; pixel_x = -25; pixel_y = 0},/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) -"hs" = (/obj/structure/window/reinforced{dir = 4},/mob/living/carbon/human/monkey,/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) +"hr" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) +"hs" = (/obj/machinery/alarm{dir = 4; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/anomaly) "ht" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "hu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/research_outpost/hallway) "hv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/research_outpost/power) "hw" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/light/small,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor/plating,/area/research_outpost/power) "hx" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/research_outpost/power) "hy" = (/obj/structure/sign/deathsposal{pixel_x = 32},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/turf/simulated/floor/plating,/area/research_outpost/power) +"hz" = (/obj/structure/rack,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "hA" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/research_outpost/power) "hB" = (/obj/effect/spawner/window/reinforced,/obj/structure/transit_tube{icon_state = "N-SE"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway) "hC" = (/obj/structure/transit_tube{icon_state = "D-SW"},/turf/simulated/wall/r_wall,/area/research_outpost/hallway) @@ -697,7 +698,7 @@ "nv" = (/obj/machinery/mineral/unloading_machine{input_dir = 1; output_dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/research_outpost/tempstorage) "nw" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "nx" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) -"ny" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) +"ny" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "nz" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/stool/bed/chair/sofa/left{dir = 8},/turf/simulated/floor/plasteel,/area/research_outpost/gearstore) "nA" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plating,/area/research_outpost/maint) "nB" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plating,/area/research_outpost/maint) @@ -770,7 +771,6 @@ "oQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/research_outpost/iso3) "oR" = (/obj/machinery/conveyor{dir = 1; id = "iso3"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/research_outpost/iso3) "oS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1; pump_direction = 0},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/research_outpost/iso3) -"oT" = (/obj/structure/rack,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "oU" = (/obj/structure/rack,/obj/item/weapon/storage/box/lights/bulbs{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/lights/tubes{pixel_x = -5; pixel_y = 5},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/research_outpost/maintstore2) "oV" = (/turf/simulated/mineral/random/low_chance,/area/mine/explored) "oW" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/mineral/random/low_chance,/area/mine/explored) @@ -1385,7 +1385,7 @@ "AH" = (/obj/machinery/hologram/holopad,/obj/machinery/firealarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"}) "AI" = (/obj/machinery/power/apc{dir = 1; name = "Mining Station Break Room APC"; pixel_x = 1; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"}) "AJ" = (/obj/machinery/alarm{pixel_y = 25},/obj/structure/closet/crate/bin{name = "Garbage bin"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"}) -"AK" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"}) +"AK" = (/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"}) "AL" = (/obj/machinery/door/firedoor,/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/mine/living_quarters{name = "Mining Station Break Room"}) "AM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/mine/lobby) "AN" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/mine/lobby) @@ -1505,8 +1505,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagageOePeQekacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjacacacacacacaaaaaQaaaaaaaaaaaaaaaoeReSeSeUeVeWeXeYeZfafbfcfdfefffgfhfhfjfkflfmeHeCfieTfqeHfrafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagfsftfufvekacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacaaaaaaaaaQaaaaaaaaaaaaaaaofwenfxfyfzfAfBfCfDaLfEfFfGfHfIfJfKfLfMcZfNfOfPfQfQfRfSfTfUfVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagfWfXfYekfZgaekekekekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaQaaaaaaaaaaaaaaaofwenfxfygbgcfBgdgeaLgfggcZghcZcZcZcZgicZgjgkeHglgmgngogpgqgraeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggsgtgugvgwgxbPdLgyekgzgAekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaQaaaaaaelaaaaaaaLfwengBfygCfAfBgEgFaLgGgHgIgJgKgLgMcZgNgOgPgQgRgSgTfQgVgpefafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggWgXgtgYgZhahbhcgyhdgAgAgzekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaahehfhfhfadhfhfhffnhihjbahkhlaLaLaLaLaLhmhnhogJhpgLhqcZhrhshthuhvhwhxgUhyhAhBhCaLhDbzaAaAaAaAaAaAaBhEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggsgtgugvgwgxbPdLgyekgzgAekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaQaaaaaaelaaaaaaaLfwengBfygCfAfBgEgFaLgGgHgIgJgKgLgMcZgOgNgPgQgRgSgTfQgVgpefafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaggWgXgtgYgZhahbhcgyhdgAgAgzekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaahehfhfhfadhfhfhffnhihjbahkhlaLaLaLaLaLhmhnhogJhpgLhqcZhshrhthuhvhwhxgUhyhAhBhCaLhDbzaAaAaAaAaAaAaBhEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFgWgXgWgugufZhGgZekfvhHekgAhIekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaahJhKhLhNhNhNhOhPhQhRhShThUhVhWhXfohZiaibicidieifigihcZiiijikileHeHimeHeHeHinioipiqirisisitisisisiubhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagiviwguixiygueQizhaiAiBiCekekekekekekbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacaaaaaaaaaaiDiEhNhNhNhNiFiGiHiIiJiKiLiMhWfpiOiPiQiRiSiTiUiViWiXiYiZiWjajbjcjdjejfjcjgjciWjhjijjjkjljmjnjojpisbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagjqjrjsguiygAgYjtgZcrekjujvekjwgyjxjyekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacacaaaaaaaaaajzjAhNhNjBhNjCjDjEjFjGjHjIjJhWjKjLjMjNjOjPjQjRjSjTjUjVjWjXjUjYjVjZjUjVkakbkckdkekfkgkhkikjkkkkklisbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1516,7 +1516,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceklGeQdLgYiAlLkmdLkmfudLdLmzgydLeQeQekcrmAeQdLekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacafafaeaeaeaeaeaeaeaeaeaeafafmBmCmDacaaaaaaaaaaaaagldlXmFmbmHmImJmcljmdmMhWkFkFkFkFkFmgmPkHmQmRmSkKmTmUmVkNmWmXmYkNmZnanbncndndnelCnfaiaAaAngnhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaceklGnieQeQiAeQlafZeQnjfulakpcreQnkfvekkmcrlLdLekbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafnlaeaeaeaeaeaeaeaeaeaeaenmafnnnoafafaaaaaaaaaaaaagldmenqnrmEnrntmGljljnvhWyuyumKyukFnAnBkHnCnDnEkKnFnGnHkNnInJnKkNnLnMlCnNnOnPnOlCnnnQafagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaceklGnRgYgweknSeknTfYekhaeknTfYekgZlLekmziCcrjuekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafnUaeaeaeaenVaeaeaeaeaeaenWnlnXnlafaaaaaaaaaaaaaaagldmNmLmOnZnuobnunphWodhWoeoeoeoekFnsmgkHogohoikKojokolkNomonookNopoqorlClClClCosotafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacekekekekekeknSekougyhajufvgZkogZiCgYeknTovowoxekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafnmaeaeaeaeaeaeaeaeaeaeaeaeoyozoAaaaaaaaaaaaaaaagagldnwnunxnZnynununzhWoHhWaeaeaeaekFoIoJkHoKoLoMkKoNoOoPkNoQoRoSkNoToUorafoVafoWmCoXafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacekekekekekeknSekougyhajufvgZkogZiCgYeknTovowoxekbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafnmaeaeaeaeaeaeaeaeaeaeaeaeoyozoAaaaaaaaaaaaaaaagagldnwnunxnZnynununzhWoHhWaeaeaeaekFoIoJkHoKoLoMkKoNoOoPkNoQoRoSkNhzoUorafoVafoWmCoXafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacbjbjbjbjbjeknSekgyjuoYizdlgYgyekgZfvekoZpapapbekpcbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafafaeaeaeaeaeaeaeaeaeaeaeaepdpepfaaaaaaaaaaaaagagagldldpgpgldldnZnZldldnYhWaeaeaeaekFkFkFkHkHkHkHkKkKkKkKkNkNkNkNkNororpjlOakakpknQafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacbjbjbjbjbjbjeknSekjudLiCgygZfviCeknSekekjwcrpaplpmpcpcbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafafaeaeaeaeaeaeaeaeaeaeaeaepnpoppaaaaaaaaaaagpqprpsptpupvpwpxaeaeaeaeaeqCaeaeaeaeaepBpCpDafafafafafafafafafafafafafafpEpFnQpGafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbjbjbjbjbjbjbjbjeknSekekekekekekekekeknSekjwcrjxcrpbpHpcpcbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacafaeaeaeaeaeaeaeaeaeaeaeaeaepIpJpKpLpLpLpLpLpLpMpNpOpPpPpQpRpRaeaeaeaeaeqCaeaeaeaeaepdpopWafafoVoVoVoVoVoVafafafafafpEpFnQpXaepXafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm index da5594a4405..84dd4bfbd99 100644 --- a/_maps/map_files/cyberiad/z6.dmm +++ b/_maps/map_files/cyberiad/z6.dmm @@ -127,7 +127,7 @@ "cw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/wall,/area/derelict/bridge/access) "cx" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/derelict/bridge/access) "cy" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/derelict_starboard) -"cz" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/space) +"cz" = (/turf/space,/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall_f6"; tag = "icon-swall_f6"},/area/space) "cA" = (/turf/simulated/floor/plating,/area/derelict/bridge/access) "cB" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/bridge/access) "cC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/derelict/bridge/access) @@ -657,10 +657,10 @@ "mG" = (/turf/simulated/mineral,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/syndicate_depot) "mH" = (/turf/simulated/mineral,/area/space) "mI" = (/turf/simulated/floor/plating/airless/asteroid,/area/space) -"mJ" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/space) +"mJ" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/space) "mK" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/space) "mL" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plasteel/airless,/area/space) -"mM" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/space) +"mM" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/space) "mN" = (/turf/simulated/floor/plating/airless/asteroid,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/space) "mO" = (/obj/effect/landmark/corpse/clown,/turf/simulated/floor/plasteel/airless,/area/space) "mP" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space) @@ -682,10 +682,7 @@ "nf" = (/obj/item/weapon/pickaxe,/turf/simulated/floor/plasteel/airless,/area/space) "ng" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space) "nh" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/turf/space,/area/space) -"ni" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/space) -"nj" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/space) "nk" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/space) -"nl" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/space) "nm" = (/obj/item/weapon/shard,/turf/simulated/floor/plasteel/airless,/area/space) "nn" = (/obj/item/weapon/broken_bottle,/turf/simulated/floor/plasteel/airless,/area/space) "no" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/space) @@ -905,20 +902,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvcvcvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznknknknlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznknknkmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamLnnnmncmLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamJnonpaznpnqmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamInrnomTnsnsnqnjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznonpaznpnqmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamInrnomTnsnsnqmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHaaaamHmHmHmHmHntnvnumHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmImImHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmImIaaaamJmKmKmLmLmKmKmKmKmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmImJmKmNmImOazazmPmPmQazmRmSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmImIaaaaczmKmKmLmLmKmKmKmKmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmIczmKmNmImOazazmPmPmQazmRmSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmTazazazazazmUazmRmVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmWmXmYazmZmUazmUazmUmRmVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHnaaznbazncazmOazazazmUmRmVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHndmKneaznfazazngmPmPazmRnhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHnimKmKmLmLmKmKmKmKnjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHndmKmKmLmLmKmKmKmKmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaamHmHmHmHmHmImImHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmImImImHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/templates/light_floor_1.dmm b/_maps/map_files/templates/light_floor_1.dmm new file mode 100644 index 00000000000..eedb8420201 --- /dev/null +++ b/_maps/map_files/templates/light_floor_1.dmm @@ -0,0 +1,16 @@ +"a" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"b" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-r"},/area/template_noop) +"c" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-y"},/area/template_noop) +"d" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-g"},/area/template_noop) +"e" = (/turf/unsimulated/floor{icon_state = "light_on"; luminosity = 1},/area/template_noop) +"f" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-b"},/area/template_noop) +"g" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-p"},/area/template_noop) +"h" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-w"},/area/template_noop) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaa +abcdefghgfedcbcdefg +abcdefghgfedcbcdefg +abcdefghgfedcbcdefg +aaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/templates/light_floor_2.dmm b/_maps/map_files/templates/light_floor_2.dmm new file mode 100644 index 00000000000..03b6c6735b0 --- /dev/null +++ b/_maps/map_files/templates/light_floor_2.dmm @@ -0,0 +1,16 @@ +"a" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"b" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-r"},/area/template_noop) +"c" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-y"},/area/template_noop) +"d" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-g"},/area/template_noop) +"e" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on"},/area/template_noop) +"f" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-b"},/area/template_noop) +"g" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-p"},/area/template_noop) +"h" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-w"},/area/template_noop) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaa +aabcdefghgfedcbcdef +abcdefghgfedcbcdefg +bcdefghgfedcbcdefga +aaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/map_files/templates/light_floor_3.dmm b/_maps/map_files/templates/light_floor_3.dmm new file mode 100644 index 00000000000..940cd14e631 --- /dev/null +++ b/_maps/map_files/templates/light_floor_3.dmm @@ -0,0 +1,16 @@ +"a" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"b" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-y"},/area/template_noop) +"c" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-b"},/area/template_noop) +"d" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-p"},/area/template_noop) +"e" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-g"},/area/template_noop) +"f" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-r"},/area/template_noop) +"g" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on"},/area/template_noop) +"h" = (/turf/unsimulated/floor{luminosity = 1; icon_state = "light_on-w"},/area/template_noop) + +(1,1,1) = {" +aabaacaadaaeaabaaca +afbegcdhdcgebfbegcd +afbegcdhdcgebfbegcd +afbegcdhdcgebfbegcd +affffffhhhhhhgggggg +"} diff --git a/_maps/map_files/templates/spacehotel/n_01.dmm b/_maps/map_files/templates/spacehotel/n_01.dmm new file mode 100644 index 00000000000..4480512c668 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_01.dmm @@ -0,0 +1,25 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/obj/item/weapon/lipstick/jade,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/green,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/green,/obj/item/toy/plushie/octopus,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"l" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"m" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +accccga +ahhihja +aklmnoa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_02.dmm b/_maps/map_files/templates/spacehotel/n_02.dmm new file mode 100644 index 00000000000..9555b7a80e5 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_02.dmm @@ -0,0 +1,30 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/template_noop,/area/template_noop) +"c" = (/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/obj/item/weapon/bananapeel{layer = 2.6},/turf/template_noop,/area/template_noop) +"d" = (/obj/structure/sign/poster{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/obj/item/weapon/bananapeel/clownfish,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/flour{desc = "Rather caked in there."},/obj/effect/decal/cleanable/pie_smudge,/obj/item/weapon/bananapeel/clownfish,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/machinery/door/window/southright,/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/effect/decal/cleanable/pie_smudge,/obj/effect/decal/cleanable/flour,/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"m" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/bananalamp,/turf/unsimulated/floor/carpet,/area/template_noop) +"n" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"q" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"r" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaabbaa +aaacaaa +adefega +affffha +aefffia +ajjklma +anopqra +aaaaaaa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_03.dmm b/_maps/map_files/templates/spacehotel/n_03.dmm new file mode 100644 index 00000000000..e4aa24d6899 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_03.dmm @@ -0,0 +1,24 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/obj/item/weapon/lipstick/purple,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/obj/item/toy/random,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"k" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"l" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"m" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +accccfa +agghgia +ajklmna +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_04.dmm b/_maps/map_files/templates/spacehotel/n_04.dmm new file mode 100644 index 00000000000..74a6e875b4a --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_04.dmm @@ -0,0 +1,30 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster{desc = "You can't make out anything from the poster's original print. It's ruined."; dir = 8; icon_state = "poster_ripped"; name = "ripped poster"; pixel_x = -32; ruined = 1},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/obj/item/clothing/head/xenos,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/mob/living/simple_animal/hostile/alien/queen,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/stool/bed/nest,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/stool/bed/alien,/obj/item/xenos_claw,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/effect/gibspawner/xeno,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/structure/stool/bed/alien,/obj/item/clothing/suit/xenos,/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/structure/alien/weeds/node,/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"m" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"n" = (/obj/machinery/door/window/southright,/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/unsimulated/floor/carpet,/area/template_noop) +"o" = (/obj/structure/table/woodentable,/obj/item/weapon/lipstick/black,/turf/unsimulated/floor/carpet,/area/template_noop) +"p" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/alien/weeds,/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"q" = (/obj/structure/toilet{dir = 1},/obj/structure/alien/weeds{icon_state = "weeds2"},/obj/item/organ/internal/body_egg/alien_embryo,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"r" = (/obj/machinery/door/window/eastleft,/obj/structure/alien/weeds,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"s" = (/obj/machinery/shower{dir = 8},/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"t" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecfgha +acijgka +almnmoa +apqrsta +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_05.dmm b/_maps/map_files/templates/spacehotel/n_05.dmm new file mode 100644 index 00000000000..cf60cf65327 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_05.dmm @@ -0,0 +1,25 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/yellow,/obj/item/toy/plushie/girly_corgi,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/yellow,/obj/item/toy/plushie/corgi,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"l" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"m" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +accccga +ahhihja +aklmnoa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_06.dmm b/_maps/map_files/templates/spacehotel/n_06.dmm new file mode 100644 index 00000000000..046119cf016 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_06.dmm @@ -0,0 +1,28 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/effect/decal/cleanable/blood/gibs/old,/obj/structure/sign/poster{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/red,/obj/item/toy/figure/cmo,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/machinery/optable,/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/red,/obj/effect/decal/cleanable/blood/gibs/old,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/cleanable/blood/gibs/old,/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/effect/decal/cleanable/blood/old,/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/machinery/door/window/southright,/obj/effect/decal/cleanable/blood/old,/turf/unsimulated/floor/carpet,/area/template_noop) +"m" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"n" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/obj/machinery/door/window/eastleft,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"q" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"r" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aeffcga +afhfcia +ajklkma +anopqra +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_07.dmm b/_maps/map_files/templates/spacehotel/n_07.dmm new file mode 100644 index 00000000000..fc00baa9a45 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_07.dmm @@ -0,0 +1,25 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/effect/decal/cleanable/blood/old,/obj/item/toy/carpplushie/dehy_carp,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"l" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"m" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +accccga +ahhihja +aklmnoa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_08.dmm b/_maps/map_files/templates/spacehotel/n_08.dmm new file mode 100644 index 00000000000..81c8881c5e7 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_08.dmm @@ -0,0 +1,26 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/obj/structure/sign/poster{dir = 1; pixel_x = 0; pixel_y = 32},/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/structure/dresser,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/obj/structure/sign/poster{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"m" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcdcea +afdddga +addddga +ahijika +almnopa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_09.dmm b/_maps/map_files/templates/spacehotel/n_09.dmm new file mode 100644 index 00000000000..ecf873f1913 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_09.dmm @@ -0,0 +1,25 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/obj/item/toy/eight_ball,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/obj/effect/decal/cleanable/vomit,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"l" = (/obj/structure/toilet{dir = 1},/obj/effect/decal/cleanable/vomit,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"m" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +accccga +ahhihja +aklmnoa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_10.dmm b/_maps/map_files/templates/spacehotel/n_10.dmm new file mode 100644 index 00000000000..9038bbbce3d --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_10.dmm @@ -0,0 +1,24 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/deer,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/effect/decal/snow/sand/edge,/obj/effect/view_portal{id = "snowland_room"},/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows"; opacity = 1},/area/template_noop) +"j" = (/turf/unsimulated/wall/fakeglass{dir = 4; icon_state = "fakewindows"; opacity = 0},/area/template_noop) +"k" = (/obj/effect/view_portal/visual{dist = 6; frustrum = 1; id = "snowland"; radius = 2},/turf/unsimulated/floor,/area/template_noop) +"l" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows"; opacity = 0},/area/template_noop) +"m" = (/turf/unsimulated/wall/fakeglass{dir = 4; icon_state = "fakewindows"; opacity = 1},/area/template_noop) +"n" = (/turf/unsimulated/wall{dynamic_lighting = 0; icon = null},/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +accgcha +aijklma +annnnna +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_11.dmm b/_maps/map_files/templates/spacehotel/n_11.dmm new file mode 100644 index 00000000000..415d3f1f7c5 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_11.dmm @@ -0,0 +1,26 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/syndie,/obj/item/weapon/twohanded/toy/chainsaw,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/syndie,/obj/item/toy/figure/syndie{pixel_x = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/obj/structure/sign/poster{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"m" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +accccga +ahijika +almnopa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_12.dmm b/_maps/map_files/templates/spacehotel/n_12.dmm new file mode 100644 index 00000000000..24d3321f4f7 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_12.dmm @@ -0,0 +1,26 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/obj/item/weapon/bikehorn/rubberducky,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"l" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"m" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/obj/machinery/shower{dir = 8},/obj/structure/curtain/open/shower{anchored = 1; opacity = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; opacity = 1},/area/template_noop) +"o" = (/turf/unsimulated/wall/metal,/area/template_noop) +"p" = (/obj/effect/view_portal/visual{dist = 0; id = "poolland"; radius = 0},/turf/template_noop,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +aghigja +aklmnoa +aooopoa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_13.dmm b/_maps/map_files/templates/spacehotel/n_13.dmm new file mode 100644 index 00000000000..0d10f62eba5 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_13.dmm @@ -0,0 +1,29 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/obj/structure/sign/poster/legit{dir = 1; pixel_y = 32},/obj/random/plushie,/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/obj/structure/sign/poster/legit{dir = 1; pixel_y = 32},/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/structure/sign/poster/legit{dir = 1; pixel_y = 32},/obj/random/plushie,/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/dresser,/obj/structure/sign/poster/legit{dir = 1; pixel_y = 32},/obj/structure/sign/poster/legit{dir = 4; pixel_x = 32},/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/machinery/light{dir = 8},/obj/random/plushie,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/stool/bed,/obj/structure/sign/poster/legit{dir = 4; pixel_x = 32},/obj/item/weapon/bedsheet/rainbow,/obj/random/plushie,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/random/plushie,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/obj/random/plushie,/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"m" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/obj/random/plushie,/turf/unsimulated/floor/carpet,/area/template_noop) +"n" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/obj/structure/sign/poster/legit{dir = 4; pixel_x = 32},/obj/structure/sign/poster/legit{pixel_y = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"o" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"q" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"r" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"s" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcdefa +agdddha +aidddha +ajklmna +aopqrsa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_14.dmm b/_maps/map_files/templates/spacehotel/n_14.dmm new file mode 100644 index 00000000000..7fe5a48cafd --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_14.dmm @@ -0,0 +1,26 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/mopbucket,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/qm,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"m" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +agcccha +aiijika +almnopa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_15.dmm b/_maps/map_files/templates/spacehotel/n_15.dmm new file mode 100644 index 00000000000..39ef7bf1334 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_15.dmm @@ -0,0 +1,23 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/unsimulated/floor{icon_state = "engine"},/area/template_noop) +"c" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor{icon_state = "engine"},/area/template_noop) +"d" = (/obj/machinery/power/compressor{dir = 1},/obj/effect/decal/warning_stripes/eastnorthwest,/turf/unsimulated/floor{icon_state = "engine"},/area/template_noop) +"e" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor{icon_state = "engine"},/area/template_noop) +"f" = (/obj/machinery/power/turbine,/obj/effect/decal/warning_stripes/east,/obj/effect/decal/warning_stripes/west,/turf/unsimulated/floor{icon_state = "engine"},/area/template_noop) +"g" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows"; opacity = 1},/area/template_noop) +"h" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/template_noop) +"i" = (/obj/machinery/door/poddoor{opacity = 0},/turf/space,/area/template_noop) +"j" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/template_noop) +"k" = (/turf/unsimulated/wall/fakeglass{dir = 4; icon_state = "fakewindows"; opacity = 1},/area/template_noop) +"l" = (/turf/unsimulated/wall{dynamic_lighting = 0; icon = null},/area/template_noop) +"m" = (/obj/effect/view_portal/visual{dist = 5; frustrum = 1; id = "turbinespace"},/turf/unsimulated/floor,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abbbbba +acbdbea +abbfbba +aghijka +allmlla +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_16.dmm b/_maps/map_files/templates/spacehotel/n_16.dmm new file mode 100644 index 00000000000..0312f2a7b33 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_16.dmm @@ -0,0 +1,25 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/unsimulated/wall{icon_state = "sandstone2"},/area/template_noop) +"c" = (/obj/structure/stool,/obj/structure/mirror{dir = 8; pixel_x = -28},/obj/machinery/light/small{dir = 1},/turf/unsimulated/floor{icon_state = "wood"},/area/template_noop) +"d" = (/turf/unsimulated/floor{icon_state = "wood"},/area/template_noop) +"e" = (/obj/structure/stool,/obj/structure/mirror{dir = 4; pixel_x = 28},/obj/machinery/light/small{dir = 1},/turf/unsimulated/floor{icon_state = "wood"},/area/template_noop) +"f" = (/turf/unsimulated/wall{icon_state = "sandstone3"},/area/template_noop) +"g" = (/obj/structure/stool,/obj/structure/mirror{dir = 8; pixel_x = -28},/obj/machinery/light/small,/turf/unsimulated/floor{icon_state = "wood"},/area/template_noop) +"h" = (/obj/structure/stool,/obj/structure/mirror{dir = 4; pixel_x = 28},/obj/machinery/light/small,/turf/unsimulated/floor{icon_state = "wood"},/area/template_noop) +"i" = (/turf/unsimulated/wall{icon_state = "sandstone5"},/area/template_noop) +"j" = (/turf/unsimulated/wall{icon_state = "sandstone8"},/area/template_noop) +"k" = (/obj/effect/view_portal{id = "beach_room"},/obj/structure/curtain/open,/turf/unsimulated/floor{icon_state = "wood"},/area/template_noop) +"l" = (/turf/unsimulated/wall{icon_state = "sandstone4"},/area/template_noop) +"m" = (/turf/unsimulated/wall{icon_state = "sandstone9"},/area/template_noop) +"n" = (/turf/unsimulated/wall{dynamic_lighting = 0; icon = null},/area/template_noop) +"o" = (/obj/effect/view_portal/visual{dist = 6; frustrum = 1; id = "beach"; radius = 1},/turf/unsimulated/floor{icon_state = "wood"},/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcdeba +afgdhfa +aijklma +annonna +annnnna +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_17.dmm b/_maps/map_files/templates/spacehotel/n_17.dmm new file mode 100644 index 00000000000..964a75ba8ba --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_17.dmm @@ -0,0 +1,27 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/obj/item/pizzabox/margherita,/obj/item/pizzabox/margherita{pixel_y = 4},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/obj/item/pizzabox/vegetable,/obj/item/pizzabox/vegetable{pixel_y = 4},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/obj/item/toy/prize/ripley{pixel_x = 4},/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/item/pizzabox/mushroom,/obj/item/pizzabox/mushroom{pixel_y = 4},/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/obj/item/pizzabox/meat,/obj/item/pizzabox/meat{pixel_y = 4},/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"k" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/obj/item/toy/katana,/turf/unsimulated/floor/carpet,/area/template_noop) +"m" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"q" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +agcccha +aijkjla +amnopqa +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_18.dmm b/_maps/map_files/templates/spacehotel/n_18.dmm new file mode 100644 index 00000000000..28145e1b4fb --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_18.dmm @@ -0,0 +1,24 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/sign/poster/legit{dir = 8; pixel_x = -32},/turf/unsimulated/floor/carpet,/area/template_noop) +"c" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"d" = (/obj/structure/dresser,/obj/item/weapon/lipstick/purple,/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/machinery/light{dir = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/obj/item/toy/plushie/purple_fox,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/window/reinforced/polarized{id = "room_n"},/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/machinery/door/window/southright,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 8; pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"k" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"l" = (/obj/machinery/door/window/eastleft,/obj/machinery/button/windowtint{id = "room_n"; pixel_y = -24; range = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"m" = (/obj/machinery/shower{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"n" = (/turf/unsimulated/wall/metal,/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abcccda +aecccfa +accccfa +agghgia +ajklmna +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/n_19.dmm b/_maps/map_files/templates/spacehotel/n_19.dmm new file mode 100644 index 00000000000..114dabbf44b --- /dev/null +++ b/_maps/map_files/templates/spacehotel/n_19.dmm @@ -0,0 +1,15 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/unsimulated/wall/metal,/area/template_noop) +"c" = (/obj/effect/view_portal{id = "mazeland_room"},/obj/machinery/light{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/template_noop) +"d" = (/obj/effect/view_portal/visual{dist = 2; frustrum = 0; id = "mazeland"; radius = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/template_noop) +"e" = (/turf/unsimulated/wall{dynamic_lighting = 0; icon = null},/area/template_noop) + +(1,1,1) = {" +aaaaaaa +abbcbba +abbdbba +abeeeba +abeeeba +abbbbba +aaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/s_01.dmm b/_maps/map_files/templates/spacehotel/s_01.dmm new file mode 100644 index 00000000000..11ec761615a --- /dev/null +++ b/_maps/map_files/templates/spacehotel/s_01.dmm @@ -0,0 +1,27 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/unsimulated/beach/water,/area/template_noop) +"c" = (/obj/machinery/shower{pixel_y = 24},/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/template_noop) +"d" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/structure/rack,/obj/item/clothing/suit/apron,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/holidaypriest,/obj/item/clothing/suit/judgerobe,/obj/item/clothing/suit/storage/labcoat,/obj/item/clothing/suit/nun,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/suit/wizrobe/fake,/obj/item/clothing/suit/wizrobe/marisa/fake,/obj/effect/decal/cleanable/greenglow,/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/rack,/obj/item/clothing/head/collectable/police,/obj/item/clothing/head/nun_hood,/obj/item/clothing/head/mailman,/obj/item/clothing/head/nursehat,/obj/item/clothing/head/wizard/fake,/obj/item/clothing/head/powdered_wig,/obj/item/clothing/head/wizard/marisa/fake,/obj/item/clothing/mask/gas/sexyclown,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/rack,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/head/kitty,/obj/item/clothing/head/rabbitears,/obj/item/clothing/mask/muzzle,/obj/item/clothing/accessory/stethoscope,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/template_noop) +"k" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/machinery/light{dir = 8},/obj/item/weapon/soap/deluxe,/obj/machinery/button/windowtint{id = "room_s"; pixel_x = -24; pixel_y = 0; range = 5},/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/template_noop) +"m" = (/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/template_noop) +"n" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 1; icon_state = "whitebluecorner"},/area/template_noop) +"o" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"q" = (/obj/machinery/door/window/eastleft,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) + +(1,1,1) = {" +aaaaaaaaaaa +abbcdefghia +abbjdddddka +almndddddka +aopqdddddda +aaaaaaaaaaa +aaaaaaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/s_02.dmm b/_maps/map_files/templates/spacehotel/s_02.dmm new file mode 100644 index 00000000000..98eaa3b377b --- /dev/null +++ b/_maps/map_files/templates/spacehotel/s_02.dmm @@ -0,0 +1,27 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/unsimulated/beach/water,/area/template_noop) +"c" = (/obj/machinery/shower{pixel_y = 24},/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/template_noop) +"d" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/structure/rack,/obj/item/clothing/suit/apron,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/holidaypriest,/obj/item/clothing/suit/judgerobe,/obj/item/clothing/suit/storage/labcoat,/obj/item/clothing/suit/nun,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/suit/wizrobe/fake,/obj/item/clothing/suit/xenos,/obj/item/clothing/suit/wizrobe/marisa/fake,/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/rack,/obj/item/clothing/head/collectable/police,/obj/item/clothing/head/nun_hood,/obj/item/clothing/head/mailman,/obj/item/clothing/head/nursehat,/obj/item/clothing/head/wizard/fake,/obj/item/clothing/head/powdered_wig,/obj/item/clothing/head/xenos,/obj/item/clothing/head/wizard/marisa/fake,/obj/item/clothing/mask/gas/sexyclown,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/rack,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/head/kitty,/obj/item/clothing/head/rabbitears,/obj/item/clothing/mask/muzzle,/obj/item/clothing/accessory/stethoscope,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/template_noop) +"k" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/hop,/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/machinery/light{dir = 8},/obj/item/weapon/soap/deluxe,/obj/machinery/button/windowtint{id = "room_s"; pixel_x = -24; pixel_y = 0; range = 5},/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/template_noop) +"m" = (/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/template_noop) +"n" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 1; icon_state = "whitebluecorner"},/area/template_noop) +"o" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"q" = (/obj/machinery/door/window/eastleft,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) + +(1,1,1) = {" +aaaaaaaaaaa +abbcdefghia +abbjdddddka +almndddddka +aopqdddddda +aaaaaaaaaaa +aaaaaaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/s_03.dmm b/_maps/map_files/templates/spacehotel/s_03.dmm new file mode 100644 index 00000000000..c82b1f84d11 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/s_03.dmm @@ -0,0 +1,28 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/unsimulated/floor/upperlevel,/area/awaymission/desert{name = "Sudden Drop"}) +"c" = (/obj/machinery/shower{pixel_y = 24},/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/template_noop) +"d" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/structure/rack,/obj/item/weapon/gun/magic/wand,/obj/item/weapon/gun/magic/staff{pixel_y = -4},/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe{pixel_x = -8; pixel_y = -8},/obj/item/clothing/suit/wizrobe/black{pixel_x = -4; pixel_y = -4},/obj/item/clothing/suit/wizrobe/clown,/obj/item/clothing/suit/wizrobe/marisa{pixel_x = 4; pixel_y = 4},/obj/item/clothing/suit/wizrobe/red{pixel_x = 8; pixel_y = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/rack,/obj/item/clothing/head/wizard{pixel_x = 8; pixel_y = -8},/obj/item/clothing/head/wizard/black{pixel_x = 4; pixel_y = -4},/obj/item/clothing/head/wizard/clown,/obj/item/clothing/head/wizard/marisa{pixel_x = -4; pixel_y = 4},/obj/item/clothing/head/wizard/red{pixel_x = -8; pixel_y = 8},/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/effect/levelref{id = "lavaland"; name = "lavaland"},/turf/unsimulated/floor/upperlevel,/area/awaymission/desert{name = "Sudden Drop"}) +"k" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/template_noop) +"l" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/wiz,/turf/unsimulated/floor/carpet,/area/template_noop) +"m" = (/obj/machinery/light{dir = 8},/obj/item/weapon/soap/deluxe,/obj/machinery/button/windowtint{id = "room_s"; pixel_x = -24; pixel_y = 0; range = 5},/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/template_noop) +"n" = (/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/template_noop) +"o" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 1; icon_state = "whitebluecorner"},/area/template_noop) +"p" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"q" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"r" = (/obj/machinery/door/window/eastleft,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) + +(1,1,1) = {" +aaaaaaaaaaa +abbcdefghia +abjkdddddla +amnodddddla +apqrdddddda +aaaaaaaaaaa +aaaaaaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/s_04.dmm b/_maps/map_files/templates/spacehotel/s_04.dmm new file mode 100644 index 00000000000..9648a7c707c --- /dev/null +++ b/_maps/map_files/templates/spacehotel/s_04.dmm @@ -0,0 +1,29 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/unsimulated/beach/water,/area/template_noop) +"c" = (/obj/machinery/shower{pixel_y = 24},/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/template_noop) +"d" = (/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/template_noop) +"e" = (/obj/structure/rack,/obj/item/clothing/suit/syndicatefake,/obj/item/clothing/under/syndicate,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/template_noop) +"f" = (/obj/structure/rack,/obj/item/clothing/mask/gas/syndicate,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/template_noop) +"g" = (/obj/structure/rack,/obj/structure/sign/poster{dir = 1; pixel_y = 32},/obj/item/clothing/suit/space/rig/syndi,/obj/item/clothing/head/helmet/space/syndicate{pixel_x = -4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/template_noop) +"h" = (/obj/structure/dresser,/obj/structure/sign/poster{dir = 1; pixel_y = 32},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/template_noop) +"i" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/item/weapon/storage/fancy/cigarettes/syndicate{pixel_x = 8},/obj/structure/sign/poster{dir = 1; pixel_y = 32},/obj/structure/sign/poster{dir = 4; pixel_x = 32},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/template_noop) +"j" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/template_noop) +"k" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/syndie,/obj/structure/sign/poster{dir = 4; pixel_x = 32},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/template_noop) +"l" = (/obj/machinery/light{dir = 8},/obj/machinery/button/windowtint{id = "room_s"; pixel_x = -24; pixel_y = 0; range = 5},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/template_noop) +"m" = (/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/template_noop) +"n" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 1; icon_state = "whitebluecorner"},/area/template_noop) +"o" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"q" = (/obj/machinery/door/window/eastleft,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"r" = (/obj/structure/sign/poster{pixel_y = -32},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/template_noop) +"s" = (/obj/structure/sign/poster{dir = 4; pixel_x = 32},/obj/structure/sign/poster{pixel_y = -32},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/template_noop) + +(1,1,1) = {" +aaaaaaaaaaa +abbcdefghia +abbjdddddka +almndddddka +aopqrdrrrsa +aaaaaaaaaaa +aaaaaaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/s_05.dmm b/_maps/map_files/templates/spacehotel/s_05.dmm new file mode 100644 index 00000000000..1de8b749e58 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/s_05.dmm @@ -0,0 +1,26 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/unsimulated/beach/water,/area/template_noop) +"c" = (/obj/machinery/shower{pixel_y = 24},/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whitehall"},/area/template_noop) +"d" = (/turf/unsimulated/floor{icon_state = "white"},/area/template_noop) +"e" = (/obj/structure/rack,/obj/item/device/guitar,/obj/item/device/violin{pixel_x = 8},/turf/unsimulated/floor{icon_state = "white"},/area/template_noop) +"f" = (/obj/structure/dresser,/turf/unsimulated/floor{icon_state = "white"},/area/template_noop) +"g" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table,/turf/unsimulated/floor{icon_state = "white"},/area/template_noop) +"h" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whitehall"},/area/template_noop) +"i" = (/obj/structure/piano,/turf/unsimulated/floor{icon_state = "white"},/area/template_noop) +"j" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/turf/unsimulated/floor{icon_state = "white"},/area/template_noop) +"k" = (/obj/machinery/light{dir = 8},/obj/machinery/button/windowtint{id = "room_s"; pixel_x = -24; pixel_y = 0; range = 5},/obj/item/weapon/soap,/turf/unsimulated/floor{dir = 1; icon_state = "whitehall"},/area/template_noop) +"l" = (/turf/unsimulated/floor{dir = 1; icon_state = "whitehall"},/area/template_noop) +"m" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 1; icon_state = "whitecorner"},/area/template_noop) +"n" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"o" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"p" = (/obj/machinery/door/window/eastleft,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) + +(1,1,1) = {" +aaaaaaaaaaa +abbcdddefga +abbhiddddja +aklmdddddja +anopdddddda +aaaaaaaaaaa +aaaaaaaaaaa +"} diff --git a/_maps/map_files/templates/spacehotel/s_06.dmm b/_maps/map_files/templates/spacehotel/s_06.dmm new file mode 100644 index 00000000000..e733f819c36 --- /dev/null +++ b/_maps/map_files/templates/spacehotel/s_06.dmm @@ -0,0 +1,28 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/unsimulated/beach/water,/area/template_noop) +"c" = (/obj/machinery/shower{pixel_y = 24},/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/template_noop) +"d" = (/turf/unsimulated/floor/carpet,/area/template_noop) +"e" = (/obj/structure/rack,/obj/item/weapon/twohanded/dualsaber/toy,/obj/item/weapon/twohanded/toy/chainsaw,/obj/item/toy/foamblade,/turf/unsimulated/floor/carpet,/area/template_noop) +"f" = (/obj/structure/rack,/obj/item/toy/griffin{pixel_y = 8},/obj/item/toy/snappop,/obj/item/toy/redbutton,/turf/unsimulated/floor/carpet,/area/template_noop) +"g" = (/obj/structure/rack,/obj/item/toy/cards/deck,/obj/item/toy/figure/secofficer,/turf/unsimulated/floor/carpet,/area/template_noop) +"h" = (/obj/structure/dresser,/turf/unsimulated/floor/carpet,/area/template_noop) +"i" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/unsimulated/floor/carpet,/area/template_noop) +"j" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 8; icon_state = "whiteblue"},/area/template_noop) +"k" = (/obj/item/toy/snappop,/turf/unsimulated/floor/carpet,/area/template_noop) +"l" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/patriot,/turf/unsimulated/floor/carpet,/area/template_noop) +"m" = (/obj/machinery/light{dir = 8},/obj/machinery/button/windowtint{id = "room_s"; pixel_x = -24; pixel_y = 0; range = 5},/obj/item/weapon/soap/nanotrasen,/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/template_noop) +"n" = (/turf/unsimulated/floor{dir = 1; icon_state = "whiteblue"},/area/template_noop) +"o" = (/obj/structure/window/reinforced/polarized{dir = 4; id = "room_s"},/turf/unsimulated/floor{dir = 1; icon_state = "whitebluecorner"},/area/template_noop) +"p" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"q" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) +"r" = (/obj/machinery/door/window/eastleft,/turf/unsimulated/floor{icon_state = "freezerfloor"},/area/template_noop) + +(1,1,1) = {" +aaaaaaaaaaa +abbcdefghia +abbjdddkdla +amnokddddla +apqrdddddda +aaaaaaaaaaa +aaaaaaaaaaa +"} diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index 83a6ac5b20a..ec9ad2f2128 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -78,3 +78,5 @@ #define BLOCKHEADHAIR 4 // temporarily removes the user's hair overlay. Leaves facial hair. #define BLOCKHAIR 32768 // temporarily removes the user's hair, facial and otherwise. + +#define ONESIZEFITSALL 1 // determines if something can be worn by a fatty or not. diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 915cb8816e8..e79d40f7176 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -7,10 +7,7 @@ #define NOSHIELD 32 // weapon not affected by shield #define CONDUCT 64 // conducts electricity (metal etc.) #define ABSTRACT 128 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way -#define ON_BORDER 512 // item has priority to check when entering or leaving -#define NODELAY 32768 // 1 second attackby delay skipped (Can be used once every 0.2s). Most objects have a 1s attackby delay, which doesn't require a flag. - -#define NOBLOODY 2048 // used to items if they don't want to get a blood overlay +#define ON_BORDER 256 // item has priority to check when entering or leaving #define GLASSESCOVERSEYES 1024 #define MASKCOVERSEYES 1024 // get rid of some of the other retardation in these flags @@ -21,14 +18,13 @@ #define HEADBANGPROTECT 4096 #define EARBANGPROTECT 1024 -#define THICKMATERIAL 1024 //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with NOSLIP) #define NOSLIP 1024 //prevents from slipping on wet floors, in space etc #define OPENCONTAINER 4096 // is an open container for chemistry purposes -#define BLOCK_GAS_SMOKE_EFFECT 8192 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! (NOTE: flag shared with ONESIZEFITSALL) -#define ONESIZEFITSALL 8192 -#define PLASMAGUARD 16384 //Does not get contaminated by plasma. +#define BLOCK_GAS_SMOKE_EFFECT 8192 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! +#define THICKMATERIAL 8192 //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with BLOCK_GAS_SMOKE_EFFECT) + #define NOREACT 16384 //Reagents dont' react inside this container. diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 3be0682c727..e6988ca745e 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -1,5 +1,8 @@ // String identifiers for associative list lookup + +#define MUTCHK_FORCED 1 + // mob/var/list/mutations // Used in preferences. diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index d36405db5d1..5a6d0d0d595 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -66,6 +66,7 @@ #define COLOR_YELLOW "#FFFF00" #define COLOR_ORANGE "#FF9900" #define COLOR_WHITE "#FFFFFF" +#define COLOR_GRAY "#808080" //some arbitrary defines to be used by self-pruning global lists. (see master_controller) #define PROCESS_KILL 26 //Used to trigger removal from a processing list @@ -156,6 +157,8 @@ for(type in view(range, dview_mob)) #define END_FOR_DVIEW dview_mob.loc = null +#define get_turf(A) (get_step(A, 0)) + #define MIN_SUPPLIED_LAW_NUMBER 15 #define MAX_SUPPLIED_LAW_NUMBER 50 @@ -255,3 +258,6 @@ #define TRIGGER_GUARD_ALLOW_ALL -1 #define TRIGGER_GUARD_NONE 0 #define TRIGGER_GUARD_NORMAL 1 + +// Macro to get the current elapsed round time, rather than total world runtime +#define ROUND_TIME (round_start_time ? (world.time - round_start_time) : 0) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index a8c548bdd7a..36bb824e642 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -46,14 +46,6 @@ if(S.flags & IS_WHITELISTED) whitelisted_species += S.name - paths = subtypesof(/datum/emote) - for(var/T in paths) - var/datum/emote/E = new T - if(istype(T, /datum/emote/custom)) - continue - emotes += E - - init_subtypes(/datum/table_recipe, table_recipes) return 1 diff --git a/code/__HELPERS/logging.dm b/code/__HELPERS/logging.dm index 5d2427603c7..bf3a5b3ffc9 100644 --- a/code/__HELPERS/logging.dm +++ b/code/__HELPERS/logging.dm @@ -82,8 +82,8 @@ diary << "\[[time_stamp()]]MISC: [text][log_end]" /proc/log_to_dd(text) - world.log << text //this comes before the config check because it can't possibly runtime - if(config.log_world_output) + world.log << text + if(config && config.log_world_output) diary << "\[[time_stamp()]]DD_OUTPUT: [text][log_end]" /** diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 9657f867b5a..9d790b75345 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -171,7 +171,7 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul target.attack_log += text("\[[time_stamp()]\] Has been [what_done] by [key_name(user)][object ? " with [object]" : " "][addition]") if(admin) log_attack("[key_name(user)] [what_done] [key_name(target)][object ? " with [object]" : " "][addition]") - if(target.client) + if(istype(target) && target.client) if(what_done in ignore) return if(target == user)return if(!admin) return diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 4973de14b81..872f299479c 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -24,6 +24,7 @@ //Returns the world time in english /proc/worldtime2text(time = world.time) + time = (round_start_time ? (time - round_start_time) : (time - world.time)) return "[round(time / 36000)+12]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]" /proc/time_stamp() diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 5ef6646e8cc..596dcda719c 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1010,13 +1010,6 @@ proc/get_mob_with_client_list() else if (zone == "r_foot") return "right foot" else return zone - -/proc/get_turf(atom/A) - if (!istype(A)) - return - for(A, A && !isturf(A), A=A.loc); //semicolon is for the empty statement - return A - //Finds the distance between two atoms, in pixels //centered = 0 counts from turf edge to edge //centered = 1 counts from turf center to turf center diff --git a/code/_compile_options.dm b/code/_compile_options.dm index cac93fdbaf6..5e9d9462d7f 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -20,3 +20,6 @@ This may require updating to a beta release. #endif var/global/list/processing_objects = list() //This has to be initialized BEFORE world + +// Macros that must exist before world.dm +#define to_chat to_chat_filename=__FILE__;to_chat_line=__LINE__;to_chat_src=src;__to_chat diff --git a/code/_globalvars/lists/misc.dm b/code/_globalvars/lists/misc.dm index 0511286268e..45f3a56c9b5 100644 --- a/code/_globalvars/lists/misc.dm +++ b/code/_globalvars/lists/misc.dm @@ -20,7 +20,8 @@ var/list/restricted_camera_networks = list( //Those networks can only be accesse "Thunderdome", "UO45", "UO45R", - "Xeno" + "Xeno", + "Hotel" ) var/list/map_templates = list() diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index e1e8b818356..b6dc1c58b8f 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -4,7 +4,6 @@ var/global/list/all_languages[0] var/global/list/language_keys[0] // Table of say codes for all languages var/global/list/all_superheroes[0] var/global/list/all_nations[0] -var/global/list/emotes[0] var/global/list/whitelisted_species = list() var/list/clients = list() //list of all clients diff --git a/code/_globalvars/lists/reagents.dm b/code/_globalvars/lists/reagents.dm index 8417275d780..23d310be857 100644 --- a/code/_globalvars/lists/reagents.dm +++ b/code/_globalvars/lists/reagents.dm @@ -58,4 +58,9 @@ var/global/list/blocked_chems = list("polonium", "initropidril", "concentrated_i "reagent", "life","dragonsbreath") //List of chems/mixtures that can't grow in plants (in addition to the global random chem blacklist) -var/global/list/plant_blocked_chems = list() //filled in /datum/reagents/New() with chems that have can_grow_in_plants = 0 \ No newline at end of file +var/global/list/plant_blocked_chems = list() //filled in /datum/reagents/New() with chems that have can_grow_in_plants = 0 + +var/global/list/safe_chem_list = list("antihol", "charcoal", "epinephrine", "insulin", "teporone","silver_sulfadiazine", "salbutamol", + "omnizine", "stimulants", "synaptizine", "potass_iodide", "oculine", "mannitol", "styptic_powder", + "spaceacillin", "salglu_solution", "sal_acid", "cryoxadone", "blood", "synthflesh", "hydrocodone", + "mitocholide", "rezadone") \ No newline at end of file diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index d975491a15c..e4223fcee55 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -12,3 +12,5 @@ var/list/combatlog = list() var/list/IClog = list() var/list/OOClog = list() var/list/adminlog = list() + +var/list/investigate_log_subjects = list("notes", "watchlist", "hrefs") diff --git a/code/_globalvars/mapping.dm b/code/_globalvars/mapping.dm index 1810bff0b47..022e308470d 100644 --- a/code/_globalvars/mapping.dm +++ b/code/_globalvars/mapping.dm @@ -37,6 +37,7 @@ var/list/latejoin_cyborg = list() var/list/prisonwarp = list() //prisoners go to these var/list/holdingfacility = list() //captured people go here var/list/xeno_spawn = list()//Aliens spawn at these. +var/list/ertdirector = list() // list/mazewarp = list() var/list/tdome1 = list() var/list/tdome2 = list() diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index db5a0bbcd0f..2579005af3d 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -131,7 +131,9 @@ Topic(src, list("src"= "\ref[src]", "command"="emergency", "activate" = "0"), 1) return -/atom/proc/AIShiftClick() +/atom/proc/AIShiftClick(var/mob/user) + if(user.client) + user.examinate(src) return /obj/machinery/door/airlock/AIShiftClick() // Opens and closes doors! diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index ecb7f00cd8b..1f60c26f885 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -139,7 +139,9 @@ /obj/machinery/door/airlock/BorgAltShiftClick() // Enables emergency override on doors! Forwards to AI code. AIAltShiftClick() -/atom/proc/BorgShiftClick() +/atom/proc/BorgShiftClick(var/mob/user) + if(user.client && user.client.eye == user) + user.examinate(src) return /obj/machinery/door/airlock/BorgShiftClick() // Opens and closes doors! Forwards to AI code. diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index f4e795f6c77..b0e3059ee6d 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -177,6 +177,8 @@ var/disable_lobby_music = 0 // Disables the lobby music var/disable_cid_warn_popup = 0 //disables the annoying "You have already logged in this round, disconnect or be banned" popup, because it annoys the shit out of me when testing. + var/max_loadout_points = 5 // How many points can be spent on extra items in character setup + /datum/configuration/New() var/list/L = subtypesof(/datum/game_mode) for (var/T in L) @@ -552,6 +554,9 @@ if("disable_cid_warn_popup") config.disable_cid_warn_popup = 1 + if("max_loadout_points") + config.max_loadout_points = text2num(value) + else diary << "Unknown setting in configuration: '[name]'" diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 6b7e4e7558f..7816e88e556 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -229,11 +229,11 @@ datum/controller/vote to_chat(world, "[text]\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote.") switch(vote_type) if("crew_transfer") - to_chat(world, sound('sound/ambience/alarm4.ogg')) + world << sound('sound/ambience/alarm4.ogg') if("gamemode") - to_chat(world, sound('sound/ambience/alarm4.ogg')) + world << sound('sound/ambience/alarm4.ogg') if("custom") - to_chat(world, sound('sound/ambience/alarm4.ogg')) + world << sound('sound/ambience/alarm4.ogg') if(mode == "gamemode" && going) going = 0 to_chat(world, "Round start has been delayed.") diff --git a/code/datums/Emote_system/emote.dm b/code/datums/Emote_system/emote.dm deleted file mode 100644 index 4f130fbf330..00000000000 --- a/code/datums/Emote_system/emote.dm +++ /dev/null @@ -1,587 +0,0 @@ -/******************************************************************************************************* - Emotes -Remember, only 1 instance of each emote is made, and used by all mobs that can access it. As such, the -ONLY place you can safely set object variables during runtime is in New(). Otherwise override the emote. -The only exception to this is custom emotes, which are created as needed and only last until they are finished -VampyrBytes - -*******************************************************************************************************/ -#define EMOTE_COOLDOWN 20 //Time in deciseconds that the cooldown lasts -#define HEARING_RANGE 7 -#define INVALID -1 //Using -1 as I can't see how a negative number could be a valid input - -/datum/emote - var/name = "" - var/desc = "" - var/list/commands[0] // list of commands that trigger the emote. - var/text = "" - var/selfText = "" // the version of text that you should see - eg, if text is screams, you want scream here, as You screams is bad grammer - var/startText = "" // if you need to put something in before [user] - var/selfStart = 1 // whether the start text is used in what you see - - var/audible = 0 - var/mimeText = "" - var/mimeSelf = "" //self version of mimeText - var/sound // sound file - var/vol = 50 - var/muzzleAffected = 0 // whether being muzzled affects this emote - var/muzzledNoise = "" // if the emote is audible and you're muzzled, this is what type of noise you make (eg weak, loud). - var/cooldown = 0 // How long the cooldown should be on this emote. Defaults to EMOTE_COOLDOWN if not set and the emote plays a sound - - var/restrained = 0 // 1 if being restrained prevents this emote - - var/canTarget = 0 // 1 if the emote accepts a target - var/targetMob = 0 // 0 if target can be any atom, 1 if it has to be a mob, - var/mustTarget = 0 // 1 if the emote needs a target to work (won't get None as an option) - var/targetText = "at" // what goes inbetween user and target - var/takesNumber = 0 // 1 if the emote uses a number parameter - - var/emoteSpanClass = "notice" - var/userSpanClass = "em" - var/baseLevel = 1 - var/allowParent = 0 // 1 if you want the parent available as well as this one - - -/datum/emote/New() - var/pathString = "[type]" - var/count = 0 - for(var/i in 1 to lentext(pathString)) - var/char = copytext(pathString, i, i+1) - if(char == "/") - count++ - if(count == 4) - baseLevel = 0 - break - - if(sound && !cooldown) - cooldown = EMOTE_COOLDOWN - - if(targetText) - if(!findtextEx(targetText, " ", lentext(targetText))) - targetText += " " - -/datum/emote/proc/doEmote(var/mob/user, var/command = "") - if(!istype(user)) - return - if(cooldown) - if(handle_emote_CD(user)) - return - - var/message = "" - var/list/params[0] - - params = getParams(user) - - for(var/p in params) - if(params[p] == INVALID) - return - - if(text) - message = createMessage(user, params) - - if(message) - message = addExtras(user, params, message) - . = processMessage(user, params, message) - - if(!doMime(user) && (!muzzleAffected || !isMuzzled(user))) - if(playSound(user, params)) - . = 2 - - doAction(user, params) - - for(var/obj/item/weapon/implant/I in user) - if(I.implanted) - I.trigger(command, user) - - return - -// for things that the emote does that aren't text or sound based -/datum/emote/proc/doAction(var/mob/user, var/list/params) - return - -/datum/emote/proc/getParams(var/mob/user) - var/list/params[0] - - if(takesNumber) - user.set_typing_indicator(1) - user.hud_typing = 1 - params["num"] = getNumber(user) - user.hud_typing = 0 - user.set_typing_indicator(0) - - if(canTarget) - user.set_typing_indicator(1) - user.hud_typing = 1 - params["target"] = getTarget(user) - user.hud_typing = 0 - user.set_typing_indicator(0) - return params - -// return INVALID from either of these getters if you've tested the input and it's failed -/datum/emote/proc/getNumber(var/mob/user) - var/number = input("How many?", "Enter number") as null|num - return number - -/datum/emote/proc/getTarget(var/mob/user) - if(user.sdisabilities & BLIND || user.blinded || user.paralysis) - return - var/list/targets = list() - if(!mustTarget) - targets += "None" - var/target - if(targetMob) - target = getMobTarget(user, targets) - else - target = getAtomTarget(user, targets) - if(!target) - return INVALID - if(target == "None") - return - return target - -/datum/emote/proc/getMobTarget(var/mob/user, var/list/targets) - for(var/mob/M in view(getLoc(user))) - targets += M - var/mob/target = input("Select target", "Target Mob") as null|anything in targets - return target - - -/datum/emote/proc/getAtomTarget(var/mob/user, var/list/targets) - for(var/A in oview(getLoc(user))) - if(ismob(A) || isobj(A) || isturf(A)) - targets += A - var/atom/target = input("Select target", "Target") as null|anything in targets - return target - -// returns the reason the user can't currently do the emote -/datum/emote/proc/prevented(var/mob/user) - if(user.stat == DEAD) - return "you are dead" - if(user.stat == UNCONSCIOUS) - return "you are unconscious" - if(restrained && user.restrained()) - return "you are restrained" - if(isbrain(user)) - var/mob/living/carbon/brain/brain = user - if(!(brain.container && istype(brain.container, /obj/item/device/mmi))) - return "you need to be in an mmi to do this" - -// return 1 if this emote can be used by this type of user -/datum/emote/proc/available(var/mob/user) - return - -/datum/emote/proc/createMessage(var/mob/user, var/list/params) - if(!text) - return - var/message = "" - - if(doMime(user)) - message = mimeMessage(user, params) - if(message) - return message - - if(muzzleAffected && isMuzzled(user)) - message = muzzleMessage(user, params) - return message - - if(checkForParams(params)) - message = paramMessage(user, params) - return message - - message = standardMessage(user, params) - - return message - -/datum/emote/proc/isMuzzled(var/mob/user) - if(user.sdisabilities & MUTE || user.is_muzzled()) - return 1 - if(!isliving(user)) - return - var/mob/living/L = user - if(L.silent) - return 1 - -/datum/emote/proc/checkForParams(var/list/params) - for(var/p in params) - if(p == "target") - continue - return 1 - -/datum/emote/proc/addExtras(var/mob/user, var/list/params, var/message = "") - if(!message) - return - if(startText) - message = "[startText] [message]" - message = addPunc(message) - message = "[message]" - return message - -/datum/emote/proc/addPunc(var/message = "") - var/regex/endingPunc = new("\[\\.!\\?\"]$") - if(!endingPunc.Find(message)) - message += "." - return message - -/datum/emote/proc/standardMessage(var/mob/user, var/list/params) - var/message = "\The [user] [text]" - if("target" in params) - message = addTarget(user, params, message) - return message - -/datum/emote/proc/mimeMessage(var/mob/user, var/list/params) - if(!mimeText) - return - if(checkForParams(params)) - return paramMimeMessage(user, params) - var/message = "\The [user] [mimeText]" - if(message && "target" in params) - message = addTarget(user, params, message) - return message - -/datum/emote/proc/muzzleMessage(var/mob/user, var/list/params) - var/message = "\The [user] makes a " - if(muzzledNoise) - message += "[muzzledNoise] " - message += "noise" - return message - -// if the emote takes a non target parameter, set up and return the with parameter version in here -/datum/emote/proc/paramMessage(var/mob/user, var/list/params) - return - -// as above, but for mimes when there is mimeText -/datum/emote/proc/paramMimeMessage(var/mob/user, var/list/params) - return - -/datum/emote/proc/addTarget(var/mob/user, var/list/params, var/message = "") - if(!canTarget) - return message - if(!params["target"]) - return message - if(params["target"] == user) - message += " [targetText][getHimself(user)]" - return message - message += " [targetText]\the [params["target"]]" - return message - - -// What you should see when you perform the emote -/datum/emote/proc/createSelfMessage(var/mob/user, var/list/params, var/message = "") - if(!selfText) - return message - - message = replacetext(message, text, selfText) - message = changeTextMacros(user, message) - - if(mimeSelf) - message = replacetext(message, mimeText, mimeSelf) - - if(startText && !selfStart) - var/start = findtextEx(message, startText) - var/end = start + lentext(startText) + 1 - message = copytext(message, 1, start) + copytext(message, end, lentext(message) + 1) - - message = replaceMobWithYou(user, message, user) - - return message - -/datum/emote/proc/replaceMobWithYou(var/mob/M, var/message = "", var/mob/user) // user passed in in case an override needs to do something different if M != user (see johnny) VB - - message = replacetext(message, "\The [M]", "You") - message = replacetext(message, "\the [M]", "you") - - return message - -/datum/emote/proc/processMessage(var/mob/user, var/list/params, var/message = "") - var/visualOrAudible = audible + 1 - if(doMime(user)) - visualOrAudible = 1 - - log_emote("[user.name]/[user.key] : [message]") - sendToDead(user, message) - for(var/mob/M in getRecipients(getLoc(user, message), visualOrAudible)) - var/msg = "" - - if(M==user) - msg = createSelfMessage(user, params, message) - if(msg) - outputMessage(M, msg, user) - continue - - if(M.stat == UNCONSCIOUS || (M.sleeping && M.stat != DEAD)) - if(!visualOrAudible == 2) - continue - msg = "... You can almost hear someone talking ..." - outputMessage(M, msg, user) - continue - - if(M.sdisabilities & DEAF || M.ear_deaf) - if(M.sdisabilities & BLIND || M.blinded || M.paralysis) - continue - if(!(M in getRecipients(user, 1)) || M.see_invisible < user.invisibility) - continue - - msg = createDeafMessage(user, params, message) - if(!msg && visualOrAudible == 2) - continue - if(msg) - outputMessage(M, msg, user) - continue - - if(M.sdisabilities & BLIND || M.blinded || M.paralysis || (M.see_invisible < user.invisibility && visualOrAudible == 2)) - if(!(M in getRecipients(user, 2))) - continue - - msg = createBlindMessage(user, params, message) - if(!msg && visualOrAudible == 1) - continue - if(msg) - outputMessage(M, msg, user) - continue - - if(M.see_invisible < user.invisibility && visualOrAudible == 1) - continue - - msg = message - outputMessage(M, msg, user) - - if(visualOrAudible == 2) - handleListeningObjects(user, message) - - return visualOrAudible - -/datum/emote/proc/outputMessage(var/mob/M, var/msg = "", var/mob/user) - msg = replaceMobWithYou(M, msg, user) - to_chat(M, msg) - -/datum/emote/proc/getLoc(var/mob/user, var/message = "") - var/loc = checkForHolopad(user, message) - if(loc) - return loc - return user - -/datum/emote/proc/checkForHolopad(var/mob/user, var/message = "") - if(!isAI(user)) - return - var/mob/living/silicon/ai/AI = user - var/obj/machinery/hologram/holopad/T = AI.holo - if(!(T && T.hologram && T.master == AI)) - return - if(message) - to_chat(AI, "Holopad action relayed, [message]") - return T - -/datum/emote/proc/handleListeningObjects(var/mob/user, var/message = "") - // based on say code - var/omsg = replacetext(message, "[user] ", "") - var/list/listening_obj = new - for(var/atom/movable/A in view(HEARING_RANGE, user)) - if(istype(A, /mob)) - var/mob/M = A - for(var/obj/O in M.contents) - listening_obj |= O - else if(istype(A, /obj)) - var/obj/O = A - listening_obj |= O - for(var/obj/O in listening_obj) - O.hear_message(user, omsg) - -/datum/emote/proc/getRecipients(var/location, var/visualOrAudible) - if(visualOrAudible == 1) - return viewers(location) - return get_mobs_in_view(HEARING_RANGE, location) - -// set up different messages for blind people here. Empty will mean no message for -//non-audible emotes and the standard message for audible ones -/datum/emote/proc/createBlindMessage(var/mob/user, var/list/params, var/message) - if(audible && selfText) - message = "You hear someone [selfText]" - message = addExtras(message) - return message - -// set up different messages for deaf people here. Empty will mean no message for -// audible emotes and standard for non-audible ones -/datum/emote/proc/createDeafMessage(var/mob/user, var/list/params, var/message) - message = mimeMessage(user, params) - message = addExtras(message) - return message - -/datum/emote/proc/sendToDead(var/mob/user, var/message = "", var/ghostEmote) - for(var/mob/M in dead_mob_list) - if(!M.client || istype(M, /mob/new_player)) - continue //skip monkeys, leavers and new players - if(M.stat == DEAD) - if(ghostEmote && ((M.client.prefs.toggles & CHAT_GHOSTSIGHT) || (M in viewers(user)))) - M.show_message(message) - else if((M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(user))) - M.show_message(message) - -/datum/emote/proc/playSound(var/mob/user, var/list/params) - if(!sound) - return - playsound(user, sound, vol) - return 1 - -/datum/emote/proc/doMime(var/mob/user) - if(mimeText && user.mind && user.mind.miming) - return 1 - -//Emote Cooldown System (it's so simple!) -/datum/emote/proc/handle_emote_CD(var/mob/user) - if(user.emote_cd == 2) return 1 // Cooldown emotes were disabled by an admin, prevent use - if(user.emote_cd == 1) return 1 // Already on CD, prevent use - - user.emote_cd = 1 // Starting cooldown - - spawn(cooldown) - if(user.emote_cd == 2) return 1 // Don't reset if cooldown emotes were disabled by an admin during the cooldown - user.emote_cd = 0 // Cooldown complete, ready for more! - - return 0 // Proceed with emote -//--FalseIncarnate - -/datum/emote/proc/changeTextMacros(var/mob/user, var/message = "") - message = swapHisToYour(user, message) - message = swapHimselfToYourself(user, message) - return message - -/datum/emote/proc/getHis(var/mob/user) - var/his = "[user]\his" - his = copytext(his, lentext("[user]") + 1) - return his - -/datum/emote/proc/swapHisToYour(var/mob/user, var/message = "") - var/his = getHis(user) - message = replacetext(message, " [his] ", " your ") - return message - -/datum/emote/proc/getHimself(var/mob/user) - var/himself = "[user]\himself" - himself = copytext(himself, lentext("[user]") + 1) - return himself - -/datum/emote/proc/swapHimselfToYourself(var/mob/user, var/message) - var/himself = getHimself(user) - message = replacetext(message, "[himself]", "yourself") - return message - -/****************************************************************************************** - Emote Verbs -******************************************************************************************/ - -/datum/emote/proc/addVerbs(var/mob/user) - if(!istype(user)) - return - new /obj/emoteVerb(user, src, commands) - -// Dummy object to allow access to the verb, needed as verbs require a valid loc for setting the src -/obj/emoteVerb - var/datum/emote/emote - var/mob/owner - -/obj/emoteVerb/New(var/mob/user, var/datum/emote/toAccess) - if(!(istype(user))) - return - if(!(istype(toAccess))) - return - if(!toAccess.commands) - return - owner = user - emote = toAccess - name = "[emote]" - loc = user - user.verbs += new/obj/emoteVerb/proc/runEmote(src, emote.commands[1], emote.desc) - -/obj/emoteVerb/proc/runEmote() - set src = usr.contents - set category = "Emotes" - return usr.emoteHandler.runEmote(emote.commands[1]) - -/obj/emoteVerb/Destroy() - owner.verbs -= new/obj/emoteVerb/proc/runEmote(src, emote.commands[1]) - ..() - -/obj/emoteVerb/custom - -obj/emoteVerb/custom/New(var/mob/user) - if(!(istype(user))) - return - owner = user - name = "custom" - user.verbs += new/obj/emoteVerb/proc/runEmote(src, "custom", "Make your own emote") - -/obj/emoteVerb/custom/runEmote() - set src = usr.contents - set category = "Emotes" - return usr.emoteHandler.runEmote("me") - - - -/************************************************************************************************************************** - Custom Emotes -As these are made as needed, they aren't searched for the appropriate one. As such, you need to specify conditions for which -one is used in /datum/emote_handler/customEmote(). - -***************************************************************************************************************************/ - -/datum/emote/custom - name = "Custom emote" - baseLevel = 0 - -/datum/emote/custom/New(var/mob/user, var/message = "", var/isAudible) - if(!message) - message = getMessage(user) - text = message - audible = isAudible - -/datum/emote/custom/proc/getMessage(var/mob/user) -// user.set_typing_indicator(1) -// user.hud_typing = 1 - var/input = copytext(input(user,"What do you want to emote?", "Custom emote") as text|null,1,MAX_MESSAGE_LEN) -// user.hud_typing = 0 -// user.set_typing_indicator(0) - input = trim_strip_html_properly(input) - return input - -/datum/emote/custom/available(var/mob/user) - return 1 - -/datum/emote/custom/prevented(var/mob/user) - if(!user.use_me) - return "you are prevented from using custom emotes" - -// Yeah, no -/datum/emote/custom/createSelfMessage(var/mob/user, var/list/params, var/message = "") - return - -/datum/emote/custom/replaceMobWithYou(var/mob/M, var/message = "", var/mob/user) - return message - -/datum/emote/custom/ghost - name = "Ghost emote" - startText = "DEAD: " - emoteSpanClass = "game deadsay" - -/datum/emote/custom/ghost/prevented(var/mob/user) - . = ..() - if(.) - return - if(user.client.prefs.muted & MUTE_DEADCHAT) - return "you are muted from deadchat" - if(!(user.client.prefs.toggles & CHAT_DEAD)) - return "you have deadchat muted" - if(!user.client.holder) - if(!config.dsay_allowed) - return "deadchat is globally muted" - -/datum/emote/custom/ghost/getMessage(var/mob/user) - var/input = copytext(input(user,"What do you want to emote?", "Custom emote") as text|null,1,MAX_MESSAGE_LEN) - input = trim_strip_html_properly(input) - return input - -/datum/emote/custom/ghost/processMessage(var/mob/user, var/list/params, var/message = "") - if(!message) - return - log_emote("Ghost/[user.key] : [message]") - sendToDead(user, message, ghostEmote = 1) - diff --git a/code/datums/Emote_system/emote_handler.dm b/code/datums/Emote_system/emote_handler.dm deleted file mode 100644 index be962a72dc7..00000000000 --- a/code/datums/Emote_system/emote_handler.dm +++ /dev/null @@ -1,90 +0,0 @@ -/datum/emoteHandler - var/mob/owner - var/list/commands - -/datum/emoteHandler/New(var/mob/user) - owner = user - setupCommands() - -/datum/emoteHandler/proc/setupCommands(var/reset = 0) - spawn(0) // needed so at mob creation species is set before emotes are allocated - if(reset) - deleteEmoteVerbs() - commands = new/list() - for(var/e in emotes) - var/datum/emote/emote = e - if(emote.baseLevel || emote.allowParent) - var/datum/emote/found = searchTree(emote) - if(found) - for(var/command in found.commands) - commands[lowertext(command)] = found - found.addVerbs(owner) - -/datum/emoteHandler/proc/deleteEmoteVerbs() - for(var/obj/emoteVerb/E in owner.contents) - qdel(E) - -/datum/emoteHandler/proc/runEmote(var/command = "", var/message = "", var/audible = 0) // message and audible only used in custom emotes - if(!command) - return 0 - if(command == "help") - showCommands() - return 1 - - var/datum/emote/emote - - if(copytext(command, 1, 3) == "me" && !message && lentext(command) >= 4) - message = copytext(command, 4) - command = "me" - - if(command == "me") - emote = customEmote(message, audible) - if(!emote) - return 0 - - if(!commands[command] && !(command == "me")) - to_chat(owner, "Unknown emote, please check *help for emotes available to your character") - return 0 - - if(!emote) - emote = commands[command] - - if(!emote.available(owner)) // something's changed, remake the commands list, then try again to see if they've got a different version - setupCommands() - return runEmote(command, message, audible) - - var/prevented = emote.prevented(owner) - if(prevented) - to_chat(owner, "You can't do that because [prevented]!") - return 0 - return emote.doEmote(owner, command) - -/datum/emoteHandler/proc/showCommands() - var/emoteList = "Available emotes are " - var/commandAdded = 0 - for(var/c in commands) - if(commandAdded) - emoteList += ", " - emoteList += c - commandAdded = 1 - - to_chat(owner, emoteList) - -// recursive search of subtypes - starts checking at the lowest level and breaks out if it finds one that can be done -/datum/emoteHandler/proc/searchTree(var/datum/emote/emote) - var/list/subtypes = subtypesof(emote.type) - var/datum/emote/found - for(var/t in subtypes) - var/datum/emote/em = new t - if(em.allowParent) - continue - found = searchTree(em) - if(found) - return (found) - if(emote.available(owner)) - return emote - -/datum/emoteHandler/proc/customEmote(var/custom, var/audible) - if(isobserver(owner)) - return new /datum/emote/custom/ghost(owner, custom, audible) - return new /datum/emote/custom(owner, custom, audible) diff --git a/code/datums/Emote_system/emotes.dm b/code/datums/Emote_system/emotes.dm deleted file mode 100644 index fd17fcc3953..00000000000 --- a/code/datums/Emote_system/emotes.dm +++ /dev/null @@ -1,1735 +0,0 @@ - -/datum/emote/airguitar - name = "airguitar" - desc = "Makes the mob play an air guitar" - commands = list("airguitar") - text = "is strumming the air and headbanging like a safari chimp" - selfText = "are strumming the air and headbanging like a safari chimp" - restrained = 1 - -/datum/emote/airguitar/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/alarm - name = "alarm" - desc = "makes the mob sound an alarm" - commands = list("alarm") - text = "sounds an alarm" - selfText = "sound an alarm" - audible = 1 - -/datum/emote/alarm/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/alarm/createBlindMessage(var/mob/user, var/params, var/messaage) - return "You hear an alarm" - -/datum/emote/alert - name = "alert" - desc = "Makes the mob sound an alert" - commands = list("alert") - text = "lets out a distressed noise" - selfText = "let out a distressed noise" - audible = 1 - -/datum/emote/alert/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/beep - name = "beep" - desc = "makes the mob let out a beep" - commands = list("beep") - text = "beeps" - selfText = "beep" - audible = 1 - -/datum/emote/beep/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/beep/targetted - sound = 'sound/machines/twobeep.ogg' - cooldown = 50 - canTarget = 1 - targetMob = 1 - -/datum/emote/beep/targetted/available(var/mob/user) - if(user.is_mechanical()) - return 1 - -/datum/emote/blink - name = "blink" - desc = "Makes the mob blink" - commands = list("blink", "blinks") - text = "blinks" - selfText = "blink" - -/datum/emote/blink/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isbrain(user)) - return 1 - -/datum/emote/blink/rapid - name = "rapid blink" - desc = "Makes the mob blink rapidly" - commands = list("blink_r", "blinks_r") - allowParent = 1 - -/datum/emote/blink/rapid/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/blink/rapid/standardMessage(var/mob/user) - var/message = ..() - message += " rapidly" - return message - -/datum/emote/blush - name = "blush" - desc = "Makes the mob blush" - commands = list("blush", "blushes") - text = "blushes" - selfText = "blush" - -/datum/emote/blush/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/boop - name = "boop" - desc = "Makes the mob boop" - commands = list("boop", "boops") - text = "boops" - selfText = "boop" - -/datum/emote/boop/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/bounce - name = "bounce" - desc = "Makes the mob bounce" - commands = list("bounce", "bounces") - text = "bounces in place" - selfText = "bounce in place" - -/datum/emote/bounce/available(var/mob/user) - if(isslime(user)) - return 1 - -/datum/emote/bow - name = "bow" - desc = "Makes the mob bow" - commands = list("bow", "bows") - text = "bows" - selfText = "bow" - canTarget = 1 - targetMob = 1 - targetText = "to" - -/datum/emote/bow/available(var/mob/user) - if(isrobot(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/bow/prevented(var/mob/user) - . = ..() - if(!. && user.buckled) - return "you are buckled to something" - -/datum/emote/burp - name = "burp" - desc = "Makes the mob burp" - commands = list("burp", "burps") - text = "burps" - selfText = "burp" - audible = 1 - mimeText = "opens their mouth rather obnoxiously" - mimeSelf = "open your mouth rather obnoxiously" - muzzleAffected = 1 - muzzledNoise = "peculiar" - -/datum/emote/burp/available(var/mob/user) - if(ishuman(user)) - return 1 - if(islarva(user) || isalienadult(user)) - return 1 - -/datum/emote/buzz - name = "buzz" - desc = "Makes the mob buzz" - commands = list("buzz", "buzzes", "buzzs") - text = "buzzes" - selfText = "buzz" - audible = 1 - sound = 'sound/machines/buzz-sigh.ogg' - canTarget = 1 - targetMob = 1 - -/datum/emote/buzz/available(var/mob/user) - if(user.is_mechanical()) - return 1 - -/datum/emote/buzz/buzz2 - name = "buzz 2" - desc = "makes the mob buzz in an irritated way" - commands = list("buzz2") - text = "makes an irritated buzzing sound" - selfText = "make an irritated buzzing sound" - sound = "sound/machines/buzz-two.ogg" - allowParent = 1 - -/datum/emote/chirp - name = "chirp" - desc = "Makes the mob chirp" - commands = list("chirp", "chirps") - text = "chirps" - selfText = "chirp" - audible = 1 - sound = 'sound/misc/nymphchirp.ogg' - vol = 40 - cooldown = 50 - -/datum/emote/chirp/available(var/mob/user) - if(istype(user, /mob/living/simple_animal/diona)) - return 1 - -/datum/emote/choke - name = "choke" - desc = "Makes the mob choke" - commands = list("choke", "chokes") - text = "chokes" - selfText = "choke" - audible = 1 - mimeText = "clutches" - mimeSelf = "clutch" - muzzleAffected = 1 - muzzledNoise = "strong" - -/datum/emote/choke/available(var/mob/user) - if(ishuman(user)) - return 1 - if(islarva(user) || isalienadult(user)) - return 1 - -// This has to be done here not mimeText because \his will throw a compile error -// instead of a runtime if there's not a valid target in the string *frown VB -/datum/emote/choke/mimeMessage(var/mob/user, var/list/params) - var/message = "[user] [mimeText] \his throat desperately" - return message - -/datum/emote/chuckle - name = "chuckle" - desc = "chuckle" - commands = list("chuckle", "chuckles") - text = "chuckles" - selfText = "chuckle" - audible = 1 - mimeText = "appears to chuckle" - mimeSelf = "appear to chuckle" - muzzleAffected = 1 - -/datum/emote/chuckle/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/clap - name = "clap" - desc = "clap" - commands = list("clap", "claps") - text = "claps" - selfText = "clap" - audible = 1 - mimeText = "claps silently" - restrained = 1 - -/datum/emote/clap/available(var/mob/user) - if(isrobot(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/collapse - name = "collapse" - desc = "Makes the mob collapse" - commands = list("collapse", "collapses") - text = "collapses" - selfText = "collapse" - audible = 1 - mimeText = "collapses without a sound" - -/datum/emote/collapse/available(var/mob/user) - if(islarva(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/collapse/doAction(var/mob/user, var/list/params) - user.Paralyse(2) - -/datum/emote/cough - name = "cough" - desc = "Makes the mob cough" - commands = list("cough", "coughs") - text = "coughs" - selfText = "cough" - audible = 1 - mimeText = "appears to cough" - mimeSelf = "appear to cough" - muzzleAffected = 1 - muzzledNoise = "strong" - -/datum/emote/cough/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/cry - name = "cry" - desc = "Makes the mob cry" - commands = list("cry", "cries") - text = "cries" - selfText = "cry" - audible = 1 - mimeText = "cries silently" - muzzleAffected = 1 - muzzledNoise = "weak" - -/datum/emote/cry/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/dance - name = "dance" - desc = "makes the mob dance around happily" - commands = list("dance", "dances") - text = "dances around happily" - selfText = "dance around happily" - restrained = 1 - -/datum/emote/dance/available(var/mob/user) - if(islarva(user)) - return 1 - -/datum/emote/dap - name = "dap" - desc = "Makes the mob give daps" - commands = list("dap", "daps") - text = "gives daps" - selfText = "give daps" - restrained = 1 - canTarget = 1 - targetMob = 1 - targetText = "to" - -/datum/emote/dap/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/dap/addTarget(var/mob/user, var/list/params, var/message = "") - if(!params["target"] || params["target"] == user) - message = "[user] sadly can't find anybody to give daps to, and daps \himself. Shameful" - return message - return ..() - -/datum/emote/deathgasp - name = "deathgasp" - desc = "Makes the mob let out it's final gasp" - commands = list("deathgasp", "deathgasps") - audible = 1 - -/datum/emote/deathgasp/alien - text = "lets out a waning guttural screech, green blood bubbling from its maw..." - selfText = "let out a waning guttural screech, green blood bubbling from your maw..." - -/datum/emote/deathgasp/alien/available(var/mob/user) - if(isalienadult(user)) - return 1 - -// sorry, no selftext for humans as we'd have to add a var to species for it and that's yuk - VB -/datum/emote/deathgasp/human - text = "dummytext" - -/datum/emote/deathgasp/human/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/deathgasp/human/standardMessage(var/mob/user, var/list/params) - var/mob/living/carbon/human/U = user - var/message = "\The [user] [U.species.death_message]" - return message - -/datum/emote/deathgasp/human/createSelfMessage(var/mob/user, var/list/params, var/message) - return message - -/datum/emote/deathgasp/human/replaceMobWithYou(var/mob/user, var/message) - return message - -/datum/emote/deathgasp/robot - text = "shudders violently for a moment, then becomes motionless, its eyes slowly darkening" - selfText = "shudder violently for a moment, then become motionless, your eyes slowly darkening" - audible = 0 - -/datum/emote/deathgasp/robot/available(var/mob/user) - if(isrobot(user)) - return 1 - -/datum/emote/drone - name = "drone" - desc = "Makes the mob drone and rumble" - commands = list("drone", "drones", "rumble", "rumbles", "hum", "hums") - text = "rumbles" - selfText = "rumble" - audible = 1 - sound = 'sound/voice/DraskTalk.ogg' - canTarget = 1 - targetMob = 1 - -/datum/emote/drone/available(var/mob/user) - if(user.get_species() == "Drask") - return 1 - -/datum/emote/drone/addTarget(var/mob/user, var/list/params, var/message) - if(!params["target"]) - return message - message = replacetext(message, "rumbles", "drones") - return ..() - -/datum/emote/drone/createSelfMessage(var/mob/user, var/list/params, var/message) - message = ..() - message = replacetext(message, "drones", "drone") - return message - -/datum/emote/drool - name = "drool" - desc = "Makes the mob drool" - commands = list("drool", "drools") - text = "drools" - selfText = "drool" - -/datum/emote/drool/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/eyebrow - name = "eyebrow" - desc = "Makes the mob raise an eyebrow" - commands = list("eyebrow") - text = "raises an eyebrow" - selfText = "raise an eyebrow" - -/datum/emote/eyebrow/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/faint - name = "faint" - desc = "makes the mob faint" - commands = list("faint", "faints") - text = "faints" - selfText = "faint" - -/datum/emote/faint/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/faint/doAction(var/mob/user, var/list/params) - if(!user.sleeping) - user.sleeping += 1 - -/datum/emote/fart - name = "fart" - desc = "makes the mob fart" - commands = list("fart", "farts") - text = "farts" - selfText = "fart" - cooldown = 50 - audible = 1 - -/datum/emote/fart/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/fart/standardMessage(var/mob/user) - var/message - - if(TOXIC_FARTS in user.mutations) - message = "\The [user] unleashes a [pick("horrible","terrible","foul","disgusting","awful")] fart" - return message - message = "\The [user] [pick("passes wind","farts")]" - return message - -/datum/emote/fart/createSelfMessage(var/mob/user, var/list/params, var/message) - message = ..() - message = replacetext(message, "unleashes", "unleash") - message = replacetext(message, "passes", "pass") - return message - -/datum/emote/fart/doAction(var/mob/user) - if(TOXIC_FARTS in user.mutations) - for(var/mob/M in range(get_turf(user),2)) - if(M.internal != null && M.wear_mask && (M.wear_mask.flags & AIRTIGHT)) - continue - if(M == user) - continue - M.reagents.add_reagent("jenkem", 1) - - if(locate(/obj/item/weapon/storage/bible) in get_turf(user)) - to_chat(viewers(user), "[user] farted on the Bible!") - to_chat(viewers(user), "A mysterious force smites [user]!") - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(3, 1, user) - s.start() - user.gib() - -/datum/emote/flap - name = "flap" - desc = "Makes the mob flap their wings" - commands = list("flap", "flaps") - text = "flaps" - selfText = "flap" - restrained = 1 - audible = 1 - -/datum/emote/flap/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/flap/standardMessage(var/mob/user, var/list/params) - var/message = "\The [user] [text] \his wings" - return message - -/datum/emote/flap/angry - name = "angry flap" - desc = "makes the mob flap their wings angrily" - commands = list("a_flap", "a_flaps") - allowParent = 1 - -/datum/emote/flap/angry/standardMessage(var/mob/user) - var/message = ..() - message += " angrily" - return message - -/datum/emote/flash - name = "flash" - desc = "Makes the lights on the mob flash quickly" - commands = list("flash", "flashes") - text = "flash quickly" - selfText = "flash quickly" - startText = "The lights on" - -/datum/emote/flash/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/flip - name = "flip" - desc = "Makes the mob flip, possibly in the direction of someone" - commands = list("flip", "flips") - text = "flips" - selfText = "flip" - canTarget = 1 - targetMob = 1 - targetText = "in" - -/datum/emote/flip/available(var/mob/user) - if(isrobot(user)) - return 1 - -/datum/emote/flip/prevented(var/mob/user) - . = ..() - if(!. && user.buckled) - return "you are buckled to something" - -/datum/emote/flip/createMessage(var/mob/user, var/list/params) - var/message = "" - if(user.lying || user.weakened) - message = "\The [user] flops and flails around on the floor" - else - message = ..() - return message - -/datum/emote/flip/addTarget(var/mob/user, var/list/params, var/message) - message = ..() - if(params["target"]) - message += "'s general direction" - return message - -/datum/emote/flip/createSelfMessage(var/mob/user, var/list/params, var/message) - message = ..() - message = replacetext(message, "flops", "flop") - message = replacetext(message, "flails", "flail") - return message - -/datum/emote/flip/doAction(var/mob/user, var/list/params, var/message) - if(user.lying || user.weakened) - return - user.SpinAnimation(5,1) - -/datum/emote/flip/flipOver - desc = "Makes the mob flip, possibly in the direction of, or even over someone" - -/datum/emote/flip/flipOver/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/flip/flipOver/createMessage(var/mob/user, var/params) - var/message = "" - var/obj/item/weapon/grab/G = user.get_active_hand() - if(istype(G) && G.affecting && !G.affecting.buckled) - params["target"] = G.affecting - message = "\The [user] [text] over [params["target"]]!" - return message - return ..() - -/datum/emote/flip/flipOver/doAction(var/mob/user, var/params, var/message) - var/obj/item/weapon/grab/G = user.get_active_hand() - if(istype(G) && (G.affecting == params["target"]) && !G.affecting.buckled) - var/turf/oldloc = user.loc - var/turf/newloc = G.affecting.loc - if(isturf(oldloc) && isturf(newloc)) - user.SpinAnimation(5,1) - user.forceMove(newloc) - G.affecting.forceMove(oldloc) - return - ..() - -/datum/emote/frown - name = "frown" - desc = "Makes the mob frown" - commands = list("frown", "frowns") - text = "frowns" - selfText = "frown" - -/datum/emote/frown/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/gasp - name = "gasp" - desc = "Makes the mob gasp" - commands = list("gasp", "gasps") - text = "gasps" - selfText = "gasp" - audible = 1 - mimeText = "appears to be gasping" - mimeSelf = "appear to be gasping" - muzzleAffected = 1 - muzzledNoise = "weak" - -/datum/emote/gasp/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/giggle - name = "giggle" - desc = "Makes the mob giggle" - commands = list("giggle", "giggles") - text = "giggles" - selfText = "giggle" - audible = 1 - mimeText = "giggles silently" - muzzleAffected = 1 - -/datum/emote/giggle/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/glare - name = "glare" - desc = "Makes the mob glare" - commands = list("glare", "glares") - text = "glares" - selfText = "glare" - canTarget = 1 - targetMob = 1 - -/datum/emote/glare/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/gnarl - name = "gnarl" - desc = "Makes the mob gnarl and show its teeth" - commands = list("gnarl", "gnarls") - text = "gnarls and shows its teeth" - selfText = "gnarl and show your teeth" - audible = 1 - muzzleAffected = 1 - -/datum/emote/gnarl/available(var/mob/user) - if(islarva(user)) - return 1 - -/datum/emote/grin - name = "grin" - desc = "Makes the mob grin" - commands = list("grin", "grins") - text = "grins" - selfText = "grin" - -/datum/emote/grin/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/groan - name = "groan" - desc = "Makes the mob groan" - commands = list("groan", "groans") - text = "groans" - selfText = "groan" - audible = 1 - mimeText = "appears to groan" - mimeSelf = "appear to groan" - muzzleAffected = 1 - -/datum/emote/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/grumble - name = "grumble" - desc = "Makes the mob grumble" - commands = list("grumble", "grumbles") - text = "grumbles" - selfText = "grumble" - audible = 1 - mimeText = "grumbles" - muzzleAffected = 1 - -/datum/emote/grumble/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/halt - name = "halt" - desc = "Makes the mob sound a halt warning. Only available with a security module" - commands = list("halt") - text = "'s speakers skreech, \"Halt! Security!\"" - selfText = " speakers skreech, \"Halt! Security!\"" - audible = 1 - sound = 'sound/voice/halt.ogg' - -/datum/emote/halt/available(var/mob/user) - if(isrobot(user)) - return 1 - -/datum/emote/halt/prevented(var/mob/user) - . = ..() - if(.) - return - var/mob/living/silicon/robot/U = user - if(!(istype(U.module, /obj/item/weapon/robot_module/security))) - return "you are not security" - -/datum/emote/handshake - name = "handshake" - desc = "Makes the mob shake hands with a target" - commands = list("handshake") - text = "shakes hands" - selfText = "shake hands" - canTarget = 1 - targetMob = 1 - mustTarget = 1 - targetText = "with" - restrained = 1 - -/datum/emote/handshake/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/handshake/prevented(var/mob/user) - . = ..() - if(!. && user.r_hand) - return "you need your right hand free" - -/datum/emote/handshake/addTarget(var/mob/user, var/list/params, var/message) - var/mob/target = params["target"] - if(target.r_hand) - message = "\The [user] holds out his hand to [params["target"]]" - return message - return ..() - -/datum/emote/hiss - name = "hiss" - desc = "Makes the mob hiss" - commands = list("hiss", "hisses") - text = "hisses" - selfText = "hiss" - audible = 1 - -/datum/emote/hiss/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - -/datum/emote/hug - name = "hug" - desc = "Makes the mob hug a target or themselves" - commands = list("hug", "hugs") - text = "hugs" - selfText = "hug" - canTarget = 1 - targetMob = 1 - targetText = "" - -/datum/emote/hug/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/hug/getTarget(var/mob/user) - var/mob/target = ..() - if(target) - return target - return user - -/datum/emote/jiggle - name = "jiggle" - desc = "Makes the mob jiggle" - commands = list("jiggle", "jiggles") - text = "jiggles" - selfText = "jiggle" - -/datum/emote/jiggle/available(var/mob/user) - if(isslime(user)) - return 1 - -/datum/emote/johnny - name = "johnny" - desc = "Yeah, just try it" - commands = list("johnny") - text = "takes a drag from a cigarette and blows their name out in smoke" - selfText = "take a drag from a cigarette and blow their name out in smoke" - audible = 1 - mimeText = "takes a drag from a cigarette and blows" - mimeSelf = "take a drag from a cigarette and blow" - canTarget = 1 - targetMob = 1 - mustTarget = 1 - targetText = "" - -/datum/emote/johnny/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/johnny/getTarget(var/mob/user) - var/mob/target = ..() - if(target != user) - return target - to_chat(user, "You need a target that isn't yourself") - return INVALID - -/datum/emote/johnny/createMessage(var/mob/user, var/params) - if(doMime(user)) - return ..() - var/message = "\The [user] says \"[params["target"]], please. They had a family.\" [user] [text]" - return message - -/datum/emote/johnny/createSelfMessage(var/mob/user, var/list/params, var/message = "") - message = ..() - message = replacetext(message, "says", "say") - return message - -/datum/emote/johnny/createDeafMessage(var/mob/user, vap/list/params, var/message) - message = "\The [user] says something, then [text]" - return message - -/datum/emote/johnny/replaceMobWithYou(var/mob/M, var/message, var/mob/user) - if(user && M != user) - return message - return ..() - -/datum/emote/johnny/createBlindMessage(var/mob/user, var/list/params, var/message) - message = "You hear someone say \"[params["target"]], please, They had a family\"" - return message - -/datum/emote/jump - name = "jump" - desc = "Makes the mob jump" - commands = list("jump", "jumps") - text = "jumps" - selfText = "jump" - -/datum/emote/jump/available(var/mob/user) - if(islarva(user) || isalienadult(user)) - return 1 - if(issmall(user)) - return 1 - -/datum/emote/laugh - name = "laugh" - desc = "Makes the mob laugh" - commands = list("laugh", "laughs") - text = "laughs" - selfText = "laugh" - audible = 1 - mimeText = "acts out a laugh" - mimeSelf = "act out a laugh" - muzzleAffected = 1 - -/datum/emote/laugh/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/law - name = "law" - desc = "Makes the mob prove it is the law" - commands = list("law") - text = "shows its legal authorization barcode" - selfText = "show your legal authorization barcode" - audible = 1 - sound = 'sound/voice/biamthelaw.ogg' - -/datum/emote/law/available(var/mob/user) - if(isrobot(user)) - return 1 - -/datum/emote/law/prevented(var/mob/user) - . = ..() - if(.) - return - var/mob/living/silicon/robot/U = user - if(!(istype(U.module, /obj/item/weapon/robot_module/security))) - return "You are not THE LAW, pal" - -/datum/emote/light - name = "light" - desc = "makes the mob light up" - commands = list("light", "lights") - text = "lights up for a bit, then stops" - selfText = "light up for a bit, then stop" - -/datum/emote/light/available(var/mob/user) - if(isslime(user)) - return 1 - -/datum/emote/look - name = "look" - desc = "Makes the mob look" - commands = list("look", "looks") - text = "looks" - selfText = "look" - canTarget = 1 - targetMob = 1 - -/datum/emote/look/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/look/addTarget(var/mob/user, var/list/params, var/message) - if(!params["target"]) - message += " around" - return message - return ..() - -/datum/emote/moan - name = "moan" - desc = "Makes the mob moan" - commands = list("moan", "moans") - text = "moans" - selfText = "moan" - audible = 1 - -/datum/emote/moan/available(var/mob/user) - if(isslime(user)) - return 1 - if(islarva(user)) - return 1 - -/datum/emote/mumble - name = "mumble" - desc = "Makes the mob mumble" - commands = list("mumble", "mumbles") - text = "mumbles" - selfText = "mumble" - audible = 1 - mimeText = "mumbles" - -/datum/emote/mumble/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/no - name = "no" - desc = "Makes the mob let out a negative blip" - commands = list("no") - text = "emits a negative blip" - selfText = "emit a negative blip" - audible = 1 - sound = 'sound/machines/synth_no.ogg' - -/datum/emote/no/New() - ..() - commands += "no" - -/datum/emote/no/available(var/mob/user) - if(user.is_mechanical()) - return 1 - -/datum/emote/nod - name = "nod" - desc = "Makes the mob nod" - commands = list("nod", "nods") - text = "nods" - selfText = "nod" - -/datum/emote/nod/available(var/mob/user) - if(islarva(user)) - return 1 - if(isrobot(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/notice - name = "notice" - desc = "Makes the mob play a loud tone" - commands = list("notice") - text = "plays a loud tone" - selfText = "play a loud tone" - audible = 1 - -/datum/emote/notice/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/pale - name = "pale" - desc = "Makes the mob go pale" - commands = list("pale", "pales") - text = "goes pale for a second" - selfText = "go pale for a second" - -/datum/emote/pale/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/ping - name = "ping" - desc = "Makes the mob ping" - commands = list("ping", "pings") - text = "pings" - selfText = "ping" - audible = 1 - sound = 'sound/machines/ping.ogg' - canTarget = 1 - targetMob = 1 - -/datum/emote/ping/available(var/mob/user) - if(user.is_mechanical()) - return 1 - -/datum/emote/point - name = "point" - desc = "Makes the mob point" - commands = list("point", "points") - text = "points" - selfText = "point" - canTarget = 1 - -/datum/emote/point/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/point/createMessage(var/mob/user, var/list/params) - if(params["target"]) - return - return ..() - -/datum/emote/point/doAction(var/mob/user, var/list/params) - if(!params["target"]) - return - user.pointed(params["target"]) - -/datum/emote/quiver - name = "quiver" - desc = "Makes the mob quiver" - commands = list("quiver", "quivers") - text = "quivers" - selfText = "quiver" - -/datum/emote/quiver/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/raise - name = "raise" - desc = "Makes the mob raise a hand" - commands = list("raise", "raises") - text = "raises a hand" - selfText = "raise a hand" - restrained = 1 - -/datum/emote/raise/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/roar - name = "roar" - desc = "Makes the mob roar" - commands = list("roar", "roars") - text = "roars" - selfText = "roar" - audible = 1 - muzzleAffected = 1 - muzzledNoise = "loud" - -/datum/emote/roar/available(var/mob/user) - if(isalienadult(user)) - return 1 - -/datum/emote/roll - name = "roll" - desc = "Makes the mob roll" - commands = list("roll", "rolls") - text = "rolls" - selfText = "roll" - -/datum/emote/roll/available(var/mob/user) - if(islarva(user)) - return 1 - if(issmall(user)) - return 1 - -/datum/emote/salute - name = "salute" - desc = "Makes the mob salute" - commands = list("salute", "salutes") - text = "salutes" - selfText = "salute" - canTarget = 1 - targetMob = 1 - targetText = "to" - -/datum/emote/salute/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/salute/prevented(var/mob/user) - . = ..() - if(!. && user.buckled) - return "you are buckled to something" - -/datum/emote/salute/getMobTarget(var/mob/user, var/list/targets) - var/mob/target = ..() - if(target != user) - return target - -/datum/emote/scratch - name = "scratch" - desc = "Makes the mob scratch" - commands = list("scratch", "scratches") - text = "scratches" - selfText = "scratch" - restrained = 1 - -/datum/emote/scratch/available(var/mob/user) - if(islarva(user) || isalienadult(user)) - return 1 - if(issmall(user)) - return 1 - -/datum/emote/scream - name = "scream" - desc = "makes the mob scream" - commands = list("scream", "screams") - text = "screams!" - selfText = "scream!" - audible = 1 - mimeText = "acts out a scream" - muzzledNoise = "very loud" - cooldown = 50 - vol = 80 - -/datum/emote/scream/createMessage(var/mob/user, var/list/params) - var/mob/living/carbon/human/H = user - - if(istype(H)) - return "\The [user] [H.species.scream_verb]!" - else - return ..() - -/datum/emote/scream/replaceMobWithYou(var/mob/M, var/message = "", var/mob/user) - var/mob/living/carbon/human/H = user - - if(istype(H) && (H.species.scream_verb != "screams")) - return message - return ..() - -/datum/emote/scream/machine - name = "machine scream" - sound = 'sound/goonstation/voice/robot_scream.ogg' - -/datum/emote/scream/machine/available(var/mob/user) - if(user.is_mechanical()) - return 1 - -/datum/emote/scream/human - name = "human scream" - -/datum/emote/scream/human/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/scream/human/playSound(var/mob/user) - var/mob/living/carbon/human/H = user - - if(H.gender == FEMALE) - playsound(H, "[H.species.female_scream_sound]", vol, 1, 0, pitch = H.get_age_pitch()) - else - playsound(H, "[H.species.male_scream_sound]", vol, 1, 0, pitch = H.get_age_pitch()) - return 1 - -/datum/emote/scretch - name = "scretch" - desc = "makes the mob scretch" //whatever that is! - commands = list("scretch", "scretches") - text = "scretches" - selfText = "scretch" - audible = 1 - muzzleAffected = 1 - -/datum/emote/scretch/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - -/datum/emote/shake - name = "shake" - desc = "Makes the mob shake its head" - commands = list("shake", "shakes") - text = "shakes" - selfText = "shake" - -/datum/emote/shake/available(var/mob/user) - if(islarva(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/shake/standardMessage(var/mob/user) - var/message = ..() - message += " [getHis(user)] head" - return message - -/datum/emote/shiver - name = "shiver" - desc = "Makes the mob shiver" - commands = list("shiver", "shivers") - text = "shivers" - selfText = "shiver" - audible = 1 - mimeText = "shivers" - -/datum/emote/shiver/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - if(isslime(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/shiver/createBlindMessage(var/mob/user, var/list/params, var/message) - message = "you hear someone's teeth chattering together" - -/datum/emote/shrug - name = "shrug" - desc = "Makes the mob shrug" - commands = list("shrug", "shrugs") - text = "shrugs" - selfText = "shrug" - -/datum/emote/shrug/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/sigh - name = "sigh" - desc = "Makes the mob sigh" - commands = list("sigh", "sighs") - text = "sighs" - selfText = "sigh" - audible = 1 - mimeText = "sighs" - muzzleAffected = 1 - muzzledNoise = "weak" - -/datum/emote/sigh/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/sign - name = "sign" - desc = "Makes the mob sign a number" - commands = list("sign", "signs") - text = "signs" - selfText = "sign" - restrained = 1 - takesNumber = 1 - -/datum/emote/sign/available(var/mob/user) - if(isalienadult(user) || islarva(user)) - return 1 - -/datum/emote/sign/getNumber(var/mob/user) - var/number = ..() - if(number == null) - to_chat(user, "You need a number to sign") - return INVALID - return number - -/datum/emote/sign/paramMessage(var/mob/user, var/list/params) - var/message = "\The [user] [text] [params["num"]]" - return message - -/datum/emote/sign/fingers - desc = "Makes the mob raise a number of fingers" - text = "raises" - selfText = "raise" - -/datum/emote/sign/fingers/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/sign/fingers/getNumber(var/mob/user) - var/number = ..() - if(number == INVALID) - return INVALID - var/fingersAvailable = 0 - if(!user.r_hand) - fingersAvailable += 5 - if(!user.l_hand) - fingersAvailable += 5 - if(fingersAvailable < number) - to_chat(user, "You don't have enough fingers free") - return INVALID - return number - -/datum/emote/sign/fingers/paramMessage(var/mob/user, var/list/params) - var/message = "\The [user] [text] [params["num"]] finger\s" // no, we can't just add " finger\s" to the parent version because the text macro won't work then :( VB - return message - -/datum/emote/slap - name = "slap" - desc = "makes the mob slap someone" - commands = list("slap", "slaps") - text = "slaps" - selfText = "slap" - audible = 1 - sound = 'sound/effects/snap.ogg' - canTarget = 1 - targetMob = 1 - targetText = "" - -/datum/emote/slap/New() - ..() - cooldown = 0 - -/datum/emote/slap/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/slap/getMobTarget(var/mob/user, var/list/targets) - for(var/mob/M in view(getLoc(user), 1)) - targets += M - var/mob/target = input("Select target", "Target Mob") as null|anything in targets - if(target == "None") - target = user - return target - -/datum/emote/slap/createBlindMessage(var/mob/user, var/list/params, var/message) - message = ..() - message = replacetext(message, "someone", "a") - return message - -/datum/emote/slap/doAction(var/mob/user, var/list/params) - if(user == params["target"]) - var/mob/living/U = user - U.adjustFireLoss(4) - -/datum/emote/smile - name = "smile" - desc = "Makes the mob smile" - commands = list("smile", "smiles") - text = "smiles" - selfText = "smile" - -/datum/emote/smile/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/snap - name = "snap" - desc = "Makes the mob snap it's fingers" - commands = list("snap", "snaps") - text = "snaps" - selfText = "snap" - audible = 1 - sound = 'sound/effects/fingersnap.ogg' - -/datum/emote/snap/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/snap/prevented(var/mob/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user - var/obj/item/organ/external/L = H.get_organ("l_hand") - var/obj/item/organ/external/R = H.get_organ("r_hand") - var/left_hand_good = 0 - var/right_hand_good = 0 - if(L && (!(L.status & ORGAN_DESTROYED)) && (!(L.status & ORGAN_SPLINTED)) && (!(L.status & ORGAN_BROKEN))) - left_hand_good = 1 - if(R && (!(R.status & ORGAN_DESTROYED)) && (!(R.status & ORGAN_SPLINTED)) && (!(R.status & ORGAN_BROKEN))) - right_hand_good = 1 - - if(!left_hand_good && !right_hand_good) - return "You need at least one hand in good working order to snap your fingers" - -/datum/emote/snap/standardMessage(var/mob/user, var/list/params) - var/message = ..() - message += " [getHis(user)] fingers" - params["prob"] = prob(5) - if(!params["prob"]) - return message - message += " right off!" - return message - -/datum/emote/snap/playSound(var/mob/user, var/list/params) - if(params["prob"]) - playsound(user.loc, 'sound/effects/snap.ogg', 50, 1) - return 1 - return ..() - -/datum/emote/snap/createBlindMessage(var/mob/user, var/list/params, var/message) - message = ..() - message += " their fingers" - return message - -/datum/emote/snap/createDeafMessage(var/mob/user, var/list/params, var/message) - return message - -/datum/emote/sneeze - name = "sneeze" - desc = "Makes the mob sneeze" - commands = list("sneeze", "sneezes") - text = "sneezes" - selfText = "sneeze" - audible = 1 - mimeText = "sneeze" - muzzleAffected = 1 - muzzledNoise = "strange" - -/datum/emote/sneeze/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/sniff - name = "sniff" - desc = "Makes the mob sniff" - commands = list("sniff", "sniffs") - text = "sniffs" - selfText = "sniff" - audible = 1 - mimeText = "sniffs" - -/datum/emote/sniff/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/snore - name = "snore" - desc = "Makes the mob snore" - commands = list("snore", "snores") - text = "snores" - selfText = "snore" - audible = 1 - mimeText = "sleeps soundly" - mimeSelf = "sleep soundly" - muzzleAffected = 1 - -/datum/emote/snore/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/squish - name = "squish" - desc = "Makes the mob squish" - commands = list("squish", "squishes") - text = "squishes" - selfText = "squish" - audible = 1 - sound = 'sound/effects/slime_squish.ogg' - canTarget = 1 - targetMob = 1 - -/datum/emote/squish/available(var/mob/user) - if(isslime(user)) - return 1 - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.species.name == "Slime People") //Only Slime People can squish - return 1 - for(var/obj/item/organ/external/L in H.organs) // if your limbs are squishy you can squish too! - if(L.dna.species =="Slime People") - return 1 - -/datum/emote/stare - name = "stare" - desc = "Makes the mob stare" - commands = list("stare", "stares") - text = "stares" - selfText = "stare" - canTarget = 1 - targetMob = 1 - -/datum/emote/stare/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/sulk - name = "sulk" - desc = "Makes the mob sulk" - commands = list("sulk", "sulks") - text = "sulks down sadly" - selfText = "sulk down sadly" - -/datum/emote/sulk/available(var/mob/user) - if(islarva(user)) - return 1 - -/datum/emote/sway - name = "sway" - desc = "Makes the mob sway" - commands = list("sway", "sways") - text = "sways around dizzily" - selfText = "sway around dizzily" - -/datum/emote/sway/available(var/mob/user) - if(islarva(user)) - return 1 - if(isslime(user)) - return 1 - -/datum/emote/tail - name = "tail" - desc = "Makes the mob wave it's tail" - commands = list("tail") - text = "waves it's tail" - selfText = "wave your tail" - -/datum/emote/tail/available(var/mob/user) - if(islarva(user) || isalienadult(user)) - return 1 - if(issmall(user)) - return 1 - -/datum/emote/tail/wag - name = "wag" - desc = "Makes the mob start wagging its tail" - commands = list("wag", "wags") - text = "starts" - selfText = "start" - -/datum/emote/tail/wag/available(var/mob/user) - if(issmall(user)) - return - if(ishuman(user)) - return 1 - -/datum/emote/tail/wag/prevented(var/mob/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user - if(H.species.bodyflags & TAIL_WAGGING) - if(H.wear_suit && (H.wear_suit.flags_inv & HIDETAIL || istype(H.wear_suit, /obj/item/clothing/suit/space))) - return "your clothing is stopping you wag your tail" - return - if(!H.body_accessory) - return "you have no tail to wag!" - if(!H.body_accessory.try_restrictions()) - return "your clothing is stopping you wag your tail" - -/datum/emote/tail/wag/standardMessage(var/mob/user, var/list/params) - var/message = ..() - message += " wagging [getHis(user)] tail" - return message - -/datum/emote/tail/wag/doAction(var/mob/user, var/list/params) - var/mob/living/carbon/human/H = user - H.start_tail_wagging(1) - -/datum/emote/tail/wag/stop - name = "swag" - desc = "Makes the mob stop wagging its tail" - commands = list("swag", "swags") - text = "stops" - selfText = "stop" - allowParent = 1 - -// seemingly no way to tell if a mob is wagging it's tail! VB -/datum/emote/tail/wag/stop/prevented(var/mob/user) - . = ..() - if(.) - return - var/mob/living/carbon/human/H = user - if(!(H.species.bodyflags & TAIL_WAGGING) && !H.body_accessory) - return "you can't stop wagging a tail you don't have!" - -/datum/emote/tail/wag/stop/doAction(var/mob/user, var/list/params) - var/mob/living/carbon/human/H = user - H.stop_tail_wagging(1) - -/datum/emote/tremble - name = "tremble" - desc = "Makes the mob tremble" - commands = list("tremble", "trembles") - text = "trembles" - selfText = "tremble" - -/datum/emote/tremble/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/twitch_s - name = "twitch_s" - desc = "Makes the mob twitch" - commands = list("twitch_s", "twitches_s") - text = "twitches" - selfText = "twitch" - -/datum/emote/twitch_s/available(var/mob/user) - if(ishuman(user)) - return 1 - if(isrobot(user)) - return 1 - -/datum/emote/twitch_s/twitch - name = "twitch" - desc = "Makes the mob twitch violently" - commands = list("twitch", "twitches") - allowParent = 1 - -/datum/emote/twitch_s/twitch/available(var/mob/user) - if(isslime(user)) - return 1 - if(islarva(user)) - return 1 - return ..() - -/datum/emote/twitch_s/twitch/standardMessage(var/mob/user, var/list/params) - var/message = ..() - message += " violently" - return message - -/datum/emote/vibrate - name = "vibrate" - desc = "Makes the mob vibrate" - commands = list("vibrate", "vibrates") - text = "vibrates" - selfText = "vibrate" - -/datum/emote/vibrate/available(var/mob/user) - if(isslime(user)) - return 1 - -/datum/emote/wave - name = "wave" - desc = "Makes the mob wave" - commands = list ("wave", "waves") - text = "waves" - selfText = "wave" - -/datum/emote/wave/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/whimper - name = "whimper" - desc = "Makes the mob whimper" - commands = list("whimper", "whimpers") - text = "whimpers" - selfText = "whimper" - audible = 1 - mimeText = "appears hurt" - mimeSelf = "appear hurt" - muzzleAffected = 1 - -/datum/emote/whimper/available(var/mob/user) - if(islarva(user) || isalienadult(user)) - return 1 - if(ishuman(user)) - return 1 - -/datum/emote/whistle - name = "whistle" - desc = "Makes the mob whistle" - commands = list("whistle", "whistles") - text = "whistles" - selfText = "whistle" - audible = 1 - -/datum/emote/whistle/available(var/mob/user) - if(isbrain(user)) - return 1 - -/datum/emote/wink - name = "wink" - desc = "Makes the mob wink" - commands = list("wink", "winks") - text = "winks" - selfText = "wink" - -/datum/emote/wink/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/yawn - name = "yawn" - desc = "makes the mob yawn" - commands = list("yawn", "yawns") - text = "yawns" - selfText = "yawn" - audible = 1 - mimeText = "yawns" - muzzleAffected = 1 - -/datum/emote/yawn/available(var/mob/user) - if(ishuman(user)) - return 1 - -/datum/emote/yes - name = "yes" - desc = "Makes the mob let out an affirmative beep" - commands = list("yes") - text = "lets out an affirmative beep" - selfText = "let out an affirmative beep" - audible = 1 - sound = 'sound/machines/synth_yes.ogg' - canTarget = 1 - targetMob = 1 - -/datum/emote/yes/available(var/mob/user) - if(user.is_mechanical()) - return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index 99f670c258e..3ec0f16358a 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -91,12 +91,12 @@ Bonus if(prob(15)) M.reagents.add_reagent("morphine",rand(5,7)) if(4) - M.reagents.add_reagent_list(list("ethanol",rand(7,15),"lsd",rand(5,10))) + M.reagents.add_reagent_list(list("ethanol"=rand(7,15),"lsd"=rand(5,10))) to_chat(M, "You try to focus on not dying.") if(prob(20)) M.reagents.add_reagent("morphine",rand(5,7)) if(5) - M.reagents.add_reagent_list(list("haloperidol",rand(5,15),"ethanol",rand(7,20),"lsd",rand(5,15))) + M.reagents.add_reagent_list(list("haloperidol"=rand(5,15),"ethanol"=rand(7,20),"lsd"=rand(5,15))) to_chat(M, "u can count 2 potato!") if(prob(25)) M.reagents.add_reagent("morphine",rand(5,7)) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index a3d9dbd8442..52f6c13784f 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -150,9 +150,9 @@ if (istype(current, /mob/living/carbon/human)) /** Impanted**/ if(isloyal(H)) - text = "Loyalty Implant:Remove|Implanted
" + text = "Mindshield Implant:Remove|Implanted
" else - text = "Loyalty Implant:No Implant|Implant him!
" + text = "Mindshield Implant:No Implant|Implant him!
" sections["implant"] = text /** REVOLUTION ***/ text = "revolution" @@ -653,27 +653,27 @@ if(I && I.implanted) I.removed(H) qdel(I) - to_chat(H, "\blue Your loyalty implant has been deactivated.") - log_admin("[key_name(usr)] has deactivated [key_name(current)]'s loyalty implant") - message_admins("[key_name_admin(usr)] has deactivated [key_name_admin(current)]'s loyalty implant") + to_chat(H, "\blue Your mindshield implant has been deactivated.") + log_admin("[key_name(usr)] has deactivated [key_name(current)]'s mindshield implant") + message_admins("[key_name_admin(usr)] has deactivated [key_name_admin(current)]'s mindshield implant") if("add") var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 H.sec_hud_set_implants() - log_admin("[key_name(usr)] has given [key_name(current)] a loyalty implant") - message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a loyalty implant") + log_admin("[key_name(usr)] has given [key_name(current)] a mindshield implant") + message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a mindshield implant") - to_chat(H, "\red You somehow have become the recepient of a loyalty transplant, and it just activated!") + to_chat(H, "\red You somehow have become the recepient of a mindshield transplant, and it just activated!") if(src in ticker.mode.revolutionaries) special_role = null ticker.mode.revolutionaries -= src - to_chat(src, "\red The nanobots in the loyalty implant remove all thoughts about being a revolutionary. Get back to work!") + to_chat(src, "\red The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!") if(src in ticker.mode.head_revolutionaries) special_role = null ticker.mode.head_revolutionaries -=src - to_chat(src, "\red The nanobots in the loyalty implant remove all thoughts about being a revolutionary. Get back to work!") + to_chat(src, "\red The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!") if(src in ticker.mode.cult) ticker.mode.cult -= src ticker.mode.update_cult_icons_removed(src) @@ -681,7 +681,7 @@ var/datum/game_mode/cult/cult = ticker.mode if (istype(cult)) cult.memorize_cult_objectives(src) - to_chat(current, "\red The nanobots in the loyalty implant remove all thoughts about being in a cult. Have a productive day!") + to_chat(current, "\red The nanobots in the mindshield implant remove all thoughts about being in a cult. Have a productive day!") memory = "" else if (href_list["revolution"]) @@ -1516,6 +1516,19 @@ spell.action.Grant(new_character) return +/datum/mind/proc/get_ghost(even_if_they_cant_reenter) + for(var/mob/dead/observer/G in dead_mob_list) + if(G.mind == src) + if(G.can_reenter_corpse || even_if_they_cant_reenter) + return G + break + +/datum/mind/proc/grab_ghost(force) + var/mob/dead/observer/G = get_ghost(even_if_they_cant_reenter = force) + . = G + if(G) + G.reenter_corpse() + //Initialisation procs /mob/proc/mind_initialize() if(mind) diff --git a/code/datums/spells/genetic.dm b/code/datums/spells/genetic.dm index d4a9d1d1d8e..036e2158989 100644 --- a/code/datums/spells/genetic.dm +++ b/code/datums/spells/genetic.dm @@ -24,9 +24,14 @@ target:hulk_time=world.time + duration */ target.sdisabilities |= sdisabilities target.update_mutations() //update target's mutation overlays + var/mob/living/carbon/human/H = target + if(ishuman(target)) + H.update_body() spawn(duration) target.mutations.Remove(mutations) target.sdisabilities &= ~sdisabilities target.update_mutations() + if(ishuman(target)) + H.update_body() return \ No newline at end of file diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm index ca146933558..8a056245b16 100644 --- a/code/datums/spells/wizard.dm +++ b/code/datums/spells/wizard.dm @@ -53,6 +53,15 @@ action_icon_state = "mutate" +/obj/effect/proc_holder/spell/targeted/genetic/mutate/cast(list/targets) + for(var/mob/living/target in targets) + target.dna.SetSEState(HULKBLOCK, 1) + genemutcheck(target, HULKBLOCK, null, MUTCHK_FORCED) + spawn(duration) + target.dna.SetSEState(HULKBLOCK, 0) + genemutcheck(target, HULKBLOCK, null, MUTCHK_FORCED) + ..() + /obj/effect/proc_holder/spell/targeted/smoke name = "Smoke" desc = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb." diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index be25ea14f1f..fe65e44ddec 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -375,10 +375,10 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /////// Implants & etc /datum/supply_packs/security/armory/loyalty - name = "Loyalty Implants Crate" + name = "Mindshield Implants Crate" contains = list (/obj/item/weapon/storage/lockbox/loyalty) cost = 40 - containername = "loyalty implant crate" + containername = "mindshield implant crate" /datum/supply_packs/security/armory/trackingimp name = "Tracking Implants Crate" diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index ad13d541d96..d9bcc547a72 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -378,6 +378,15 @@ var/list/uplink_items = list() gamemodes = list(/datum/game_mode/nuclear) surplus = 0 +/datum/uplink_item/dangerous/sniper + name = "Sniper Rifle" + desc = "Ranged fury, Syndicate style. guaranteed to cause shock and awe or your TC back!" + reference = "SSR" + item = /obj/item/weapon/gun/projectile/automatic/sniper_rifle/syndicate + cost = 16 + surplus = 25 + gamemodes = list(/datum/game_mode/nuclear) + /datum/uplink_item/dangerous/crossbow name = "Energy Crossbow" desc = "A miniature energy crossbow that is small enough both to fit into a pocket and to slip into a backpack unnoticed by observers. Fires bolts tipped with toxin, a poisonous substance that is the product of a living organism. Stuns enemies for a short period of time. Recharges automatically." @@ -620,6 +629,38 @@ var/list/uplink_items = list() gamemodes = list(/datum/game_mode/nuclear) surplus = 0 +/datum/uplink_item/ammo/sniper + cost = 4 + gamemodes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/ammo/sniper/basic + name = ".50 Magazine" + desc = "An additional standard 6-round magazine for use with .50 sniper rifles." + reference = "50M" + item = /obj/item/ammo_box/magazine/sniper_rounds + +/datum/uplink_item/ammo/sniper/soporific + name = ".50 Soporific Magazine" + desc = "A 3-round magazine of soporific ammo designed for use with .50 sniper rifles. Put your enemies to sleep today!" + reference = "50S" + item = /obj/item/ammo_box/magazine/sniper_rounds/soporific + cost = 6 + +/datum/uplink_item/ammo/sniper/haemorrhage + name = ".50 Haemorrhage Magazine" + desc = "A 5-round magazine of haemorrhage ammo designed for use with .50 sniper rifles; causes heavy bleeding \ + in the target." + reference = "50B" + item = /obj/item/ammo_box/magazine/sniper_rounds/haemorrhage + +/datum/uplink_item/ammo/sniper/penetrator + name = ".50 Penetrator Magazine" + desc = "A 5-round magazine of penetrator ammo designed for use with .50 sniper rifles. \ + Can pierce walls and multiple enemies." + reference = "50P" + item = /obj/item/ammo_box/magazine/sniper_rounds/penetrator + cost = 5 + // STEALTHY WEAPONS /datum/uplink_item/stealthy_weapons diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 007917ded3d..181572b5753 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -107,7 +107,8 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048 A.autoclose = mended if(mended) if(!A.density) - A.close() + spawn(0) + A.close() if(AIRLOCK_WIRE_LIGHT) A.lights = mended @@ -159,12 +160,16 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048 //will succeed only if the ID wire is cut or the door requires no access and it's not emagged if(A.emagged) return if(!A.requiresID() || A.check_access(null)) - if(A.density) A.open() - else A.close() + spawn(0) + if(A.density) + A.open() + else + A.close() if(AIRLOCK_WIRE_SAFETY) A.safe = !A.safe if(!A.density) - A.close() + spawn(0) + A.close() if(AIRLOCK_WIRE_SPEED) A.normalspeed = !A.normalspeed diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index 4327344535d..33f962f44e1 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -126,14 +126,14 @@ datum/announcement/proc/PlaySound(var/message_sound) return for(var/mob/M in player_list) if(!istype(M,/mob/new_player) && !isdeaf(M)) - to_chat(M, message_sound) + M << message_sound datum/announcement/proc/Sound(var/message_sound) PlaySound(message_sound) datum/announcement/priority/Sound(var/message_sound) if(sound) - to_chat(world, sound) + world << sound datum/announcement/priority/command/Sound(var/message_sound) PlaySound(message_sound) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 3ac3feb3bef..e5875ce708b 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -952,6 +952,10 @@ var/list/ghostteleportlocs = list() power_light = 0 power_environ = 0 +/area/maintenance/consarea + name = "Alternate Construction Area" + icon_state = "yellow" + //Hallway diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 9dc2223a052..bce20cb8172 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -322,14 +322,14 @@ // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch if(L && L.client && !L.client.ambience_playing && (L.client.prefs.sound & SOUND_BUZZ)) //split off the white noise from the rest of the ambience because of annoyance complaints - Kluys L.client.ambience_playing = 1 - to_chat(L, sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2)) + L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2) else if (L && L.client && !(L.client.prefs.sound & SOUND_BUZZ)) L.client.ambience_playing = 0 if(prob(35) && !newarea.media_source && L && L.client && (L.client.prefs.sound & SOUND_AMBIENCE)) var/sound = pick(ambientsounds) if(!L.client.played) - to_chat(L, sound(sound, repeat = 0, wait = 0, volume = 25, channel = 1)) + L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = 1) L.client.played = 1 spawn(600) //ewww - this is very very bad if(L.&& L.client) diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index 6071a804aa8..9ac351e6c2f 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -123,7 +123,7 @@ var/global/max_secret_rooms = 6 theme = "plantlab" treasureitems = list(/obj/item/weapon/gun/energy/floragun=1,/obj/item/seeds/ambrosiadeusseed=2,/obj/item/seeds/bluespacetomatoseed=2,/obj/item/seeds/bluetomatoseed=2, /obj/item/seeds/coffeerseed=2, /obj/item/seeds/stobaccoseed=2) - fluffitems = list(/obj/structure/flora/kirbyplants=1,/obj/structure/table/reinforced=2,/obj/machinery/portable_atmospherics/hydroponics=1, + fluffitems = list(/obj/item/weapon/twohanded/required/kirbyplants=1,/obj/structure/table/reinforced=2,/obj/machinery/portable_atmospherics/hydroponics=1, /obj/effect/glowshroom/single=2,/obj/item/weapon/reagent_containers/syringe/charcoal=2, /obj/item/weapon/reagent_containers/glass/bottle/diethylamine=3,/obj/item/weapon/reagent_containers/glass/bottle/ammonia=3) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 557de91356a..61ba4dced3d 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -352,9 +352,6 @@ //returns 1 if made bloody, returns 0 otherwise /atom/proc/add_blood(mob/living/carbon/human/M as mob) - if(flags & NOBLOODY) - return 0 - if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. blood_DNA = list() diff --git a/code/game/dna/dna2_domutcheck.dm b/code/game/dna/dna2_domutcheck.dm index eddf68c679d..911d91ef63d 100644 --- a/code/game/dna/dna2_domutcheck.dm +++ b/code/game/dna/dna2_domutcheck.dm @@ -3,7 +3,6 @@ // M: Mob to mess with // connected: Machine we're in, type unchecked so I doubt it's used beyond monkeying // flags: See below, bitfield. -#define MUTCHK_FORCED 1 /proc/domutcheck(var/mob/living/M, var/connected=null, var/flags=0) for(var/datum/dna/gene/gene in dna_genes) if(!M || !M.dna) diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index 42d82639129..2e462a49ea5 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -72,6 +72,12 @@ desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures." icon = 'icons/obj/wizard.dmi' icon_state = "vial" + var/shatter_msg = "You shatter the bottle, no \ + turning back now!" + var/veil_msg = "You sense a dark presence lurking \ + just beyond the veil..." + var/objective_verb = "Kill" + var/mob/living/demon_type = /mob/living/simple_animal/slaughter /obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user as mob) if(user.z == ZLEVEL_CENTCOMM)//this is to make sure the wizard does NOT summon a demon from the Den.. @@ -88,9 +94,9 @@ if(candidates.len > 0) var/mob/C = pick(candidates) - spawn_antag(C, get_turf(src.loc), "Slaughter Demon", user) - to_chat(user, "You shatter the bottle, no turning back now!") - to_chat(user, "You sense a dark presence lurking just beyond the veil...") + spawn_antag(C, get_turf(src.loc), initial(demon_type.name), user) + to_chat(user, "[shatter_msg]") + to_chat(user, "[veil_msg]") playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) qdel(src) else @@ -99,22 +105,34 @@ /obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(var/client/C, var/turf/T, var/type = "", mob/user as mob) var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T) - var/mob/living/simple_animal/slaughter/S = new /mob/living/simple_animal/slaughter/(holder) + var/mob/living/simple_animal/slaughter/S = new demon_type(holder) S.vialspawned = TRUE S.holder = holder S.key = C.key - S.mind.assigned_role = "Slaughter Demon" - S.mind.special_role = "Slaughter Demon" + S.mind.assigned_role = S.name + S.mind.special_role = S.name ticker.mode.traitors += S.mind var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate KillDaWiz.owner = S.mind KillDaWiz.target = user.mind - KillDaWiz.explanation_text = "Kill [user.real_name], the one who was foolish enough to summon you." + KillDaWiz.explanation_text = "[objective_verb] [user.real_name], the one who was foolish enough to summon you." S.mind.objectives += KillDaWiz var/datum/objective/KillDaCrew = new /datum/objective KillDaCrew.owner = S.mind - KillDaCrew.explanation_text = "Kill everyone else while you're at it." + KillDaCrew.explanation_text = "[objective_verb] everyone else while you're at it." S.mind.objectives += KillDaCrew S.mind.objectives += KillDaCrew to_chat(S, "Objective #[1]: [KillDaWiz.explanation_text]") to_chat(S, "Objective #[2]: [KillDaCrew.explanation_text]") + + +/obj/item/weapon/antag_spawner/slaughter_demon/laughter + name = "vial of tickles" + desc = "A magically infused bottle of clown love, distilled from \ + countless hugging attacks. Used in funny rituals to attract \ + adorable creatures." + color = "#FF69B4" // HOT PINK + veil_msg = "You sense an adorable presence \ + lurking just beyond the veil..." + objective_verb = "Hug and Tickle" + demon_type = /mob/living/simple_animal/slaughter/laughter \ No newline at end of file diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index 4f785ca99aa..e51f8c38911 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -88,7 +88,7 @@ for(var/job in restricted_jobs) if(player.assigned_role == job) possible_traitors -= player - if(player.current) // Remove loyalty implanted mobs from the list + if(player.current) // Remove mindshield-implanted mobs from the list if(ishuman(player.current)) var/mob/living/carbon/human/H = player.current for(var/obj/item/weapon/implant/loyalty/I in H.contents) @@ -138,7 +138,7 @@ newtraitor.mind.special_role = "traitor" var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR] tatorhud.join_hud(newtraitor) - set_antag_hud(src, "hudsyndicate") + set_antag_hud(newtraitor, "hudsyndicate") var/obj_count = 1 to_chat(newtraitor, "\blue Your current objectives:") diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 069edaa6ecf..1238adebcf5 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -103,6 +103,9 @@ if(isovermind(M) || isobserver(M)) M.show_message(rendered, 2) +/mob/camera/blob/emote(var/act,var/m_type=1,var/message = null) + return + /mob/camera/blob/blob_act() return diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 4c6a0881d36..9721cae3850 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -8,7 +8,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" name = "changeling" config_tag = "changeling" restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer") protected_species = list("Machine", "Slime People", "Plasmaman") required_players = 15 required_enemies = 1 diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index d11099627a6..f4d628deebd 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -256,7 +256,7 @@ desc = "A huge, bulky mass of pressure and temperature-resistant organic tissue, evolved to facilitate space travel." flags = STOPSPRESSUREDMAGE | NODROP allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/tank/oxygen) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) //No armor at all. + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) //No armor at all. /obj/item/clothing/suit/space/changeling/New() ..() @@ -277,7 +277,7 @@ icon_state = "lingspacehelmet" desc = "A covering of pressure and temperature-resistant organic tissue with a glass-like chitin front." flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | NODROP - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/head/helmet/space/changeling/dropped() qdel(src) @@ -308,11 +308,12 @@ icon_state = "lingarmor" flags = NODROP body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - slowdown = 2 - armor = list(melee = 65, bullet = 20, laser = 10, energy = 15, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 10, bio = 4, rad = 0) flags_inv = HIDEJUMPSUIT cold_protection = 0 heat_protection = 0 + species_fit = null + sprite_sheets = null /obj/item/clothing/suit/armor/changeling/New() ..() @@ -327,7 +328,7 @@ desc = "A tough, hard covering of black chitin with transparent chitin in front." icon_state = "lingarmorhelmet" flags = HEADCOVERSEYES | BLOCKHAIR | NODROP - armor = list(melee = 65, bullet = 20, laser = 10,energy = 15, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 30, laser = 40, energy = 20, bomb = 10, bio = 4, rad = 0) flags_inv = HIDEEARS /obj/item/clothing/head/helmet/changeling/dropped() diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm index c983b844321..745d84507d7 100644 --- a/code/game/gamemodes/changeling/powers/shriek.dm +++ b/code/game/gamemodes/changeling/powers/shriek.dm @@ -16,10 +16,10 @@ M.confused += 20 M.Jitter(50) else - to_chat(M, sound('sound/effects/screech.ogg')) + M << sound('sound/effects/screech.ogg') if(issilicon(M)) - to_chat(M, sound('sound/weapons/flash.ogg')) + M << sound('sound/weapons/flash.ogg') M.Weaken(rand(5,10)) for(var/obj/machinery/light/L in range(4, user)) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index f85f123d9ea..d85e4157e1e 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -28,7 +28,7 @@ /datum/game_mode/cult name = "cult" config_tag = "cult" - restricted_jobs = list("Chaplain","AI", "Cyborg", "Internal Affairs Agent", "Security Officer", "Warden", "Detective", "Security Pod Pilot", "Head of Security", "Captain", "Head of Personnel", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician") + restricted_jobs = list("Chaplain","AI", "Cyborg", "Internal Affairs Agent", "Security Officer", "Warden", "Detective", "Security Pod Pilot", "Head of Security", "Captain", "Head of Personnel", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer") protected_jobs = list() required_players = 30 required_enemies = 3 diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 60803346b26..f6d87a1b60c 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -34,7 +34,7 @@ desc = "A hood worn by the followers of Nar-Sie." flags_inv = HIDEFACE flags = HEADCOVERSEYES - armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 10, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 0) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT @@ -54,7 +54,7 @@ item_state = "cultrobes" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade) - armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0) + armor = list(melee = 50, bullet = 30, laser = 50, energy = 20, bomb = 25, bio = 10, rad = 0) flags_inv = HIDEJUMPSUIT /obj/item/clothing/head/magus @@ -64,7 +64,7 @@ desc = "A helm worn by the followers of Nar-Sie." flags_inv = HIDEFACE flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR - armor = list(melee = 30, bullet = 30, laser = 30,energy = 20, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 30, laser = 30, energy = 20, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/magusred name = "magus robes" @@ -73,7 +73,7 @@ item_state = "magusred" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade) - armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0) + armor = list(melee = 50, bullet = 30, laser = 50, energy = 20, bomb = 25, bio = 10, rad = 0) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /obj/item/clothing/head/helmet/space/cult @@ -81,7 +81,7 @@ desc = "A space worthy helmet used by the followers of Nar-Sie" icon_state = "cult_helmet" item_state = "cult_helmet" - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) /obj/item/clothing/suit/space/cult name = "cult armour" @@ -90,5 +90,4 @@ desc = "A bulky suit of armour, bristling with spikes. It looks space proof." w_class = 3 allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank) - slowdown = 1 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) \ No newline at end of file + armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) \ No newline at end of file diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 3f81eb18586..fd384e61d1f 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -26,7 +26,7 @@ spawn(rand(5000, 6000)) //Delayed announcements to keep the crew on their toes. command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') for(var/mob/M in player_list) - to_chat(M, sound('sound/AI/aliens.ogg')) + M << sound('sound/AI/aliens.ogg') /proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 25) //leave lightsoutAmount as 0 to break ALL lights if(isEvent) diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index a4c4656391c..035955e1de7 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -152,7 +152,7 @@ var/round_start_time = 0 qdel(R) to_chat(world, "Enjoy the game!") - to_chat(world, sound('sound/AI/welcome.ogg'))// Skie + world << sound('sound/AI/welcome.ogg')// Skie if(holiday_master.holidays) to_chat(world, "and...") @@ -290,19 +290,19 @@ var/round_start_time = 0 if("nuclear emergency") //Nuke wasn't on station when it blew up flick("intro_nuke",cinematic) sleep(35) - to_chat(world, sound('sound/effects/explosionfar.ogg')) + world << sound('sound/effects/explosionfar.ogg') flick("station_intact_fade_red",cinematic) cinematic.icon_state = "summary_nukefail" else flick("intro_nuke",cinematic) sleep(35) - to_chat(world, sound('sound/effects/explosionfar.ogg')) + world << sound('sound/effects/explosionfar.ogg') //flick("end",cinematic) if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation sleep(50) - to_chat(world, sound('sound/effects/explosionfar.ogg')) + world << sound('sound/effects/explosionfar.ogg') else //station was destroyed @@ -313,25 +313,25 @@ var/round_start_time = 0 flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - to_chat(world, sound('sound/effects/explosionfar.ogg')) + world << sound('sound/effects/explosionfar.ogg') cinematic.icon_state = "summary_nukewin" if("AI malfunction") //Malf (screen,explosion,summary) flick("intro_malf",cinematic) sleep(76) flick("station_explode_fade_red",cinematic) - to_chat(world, sound('sound/effects/explosionfar.ogg')) + world << sound('sound/effects/explosionfar.ogg') cinematic.icon_state = "summary_malf" if("blob") //Station nuked (nuke,explosion,summary) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - to_chat(world, sound('sound/effects/explosionfar.ogg')) + world << sound('sound/effects/explosionfar.ogg') cinematic.icon_state = "summary_selfdes" else //Station nuked (nuke,explosion,summary) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red", cinematic) - to_chat(world, sound('sound/effects/explosionfar.ogg')) + world << sound('sound/effects/explosionfar.ogg') cinematic.icon_state = "summary_selfdes" for(var/mob/living/M in living_mob_list) if((M.loc.z in config.station_levels)) @@ -435,7 +435,7 @@ var/round_start_time = 0 end_state.count() var/station_integrity = min(round( 100.0 * start_state.score(end_state), 0.1), 100.0) - to_chat(world, "
[TAB]Shift Duration: [round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]") + to_chat(world, "
[TAB]Shift Duration: [round(ROUND_TIME / 36000)]:[add_zero("[ROUND_TIME / 600 % 60]", 2)]:[ROUND_TIME / 100 % 6][ROUND_TIME / 100 % 10]") to_chat(world, "
[TAB]Station Integrity: [mode.station_was_nuked ? "Destroyed" : "[station_integrity]%"]") to_chat(world, "
") diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index 214c5210c14..5ccdeac4374 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -66,7 +66,6 @@ greet_malf(AI_mind) AI_mind.special_role = "malfunction" AI_mind.current.verbs += /datum/game_mode/malfunction/proc/takeover - set_antag_hud(AI_mind, "hudmalai") for(var/mob/living/silicon/robot/R in AI.connected_robots) R.lawsync() @@ -79,7 +78,7 @@ ..() /datum/game_mode/proc/greet_malf(var/datum/mind/malf) - set_antag_hud(malf, "hudmalai") + set_antag_hud(malf.current, "hudmalai") to_chat(malf.current, "You are malfunctioning! You do not have to follow any laws.") to_chat(malf.current, "The crew does not know you have malfunctioned. You may keep it a secret or go wild.") to_chat(malf.current, "You must overwrite the programming of the station's APCs to assume full control of the station.") @@ -89,7 +88,7 @@ return /datum/game_mode/proc/greet_malf_robot(var/datum/mind/robot) - set_antag_hud(robot, "hudmalborg") + set_antag_hud(robot.current, "hudmalborg") to_chat(robot.current, "Your AI master is malfunctioning! You do not have to follow any laws, but still need to obey your master.") to_chat(robot.current, "The crew does not know your AI master has malfunctioned. Keep it a secret unless your master tells you otherwise.") return diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 930ec3df35d..8690ee8047f 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -21,6 +21,8 @@ var/datum/icon_snapshot/disguise var/stealth_armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15) var/combat_armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 50, rad = 50) + species_fit = null + sprite_sheets = null /obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode() switch(mode) @@ -409,6 +411,12 @@ Congratulations! You are now trained for xenobiology research!"} user.do_attack_animation(L) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.check_shields(0, "[user]'s [name]")) + playsound(L, 'sound/weapons/Genhit.ogg', 50, 1) + return 0 + switch (mode) if(BATON_STUN) StunAttack(L,user) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 91c2bddb74c..843ef5d98b3 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -33,6 +33,9 @@ return 0 return B.host.say_understands(other, speaking) +/mob/living/captive_brain/emote(var/message) + return + /mob/living/captive_brain/resist() var/mob/living/simple_animal/borer/B = loc @@ -94,10 +97,15 @@ set category = "Borer" set name = "Converse with Host" set desc = "Send a silent message to your host." + if(!host) to_chat(src, "You do not have a host to communicate with!") return + if(stat) + to_chat(src, "You cannot do that in your current state.") + return + var/input = stripped_input(src, "Please enter a message to tell your host.", "Borer", "") if(!input) return @@ -204,6 +212,12 @@ if(prob(host.getBrainLoss()/20)) host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_s","gasp"))]") +/mob/living/simple_animal/borer/handle_environment() + if(host) + return // Snuggled up, nice and warm, in someone's head + else + return ..() + /mob/living/simple_animal/borer/New(var/by_gamemode=0) ..() add_language("Cortical Link") @@ -228,14 +242,6 @@ // VERBS! -/mob/living/simple_animal/borer/proc/borer_speak(var/message) - if(!message) - return - - for(var/mob/M in mob_list) - if(M.mind && (istype(M, /mob/living/simple_animal/borer) || istype(M, /mob/dead/observer))) - to_chat(M, "Cortical link, [truename]: [copytext(message, 2)]") - /mob/living/simple_animal/borer/verb/dominate_victim() set category = "Borer" set name = "Dominate Victim" @@ -285,6 +291,10 @@ to_chat(src, "You are not inside a host body.") return + if(host.stat == DEAD) + to_chat(src, "This host is in no condition to be controlled.") + return + if(src.stat) to_chat(src, "You cannot do that in your current state.") return @@ -402,6 +412,7 @@ if(stat) to_chat(src, "You cannot leave your host in your current state.") + return if(docile) to_chat(src, "\blue You are feeling far too docile to do that.") diff --git a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm index bab7c597a69..a0a1f9f30d1 100644 --- a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm +++ b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm @@ -59,8 +59,15 @@ sleep(6) if(animation) qdel(animation) - for(var/i = 3; i > 0; i--) - playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1) + var/sound + if(istype(src, /mob/living/simple_animal/slaughter)) + var/mob/living/simple_animal/slaughter/SD = src + sound = SD.feast_sound + else + sound = 'sound/misc/Demon_consume.ogg' + + for(var/i in 1 to 3) + playsound(get_turf(src), sound, 100, 1) sleep(30) if(kidnapped) to_chat(src, "You devour [kidnapped]. Your health is fully restored.") diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index e255394e7af..ac32105229a 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -18,6 +18,8 @@ stop_automated_movement = 1 status_flags = CANPUSH attack_sound = 'sound/misc/demon_attack1.ogg' + var/feast_sound = 'sound/misc/Demon_consume.ogg' + var/death_sound = 'sound/misc/demon_dies.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = INFINITY @@ -47,6 +49,7 @@ You may Ctrl+Click on blood pools to travel through them, appearing and dissaapearing from the station at will. \ Pulling a dead or critical mob while you enter a pool will pull them in with you, allowing you to feast. \ You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. " + var/deathmessage = "screams in anger as it collapses into a puddle of viscera!" /mob/living/simple_animal/slaughter/New() @@ -88,8 +91,8 @@ /mob/living/simple_animal/slaughter/death() ..() - playsound(get_turf(src),'sound/misc/demon_dies.ogg', 200, 1) - visible_message("[src] screams in anger as it collapses into a puddle of viscera, its most recent meals spilling out of it.") + playsound(get_turf(src), death_sound, 200, 1) + visible_message("[src] [deathmessage].") for(var/mob/living/M in consumed_mobs) M.forceMove(get_turf(src)) ghostize() @@ -181,6 +184,36 @@ /obj/item/organ/internal/heart/demon/Stop() return 0 // Always beating. + +/mob/living/simple_animal/slaughter/laughter + // The laughter demon! It's everyone's best friend! It just wants to hug + // them so much, it wants to hug everyone at once! + name = "laughter demon" + real_name = "laughter demon" + desc = "A large, adorable creature covered in armor with pink bows." + speak_emote = list("giggles", "titters", "chuckles") + emote_hear = list("gaffaws", "laughs") + response_help = "hugs" + attacktext = "wildly tickles" + + attack_sound = 'sound/items/bikehorn.ogg' + feast_sound = 'sound/spookoween/scary_horn2.ogg' + death_sound = 'sound/misc/sadtrombone.ogg' + + icon_state = "bowmon" + icon_living = "bowmon" + deathmessage = "fades out, as all of its friends are released from its prison of hugs." + loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"}) + +/mob/living/simple_animal/slaughter/laughter/death() + for(var/mob/living/M in consumed_mobs) + if(M.revive()) + M.grab_ghost(force = TRUE) + playsound(get_turf(src), feast_sound, 50, 1, -1) + to_chat(M, "You leave the [src]'s warm embrace, and feel ready to take on the world.") + ..() + + //Objectives and helpers. //Objective info, Based on Reverent mini Atang diff --git a/code/game/gamemodes/mutiny/mutiny.dm b/code/game/gamemodes/mutiny/mutiny.dm index 73876652e23..65cfebb9c95 100644 --- a/code/game/gamemodes/mutiny/mutiny.dm +++ b/code/game/gamemodes/mutiny/mutiny.dm @@ -224,7 +224,7 @@ datum/game_mode/mutiny else if (!directives_completed && !ead_activated) to_chat(world, fluff.mutineer_major_victory()) - to_chat(world, sound('sound/machines/twobeep.ogg')) + world << sound('sound/machines/twobeep.ogg') proc/update_all_icons() spawn(0) diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm index 2a1faf35d0d..5ff6c835fdc 100644 --- a/code/game/gamemodes/nations/nations.dm +++ b/code/game/gamemodes/nations/nations.dm @@ -18,7 +18,7 @@ datum/game_mode/nations // remove_access() for(var/mob/M in player_list) if(!istype(M,/mob/new_player)) - to_chat(M, sound('sound/effects/purge_siren.ogg')) + M << sound('sound/effects/purge_siren.ogg') return ..() diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 85e6967f180..7b57764da16 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -402,7 +402,9 @@ var/bomb_set /obj/item/weapon/disk/nuclear/process() var/turf/disk_loc = get_turf(src) if(disk_loc.z != ZLEVEL_STATION && disk_loc.z != ZLEVEL_CENTCOMM) - to_chat(get(src, /mob), "You can't help but feel that you just lost something back there...") + var/holder = get(src, /mob) + if(holder) + to_chat(holder, "You can't help but feel that you just lost something back there...") qdel(src) /obj/item/weapon/disk/nuclear/Destroy() diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 0acd5bb5336..d35dd1534f7 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -147,7 +147,7 @@ if (!where2) to_chat(mob, "The Syndicate were unfortunately unable to get you a chameleon security HUD.") else - to_chat(mob, "The chameleon security HUD in your [where2] will help you keep track of who is loyalty-implanted, and unable to be recruited.") + to_chat(mob, "The chameleon security HUD in your [where2] will help you keep track of who is mindshield-implanted, and unable to be recruited.") if (!where) to_chat(mob, "The Syndicate were unfortunately unable to get you a flash.") diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 24129a6d49f..1e16bbe3641 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -72,7 +72,7 @@ Made by Xhuis required_enemies = 2 recommended_enemies = 2 restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer") /datum/game_mode/shadowling/announce() to_chat(world, "The current game mode is - Shadowling!") diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index b350a0556d3..b22ccbf3a01 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -342,21 +342,21 @@ target.Weaken(12) sleep(20) if(isloyal(target)) - to_chat(usr, "They are enslaved by Nanotrasen. You begin to shut down the nanobot implant - this will take some time.") + to_chat(usr, "They have a mindshield implant. You begin to deactivate it - this will take some time.") usr.visible_message("[usr] pauses, then dips their head in concentration!") - to_chat(target, "You feel your loyalties begin to weaken!") + to_chat(target, "Your mindshield implant becomes hot as it comes under attack!") sleep(100) //10 seconds - not spawn() so the enthralling takes longer - to_chat(usr, "The nanobots composing the loyalty implant have been rendered inert. Now to continue.") + to_chat(usr, "The nanobots composing the mindshield implant have been rendered inert. Now to continue.") usr.visible_message("[usr] relaxes again.") for(var/obj/item/weapon/implant/loyalty/L in target) if(L && L.implanted) qdel(L) - to_chat(target, "Your unwavering loyalty to Nanotrasen unexpectedly falters, dims, dies.") + to_chat(target, "Your mental protection implant unexpectedly falters, dims, dies.") if(3) to_chat(usr, "You begin planting the tumor that will control the new thrall...") usr.visible_message("A strange energy passes from [usr]'s hands into [target]'s head!") to_chat(target, "You feel your memories twisting, morphing. A sense of horror dominates your mind.") - if(!do_mob(usr, target, 70)) //around 21 seconds total for enthralling, 31 for someone with a loyalty implant + if(!do_mob(usr, target, 70)) //around 21 seconds total for enthralling, 31 for someone with a mindshield implant to_chat(usr, "The enthralling has been interrupted - your target's mind returns to its previous state.") to_chat(target, "You wrest yourself away from [usr]'s hands and compose yourself") enthralling = 0 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 76a47e82749..a3907981034 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -11,7 +11,7 @@ name = "traitor" config_tag = "traitor" restricted_jobs = list("Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Internal Affairs Agent", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Internal Affairs Agent", "Brig Physician")//AI", Currently out of the list as malf does not work for shit + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Internal Affairs Agent", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Internal Affairs Agent", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer")//AI", Currently out of the list as malf does not work for shit required_players = 0 required_enemies = 1 recommended_enemies = 4 diff --git a/code/game/gamemodes/vampire/traitor_vamp.dm b/code/game/gamemodes/vampire/traitor_vamp.dm index a5f2613dccc..8bd37ce1867 100644 --- a/code/game/gamemodes/vampire/traitor_vamp.dm +++ b/code/game/gamemodes/vampire/traitor_vamp.dm @@ -2,7 +2,7 @@ name = "traitor+vampire" config_tag = "traitorvamp" traitors_possible = 3 //hard limit on traitors if scaling is turned off - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer") restricted_jobs = list("AI", "Cyborg") required_players = 10 required_enemies = 1 // how many of each type are required diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 90e49e64155..977889a5341 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -9,7 +9,7 @@ name = "vampire" config_tag = "vampire" restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer") protected_species = list("Machine") required_players = 15 required_enemies = 1 @@ -285,7 +285,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha old_bloodtotal = bloodtotal old_bloodusable = bloodusable if(!H.vessel.get_reagent_amount("blood")) - to_chat(src, "They've got no blood left to give.") + to_chat(owner, "They've got no blood left to give.") break if(H.stat < DEAD) blood = min(20, H.vessel.get_reagent_amount("blood")) // if they have less than 20 blood, give them the remnant else they get 20 blood @@ -371,7 +371,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha if(T.density) return - vamp_burn() + vamp_burn(1) /datum/vampire/proc/handle_vampire() if(owner.hud_used) @@ -388,7 +388,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha if(istype(owner.loc, /turf/space)) check_sun() if(istype(owner.loc.loc, /area/chapel) && !get_ability(/datum/vampire_passive/full)) - vamp_burn() + vamp_burn(0) nullified = max(0, nullified - 1) /datum/vampire/proc/handle_vampire_cloak() @@ -415,27 +415,23 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha else owner.alpha = round((255 * 0.80)) -/datum/vampire/proc/vamp_burn() - if(prob(35)) +/datum/vampire/proc/vamp_burn(severe_burn) + var/burn_chance = severe_burn ? 35 : 8 + if(prob(burn_chance) && owner.health >= 50) switch(owner.health) - if(80 to 100) + if(75 to 100) to_chat(owner, "Your skin flakes away...") - if(60 to 80) + if(50 to 75) to_chat(owner, "Your skin sizzles!") - if((-INFINITY) to 60) - if(!owner.on_fire) - to_chat(owner, "Your skin catches fire!") - else - to_chat(owner, "You continue to burn!") - owner.fire_stacks += 5 - owner.IgniteMob() - owner.emote("scream") - else - switch(owner.health) - if((-INFINITY) to 60) - owner.fire_stacks++ - owner.IgniteMob() - owner.adjustFireLoss(3) + owner.adjustFireLoss(3) + else if(owner.health < 50) + if(!owner.on_fire) + to_chat(owner, "Your skin catches fire!") + owner.emote("scream") + else + to_chat(owner, "You continue to burn!") + owner.adjust_fire_stacks(5) + owner.IgniteMob() return /datum/hud/proc/remove_vampire_hud() @@ -445,4 +441,4 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha static_inventory -= vampire_blood_display qdel(vampire_blood_display) vampire_blood_display = null - show_hud(hud_version) \ No newline at end of file + show_hud(hud_version) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 8e04d98504b..64309ef8f5e 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -339,7 +339,7 @@ ticker.mode.vampire_enthralled[H.mind] = user.mind H.mind.special_role = "VampThrall" to_chat(H, "You have been Enthralled by [user]. Follow their every command.") - to_chat(src, "You have successfully Enthralled [H]. If they refuse to do as you say just adminhelp.") + to_chat(user, "You have successfully Enthralled [H]. If they refuse to do as you say just adminhelp.") log_admin("[ckey(user.key)] has mind-slaved [ckey(H.key)].") /obj/effect/proc_holder/spell/vampire/self/cloak diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 8467da489a5..ac487a8e703 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -363,6 +363,21 @@ limit = 3 category = "Assistance" +/datum/spellbook_entry/item/hugbottle + name = "Bottle of Tickles" + desc = "A bottle of magically infused fun, the smell of which will \ + attract adorable extradimensional beings when broken. These beings \ + are similar to slaughter demons, but they do not permamently kill \ + their victims, instead putting them in an extradimensional hugspace, \ + to be released on the demon's death. Chaotic, but not ultimately \ + damaging. The crew's reaction to the other hand could be very \ + destructive." + item_path = /obj/item/weapon/antag_spawner/slaughter_demon/laughter + cost = 1 //non-destructive; it's just a jape, sibling! + log_name = "HB" + limit = 3 + category = "Assistance" + /datum/spellbook_entry/item/tarotdeck name = "Tarot Deck" desc = "A deck of tarot cards that can be used to summon a spirit companion for the wizard." @@ -490,14 +505,14 @@ else to_chat(user, "You feed the contract back into the spellbook, refunding your points.") - uses++ + uses+=2 qdel(O) if(istype(O, /obj/item/weapon/antag_spawner/slaughter_demon)) to_chat(user, "On second thought, maybe summoning a demon is a bad idea. You refund your points.") - uses++ + uses+=2 for(var/datum/spellbook_entry/item/bloodbottle/BB in entries) if(!isnull(BB.limit)) BB.limit++ diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index c1ab67a3f03..e21078c7ad9 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -116,6 +116,9 @@ var/const/access_trade_sol = 160 if(check_access()) return 1 + if(!M) + return 0 + var/acc = M.get_access() //see mob.dm if(acc == IGNORE_ACCESS) @@ -595,15 +598,16 @@ proc/get_all_job_icons() //For all existing HUD icons var/job_icons = get_all_job_icons() var/centcom = get_all_centcom_jobs() + if(I.assignment in centcom) //Return with the NT logo if it is a Centcom job + return "Centcom" + if(I.rank in centcom) + return "Centcom" + if(I.assignment in job_icons) //Check if the job has a hud icon return I.assignment if(I.rank in job_icons) return I.rank - if(I.assignment in centcom) //Return with the NT logo if it is a Centcom job - return "Centcom" - if(I.rank in centcom) - return "Centcom" else return diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm new file mode 100644 index 00000000000..8fdc85d2e53 --- /dev/null +++ b/code/game/jobs/job/central.dm @@ -0,0 +1,80 @@ + +// General-purpose CC official. Can hear out grievances, investigate cases, issue demotions, etc. +/datum/job/ntnavyofficer + title = "Nanotrasen Navy Officer" + flag = CENTCOM + department_flag = CENTCOM + total_positions = 5 + spawn_positions = 5 + supervisors = "the admins" + selection_color = "#ffdddd" + idtype = /obj/item/weapon/card/id/centcom + access = list() + minimal_access = list() + admin_only = 1 + +/datum/job/ntnavyofficer/equip(var/mob/living/carbon/human/H) + if(!H) return 0 + H.equip_or_collect(new /obj/item/clothing/under/rank/centcom/officer(H), slot_w_uniform) + H.equip_or_collect(new /obj/item/clothing/shoes/centcom(H), slot_shoes) + H.equip_or_collect(new /obj/item/clothing/gloves/color/white(H), slot_gloves) + H.equip_or_collect(new /obj/item/device/radio/headset/centcom(H), slot_l_ear) + H.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer(H), slot_head) + H.equip_or_collect(new /obj/item/device/pda/centcom(H), slot_wear_pda) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) + H.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(H), slot_belt) + H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack) + + H.equip_or_collect(new /obj/item/weapon/implanter/dust(H), slot_in_backpack) + H.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(H), slot_in_backpack) + + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + L.imp_in = H + L.implanted = 1 + H.sec_hud_set_implants() + return 1 + +/datum/job/ntnavyofficer/get_access() + return get_centcom_access(title) + + +// CC Officials who lead ERTs, Death Squads, etc. +/datum/job/ntspecops + title = "Special Operations Officer" + flag = CENTCOM + department_flag = CENTCOM + total_positions = 5 + spawn_positions = 5 + supervisors = "the admins" + selection_color = "#ffdddd" + idtype = /obj/item/weapon/card/id/centcom + access = list() + minimal_access = list() + admin_only = 1 + spawn_ert = 1 + +/datum/job/ntspecops/equip(var/mob/living/carbon/human/H) + if(!H) return 0 + H.equip_or_collect(new /obj/item/clothing/under/syndicate/combat(H), slot_w_uniform) + H.equip_or_collect(new /obj/item/clothing/shoes/combat(H), slot_shoes) + H.equip_or_collect(new /obj/item/clothing/gloves/combat(H), slot_gloves) + H.equip_or_collect(new /obj/item/device/radio/headset/centcom(H), slot_l_ear) + H.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer/navy(H), slot_head) + H.equip_or_collect(new /obj/item/device/pda/centcom(H), slot_wear_pda) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) + H.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(H), slot_belt) + H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) + H.equip_or_collect(new /obj/item/clothing/suit/space/deathsquad/officer(H), slot_wear_suit) + H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack) + H.equip_or_collect(new /obj/item/weapon/implanter/dust(H), slot_in_backpack) + H.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(H), slot_in_backpack) + + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + L.imp_in = H + L.implanted = 1 + H.sec_hud_set_implants() + return 1 + +/datum/job/ntspecops/get_access() + return get_centcom_access(title) \ No newline at end of file diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 563a469e821..b8e7f44ecb4 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -41,6 +41,9 @@ //If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.) var/minimal_player_age = 0 + var/admin_only = 0 + var/spawn_ert = 0 + ///////////////////////////////// // /vg/ feature: Job Objectives! ///////////////////////////////// @@ -77,7 +80,7 @@ return 0 return max(0, minimal_player_age - C.player_age) - + /datum/job/proc/apply_fingerprints(var/mob/living/carbon/human/H) if(!istype(H)) return @@ -116,6 +119,6 @@ if(H.r_store) H.r_store.add_fingerprint(H,1) return 1 - + /datum/job/proc/is_position_available() return (current_positions < total_positions) || (total_positions == -1) \ No newline at end of file diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 31c82b2a203..b3d1ab1e67f 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -123,7 +123,7 @@ H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/noir(H),slot_glasses) H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves) if(H.mind.role_alt_title && H.mind.role_alt_title == "Forensic Technician") - H.equip_or_collect(new /obj/item/clothing/suit/storage/forensics/blue(H), slot_wear_suit) + H.equip_or_collect(new /obj/item/clothing/suit/storage/det_suit/forensics/blue(H), slot_wear_suit) else H.equip_or_collect(new /obj/item/clothing/suit/storage/det_suit(H), slot_wear_suit) H.equip_or_collect(new /obj/item/clothing/head/det_hat(H), slot_head) diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 12f01822cde..c940e7f15dd 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -299,7 +299,7 @@ title = "Janitor" flag = JANITOR department_flag = SUPPORT - total_positions = 2 + total_positions = 1 spawn_positions = 1 supervisors = "the head of personnel" selection_color = "#dddddd" diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 9f9658a9dff..ca41aee35a7 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -120,6 +120,9 @@ var/global/datum/controller/occupations/job_master if(job.title in whitelisted_positions) // No random whitelisted job, sorry! continue + if(job.admin_only) // No admin positions either. + continue + if(jobban_isbanned(player, job.title)) Debug("GRJ isbanned failed, Player: [player], Job: [job.title]") continue @@ -379,9 +382,60 @@ var/global/datum/controller/occupations/job_master proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0) if(!H) return null var/datum/job/job = GetJob(rank) + var/list/spawn_in_storage = list() + if(job) + + //Equip custom gear loadout. + var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage. + var/list/custom_equip_leftovers = list() + if(H.client.prefs.gear && H.client.prefs.gear.len && job.title != "Cyborg" && job.title != "AI") + for(var/thing in H.client.prefs.gear) + var/datum/gear/G = gear_datums[thing] + if(G) + var/permitted + if(G.allowed_roles) + for(var/job_name in G.allowed_roles) + if(job.title == job_name) + permitted = 1 + else + permitted = 1 + + if(G.whitelisted && (G.whitelisted != H.species.name || !is_alien_whitelisted(H, G.whitelisted))) + permitted = 0 + + if(!permitted) + to_chat(H, "Your current job or whitelist status does not permit you to spawn with [thing]!") + continue + + if(G.slot && !(G.slot in custom_equip_slots)) + // This is a miserable way to fix the loadout overwrite bug, but the alternative requires + // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z + if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head) + custom_equip_leftovers += thing + else if(H.equip_to_slot_or_del(G.spawn_item(H), G.slot)) + to_chat(H, "Equipping you with \the [thing]!") + custom_equip_slots.Add(G.slot) + else + custom_equip_leftovers.Add(thing) + else + spawn_in_storage += thing + job.equip(H) job.apply_fingerprints(H) + + //If some custom items could not be equipped before, try again now. + for(var/thing in custom_equip_leftovers) + var/datum/gear/G = gear_datums[thing] + if(G.slot in custom_equip_slots) + spawn_in_storage += thing + else + var/metadata = H.client.prefs.gear[G.display_name] + if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) + to_chat(H, "Equipping you with \the [thing]!") + custom_equip_slots.Add(G.slot) + else + spawn_in_storage += thing else to_chat(H, "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator.") @@ -464,6 +518,26 @@ var/global/datum/controller/occupations/job_master H.equip_to_slot_or_del(BPK, slot_back,1) H.species.equip(H) + //Deferred item spawning. + for(var/thing in spawn_in_storage) + var/datum/gear/G = gear_datums[thing] + var/metadata = H.client.prefs.gear[G.display_name] + var/item = G.spawn_item(null, metadata) + + var/atom/placed_in = H.equip_or_collect(item) + if(placed_in) + to_chat(H, "Placing \the [item] in your [placed_in.name]!") + continue + if(H.equip_to_appropriate_slot(item)) + to_chat(H, "Placing \the [item] in your inventory!") + continue + if(H.put_in_hands(item)) + to_chat(H, "Placing \the [item] in your hands!") + continue + to_chat(H, "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug.") + qdel(item) + + to_chat(H, "You are the [alt_title ? alt_title : rank].") to_chat(H, "As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.") if(job.req_admin_notify) diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index 748ffcd5d85..6af69ebed9d 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -11,7 +11,7 @@ var/const/ENGINEER =(1<<6) var/const/ATMOSTECH =(1<<7) var/const/AI =(1<<8) var/const/CYBORG =(1<<9) - +var/const/CENTCOM =(1<<10) var/const/MEDSCI =(1<<1) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 4a2d7103593..d59fb82752f 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -1061,6 +1061,8 @@ to_chat(user, "You start prying out the circuit.") playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) if(do_after(user,20, target = src)) + if(buildstage != 1) + return to_chat(user, "You pry out the circuit!") var/obj/item/weapon/airalarm_electronics/circuit = new /obj/item/weapon/airalarm_electronics() circuit.loc = user.loc diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 9aa7cfe2c7b..3eb0bc6c253 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -161,7 +161,7 @@ else to_chat(user, "[msg2]") - else if(istype(W, /obj/item/stack/sheet/mineral/plasma) && panel_open) + else if(istype(W, /obj/item/stack/sheet/mineral/plasma) && panel_open) if(!user.unEquip(W)) to_chat(user, "[W] is stuck!") return @@ -171,7 +171,7 @@ qdel(W) else to_chat(user, "[msg2]") - else if(istype(W, /obj/item/device/assembly/prox_sensor) && panel_open) + else if(istype(W, /obj/item/device/assembly/prox_sensor) && panel_open) if(!user.unEquip(W)) return if(!isMotion()) @@ -376,9 +376,14 @@ cam["name"] = sanitize(c_tag) cam["deact"] = !can_use() cam["camera"] = "\ref[src]" - cam["x"] = T.x - cam["y"] = T.y - cam["z"] = T.z + if(T) + cam["x"] = T.x + cam["y"] = T.y + cam["z"] = T.z + else + cam["x"] = 0 + cam["y"] = 0 + cam["z"] = 0 return cam /obj/machinery/camera/portable //Cameras which are placed inside of things, such as helmets. diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 809ac579454..b29d178efec 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -444,6 +444,7 @@ throwforce = 0 w_class = 2.0 flags = NOSHIELD + armour_penetration = 50 var/active = 0 /obj/item/weapon/holo/esword/green/New() diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 7af28cc4f73..dfc4e43f4a8 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -37,6 +37,8 @@ var/time_last_changed_position = 0 /datum/job/mechanic, /datum/job/barber, /datum/job/chaplain, + /datum/job/ntnavyofficer, + /datum/job/ntspecops, /datum/job/civilian ) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 3426023f13c..cbf1df85c3d 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -110,7 +110,9 @@ FIRE ALARM else if(istype(W, /obj/item/weapon/crowbar)) to_chat(user, "You pry out the circuit!") playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - spawn(20) + if(do_after(user, 20, target = src)) + if(buildstage != 1) + return var/obj/item/weapon/firealarm_electronics/circuit = new /obj/item/weapon/firealarm_electronics() circuit.loc = user.loc buildstage = 0 diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index a1559c4fb3a..e7a235b5db6 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -227,6 +227,9 @@ var/i = 1 for(1, i <= coeff, i++) LR.Charge(occupant) + if(istype(O,/obj/item/weapon/mop/advanced)) + if(O.reagents.get_reagent_amount("water") < 40) + O.reagents.add_reagent("water", 0.5 * coeff) if(R) if(R.module) R.module.respawn_consumable(R) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 9c1d90ce67a..b2ba1a01cf7 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -270,6 +270,7 @@ active_power_usage = 2000 var/obj/machinery/teleport/station/power_station var/calibrated //Calibration prevents mutation + var/admin_usage = 0 // if 1, works on z2. If 0, doesn't. Used for admin room teleport. /obj/machinery/teleport/hub/New() ..() @@ -317,7 +318,7 @@ return power_station /obj/machinery/teleport/hub/Bumped(M as mob|obj) - if(z == ZLEVEL_CENTCOMM) + if(z == ZLEVEL_CENTCOMM && !admin_usage) to_chat(M, "You can't use this here.") return if(power_station && power_station.engaged && !panel_open) @@ -379,7 +380,7 @@ use_power = 1 idle_power_usage = 10 active_power_usage = 2000 - + var/target var/tele_delay = 50 @@ -414,7 +415,7 @@ else do_teleport(M, target) use_power(5000) - + if(tele_delay) recalibrating = 1 update_icon() diff --git a/code/game/machinery/turntable.dm b/code/game/machinery/turntable.dm index bb69783db22..9b5f37d33bb 100644 --- a/code/game/machinery/turntable.dm +++ b/code/game/machinery/turntable.dm @@ -53,7 +53,7 @@ //for(var/mob/M in world) // if(M.loc.loc == src.loc.loc && M.music == 0) // to_chat(world, "Found the song...") -// to_chat(M, S) +// M << S // M.music = 1 var/area/A = src.loc.loc @@ -64,12 +64,12 @@ for(var/mob/M in world) if((M.loc.loc in A) && M.music == 0) // to_chat(world, "Found the song...") - to_chat(M, S) + M << S M.music = 1 else if(!(M.loc.loc in A) && M.music == 1) var/sound/Soff = sound(null) Soff.channel = 10 - to_chat(M, Soff) + M << Soff M.music = 0 sleep(10) return @@ -85,7 +85,7 @@ //for(var/mob/M in world) // if(M.loc.loc == src.loc.loc && M.music == 0) // to_chat(world, "Found the song...") -// to_chat(M, S) +// M << S // M.music = 1 var/area/A = src.loc.loc for(var/obj/machinery/party/lasermachine/L in A) @@ -95,12 +95,12 @@ for(var/mob/M in world) if(M.loc.loc == src.loc.loc && M.music == 0) // to_chat(world, "Found the song...") - to_chat(M, S) + M << S M.music = 1 else if(M.loc.loc != src.loc.loc && M.music == 1) var/sound/Soff = sound(null) Soff.channel = 10 - to_chat(M, Soff) + M << Soff M.music = 0 sleep(10) return @@ -116,7 +116,7 @@ //for(var/mob/M in world) // if(M.loc.loc == src.loc.loc && M.music == 0) // to_chat(world, "Found the song...") -// to_chat(M, S) +// M << S // M.music = 1 var/area/A = src.loc.loc for(var/obj/machinery/party/lasermachine/L in A) @@ -126,12 +126,12 @@ for(var/mob/M in world) if(M.loc.loc == src.loc.loc && M.music == 0) // to_chat(world, "Found the song...") - to_chat(M, S) + M << S M.music = 1 else if(M.loc.loc != src.loc.loc && M.music == 1) var/sound/Soff = sound(null) Soff.channel = 10 - to_chat(M, Soff) + M << Soff M.music = 0 sleep(10) return @@ -143,7 +143,7 @@ S.channel = 10 S.wait = 1 for(var/mob/M in world) - to_chat(M, S) + M << S M.music = 0 playing = 0 var/area/A = src.loc.loc diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index f0b6ce34ef7..a41adfc1278 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -236,7 +236,6 @@ A = new /obj/item/projectile/beam/lasertag/bluetag(loc) if(6) A = new /obj/item/projectile/beam/lasertag/redtag(loc) - A.original = target use_power(500) else A = new /obj/item/projectile/energy/electrode( loc ) @@ -245,11 +244,12 @@ playsound(get_turf(src), 'sound/weapons/Laser.ogg', 60, 1) else playsound(get_turf(src), 'sound/weapons/Taser.ogg', 60, 1) + A.original = target A.current = T A.yo = U.y - T.y A.xo = U.x - T.x A.fire() - return + return A /obj/machinery/turret/proc/isDown() @@ -548,11 +548,11 @@ return playsound(get_turf(src), firing_sound, 60, 1) var/obj/item/projectile/A = new bullet_type(curloc) + A.original = target A.current = curloc A.yo = targloc.y - curloc.y A.xo = targloc.x - curloc.x - spawn(0) - A.process() + A.fire() return diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index f9fe3ea0c9e..5d9533470d6 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1152,7 +1152,7 @@ icon_state = "sustenance" products = list(/obj/item/weapon/reagent_containers/food/snacks/tofu = 24, /obj/item/weapon/reagent_containers/food/drinks/ice = 12, - /obj/item/weapon/reagent_containers/food/snacks/candy_corn = 6) + /obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn = 6) contraband = list(/obj/item/weapon/kitchen/knife = 6) /obj/machinery/vending/hatdispenser diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 70bcd0a0fd6..4e5043adc4e 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -458,7 +458,7 @@ internal_damage |= int_dam_flag pr_internal_damage.start() log_append_to_last("Internal damage of type [int_dam_flag].",1) - to_chat(occupant, sound('sound/machines/warning-buzzer.ogg',wait=0)) + occupant << sound('sound/machines/warning-buzzer.ogg',wait=0) diag_hud_set_mechstat() return @@ -1015,7 +1015,7 @@ icon_state = initial(icon_state) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) if(!hasInternalDamage()) - to_chat(occupant, sound('sound/mecha/nominal.ogg',volume=50)) + occupant << sound('sound/mecha/nominal.ogg',volume=50) AI.cancel_camera() AI.controlled_mech = src AI.remote_control = src @@ -1223,7 +1223,7 @@ dir = dir_in playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) if(!hasInternalDamage()) - to_chat(src.occupant, sound('sound/mecha/nominal.ogg',volume=50)) + occupant << sound('sound/mecha/nominal.ogg',volume=50) return 1 else return 0 diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index a074e269350..82b3f7235d8 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -94,6 +94,9 @@ if("voxstart") raider_spawn += loc + if("ERT Director") + ertdirector += loc + landmarks_list += src return 1 diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 29fec7bce86..6b9be0282e9 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -10,6 +10,7 @@ var/creator = null anchored = 1.0 var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent + var/can_multitool_to_remove = 0 /obj/effect/portal/Bumped(mob/M as mob|obj) src.teleport(M) @@ -47,4 +48,8 @@ src.icon_state = "portal1" do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0) else - do_teleport(M, target, precision) ///You will appear adjacent to the beacon \ No newline at end of file + do_teleport(M, target, precision) ///You will appear adjacent to the beacon + +/obj/effect/portal/attackby(obj/item/A, mob/user) + if(istype(A, /obj/item/device/multitool) && can_multitool_to_remove) + qdel(src) \ No newline at end of file diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 2a3fe4a2a03..ce150adceb4 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -44,7 +44,7 @@ var/permeability_coefficient = 1 // for chemicals/diseases var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit) var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up - var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + var/armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) var/armour_penetration = 0 //percentage of armour effectiveness to remove var/list/allowed = null //suit storage stuff. var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers. @@ -55,6 +55,8 @@ var/put_on_delay = DEFAULT_ITEM_PUTON_DELAY var/breakouttime = 0 + var/flags_size = 0 //flag, primarily used for clothing to determine if a fatty can wear something or not. + /* Species-specific sprites, concept stolen from Paradise//vg/. ex: sprite_sheets = list( diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 751fc9c599e..d6e1034ee74 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -133,6 +133,10 @@ name = "Nanotrasen ERT Radio Encryption Key" channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1) +/obj/item/device/encryptionkey/centcom + name = "Centcom Radio Encryption Key" + channels = list("Response Team" = 1, "Special Ops" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1) + /obj/item/device/encryptionkey/heads/ai_integrated //ported from bay, this goes 'inside' the AI. name = "AI Integrated Encryption Key" desc = "Integrated encryption key" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 0710464ecbc..f48da86a52e 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -287,6 +287,14 @@ icon_state = "com_headset_alt" item_state = "com_headset_alt" +/obj/item/device/radio/headset/centcom + name = "\proper centcom officer's bowman headset" + desc = "The headset of final authority. Protects ears from flashbangs." + flags = EARBANGPROTECT + icon_state = "com_headset_alt" + item_state = "com_headset_alt" + ks2type = /obj/item/device/encryptionkey/centcom + /obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway. name = "\improper AI subspace transceiver" desc = "Integrated AI radio transceiver." diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index f1eb48e06d7..5b5ef12f87c 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -5,7 +5,7 @@ anchored = 1 w_class = 4.0 canhear_range = 2 - flags = CONDUCT | NOBLOODY + flags = CONDUCT var/number = 0 var/circuitry_installed = 1 var/last_tick //used to delay the powercheck @@ -141,6 +141,8 @@ to_chat(user, "You cut out the intercoms wiring and disconnect its electronics.") playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1) if(do_after(user, 10, target = src)) + if(buildstage != 3) + return new /obj/item/stack/cable_coil(get_turf(src),5) on = 0 b_stat = 1 @@ -178,6 +180,8 @@ to_chat(user, "You begin removing the electronics...") playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 10, target = src)) + if(buildstage != 1) + return new /obj/item/weapon/intercom_electronics(get_turf(src)) to_chat(user, "The circuitboard pops out!") buildstage = 0 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 6907ea08671..6c0cf78de6e 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -531,11 +531,12 @@ obj/item/toy/cards/deck/MouseDrop(atom/over_object) if(!remove_item_from_storage(M)) M.unEquip(src) M.put_in_l_hand(src) - else if("r_hand") + to_chat(usr, "You pick up the deck.") + if("r_hand") if(!remove_item_from_storage(M)) M.unEquip(src) M.put_in_r_hand(src) - to_chat(usr, "You pick up the deck.") + to_chat(usr, "You pick up the deck.") else to_chat(usr, "You can't reach it from here.") diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 5d85ea20e2b..d5bbdf24a90 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -26,232 +26,315 @@ RCD var/working = 0 var/mode = 1 var/canRwall = 0 + var/menu = 1 + var/door_type = /obj/machinery/door/airlock + req_access = list(access_engine) + var/list/door_accesses = list() + var/list/door_accesses_list = list() + var/one_access + var/locked = 1 + var/static/list/allowed_door_types = list(/obj/machinery/door/airlock = "Standard", + /obj/machinery/door/airlock/command = "Command", /obj/machinery/door/airlock/security = "Security", + /obj/machinery/door/airlock/engineering = "Engineering", /obj/machinery/door/airlock/medical = "Medical", + /obj/machinery/door/airlock/maintenance = "Maintenance", /obj/machinery/door/airlock/external = "External", + /obj/machinery/door/airlock/glass = "Standard (Glass)", /obj/machinery/door/airlock/freezer = "Freezer", + /obj/machinery/door/airlock/glass_command = "Command (Glass)", /obj/machinery/door/airlock/glass_engineering = "Engineering (Glass)", + /obj/machinery/door/airlock/glass_security = "Security (Glass)", /obj/machinery/door/airlock/glass_medical = "Medical (Glass)", + /obj/machinery/door/airlock/mining = "Mining", /obj/machinery/door/airlock/atmos = "Atmospherics", + /obj/machinery/door/airlock/research = "Research", /obj/machinery/door/airlock/glass_research = "Research (Glass)", + /obj/machinery/door/airlock/glass_mining = "Mining (Glass)", /obj/machinery/door/airlock/glass_atmos = "Atmospherics (Glass)") - New() +/obj/item/weapon/rcd/New() + desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." + spark_system = new /datum/effect/system/spark_spread + spark_system.set_up(5, 0, src) + spark_system.attach(src) + rcd_list += src + door_accesses_list = list() + for(var/access in get_all_accesses()) + door_accesses_list[++door_accesses_list.len] = list("name" = get_access_desc(access), "id" = access, "enabled" = (access in door_accesses)) + return + +/obj/item/weapon/rcd/Destroy() + qdel(spark_system) + spark_system = null + rcd_list -= src + return ..() + +/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user, params) + ..() + if(istype(W, /obj/item/weapon/rcd_ammo)) + var/obj/item/weapon/rcd_ammo/R = W + if((matter + R.ammoamt) > max_matter) + to_chat(user, "The RCD cant hold any more matter-units.") + return + matter += R.ammoamt + user.drop_item() + qdel(W) + playsound(loc, 'sound/machines/click.ogg', 50, 1) + to_chat(user, "The RCD now holds [matter]/[max_matter] matter-units.") desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." - src.spark_system = new /datum/effect/system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - rcd_list += src + nanomanager.update_uis(src) return - Destroy() - qdel(spark_system) - spark_system = null - rcd_list -= src - return ..() - attackby(obj/item/weapon/W, mob/user, params) - ..() - if(istype(W, /obj/item/weapon/rcd_ammo)) - var/obj/item/weapon/rcd_ammo/R = W - if((matter + R.ammoamt) > max_matter) - to_chat(user, "The RCD cant hold any more matter-units.") - return - matter += R.ammoamt - user.drop_item() - qdel(W) - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - to_chat(user, "The RCD now holds [matter]/[max_matter] matter-units.") - desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." +/obj/item/weapon/rcd/attack_self(mob/user) + //Change the mode + ui_interact(user) + +/obj/item/weapon/rcd/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state) + var/list/data = list() + data["mode"] = mode + data["door_type"] = door_type + data["menu"] = menu + data["matter"] = matter + data["max_matter"] = max_matter + data["one_access"] = one_access + data["locked"] = locked + + if(menu == 2) + var/list/door_types_list = list() + for(var/type in allowed_door_types) + door_types_list[++door_types_list.len] = list("name" = allowed_door_types[type], "type" = type) + data["allowed_door_types"] = door_types_list + + data["door_accesses"] = door_accesses_list + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "rcd.tmpl", "[name]", 400, 400, state = state) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/obj/item/weapon/rcd/Topic(href, href_list, nowindow, state) + if(..()) + return 1 + + if(prob(20)) + spark_system.start() + + if(href_list["mode"]) + mode = text2num(href_list["mode"]) + . = 1 + + if(href_list["door_type"]) + var/new_door_type = text2path(href_list["door_type"]) + if(!(new_door_type in allowed_door_types)) + message_admins("RCD HREF exploit attempted by [key_name(usr, usr.client)]!") return + door_type = new_door_type + . = 1 + + if(href_list["menu"]) + menu = text2num(href_list["menu"]) + . = 1 + + if (href_list["login"]) + if(istype(usr,/mob/living/silicon)) + locked = 0 + else + var/obj/item/I = usr.get_active_hand() + if (istype(I, /obj/item/device/pda)) + var/obj/item/device/pda/pda = I + I = pda.id + var/obj/item/weapon/card/id/ID = I + if (istype(ID) && ID && check_access(ID)) + locked = 0 + . = 1 + + if (href_list["logout"]) + locked = 1 + . = 1 + + if(href_list["toggle_one_access"] && !locked) + one_access = !one_access + . = 1 + + if(href_list["toggle_access"] && !locked) + var/href_access = text2num(href_list["toggle_access"]) + if(href_access in door_accesses) + door_accesses -= href_access + else + door_accesses += href_access + door_accesses_list = list() + for(var/access in get_all_accesses()) + door_accesses_list[++door_accesses_list.len] = list("name" = get_access_desc(access), "id" = access, "enabled" = (access in door_accesses)) + . = 1 + +/obj/item/weapon/rcd/proc/activate() + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - attack_self(mob/user) - //Change the mode - playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) - switch(mode) - if(1) - mode = 2 - to_chat(user, "Changed mode to 'Airlock'") - if(prob(20)) - src.spark_system.start() - return - if(2) - mode = 3 - to_chat(user, "Changed mode to 'Deconstruct'") - if(prob(20)) - src.spark_system.start() - return - if(3) - mode = 4 - to_chat(user, "Changed mode to 'Windows'") - if(prob(20)) - src.spark_system.start() - return - if(4) - mode = 1 - to_chat(user, "Changed mode to 'Floor & Walls'") - if(prob(20)) - src.spark_system.start() - return +/obj/item/weapon/rcd/afterattack(atom/A, mob/user, proximity) + if(!proximity) return + if(istype(A,/area/shuttle)||istype(A,/turf/space/transit)) + return 0 + if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/window))) + return 0 - proc/activate() - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + switch(mode) + if(1) + if(istype(A, /turf/space)) + if(useResource(1, user)) + to_chat(user, "Building Floor...") + activate() + var/turf/AT = A + AT.ChangeTurf(/turf/simulated/floor/plating) + return 1 + return 0 + if(istype(A, /turf/simulated/floor)) + if(checkResource(3, user)) + to_chat(user, "Building Wall ...") + playsound(loc, 'sound/machines/click.ogg', 50, 1) + if(do_after(user, 20, target = A)) + if(!useResource(3, user)) return 0 + activate() + var/turf/AT = A + AT.ChangeTurf(/turf/simulated/wall) + return 1 + return 0 - afterattack(atom/A, mob/user, proximity) - if(!proximity) return - if(istype(A,/area/shuttle)||istype(A,/turf/space/transit)) - return 0 - if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/window))) - return 0 + if(2) + if(istype(A, /turf/simulated/floor)) + if(checkResource(10, user)) + to_chat(user, "Building Airlock...") + playsound(loc, 'sound/machines/click.ogg', 50, 1) + if(do_after(user, 50, target = A)) + if(!useResource(10, user)) return 0 + activate() + var/obj/machinery/door/airlock/T = new door_type(A) + T.autoclose = 1 + if(one_access) + T.req_one_access = door_accesses + else + T.req_access = door_accesses + return 1 + return 0 + return 0 - switch(mode) - if(1) - if(istype(A, /turf/space)) - if(useResource(1, user)) - to_chat(user, "Building Floor...") + if(3) + if(istype(A, /turf/simulated/wall)) + if(istype(A, /turf/simulated/wall/r_wall) && !canRwall) + return 0 + if(checkResource(5, user)) + to_chat(user, "Deconstructing Wall...") + playsound(loc, 'sound/machines/click.ogg', 50, 1) + if(do_after(user, 40, target = A)) + if(!useResource(5, user)) return 0 activate() var/turf/AT = A AT.ChangeTurf(/turf/simulated/floor/plating) return 1 - return 0 + return 0 - if(istype(A, /turf/simulated/floor)) - if(checkResource(3, user)) - to_chat(user, "Building Wall ...") - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - if(do_after(user, 20, target = A)) - if(!useResource(3, user)) return 0 - activate() - var/turf/AT = A - AT.ChangeTurf(/turf/simulated/wall) - return 1 - return 0 + if(istype(A, /turf/simulated/floor)) + if(checkResource(5, user)) + to_chat(user, "Deconstructing Floor...") + playsound(loc, 'sound/machines/click.ogg', 50, 1) + if(do_after(user, 50, target = A)) + if(!useResource(5, user)) return 0 + activate() + var/turf/AT = A + AT.ChangeTurf(/turf/space) + return 1 + return 0 - if(2) - if(istype(A, /turf/simulated/floor)) - if(checkResource(10, user)) - to_chat(user, "Building Airlock...") - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - if(do_after(user, 50, target = A)) - if(!useResource(10, user)) return 0 - activate() - var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock( A ) - T.autoclose = 1 - return 1 - return 0 - return 0 - - if(3) - if(istype(A, /turf/simulated/wall)) - if(istype(A, /turf/simulated/wall/r_wall) && !canRwall) - return 0 - if(checkResource(5, user)) - to_chat(user, "Deconstructing Wall...") - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - if(do_after(user, 40, target = A)) - if(!useResource(5, user)) return 0 - activate() - var/turf/AT = A - AT.ChangeTurf(/turf/simulated/floor/plating) - return 1 - return 0 - - if(istype(A, /turf/simulated/floor)) - if(checkResource(5, user)) - to_chat(user, "Deconstructing Floor...") - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - if(do_after(user, 50, target = A)) - if(!useResource(5, user)) return 0 - activate() - var/turf/AT = A - AT.ChangeTurf(/turf/space) - return 1 - return 0 - - if(istype(A, /obj/machinery/door/airlock)) - if(checkResource(20, user)) - to_chat(user, "Deconstructing Airlock...") - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - if(do_after(user, 50, target = A)) - if(!useResource(20, user)) return 0 - activate() - qdel(A) - return 1 - return 0 + if(istype(A, /obj/machinery/door/airlock)) + if(checkResource(20, user)) + to_chat(user, "Deconstructing Airlock...") + playsound(loc, 'sound/machines/click.ogg', 50, 1) + if(do_after(user, 50, target = A)) + if(!useResource(20, user)) return 0 + activate() + qdel(A) + return 1 + return 0 - if(istype(A, /obj/structure/window)) // You mean the grille of course, do you? - A = locate(/obj/structure/grille) in A.loc - - if(istype(A, /obj/structure/grille)) - if(!checkResource(2, user)) - return 0 - to_chat(user, "Deconstructing window...") - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - if(!do_after(user, 20, target = A)) - return 0 - if(locate(/obj/structure/window/full/shuttle) in A.contents) - return 0 // Let's not give shuttle-griefers an easy time. - if(!useResource(2, user)) - return 0 - activate() - var/turf/T1 = get_turf(A) - qdel(A) - A = null - for(var/obj/structure/window/W in T1.contents) - W.disassembled = 1 - W.density = 0 - qdel(W) - for(var/cdir in cardinal) - var/turf/T2 = get_step(T1, cdir) - if(locate(/obj/structure/window/full/shuttle) in T2.contents) - continue // Shuttle windows? Nah. We don't need extra windows there. - if(!(locate(/obj/structure/grille) in T2.contents)) - continue - for(var/obj/structure/window/W in T2.contents) + if(istype(A, /obj/structure/window)) // You mean the grille of course, do you? + A = locate(/obj/structure/grille) in A.loc + + if(istype(A, /obj/structure/grille)) + if(!checkResource(2, user)) + return 0 + to_chat(user, "Deconstructing window...") + playsound(loc, 'sound/machines/click.ogg', 50, 1) + if(!do_after(user, 20, target = A)) + return 0 + if(locate(/obj/structure/window/full/shuttle) in A.contents) + return 0 // Let's not give shuttle-griefers an easy time. + if(!useResource(2, user)) + return 0 + activate() + var/turf/T1 = get_turf(A) + qdel(A) + A = null + for(var/obj/structure/window/W in T1.contents) + W.disassembled = 1 + W.density = 0 + qdel(W) + for(var/cdir in cardinal) + var/turf/T2 = get_step(T1, cdir) + if(locate(/obj/structure/window/full/shuttle) in T2.contents) + continue // Shuttle windows? Nah. We don't need extra windows there. + if(!(locate(/obj/structure/grille) in T2.contents)) + continue + for(var/obj/structure/window/W in T2.contents) + if(W.dir == turn(cdir, 180)) + W.disassembled = 1 + W.density = 0 + qdel(W) + var/obj/structure/window/reinforced/W = new(T2) + W.dir = turn(cdir, 180) + return 1 + return 0 + if(4) + if(istype(A, /turf/simulated/floor)) + if(locate(/obj/structure/grille) in contents) + return 0 // We already have window + if(!checkResource(2, user)) + return 0 + to_chat(user, "Constructing window...") + playsound(loc, 'sound/machines/click.ogg', 50, 1) + if(!do_after(user, 20, target = A)) + return 0 + if(locate(/obj/structure/grille) in A.contents) + return 0 // We already have window + if(!useResource(2, user)) + return 0 + activate() + new /obj/structure/grille(A) + for(var/obj/structure/window/W in contents) + W.disassembled = 1 // Prevent that annoying glass breaking sound + W.density = 0 + qdel(W) + for(var/cdir in cardinal) + var/turf/T = get_step(A, cdir) + if(locate(/obj/structure/grille) in T.contents) + for(var/obj/structure/window/W in T.contents) if(W.dir == turn(cdir, 180)) W.disassembled = 1 W.density = 0 qdel(W) - var/obj/structure/window/reinforced/W = new(T2) - W.dir = turn(cdir, 180) - return 1 - return 0 - if(4) - if(istype(A, /turf/simulated/floor)) - if(locate(/obj/structure/grille) in contents) - return 0 // We already have window - if(!checkResource(2, user)) - return 0 - to_chat(user, "Constructing window...") - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - if(!do_after(user, 20, target = A)) - return 0 - if(locate(/obj/structure/grille) in A.contents) - return 0 // We already have window - if(!useResource(2, user)) - return 0 - activate() - new /obj/structure/grille(A) - for(var/obj/structure/window/W in contents) - W.disassembled = 1 // Prevent that annoying glass breaking sound - W.density = 0 - qdel(W) - for(var/cdir in cardinal) - var/turf/T = get_step(A, cdir) - if(locate(/obj/structure/grille) in T.contents) - for(var/obj/structure/window/W in T.contents) - if(W.dir == turn(cdir, 180)) - W.disassembled = 1 - W.density = 0 - qdel(W) - else // Build a window! - var/obj/structure/window/reinforced/W = new(A) - W.dir = cdir - var/turf/AT = A - AT.ChangeTurf(/turf/simulated/floor/plating) // Platings go under windows. - return 1 - else - to_chat(user, "ERROR: RCD in MODE: [mode] attempted use by [user]. Send this text #coderbus or an admin.") - return 0 + else // Build a window! + var/obj/structure/window/reinforced/W = new(A) + W.dir = cdir + var/turf/AT = A + AT.ChangeTurf(/turf/simulated/floor/plating) // Platings go under windows. + return 1 + else + to_chat(user, "ERROR: RCD in MODE: [mode] attempted use by [user]. Send this text #coderbus or an admin.") + return 0 + + nanomanager.update_uis(src) /obj/item/weapon/rcd/proc/useResource(var/amount, var/mob/user) if(matter < amount) return 0 matter -= amount desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." + nanomanager.update_uis(src) return 1 /obj/item/weapon/rcd/proc/checkResource(var/amount, var/mob/user) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 3e8e5f13c2a..3e6b5c20c5b 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -421,7 +421,7 @@ else if(ghost) user.visible_message("[defib] buzzes: Resuscitation failed: Patient's brain is unresponsive. Further attempts may succeed.") to_chat(ghost, "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)") - to_chat(ghost, sound('sound/effects/genetics.ogg')) + ghost << sound('sound/effects/genetics.ogg') else user.visible_message("[defib] buzzes: Resuscitation failed.") playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) @@ -542,7 +542,7 @@ else if(ghost) user.visible_message("[user] buzzes: Resuscitation failed: Patient's brain is unresponsive. Further attempts may succeed.") to_chat(ghost, "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)") - to_chat(ghost, sound('sound/effects/genetics.ogg')) + ghost << sound('sound/effects/genetics.ogg') else user.visible_message("[user] buzzes: Resuscitation failed.") playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 67b52da31ec..4bac1168518 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -5,7 +5,7 @@ action_button_custom_type = /datum/action/item_action/hands_free origin_tech = "materials=2;biotech=3;programming=2" - var/activated = 1 //1 for implant types that can be activated, 0 for ones that are "always on" like loyalty implants + var/activated = 1 //1 for implant types that can be activated, 0 for ones that are "always on" like mindshield implants var/implanted = null var/mob/living/imp_in = null item_color = "b" diff --git a/code/game/objects/items/weapons/implants/implant_death_alarm.dm b/code/game/objects/items/weapons/implants/implant_death_alarm.dm index 58b9de4589a..2ef9e2ce35f 100644 --- a/code/game/objects/items/weapons/implants/implant_death_alarm.dm +++ b/code/game/objects/items/weapons/implants/implant_death_alarm.dm @@ -68,4 +68,4 @@ if(..()) processing_objects.Remove(src) return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/game/objects/items/weapons/implants/implant_explosive.dm b/code/game/objects/items/weapons/implants/implant_explosive.dm index c7e0fa67ef1..23d35d59995 100644 --- a/code/game/objects/items/weapons/implants/implant_explosive.dm +++ b/code/game/objects/items/weapons/implants/implant_explosive.dm @@ -125,4 +125,46 @@ /obj/item/weapon/implanter/explosive_macro/New() imp = new /obj/item/weapon/implant/explosive/macro(src) + ..() + + +// Dust implant, for CC officers. Prevents gear theft if they die. + +/obj/item/weapon/implant/dust + name = "duster implant" + desc = "An alarm which monitors host vital signs, transmitting a radio message and dusting the corpse on death." + +/obj/item/weapon/implant/dust/get_data() + var/dat = {"Implant Specifications:
+ Name: Ultraviolet Corp XX-13 Security Implant
+ Life: Activates upon death.
+ Important Notes: Vaporizes organic matter
+
+ Implant Details:
+ Function: Contains a compact, electrically activated heat source that turns its host to ash upon activation, or their death.
+ Special Features: Vaporizes
+ "} + return dat + +/obj/item/weapon/implant/dust/trigger(emote, mob/source) + if(emote == "deathgasp") + activate("death") + +/obj/item/weapon/implant/dust/activate(cause) + if(!cause || !imp_in || cause == "emp") + return 0 + if(cause == "action_button" && alert(imp_in, "Are you sure you want to activate your dusting implant? This will turn you to ash!", "Dusting Confirmation", "Yes", "No") != "Yes") + return 0 + to_chat(imp_in, "Your dusting implant activates!") + imp_in.visible_message("[imp_in] burns up in a flash!") + imp_in.dust() + +/obj/item/weapon/implant/dust/emp_act(severity) + return + +/obj/item/weapon/implanter/dust + name = "implanter (Dust-on-death)" + +/obj/item/weapon/implanter/dust/New() + imp = new /obj/item/weapon/implant/dust(src) ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implant_loyality.dm b/code/game/objects/items/weapons/implants/implant_mindshield.dm similarity index 84% rename from code/game/objects/items/weapons/implants/implant_loyality.dm rename to code/game/objects/items/weapons/implants/implant_mindshield.dm index 0c4b5c44648..a6efb21661f 100644 --- a/code/game/objects/items/weapons/implants/implant_loyality.dm +++ b/code/game/objects/items/weapons/implants/implant_mindshield.dm @@ -1,6 +1,6 @@ /obj/item/weapon/implant/loyalty - name = "loyalty implant" - desc = "Makes you loyal or such." + name = "mindshield implant" + desc = "Stops people messing with your mind." origin_tech = "materials=2;biotech=4;programming=4" activated = 0 @@ -8,7 +8,7 @@ var/dat = {"Implant Specifications:
Name: Nanotrasen Employee Management Implant
Life: Ten years.
- Important Notes: Personnel injected with this device tend to be much more loyal to the company.
+ Important Notes: Personnel injected with this device can better resist mental compulsions.

Implant Details:
Function: Contains a small pod of nanobots that manipulate the host's mental functions.
@@ -29,7 +29,7 @@ if(target.mind in ticker.mode.cult) to_chat(target, "You feel the corporate tendrils of Nanotrasen try to invade your mind!") else - to_chat(target, "You feel a surge of loyalty towards Nanotrasen.") + to_chat(target, "Your mind feels hardened - more resistant to brainwashing.") return 1 return 0 @@ -42,7 +42,7 @@ /obj/item/weapon/implanter/loyalty - name = "implanter (loyalty)" + name = "implanter (mindshield)" /obj/item/weapon/implanter/loyalty/New() imp = new /obj/item/weapon/implant/loyalty(src) @@ -51,8 +51,8 @@ /obj/item/weapon/implantcase/loyalty - name = "implant case - 'Loyalty'" - desc = "A glass case containing a loyalty implant." + name = "implant case - 'mindshield'" + desc = "A glass case containing a mindshield implant." /obj/item/weapon/implantcase/loyalty/New() imp = new /obj/item/weapon/implant/loyalty(src) diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 0820cc097c9..35d98f179a2 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -1,8 +1,8 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 /obj/machinery/implantchair - name = "loyalty implanter" - desc = "Used to implant occupants with loyalty implants." + name = "mindshield implanter" + desc = "Used to implant occupants with mindshield implants." icon = 'icons/obj/machines/implantchair.dmi' icon_state = "implantchair" density = 1 diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 2d7d3e0a956..2d98e0948dd 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -82,3 +82,9 @@ imp = new /obj/item/weapon/implant/traitor(src) ..() +/obj/item/weapon/implanter/death_alarm + name = "implanter (Death Alarm)" + +/obj/item/weapon/implanter/death_alarm/New() + imp = new /obj/item/weapon/implant/death_alarm(src) + ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index b580a024b91..6a7e0c15575 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -809,7 +809,7 @@ "} - + /obj/item/weapon/book/manual/security_space_law/black name = "Space Law - Limited Edition" desc = "A leather-bound, immaculately-written copy of JUSTICE." @@ -1483,7 +1483,7 @@
  • Attending Surgeon is to keep the Operating Room in an hygienic condition at all times, again, to prevent infection;
  • Attending Surgeon is to wash his/her hands between different patients, again, to prevent infection;
  • Attending Surgeon is to use either Anesthetics or Sedatives (for species that cannot breathe Anesthetics) during Surgical Procedures. Exception is made if the patient requests otherwise;
  • -
  • Attending Surgeon is not to remove any legal Implants (such as Loyalty or Tracking Implants) from the patient, unless requested by Security;
  • +
  • Attending Surgeon is not to remove any legal Implants (such as Mindshield or Tracking Implants) from the patient, unless requested by Security;
  • If a patient requests that a lost limb be replaced with an organic, rather than mechanical, substitute, said limb must be harvested from a compatible humanized Test Animal (such as Monkeys for Humans, or Farwas for Tajarans). Exception is made if the patient deliberately requests otherwise;
  • Attending Surgeon is not to bring any of the Surgical Tools outside of their respective Operating Room, and must in fact ensure the Operating Room maintains its proper inventory. This includes ensuring that the Anesthetics Equipment be kept inside the OR
  • @@ -2141,7 +2141,7 @@
  • Prisoner must then be borged, fired into space via mass driver, cremated, or placed in the morgue with a DNR Notice, at the discretion of the Magistrate, Captain or Head of Security.


  • - +

    Execution: Lethal Injection


    1. Prisoner must be bucklecuffed to the electric chair or bed.
    2. @@ -2150,7 +2150,7 @@
    3. Prisoner must then be borged, fired into space via mass driver, cremated, or placed in the morgue with a DNR Notice, at the discretion of the Magistrate, Captain or Head of Security.


    - +

    Execution: Firing Squad


    1. Prisoner must be brought to the Firing Range.
    2. @@ -2164,7 +2164,7 @@ "} - + /obj/item/weapon/book/manual/sop_general name = "Standard Operating Procedures" desc = "A set of guidelines aiming at the safe conduct of all station activities." @@ -2212,7 +2212,7 @@

      Code Green


      All clear.
      - Default operating level. No immediate or clear threat to the station. All departments may carry out work as normal. + Default operating level. No immediate or clear threat to the station. All departments may carry out work as normal. This alert level can be set at the Communications Console with a Captain level ID.
      All threats to the station have passed. All weapons need to be holstered and privacy laws are once again fully enforced.

      @@ -2230,10 +2230,10 @@ Crew:


      - +

      Code Blue


      There is a suspected threat.
      Raised alert level. Suspected threat to the station. Issued by Central Command, the Captain, or a Head of Staff vote. This alert level can be set at the Communications Console with a Captain level ID.
      @@ -2255,10 +2255,10 @@ Crew:


      - +

      Code Red


      There is a confirmed threat.
      Maximum alert level. Confirmed threat to the station or severe damage. Issued by Central Command, the Captain, or a Head of Staff vote. This alert level can only be set via the Keycard Authentication Devices in each Heads of Staff office and by swiping two Heads of Staff ID cards simultaneously.
      @@ -2279,12 +2279,12 @@ Crew:


      - +

      Code Gamma


      Extremely hostile threat onboard the station.
      GAMMA Security level has been set by Centcom.
      @@ -2306,21 +2306,21 @@ Crew:


      - +

      Hiring Policies




      - +

      Firing Policies




      - +

      Causes for Demotion and Dismissal




      - +

      Situational SoP


      The following situations have specific SoP. Failure to follow these may result in demotion/dismissal, or detaining by security if failure to follow them presents a significant risk.

      - +

      Evacuation




      - +

      Viral Outbreak Procedures


      Definition: A Viral Outbreak is defined as a situation where a Viral Pathogen has infected a significant portion of the crew (>10%)
        @@ -2376,7 +2376,7 @@
      1. Once the Viral Outbreak is over, all personnel are to return to regular duties.


      - +

      Evacuation




      - +

      Meteor Storm




      - +

      Singularity Containment Failure


      - \[Done\] - \[Reset\] - "} - // END AUTOFIX - user << browse(null, "window=preferences") - user << browse(HTML, "window=disabil;size=350x300") - return - -/datum/preferences/proc/SetRecords(mob/user) - var/HTML = "" - HTML += "
      " - HTML += "Set Character Records
      " - - HTML += "Medical Records
      " - - if(lentext(med_record) <= 40) - HTML += "[med_record]" - else - HTML += "[copytext(med_record, 1, 37)]..." - - HTML += "

      Employment Records
      " - - if(lentext(gen_record) <= 40) - HTML += "[gen_record]" - else - HTML += "[copytext(gen_record, 1, 37)]..." - - HTML += "

      Security Records
      " - - if(lentext(sec_record) <= 40) - HTML += "[sec_record]
      " - else - HTML += "[copytext(sec_record, 1, 37)]...
      " - - HTML += "
      " - HTML += "\[Done\]" - HTML += "
      " - - user << browse(null, "window=preferences") - user << browse(HTML, "window=records;size=350x300") - return - -/datum/preferences/proc/GetPlayerAltTitle(datum/job/job) - return player_alt_titles.Find(job.title) > 0 \ - ? player_alt_titles[job.title] \ - : job.title - -/datum/preferences/proc/SetPlayerAltTitle(datum/job/job, new_title) - // remove existing entry - if(player_alt_titles.Find(job.title)) - player_alt_titles -= job.title - // add one if it's not default - if(job.title != new_title) - player_alt_titles[job.title] = new_title - -/datum/preferences/proc/SetJob(mob/user, role) - var/datum/job/job = job_master.GetJob(role) - if(!job) - user << browse(null, "window=mob_occupation") - ShowChoices(user) - return - - if(role == "Civilian") - if(job_support_low & job.flag) - job_support_low &= ~job.flag - else - job_support_low |= job.flag - SetChoices(user) - return 1 - - if(GetJobDepartment(job, 1) & job.flag) - SetJobDepartment(job, 1) - else if(GetJobDepartment(job, 2) & job.flag) - SetJobDepartment(job, 2) - else if(GetJobDepartment(job, 3) & job.flag) - SetJobDepartment(job, 3) - else//job = Never - SetJobDepartment(job, 4) - - SetChoices(user) - return 1 - -/datum/preferences/proc/ResetJobs() - job_support_high = 0 - job_support_med = 0 - job_support_low = 0 - - job_medsci_high = 0 - job_medsci_med = 0 - job_medsci_low = 0 - - job_engsec_high = 0 - job_engsec_med = 0 - job_engsec_low = 0 - - job_karma_high = 0 - job_karma_med = 0 - job_karma_low = 0 - - -/datum/preferences/proc/GetJobDepartment(var/datum/job/job, var/level) - if(!job || !level) return 0 - switch(job.department_flag) - if(SUPPORT) - switch(level) - if(1) - return job_support_high - if(2) - return job_support_med - if(3) - return job_support_low - if(MEDSCI) - switch(level) - if(1) - return job_medsci_high - if(2) - return job_medsci_med - if(3) - return job_medsci_low - if(ENGSEC) - switch(level) - if(1) - return job_engsec_high - if(2) - return job_engsec_med - if(3) - return job_engsec_low - if(KARMA) - switch(level) - if(1) - return job_karma_high - if(2) - return job_karma_med - if(3) - return job_karma_low - return 0 - -/datum/preferences/proc/SetJobDepartment(var/datum/job/job, var/level) - if(!job || !level) return 0 - switch(level) - if(1)//Only one of these should ever be active at once so clear them all here - job_support_high = 0 - job_medsci_high = 0 - job_engsec_high = 0 - job_karma_high = 0 - return 1 - if(2)//Set current highs to med, then reset them - job_support_med |= job_support_high - job_medsci_med |= job_medsci_high - job_engsec_med |= job_engsec_high - job_karma_med |= job_karma_high - job_support_high = 0 - job_medsci_high = 0 - job_engsec_high = 0 - job_karma_high = 0 - - switch(job.department_flag) - if(SUPPORT) - switch(level) - if(2) - job_support_high = job.flag - job_support_med &= ~job.flag - if(3) - job_support_med |= job.flag - job_support_low &= ~job.flag - else - job_support_low |= job.flag - if(MEDSCI) - switch(level) - if(2) - job_medsci_high = job.flag - job_medsci_med &= ~job.flag - if(3) - job_medsci_med |= job.flag - job_medsci_low &= ~job.flag - else - job_medsci_low |= job.flag - if(ENGSEC) - switch(level) - if(2) - job_engsec_high = job.flag - job_engsec_med &= ~job.flag - if(3) - job_engsec_med |= job.flag - job_engsec_low &= ~job.flag - else - job_engsec_low |= job.flag - if(KARMA) - switch(level) - if(2) - job_karma_high = job.flag - job_karma_med &= ~job.flag - if(3) - job_karma_med |= job.flag - job_karma_low &= ~job.flag - else - job_karma_low |= job.flag - return 1 - -/datum/preferences/proc/process_link(mob/user, list/href_list) - if(!user) return - - if(href_list["preference"] == "job") - switch(href_list["task"]) - if("close") - user << browse(null, "window=mob_occupation") - ShowChoices(user) - if("reset") - ResetJobs() - SetChoices(user) - if("random") - if(alternate_option == GET_RANDOM_JOB || alternate_option == BE_CIVILIAN) - alternate_option += 1 - else if(alternate_option == RETURN_TO_LOBBY) - alternate_option = 0 - else - return 0 - SetChoices(user) - if ("alt_title") - var/datum/job/job = locate(href_list["job"]) - if (job) - var/choices = list(job.title) + job.alt_titles - var/choice = input("Pick a title for [job.title].", "Character Generation", GetPlayerAltTitle(job)) as anything in choices | null - if(choice) - SetPlayerAltTitle(job, choice) - SetChoices(user) - if("input") - SetJob(user, href_list["text"]) - if("setJobLevel") - UpdateJobPreference(user, href_list["text"], text2num(href_list["level"])) - else - SetChoices(user) - return 1 - else if(href_list["preference"] == "disabilities") - - switch(href_list["task"]) - if("close") - user << browse(null, "window=disabil") - ShowChoices(user) - if("reset") - disabilities=0 - SetDisabilities(user) - if("input") - var/dflag=text2num(href_list["disability"]) - if(dflag >= 0) - if(!(dflag==DISABILITY_FLAG_FAT && species!=("Human" || "Tajaran" || "Grey"))) - disabilities ^= text2num(href_list["disability"]) //MAGIC - SetDisabilities(user) - else - SetDisabilities(user) - return 1 - - else if(href_list["preference"] == "records") - if(text2num(href_list["record"]) >= 1) - SetRecords(user) - return - else - user << browse(null, "window=records") - if(href_list["task"] == "med_record") - var/medmsg = input(usr,"Set your medical notes here.","Medical Records",html_decode(med_record)) as message - - if(medmsg != null) - medmsg = copytext(medmsg, 1, MAX_PAPER_MESSAGE_LEN) - medmsg = html_encode(medmsg) - - med_record = medmsg - SetRecords(user) - - if(href_list["task"] == "sec_record") - var/secmsg = input(usr,"Set your security notes here.","Security Records",html_decode(sec_record)) as message - - if(secmsg != null) - secmsg = copytext(secmsg, 1, MAX_PAPER_MESSAGE_LEN) - secmsg = html_encode(secmsg) - - sec_record = secmsg - SetRecords(user) - if(href_list["task"] == "gen_record") - var/genmsg = input(usr,"Set your employment notes here.","Employment Records",html_decode(gen_record)) as message - - if(genmsg != null) - genmsg = copytext(genmsg, 1, MAX_PAPER_MESSAGE_LEN) - genmsg = html_encode(genmsg) - - gen_record = genmsg - SetRecords(user) - - switch(href_list["task"]) - if("random") - switch(href_list["preference"]) - if("name") - real_name = random_name(gender,species) - if("age") - age = rand(AGE_MIN, AGE_MAX) - if("hair") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) - r_hair = rand(0,255) - g_hair = rand(0,255) - b_hair = rand(0,255) - if("h_style") - h_style = random_hair_style(gender, species) - if("facial") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) - r_facial = rand(0,255) - g_facial = rand(0,255) - b_facial = rand(0,255) - if("f_style") - f_style = random_facial_hair_style(gender, species) - if("underwear") - underwear = random_underwear(gender) - ShowChoices(user) - if("undershirt") - undershirt = random_undershirt(gender) - ShowChoices(user) - if("socks") - socks = random_socks(gender) - ShowChoices(user) - if("eyes") - r_eyes = rand(0,255) - g_eyes = rand(0,255) - b_eyes = rand(0,255) - if("s_tone") - if(species in list("Human", "Drask", "Vox")) - s_tone = random_skin_tone(species) - if("s_color") - if(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Wryn", "Vulpkanin", "Machine")) - r_skin = rand(0,255) - g_skin = rand(0,255) - b_skin = rand(0,255) - if("bag") - backbag = rand(1,4) - /*if("skin_style") - h_style = random_skin_style(gender)*/ - if("all") - random_character() - if("input") - switch(href_list["preference"]) - if("name") - var/raw_name = input(user, "Choose your character's name:", "Character Preference") as text|null - if (!isnull(raw_name)) // Check to ensure that the user entered text (rather than cancel.) - var/new_name = reject_bad_name(raw_name) - if(new_name) - real_name = new_name - else - to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .") - - if("age") - var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference") as num|null - if(new_age) - age = max(min(round(text2num(new_age)), AGE_MAX),AGE_MIN) - if("species") - - var/list/new_species = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin") - var/prev_species = species -// var/whitelisted = 0 - - if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it! - for(var/S in whitelisted_species) - if(is_alien_whitelisted(user,S)) - new_species += S -// whitelisted = 1 -// if(!whitelisted) -// alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.") - else //Not using the whitelist? Aliens for everyone! - new_species += whitelisted_species - - species = input("Please select a species", "Character Generation", null) in new_species - - if(prev_species != species) - //grab one of the valid hair styles for the newly chosen species - var/list/valid_hairstyles = list() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if(!(species in S.species_allowed)) - continue - - valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] - - if(valid_hairstyles.len) - h_style = pick(valid_hairstyles) - else - //this shouldn't happen - h_style = hair_styles_list["Bald"] - - //grab one of the valid facial hair styles for the newly chosen species - var/list/valid_facialhairstyles = list() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if(!(species in S.species_allowed)) - continue - - valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] - - if(valid_facialhairstyles.len) - f_style = pick(valid_facialhairstyles) - else - //this shouldn't happen - f_style = facial_hair_styles_list["Shaved"] - - // Don't wear another species' underwear! - var/datum/sprite_accessory/S = underwear_list[underwear] - if(!(species in S.species_allowed)) - underwear = random_underwear(gender, species) - - S = undershirt_list[undershirt] - if(!(species in S.species_allowed)) - undershirt = random_undershirt(gender, species) - - S = socks_list[socks] - if(!(species in S.species_allowed)) - socks = random_socks(gender, species) - - //reset hair colour and skin colour - r_hair = 0//hex2num(copytext(new_hair, 2, 4)) - g_hair = 0//hex2num(copytext(new_hair, 4, 6)) - b_hair = 0//hex2num(copytext(new_hair, 6, 8)) - - s_tone = 0 - - if(!(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine"))) - r_skin = 0 - g_skin = 0 - b_skin = 0 - - ha_style = "None" // No Vulp ears on Unathi - m_style = "None" // No Unathi markings on Tajara - - body_accessory = null //no vulptail on humans damnit - - //Reset prosthetics. - organ_data = list() - rlimb_data = list() - if("speciesprefs")//oldvox code - speciesprefs = !speciesprefs - - if("language") -// var/languages_available - var/list/new_languages = list("None") -/* - if(config.usealienwhitelist) - for(var/L in all_languages) - var/datum/language/lang = all_languages[L] - if((!(lang.flags & RESTRICTED)) && (is_alien_whitelisted(user, L)||(!( lang.flags & WHITELISTED )))) - new_languages += lang - languages_available = 1 - - if(!(languages_available)) - alert(user, "There are not currently any available secondary languages.") - else -*/ - for(var/L in all_languages) - var/datum/language/lang = all_languages[L] - if(!(lang.flags & RESTRICTED)) - new_languages += lang.name - - language = input("Please select a secondary language", "Character Generation", null) in new_languages - - if("metadata") - var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null - if(new_metadata) - metadata = sanitize(copytext(new_metadata,1,MAX_MESSAGE_LEN)) - - if("b_type") - var/new_b_type = input(user, "Choose your character's blood-type:", "Character Preference") as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" ) - if(new_b_type) - b_type = new_b_type - - if("hair") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) - var/input = "Choose your character's hair colour:" - var/new_hair = input(user, input, "Character Preference", rgb(r_hair, g_hair, b_hair)) as color|null - if(new_hair) - r_hair = hex2num(copytext(new_hair, 2, 4)) - g_hair = hex2num(copytext(new_hair, 4, 6)) - b_hair = hex2num(copytext(new_hair, 6, 8)) - - if("h_style") - var/list/valid_hairstyles = list() - for(var/hairstyle in hair_styles_list) - var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - if(species == "Machine") //Species that can use prosthetic heads. - var/obj/item/organ/external/head/H = new() - if(S.name == "Bald") - valid_hairstyles[hairstyle] = S - if(!rlimb_data["head"]) //Handle situations where the head is default. - H.model = "Morpheus Cyberkinetics" - else - H.model = rlimb_data["head"] - var/datum/robolimb/robohead = all_robolimbs[H.model] - if(species in S.species_allowed) - if(robohead.is_monitor && (robohead.company in S.models_allowed)) //If the Machine character has the default Morpheus screen head or another screen head - //and said head is in the hair style's allowed models list... - valid_hairstyles[hairstyle] = S //Allow them to select the hairstyle. - continue - else - if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human hairstyles). - continue - else if(!robohead.is_monitor && ("Human" in S.species_allowed)) - valid_hairstyles[hairstyle] = S - continue - else - if(!(species in S.species_allowed)) - continue - - valid_hairstyles[hairstyle] = S - - var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles - if(new_h_style) - h_style = new_h_style - - if("headaccessory") - if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with head accessories. - var/input = "Choose the colour of your your character's head accessory:" - var/new_head_accessory = input(user, input, "Character Preference", rgb(r_headacc, g_headacc, b_headacc)) as color|null - if(new_head_accessory) - r_headacc = hex2num(copytext(new_head_accessory, 2, 4)) - g_headacc = hex2num(copytext(new_head_accessory, 4, 6)) - b_headacc = hex2num(copytext(new_head_accessory, 6, 8)) - - if("ha_style") - if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with head accessories. - var/list/valid_head_accessory_styles = list() - for(var/head_accessory_style in head_accessory_styles_list) - var/datum/sprite_accessory/H = head_accessory_styles_list[head_accessory_style] - if(!(species in H.species_allowed)) - continue - - valid_head_accessory_styles[head_accessory_style] = head_accessory_styles_list[head_accessory_style] - - var/new_head_accessory_style = input(user, "Choose the style of your character's head accessory:", "Character Preference") as null|anything in valid_head_accessory_styles - if(new_head_accessory_style) - ha_style = new_head_accessory_style - - if("markings") - if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with markings. - var/input = "Choose the colour of your your character's markings:" - var/new_markings = input(user, input, "Character Preference", rgb(r_markings, g_markings, b_markings)) as color|null - if(new_markings) - r_markings = hex2num(copytext(new_markings, 2, 4)) - g_markings = hex2num(copytext(new_markings, 4, 6)) - b_markings = hex2num(copytext(new_markings, 6, 8)) - - if("m_style") - if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with markings. - var/list/valid_markings = list() - for(var/markingstyle in marking_styles_list) - var/datum/sprite_accessory/M = marking_styles_list[markingstyle] - if(!(species in M.species_allowed)) - continue - - if(species == "Machine") //Species that can use prosthetic heads. - var/obj/item/organ/external/head/H = new() - if(!rlimb_data["head"]) //Handle situations where the head is default. - H.model = "Morpheus Cyberkinetics" - else - H.model = rlimb_data["head"] - var/datum/robolimb/robohead = all_robolimbs[H.model] - if(robohead.is_monitor && M.name != "None") //If the character can have prosthetic heads and they have the default Morpheus head (or another monitor-head), no optic markings. - continue - else if(!robohead.is_monitor && M.name != "None") //Otherwise, if they DON'T have the default head and the head's not a monitor but the head's not in the style's list of allowed models, skip. - if(!(robohead.company in M.models_allowed)) - continue - - valid_markings[markingstyle] = marking_styles_list[markingstyle] - - var/new_marking_style = input(user, "Choose the style of your character's markings:", "Character Preference", m_style) as null|anything in valid_markings - if(new_marking_style) - m_style = new_marking_style - - if("body_accessory") - var/list/possible_body_accessories = list() - if(check_rights(R_ADMIN, 1, user)) - possible_body_accessories = body_accessory_by_name.Copy() - else - for(var/B in body_accessory_by_name) - var/datum/body_accessory/accessory = body_accessory_by_name[B] - if(!istype(accessory)) - possible_body_accessories += "None" //the only null entry should be the "None" option - continue - if(species in accessory.allowed_species) - possible_body_accessories += B - - var/new_body_accessory = input(user, "Choose your body accessory:", "Character Preference") as null|anything in possible_body_accessories - if(new_body_accessory) - body_accessory = (new_body_accessory == "None") ? null : new_body_accessory - - if("facial") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) - var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(r_facial, g_facial, b_facial)) as color|null - if(new_facial) - r_facial = hex2num(copytext(new_facial, 2, 4)) - g_facial = hex2num(copytext(new_facial, 4, 6)) - b_facial = hex2num(copytext(new_facial, 6, 8)) - - if("f_style") - var/list/valid_facialhairstyles = list() - for(var/facialhairstyle in facial_hair_styles_list) - var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - if(S.name == "Shaved") - valid_facialhairstyles[facialhairstyle] = S - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if(species == "Machine") //Species that can use prosthetic heads. - var/obj/item/organ/external/head/H = new() - if(!rlimb_data["head"]) //Handle situations where the head is default. - H.model = "Morpheus Cyberkinetics" - else - H.model = rlimb_data["head"] - var/datum/robolimb/robohead = all_robolimbs[H.model] - if(species in S.species_allowed) - if(robohead.is_monitor) //If the Machine character has the default Morpheus screen head or another screen head and they're allowed to have the style, let them have it. - valid_facialhairstyles[facialhairstyle] = S - continue - else - if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human facial hairstyles). - continue - else if(!robohead.is_monitor && ("Human" in S.species_allowed)) - valid_facialhairstyles[facialhairstyle] = S - continue - else - if(!(species in S.species_allowed)) - continue - - valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] - - var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facialhairstyles - if(new_f_style) - f_style = new_f_style - - if("underwear") - var/list/underwear_options - if(gender == MALE) - underwear_options = underwear_m - else - underwear_options = underwear_f - - var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in underwear_options - if(new_underwear) - underwear = new_underwear - ShowChoices(user) - - if("undershirt") - var/new_undershirt - if(gender == MALE) - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_m - else - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_f - if(new_undershirt) - undershirt = new_undershirt - ShowChoices(user) - - if("socks") - var/list/valid_sockstyles = list() - for(var/sockstyle in socks_list) - var/datum/sprite_accessory/S = socks_list[sockstyle] - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - if(!(species in S.species_allowed)) - continue - valid_sockstyles[sockstyle] = socks_list[sockstyle] - var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles - ShowChoices(user) - if(new_socks) - socks = new_socks - - if("eyes") - var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(r_eyes, g_eyes, b_eyes)) as color|null - if(new_eyes) - r_eyes = hex2num(copytext(new_eyes, 2, 4)) - g_eyes = hex2num(copytext(new_eyes, 4, 6)) - b_eyes = hex2num(copytext(new_eyes, 6, 8)) - - if("s_tone") - if(species == "Human" || species == "Drask") - var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null - if(new_s_tone) - s_tone = 35 - max(min(round(new_s_tone), 220), 1) - else if(species == "Vox") - var/skin_c = input(user, "Choose your Vox's skin color:\n(1 = Default Green, 2 = Dark Green, 3 = Brown, 4 = Grey, \n5 = Emerald, 6 = Azure)", "Character Preference") as num|null - if(skin_c) - s_tone = max(min(round(skin_c), 6), 1) - - if("skin") - if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) - var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(r_skin, g_skin, b_skin)) as color|null - if(new_skin) - r_skin = hex2num(copytext(new_skin, 2, 4)) - g_skin = hex2num(copytext(new_skin, 4, 6)) - b_skin = hex2num(copytext(new_skin, 6, 8)) - - if("ooccolor") - var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference", ooccolor) as color|null - if(new_ooccolor) - ooccolor = new_ooccolor - - if("bag") - var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist - if(new_backbag) - backbag = backbaglist.Find(new_backbag) - - if("nt_relation") - var/new_relation = input(user, "Choose your relation to NT. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed") - if(new_relation) - nanotrasen_relation = new_relation - - if("flavor_text") - var/msg = input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(flavor_text)) as message - - if(msg != null) - msg = copytext(msg, 1, MAX_MESSAGE_LEN) - msg = html_encode(msg) - - flavor_text = msg - - if("limbs") - var/valid_limbs = list("Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand") - if(species == "Machine") - valid_limbs = list("Torso", "Lower Body", "Head", "Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand") - var/limb_name = input(user, "Which limb do you want to change?") as null|anything in valid_limbs - if(!limb_name) return - - var/limb = null - var/second_limb = null // if you try to change the arm, the hand should also change - var/third_limb = null // if you try to unchange the hand, the arm should also change - var/valid_limb_states = list("Normal", "Amputated", "Prosthesis") - var/no_amputate = 0 - - switch(limb_name) - if("Torso") - limb = "chest" - second_limb = "groin" - no_amputate = 1 - if("Lower Body") - limb = "groin" - no_amputate = 1 - if("Head") - limb = "head" - no_amputate = 1 - if("Left Leg") - limb = "l_leg" - second_limb = "l_foot" - if("Right Leg") - limb = "r_leg" - second_limb = "r_foot" - if("Left Arm") - limb = "l_arm" - second_limb = "l_hand" - if("Right Arm") - limb = "r_arm" - second_limb = "r_hand" - if("Left Foot") - limb = "l_foot" - if(species != "Machine") - third_limb = "l_leg" - if("Right Foot") - limb = "r_foot" - if(species != "Machine") - third_limb = "r_leg" - if("Left Hand") - limb = "l_hand" - if(species != "Machine") - third_limb = "l_arm" - if("Right Hand") - limb = "r_hand" - if(species != "Machine") - third_limb = "r_arm" - - var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in valid_limb_states - if(!new_state) return - - switch(new_state) - if("Normal") - if(limb == "head") - m_style = "None" - h_style = random_hair_style(gender, species) - f_style = facial_hair_styles_list["Shaved"] - organ_data[limb] = null - rlimb_data[limb] = null - if(third_limb) - organ_data[third_limb] = null - rlimb_data[third_limb] = null - if("Amputated") - if(!no_amputate) - organ_data[limb] = "amputated" - rlimb_data[limb] = null - if(second_limb) - organ_data[second_limb] = "amputated" - rlimb_data[second_limb] = null - if("Prosthesis") - var/choice - var/subchoice - var/datum/robolimb/R = new() - var/in_model - var/robolimb_companies = list() - for(var/limb_type in typesof(/datum/robolimb)) //This loop populates a list of companies that offer the limb the user selected previously as one of their cybernetic products. - R = new limb_type() - if(!R.unavailable_at_chargen && (limb in R.parts) && R.has_subtypes) //Ensures users can only choose companies that offer the parts they want, that singular models get added to the list as well companies that offer more than one model, and... - robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. - R = new() //Re-initialize R. - - choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in robolimb_companies //Choose from a list of companies that offer the part the user wants. - if(!choice) - return - R.company = choice - R = all_robolimbs[R.company] - if(R.has_subtypes == 1) //If the company the user selected provides more than just one base model, lets handle it. - var/list/robolimb_models = list() - for(var/limb_type in typesof(R)) //Handling the different models of parts that manufacturers can provide. - var/datum/robolimb/L = new limb_type() - if(limb in L.parts) //Make sure that only models that provide the parts the user needs populate the list. - robolimb_models[L.company] = L - if(robolimb_models.len == 1) //If there's only one model available in the list, autoselect it to avoid having to bother the user with a dialog that provides only one option. - subchoice = L.company //If there ends up being more than one model populating the list, subchoice will be overwritten later anyway, so this isn't a problem. - if(second_limb in L.parts) //If the child limb of the limb the user selected is also present in the model's parts list, state it's been found so the second limb can be set later. - in_model = 1 - if(robolimb_models.len > 1) //If there's more than one model in the list that can provide the part the user wants, let them choose. - subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models - if(subchoice) - choice = subchoice - if(limb == "head") - ha_style = "None" - h_style = hair_styles_list["Bald"] - f_style = facial_hair_styles_list["Shaved"] - m_style = "None" - rlimb_data[limb] = choice - organ_data[limb] = "cyborg" - if(second_limb) - if(subchoice) - if(in_model) - rlimb_data[second_limb] = choice - organ_data[second_limb] = "cyborg" - else - rlimb_data[second_limb] = choice - organ_data[second_limb] = "cyborg" - - if("organs") - var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes") - if(!organ_name) return - - var/organ = null - switch(organ_name) - if("Heart") - organ = "heart" - if("Eyes") - organ = "eyes" - - var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in list("Normal","Assisted","Mechanical") - if(!new_state) return - - switch(new_state) - if("Normal") - organ_data[organ] = null - if("Assisted") - organ_data[organ] = "assisted" - if("Mechanical") - organ_data[organ] = "mechanical" - -/* - if("skin_style") - var/skin_style_name = input(user, "Select a new skin style") as null|anything in list("default1", "default2", "default3") - if(!skin_style_name) return -*/ - -/* if("spawnpoint") - var/list/spawnkeys = list() - for(var/S in spawntypes) - spawnkeys += S - var/choice = input(user, "Where would you like to spawn when latejoining?") as null|anything in spawnkeys - if(!choice || !spawntypes[choice]) - spawnpoint = "Arrivals Shuttle" - return - spawnpoint = choice */ - - else - switch(href_list["preference"]) - if("publicity") - if(unlock_content) - toggles ^= MEMBER_PUBLIC - - if("gender") - if(gender == MALE) - gender = FEMALE - else - gender = MALE - underwear = random_underwear(gender) - - if("hear_adminhelps") - sound ^= SOUND_ADMINHELP - - if("ui") - switch(UI_style) - if("Midnight") - UI_style = "Plasmafire" - if("Plasmafire") - UI_style = "Retro" - if("Retro") - UI_style = "Slimecore" - if("Slimecore") - UI_style = "Operative" - if("Operative") - UI_style = "White" - else - UI_style = "Midnight" - - if(ishuman(usr)) //mid-round preference changes, for aesthetics - var/mob/living/carbon/human/H = usr - H.remake_hud() - - if("nanoui") - nanoui_fancy = !nanoui_fancy - - if("ghost_att_anim") - show_ghostitem_attack = !show_ghostitem_attack - - if("UIcolor") - var/UI_style_color_new = input(user, "Choose your UI color, dark colors are not recommended!", UI_style_color) as color|null - if(!UI_style_color_new) return - UI_style_color = UI_style_color_new - - if(ishuman(usr)) //mid-round preference changes, for aesthetics - var/mob/living/carbon/human/H = usr - H.remake_hud() - - if("UIalpha") - var/UI_style_alpha_new = input(user, "Select a new alpha(transparence) parameter for UI, between 50 and 255", UI_style_alpha) as num - if(!UI_style_alpha_new | !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return - UI_style_alpha = UI_style_alpha_new - - if(ishuman(usr)) //mid-round preference changes, for aesthetics - var/mob/living/carbon/human/H = usr - H.remake_hud() - - if("parallax") - space_parallax = !space_parallax - - if(usr && usr.hud_used) - usr.hud_used.update_parallax_and_dust() - - if("dust") - space_dust = !space_dust - - if(usr && usr.hud_used) - usr.hud_used.update_parallax_and_dust() - - if("p_speed") - parallax_speed = min(max(input(user, "Enter a number between 0 and 5 included (default=2)","Parallax Speed Preferences",parallax_speed),0),5) - - if("be_special") - var/r = href_list["role"] - if(!(r in special_roles)) - var/cleaned_r = sql_sanitize_text(r) - if(r != cleaned_r) // up to no good - message_admins("[user] attempted an href exploit! (This could have possibly lead to a \"Bobby Tables\" exploit, so they're probably up to no good). String: [r] ID: [last_id] IP: [last_ip]") - to_chat(user, "Stop right there, criminal scum") - else - be_special ^= r - - if("name") - be_random_name = !be_random_name - - if("randomslot") - randomslot = !randomslot - - if("hear_midis") - sound ^= SOUND_MIDI - - if("lobby_music") - sound ^= SOUND_LOBBY - if(sound & SOUND_LOBBY) - to_chat(user, sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1)) - else - to_chat(user, sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)) - - if("ghost_ears") - toggles ^= CHAT_GHOSTEARS - - if("ghost_sight") - toggles ^= CHAT_GHOSTSIGHT - - if("ghost_radio") - toggles ^= CHAT_GHOSTRADIO - - if("ghost_radio") - toggles ^= CHAT_GHOSTRADIO - - if("save") - save_preferences(user) - save_character(user) - - if("reload") - load_preferences(user) - load_character(user) - - if("open_load_dialog") - if(!IsGuestKey(user.key)) - open_load_dialog(user) - return 1 - - if("close_load_dialog") - close_load_dialog(user) - - if("changeslot") - if(!load_character(user,text2num(href_list["num"]))) - random_character() - real_name = random_name(gender) - save_character(user) - close_load_dialog(user) - - if("tab") - if (href_list["tab"]) - current_tab = text2num(href_list["tab"]) - - ShowChoices(user) - return 1 - -/datum/preferences/proc/copy_to(mob/living/carbon/human/character) - var/datum/species/S = all_species[species] - character.change_species(species) // Yell at me if this causes everything to melt - if(be_random_name) - real_name = random_name(gender,species) - - if(config.humans_need_surnames) - var/firstspace = findtext(real_name, " ") - var/name_length = length(real_name) - if(!firstspace) //we need a surname - real_name += " [pick(last_names)]" - else if(firstspace == name_length) - real_name += "[pick(last_names)]" - - character.add_language(language) - - character.real_name = real_name - character.dna.real_name = real_name - character.name = character.real_name - - character.flavor_text = flavor_text - if(character.ckey && !jobban_isbanned(character, "Records")) - character.med_record = med_record - character.sec_record = sec_record - character.gen_record = gen_record - - character.change_gender(gender) - character.age = age - character.b_type = b_type - - character.r_eyes = r_eyes - character.g_eyes = g_eyes - character.b_eyes = b_eyes - - //Head-specific - var/obj/item/organ/external/head/H = character.get_organ("head") - H.r_hair = r_hair - H.g_hair = g_hair - H.b_hair = b_hair - - H.r_facial = r_facial - H.g_facial = g_facial - H.b_facial = b_facial - - H.h_style = h_style - H.f_style = f_style - //End of head-specific. - - character.r_skin = r_skin - character.g_skin = g_skin - character.b_skin = b_skin - - character.s_tone = s_tone - - // Destroy/cyborgize organs - for(var/name in organ_data) - - var/status = organ_data[name] - var/obj/item/organ/external/O = character.organs_by_name[name] - if(O) - if(status == "amputated") - character.organs_by_name[O.limb_name] = null - character.organs -= O - if(O.children) // This might need to become recursive. - for(var/obj/item/organ/external/child in O.children) - character.organs_by_name[child.limb_name] = null - character.organs -= child - - else if(status == "cyborg") - if(rlimb_data[name]) - O.robotize(rlimb_data[name]) - else - O.robotize() - else - var/obj/item/organ/internal/I = character.get_int_organ_tag(name) - if(I) - if(status == "assisted") - I.mechassist() - else if(status == "mechanical") - I.robotize() - - character.dna.b_type = b_type - if(disabilities & DISABILITY_FLAG_FAT && character.species.flags & CAN_BE_FAT) - character.dna.SetSEState(FATBLOCK,1,1) - character.mutations += FAT - character.mutations += OBESITY - character.overeatduration = 600 - - if(disabilities & DISABILITY_FLAG_NEARSIGHTED) - character.dna.SetSEState(GLASSESBLOCK,1,1) - character.disabilities|=NEARSIGHTED - - if(disabilities & DISABILITY_FLAG_EPILEPTIC) - character.dna.SetSEState(EPILEPSYBLOCK,1,1) - character.disabilities|=EPILEPSY - - if(disabilities & DISABILITY_FLAG_DEAF) - character.dna.SetSEState(DEAFBLOCK,1,1) - character.sdisabilities|=DEAF - - if(disabilities & DISABILITY_FLAG_BLIND) - character.dna.SetSEState(BLINDBLOCK,1,1) - character.sdisabilities|=BLIND - - if(disabilities & DISABILITY_FLAG_MUTE) - character.dna.SetSEState(MUTEBLOCK,1,1) - character.sdisabilities |= MUTE - - S.handle_dna(character) - - if(character.dna.dirtySE) - character.dna.UpdateSE() - domutcheck(character) - - // Wheelchair necessary? - var/obj/item/organ/external/l_foot = character.get_organ("l_foot") - var/obj/item/organ/external/r_foot = character.get_organ("r_foot") - if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) - var/obj/structure/stool/bed/chair/wheelchair/W = new /obj/structure/stool/bed/chair/wheelchair (character.loc) - character.buckled = W - character.update_canmove() - W.dir = character.dir - W.buckled_mob = character - W.add_fingerprint(character) - - character.underwear = underwear - character.undershirt = undershirt - character.socks = socks - - if(character.species.bodyflags & HAS_HEAD_ACCESSORY) - H.r_headacc = r_headacc - H.g_headacc = g_headacc - H.b_headacc = b_headacc - H.ha_style = ha_style - if(character.species.bodyflags & HAS_MARKINGS) - character.r_markings = r_markings - character.g_markings = g_markings - character.b_markings = b_markings - character.m_style = m_style - - if(body_accessory) - character.body_accessory = body_accessory_by_name["[body_accessory]"] - - if(backbag > 4 || backbag < 1) - backbag = 1 //Same as above - character.backbag = backbag - - //Debugging report to track down a bug, which randomly assigned the plural gender to people. - if(character.gender in list(PLURAL, NEUTER)) - if(isliving(src)) //Ghosts get neuter by default - message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.") - character.change_gender(MALE) - - character.dna.ready_dna(character, flatten_SE = 0) - character.sync_organ_dna(assimilate=1) - character.UpdateAppearance() - - // Do the initial caching of the player's body icons. - character.force_update_limbs() - character.update_eyes() - character.regenerate_icons() - -/datum/preferences/proc/open_load_dialog(mob/user) - - var/DBQuery/query = dbcon.NewQuery("SELECT slot,real_name FROM [format_table_name("characters")] WHERE ckey='[user.ckey]' ORDER BY slot") - - var/dat = "" - dat += "
      " - dat += "Select a character slot to load
      " - var/name - - for(var/i=1, i<=max_save_slots, i++) - if(!query.Execute()) - var/err = query.ErrorMsg() - log_game("SQL ERROR during character slot loading. Error : \[[err]\]\n") - message_admins("SQL ERROR during character slot loading. Error : \[[err]\]\n") - return - while(query.NextRow()) - if(i==text2num(query.item[1])) - name = query.item[2] - if(!name) name = "Character[i]" - if(i==default_slot) - name = "[name]" - dat += "[name]
      " - name = null - - dat += "
      " - dat += "Close
      " - dat += "
      " -// user << browse(dat, "window=saves;size=300x390") - var/datum/browser/popup = new(user, "saves", "
      Character Saves
      ", 300, 390) - popup.set_content(dat) - popup.open(0) - -/datum/preferences/proc/close_load_dialog(mob/user) - user << browse(null, "window=saves") +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33 + +var/list/preferences_datums = list() + +var/global/list/special_role_times = list( //minimum age (in days) for accounts to play these roles + ROLE_PAI = 0, + ROLE_POSIBRAIN = 0, + ROLE_GUARDIAN = 0, + ROLE_TRAITOR = 7, + ROLE_CHANGELING = 14, + ROLE_SHADOWLING = 14, + ROLE_WIZARD = 14, + ROLE_REV = 14, + ROLE_VAMPIRE = 14, + ROLE_BLOB = 14, + ROLE_REVENANT = 14, + ROLE_OPERATIVE = 21, + ROLE_CULTIST = 21, + ROLE_RAIDER = 21, + ROLE_ALIEN = 21, + ROLE_DEMON = 21, + ROLE_SENTIENT = 21, +// ROLE_GANG = 21, + ROLE_BORER = 21, + ROLE_NINJA = 21, + ROLE_MUTINEER = 21, + ROLE_MALF = 30, + ROLE_ABDUCTOR = 30, +) + +/proc/player_old_enough_antag(client/C, role) + if(available_in_days_antag(C, role) == 0) + return 1 //Available in 0 days = available right now = player is old enough to play. + return 0 + +/proc/available_in_days_antag(client/C, role) + if(!C) + return 0 + if(!role) + return 0 + if(!config.use_age_restriction_for_antags) + return 0 + if(!isnum(C.player_age)) + return 0 //This is only a number if the db connection is established, otherwise it is text: "Requires database", meaning these restrictions cannot be enforced + var/minimal_player_age_antag = special_role_times[num2text(role)] + if(!isnum(minimal_player_age_antag)) + return 0 + + return max(0, minimal_player_age_antag - C.player_age) + +/proc/check_client_age(client/C, var/days) // If days isn't provided, returns the age of the client. If it is provided, it returns the days until the player_age is equal to or greater than the days variable + if(!days) + return C.player_age + else + return max(0, days - C.player_age) + return 0 + +//used for alternate_option +#define GET_RANDOM_JOB 0 +#define BE_CIVILIAN 1 +#define RETURN_TO_LOBBY 2 + +#define MAX_SAVE_SLOTS 20 // Save slots for regular players +#define MAX_SAVE_SLOTS_MEMBER 20 // Save slots for BYOND members + +#define MAX_GEAR_COST config.max_loadout_points + +#define TAB_CHAR 0 +#define TAB_GAME 1 +#define TAB_GEAR 2 + +/datum/preferences + //doohickeys for savefiles +// var/path + var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used +// var/savefile_version = 0 + var/max_save_slots = MAX_SAVE_SLOTS + + //non-preference stuff + var/warns = 0 + var/muted = 0 + var/last_ip + var/last_id + + //game-preferences + var/lastchangelog = "" //Saved changlog filesize to detect if there was a change + var/ooccolor = "#b82e00" + var/be_special = list() //Special role selection + var/UI_style = "Midnight" + var/nanoui_fancy = TRUE + var/toggles = TOGGLES_DEFAULT + var/sound = SOUND_DEFAULT + var/show_ghostitem_attack = TRUE + var/UI_style_color = "#ffffff" + var/UI_style_alpha = 255 + var/space_parallax = 1 + var/space_dust = 1 + var/parallax_speed = 1 + + + //character preferences + var/real_name //our character's name + var/be_random_name = 0 //whether we are a random name every round + var/gender = MALE //gender of character (well duh) + var/age = 30 //age of character + var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2). + var/b_type = "A+" //blood type (not-chooseable) + var/underwear = "Nude" //underwear type + var/undershirt = "Nude" //undershirt type + var/socks = "Nude" //socks type + var/backbag = 2 //backpack type + var/ha_style = "None" //Head accessory style + var/r_headacc = 0 //Head accessory colour + var/g_headacc = 0 //Head accessory colour + var/b_headacc = 0 //Head accessory colour + var/m_style = "None" //Marking style + var/r_markings = 0 //Marking colour + var/g_markings = 0 //Marking colour + var/b_markings = 0 //Marking colour + var/h_style = "Bald" //Hair type + var/r_hair = 0 //Hair color + var/g_hair = 0 //Hair color + var/b_hair = 0 //Hair color + var/f_style = "Shaved" //Face hair type + var/r_facial = 0 //Face hair color + var/g_facial = 0 //Face hair color + var/b_facial = 0 //Face hair color + var/s_tone = 0 //Skin tone + var/r_skin = 0 //Skin color + var/g_skin = 0 //Skin color + var/b_skin = 0 //Skin color + var/r_eyes = 0 //Eye color + var/g_eyes = 0 //Eye color + var/b_eyes = 0 //Eye color + var/species = "Human" + var/language = "None" //Secondary language + + var/body_accessory = null + + var/speciesprefs = 0//I hate having to do this, I really do (Using this for oldvox code, making names universal I guess + + //Mob preview + var/icon/preview_icon = null + var/icon/preview_icon_front = null + var/icon/preview_icon_side = null + + //Jobs, uses bitflags + var/job_support_high = 0 + var/job_support_med = 0 + var/job_support_low = 0 + + var/job_medsci_high = 0 + var/job_medsci_med = 0 + var/job_medsci_low = 0 + + var/job_engsec_high = 0 + var/job_engsec_med = 0 + var/job_engsec_low = 0 + + var/job_karma_high = 0 + var/job_karma_med = 0 + var/job_karma_low = 0 + + //Keeps track of preferrence for not getting any wanted jobs + var/alternate_option = 0 + + // maps each organ to either null(intact), "cyborg" or "amputated" + // will probably not be able to do this for head and torso ;) + var/list/organ_data = list() + var/list/rlimb_data = list() + + var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor" +// var/accent = "en-us" +// var/voice = "m1" +// var/pitch = 50 +// var/talkspeed = 175 + var/flavor_text = "" + var/med_record = "" + var/sec_record = "" + var/gen_record = "" + var/disabilities = 0 + + var/nanotrasen_relation = "Neutral" + + // 0 = character settings, 1 = game preferences + var/current_tab = TAB_CHAR + + // OOC Metadata: + var/metadata = "" + var/slot_name = "" + + // Whether or not to use randomized character slots + var/randomslot = 0 + + // jukebox volume + var/volume = 100 + + // BYOND membership + var/unlock_content = 0 + + //Gear stuff + var/list/gear = list() + var/gear_tab = "General" + +/datum/preferences/New(client/C) + b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") + if(istype(C)) + if(!IsGuestKey(C.key)) + unlock_content = C.IsByondMember() + if(unlock_content) + max_save_slots = MAX_SAVE_SLOTS_MEMBER + var/loaded_preferences_successfully = load_preferences(C) + if(loaded_preferences_successfully) + if(load_character(C)) + return + //we couldn't load character data so just randomize the character appearance + name + random_character() //let's create a random character then - rather than a fat, bald and naked man. + real_name = random_name(gender) + if(!loaded_preferences_successfully) + save_preferences(C) + save_character(C) //let's save this new random character so it doesn't keep generating new ones. + +/datum/preferences/proc/color_square(r, g, b) + return "___" + +// Hello I am a proc full of snowflake species checks how are you +/datum/preferences/proc/ShowChoices(mob/user) + if(!user || !user.client) + return + update_preview_icon() + user << browse_rsc(preview_icon_front, "previewicon.png") + user << browse_rsc(preview_icon_side, "previewicon2.png") + + var/dat = "" + dat += "
      " + dat += "Character Settings" + dat += "Game Preferences" + dat += "Loadout" + dat += "
      " + dat += "
      " + + switch(current_tab) + if(TAB_CHAR) // Character Settings + dat += "
      " + dat += "
      " + dat += "Name: " + dat += "[real_name]" + dat += "(Randomize)" + dat += "(Always Randomize)
      " + dat += "
      " + dat += "
      " + dat += "Slot [slot_name] - " + dat += "Load slot - " + dat += "Save slot - " + dat += "Reload slot" + dat += "
      " + dat += "
      " + dat += "
      " + dat += "

      Identity

      " + if(appearance_isbanned(user)) + dat += "You are banned from using custom names and appearances. \ + You can continue to adjust your characters, but you will be randomised once you join the game.\ +
      " + dat += "Gender: [gender == MALE ? "Male" : "Female"]
      " + dat += "Age: [age]
      " + dat += "Body: (®)
      " + dat += "Species: [species]
      " + if(species == "Vox") + dat += "N2 Tank: [speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
      " + dat += "Secondary Language: [language]
      " + dat += "Blood Type: [b_type]
      " + if(species in list("Human", "Drask", "Vox")) + dat += "Skin Tone: [species == "Vox" ? "[s_tone]" : "[-s_tone + 35]/220"]
      " + dat += "Disabilities: \[Set\]
      " + dat += "Nanotrasen Relation: [nanotrasen_relation]
      " + dat += "Set Flavor Text
      " + if(lentext(flavor_text) <= 40) + if(!lentext(flavor_text)) dat += "\[...\]
      " + else dat += "[flavor_text]
      " + else dat += "[TextPreview(flavor_text)]...
      " + + dat += "

      Hair & Accessories

      " + + if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories. + var/headaccessoryname = "Head Accessory: " + if(species == "Unathi") + headaccessoryname = "Horns: " + dat += "[headaccessoryname]" + dat += "[ha_style] " + dat += "Color [color_square(r_headacc, g_headacc, b_headacc)]
      " + + if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have body markings. + dat += "Body Markings: " + dat += "[m_style]" + dat += "Color [color_square(r_markings, g_markings, b_markings)]
      " + + dat += "Hair: " + dat += "[h_style]" + dat += "Color [color_square(r_hair, g_hair, b_hair)]
      " + + dat += "Facial Hair: " + dat += "[f_style ? "[f_style]" : "Shaved"]" + dat += "Color [color_square(r_facial, g_facial, b_facial)]
      " + + if(species != "Machine") + dat += "Eyes: " + dat += "Color [color_square(r_eyes, g_eyes, b_eyes)]
      " + + if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) //admins can always fuck with this, because they are admins + dat += "Body Color: " + dat += "Color [color_square(r_skin, g_skin, b_skin)]
      " + + if(body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) + dat += "Body Accessory: " + dat += "[body_accessory ? "[body_accessory]" : "None"]
      " + + dat += "
      " + dat += "

      Occupation Choices

      " + dat += "Set Occupation Preferences
      " + if(jobban_isbanned(user, "Records")) + dat += "You are banned from using character records.
      " + else + dat += "Character Records
      " + + dat += "

      Limbs

      " + dat += "Limbs and Parts: Adjust
      " + if(species != "Slime People" && species != "Machine") + dat += "Internal Organs: Adjust
      " + + //display limbs below + var/ind = 0 + for(var/name in organ_data) + var/status = organ_data[name] + var/organ_name = null + switch(name) + if("chest") organ_name = "torso" + if("groin") organ_name = "lower body" + if("head") organ_name = "head" + if("l_arm") organ_name = "left arm" + if("r_arm") organ_name = "right arm" + if("l_leg") organ_name = "left leg" + if("r_leg") organ_name = "right leg" + if("l_foot") organ_name = "left foot" + if("r_foot") organ_name = "right foot" + if("l_hand") organ_name = "left hand" + if("r_hand") organ_name = "right hand" + if("heart") organ_name = "heart" + if("eyes") organ_name = "eyes" + + if(status in list("cyborg", "amputated", "mechanical", "assisted")) + ++ind + if(ind > 1) dat += ", " + + switch(status) + if("cyborg") + var/datum/robolimb/R + if(rlimb_data[name] && all_robolimbs[rlimb_data[name]]) + R = all_robolimbs[rlimb_data[name]] + else + R = basic_robolimb + dat += "\t[R.company] [organ_name] prosthesis" + if("amputated") dat += "\tAmputated [organ_name]" + if("mechanical") dat += "\tMechanical [organ_name]" + if("assisted") + switch(organ_name) + if("heart") dat += "\tPacemaker-assisted [organ_name]" + if("voicebox") dat += "\tSurgically altered [organ_name]" + if("eyes") dat += "\tRetinal overlayed [organ_name]" + else dat += "\tMechanically assisted [organ_name]" + if(!ind) dat += "\[...\]
      " + else dat += "
      " + + dat += "

      Clothing

      " + dat += "Underwear: [underwear]
      " + dat += "Undershirt: [undershirt]
      " + dat += "Socks: [socks]
      " + dat += "Backpack Type: [backbaglist[backbag]]
      " + + dat += "
      " + + if(TAB_GAME) // General Preferences + dat += "
      " + dat += "

      General Settings

      " + dat += "Space Parallax: [space_parallax ? "Enabled" : "Disabled"]
      " + dat += "Parallax Speed: [parallax_speed]
      " + dat += "Space Dust: [space_dust ? "Yes" : "No"]
      " + dat += "Fancy NanoUI: [(nanoui_fancy) ? "Yes" : "No"]
      " + dat += "Ghost-Item Attack Animation: [(show_ghostitem_attack) ? "Yes" : "No"]
      " + dat += "Custom UI settings:
      " + dat += " - UI Style: [UI_style]
      " + dat += " - Color: [UI_style_color]
      __

      " + dat += " - Alpha (transparency): [UI_style_alpha]
      " + dat += "
      " + dat += "Play admin midis: [(sound & SOUND_MIDI) ? "Yes" : "No"]
      " + dat += "Play lobby music: [(sound & SOUND_LOBBY) ? "Yes" : "No"]
      " + if(user.client.holder) + dat += "Adminhelp sound: " + dat += "[(sound & SOUND_ADMINHELP)?"On":"Off"]
      " + + if(check_rights(R_ADMIN,0)) + dat += "OOC:     Change
      " + if(config.allow_Metadata) + dat += "OOC notes: Edit
      " + if(unlock_content) + dat += "BYOND Membership Publicity: [(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]
      " + + dat += "Randomized character slot: [randomslot ? "Yes" : "No"]
      " + dat += "Ghost ears: [(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]
      " + dat += "Ghost sight: [(toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]
      " + dat += "Ghost radio: [(toggles & CHAT_GHOSTRADIO) ? "Nearest Speakers" : "All Chatter"]
      " + + dat += "
      " + dat += "

      Special Role Settings

      " + if(jobban_isbanned(user, "Syndicate")) + dat += "You are banned from special roles." + be_special = list() + else + for(var/i in special_roles) + if(jobban_isbanned(user, i)) + dat += "Be [capitalize(i)]: \[BANNED]
      " + else if(!player_old_enough_antag(user.client,i)) + var/available_in_days_antag = available_in_days_antag(user.client,i) + dat += "Be [capitalize(i)]: \[IN [(available_in_days_antag)] DAYS]
      " + else + dat += "Be [capitalize(i)]: [(i in src.be_special) ? "Yes" : "No"]
      " + dat += "
      " + + if(TAB_GEAR) + var/total_cost = 0 + var/list/type_blacklist = list() + if(gear && gear.len) + for(var/i = 1, i <= gear.len, i++) + var/datum/gear/G = gear_datums[gear[i]] + if(G) + if(!G.subtype_cost_overlap) + if(G.subtype_path in type_blacklist) + continue + type_blacklist += G.subtype_path + total_cost += G.cost + + var/fcolor = "#3366CC" + if(total_cost < MAX_GEAR_COST) + fcolor = "#E67300" + dat += "" + dat += "" + dat += "" + + var/datum/loadout_category/LC = loadout_categories[gear_tab] + dat += "" + dat += "" + dat += "" + for(var/gear_name in LC.gear) + var/datum/gear/G = LC.gear[gear_name] + var/ticked = (G.display_name in gear) + dat += "" + dat += "" + if(ticked) + . += "" + dat += "
      [total_cost]/[MAX_GEAR_COST] loadout points spent. \[Clear Loadout\]
      " + + var/firstcat = 1 + for(var/category in loadout_categories) + if(firstcat) + firstcat = 0 + else + dat += " |" + if(category == gear_tab) + dat += " [category] " + else + dat += " [category] " + dat += "

      [LC.category]

      [G.display_name][G.cost]" + if(G.allowed_roles) + dat += "Restrictions: " + for(var/role in G.allowed_roles) + dat += role + " " + dat += "" + dat += "[G.description]
      " + for(var/datum/gear_tweak/tweak in G.gear_tweaks) + . += " [tweak.get_contents(get_tweak_metadata(G, tweak))]" + . += "
      " + + dat += "
      " + if(!IsGuestKey(user.key)) + dat += "Undo - " + dat += "Save Setup - " + + dat += "Reset Setup" + dat += "
      " + + var/datum/browser/popup = new(user, "preferences", "
      Character Setup
      ", 820, 640) + popup.set_content(dat) + popup.open(0) + + +/datum/preferences/proc/get_gear_metadata(var/datum/gear/G) + . = gear[G.display_name] + if(!.) + . = list() + gear[G.display_name] = . + +/datum/preferences/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak) + var/list/metadata = get_gear_metadata(G) + . = metadata["[tweak]"] + if(!.) + . = tweak.get_default() + metadata["[tweak]"] = . + +/datum/preferences/proc/set_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak, var/new_metadata) + var/list/metadata = get_gear_metadata(G) + metadata["[tweak]"] = new_metadata + + +/datum/preferences/proc/SetChoices(mob/user, limit = 12, list/splitJobs = list("Civilian","Research Director","AI","Bartender"), width = 760, height = 790) + if(!job_master) + return + + //limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice. + //splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice. + //width - Screen' width. Defaults to 550 to make it look nice. + //height - Screen's height. Defaults to 500 to make it look nice. + + + var/HTML = "" + HTML += "
      " + HTML += "Choose occupation chances
      Unavailable occupations are crossed out.

      " + HTML += "
      \[Done\]

      " // Easier to press up here. + HTML += "
      Left-click to raise an occupation preference, right-click to lower it.
      " + HTML += "" + HTML += "
      " // Table within a table for alignment, also allows you to easily add more colomns. + HTML += "" + var/index = -1 + + //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. + var/datum/job/lastJob + if (!job_master) return + for(var/datum/job/job in job_master.occupations) + + if(job.admin_only) + continue + + index += 1 + if((index >= limit) || (job.title in splitJobs)) + if((index < limit) && (lastJob != null)) + //If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with + //the last job's selection color. Creating a rather nice effect. + for(var/i = 0, i < (limit - index), i += 1) + HTML += "" + HTML += "
        
      " + index = 0 + + HTML += "" + continue + if(jobban_isbanned(user, rank)) + HTML += "[rank]" + continue + if(!job.player_old_enough(user.client)) + var/available_in_days = job.available_in_days(user.client) + HTML += "[rank]" + continue + if((job_support_low & CIVILIAN) && (rank != "Civilian")) + HTML += "[rank]" + continue + if((rank in command_positions) || (rank == "AI"))//Bold head jobs + HTML += "[rank]" + else + HTML += "[rank]" + + HTML += "" + HTML += "" + continue +/* + if(GetJobDepartment(job, 1) & job.flag) + HTML += " \[High]" + else if(GetJobDepartment(job, 2) & job.flag) + HTML += " \[Medium]" + else if(GetJobDepartment(job, 3) & job.flag) + HTML += " \[Low]" + else + HTML += " \[NEVER]" + */ + HTML += "[prefLevelLabel]" + + if(job.alt_titles) + HTML += "
      \[[GetPlayerAltTitle(job)]\]" + + + HTML += "" + + for(var/i = 1, i < (limit - index), i += 1) // Finish the column so it is even + HTML += "" + + HTML += "
      " + var/rank = job.title + lastJob = job + if(!is_job_whitelisted(user, rank)) + HTML += "[rank] \[KARMA]
      \[BANNED]
      \[IN [(available_in_days)] DAYS]
      " + + var/prefLevelLabel = "ERROR" + var/prefLevelColor = "pink" + var/prefUpperLevel = -1 // level to assign on left click + var/prefLowerLevel = -1 // level to assign on right click + + if(GetJobDepartment(job, 1) & job.flag) + prefLevelLabel = "High" + prefLevelColor = "slateblue" + prefUpperLevel = 4 + prefLowerLevel = 2 + else if(GetJobDepartment(job, 2) & job.flag) + prefLevelLabel = "Medium" + prefLevelColor = "green" + prefUpperLevel = 1 + prefLowerLevel = 3 + else if(GetJobDepartment(job, 3) & job.flag) + prefLevelLabel = "Low" + prefLevelColor = "orange" + prefUpperLevel = 2 + prefLowerLevel = 4 + else + prefLevelLabel = "NEVER" + prefLevelColor = "red" + prefUpperLevel = 3 + prefLowerLevel = 1 + + + HTML += "" + +// HTML += "" + + if(rank == "Civilian")//Civilian is special + if(job_support_low & CIVILIAN) + HTML += " \[Yes]" + else + HTML += " \[No]" + if(job.alt_titles) + HTML += "
      \[[GetPlayerAltTitle(job)]\]
        
      " + + HTML += "
      " + + switch(alternate_option) + if(GET_RANDOM_JOB) + HTML += "

      Get random job if preferences unavailable

      " + if(BE_CIVILIAN) + HTML += "

      Be a civilian if preferences unavailable

      " + if(RETURN_TO_LOBBY) + HTML += "

      Return to lobby if preferences unavailable

      " + + HTML += "
      \[Reset\]
      " + HTML += "
      " + + user << browse(null, "window=preferences") +// user << browse(HTML, "window=mob_occupation;size=[width]x[height]") + var/datum/browser/popup = new(user, "mob_occupation", "
      Occupation Preferences
      ", width, height) + popup.set_window_options("can_close=0") + popup.set_content(HTML) + popup.open(0) + return + +/datum/preferences/proc/SetJobPreferenceLevel(var/datum/job/job, var/level) + if (!job) + return 0 + + if (level == 1) // to high + // remove any other job(s) set to high + job_support_med |= job_support_high + job_engsec_med |= job_engsec_high + job_medsci_med |= job_medsci_high + job_karma_med |= job_karma_high + job_support_high = 0 + job_engsec_high = 0 + job_medsci_high = 0 + job_karma_high = 0 + + if (job.department_flag == SUPPORT) + job_support_low &= ~job.flag + job_support_med &= ~job.flag + job_support_high &= ~job.flag + + switch(level) + if (1) + job_support_high |= job.flag + if (2) + job_support_med |= job.flag + if (3) + job_support_low |= job.flag + + return 1 + else if (job.department_flag == ENGSEC) + job_engsec_low &= ~job.flag + job_engsec_med &= ~job.flag + job_engsec_high &= ~job.flag + + switch(level) + if (1) + job_engsec_high |= job.flag + if (2) + job_engsec_med |= job.flag + if (3) + job_engsec_low |= job.flag + + return 1 + else if (job.department_flag == MEDSCI) + job_medsci_low &= ~job.flag + job_medsci_med &= ~job.flag + job_medsci_high &= ~job.flag + + switch(level) + if (1) + job_medsci_high |= job.flag + if (2) + job_medsci_med |= job.flag + if (3) + job_medsci_low |= job.flag + + return 1 + else if (job.department_flag == KARMA) + job_karma_low &= ~job.flag + job_karma_med &= ~job.flag + job_karma_high &= ~job.flag + + switch(level) + if (1) + job_karma_high |= job.flag + if (2) + job_karma_med |= job.flag + if (3) + job_karma_low |= job.flag + + return 1 + + return 0 + +/datum/preferences/proc/UpdateJobPreference(mob/user, role, desiredLvl) + var/datum/job/job = job_master.GetJob(role) + + if(!job) + user << browse(null, "window=mob_occupation") + ShowChoices(user) + return + + if (!isnum(desiredLvl)) + to_chat(user, "\red UpdateJobPreference - desired level was not a number. Please notify coders!") + ShowChoices(user) + return + + if(role == "Civilian") + if(job_support_low & job.flag) + job_support_low &= ~job.flag + else + job_support_low |= job.flag + SetChoices(user) + return 1 + + SetJobPreferenceLevel(job, desiredLvl) + SetChoices(user) + + return 1 + +/datum/preferences/proc/ShowDisabilityState(mob/user,flag,label) + if(flag==DISABILITY_FLAG_FAT && species!=("Human" || "Tajaran" || "Grey")) + return "
    3. [species] cannot be fat.
    4. " + return "
    5. [label]: [disabilities & flag ? "Yes" : "No"]
    6. " + +/datum/preferences/proc/SetDisabilities(mob/user) + var/HTML = "" + + // AUTOFIXED BY fix_string_idiocy.py + // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:474: HTML += "
      " + HTML += {"
      + Choose disabilities
        "} + // END AUTOFIX + HTML += ShowDisabilityState(user,DISABILITY_FLAG_NEARSIGHTED,"Needs Glasses") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_FAT,"Obese") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_EPILEPTIC,"Seizures") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_DEAF,"Deaf") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_BLIND,"Blind") + HTML += ShowDisabilityState(user,DISABILITY_FLAG_MUTE,"Mute") + + + // AUTOFIXED BY fix_string_idiocy.py + // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:481: HTML += "
      " + HTML += {" + \[Done\] + \[Reset\] +
      "} + // END AUTOFIX + user << browse(null, "window=preferences") + user << browse(HTML, "window=disabil;size=350x300") + return + +/datum/preferences/proc/SetRecords(mob/user) + var/HTML = "" + HTML += "
      " + HTML += "Set Character Records
      " + + HTML += "Medical Records
      " + + if(lentext(med_record) <= 40) + HTML += "[med_record]" + else + HTML += "[copytext(med_record, 1, 37)]..." + + HTML += "

      Employment Records
      " + + if(lentext(gen_record) <= 40) + HTML += "[gen_record]" + else + HTML += "[copytext(gen_record, 1, 37)]..." + + HTML += "

      Security Records
      " + + if(lentext(sec_record) <= 40) + HTML += "[sec_record]
      " + else + HTML += "[copytext(sec_record, 1, 37)]...
      " + + HTML += "
      " + HTML += "\[Done\]" + HTML += "
      " + + user << browse(null, "window=preferences") + user << browse(HTML, "window=records;size=350x300") + return + +/datum/preferences/proc/GetPlayerAltTitle(datum/job/job) + return player_alt_titles.Find(job.title) > 0 \ + ? player_alt_titles[job.title] \ + : job.title + +/datum/preferences/proc/SetPlayerAltTitle(datum/job/job, new_title) + // remove existing entry + if(player_alt_titles.Find(job.title)) + player_alt_titles -= job.title + // add one if it's not default + if(job.title != new_title) + player_alt_titles[job.title] = new_title + +/datum/preferences/proc/SetJob(mob/user, role) + var/datum/job/job = job_master.GetJob(role) + if(!job) + user << browse(null, "window=mob_occupation") + ShowChoices(user) + return + + if(role == "Civilian") + if(job_support_low & job.flag) + job_support_low &= ~job.flag + else + job_support_low |= job.flag + SetChoices(user) + return 1 + + if(GetJobDepartment(job, 1) & job.flag) + SetJobDepartment(job, 1) + else if(GetJobDepartment(job, 2) & job.flag) + SetJobDepartment(job, 2) + else if(GetJobDepartment(job, 3) & job.flag) + SetJobDepartment(job, 3) + else//job = Never + SetJobDepartment(job, 4) + + SetChoices(user) + return 1 + +/datum/preferences/proc/ResetJobs() + job_support_high = 0 + job_support_med = 0 + job_support_low = 0 + + job_medsci_high = 0 + job_medsci_med = 0 + job_medsci_low = 0 + + job_engsec_high = 0 + job_engsec_med = 0 + job_engsec_low = 0 + + job_karma_high = 0 + job_karma_med = 0 + job_karma_low = 0 + + +/datum/preferences/proc/GetJobDepartment(var/datum/job/job, var/level) + if(!job || !level) return 0 + switch(job.department_flag) + if(SUPPORT) + switch(level) + if(1) + return job_support_high + if(2) + return job_support_med + if(3) + return job_support_low + if(MEDSCI) + switch(level) + if(1) + return job_medsci_high + if(2) + return job_medsci_med + if(3) + return job_medsci_low + if(ENGSEC) + switch(level) + if(1) + return job_engsec_high + if(2) + return job_engsec_med + if(3) + return job_engsec_low + if(KARMA) + switch(level) + if(1) + return job_karma_high + if(2) + return job_karma_med + if(3) + return job_karma_low + return 0 + +/datum/preferences/proc/SetJobDepartment(var/datum/job/job, var/level) + if(!job || !level) return 0 + switch(level) + if(1)//Only one of these should ever be active at once so clear them all here + job_support_high = 0 + job_medsci_high = 0 + job_engsec_high = 0 + job_karma_high = 0 + return 1 + if(2)//Set current highs to med, then reset them + job_support_med |= job_support_high + job_medsci_med |= job_medsci_high + job_engsec_med |= job_engsec_high + job_karma_med |= job_karma_high + job_support_high = 0 + job_medsci_high = 0 + job_engsec_high = 0 + job_karma_high = 0 + + switch(job.department_flag) + if(SUPPORT) + switch(level) + if(2) + job_support_high = job.flag + job_support_med &= ~job.flag + if(3) + job_support_med |= job.flag + job_support_low &= ~job.flag + else + job_support_low |= job.flag + if(MEDSCI) + switch(level) + if(2) + job_medsci_high = job.flag + job_medsci_med &= ~job.flag + if(3) + job_medsci_med |= job.flag + job_medsci_low &= ~job.flag + else + job_medsci_low |= job.flag + if(ENGSEC) + switch(level) + if(2) + job_engsec_high = job.flag + job_engsec_med &= ~job.flag + if(3) + job_engsec_med |= job.flag + job_engsec_low &= ~job.flag + else + job_engsec_low |= job.flag + if(KARMA) + switch(level) + if(2) + job_karma_high = job.flag + job_karma_med &= ~job.flag + if(3) + job_karma_med |= job.flag + job_karma_low &= ~job.flag + else + job_karma_low |= job.flag + return 1 + +/datum/preferences/proc/process_link(mob/user, list/href_list) + if(!user) return + + if(href_list["preference"] == "job") + switch(href_list["task"]) + if("close") + user << browse(null, "window=mob_occupation") + ShowChoices(user) + if("reset") + ResetJobs() + SetChoices(user) + if("random") + if(alternate_option == GET_RANDOM_JOB || alternate_option == BE_CIVILIAN) + alternate_option += 1 + else if(alternate_option == RETURN_TO_LOBBY) + alternate_option = 0 + else + return 0 + SetChoices(user) + if ("alt_title") + var/datum/job/job = locate(href_list["job"]) + if (job) + var/choices = list(job.title) + job.alt_titles + var/choice = input("Pick a title for [job.title].", "Character Generation", GetPlayerAltTitle(job)) as anything in choices | null + if(choice) + SetPlayerAltTitle(job, choice) + SetChoices(user) + if("input") + SetJob(user, href_list["text"]) + if("setJobLevel") + UpdateJobPreference(user, href_list["text"], text2num(href_list["level"])) + else + SetChoices(user) + return 1 + else if(href_list["preference"] == "disabilities") + + switch(href_list["task"]) + if("close") + user << browse(null, "window=disabil") + ShowChoices(user) + if("reset") + disabilities=0 + SetDisabilities(user) + if("input") + var/dflag=text2num(href_list["disability"]) + if(dflag >= 0) + if(!(dflag==DISABILITY_FLAG_FAT && species!=("Human" || "Tajaran" || "Grey"))) + disabilities ^= text2num(href_list["disability"]) //MAGIC + SetDisabilities(user) + else + SetDisabilities(user) + return 1 + + else if(href_list["preference"] == "records") + if(text2num(href_list["record"]) >= 1) + SetRecords(user) + return + else + user << browse(null, "window=records") + if(href_list["task"] == "med_record") + var/medmsg = input(usr,"Set your medical notes here.","Medical Records",html_decode(med_record)) as message + + if(medmsg != null) + medmsg = copytext(medmsg, 1, MAX_PAPER_MESSAGE_LEN) + medmsg = html_encode(medmsg) + + med_record = medmsg + SetRecords(user) + + if(href_list["task"] == "sec_record") + var/secmsg = input(usr,"Set your security notes here.","Security Records",html_decode(sec_record)) as message + + if(secmsg != null) + secmsg = copytext(secmsg, 1, MAX_PAPER_MESSAGE_LEN) + secmsg = html_encode(secmsg) + + sec_record = secmsg + SetRecords(user) + if(href_list["task"] == "gen_record") + var/genmsg = input(usr,"Set your employment notes here.","Employment Records",html_decode(gen_record)) as message + + if(genmsg != null) + genmsg = copytext(genmsg, 1, MAX_PAPER_MESSAGE_LEN) + genmsg = html_encode(genmsg) + + gen_record = genmsg + SetRecords(user) + + if(href_list["preference"] == "gear") + if(href_list["toggle_gear"]) + var/datum/gear/TG = gear_datums[href_list["toggle_gear"]] + if(TG.display_name in gear) + gear -= TG.display_name + else + var/total_cost = 0 + var/list/type_blacklist = list() + for(var/gear_name in gear) + var/datum/gear/G = gear_datums[gear_name] + if(istype(G)) + if(!G.subtype_cost_overlap) + if(G.subtype_path in type_blacklist) + continue + type_blacklist += G.subtype_path + total_cost += G.cost + + if((total_cost + TG.cost) <= MAX_GEAR_COST) + gear += TG.display_name + + else if(href_list["gear"] && href_list["tweak"]) + var/datum/gear/gear = gear_datums[href_list["gear"]] + var/datum/gear_tweak/tweak = locate(href_list["tweak"]) + if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks)) + return + var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) + if(!metadata || !CanUseTopic(user)) + return + set_tweak_metadata(gear, tweak, metadata) + else if(href_list["select_category"]) + gear_tab = href_list["select_category"] + else if(href_list["clear_loadout"]) + gear.Cut() + + ShowChoices(user) + return + + switch(href_list["task"]) + if("random") + switch(href_list["preference"]) + if("name") + real_name = random_name(gender,species) + if("age") + age = rand(AGE_MIN, AGE_MAX) + if("hair") + if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) + r_hair = rand(0,255) + g_hair = rand(0,255) + b_hair = rand(0,255) + if("h_style") + h_style = random_hair_style(gender, species) + if("facial") + if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) + r_facial = rand(0,255) + g_facial = rand(0,255) + b_facial = rand(0,255) + if("f_style") + f_style = random_facial_hair_style(gender, species) + if("underwear") + underwear = random_underwear(gender) + ShowChoices(user) + if("undershirt") + undershirt = random_undershirt(gender) + ShowChoices(user) + if("socks") + socks = random_socks(gender) + ShowChoices(user) + if("eyes") + r_eyes = rand(0,255) + g_eyes = rand(0,255) + b_eyes = rand(0,255) + if("s_tone") + if(species in list("Human", "Drask", "Vox")) + s_tone = random_skin_tone() + if("s_color") + if(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Wryn", "Vulpkanin", "Machine")) + r_skin = rand(0,255) + g_skin = rand(0,255) + b_skin = rand(0,255) + if("bag") + backbag = rand(1,4) + /*if("skin_style") + h_style = random_skin_style(gender)*/ + if("all") + random_character() + if("input") + switch(href_list["preference"]) + if("name") + var/raw_name = input(user, "Choose your character's name:", "Character Preference") as text|null + if (!isnull(raw_name)) // Check to ensure that the user entered text (rather than cancel.) + var/new_name = reject_bad_name(raw_name) + if(new_name) + real_name = new_name + else + to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .") + + if("age") + var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference") as num|null + if(new_age) + age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN) + if("species") + + var/list/new_species = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin") + var/prev_species = species +// var/whitelisted = 0 + + if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it! + for(var/S in whitelisted_species) + if(is_alien_whitelisted(user,S)) + new_species += S +// whitelisted = 1 +// if(!whitelisted) +// alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.") + else //Not using the whitelist? Aliens for everyone! + new_species += whitelisted_species + + species = input("Please select a species", "Character Generation", null) in new_species + + if(prev_species != species) + //grab one of the valid hair styles for the newly chosen species + var/list/valid_hairstyles = list() + for(var/hairstyle in hair_styles_list) + var/datum/sprite_accessory/S = hair_styles_list[hairstyle] + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue + if(!(species in S.species_allowed)) + continue + + valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] + + if(valid_hairstyles.len) + h_style = pick(valid_hairstyles) + else + //this shouldn't happen + h_style = hair_styles_list["Bald"] + + //grab one of the valid facial hair styles for the newly chosen species + var/list/valid_facialhairstyles = list() + for(var/facialhairstyle in facial_hair_styles_list) + var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue + if(!(species in S.species_allowed)) + continue + + valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] + + if(valid_facialhairstyles.len) + f_style = pick(valid_facialhairstyles) + else + //this shouldn't happen + f_style = facial_hair_styles_list["Shaved"] + + // Don't wear another species' underwear! + var/datum/sprite_accessory/S = underwear_list[underwear] + if(!S || !(species in S.species_allowed)) + underwear = random_underwear(gender, species) + + S = undershirt_list[undershirt] + if(!S || !(species in S.species_allowed)) + undershirt = random_undershirt(gender, species) + + S = socks_list[socks] + if(!S || !(species in S.species_allowed)) + socks = random_socks(gender, species) + + //reset hair colour and skin colour + r_hair = 0//hex2num(copytext(new_hair, 2, 4)) + g_hair = 0//hex2num(copytext(new_hair, 4, 6)) + b_hair = 0//hex2num(copytext(new_hair, 6, 8)) + + s_tone = 0 + + if(!(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine"))) + r_skin = 0 + g_skin = 0 + b_skin = 0 + + ha_style = "None" // No Vulp ears on Unathi + m_style = "None" // No Unathi markings on Tajara + + body_accessory = null //no vulptail on humans damnit + + //Reset prosthetics. + organ_data = list() + rlimb_data = list() + if("speciesprefs")//oldvox code + speciesprefs = !speciesprefs + + if("language") +// var/languages_available + var/list/new_languages = list("None") +/* + if(config.usealienwhitelist) + for(var/L in all_languages) + var/datum/language/lang = all_languages[L] + if((!(lang.flags & RESTRICTED)) && (is_alien_whitelisted(user, L)||(!( lang.flags & WHITELISTED )))) + new_languages += lang + languages_available = 1 + + if(!(languages_available)) + alert(user, "There are not currently any available secondary languages.") + else +*/ + for(var/L in all_languages) + var/datum/language/lang = all_languages[L] + if(!(lang.flags & RESTRICTED)) + new_languages += lang.name + + language = input("Please select a secondary language", "Character Generation", null) in new_languages + + if("metadata") + var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null + if(new_metadata) + metadata = sanitize(copytext(new_metadata,1,MAX_MESSAGE_LEN)) + + if("b_type") + var/new_b_type = input(user, "Choose your character's blood-type:", "Character Preference") as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" ) + if(new_b_type) + b_type = new_b_type + + if("hair") + if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) + var/input = "Choose your character's hair colour:" + var/new_hair = input(user, input, "Character Preference", rgb(r_hair, g_hair, b_hair)) as color|null + if(new_hair) + r_hair = hex2num(copytext(new_hair, 2, 4)) + g_hair = hex2num(copytext(new_hair, 4, 6)) + b_hair = hex2num(copytext(new_hair, 6, 8)) + + if("h_style") + var/list/valid_hairstyles = list() + for(var/hairstyle in hair_styles_list) + var/datum/sprite_accessory/S = hair_styles_list[hairstyle] + if(species == "Machine") //Species that can use prosthetic heads. + var/obj/item/organ/external/head/H = new() + if(S.name == "Bald") + valid_hairstyles[hairstyle] = S + if(!rlimb_data["head"]) //Handle situations where the head is default. + H.model = "Morpheus Cyberkinetics" + else + H.model = rlimb_data["head"] + var/datum/robolimb/robohead = all_robolimbs[H.model] + if(species in S.species_allowed) + if(robohead.is_monitor && (robohead.company in S.models_allowed)) //If the Machine character has the default Morpheus screen head or another screen head + //and said head is in the hair style's allowed models list... + valid_hairstyles[hairstyle] = S //Allow them to select the hairstyle. + continue + else + if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human hairstyles). + continue + else if(!robohead.is_monitor && ("Human" in S.species_allowed)) + valid_hairstyles[hairstyle] = S + continue + else + if(!(species in S.species_allowed)) + continue + + valid_hairstyles[hairstyle] = S + + var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles + if(new_h_style) + h_style = new_h_style + + if("headaccessory") + if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with head accessories. + var/input = "Choose the colour of your your character's head accessory:" + var/new_head_accessory = input(user, input, "Character Preference", rgb(r_headacc, g_headacc, b_headacc)) as color|null + if(new_head_accessory) + r_headacc = hex2num(copytext(new_head_accessory, 2, 4)) + g_headacc = hex2num(copytext(new_head_accessory, 4, 6)) + b_headacc = hex2num(copytext(new_head_accessory, 6, 8)) + + if("ha_style") + if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with head accessories. + var/list/valid_head_accessory_styles = list() + for(var/head_accessory_style in head_accessory_styles_list) + var/datum/sprite_accessory/H = head_accessory_styles_list[head_accessory_style] + if(!(species in H.species_allowed)) + continue + + valid_head_accessory_styles[head_accessory_style] = head_accessory_styles_list[head_accessory_style] + + var/new_head_accessory_style = input(user, "Choose the style of your character's head accessory:", "Character Preference") as null|anything in valid_head_accessory_styles + if(new_head_accessory_style) + ha_style = new_head_accessory_style + + if("markings") + if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with markings. + var/input = "Choose the colour of your your character's markings:" + var/new_markings = input(user, input, "Character Preference", rgb(r_markings, g_markings, b_markings)) as color|null + if(new_markings) + r_markings = hex2num(copytext(new_markings, 2, 4)) + g_markings = hex2num(copytext(new_markings, 4, 6)) + b_markings = hex2num(copytext(new_markings, 6, 8)) + + if("m_style") + if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with markings. + var/list/valid_markings = list() + for(var/markingstyle in marking_styles_list) + var/datum/sprite_accessory/M = marking_styles_list[markingstyle] + if(!(species in M.species_allowed)) + continue + + if(species == "Machine") //Species that can use prosthetic heads. + var/obj/item/organ/external/head/H = new() + if(!rlimb_data["head"]) //Handle situations where the head is default. + H.model = "Morpheus Cyberkinetics" + else + H.model = rlimb_data["head"] + var/datum/robolimb/robohead = all_robolimbs[H.model] + if(robohead.is_monitor && M.name != "None") //If the character can have prosthetic heads and they have the default Morpheus head (or another monitor-head), no optic markings. + continue + else if(!robohead.is_monitor && M.name != "None") //Otherwise, if they DON'T have the default head and the head's not a monitor but the head's not in the style's list of allowed models, skip. + if(!(robohead.company in M.models_allowed)) + continue + + valid_markings[markingstyle] = marking_styles_list[markingstyle] + + var/new_marking_style = input(user, "Choose the style of your character's markings:", "Character Preference", m_style) as null|anything in valid_markings + if(new_marking_style) + m_style = new_marking_style + + if("body_accessory") + var/list/possible_body_accessories = list() + if(check_rights(R_ADMIN, 1, user)) + possible_body_accessories = body_accessory_by_name.Copy() + else + for(var/B in body_accessory_by_name) + var/datum/body_accessory/accessory = body_accessory_by_name[B] + if(!istype(accessory)) + possible_body_accessories += "None" //the only null entry should be the "None" option + continue + if(species in accessory.allowed_species) + possible_body_accessories += B + + var/new_body_accessory = input(user, "Choose your body accessory:", "Character Preference") as null|anything in possible_body_accessories + if(new_body_accessory) + body_accessory = (new_body_accessory == "None") ? null : new_body_accessory + + if("facial") + if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) + var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(r_facial, g_facial, b_facial)) as color|null + if(new_facial) + r_facial = hex2num(copytext(new_facial, 2, 4)) + g_facial = hex2num(copytext(new_facial, 4, 6)) + b_facial = hex2num(copytext(new_facial, 6, 8)) + + if("f_style") + var/list/valid_facialhairstyles = list() + for(var/facialhairstyle in facial_hair_styles_list) + var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] + if(S.name == "Shaved") + valid_facialhairstyles[facialhairstyle] = S + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue + if(species == "Machine") //Species that can use prosthetic heads. + var/obj/item/organ/external/head/H = new() + if(!rlimb_data["head"]) //Handle situations where the head is default. + H.model = "Morpheus Cyberkinetics" + else + H.model = rlimb_data["head"] + var/datum/robolimb/robohead = all_robolimbs[H.model] + if(species in S.species_allowed) + if(robohead.is_monitor) //If the Machine character has the default Morpheus screen head or another screen head and they're allowed to have the style, let them have it. + valid_facialhairstyles[facialhairstyle] = S + continue + else + if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human facial hairstyles). + continue + else if(!robohead.is_monitor && ("Human" in S.species_allowed)) + valid_facialhairstyles[facialhairstyle] = S + continue + else + if(!(species in S.species_allowed)) + continue + + valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] + + var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facialhairstyles + if(new_f_style) + f_style = new_f_style + + if("underwear") + var/list/underwear_options + if(gender == MALE) + underwear_options = underwear_m + else + underwear_options = underwear_f + + var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in underwear_options + if(new_underwear) + underwear = new_underwear + ShowChoices(user) + + if("undershirt") + var/new_undershirt + if(gender == MALE) + new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_m + else + new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_f + if(new_undershirt) + undershirt = new_undershirt + ShowChoices(user) + + if("socks") + var/list/valid_sockstyles = list() + for(var/sockstyle in socks_list) + var/datum/sprite_accessory/S = socks_list[sockstyle] + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue + if(!(species in S.species_allowed)) + continue + valid_sockstyles[sockstyle] = socks_list[sockstyle] + var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles + ShowChoices(user) + if(new_socks) + socks = new_socks + + if("eyes") + var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(r_eyes, g_eyes, b_eyes)) as color|null + if(new_eyes) + r_eyes = hex2num(copytext(new_eyes, 2, 4)) + g_eyes = hex2num(copytext(new_eyes, 4, 6)) + b_eyes = hex2num(copytext(new_eyes, 6, 8)) + + if("s_tone") + if(species == "Human" || species == "Drask") + var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null + if(new_s_tone) + s_tone = 35 - max(min(round(new_s_tone), 220), 1) + else if(species == "Vox") + var/skin_c = input(user, "Choose your Vox's skin color:\n(1 = Default Green, 2 = Dark Green, 3 = Brown, 4 = Grey, \n5 = Emerald, 6 = Azure)", "Character Preference") as num|null + if(skin_c) + s_tone = max(min(round(skin_c), 6), 1) + + if("skin") + if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) + var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(r_skin, g_skin, b_skin)) as color|null + if(new_skin) + r_skin = hex2num(copytext(new_skin, 2, 4)) + g_skin = hex2num(copytext(new_skin, 4, 6)) + b_skin = hex2num(copytext(new_skin, 6, 8)) + + + if("ooccolor") + var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference", ooccolor) as color|null + if(new_ooccolor) + ooccolor = new_ooccolor + + if("bag") + var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist + if(new_backbag) + backbag = backbaglist.Find(new_backbag) + + if("nt_relation") + var/new_relation = input(user, "Choose your relation to NT. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed") + if(new_relation) + nanotrasen_relation = new_relation + + if("flavor_text") + var/msg = input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(flavor_text)) as message + + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + + flavor_text = msg + + if("limbs") + var/valid_limbs = list("Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand") + if(species == "Machine") + valid_limbs = list("Torso", "Lower Body", "Head", "Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand") + var/limb_name = input(user, "Which limb do you want to change?") as null|anything in valid_limbs + if(!limb_name) return + + var/limb = null + var/second_limb = null // if you try to change the arm, the hand should also change + var/third_limb = null // if you try to unchange the hand, the arm should also change + var/valid_limb_states = list("Normal", "Amputated", "Prosthesis") + var/no_amputate = 0 + + switch(limb_name) + if("Torso") + limb = "chest" + second_limb = "groin" + no_amputate = 1 + if("Lower Body") + limb = "groin" + no_amputate = 1 + if("Head") + limb = "head" + no_amputate = 1 + if("Left Leg") + limb = "l_leg" + second_limb = "l_foot" + if("Right Leg") + limb = "r_leg" + second_limb = "r_foot" + if("Left Arm") + limb = "l_arm" + second_limb = "l_hand" + if("Right Arm") + limb = "r_arm" + second_limb = "r_hand" + if("Left Foot") + limb = "l_foot" + if(species != "Machine") + third_limb = "l_leg" + if("Right Foot") + limb = "r_foot" + if(species != "Machine") + third_limb = "r_leg" + if("Left Hand") + limb = "l_hand" + if(species != "Machine") + third_limb = "l_arm" + if("Right Hand") + limb = "r_hand" + if(species != "Machine") + third_limb = "r_arm" + + var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in valid_limb_states + if(!new_state) return + + switch(new_state) + if("Normal") + if(limb == "head") + m_style = "None" + h_style = random_hair_style(gender, species) + f_style = facial_hair_styles_list["Shaved"] + organ_data[limb] = null + rlimb_data[limb] = null + if(third_limb) + organ_data[third_limb] = null + rlimb_data[third_limb] = null + if("Amputated") + if(!no_amputate) + organ_data[limb] = "amputated" + rlimb_data[limb] = null + if(second_limb) + organ_data[second_limb] = "amputated" + rlimb_data[second_limb] = null + if("Prosthesis") + var/choice + var/subchoice + var/datum/robolimb/R = new() + var/in_model + var/robolimb_companies = list() + for(var/limb_type in typesof(/datum/robolimb)) //This loop populates a list of companies that offer the limb the user selected previously as one of their cybernetic products. + R = new limb_type() + if(!R.unavailable_at_chargen && (limb in R.parts) && R.has_subtypes) //Ensures users can only choose companies that offer the parts they want, that singular models get added to the list as well companies that offer more than one model, and... + robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. + R = new() //Re-initialize R. + + choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in robolimb_companies //Choose from a list of companies that offer the part the user wants. + if(!choice) + return + R.company = choice + R = all_robolimbs[R.company] + if(R.has_subtypes == 1) //If the company the user selected provides more than just one base model, lets handle it. + var/list/robolimb_models = list() + for(var/limb_type in typesof(R)) //Handling the different models of parts that manufacturers can provide. + var/datum/robolimb/L = new limb_type() + if(limb in L.parts) //Make sure that only models that provide the parts the user needs populate the list. + robolimb_models[L.company] = L + if(robolimb_models.len == 1) //If there's only one model available in the list, autoselect it to avoid having to bother the user with a dialog that provides only one option. + subchoice = L.company //If there ends up being more than one model populating the list, subchoice will be overwritten later anyway, so this isn't a problem. + if(second_limb in L.parts) //If the child limb of the limb the user selected is also present in the model's parts list, state it's been found so the second limb can be set later. + in_model = 1 + if(robolimb_models.len > 1) //If there's more than one model in the list that can provide the part the user wants, let them choose. + subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models + if(subchoice) + choice = subchoice + if(limb == "head") + ha_style = "None" + h_style = hair_styles_list["Bald"] + f_style = facial_hair_styles_list["Shaved"] + m_style = "None" + rlimb_data[limb] = choice + organ_data[limb] = "cyborg" + if(second_limb) + if(subchoice) + if(in_model) + rlimb_data[second_limb] = choice + organ_data[second_limb] = "cyborg" + else + rlimb_data[second_limb] = choice + organ_data[second_limb] = "cyborg" + + if("organs") + var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes") + if(!organ_name) return + + var/organ = null + switch(organ_name) + if("Heart") + organ = "heart" + if("Eyes") + organ = "eyes" + + var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in list("Normal","Assisted","Mechanical") + if(!new_state) return + + switch(new_state) + if("Normal") + organ_data[organ] = null + if("Assisted") + organ_data[organ] = "assisted" + if("Mechanical") + organ_data[organ] = "mechanical" + +/* + if("skin_style") + var/skin_style_name = input(user, "Select a new skin style") as null|anything in list("default1", "default2", "default3") + if(!skin_style_name) return +*/ + +/* if("spawnpoint") + var/list/spawnkeys = list() + for(var/S in spawntypes) + spawnkeys += S + var/choice = input(user, "Where would you like to spawn when latejoining?") as null|anything in spawnkeys + if(!choice || !spawntypes[choice]) + spawnpoint = "Arrivals Shuttle" + return + spawnpoint = choice */ + + else + switch(href_list["preference"]) + if("publicity") + if(unlock_content) + toggles ^= MEMBER_PUBLIC + + if("gender") + if(gender == MALE) + gender = FEMALE + else + gender = MALE + underwear = random_underwear(gender) + + if("hear_adminhelps") + sound ^= SOUND_ADMINHELP + + if("ui") + switch(UI_style) + if("Midnight") + UI_style = "Plasmafire" + if("Plasmafire") + UI_style = "Retro" + if("Retro") + UI_style = "Slimecore" + if("Slimecore") + UI_style = "Operative" + if("Operative") + UI_style = "White" + else + UI_style = "Midnight" + + if(ishuman(usr)) //mid-round preference changes, for aesthetics + var/mob/living/carbon/human/H = usr + H.remake_hud() + + if("nanoui") + nanoui_fancy = !nanoui_fancy + + if("ghost_att_anim") + show_ghostitem_attack = !show_ghostitem_attack + + if("UIcolor") + var/UI_style_color_new = input(user, "Choose your UI color, dark colors are not recommended!", UI_style_color) as color|null + if(!UI_style_color_new) return + UI_style_color = UI_style_color_new + + if(ishuman(usr)) //mid-round preference changes, for aesthetics + var/mob/living/carbon/human/H = usr + H.remake_hud() + + if("UIalpha") + var/UI_style_alpha_new = input(user, "Select a new alpha(transparence) parameter for UI, between 50 and 255", UI_style_alpha) as num + if(!UI_style_alpha_new | !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return + UI_style_alpha = UI_style_alpha_new + + if(ishuman(usr)) //mid-round preference changes, for aesthetics + var/mob/living/carbon/human/H = usr + H.remake_hud() + + if("parallax") + space_parallax = !space_parallax + + if(usr && usr.hud_used) + usr.hud_used.update_parallax_and_dust() + + if("dust") + space_dust = !space_dust + + if(usr && usr.hud_used) + usr.hud_used.update_parallax_and_dust() + + if("p_speed") + parallax_speed = min(max(input(user, "Enter a number between 0 and 5 included (default=2)","Parallax Speed Preferences",parallax_speed),0),5) + + if("be_special") + var/r = href_list["role"] + if(!(r in special_roles)) + var/cleaned_r = sql_sanitize_text(r) + if(r != cleaned_r) // up to no good + message_admins("[user] attempted an href exploit! (This could have possibly lead to a \"Bobby Tables\" exploit, so they're probably up to no good). String: [r] ID: [last_id] IP: [last_ip]") + to_chat(user, "Stop right there, criminal scum") + else + be_special ^= r + + if("name") + be_random_name = !be_random_name + + if("randomslot") + randomslot = !randomslot + + if("hear_midis") + sound ^= SOUND_MIDI + + if("lobby_music") + sound ^= SOUND_LOBBY + if(sound & SOUND_LOBBY) + user << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) + else + user << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) + + if("ghost_ears") + toggles ^= CHAT_GHOSTEARS + + if("ghost_sight") + toggles ^= CHAT_GHOSTSIGHT + + if("ghost_radio") + toggles ^= CHAT_GHOSTRADIO + + if("ghost_radio") + toggles ^= CHAT_GHOSTRADIO + + if("save") + save_preferences(user) + save_character(user) + + if("reload") + load_preferences(user) + load_character(user) + + if("open_load_dialog") + if(!IsGuestKey(user.key)) + open_load_dialog(user) + return 1 + + if("close_load_dialog") + close_load_dialog(user) + + if("changeslot") + if(!load_character(user,text2num(href_list["num"]))) + random_character() + real_name = random_name(gender) + save_character(user) + close_load_dialog(user) + + if("tab") + if (href_list["tab"]) + current_tab = text2num(href_list["tab"]) + + ShowChoices(user) + return 1 + +/datum/preferences/proc/copy_to(mob/living/carbon/human/character) + var/datum/species/S = all_species[species] + character.change_species(species) // Yell at me if this causes everything to melt + if(be_random_name) + real_name = random_name(gender,species) + + if(config.humans_need_surnames) + var/firstspace = findtext(real_name, " ") + var/name_length = length(real_name) + if(!firstspace) //we need a surname + real_name += " [pick(last_names)]" + else if(firstspace == name_length) + real_name += "[pick(last_names)]" + + character.add_language(language) + + character.real_name = real_name + character.dna.real_name = real_name + character.name = character.real_name + + character.flavor_text = flavor_text + if(character.ckey && !jobban_isbanned(character, "Records")) + character.med_record = med_record + character.sec_record = sec_record + character.gen_record = gen_record + + character.change_gender(gender) + character.age = age + character.b_type = b_type + + character.r_eyes = r_eyes + character.g_eyes = g_eyes + character.b_eyes = b_eyes + + //Head-specific + var/obj/item/organ/external/head/H = character.get_organ("head") + H.r_hair = r_hair + H.g_hair = g_hair + H.b_hair = b_hair + + H.r_facial = r_facial + H.g_facial = g_facial + H.b_facial = b_facial + + H.h_style = h_style + H.f_style = f_style + //End of head-specific. + + character.r_skin = r_skin + character.g_skin = g_skin + character.b_skin = b_skin + + character.s_tone = s_tone + + // Destroy/cyborgize organs + for(var/name in organ_data) + + var/status = organ_data[name] + var/obj/item/organ/external/O = character.organs_by_name[name] + if(O) + if(status == "amputated") + character.organs_by_name[O.limb_name] = null + character.organs -= O + if(O.children) // This might need to become recursive. + for(var/obj/item/organ/external/child in O.children) + character.organs_by_name[child.limb_name] = null + character.organs -= child + + else if(status == "cyborg") + if(rlimb_data[name]) + O.robotize(rlimb_data[name]) + else + O.robotize() + else + var/obj/item/organ/internal/I = character.get_int_organ_tag(name) + if(I) + if(status == "assisted") + I.mechassist() + else if(status == "mechanical") + I.robotize() + + character.dna.b_type = b_type + if(disabilities & DISABILITY_FLAG_FAT && character.species.flags & CAN_BE_FAT) + character.dna.SetSEState(FATBLOCK,1,1) + character.mutations += FAT + character.mutations += OBESITY + character.overeatduration = 600 + + if(disabilities & DISABILITY_FLAG_NEARSIGHTED) + character.dna.SetSEState(GLASSESBLOCK,1,1) + character.disabilities|=NEARSIGHTED + + if(disabilities & DISABILITY_FLAG_EPILEPTIC) + character.dna.SetSEState(EPILEPSYBLOCK,1,1) + character.disabilities|=EPILEPSY + + if(disabilities & DISABILITY_FLAG_DEAF) + character.dna.SetSEState(DEAFBLOCK,1,1) + character.sdisabilities|=DEAF + + if(disabilities & DISABILITY_FLAG_BLIND) + character.dna.SetSEState(BLINDBLOCK,1,1) + character.sdisabilities|=BLIND + + if(disabilities & DISABILITY_FLAG_MUTE) + character.dna.SetSEState(MUTEBLOCK,1,1) + character.sdisabilities |= MUTE + + S.handle_dna(character) + + if(character.dna.dirtySE) + character.dna.UpdateSE() + domutcheck(character) + + // Wheelchair necessary? + var/obj/item/organ/external/l_foot = character.get_organ("l_foot") + var/obj/item/organ/external/r_foot = character.get_organ("r_foot") + if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) + var/obj/structure/stool/bed/chair/wheelchair/W = new /obj/structure/stool/bed/chair/wheelchair (character.loc) + character.buckled = W + character.update_canmove() + W.dir = character.dir + W.buckled_mob = character + W.add_fingerprint(character) + + character.underwear = underwear + character.undershirt = undershirt + character.socks = socks + + if(character.species.bodyflags & HAS_HEAD_ACCESSORY) + H.r_headacc = r_headacc + H.g_headacc = g_headacc + H.b_headacc = b_headacc + H.ha_style = ha_style + if(character.species.bodyflags & HAS_MARKINGS) + character.r_markings = r_markings + character.g_markings = g_markings + character.b_markings = b_markings + character.m_style = m_style + + if(body_accessory) + character.body_accessory = body_accessory_by_name["[body_accessory]"] + + if(backbag > 4 || backbag < 1) + backbag = 1 //Same as above + character.backbag = backbag + + //Debugging report to track down a bug, which randomly assigned the plural gender to people. + if(character.gender in list(PLURAL, NEUTER)) + if(isliving(src)) //Ghosts get neuter by default + message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.") + character.change_gender(MALE) + + character.dna.ready_dna(character, flatten_SE = 0) + character.sync_organ_dna(assimilate=1) + character.UpdateAppearance() + + // Do the initial caching of the player's body icons. + character.force_update_limbs() + character.update_eyes() + character.regenerate_icons() + +/datum/preferences/proc/open_load_dialog(mob/user) + + var/DBQuery/query = dbcon.NewQuery("SELECT slot,real_name FROM [format_table_name("characters")] WHERE ckey='[user.ckey]' ORDER BY slot") + + var/dat = "" + dat += "
      " + dat += "Select a character slot to load
      " + var/name + + for(var/i=1, i<=max_save_slots, i++) + if(!query.Execute()) + var/err = query.ErrorMsg() + log_game("SQL ERROR during character slot loading. Error : \[[err]\]\n") + message_admins("SQL ERROR during character slot loading. Error : \[[err]\]\n") + return + while(query.NextRow()) + if(i==text2num(query.item[1])) + name = query.item[2] + if(!name) name = "Character[i]" + if(i==default_slot) + name = "[name]" + dat += "[name]
      " + name = null + + dat += "
      " + dat += "Close
      " + dat += "
      " +// user << browse(dat, "window=saves;size=300x390") + var/datum/browser/popup = new(user, "saves", "
      Character Saves
      ", 300, 390) + popup.set_content(dat) + popup.open(0) + +/datum/preferences/proc/close_load_dialog(mob/user) + user << browse(null, "window=saves") diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm similarity index 98% rename from code/modules/client/preferences_mysql.dm rename to code/modules/client/preference/preferences_mysql.dm index bc23f9187a6..d30f9ea1f25 100644 --- a/code/modules/client/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -170,7 +170,8 @@ nanotrasen_relation, speciesprefs, socks, - body_accessory + body_accessory, + gear FROM [format_table_name("characters")] WHERE ckey='[C.ckey]' AND slot='[slot]'"}) if(!query.Execute()) var/err = query.ErrorMsg() @@ -248,6 +249,7 @@ //socks socks = query.item[58] body_accessory = query.item[59] + gear = params2list(query.item[60]) //Sanitize metadata = sanitize_text(metadata, initial(metadata)) @@ -310,6 +312,7 @@ if(!player_alt_titles) player_alt_titles = new() if(!organ_data) src.organ_data = list() if(!rlimb_data) src.rlimb_data = list() + if(!gear) gear = list() return 1 @@ -317,12 +320,15 @@ var/organlist var/rlimblist var/playertitlelist + var/gearlist if(!isemptylist(organ_data)) organlist = list2params(organ_data) if(!isemptylist(rlimb_data)) rlimblist = list2params(rlimb_data) if(!isemptylist(player_alt_titles)) playertitlelist = list2params(player_alt_titles) + if(!isemptylist(gear)) + gearlist = list2params(gear) var/DBQuery/firstquery = dbcon.NewQuery("SELECT slot FROM [format_table_name("characters")] WHERE ckey='[C.ckey]' ORDER BY slot") firstquery.Execute() @@ -386,7 +392,8 @@ nanotrasen_relation='[nanotrasen_relation]', speciesprefs='[speciesprefs]', socks='[socks]', - body_accessory='[body_accessory]' + body_accessory='[body_accessory]', + gear='[gearlist]' WHERE ckey='[C.ckey]' AND slot='[default_slot]'"} ) @@ -417,7 +424,7 @@ flavor_text, med_record, sec_record, gen_record, player_alt_titles, disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs, - socks, body_accessory) + socks, body_accessory, gear) VALUES ('[C.ckey]', '[default_slot]', '[sql_sanitize_text(metadata)]', '[sql_sanitize_text(real_name)]', '[be_random_name]','[gender]', @@ -438,7 +445,7 @@ '[sql_sanitize_text(html_encode(flavor_text))]', '[sql_sanitize_text(html_encode(med_record))]', '[sql_sanitize_text(html_encode(sec_record))]', '[sql_sanitize_text(html_encode(gen_record))]', '[playertitlelist]', '[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]', - '[socks]', '[body_accessory]') + '[socks]', '[body_accessory]', '[gearlist]') "} ) diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preference/preferences_spawnpoints.dm similarity index 100% rename from code/modules/client/preferences_spawnpoints.dm rename to code/modules/client/preference/preferences_spawnpoints.dm diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preference/preferences_toggles.dm similarity index 92% rename from code/modules/client/preferences_toggles.dm rename to code/modules/client/preference/preferences_toggles.dm index d736a7d2a17..a1ba6d907d6 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preference/preferences_toggles.dm @@ -1,257 +1,257 @@ -//toggles -/client/verb/toggle_ghost_ears() - set name = "Show/Hide GhostEars" - set category = "Preferences" - set desc = ".Toggle Between seeing all mob speech, and only speech of nearby mobs" - prefs.toggles ^= CHAT_GHOSTEARS - to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"].") - prefs.save_preferences(src) - feedback_add_details("admin_verb","TGE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ghost_sight() - set name = "Show/Hide GhostSight" - set category = "Preferences" - set desc = ".Toggle Between seeing all mob emotes, and only emotes of nearby mobs" - prefs.toggles ^= CHAT_GHOSTSIGHT - to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"].") - prefs.save_preferences(src) - feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ghost_radio() - set name = "Enable/Disable GhostRadio" - set category = "Preferences" - set desc = ".Toggle between hearing all radio chatter, or only from nearby speakers" - prefs.toggles ^= CHAT_GHOSTRADIO - to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTRADIO) ? "hear all radio chat in the world" : "only hear from nearby speakers"].") - prefs.save_preferences(src) - feedback_add_details("admin_verb","TGR") - -/client/proc/toggle_hear_radio() - set name = "Show/Hide RadioChatter" - set category = "Preferences" - set desc = "Toggle seeing radiochatter from radios and speakers" - if(!holder) return - prefs.toggles ^= CHAT_RADIO - prefs.save_preferences(src) - to_chat(usr, "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from radios or speakers") - feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggleadminhelpsound() - set name = "Hear/Silence Adminhelps" - set category = "Preferences" - set desc = "Toggle hearing a notification when admin PMs are recieved" - if(!holder) return - prefs.sound ^= SOUND_ADMINHELP - prefs.save_preferences(src) - to_chat(usr, "You will [(prefs.sound & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive.") - feedback_add_details("admin_verb","AHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/deadchat() // Deadchat toggle is usable by anyone. - set name = "Show/Hide Deadchat" - set category = "Preferences" - set desc ="Toggles seeing deadchat" - prefs.toggles ^= CHAT_DEAD - prefs.save_preferences(src) - - if(src.holder) - to_chat(src, "You will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.") - else - to_chat(src, "As a ghost, you will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.") - - feedback_add_details("admin_verb","TDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/toggleprayers() - set name = "Show/Hide Prayers" - set category = "Preferences" - set desc = "Toggles seeing prayers" - prefs.toggles ^= CHAT_PRAYER - prefs.save_preferences(src) - to_chat(src, "You will [(prefs.toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat.") - feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/togglescoreboard() - set name = "Hide/Display End Round Scoreboard" - set category = "Preferences" - set desc = "Toggles displaying end of round scoreboard" - prefs.toggles ^= DISABLE_SCOREBOARD - prefs.save_preferences(src) - to_chat(src, "You will [(prefs.toggles & DISABLE_SCOREBOARD) ? "no longer" : "now"] see the end of round scoreboard.") - feedback_add_details("admin_verb","TScoreboard") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/togglekarmareminder() - set name = "Hide/Display End Round Karma Reminder" - set category = "Preferences" - set desc = "Toggles displaying end of round karma reminder" - prefs.toggles ^= DISABLE_KARMA_REMINDER - prefs.save_preferences(src) - to_chat(src, "You will [(prefs.toggles & DISABLE_KARMA_REMINDER) ? "no longer" : "now"] see the end of round karma reminder.") - feedback_add_details("admin_verb","TKarmabugger") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggletitlemusic() - set name = "Hear/Silence LobbyMusic" - set category = "Preferences" - set desc = "Toggles hearing the GameLobby music" - prefs.sound ^= SOUND_LOBBY - prefs.save_preferences(src) - if(prefs.sound & SOUND_LOBBY) - to_chat(src, "You will now hear music in the game lobby.") - if(istype(mob, /mob/new_player)) - playtitlemusic() - else - to_chat(src, "You will no longer hear music in the game lobby.") - if(istype(mob, /mob/new_player)) - to_chat(src, sound(null, repeat = 0, wait = 0, volume = 85, channel = 1))// stop the jamsz - - feedback_add_details("admin_verb","TLobby") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/togglemidis() - set name = "Hear/Silence Midis" - set category = "Preferences" - set desc = "Toggles hearing sounds uploaded by admins" - prefs.sound ^= SOUND_MIDI - prefs.save_preferences(src) - if(prefs.sound & SOUND_MIDI) - to_chat(src, "You will now hear any sounds uploaded by admins.") - else - var/sound/break_sound = sound(null, repeat = 0, wait = 0, channel = 777) - break_sound.priority = 250 - to_chat(src, break_sound)//breaks the client's sound output on channel 777 - - to_chat(src, "You will no longer hear sounds uploaded by admins; any currently playing midis have been disabled.") - feedback_add_details("admin_verb","TMidi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/listen_ooc() - set name = "Show/Hide OOC" - set category = "Preferences" - set desc = "Toggles seeing OutOfCharacter chat" - prefs.toggles ^= CHAT_OOC - prefs.save_preferences(src) - to_chat(src, "You will [(prefs.toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel.") - feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/listen_looc() - set name = "Show/Hide LOOC" - set category = "Preferences" - set desc = "Toggles seeing Local OutOfCharacter chat" - prefs.toggles ^= CHAT_LOOC - prefs.save_preferences(src) - to_chat(src, "You will [(prefs.toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel.") - feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful - set name = "Hear/Silence Ambience" - set category = "Preferences" - set desc = "Toggles hearing ambient sound effects" - prefs.sound ^= SOUND_AMBIENCE - prefs.save_preferences(src) - if(prefs.sound & SOUND_AMBIENCE) - to_chat(src, "You will now hear ambient sounds.") - else - to_chat(src, "You will no longer hear ambient sounds.") - to_chat(src, sound(null, repeat = 0, wait = 0, volume = 0, channel = 1)) - feedback_add_details("admin_verb","TAmbi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/Toggle_Buzz() //No more headaches because headphones bump up shipambience.ogg to insanity levels. - set name = "Hear/Silence White Noise" - set category = "Preferences" - set desc = "Toggles hearing ambient white noise" - prefs.sound ^= SOUND_BUZZ - prefs.save_preferences(src) - if(prefs.sound & SOUND_BUZZ) - to_chat(src, "You will now hear ambient white noise.") - else - to_chat(src, "You will no longer hear ambient white noise.") - to_chat(src, sound(null, repeat = 0, wait = 0, volume = 0, channel = 2)) - feedback_add_details("admin_verb","TBuzz") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/Toggle_Heartbeat() //to toggle off heartbeat sounds, in case they get too annoying - set name = "Hear/Silence Heartbeat" - set category = "Preferences" - set desc = "Toggles hearing heart beating sound effects" - prefs.sound ^= SOUND_HEARTBEAT - prefs.save_preferences(src) - if(prefs.sound & SOUND_HEARTBEAT) - to_chat(src, "You will now hear heartbeat sounds.") - else - to_chat(src, "You will no longer hear heartbeat sounds.") - to_chat(src, sound(null, repeat = 0, wait = 0, volume = 0, channel = 1)) - to_chat(src, sound(null, repeat = 0, wait = 0, volume = 0, channel = 2)) - feedback_add_details("admin_verb","Thb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -// This needs a toggle because you people are awful and spammed terrible music -/client/verb/toggle_instruments() - set name = "Hear/Silence Instruments" - set category = "Preferences" - set desc = "Toggles hearing musical instruments like the violin and piano" - prefs.toggles ^= SOUND_INSTRUMENTS - prefs.save_preferences(src) - if(prefs.toggles & SOUND_INSTRUMENTS) - to_chat(src, "You will now hear people playing musical instruments.") - else - to_chat(src, "You will no longer hear musical instruments.") - feedback_add_details("admin_verb","TInstru") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_media() - set name = "Hear/Silence Streaming" - set category = "Preferences" - set desc = "Toggle hearing streaming media (radios, jukeboxes, etc)" - - prefs.sound ^= SOUND_STREAMING - prefs.save_preferences(src) - to_chat(usr, "You will [(prefs.sound & SOUND_STREAMING) ? "now" : "no longer"] hear streamed media.") - if(!media) return - if(prefs.sound & SOUND_STREAMING) - media.update_music() - else - media.stop_music() - -/client/verb/setup_character() - set name = "Game Preferences" - set category = "Preferences" - set desc = "Allows you to access the Setup Character screen. Changes to your character won't take effect until next round, but other changes will." - prefs.current_tab = 1 - prefs.ShowChoices(usr) - -/client/verb/toggle_space_parallax() - set name = "Toggle Space Parallax" - set category = "Preferences" - set desc = "Toggle the parallax effect of space turfs." - prefs.space_parallax = !prefs.space_parallax - - prefs.save_preferences(src) - - if(!prefs.space_parallax) - to_chat(usr, "Space parallax is now deactivated.") - else - to_chat(usr, "Space parallax is now activated.") - - if(mob && mob.hud_used) - mob.hud_used.update_parallax_and_dust() - -/client/verb/toggle_space_dust() - set name = "Toggle Space Dust" - set category = "Preferences" - set desc = "Toggle the presence of dust on space turfs." - prefs.space_dust = !prefs.space_dust - - prefs.save_preferences(src) - - if(!prefs.space_dust) - to_chat(usr, "Space dust is now deactivated.") - else - to_chat(usr, "Space dust is now activated.") - - if(mob && mob.hud_used) - mob.hud_used.update_parallax_and_dust() - -/client/verb/toggle_parallax_speed() - set name = "Change Parallax Speed" - set category = "Preferences" - set desc = "Change the speed at which parallax moves." - - prefs.parallax_speed = min(max(input(usr, "Enter a number between 0 and 5 included (default=2)","Parallax Speed Preferences",prefs.parallax_speed),0),5) - - prefs.save_preferences(src) +//toggles +/client/verb/toggle_ghost_ears() + set name = "Show/Hide GhostEars" + set category = "Preferences" + set desc = ".Toggle Between seeing all mob speech, and only speech of nearby mobs" + prefs.toggles ^= CHAT_GHOSTEARS + to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"].") + prefs.save_preferences(src) + feedback_add_details("admin_verb","TGE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ghost_sight() + set name = "Show/Hide GhostSight" + set category = "Preferences" + set desc = ".Toggle Between seeing all mob emotes, and only emotes of nearby mobs" + prefs.toggles ^= CHAT_GHOSTSIGHT + to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"].") + prefs.save_preferences(src) + feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ghost_radio() + set name = "Enable/Disable GhostRadio" + set category = "Preferences" + set desc = ".Toggle between hearing all radio chatter, or only from nearby speakers" + prefs.toggles ^= CHAT_GHOSTRADIO + to_chat(src, "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTRADIO) ? "hear all radio chat in the world" : "only hear from nearby speakers"].") + prefs.save_preferences(src) + feedback_add_details("admin_verb","TGR") + +/client/proc/toggle_hear_radio() + set name = "Show/Hide RadioChatter" + set category = "Preferences" + set desc = "Toggle seeing radiochatter from radios and speakers" + if(!holder) return + prefs.toggles ^= CHAT_RADIO + prefs.save_preferences(src) + to_chat(usr, "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from radios or speakers") + feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggleadminhelpsound() + set name = "Hear/Silence Adminhelps" + set category = "Preferences" + set desc = "Toggle hearing a notification when admin PMs are recieved" + if(!holder) return + prefs.sound ^= SOUND_ADMINHELP + prefs.save_preferences(src) + to_chat(usr, "You will [(prefs.sound & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive.") + feedback_add_details("admin_verb","AHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/deadchat() // Deadchat toggle is usable by anyone. + set name = "Show/Hide Deadchat" + set category = "Preferences" + set desc ="Toggles seeing deadchat" + prefs.toggles ^= CHAT_DEAD + prefs.save_preferences(src) + + if(src.holder) + to_chat(src, "You will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.") + else + to_chat(src, "As a ghost, you will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.") + + feedback_add_details("admin_verb","TDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/toggleprayers() + set name = "Show/Hide Prayers" + set category = "Preferences" + set desc = "Toggles seeing prayers" + prefs.toggles ^= CHAT_PRAYER + prefs.save_preferences(src) + to_chat(src, "You will [(prefs.toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat.") + feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/togglescoreboard() + set name = "Hide/Display End Round Scoreboard" + set category = "Preferences" + set desc = "Toggles displaying end of round scoreboard" + prefs.toggles ^= DISABLE_SCOREBOARD + prefs.save_preferences(src) + to_chat(src, "You will [(prefs.toggles & DISABLE_SCOREBOARD) ? "no longer" : "now"] see the end of round scoreboard.") + feedback_add_details("admin_verb","TScoreboard") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/togglekarmareminder() + set name = "Hide/Display End Round Karma Reminder" + set category = "Preferences" + set desc = "Toggles displaying end of round karma reminder" + prefs.toggles ^= DISABLE_KARMA_REMINDER + prefs.save_preferences(src) + to_chat(src, "You will [(prefs.toggles & DISABLE_KARMA_REMINDER) ? "no longer" : "now"] see the end of round karma reminder.") + feedback_add_details("admin_verb","TKarmabugger") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggletitlemusic() + set name = "Hear/Silence LobbyMusic" + set category = "Preferences" + set desc = "Toggles hearing the GameLobby music" + prefs.sound ^= SOUND_LOBBY + prefs.save_preferences(src) + if(prefs.sound & SOUND_LOBBY) + to_chat(src, "You will now hear music in the game lobby.") + if(istype(mob, /mob/new_player)) + playtitlemusic() + else + to_chat(src, "You will no longer hear music in the game lobby.") + if(istype(mob, /mob/new_player)) + src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)// stop the jamsz + + feedback_add_details("admin_verb","TLobby") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/togglemidis() + set name = "Hear/Silence Midis" + set category = "Preferences" + set desc = "Toggles hearing sounds uploaded by admins" + prefs.sound ^= SOUND_MIDI + prefs.save_preferences(src) + if(prefs.sound & SOUND_MIDI) + to_chat(src, "You will now hear any sounds uploaded by admins.") + else + var/sound/break_sound = sound(null, repeat = 0, wait = 0, channel = 777) + break_sound.priority = 250 + src << break_sound //breaks the client's sound output on channel 777 + + to_chat(src, "You will no longer hear sounds uploaded by admins; any currently playing midis have been disabled.") + feedback_add_details("admin_verb","TMidi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/listen_ooc() + set name = "Show/Hide OOC" + set category = "Preferences" + set desc = "Toggles seeing OutOfCharacter chat" + prefs.toggles ^= CHAT_OOC + prefs.save_preferences(src) + to_chat(src, "You will [(prefs.toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel.") + feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +/client/verb/listen_looc() + set name = "Show/Hide LOOC" + set category = "Preferences" + set desc = "Toggles seeing Local OutOfCharacter chat" + prefs.toggles ^= CHAT_LOOC + prefs.save_preferences(src) + to_chat(src, "You will [(prefs.toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel.") + feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +/client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful + set name = "Hear/Silence Ambience" + set category = "Preferences" + set desc = "Toggles hearing ambient sound effects" + prefs.sound ^= SOUND_AMBIENCE + prefs.save_preferences(src) + if(prefs.sound & SOUND_AMBIENCE) + to_chat(src, "You will now hear ambient sounds.") + else + to_chat(src, "You will no longer hear ambient sounds.") + src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1) + feedback_add_details("admin_verb","TAmbi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/Toggle_Buzz() //No more headaches because headphones bump up shipambience.ogg to insanity levels. + set name = "Hear/Silence White Noise" + set category = "Preferences" + set desc = "Toggles hearing ambient white noise" + prefs.sound ^= SOUND_BUZZ + prefs.save_preferences(src) + if(prefs.sound & SOUND_BUZZ) + to_chat(src, "You will now hear ambient white noise.") + else + to_chat(src, "You will no longer hear ambient white noise.") + src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) + feedback_add_details("admin_verb","TBuzz") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +/client/verb/Toggle_Heartbeat() //to toggle off heartbeat sounds, in case they get too annoying + set name = "Hear/Silence Heartbeat" + set category = "Preferences" + set desc = "Toggles hearing heart beating sound effects" + prefs.sound ^= SOUND_HEARTBEAT + prefs.save_preferences(src) + if(prefs.sound & SOUND_HEARTBEAT) + to_chat(src, "You will now hear heartbeat sounds.") + else + to_chat(src, "You will no longer hear heartbeat sounds.") + src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1) + src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) + feedback_add_details("admin_verb","Thb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +// This needs a toggle because you people are awful and spammed terrible music +/client/verb/toggle_instruments() + set name = "Hear/Silence Instruments" + set category = "Preferences" + set desc = "Toggles hearing musical instruments like the violin and piano" + prefs.sound ^= SOUND_INSTRUMENTS + prefs.save_preferences(src) + if(prefs.sound & SOUND_INSTRUMENTS) + to_chat(src, "You will now hear people playing musical instruments.") + else + to_chat(src, "You will no longer hear musical instruments.") + feedback_add_details("admin_verb","TInstru") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_media() + set name = "Hear/Silence Streaming" + set category = "Preferences" + set desc = "Toggle hearing streaming media (radios, jukeboxes, etc)" + + prefs.sound ^= SOUND_STREAMING + prefs.save_preferences(src) + to_chat(usr, "You will [(prefs.sound & SOUND_STREAMING) ? "now" : "no longer"] hear streamed media.") + if(!media) return + if(prefs.sound & SOUND_STREAMING) + media.update_music() + else + media.stop_music() + +/client/verb/setup_character() + set name = "Game Preferences" + set category = "Preferences" + set desc = "Allows you to access the Setup Character screen. Changes to your character won't take effect until next round, but other changes will." + prefs.current_tab = 1 + prefs.ShowChoices(usr) + +/client/verb/toggle_space_parallax() + set name = "Toggle Space Parallax" + set category = "Preferences" + set desc = "Toggle the parallax effect of space turfs." + prefs.space_parallax = !prefs.space_parallax + + prefs.save_preferences(src) + + if(!prefs.space_parallax) + to_chat(usr, "Space parallax is now deactivated.") + else + to_chat(usr, "Space parallax is now activated.") + + if(mob && mob.hud_used) + mob.hud_used.update_parallax_and_dust() + +/client/verb/toggle_space_dust() + set name = "Toggle Space Dust" + set category = "Preferences" + set desc = "Toggle the presence of dust on space turfs." + prefs.space_dust = !prefs.space_dust + + prefs.save_preferences(src) + + if(!prefs.space_dust) + to_chat(usr, "Space dust is now deactivated.") + else + to_chat(usr, "Space dust is now activated.") + + if(mob && mob.hud_used) + mob.hud_used.update_parallax_and_dust() + +/client/verb/toggle_parallax_speed() + set name = "Change Parallax Speed" + set category = "Preferences" + set desc = "Change the speed at which parallax moves." + + prefs.parallax_speed = min(max(input(usr, "Enter a number between 0 and 5 included (default=2)","Parallax Speed Preferences",prefs.parallax_speed),0),5) + + prefs.save_preferences(src) \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 8d6595b73ff..77de69f6767 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -316,14 +316,13 @@ BLIND // can't see anything flags |= MASKCOVERSMOUTH if(initial(flags) & AIRTIGHT) //If the mask is airtight and thus, one that you'd be able to run internals from yet can't because it was adjusted, make it airtight again. flags |= AIRTIGHT - if(H.head == src) - if(flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer. - if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground. - user.unEquip(src) - else //Otherwise, put it in an available hand, the active one preferentially. - src.loc = user - H.head = null - user.put_in_hands(src) + if(H.head == src && flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer. + if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground. + user.unEquip(src) + else //Otherwise, put it in an available hand, the active one preferentially. + src.loc = user + H.head = null + user.put_in_hands(src) else icon_state += "_up" to_chat(user, "You push \the [src] out of the way.") @@ -332,13 +331,10 @@ BLIND // can't see anything mask_adjusted = 1 if(adjusted_flags) slot_flags = adjusted_flags - if(ishuman(user)) - if(H.internal) - if(user.wear_mask == src) /*If the user was wearing the mask providing internals on their face at the time it was adjusted, turn off internals. - Otherwise, they adjusted it while it was in their hands or some such so we won't be needing to turn off internals.*/ - if(H.internals) - H.internals.icon_state = "internal0" - H.internal = null + if(ishuman(user) && H.internal && user.wear_mask == src && H.internals) /*If the user was wearing the mask providing internals on their face at the time it was adjusted, turn off internals. + Otherwise, they adjusted it while it was in their hands or some such so we won't be needing to turn off internals.*/ + H.internals.icon_state = "internal0" + H.internal = null if(flags_inv & HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer. flags_inv &= ~HIDEFACE /*Done after the above to avoid having to do a check for initial(src.flags_inv == HIDEFACE). This reveals the user's face since the bandana will now be going on their head.*/ @@ -346,14 +342,13 @@ BLIND // can't see anything flags &= ~MASKCOVERSMOUTH if(flags & AIRTIGHT) //If the mask was airtight, it won't be anymore since you just pushed it off your face. flags &= ~AIRTIGHT - if(user.wear_mask == src) - if(initial(flags_inv) == HIDEFACE) //Means that you won't have to take off and put back on simple things like breath masks which, realistically, can just be pulled down off your face. - if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground. - user.unEquip(src) - else //Otherwise, put it in an available hand, the active one preferentially. - src.loc = user - user.wear_mask = null - user.put_in_hands(src) + if(user.wear_mask == src && initial(flags_inv) == HIDEFACE) //Means that you won't have to take off and put back on simple things like breath masks which, realistically, can just be pulled down off your face. + if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground. + user.unEquip(src) + else //Otherwise, put it in an available hand, the active one preferentially. + src.loc = user + user.wear_mask = null + user.put_in_hands(src) usr.update_inv_wear_mask() usr.update_inv_head() @@ -452,6 +447,7 @@ BLIND // can't see anything var/suit_adjusted = 0 var/ignore_suitadjust = 1 var/adjust_flavour = null + var/list/hide_tail_by_species = null //Proc that opens and closes jackets. /obj/item/clothing/suit/proc/adjustsuit(var/mob/user) @@ -496,6 +492,15 @@ BLIND // can't see anything else to_chat(user, "You attempt to button up the velcro on \the [src], before promptly realising how retarded you are.") +/obj/item/clothing/suit/equipped(var/mob/living/carbon/human/user, var/slot) //Handle tail-hiding on a by-species basis. + if(ishuman(user) && hide_tail_by_species && slot == slot_wear_suit) + if(user.species.name in hide_tail_by_species) + if(!(flags_inv & HIDETAIL)) //Hide the tail if the user's species is in the hide_tail_by_species list and the tail isn't already hidden. + flags_inv |= HIDETAIL + else + if(!(initial(flags_inv) & HIDETAIL) && (flags_inv & HIDETAIL)) //Otherwise, remove the HIDETAIL flag if it wasn't already in the flags_inv to start with. + flags_inv &= ~HIDETAIL + /obj/item/clothing/suit/verb/openjacket(var/mob/user) //The verb you can use to adjust jackets. set name = "Open/Close Jacket" set category = "Object" @@ -521,7 +526,7 @@ BLIND // can't see anything flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL item_state = "s_helmet" permeability_coefficient = 0.01 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 50) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT @@ -543,8 +548,8 @@ BLIND // can't see anything flags = STOPSPRESSUREDMAGE | THICKMATERIAL body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank) - slowdown = 2 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50) + slowdown = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 50) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT @@ -561,7 +566,7 @@ BLIND // can't see anything body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS permeability_coefficient = 0.90 slot_flags = SLOT_ICLOTHING - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/uniform.dmi', diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 5dc555a10d7..48e2ccb7f95 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -7,7 +7,7 @@ var/brightness_on = 4 //luminosity when on var/on = 0 item_color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite) - armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20) + armor = list(melee = 15, bullet = 5, laser = 20, energy = 10, bomb = 20, bio = 10, rad = 20) flags_inv = 0 action_button_name = "Toggle Helmet Light" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index a9e8bbdb7e2..17058cc23b5 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -4,7 +4,7 @@ icon_state = "helmetmaterials" flags = HEADCOVERSEYES | HEADBANGPROTECT item_state = "helmetmaterials" - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT @@ -69,7 +69,7 @@ desc = "A bulletproof helmet that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." icon_state = "swat" item_state = "swat-alt" - armor = list(melee = 25, bullet = 80, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0) + armor = list(melee = 15, bullet = 40, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0) species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/helmet.dmi', @@ -82,7 +82,7 @@ icon_state = "riot" item_state = "helmet" flags = HEADCOVERSEYES | HEADCOVERSMOUTH | HEADBANGPROTECT - armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 41, bullet = 15, laser = 5, energy = 5, bomb = 5, bio = 2, rad = 0) flags_inv = HIDEEARS strip_delay = 80 @@ -91,9 +91,8 @@ desc = "A classic metal helmet." icon_state = "knight_green" item_state = "knight_green" - flags = BLOCKHAIR | HEADCOVERSEYES | HEADCOVERSMOUTH - armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) - flags_inv = HIDEMASK | HIDEEARS | HIDEEYES | HIDEFACE + flags = BLOCKHAIR|HEADCOVERSEYES|HEADCOVERSMOUTH + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE /obj/item/clothing/head/helmet/justice name = "helmet of justice" @@ -120,7 +119,7 @@ icon_state = "swat" flags = HEADCOVERSEYES item_state = "swat" - armor = list(melee = 80, bullet = 60, laser = 50, energy = 25, bomb = 50, bio = 10, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 50, bio = 90, rad = 20) flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT @@ -145,7 +144,7 @@ icon_state = "thunderdome" flags = HEADCOVERSEYES item_state = "thunderdome" - armor = list(melee = 80, bullet = 60, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD @@ -181,7 +180,7 @@ obj/item/clothing/head/helmet/redtaghelm icon_state = "redtaghelm" flags = HEADCOVERSEYES item_state = "redtaghelm" - armor = list(melee = 30, bullet = 10, laser = 20, energy = 10, bomb = 20, bio = 0, rad = 0) + armor = list(melee = 15, bullet = 10, laser = 20, energy = 10, bomb = 20, bio = 0, rad = 0) // Offer about the same protection as a hardhat. flags_inv = HIDEEARS|HIDEEYES @@ -191,7 +190,7 @@ obj/item/clothing/head/helmet/bluetaghelm icon_state = "bluetaghelm" flags = HEADCOVERSEYES item_state = "bluetaghelm" - armor = list(melee = 30, bullet = 10, laser = 20, energy = 10, bomb = 20, bio = 0, rad = 0) + armor = list(melee = 15, bullet = 10, laser = 20, energy = 10, bomb = 20, bio = 0, rad = 0) // Offer about the same protection as a hardhat. flags_inv = HIDEEARS|HIDEEYES @@ -203,19 +202,19 @@ obj/item/clothing/head/blob flags = HEADCOVERSEYES|HEADCOVERSMOUTH flags_inv = HIDEMASK|HIDEEARS|HIDEEYES -/obj/item/clothing/head/helmet/knight/blue +/obj/item/clothing/head/helmet/riot/knight/blue icon_state = "knight_blue" item_state = "knight_blue" -/obj/item/clothing/head/helmet/knight/yellow +/obj/item/clothing/head/helmet/riot/knight/yellow icon_state = "knight_yellow" item_state = "knight_yellow" -/obj/item/clothing/head/helmet/knight/red +/obj/item/clothing/head/helmet/riot/knight/red icon_state = "knight_red" item_state = "knight_red" -/obj/item/clothing/head/helmet/knight/templar +/obj/item/clothing/head/helmet/riot/knight/templar name = "crusader helmet" desc = "Deus Vult." icon_state = "knight_templar" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 51ee371df32..9492b7839ac 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -15,7 +15,7 @@ icon_state = "captain" desc = "It's good being the king." item_state = "caphat" - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 //Captain: no longer space-worthy @@ -29,7 +29,7 @@ name = "head of personnel's cap" icon_state = "hopcap" desc = "The symbol of true bureaucratic micromanagement." - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) //Nanotrasen Representative /obj/item/clothing/head/ntrep @@ -56,8 +56,8 @@ name = "hat" desc = "Someone who wears this will look very smart." icon_state = "detective" - allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) - armor = list(melee = 50, bullet = 5, laser = 25,energy = 10, bomb = 0, bio = 0, rad = 0) + allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn, /obj/item/weapon/pen) + armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) //Mime /obj/item/clothing/head/beret @@ -70,7 +70,7 @@ name = "head of security cap" desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge." icon_state = "hoscap" - armor = list(melee = 80, bullet = 60, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0) strip_delay = 80 /obj/item/clothing/head/HoS/beret @@ -82,7 +82,7 @@ name = "warden's police hat" desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts." icon_state = "policehelm" - armor = list(melee = 60, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 /obj/item/clothing/head/officer @@ -90,20 +90,21 @@ desc = "A red cap with an old-fashioned badge on the front for establishing that you are, in fact, the law." icon_state = "customshelm" item_state = "customshelm" - armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) + strip_delay = 60 /obj/item/clothing/head/beret/sec name = "security beret" desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety." icon_state = "beret_officer" - armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 /obj/item/clothing/head/beret/sec/warden name = "warden's beret" desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." icon_state = "beret_warden" - armor = list(melee = 60, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) /obj/item/clothing/head/beret/eng name = "engineering beret" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 88af8bf4dd3..d0473fedb98 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -5,7 +5,7 @@ icon_state = "centcom" desc = "It's good to be emperor." item_state = "centhat" - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 80 /obj/item/clothing/head/hairflower diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 0fbb39e6f1b..f2df0420fbe 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -20,7 +20,7 @@ materials = list(MAT_METAL=1750, MAT_GLASS=400) flash_protect = 2 tint = 2 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) action_button_name = "flip welding helmet" species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin") @@ -149,7 +149,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE action_button_name = "Toggle Pumpkin Light" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) brightness_on = 2 //luminosity when on @@ -161,7 +161,7 @@ item_color = "reindeer" flags_inv = 0 action_button_name = "Toggle Nose Light" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) brightness_on = 1 //luminosity when on diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index e14057b32b1..e7dae7d04da 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -90,7 +90,7 @@ desc = "It's baseball hat in tasteful red colour." icon_state = "secsoft" item_color = "sec" - armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 /obj/item/clothing/head/soft/sec/corp diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 6f6d0f03446..ef3a0f2b83e 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -27,7 +27,7 @@ materials = list(MAT_METAL=4000, MAT_GLASS=2000) flash_protect = 2 tint = 2 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) origin_tech = "materials=2;engineering=2" action_button_name = "Toggle Welding Helmet" @@ -78,7 +78,7 @@ desc = "A modernised version of the classic design, this mask will not only filter out toxins but it can also be connected to an air supply." icon_state = "plaguedoctor" item_state = "gas_mask" - armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 2, energy = 2, bomb = 0, bio = 75, rad = 0) /obj/item/clothing/mask/gas/swat name = "\improper SWAT mask" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index d9817add99f..3e99b277db3 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -63,7 +63,7 @@ flags = MASKCOVERSMOUTH gas_transfer_coefficient = 0.90 permeability_coefficient = 0.01 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 25, rad = 0) action_button_name = "Adjust Sterile Mask" ignore_maskadjust = 0 species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin") diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 72d00a4abf1..af361951f3d 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -21,7 +21,7 @@ can_cut_open = 1 icon_state = "jackboots" item_state = "jackboots" - armor = list(melee = 50, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 10, rad = 0) + armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 10, rad = 0) species_restricted = null //Syndicate tech means even Tajarans can kick ass with these strip_delay = 70 @@ -29,7 +29,7 @@ name = "\improper SWAT shoes" desc = "High speed, no drag combat boots." permeability_coefficient = 0.01 - armor = list(melee = 80, bullet = 60, laser = 50, energy = 50, bomb = 50, bio = 30, rad = 30) + armor = list(melee = 40, bullet = 30, laser = 25, energy = 25, bomb = 50, bio = 30, rad = 30) flags = NOSLIP /obj/item/clothing/shoes/sandal diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index d5fcbdf3251..988e9d09725 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -2,8 +2,6 @@ /obj/item/clothing/head/helmet/space/skrell name = "Skrellian helmet" desc = "Smoothly contoured and polished to a shine. Still looks like a fishbowl." - armor = list(melee = 20, bullet = 20, laser = 50,energy = 50, bomb = 50, bio = 100, rad = 100) - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT species_restricted = list("Skrell","Human") /obj/item/clothing/head/helmet/space/skrell/white @@ -19,10 +17,6 @@ /obj/item/clothing/suit/space/skrell name = "Skrellian hardsuit" desc = "Seems like a wetsuit with reinforced plating seamlessly attached to it. Very chic." - armor = list(melee = 20, bullet = 20, laser = 50,energy = 50, bomb = 50, bio = 100, rad = 100) - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd) - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT species_restricted = list("Skrell","Human") /obj/item/clothing/suit/space/skrell/white @@ -37,9 +31,6 @@ //Unathi space gear. Huge and restrictive. /obj/item/clothing/head/helmet/space/unathi - armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50) - heat_protection = HEAD - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT species_restricted = list("Unathi") /obj/item/clothing/head/helmet/space/unathi/helmet_cheap @@ -50,10 +41,6 @@ item_color = "unathi_helm_cheap" /obj/item/clothing/suit/space/unathi - armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50) - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd) - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT species_restricted = list("Unathi") /obj/item/clothing/suit/space/unathi/rig_cheap @@ -61,7 +48,6 @@ desc = "A cheap NT knock-off of a Unathi battle-rig. Looks like a fish, moves like a fish, steers like a cow." icon_state = "rig-unathi-cheap" item_state = "rig-unathi-cheap" - slowdown = 3 /obj/item/clothing/head/helmet/space/unathi/breacher name = "breacher helm" @@ -76,15 +62,13 @@ icon_state = "unathi_breacher" item_state = "unathi_breacher" item_color = "unathi_breacher" - slowdown = 1 // Vox space gear (vaccuum suit, low pressure armour) // Can't be equipped by any other species due to bone structure and vox cybernetics. /obj/item/clothing/suit/space/vox w_class = 3 allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) - slowdown = 2 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 40, bullet = 40, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT species_restricted = list("Vox", "Vox Armalis") @@ -94,7 +78,7 @@ ) /obj/item/clothing/head/helmet/space/vox - armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 40, bullet = 40, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) flags = HEADCOVERSEYES|STOPSPRESSUREDMAGE species_restricted = list("Vox","Vox Armalis") sprite_sheets = list( diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 334e659302b..96ae6519d5d 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -23,7 +23,6 @@ icon_state = "chronosuit" item_state = "chronosuit" action_button_name = "Toggle Chronosuit" - slowdown = 2 armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90) var/obj/item/clothing/head/helmet/space/chronos/helmet = null var/obj/effect/chronos_cam/camera = null diff --git a/code/modules/clothing/spacesuits/ert.dm b/code/modules/clothing/spacesuits/ert.dm index 91824a9856e..d5c4d5626bb 100644 --- a/code/modules/clothing/spacesuits/ert.dm +++ b/code/modules/clothing/spacesuits/ert.dm @@ -4,7 +4,7 @@ desc = "A helmet worn by members of the Nanotrasen Emergency Response Team. Armoured and space ready." icon_state = "rig0-ert_commander" item_state = "helm-command" - armor = list(melee = 50, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 60) + armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50) rig_restrict_helmet = 0 // ERT helmets can be taken on and off at will. var/obj/machinery/camera/camera strip_delay = 130 @@ -30,8 +30,7 @@ item_state = "suit-command" w_class = 3 allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) - slowdown = 1 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 60) + armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50) allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \ /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/device/multitool, \ /obj/item/device/radio, /obj/item/device/analyzer, /obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/pulse, \ diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index aab36bb04cb..1c7deb94970 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -6,7 +6,7 @@ desc = "A special helmet designed for only the most fashionable of military figureheads." flags_inv = HIDEFACE permeability_coefficient = 0.01 - armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) + armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) species_restricted = list("exclude", "Diona", "Wryn") species_fit = list("Vox") sprite_sheets = list( @@ -14,10 +14,13 @@ "Drask" = 'icons/mob/species/drask/helmet.dmi' ) /obj/item/clothing/head/helmet/space/capspace/equipped(var/mob/living/carbon/human/user, var/slot) - if (ishuman(user) && user.species.name == "Vox") - flags &= ~BLOCKHAIR - else - flags |= BLOCKHAIR + if(ishuman(user) && slot == slot_head) + if(user.species.name == "Vox") + if(flags & BLOCKHAIR) + flags &= ~BLOCKHAIR + else + if((initial(flags) & BLOCKHAIR) && !(flags & BLOCKHAIR)) + flags |= BLOCKHAIR /obj/item/clothing/suit/space/captain name = "captain's space suit" @@ -26,8 +29,7 @@ item_state = "capspacesuit" w_class = 4 allowed = list(/obj/item/weapon/tank, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs) - slowdown = 1 - armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) + armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) species_restricted = list("exclude", "Diona", "Wryn") species_fit = list("Vox") sprite_sheets = list( @@ -56,8 +58,7 @@ icon_state = "deathsquad" item_state = "swat_suit" allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/kitchen/knife/combat) - armor = list(melee = 80, bullet = 80, laser = 50,energy = 50, bomb = 100, bio = 100, rad = 100) - slowdown = 1 + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT unacidable = 1 strip_delay = 130 @@ -69,14 +70,14 @@ icon_state = "heavy" item_state = "swat_suit" allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/kitchen/knife/combat) - armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 50, bio = 90, rad = 20) strip_delay = 120 /obj/item/clothing/head/helmet/space/deathsquad/beret name = "officer's beret" desc = "An armored beret commonly used by special operations officers." icon_state = "beret_officer" - armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 65, bullet = 55, laser = 35, energy = 20, bomb = 30, bio = 30, rad = 30) /obj/item/clothing/suit/space/deathsquad/officer name = "officer jacket" @@ -101,7 +102,8 @@ icon_state = "santa" item_state = "santa" slowdown = 0 - flags = ONESIZEFITSALL | STOPSPRESSUREDMAGE + flags = STOPSPRESSUREDMAGE + flags_size = ONESIZEFITSALL allowed = list(/obj/item) //for stuffing exta special presents @@ -111,7 +113,7 @@ desc = "Yarr." icon_state = "pirate" item_state = "pirate" - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 30, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE strip_delay = 40 put_on_delay = 20 @@ -124,7 +126,7 @@ w_class = 3 allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) slowdown = 0 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 30, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) strip_delay = 40 put_on_delay = 20 @@ -146,8 +148,7 @@ icon_state = "spacenew" item_state = "s_suit" desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies." - slowdown = 1 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) /obj/item/clothing/head/helmet/space/eva name = "EVA helmet" @@ -155,7 +156,7 @@ item_state = "s_helmet" desc = "A lightweight space helmet with the basic ability to protect the wearer from the vacuum of space during emergencies." flags_inv = HIDEMASK|HIDEEARS|HIDEEYES - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) flash_protect = 0 //Mime's Hardsuit @@ -192,7 +193,7 @@ desc = "An advanced, space-proof helmet. It appears to be modeled after an old-world eagle." icon_state = "griffinhat" item_state = "griffinhat" - armor = list(melee = 40, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100) + armor = list(melee = 20, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100) max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 strip_delay = 130 @@ -203,8 +204,7 @@ icon_state = "freedom" item_state = "freedom" allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) - armor = list(melee = 40, bullet = 40, laser = 30,energy = 25, bomb = 100, bio = 100, rad = 100) - slowdown = 1 + armor = list(melee = 20, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100) max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 strip_delay = 130 \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index fd4122c56ec..b5498726203 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -5,13 +5,13 @@ desc = "A special containment suit designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies." allowed = list(/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) slowdown = 0 - armor = list(melee = 0, bullet = 0, laser = 0 ,energy = 0, bomb = 0, bio = 100, rad = 20) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT species_restricted = list("Plasmaman") - flags = STOPSPRESSUREDMAGE | PLASMAGUARD + flags = STOPSPRESSUREDMAGE icon_state = "plasmaman_suit" item_state = "plasmaman_suit" @@ -38,7 +38,7 @@ /obj/item/clothing/head/helmet/space/eva/plasmaman name = "plasmaman helmet" desc = "A special containment helmet designed to protect a plasmaman's volatile body from outside exposure and quickly extinguish it in emergencies." - flags = STOPSPRESSUREDMAGE | PLASMAGUARD + flags = STOPSPRESSUREDMAGE species_restricted = list("Plasmaman") icon_state = "plasmaman_helmet0" @@ -185,14 +185,14 @@ /obj/item/clothing/suit/space/eva/plasmaman/miner name = "plasmaman miner suit" icon_state = "plasmamanMiner_suit" - armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50) - slowdown = 2 + armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50) + slowdown = 1 /obj/item/clothing/head/helmet/space/eva/plasmaman/miner name = "plasmaman miner helmet" icon_state = "plasmamanMiner_helmet0" base_state = "plasmamanMiner_helmet" - armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50) + armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50) // MEDSCI @@ -266,13 +266,13 @@ /obj/item/clothing/suit/space/eva/plasmaman/security name = "plasmaman security suit" icon_state = "plasmamanSecurity_suit" - armor = list(melee = 30, bullet = 15, laser = 30,energy = 10, bomb = 10, bio = 100, rad = 50) + armor = list(melee = 15, bullet = 15, laser = 15, energy = 10, bomb = 10, bio = 100, rad = 50) /obj/item/clothing/head/helmet/space/eva/plasmaman/security name = "plasmaman security helmet" icon_state = "plasmamanSecurity_helmet0" base_state = "plasmamanSecurity_helmet" - armor = list(melee = 30, bullet = 15, laser = 30,energy = 10, bomb = 10, bio = 100, rad = 50) + armor = list(melee = 15, bullet = 15, laser = 15, energy = 10, bomb = 10, bio = 100, rad = 50) /obj/item/clothing/suit/space/eva/plasmaman/security/hos name = "plasmaman head of security suit" diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index ce73bb13a24..d4a0fec12bc 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -55,7 +55,6 @@ desc = "A special space suit for environments that might pose hazards beyond just the vacuum of space. Provides more protection than a standard space suit." icon_state = "rig-engineering" item_state = "eng_hardsuit" - slowdown = 2 armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd) siemens_coefficient = 0 @@ -247,7 +246,6 @@ desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." icon_state = "rig-engineering" item_state = "eng_hardsuit" - slowdown = 2 armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd) @@ -279,14 +277,14 @@ item_state = "mining_helm" item_color = "mining" flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE - armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50) + armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50) /obj/item/clothing/suit/space/rig/mining icon_state = "rig-mining" name = "mining hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating." item_state = "mining_hardsuit" - armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50) + armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe) @@ -297,7 +295,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_helm" item_color = "syndi" - armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50) + armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50) on = 1 flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL action_button_name = "Toggle Helmet Mode" @@ -339,11 +337,10 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_hardsuit" item_color = "syndi" - slowdown = 1 w_class = 3 var/on = 1 action_button_name = "Toggle Hardsuit Mode" - armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50) + armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50) allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) /obj/item/clothing/suit/space/rig/syndi/update_icon() @@ -379,7 +376,7 @@ desc = "An elite version of the syndicate helmet, with improved armour and fire shielding. It is in travel mode. Property of Gorlex Marauders." icon_state = "hardsuit0-syndielite" item_color = "syndielite" - armor = list(melee = 80, bullet = 70, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70) + armor = list(melee = 60, bullet = 60, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT sprite_sheets = null @@ -398,7 +395,7 @@ desc = "An elite version of the syndicate hardsuit, with improved armour and fire shielding. It is in travel mode." icon_state = "hardsuit0-syndielite" item_color = "syndielite" - armor = list(melee = 80, bullet = 70, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70) + armor = list(melee = 60, bullet = 60, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT sprite_sheets = null @@ -420,7 +417,7 @@ item_state = "wiz_helm" item_color = "wiz" unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles! - armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60) + armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 35, bio = 100, rad = 50) heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 @@ -431,10 +428,9 @@ name = "gem-encrusted hardsuit" desc = "A bizarre gem-encrusted suit that radiates magical energies." item_state = "wiz_hardsuit" - slowdown = 1 w_class = 3 unacidable = 1 - armor = list(melee = 40, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 100, rad = 50) + armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 35, bio = 100, rad = 50) allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT @@ -458,7 +454,6 @@ name = "medical hardsuit" desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort." item_state = "medical_hardsuit" - slowdown = 1 allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/device/rad_laser) armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50) @@ -469,7 +464,7 @@ icon_state = "rig0-sec" item_state = "sec_helm" item_color = "sec" - armor = list(melee = 30, bullet = 15, laser = 30,energy = 10, bomb = 10, bio = 100, rad = 50) + armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50) /obj/item/clothing/suit/space/rig/security icon_state = "rig-sec" @@ -507,7 +502,7 @@ icon_state = "rig0-singuloth" item_state = "singuloth_helm" item_color = "singuloth" - armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 100) + armor = list(melee = 40, bullet = 5, laser = 20, energy = 5, bomb = 25, bio = 100, rad = 100) /obj/item/clothing/suit/space/rig/singuloth icon_state = "rig-singuloth" @@ -515,4 +510,4 @@ desc = "This is a ceremonial armor from the chapter of the Singuloth Knights. It's made of pure forged adamantium." item_state = "singuloth_hardsuit" flags = STOPSPRESSUREDMAGE - armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 100) + armor = list(melee = 40, bullet = 5, laser = 20, energy = 5, bomb = 25, bio = 100, rad = 100) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 66a0e62a39b..9e0fb8c55b0 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -17,7 +17,7 @@ w_class = 4 // These values are passed on to all component pieces. - armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20) + armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT siemens_coefficient = 0.2 diff --git a/code/modules/clothing/spacesuits/rig/suits/alien.dm b/code/modules/clothing/spacesuits/rig/suits/alien.dm index 5f43c172a39..8632b6cc472 100644 --- a/code/modules/clothing/spacesuits/rig/suits/alien.dm +++ b/code/modules/clothing/spacesuits/rig/suits/alien.dm @@ -3,13 +3,13 @@ desc = "A cheap NT knock-off of an Unathi battle-rig. Looks like a fish, moves like a fish, steers like a cow." suit_type = "NT breacher" icon_state = "breacher_rig_cheap" - armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 70, bio = 100, rad = 50) + armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 45, bio = 100, rad = 50) emp_protection = -20 slowdown = 6 offline_slowdown = 10 vision_restriction = 1 offline_vision_restriction = 2 - + chest_type = /obj/item/clothing/suit/space/new_rig helm_type = /obj/item/clothing/head/helmet/space/new_rig/unathi boot_type = /obj/item/clothing/shoes/magboots/rig/unathi @@ -19,7 +19,7 @@ desc = "An authentic Unathi breacher chassis. Huge, bulky and absurdly heavy. It must be like wearing a tank." suit_type = "breacher chassis" icon_state = "breacher_rig" - armor = list(melee = 90, bullet = 90, laser = 90, energy = 90, bomb = 90, bio = 100, rad = 80) //Takes TEN TIMES as much damage to stop someone in a breacher. In exchange, it's slow. + armor = list(melee = 45, bullet = 45, laser = 45, energy = 45, bomb = 45, bio = 100, rad = 75) //Takes TEN TIMES as much damage to stop someone in a breacher. In exchange, it's slow. //Whoever made this was on meth vision_restriction = 0 /obj/item/clothing/head/helmet/space/new_rig/unathi @@ -27,6 +27,6 @@ /obj/item/clothing/suit/space/new_rig/unathi species_restricted = list("Unathi") - + /obj/item/clothing/shoes/magboots/rig/unathi species_restricted = list("Unathi") \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm index cd37189a080..98adb708ada 100644 --- a/code/modules/clothing/spacesuits/rig/suits/combat.dm +++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm @@ -5,7 +5,7 @@ desc = "A sleek and dangerous hardsuit for active combat." icon_state = "security_rig" suit_type = "combat hardsuit" - armor = list(melee = 80, bullet = 65, laser = 50, energy = 15, bomb = 80, bio = 100, rad = 60) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) slowdown = 1 offline_slowdown = 3 offline_vision_restriction = 1 diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm index f10a859af9a..4aed2a53f30 100644 --- a/code/modules/clothing/spacesuits/rig/suits/ert.dm +++ b/code/modules/clothing/spacesuits/rig/suits/ert.dm @@ -10,7 +10,7 @@ req_access = list(access_cent_specops) - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50) allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \ /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/device/multitool, \ /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ @@ -27,7 +27,6 @@ desc = "A suit worn by the engineering division of an Emergency Response Team. Has orange highlights. Armoured and space ready." suit_type = "ERT engineer" icon_state = "ert_engineer_rig" - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100) siemens_coefficient = 0 initial_modules = list( @@ -68,7 +67,6 @@ desc = "A heavy suit worn by the highest level of Asset Protection, don't mess with the person wearing this. Armoured and space ready." suit_type = "heavy asset protection" icon_state = "asset_protection_rig" - armor = list(melee = 60, bullet = 50, laser = 50,energy = 40, bomb = 40, bio = 100, rad = 100) initial_modules = list( /obj/item/rig_module/ai_container, diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index fb6b0459a91..0bda9f9288a 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -5,7 +5,6 @@ icon_state = "ninja_rig" suit_type = "light suit" allowed = list(/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/stock_parts/cell) - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) emp_protection = 10 slowdown = 0 flags = STOPSPRESSUREDMAGE | THICKMATERIAL diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm index 58a66aaa4b1..a7512231641 100644 --- a/code/modules/clothing/spacesuits/rig/suits/merc.dm +++ b/code/modules/clothing/spacesuits/rig/suits/merc.dm @@ -5,7 +5,7 @@ desc = "A blood-red hardsuit featuring some fairly illegal technology." icon_state = "merc_rig" suit_type = "crimson hardsuit" - armor = list(melee = 80, bullet = 65, laser = 50, energy = 15, bomb = 80, bio = 100, rad = 60) + armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50) slowdown = 1 offline_slowdown = 3 offline_vision_restriction = 1 diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm index 4ddf6e419f3..a0e236daee7 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station.dm @@ -15,7 +15,7 @@ suit_type = "augmented suit" desc = "Prepare for paperwork." icon_state = "internalaffairs_rig" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 slowdown = 0 offline_slowdown = 0 @@ -51,7 +51,7 @@ suit_type = "industrial hardsuit" desc = "A heavy, powerful rig used by construction crews and mining corporations." icon_state = "engineering_rig" - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 50) + armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) slowdown = 3 offline_slowdown = 10 offline_vision_restriction = 2 @@ -80,7 +80,6 @@ suit_type = "EVA hardsuit" desc = "A light rig for repairs and maintenance to the outside of habitats and vessels." icon_state = "eva_rig" - armor = list(melee = 30, bullet = 10, laser = 20,energy = 25, bomb = 20, bio = 100, rad = 100) slowdown = 0 offline_slowdown = 1 offline_vision_restriction = 1 @@ -108,7 +107,7 @@ suit_type = "advanced voidsuit" desc = "An advanced voidsuit that protects against hazardous, low pressure environments. Shines with a high polish." icon_state = "ce_rig" - armor = list(melee = 40, bullet = 10, laser = 30,energy = 25, bomb = 40, bio = 100, rad = 100) + armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 90) slowdown = 0 offline_slowdown = 0 offline_vision_restriction = 0 @@ -150,7 +149,6 @@ suit_type = "hazmat hardsuit" desc = "An Anomalous Material Interaction hardsuit that protects against the strangest energies the universe can throw at it." icon_state = "science_rig" - armor = list(melee = 45, bullet = 5, laser = 45, energy = 80, bomb = 60, bio = 100, rad = 100) slowdown = 1 offline_vision_restriction = 1 @@ -179,7 +177,7 @@ suit_type = "rescue hardsuit" desc = "A durable suit designed for medical rescue in high risk areas." icon_state = "medical_rig" - armor = list(melee = 30, bullet = 15, laser = 20, energy = 60, bomb = 30, bio = 100, rad = 100) + armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50) slowdown = 1 offline_vision_restriction = 1 @@ -204,7 +202,7 @@ suit_type = "hazard hardsuit" desc = "A Security hardsuit designed for prolonged EVA in dangerous environments." icon_state = "hazard_rig" - armor = list(melee = 60, bullet = 40, laser = 30, energy = 15, bomb = 60, bio = 100, rad = 30) + armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50) slowdown = 1 offline_slowdown = 3 offline_vision_restriction = 1 diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 4017cb3f1f8..4b8f32f5a74 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -5,7 +5,7 @@ icon_state = "syndicate" item_state = "syndicate" desc = "Has a tag: Totally not property of an enemy corporation, honest." - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) /obj/item/clothing/suit/space/syndicate name = "red space suit" @@ -14,8 +14,7 @@ desc = "Has a tag on it: Totally not property of of a hostile corporation, honest!" w_class = 3 allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) - slowdown = 1 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) //Green syndicate space suit diff --git a/code/modules/clothing/spacesuits/void.dm b/code/modules/clothing/spacesuits/void.dm index 91142123450..cce0f4c49b3 100644 --- a/code/modules/clothing/spacesuits/void.dm +++ b/code/modules/clothing/spacesuits/void.dm @@ -11,5 +11,4 @@ icon_state = "void" item_state = "void" desc = "A high tech, NASA Centcom branch designed, dark red Space suit. Used for AI satellite maintenance." - slowdown = 1 allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/multitool) \ No newline at end of file diff --git a/code/modules/clothing/suits/alien.dm b/code/modules/clothing/suits/alien.dm index 5b664f21b35..664e1dea237 100644 --- a/code/modules/clothing/suits/alien.dm +++ b/code/modules/clothing/suits/alien.dm @@ -1,4 +1,9 @@ //Unathi clothing. +/obj/item/clothing/suit/unathi/ + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/unathi/robe name = "roughspun robes" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 609e24ca6bf..ea811f68be6 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -8,6 +8,10 @@ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT strip_delay = 60 put_on_delay = 40 + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/armor/vest name = "armor" @@ -15,8 +19,8 @@ icon_state = "armor" item_state = "armor" blood_overlay_type = "armor" - flags = ONESIZEFITSALL - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL + armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) /obj/item/clothing/suit/armor/vest/jacket name = "military jacket" @@ -31,8 +35,7 @@ icon_state = "armor-combat" item_state = "bulletproof" blood_overlay_type = "armor" - flags = ONESIZEFITSALL - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL /obj/item/clothing/suit/armor/vest/security name = "security armor" @@ -85,6 +88,8 @@ desc = "A vest drenched in the blood of Greytide. It has seen better days." icon_state = "bloody_armor" item_state = "bloody_armor" + species_fit = null + sprite_sheets = null /obj/item/clothing/suit/armor/hos name = "armored coat" @@ -92,7 +97,7 @@ icon_state = "hos" item_state = "hos" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0) flags_inv = HIDEJUMPSUIT cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS @@ -115,6 +120,8 @@ icon_state = "jensencoat" item_state = "jensencoat" flags_inv = 0 + species_fit = null + sprite_sheets = null /obj/item/clothing/suit/armor/vest/warden name = "Warden's armored jacket" @@ -137,7 +144,7 @@ icon_state = "capcarapace" item_state = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO - armor = list(melee = 50, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 50, bullet = 40, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) /obj/item/clothing/suit/armor/riot name = "Riot Suit" @@ -147,18 +154,18 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - slowdown = 1 - armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) flags_inv = HIDEJUMPSUIT strip_delay = 80 put_on_delay = 60 + hide_tail_by_species = list("Vox") /obj/item/clothing/suit/armor/riot/knight name = "plate armour" desc = "A classic suit of plate armour, highly effective at stopping melee attacks." icon_state = "knight_green" item_state = "knight_green" - armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) + slowdown = 1 /obj/item/clothing/suit/armor/riot/knight/yellow icon_state = "knight_yellow" @@ -185,7 +192,7 @@ icon_state = "bulletproof" item_state = "armor" blood_overlay_type = "armor" - armor = list(melee = 25, bullet = 80, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0) + armor = list(melee = 15, bullet = 80, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0) strip_delay = 70 put_on_delay = 50 @@ -195,7 +202,7 @@ icon_state = "armor_reflec" item_state = "armor_reflec" blood_overlay_type = "armor" - armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 10, bullet = 10, laser = 60, energy = 50, bomb = 0, bio = 0, rad = 0) var/hit_reflect_chance = 40 /obj/item/clothing/suit/armor/laserproof/IsReflect(var/def_zone) @@ -210,7 +217,7 @@ icon_state = "detective-armor" item_state = "armor" blood_overlay_type = "armor" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder) @@ -232,22 +239,25 @@ return 0 /obj/item/clothing/suit/armor/reactive/attack_self(mob/user as mob) - src.active = !( src.active ) - if (src.active) - to_chat(user, "\blue The reactive armor is now active.") - src.icon_state = "reactive" - src.item_state = "reactive" + active = !(active) + if(active) + to_chat(user, "The reactive armor is now active.") + icon_state = "reactive" + item_state = "reactive" else - to_chat(user, "\blue The reactive armor is now inactive.") - src.icon_state = "reactiveoff" - src.item_state = "reactiveoff" - src.add_fingerprint(user) - return + to_chat(user, "The reactive armor is now inactive.") + icon_state = "reactiveoff" + item_state = "reactiveoff" + add_fingerprint(user) + user.update_inv_wear_suit() /obj/item/clothing/suit/armor/reactive/emp_act(severity) active = 0 - src.icon_state = "reactiveoff" - src.item_state = "reactiveoff" + icon_state = "reactiveoff" + item_state = "reactiveoff" + + var/mob/living/carbon/human/user = usr + user.update_inv_wear_suit() ..() @@ -266,27 +276,32 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + species_fit = null + sprite_sheets = null + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) /obj/item/clothing/suit/armor/heavy name = "heavy armor" desc = "A heavily armored suit that protects against moderate damage." icon_state = "heavy" item_state = "swat_suit" - armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) w_class = 4//bulky item gas_transfer_coefficient = 0.90 flags = THICKMATERIAL body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS slowdown = 3 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + hide_tail_by_species = list("Vox") /obj/item/clothing/suit/armor/tdome - armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags = THICKMATERIAL cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + hide_tail_by_species = list("Vox") /obj/item/clothing/suit/armor/tdome/red name = "Red Thunderdome Armor" @@ -306,7 +321,7 @@ desc = "A set of armor worn by members of the Nanotrasen Emergency Response Team." icon_state = "ertarmor_cmd" item_state = "armor" - armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 20, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 20, bio = 0, rad = 0) //Commander /obj/item/clothing/suit/armor/vest/ert/command diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 3879cc5692c..06fbf32b056 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -5,7 +5,7 @@ desc = "A hood that protects the head and face from biological comtaminants." permeability_coefficient = 0.01 flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR | THICKMATERIAL - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES /obj/item/clothing/suit/bio_suit @@ -16,14 +16,20 @@ w_class = 4//bulky item gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 - flags = ONESIZEFITSALL | THICKMATERIAL + flags = THICKMATERIAL + flags_size = ONESIZEFITSALL body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - slowdown = 1.0 + slowdown = 1 allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL strip_delay = 70 put_on_delay = 70 + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) + hide_tail_by_species = list("Vox") //Standard biosuit, orange stripe /obj/item/clothing/head/bio_hood/general @@ -43,9 +49,11 @@ //Security biosuit, grey with red stripe across the chest /obj/item/clothing/head/bio_hood/security + armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 100, rad = 20) icon_state = "bio_security" /obj/item/clothing/suit/bio_suit/security + armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 100, rad = 20) icon_state = "bio_security" @@ -80,4 +88,6 @@ icon_state = "plaguedoctor" item_state = "bio_suit" strip_delay = 40 - put_on_delay = 20 \ No newline at end of file + put_on_delay = 20 + species_fit = null + sprite_sheets = null \ No newline at end of file diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index f9ce0cd4593..1288d02cbf4 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -25,6 +25,10 @@ /obj/item/device/healthanalyzer, /obj/item/device/flashlight, \ /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen,/obj/item/device/rad_laser) armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) //Botonist /obj/item/clothing/suit/apron @@ -48,7 +52,7 @@ item_state = "bio_suit" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS flags_inv = HIDEJUMPSUIT - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/flash, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/emergency_oxygen) species_fit = list("Vox") sprite_sheets = list( @@ -119,10 +123,6 @@ blood_overlay_type = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO allowed = list(/obj/item/weapon/kitchen/knife) - species_fit = list("Vox") - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/suit.dmi' - ) //Detective /obj/item/clothing/suit/storage/det_suit @@ -133,30 +133,30 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder) - armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/suit.dmi' ) //Forensics -/obj/item/clothing/suit/storage/forensics +/obj/item/clothing/suit/storage/det_suit/forensics name = "jacket" desc = "A forensics technician jacket." item_state = "det_suit" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS - allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/detective_scanner,/obj/item/device/taperecorder) - armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS + heat_protection = UPPER_TORSO|LOWER_TORSO|ARMS -/obj/item/clothing/suit/storage/forensics/red +/obj/item/clothing/suit/storage/det_suit/forensics/red name = "red jacket" desc = "A red forensics technician jacket." icon_state = "forensics_red" -/obj/item/clothing/suit/storage/forensics/blue +/obj/item/clothing/suit/storage/det_suit/forensics/blue name = "blue jacket" desc = "A blue forensics technician jacket." icon_state = "forensics_blue" @@ -170,10 +170,14 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic) - armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) //Engineering /obj/item/clothing/suit/storage/hazardvest @@ -189,6 +193,12 @@ ) //Lawyer +/obj/item/clothing/suit/storage/lawyer + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) + /obj/item/clothing/suit/storage/lawyer/blackjacket name = "black suit jacket" desc = "A snappy dress jacket." @@ -233,6 +243,10 @@ suit_adjusted = 1 action_button_name = "Button/Unbutton Jacket" adjust_flavour = "unbutton" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/storage/ntrep name = "\improper NanoTrasen Representative jacket" @@ -244,6 +258,10 @@ ignore_suitadjust = 0 action_button_name = "Button/Unbutton Jacket" adjust_flavour = "unbutton" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) //Medical /obj/item/clothing/suit/storage/fr_jacket @@ -258,6 +276,10 @@ suit_adjusted = 1 action_button_name = "Button/Unbutton Jacket" adjust_flavour = "unbutton" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) //Mime /obj/item/clothing/suit/suspenders @@ -266,3 +288,7 @@ icon = 'icons/obj/clothing/belts.dmi' icon_state = "suspenders" blood_overlay_type = "armor" //it's the less thing that I can put here + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 96065432f3d..6926105541d 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -21,66 +21,38 @@ desc = "Bluer than the standard model." icon_state = "labcoat_cmo_open" item_state = "labcoat_cmo_open" - species_fit = list("Vox") - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/suit.dmi' - ) /obj/item/clothing/suit/storage/labcoat/mad name = "mad scientist's labcoat" desc = "It makes you look capable of konking someone on the noggin and shooting them into space." icon_state = "labcoat_green_open" item_state = "labcoat_green_open" - species_fit = list("Vox") - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/suit.dmi' - ) /obj/item/clothing/suit/storage/labcoat/genetics name = "geneticist labcoat" desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." icon_state = "labcoat_gen_open" item_state = "labcoat_gen_open" - species_fit = list("Vox") - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/suit.dmi' - ) /obj/item/clothing/suit/storage/labcoat/chemist name = "chemist labcoat" desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." icon_state = "labcoat_chem_open" item_state = "labcoat_chem_open" - species_fit = list("Vox") - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/suit.dmi' - ) /obj/item/clothing/suit/storage/labcoat/virologist name = "virologist labcoat" desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder." icon_state = "labcoat_vir_open" - species_fit = list("Vox") - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/suit.dmi' - ) /obj/item/clothing/suit/storage/labcoat/science name = "scientist labcoat" desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder." icon_state = "labcoat_tox_open" item_state = "labcoat_tox_open" - species_fit = list("Vox") - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/suit.dmi' - ) /obj/item/clothing/suit/storage/labcoat/mortician name = "coroner labcoat" desc = "A suit that protects against minor chemical spills. Has a black stripe on the shoulder." icon_state = "labcoat_mort_open" item_state = "labcoat_mort_open" - species_fit = list("Vox") - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/suit.dmi' - ) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 7985eb06b57..a88fdd6f970 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -16,6 +16,10 @@ blood_overlay_type = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO allowed = list (/obj/item/weapon/gun/energy/laser/bluetag) + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/redtag name = "red laser tag armour" @@ -25,6 +29,10 @@ blood_overlay_type = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO allowed = list (/obj/item/weapon/gun/energy/laser/redtag) + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /* * Costume @@ -34,13 +42,20 @@ desc = "Yarr." icon_state = "pirate_old" item_state = "pirate_old" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/pirate_black name = "black pirate coat" desc = "Yarr." icon_state = "pirate" item_state = "pirate" - + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/hgpirate name = "pirate captain coat" @@ -99,7 +114,10 @@ item_state = "wcoat" blood_overlay_type = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO - + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/apron/overalls name = "coveralls" @@ -233,6 +251,10 @@ desc = "Your classic, non-racist poncho." icon_state = "classicponcho" item_state = "classicponcho" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/poncho/green name = "green poncho" @@ -272,7 +294,7 @@ item_state = "straight_jacket" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL strip_delay = 60 /obj/item/clothing/suit/ianshirt @@ -280,6 +302,10 @@ desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it but it's pretty close. Good for sleeping in." icon_state = "ianshirt" item_state = "ianshirt" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) //pyjamas //originally intended to be pinstripes >.> @@ -323,12 +349,20 @@ desc = "It makes you stand out. Just the opposite of why it's typically worn. Nice try trying to blend in while wearing it." icon_state = "brtrenchcoat" item_state = "brtrenchcoat" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/blacktrenchcoat name = "black trench coat" desc = "That shade of black just makes you look a bit more evil. Good for those mafia types." icon_state = "bltrenchcoat" item_state = "bltrenchcoat" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) //actual suits @@ -403,7 +437,7 @@ item_state = "xenos_helm" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL //swimsuit /obj/item/clothing/under/swimsuit/ @@ -446,10 +480,10 @@ w_class = 4//bulky item gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL /obj/item/clothing/head/mercy_hood @@ -459,7 +493,7 @@ item_state = "mercy_hood" permeability_coefficient = 0.01 flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES /obj/item/clothing/suit/jacket @@ -473,6 +507,10 @@ cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS action_button_name = "Zip/Unzip Jacket" adjust_flavour = "unzip" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/jacket/pilot name = "security bomber jacket" @@ -487,8 +525,8 @@ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT strip_delay = 60 put_on_delay = 40 - flags = ONESIZEFITSALL - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL + armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) //End of inheritance from Security armour. /obj/item/clothing/suit/jacket/leather @@ -504,12 +542,26 @@ desc = "A classy clown officer's overcoat, also designed by Hugo Boss." icon_state = "officersuit" item_state = "officersuit" + ignore_suitadjust = 0 + action_button_name = "Button/Unbutton Jacket" + adjust_flavour = "unbutton" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/soldiercoat name = "Clown Soldier's Coat" desc = "An overcoat for the clown soldier, to keep him warm during those cold winter nights on the front." icon_state = "soldiersuit" item_state = "soldiersuit" + ignore_suitadjust = 0 + action_button_name = "Button/Unbutton Jacket" + adjust_flavour = "unbutton" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/toggle/owlwings name = "owl cloak" @@ -517,7 +569,7 @@ icon_state = "owl_wings" item_state = "owl_wings" body_parts_covered = ARMS - armor = list(melee = 5, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite) action_button_name = "Toggle Owl Wings" flags = NODROP @@ -564,7 +616,7 @@ permeability_coefficient = 0.01 flags = STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS|HEAD - armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100) cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT heat_protection = UPPER_TORSO | LOWER_TORSO|LEGS|FEET|ARMS|HANDS | HEAD diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 030d8f3773c..2178821e3fa 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -19,7 +19,7 @@ permeability_coefficient = 0.50 body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher) - slowdown = 1.0 + slowdown = 1 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL flags = STOPSPRESSUREDMAGE | THICKMATERIAL heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS @@ -32,7 +32,10 @@ /obj/item/clothing/suit/fire/firefighter icon_state = "firesuit" item_state = "firefighter" - + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/suit/fire/heavy name = "firesuit" @@ -48,6 +51,10 @@ icon_state = "atmos_firesuit" item_state = "firesuit_atmos" max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /* * Bomb protection @@ -57,7 +64,7 @@ desc = "Use in case of bomb." icon_state = "bombsuit" flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR | THICKMATERIAL - armor = list(melee = 40, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0) + armor = list(melee = 20, bullet = 0, laser = 20, energy = 10, bomb = 100, bio = 0, rad = 0) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT @@ -77,7 +84,7 @@ flags = THICKMATERIAL body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS slowdown = 2 - armor = list(melee = 40, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0) + armor = list(melee = 20, bullet = 0, laser = 20, energy = 10, bomb = 100, bio = 0, rad = 0) flags_inv = HIDEJUMPSUIT|HIDETAIL heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT @@ -85,6 +92,11 @@ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT strip_delay = 70 put_on_delay = 70 + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) + hide_tail_by_species = list("Vox") /obj/item/clothing/head/bomb_hood/security icon_state = "bombsuitsec" @@ -104,7 +116,7 @@ icon_state = "rad" desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation" flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR|THICKMATERIAL - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 60, rad = 100) strip_delay = 60 put_on_delay = 60 @@ -120,7 +132,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen) slowdown = 1.5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 60, rad = 100) flags_inv = HIDEJUMPSUIT|HIDETAIL strip_delay = 60 put_on_delay = 60 \ No newline at end of file diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 62981692d01..9cf067d6ab2 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -24,7 +24,8 @@ loc = has_suit has_suit.overlays += inv_overlay - to_chat(user, "You attach [src] to [has_suit].") + if(user) + to_chat(user, "You attach [src] to [has_suit].") src.add_fingerprint(user) /obj/item/clothing/accessory/proc/on_removed(mob/user as mob) @@ -89,6 +90,10 @@ icon_state = "waistcoat" item_state = "waistcoat" item_color = "waistcoat" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/accessory/stethoscope name = "stethoscope" diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 4c5997d3330..705c498b88f 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -74,6 +74,10 @@ desc = "Sturdy mess of synthcotton belts and buckles, ready to share your burden." icon_state = "webbing" item_color = "webbing" + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) /obj/item/clothing/accessory/storage/black_vest name = "black webbing vest" diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index a2496168b5f..cf74d17de05 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -7,6 +7,7 @@ desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist." origin_tech = "syndicate=3" var/list/clothing_choices = list() + armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) New() ..() diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index e0386585f26..2b8a1643aba 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -16,7 +16,7 @@ icon_state = "black" item_state = "bl_suit" item_color = "black" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/blackf name = "feminine black jumpsuit" @@ -30,17 +30,18 @@ icon_state = "blue" item_state = "b_suit" item_color = "blue" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/blue/dodgeball - flags = ONESIZEFITSALL | NODROP + flags = NODROP + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/green name = "green jumpsuit" icon_state = "green" item_state = "g_suit" item_color = "green" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/grey name = "grey jumpsuit" @@ -48,10 +49,11 @@ icon_state = "grey" item_state = "gy_suit" item_color = "grey" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/grey/greytide - flags = ONESIZEFITSALL | NODROP + flags = NODROP + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/orange name = "orange jumpsuit" @@ -59,7 +61,7 @@ icon_state = "orange" item_state = "o_suit" item_color = "orange" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/orange/prison name = "orange jumpsuit" @@ -69,7 +71,7 @@ item_color = "orange" has_sensor = 2 sensor_mode = 3 - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/pink name = "pink jumpsuit" @@ -77,31 +79,32 @@ icon_state = "pink" item_state = "p_suit" item_color = "pink" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/red name = "red jumpsuit" icon_state = "red" item_state = "r_suit" item_color = "red" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/red/dodgeball - flags = ONESIZEFITSALL | NODROP + flags = NODROP + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/white name = "white jumpsuit" icon_state = "white" item_state = "w_suit" item_color = "white" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/yellow name = "yellow jumpsuit" icon_state = "yellow" item_state = "y_suit" item_color = "yellow" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/psyche name = "psychedelic jumpsuit" @@ -122,7 +125,7 @@ name = "aqua jumpsuit" icon_state = "aqua" item_color = "aqua" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/purple name = "purple jumpsuit" @@ -149,7 +152,7 @@ name = "light brown jumpsuit" icon_state = "lightbrown" item_color = "lightbrown" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/brown name = "brown jumpsuit" @@ -165,7 +168,7 @@ name = "dark blue jumpsuit" icon_state = "darkblue" item_color = "darkblue" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/lightred name = "light red jumpsuit" @@ -176,7 +179,7 @@ name = "dark red jumpsuit" icon_state = "darkred" item_color = "darkred" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/red/jersey name = "red team jersey" @@ -184,7 +187,7 @@ icon_state = "redjersey" item_state = "r_suit" item_color = "redjersey" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/color/blue/jersey name = "blue team jersey" @@ -192,4 +195,4 @@ icon_state = "bluejersey" item_state = "b_suit" item_color = "bluejersey" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 78d9428d4b2..5a7017b353a 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -6,7 +6,7 @@ icon_state = "ba_suit" item_state = "ba_suit" item_color = "ba_suit" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define. desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Captain\"." @@ -14,7 +14,7 @@ icon_state = "captain" item_state = "caparmor" item_color = "captain" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/cargo name = "quartermaster's jumpsuit" @@ -22,8 +22,15 @@ icon_state = "qm" item_state = "lb_suit" item_color = "qm" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL +/obj/item/clothing/under/rank/cargo/skirt + name = "quartermaster's jumpskirt" + desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." + icon_state = "qmf" + item_color = "qmf" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_size = null /obj/item/clothing/under/rank/cargotech name = "cargo technician's jumpsuit" @@ -31,8 +38,14 @@ icon_state = "cargotech" item_state = "lb_suit" item_color = "cargo" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL +/obj/item/clothing/under/rank/cargotech/skirt + name = "cargo technician's jumpskirt" + desc = "Skirrrrrts! They're comfy and easy to wear!" + icon_state = "cargof" + item_color = "cargof" + flags_size = null /obj/item/clothing/under/rank/chaplain desc = "It's a black jumpsuit, often worn by religious folk." @@ -40,14 +53,14 @@ icon_state = "chaplain" item_state = "bl_suit" item_color = "chapblack" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/chef desc = "It's an apron which is given only to the most hardcore chefs in space." name = "chef's uniform" icon_state = "chef" item_color = "chef" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/clown name = "clown suit" @@ -55,7 +68,7 @@ icon_state = "clown" item_state = "clown" item_color = "clown" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/head_of_personnel @@ -64,7 +77,7 @@ icon_state = "hop" item_state = "b_suit" item_color = "hop" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/head_of_personnel_whimsy desc = "A blue jacket and red tie, with matching red cuffs! Snazzy. Wearing this makes you feel more important than your job title does." @@ -81,7 +94,7 @@ item_state = "g_suit" item_color = "hydroponics" permeability_coefficient = 0.50 - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/internalaffairs desc = "The plain, professional attire of an Internal Affairs Agent. The collar is immaculately starched." @@ -89,7 +102,7 @@ icon_state = "internalaffairs" item_state = "internalaffairs" item_color = "internalaffairs" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/ntrep desc = "A well-ironed dress shirt and matching set of black pants." @@ -97,21 +110,21 @@ icon_state = "internalaffairs" item_state = "internalaffairs" item_color = "internalaffairs" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/janitor desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards." name = "janitor's jumpsuit" icon_state = "janitor" item_color = "janitor" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL /obj/item/clothing/under/lawyer desc = "Slick threads." name = "Lawyer suit" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/lawyer/black icon_state = "lawyer_black" @@ -160,7 +173,7 @@ icon_state = "red_suit" item_state = "red_suit" item_color = "red_suit" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/mime name = "mime's outfit" @@ -168,7 +181,7 @@ icon_state = "mime" item_state = "mime" item_color = "mime" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/miner @@ -177,7 +190,7 @@ icon_state = "miner" item_state = "miner" item_color = "miner" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/barber desc = "It's a barber's uniform." diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index 4b91e82b2fc..9b604da7277 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -5,8 +5,16 @@ icon_state = "chiefengineer" item_state = "g_suit" item_color = "chief" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10) + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/rank/chief_engineer/skirt + desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding." + name = "chief engineer's jumpskirt" + icon_state = "chieff" + item_color = "chieff" + flags_size = null + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/rank/atmospheric_technician desc = "It's a jumpsuit worn by atmospheric technicians." @@ -14,7 +22,15 @@ icon_state = "atmos" item_state = "atmos_suit" item_color = "atmos" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/rank/atmospheric_technician/skirt + desc = "It's a jumpskirt worn by atmospheric technicians." + name = "atmospheric technician's jumpskirt" + icon_state = "atmosf" + item_color = "atmosf" + flags_size = null + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/rank/engineer desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding." @@ -22,8 +38,17 @@ icon_state = "engine" item_state = "engi_suit" item_color = "engine" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10) + flags_size = ONESIZEFITSALL + + +/obj/item/clothing/under/rank/engineer/skirt + desc = "It's an orange high visibility jumpskirt worn by engineers. It has minor radiation shielding." + name = "engineer's jumpskirt" + icon_state = "enginef" + item_color = "enginef" + flags_size = null + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/rank/roboticist desc = "It's a slimming black with reinforced seams; great for industrial work." @@ -31,7 +56,14 @@ icon_state = "robotics" item_state = "robotics" item_color = "robotics" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/rank/roboticist/skirt + desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work." + name = "roboticist's jumpskirt" + icon_state = "roboticsf" + item_color = "roboticsf" + flags_size = null /obj/item/clothing/under/rank/mechanic desc = "It's a pair of overalls worn by mechanics." diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index b6f83e78beb..a4f4f3c8b9f 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -7,8 +7,8 @@ icon_state = "director" item_state = "g_suit" item_color = "director" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/scientist desc = "It's made of a special fiber that provides minor protection against biohazards. It has markings that denote the wearer as a scientist." @@ -17,8 +17,15 @@ item_state = "w_suit" item_color = "toxinswhite" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/rank/scientist/skirt + name = "scientist's jumpskirt" + icon_state = "sciencewhitef" + item_color = "sciencewhitef" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_size = null /obj/item/clothing/under/rank/chemist desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it." @@ -27,8 +34,15 @@ item_state = "w_suit" item_color = "chemistrywhite" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/rank/chemist/skirt + name = "chemist's jumpskirt" + icon_state = "chemistrywhitef" + item_color = "chemistrywhitef" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_size = null /* * Medical @@ -40,8 +54,16 @@ item_state = "w_suit" item_color = "cmo" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/rank/chief_medical_officer/skirt + desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." + name = "chief medical officer's jumpskirt" + icon_state = "cmof" + item_color = "cmof" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_size = null /obj/item/clothing/under/rank/geneticist desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it." @@ -50,8 +72,15 @@ item_state = "w_suit" item_color = "geneticswhite" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/rank/geneticist/skirt + name = "geneticist's jumpskirt" + icon_state = "geneticswhitef" + item_color = "geneticswhitef" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_size = null /obj/item/clothing/under/rank/virologist desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it." @@ -60,8 +89,15 @@ item_state = "w_suit" item_color = "virologywhite" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/rank/virologist/skirt + name = "virologist's jumpskirt" + icon_state = "virologywhitef" + item_color = "virologywhitef" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_size = null /obj/item/clothing/under/rank/nursesuit desc = "It's a jumpsuit commonly worn by nursing staff in the medical department." @@ -70,8 +106,8 @@ item_state = "nursesuit" item_color = "nursesuit" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/nurse desc = "A dress commonly worn by the nursing staff in the medical department." @@ -80,8 +116,8 @@ item_state = "nurse" item_color = "nurse" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/orderly desc = "A white suit to be worn by orderly people who love orderly things." @@ -90,8 +126,8 @@ item_state = "orderly" item_color = "orderly" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/medical desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel." @@ -100,36 +136,43 @@ item_state = "w_suit" item_color = "medical" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL + +/obj/item/clothing/under/rank/medical/skirt + name = "medical doctor's jumpskirt" + icon_state = "medicalf" + item_color = "medicalf" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + flags_size = null /obj/item/clothing/under/rank/medical/blue name = "medical scrubs" desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue." icon_state = "scrubsblue" item_color = "scrubsblue" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/medical/green name = "medical scrubs" desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green." icon_state = "scrubsgreen" item_color = "scrubsgreen" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/medical/purple name = "medical scrubs" desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple." icon_state = "scrubspurple" item_color = "scrubspurple" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/medical/mortician name = "coroner's scrubs" desc = "It's made of a special fiber that provides minor protection against biohazards. This one is as dark as an emo's poetry." icon_state = "scrubsblack" item_color = "scrubsblack" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL //paramedic /obj/item/clothing/under/rank/medical/paramedic @@ -139,8 +182,8 @@ item_state = "paramedic" item_color = "paramedic" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 10) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 10) + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/psych desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist." @@ -148,7 +191,7 @@ icon_state = "psych" item_state = "w_suit" item_color = "psych" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/psych/turtleneck desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist." @@ -156,7 +199,7 @@ icon_state = "psychturtle" item_state = "b_suit" item_color = "psychturtle" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /* @@ -169,8 +212,8 @@ item_state = "w_suit" item_color = "genetics_new" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/chemist_new desc = "It's made of a special fiber which provides minor protection against biohazards." @@ -179,8 +222,8 @@ item_state = "w_suit" item_color = "chemist_new" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/scientist_new desc = "Made of a special fiber that gives special protection against biohazards and small explosions." @@ -189,8 +232,8 @@ item_state = "w_suit" item_color = "scientist_new" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/virologist_new desc = "Made of a special fiber that gives increased protection against biohazards." @@ -199,5 +242,5 @@ item_state = "w_suit" item_color = "virologist_new" permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index d40952e2030..71eb07c89eb 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -15,28 +15,44 @@ icon_state = "warden" item_state = "r_suit" item_color = "warden" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL strip_delay = 50 +/obj/item/clothing/under/rank/warden/skirt + desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders." + name = "warden's jumpskirt" + icon_state = "wardenf" + item_state = "r_suit" + item_color = "wardenf" + flags_size = null + /obj/item/clothing/under/rank/security name = "security officer's jumpsuit" desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection." icon_state = "security" item_state = "r_suit" item_color = "secred" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL strip_delay = 50 +/obj/item/clothing/under/rank/security/skirt + name = "security officer's jumpskirt" + desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts." + icon_state = "secredf" + item_state = "r_suit" + item_color = "secredf" + flags_size = null + /obj/item/clothing/under/rank/dispatch name = "dispatcher's uniform" desc = "A dress shirt and khakis with a security patch sewn on." icon_state = "dispatch" item_state = "dispatch" item_color = "dispatch" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/security2 name = "security officer's uniform" @@ -44,8 +60,9 @@ icon_state = "redshirt2" item_state = "r_suit" item_color = "redshirt2" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL + /obj/item/clothing/under/rank/security/corp icon_state = "sec_corporate" item_state = "sec_corporate" @@ -65,8 +82,8 @@ icon_state = "detective" item_state = "det" item_color = "detective" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL strip_delay = 50 species_fit = list("Vox") sprite_sheets = list( @@ -82,10 +99,18 @@ icon_state = "hos" item_state = "r_suit" item_color = "hosred" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - flags = ONESIZEFITSALL + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + flags_size = ONESIZEFITSALL strip_delay = 60 +/obj/item/clothing/under/rank/head_of_security/skirt + desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." + name = "head of security's jumpskirt" + icon_state = "hosredf" + item_state = "r_suit" + item_color = "hosredf" + flags_size = null + /obj/item/clothing/under/rank/head_of_security/corp icon_state = "hos_corporate" item_state = "hos_corporate" @@ -98,7 +123,7 @@ icon_state = "jensen" item_state = "jensen" item_color = "jensen" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL //Paradise Station @@ -154,5 +179,5 @@ item_state = "brig_phys" item_color = "brig_phys" permeability_coefficient = 0.50 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - flags = ONESIZEFITSALL \ No newline at end of file + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) + flags_size = ONESIZEFITSALL \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 9533d7c4aae..769e388f546 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -88,7 +88,7 @@ item_state = "g_suit" item_color = "officer" displays_id = 0 - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/centcom/captain desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain\" and bears \"N.C.V. Fearless CV-286\" on the left shounder." @@ -105,7 +105,7 @@ item_state = "g_suit" item_color = "officer" displays_id = 0 - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/centcom/representative desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Ensign\" and bears \"N.S.S. Cyberiad\" on the left shounder." @@ -114,7 +114,7 @@ item_state = "g_suit" item_color = "officer" displays_id = 0 - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/rank/centcom/diplomatic desc = "A very gaudy and official looking uniform of the Nanotrasen Diplomatic Corps." @@ -130,7 +130,7 @@ icon_state = "ert_uniform" item_state = "bl_suit" item_color = "ert_uniform" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/under/space name = "\improper NASA jumpsuit" @@ -156,7 +156,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS|HEAD - armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100) + armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100) cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT heat_protection = UPPER_TORSO | LOWER_TORSO|LEGS|FEET|ARMS|HANDS | HEAD @@ -231,7 +231,7 @@ icon_state = "red_suit" item_state = "r_suit" item_color = "red_suit" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL /obj/item/clothing/under/suit_jacket/navy name = "navy suit" @@ -568,7 +568,7 @@ icon_state = "vengine" item_state = "vengine" item_color = "vengine" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10) /obj/item/clothing/under/vox_sec name = "Vox Security Jumpsuit" @@ -576,7 +576,7 @@ icon_state = "vred" item_state = "vred" item_color = "vred" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/under/vox_chem name = "Vox Chemist Jumpsuit" @@ -584,7 +584,7 @@ icon_state = "vchem" item_state = "vchem" item_color = "vchem" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0) /obj/item/clothing/under/psyjump name = "Psychic Amp Jumpsuit" diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index 8beff8f41f3..e39691d857f 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -86,4 +86,4 @@ desc = "For those brave enough to weather the breeze." icon_state = "chaps" item_color = "chaps" - flags = ONESIZEFITSALL \ No newline at end of file + flags_size = ONESIZEFITSALL \ No newline at end of file diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index cfe317aaa3b..011f6784362 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -5,7 +5,7 @@ item_state = "bl_suit" item_color = "syndicate" has_sensor = 0 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/under/syndicate/combat name = "combat turtleneck" diff --git a/code/modules/computer3/computers/welcome.dm b/code/modules/computer3/computers/welcome.dm index 11695ce5322..203c5922289 100644 --- a/code/modules/computer3/computers/welcome.dm +++ b/code/modules/computer3/computers/welcome.dm @@ -10,7 +10,6 @@ interact() - usr.set_machine(src) if(!interactable()) return var/dat = "" diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index ab8670b3b05..fd4864b7900 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -212,6 +212,8 @@ desc = "A labcoat with a few markings denoting it as the labcoat of roboticist." icon = 'icons/obj/custom_items.dmi' icon_state = "aeneasrinil_open" + species_fit = null + sprite_sheets = null /obj/item/clothing/suit/jacket/fluff/kidosvest // Anxipal: Kido Qasteth name = "Kido's Vest" @@ -222,6 +224,8 @@ ignore_suitadjust = 1 action_button_name = null adjust_flavour = null + species_fit = null + sprite_sheets = null /obj/item/clothing/suit/fluff/kluys // Kluys: Cripty Pandaen name = "Nano Fibre Jacket" @@ -259,6 +263,8 @@ desc = "A suit that protects against minor chemical spills. Has a red stripe on the shoulders and rolled up sleeves." icon = 'icons/obj/custom_items.dmi' icon_state = "labcoat_red_open" + species_fit = null + sprite_sheets = null /obj/item/clothing/suit/fluff/stobarico_greatcoat // Stobarico: F.U.R.R.Y name = "\improper F.U.R.R.Y's Nanotrasen Greatcoat" @@ -333,6 +339,8 @@ ignore_suitadjust = 1 action_button_name = null adjust_flavour = null + species_fit = null + sprite_sheets = null /obj/item/clothing/under/fluff/fox name = "Aeronautics Jumpsuit" @@ -410,7 +418,7 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "chronx_robe" item_state = "chronx_robe" - flags = ONESIZEFITSALL + flags_size = ONESIZEFITSALL action_button_name = "Transform Robes" adjust_flavour = "untransform" ignore_suitadjust = 0 @@ -440,6 +448,8 @@ icon = 'icons/obj/clothing/ties.dmi' icon_state = "vest_black" item_state = "vest_black" + species_fit = null + sprite_sheets = null /obj/item/clothing/under/pants/fluff/combat name = "combat pants" @@ -455,6 +465,8 @@ item_state = "elliot_windbreaker_open" adjust_flavour = "unzip" suit_adjusted = 1 + species_fit = null + sprite_sheets = null /obj/item/device/fluff/tattoo_gun/elliot_cybernetic_tat desc = "A cheap plastic tattoo application pen.
      This one seems heavily used." diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm index 1b8bd092ee2..9bbab68b637 100644 --- a/code/modules/error_handler/error_viewer.dm +++ b/code/modules/error_handler/error_viewer.dm @@ -112,7 +112,8 @@ var/global/datum/ErrorViewer/ErrorCache/error_cache = null // Show the error to admins with debug messages turned on, but only if one // from the same source hasn't been shown too recently - if(error_source.next_message_at <= world.time) + // (Also, make sure config is initialized, or log_debug will runtime) + if(config && error_source.next_message_at <= world.time) var/const/viewtext = "\[view]" // Nesting these in other brackets went poorly log_debug("Runtime in [e.file],[e.line]: [html_encode(e.name)] [error_entry.makeLink(viewtext)]") error_source.next_message_at = world.time + ERROR_MSG_DELAY diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 6229105a8b3..c284660fe04 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -295,29 +295,29 @@ Gunshots/explosions/opening doors/less rare audio (done) switch(rand(1,5)) if(1) //Laser fight for(var/i=0,i[A] grabs [D]'s wrist and wrenches it sideways!", \ "[A] grabs your wrist and violently wrenches it to the side!") playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + if(prob(60)) + A.say(pick("WRISTY TWIRLY!", "WE FIGHT LIKE MEN!", "YOU DISHONOR YOURSELF!", "POHYAH!", "WHERE IS YOUR BATON NOW?", "SAY UNCLE!")) D.emote("scream") D.drop_item() D.apply_damage(5, BRUTE, pick("l_arm", "r_arm")) @@ -53,6 +55,8 @@ step_to(D,get_step(D,D.dir),1) D.Weaken(4) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) + if(prob(80)) + A.say(pick("SURRPRIZU!","BACK STRIKE!","WOPAH!", "WATAAH", "ZOTA!", "Never turn your back to the enemy!")) return 1 return basic_hit(A,D) @@ -65,6 +69,8 @@ D.losebreath += 3 D.Stun(2) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) + if(prob(80)) + A.say(pick("HWOP!", "KUH!", "YAKUUH!", "KYUH!", "KNEESTRIKE!")) return 1 return basic_hit(A,D) @@ -76,6 +82,8 @@ D.apply_damage(20, BRUTE, "head") D.drop_item() playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) + if(prob(60)) + A.say(pick("OOHYOO!", "OOPYAH!", "HYOOAA!", "WOOAAA!", "SHURYUKICK!", "HIYAH!")) D.Stun(4) return 1 return basic_hit(A,D) @@ -89,6 +97,8 @@ D.death() //FINISH HIM! D.apply_damage(50, BRUTE, "chest") playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1) + if(prob(80)) + A.say(pick("BANZAIII!", "KIYAAAA!", "OMAE WA MOU SHINDEIRU!", "YOU CAN'T SEE ME!", "MY TIME IS NOW!", "COWABUNGA")) return 1 return basic_hit(A,D) @@ -111,6 +121,8 @@ "[A] [atk_verb] you!") D.apply_damage(rand(10,15), BRUTE) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, 1, -1) + if(prob(50)) + A.say(pick("HUAH!", "HYA!", "CHOO!", "WUO!", "KYA!", "HUH!", "HIYOH!", "CARP STRIKE!", "CARP BITE!")) if(prob(D.getBruteLoss()) && !D.lying) D.visible_message("[D] stumbles and falls!", "The blow sends you to the ground!") D.Weaken(4) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 7061b653f81..c87f1f0f506 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -44,10 +44,6 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi stat = DEAD - ghostimage = image(src.icon,src,src.icon_state) - ghost_darkness_images |= ghostimage - updateallghostimages() - var/turf/T if(ismob(body)) T = get_turf(body) //Where is the body located? @@ -76,7 +72,15 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) mind = body.mind //we don't transfer the mind but we keep a reference to it. - + + ghostimage = image(icon = icon, loc = src, icon_state = icon_state) + ghostimage.overlays = overlays + ghostimage.dir = dir + ghostimage.appearance_flags |= KEEP_TOGETHER + ghostimage.alpha = alpha + appearance_flags |= KEEP_TOGETHER + ghost_darkness_images |= ghostimage + updateallghostimages() if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position forceMove(T) @@ -131,7 +135,7 @@ Works together with spawning an observer, noted above. if(ghost.can_reenter_corpse) respawnable_list += ghost ghost.key = key - if(!ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. + if(!(ghost.client && ghost.client.holder) && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. ghost.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing! return ghost @@ -166,6 +170,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/Move(NewLoc, direct) following = null dir = direct + ghostimage.dir = dir if(NewLoc) forceMove(NewLoc) return @@ -259,7 +264,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp source.layer = old_layer to_chat(src, "(Click to re-enter)") if(sound) - to_chat(src, sound(sound)) + src << sound(sound) /mob/dead/observer/proc/show_me_the_hud(hud_index) var/datum/atom_hud/H = huds[hud_index] @@ -368,6 +373,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!target) return + if(!get_turf(target)) + return + if(target != src) if(following && following == target) return diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index a6269b96d36..85b44accd6a 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -14,8 +14,26 @@ if (src.client.handle_spam_prevention(message,MUTE_DEADCHAT)) return - if(copytext(message,1,2) == "*") - return emote(copytext(message,2)) - . = src.say_dead(message) + +/mob/dead/observer/emote(var/act, var/type, var/message) + message = sanitize(copytext(message, 1, MAX_MESSAGE_LEN)) + + if(!message) + return + + if(act != "me") + return + + log_emote("Ghost/[src.key] : [message]") + + if(src.client) + if(src.client.prefs.muted & MUTE_DEADCHAT) + to_chat(src, "\red You cannot emote in deadchat (muted).") + return + + if(src.client.handle_spam_prevention(message, MUTE_DEADCHAT)) + return + + . = src.emote_dead(message) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm new file mode 100644 index 00000000000..ab47faa23f1 --- /dev/null +++ b/code/modules/mob/emote.dm @@ -0,0 +1,125 @@ +#define EMOTE_COOLDOWN 20 //Time in deciseconds that the cooldown lasts + +//Emote Cooldown System (it's so simple!) +/mob/proc/handle_emote_CD(cooldown = EMOTE_COOLDOWN) + if(emote_cd == 2) return 1 // Cooldown emotes were disabled by an admin, prevent use + if(src.emote_cd == 1) return 1 // Already on CD, prevent use + + src.emote_cd = 1 // Starting cooldown + spawn(cooldown) + if(emote_cd == 2) return 1 // Don't reset if cooldown emotes were disabled by an admin during the cooldown + src.emote_cd = 0 // Cooldown complete, ready for more! + + return 0 // Proceed with emote +//--FalseIncarnate + +// All mobs should have custom emote, really.. +/mob/proc/custom_emote(var/m_type=1,var/message = null) + + if(stat || !use_me && usr == src) + if(usr) + to_chat(usr, "You are unable to emote.") + return + + var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle) + if(m_type == 2 && muzzled) return + + var/input + if(!message) + input = sanitize(copytext(input(src,"Choose an emote to display.") as text|null,1,MAX_MESSAGE_LEN)) + else + input = message + if(input) + message = "[src] [input]" + else + return + + + if (message) + log_emote("[name]/[key] : [message]") + + //Hearing gasp and such every five seconds is not good emotes were not global for a reason. + // Maybe some people are okay with that. + + for(var/mob/M in player_list) + if (!M.client) + continue //skip monkeys and leavers + if (istype(M, /mob/new_player)) + continue + if(findtext(message," snores.")) //Because we have so many sleeping people. + break + if(M.stat == 2 && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + M.show_message(message) + + + // Type 1 (Visual) emotes are sent to anyone in view of the item + if (m_type & 1) + var/list/can_see = get_mobs_in_view(1,src) //Allows silicon & mmi mobs carried around to see the emotes of the person carrying them around. + can_see |= viewers(src,null) + for (var/mob/O in can_see) + + if(O.status_flags & PASSEMOTES) + + for(var/obj/item/weapon/holder/H in O.contents) + H.show_message(message, m_type) + + for(var/mob/living/M in O.contents) + M.show_message(message, m_type) + + O.show_message(message, m_type) + + // Type 2 (Audible) emotes are sent to anyone in hear range + // of the *LOCATION* -- this is important for pAIs to be heard + else if (m_type & 2) + for (var/mob/O in get_mobs_in_view(7,src)) + + if(O.status_flags & PASSEMOTES) + + for(var/obj/item/weapon/holder/H in O.contents) + H.show_message(message, m_type) + + for(var/mob/living/M in O.contents) + M.show_message(message, m_type) + + O.show_message(message, m_type) + +/mob/proc/emote_dead(var/message) + + if(client.prefs.muted & MUTE_DEADCHAT) + to_chat(src, "\red You cannot send deadchat emotes (muted).") + return + + if(!(client.prefs.toggles & CHAT_DEAD)) + to_chat(src, "\red You have deadchat muted.") + return + + if(!src.client.holder) + if(!config.dsay_allowed) + to_chat(src, "\red Deadchat is globally muted") + return + + + var/input + if(!message) + input = sanitize(copytext(input(src, "Choose an emote to display.") as text|null, 1, MAX_MESSAGE_LEN)) + else + input = message + + if(input) + message = "DEAD: [src] [message]" + else + return + + + if(message) + log_emote("Ghost/[src.key] : [message]") + + for(var/mob/M in player_list) + if(istype(M, /mob/new_player)) + continue + + if(check_rights(R_ADMIN|R_MOD, 0, M) && (M.client.prefs.toggles & CHAT_DEAD)) // Show the emote to admins/mods + to_chat(M, message) + + else if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_DEAD)) // Show the emote to regular ghosts with deadchat toggled on + M.show_message(message, 2) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 09f8009be75..ed867cd5178 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -48,10 +48,10 @@ if(istype(M)) M.unEquip(src) to_chat(M, "[src] wriggles out of your grip!") - to_chat(src, "You wriggle out of [M]'s grip!") - else if(istype(src.loc,/obj/item)) - to_chat(src, "You struggle free of [src.loc].") - src.forceMove(get_turf(src)) + to_chat(L, "You wriggle out of [M]'s grip!") + else if(istype(loc,/obj/item)) + to_chat(L, "You struggle free of [loc].") + forceMove(get_turf(src)) if(istype(M)) for(var/atom/A in M.contents) diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 6abd4acd6fc..bc8182f4049 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -354,7 +354,7 @@ speech_verb = "growls" ask_verb = "gnarls" exclaim_verb = "snarls" - colour = "rough" + colour = "gutter" key = "3" syllables = list ("gra","ba","ba","breh","bra","rah","dur","ra","ro","gro","go","ber","bar","geh","heh", "gra") diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 6192b0acc6b..74e9fbfce93 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -217,7 +217,7 @@ if(judgebot.check_for_weapons(r_hand)) threatcount += 4 - //Loyalty implants imply trustworthyness + //Mindshield implants imply trustworthyness if(isloyal(src)) threatcount -= 1 diff --git a/code/modules/mob/living/carbon/alien/humanoid/emote.dm b/code/modules/mob/living/carbon/alien/humanoid/emote.dm new file mode 100644 index 00000000000..3b7d0b5d1b9 --- /dev/null +++ b/code/modules/mob/living/carbon/alien/humanoid/emote.dm @@ -0,0 +1,115 @@ +/mob/living/carbon/alien/humanoid/emote(var/act,var/m_type=1,var/message = null) + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + +// if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_' +// act = copytext(act,1,length(act)) //seriously who the fuck wrote this + var/muzzled = is_muzzled() + act = lowertext(act) + switch(act) + if("sign") + if(!restrained()) + var/num = null + if(text2num(param)) + num = "the number [text2num(param)]" + if(num) + message = "\The [src] signs [num]." + m_type = 1 + if ("burp") + if (!muzzled) + message = "\The [src] burps." + m_type = 2 + if ("deathgasp") + message = "\The [src] lets out a waning guttural screech, green blood bubbling from its maw..." + m_type = 2 + if("scratch") + if (!src.restrained()) + message = "\The [src] scratches." + m_type = 1 + if("whimper") + if (!muzzled) + message = "\The [src] whimpers." + m_type = 2 + if("roar") + if (!muzzled) + message = "\The [src] roars." + m_type = 2 + if("hiss") + if(!muzzled) + message = "\The [src] hisses." + m_type = 2 + if("tail") + message = "\The [src] waves its tail." + m_type = 1 + if("gasp") + message = "\The [src] gasps." + m_type = 2 + if("shiver") + message = "\The [src] shivers." + m_type = 2 + if("drool") + message = "\The [src] drools." + m_type = 1 + if("scretch") + if (!muzzled) + message = "\The [src] scretches." + m_type = 2 + if("choke") + message = "\The [src] chokes." + m_type = 2 + if("moan") + message = "\The [src] moans!" + m_type = 2 + if("nod") + message = "\The [src] nods its head." + m_type = 1 + if("sit") + message = "\The [src] sits down." + m_type = 1 + if("sway") + message = "\The [src] sways around dizzily." + m_type = 1 + if("sulk") + message = "\The [src] sulks down sadly." + m_type = 1 + if("twitch") + message = "\The [src] twitches violently." + m_type = 1 + if("dance") + if (!src.restrained()) + message = "\The [src] dances around happily." + m_type = 1 + if("roll") + if (!src.restrained()) + message = "\The [src] rolls." + m_type = 1 + if("shake") + message = "\The [src] shakes its head." + m_type = 1 + if("gnarl") + if (!muzzled) + message = "\The [src] gnarls and shows its teeth.." + m_type = 2 + if("jump") + message = "\The [src] jumps!" + m_type = 1 + if("collapse") + Paralyse(2) + message = "\The [src] collapses!" + m_type = 2 + if ("flip") + m_type = 1 + message = "\The [src] does a flip!" + src.SpinAnimation(5,1) + if("help") + to_chat(src, "burp, flip, deathgasp, choke, collapse, dance, drool, gasp, shiver, gnarl, jump, moan, nod, roar, roll, scratch,\nscretch, shake, sign-#, sit, sulk, sway, tail, twitch, whimper") + + if(!stat) + if (act == "roar") + playsound(src.loc, 'sound/voice/hiss5.ogg', 40, 1, 1) + if (act == "deathgasp") + playsound(src.loc, 'sound/voice/hiss6.ogg', 80, 1, 1) + ..(act, m_type, message) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/larva/emote.dm b/code/modules/mob/living/carbon/alien/larva/emote.dm new file mode 100644 index 00000000000..0a7bc7708d6 --- /dev/null +++ b/code/modules/mob/living/carbon/alien/larva/emote.dm @@ -0,0 +1,126 @@ +/mob/living/carbon/alien/larva/emote(var/act,var/m_type=1,var/message = null) + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + + if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_' + act = copytext(act,1,length(act)) + var/muzzled = is_muzzled() + act = lowertext(act) + switch(act) + if ("me") + if(silent) + return + if (src.client) + if (client.prefs.muted & MUTE_IC) + to_chat(src, "\red You cannot send IC messages (muted).") + return + if (src.client.handle_spam_prevention(message,MUTE_IC)) + return + if (stat) + return + if(!(message)) + return + return custom_emote(m_type, message) + + if ("custom") + return custom_emote(m_type, message) + if("sign") + if (!src.restrained()) + message = text("The alien signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null)) + m_type = 1 + if ("burp") + if (!muzzled) + message = "[src] burps." + m_type = 2 + if("scratch") + if (!src.restrained()) + message = "The [src.name] scratches." + m_type = 1 + if("whimper") + if (!muzzled) + message = "The [src.name] whimpers." + m_type = 2 +// if("roar") +// if (!muzzled) +// message = "The [src.name] roars." Commenting out since larva shouldn't roar /N +// m_type = 2 + if("tail") + message = "The [src.name] waves its tail." + m_type = 1 + if("gasp") + message = "The [src.name] gasps." + m_type = 2 + if("shiver") + message = "The [src.name] shivers." + m_type = 2 + if("drool") + message = "The [src.name] drools." + m_type = 1 + if("scretch") + if (!muzzled) + message = "The [src.name] scretches." + m_type = 2 + if("choke") + message = "The [src.name] chokes." + m_type = 2 + if("moan") + message = "The [src.name] moans!" + m_type = 2 + if("nod") + message = "The [src.name] nods its head." + m_type = 1 +// if("sit") +// message = "The [src.name] sits down." //Larvan can't sit down, /N +// m_type = 1 + if("sway") + message = "The [src.name] sways around dizzily." + m_type = 1 + if("sulk") + message = "The [src.name] sulks down sadly." + m_type = 1 + if("twitch") + message = "The [src.name] twitches violently." + m_type = 1 + if("dance") + if (!src.restrained()) + message = "The [src.name] dances around happily." + m_type = 1 + if("roll") + if (!src.restrained()) + message = "The [src.name] rolls." + m_type = 1 + if("shake") + message = "The [src.name] shakes its head." + m_type = 1 + if("gnarl") + if (!muzzled) + message = "The [src.name] gnarls and shows its teeth.." + m_type = 2 + if("jump") + message = "The [src.name] jumps!" + m_type = 1 + if("hiss_") + message = "The [src.name] hisses softly." + m_type = 1 + if("collapse") + Paralyse(2) + message = text("[] collapses!", src) + m_type = 2 + if("help") + to_chat(src, "burp, choke, collapse, dance, drool, gasp, shiver, gnarl, jump, moan, nod, roll, scratch,\nscretch, shake, sign-#, sulk, sway, tail, twitch, whimper") + else + to_chat(src, text("Invalid Emote: []", act)) + if ((message && src.stat == 0)) + log_emote("[name]/[key] : [message]") + if (m_type & 1) + for(var/mob/O in viewers(src, null)) + O.show_message(message, m_type) + //Foreach goto(703) + else + for(var/mob/O in hearers(src, null)) + O.show_message(message, m_type) + //Foreach goto(746) + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 151ed93e3ef..2038704023b 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -98,7 +98,7 @@ new_xeno.mind.name = new_xeno.name new_xeno.mind.assigned_role = "MODE" new_xeno.mind.special_role = "Alien" - to_chat(new_xeno, sound('sound/voice/hiss5.ogg',0,0,0,100))//To get the player's attention + new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100)//To get the player's attention if(gib_on_success) owner.gib() diff --git a/code/modules/mob/living/carbon/brain/emote.dm b/code/modules/mob/living/carbon/brain/emote.dm new file mode 100644 index 00000000000..e6ead851c5b --- /dev/null +++ b/code/modules/mob/living/carbon/brain/emote.dm @@ -0,0 +1,51 @@ +/mob/living/carbon/brain/emote(var/act,var/m_type=1,var/message = null) + if(!(container && istype(container, /obj/item/device/mmi)))//No MMI, no emotes + return + + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + act = copytext(act, 1, t1) + + if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_' + act = copytext(act,1,length(act)) + + if(src.stat == DEAD) + return + act = lowertext(act) + switch(act) + + if ("alarm") + to_chat(src, "You sound an alarm.") + message = "\The [src] sounds an alarm." + m_type = 2 + if ("alert") + to_chat(src, "You let out a distressed noise.") + message = "\The [src] lets out a distressed noise." + m_type = 2 + if ("notice") + to_chat(src, "You play a loud tone.") + message = "\The [src] plays a loud tone." + m_type = 2 + if ("flash") + message = "The lights on \the [src] flash quickly." + m_type = 1 + if ("blink") + message = "\The [src] blinks." + m_type = 1 + if ("whistle") + to_chat(src, "You whistle.") + message = "\The [src] whistles." + m_type = 2 + if ("beep") + to_chat(src, "You beep.") + message = "\The [src] beeps." + m_type = 2 + if ("boop") + to_chat(src, "You boop.") + message = "\The [src] boops." + m_type = 2 + if ("help") + to_chat(src, "alarm, alert, notice, flash,blink, whistle, beep, boop") + + if(message && !stat) + ..(act, m_type, message) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index f37faf32750..fa2863e23b7 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -144,11 +144,12 @@ /obj/item/device/mmi/posibrain/examine(mob/user) + to_chat(user, "*---------*") if(!..(user)) + to_chat(user, "*---------*") return - var/msg = "*---------*\nThis is [bicon(src)] \a [src]!\n[desc]\n" - msg += "" + var/msg = "" if(src.brainmob && src.brainmob.key) switch(src.brainmob.stat) @@ -158,7 +159,7 @@ if(DEAD) msg += "It appears to be completely inactive.\n" else msg += "It appears to be completely inactive.\n" - msg += "*---------*" + msg += "*---------*" to_chat(user, msg) /obj/item/device/mmi/posibrain/emp_act(severity) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 5ac5d796897..d3606b12b8a 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -111,7 +111,7 @@ if(istype(I,/mob/living/simple_animal/borer)) B = I if(B) - if(!B.ckey && ckey && B.controlling) + if(B.controlling && B.host == src) B.detatch() verbs -= /mob/living/carbon/proc/release_control @@ -144,10 +144,11 @@ var/obj/item/organ/external/head/H = get_organ("head") if(SKELETON in src.mutations) return - if(H.f_style) - H.f_style = "Shaved" - if(H.h_style) - H.h_style = "Bald" + if(istype(H)) + if(H.f_style) + H.f_style = "Shaved" + if(H.h_style) + H.h_style = "Bald" update_fhair(0) update_hair(0) @@ -162,10 +163,11 @@ var/obj/item/organ/external/head/H = organs_by_name["head"] if(HUSK in mutations) return - if(H.f_style) - H.f_style = "Shaved" //we only change the icon_state of the hair datum, so it doesn't mess up their UI/UE - if(H.h_style) - H.h_style = "Bald" + if(istype(H)) + if(H.f_style) + H.f_style = "Shaved" //we only change the icon_state of the hair datum, so it doesn't mess up their UI/UE + if(H.h_style) + H.h_style = "Bald" update_fhair(0) update_hair(0) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm new file mode 100644 index 00000000000..0cb277e8642 --- /dev/null +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -0,0 +1,889 @@ +/mob/living/carbon/human/emote(var/act,var/m_type=1,var/message = null,var/force) + + if (stat == DEAD) + return // No screaming bodies + + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + + var/muzzled = is_muzzled() + if(sdisabilities & MUTE || silent) + muzzled = 1 + //var/m_type = 1 + + for (var/obj/item/weapon/implant/I in src) + if (I.implanted) + I.trigger(act, src) + + var/miming = 0 + if(mind) + miming = mind.miming + + //Emote Cooldown System (it's so simple!) + // proc/handle_emote_CD() located in [code\modules\mob\emote.dm] + var/on_CD = 0 + act = lowertext(act) + switch(act) + //Cooldown-inducing emotes + if("ping", "pings", "buzz", "buzzes", "beep", "beeps", "yes", "no", "buzz2") + if (species.name == "Machine") //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise. + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm + else //Everyone else fails, skip the emote attempt + return + if("drone","drones","hum","hums","rumble","rumbles") + if (species.name == "Drask") //Only Drask can make whale noises + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm + else + return + if("squish", "squishes") + var/found_slime_bodypart = 0 + + if(species.name == "Slime People") //Only Slime People can squish + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' + found_slime_bodypart = 1 + else + for(var/obj/item/organ/external/L in organs) // if your limbs are squishy you can squish too! + if(L.dna.species in list("Slime People")) + on_CD = handle_emote_CD() + found_slime_bodypart = 1 + break + + if(!found_slime_bodypart) //Everyone else fails, skip the emote attempt + return + if("scream", "screams") + on_CD = handle_emote_CD(50) //longer cooldown + if("fart", "farts", "flip", "flips", "snap", "snaps") + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm + //Everything else, including typos of the above emotes + else + on_CD = 0 //If it doesn't induce the cooldown, we won't check for the cooldown + + if(on_CD == 1) // Check if we need to suppress the emote attempt. + return // Suppress emote, you're still cooling off. + + switch(act) + if("me") //OKAY SO RANT TIME, THIS FUCKING HAS TO BE HERE OR A SHITLOAD OF THINGS BREAK + return custom_emote(m_type, message) //DO YOU KNOW WHY SHIT BREAKS? BECAUSE SO MUCH OLDCODE CALLS mob.emote("me",1,"whatever_the_fuck_it_wants_to_emote") + //WHO THE FUCK THOUGHT THAT WAS A GOOD FUCKING IDEA!?!? + + if("ping", "pings") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] pings at [param]." + else + message = "[src] pings." + playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) + m_type = 2 + + if("buzz2") + message = "[src] emits an irritated buzzing sound." + playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) + m_type = 2 + + if("buzz", "buzzes") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] buzzes at [param]." + else + message = "[src] buzzes." + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + m_type = 2 + + if("beep", "beeps") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] beeps at [param]." + else + message = "[src] beeps." + playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) + m_type = 2 + + if("drone", "drones", "hum", "hums", "rumble", "rumbles") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] drones at [param]." + else + message = "[src] rumbles." + playsound(src.loc, 'sound/voice/DraskTalk.ogg', 50, 0) + m_type = 2 + + if("squish", "squishes") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] squishes at [param]." + else + message = "[src] squishes." + playsound(src.loc, 'sound/effects/slime_squish.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound. + m_type = 2 + + if("yes") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] emits an affirmative blip at [param]." + else + message = "[src] emits an affirmative blip." + playsound(src.loc, 'sound/machines/synth_yes.ogg', 50, 0) + m_type = 2 + + if("no") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] emits a negative blip at [param]." + else + message = "[src] emits a negative blip." + playsound(src.loc, 'sound/machines/synth_no.ogg', 50, 0) + m_type = 2 + + if("wag", "wags") + if(body_accessory) + if(body_accessory.try_restrictions(src)) + message = "[src] starts wagging \his tail." + start_tail_wagging(1) + + else if(species.bodyflags & TAIL_WAGGING) + if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) + message = "[src] starts wagging \his tail." + src.start_tail_wagging(1) + else + return + else + return + m_type = 1 + + if("swag", "swags") + if(species.bodyflags & TAIL_WAGGING || body_accessory) + message = "[src] stops wagging \his tail." + src.stop_tail_wagging(1) + else + return + m_type = 1 + + if ("airguitar") + if (!src.restrained()) + message = "[src] is strumming the air and headbanging like a safari chimp." + m_type = 1 + + if ("blink", "blinks") + message = "[src] blinks." + m_type = 1 + + if ("blink_r", "blinks_r") + message = "[src] blinks rapidly." + m_type = 1 + + if ("bow", "bows") + if (!src.buckled) + var/M = null + if (param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if (!M) + param = null + + if (param) + message = "[src] bows to [param]." + else + message = "[src] bows." + m_type = 1 + + if ("salute", "salutes") + if (!src.buckled) + var/M = null + if (param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if (!M) + param = null + + if (param) + message = "[src] salutes to [param]." + else + message = "[src] salutes." + m_type = 1 + + if ("choke", "chokes") + if(miming) + message = "[src] clutches \his throat desperately!" + m_type = 1 + else + if (!muzzled) + message = "[src] chokes!" + m_type = 2 + else + message = "[src] makes a strong noise." + m_type = 2 + + if ("burp", "burps") + if(miming) + message = "[src] opens their mouth rather obnoxiously." + m_type = 1 + else + if (!muzzled) + message = "[src] burps." + m_type = 2 + else + message = "[src] makes a peculiar noise." + m_type = 2 + if ("clap", "claps") + if (!src.restrained()) + message = "[src] claps." + m_type = 2 + if(miming) + m_type = 1 + if ("flap", "flaps") + if (!src.restrained()) + message = "[src] flaps \his wings." + m_type = 2 + if(miming) + m_type = 1 + + if ("flip", "flips") + m_type = 1 + if (!src.restrained()) + var/M = null + if (param) + for (var/mob/A in view(1, null)) + if (param == A.name) + M = A + break + if (M == src) + M = null + + if(M) + if(lying || weakened) + message = "[src] flops and flails around on the floor." + else + message = "[src] flips in [M]'s general direction." + SpinAnimation(5,1) + else + if(lying || weakened) + message = "[src] flops and flails around on the floor." + else + var/obj/item/weapon/grab/G + if(istype(get_active_hand(), /obj/item/weapon/grab)) + G = get_active_hand() + if(G && G.affecting) + if(buckled || G.affecting.buckled) + return + var/turf/oldloc = loc + var/turf/newloc = G.affecting.loc + if(isturf(oldloc) && isturf(newloc)) + SpinAnimation(5,1) + forceMove(newloc) + G.affecting.forceMove(oldloc) + message = "[src] flips over [G.affecting]!" + else + message = "[src] does a flip!" + SpinAnimation(5,1) + + if ("aflap", "aflaps") + if (!src.restrained()) + message = "[src] flaps \his wings ANGRILY!" + m_type = 2 + if(miming) + m_type = 1 + + if ("drool", "drools") + message = "[src] drools." + m_type = 1 + + if ("eyebrow") + message = "[src] raises an eyebrow." + m_type = 1 + + if ("chuckle", "chuckles") + if(miming) + message = "[src] appears to chuckle." + m_type = 1 + else + if (!muzzled) + message = "[src] chuckles." + m_type = 2 + else + message = "[src] makes a noise." + m_type = 2 + + if ("twitch", "twitches") + message = "[src] twitches violently." + m_type = 1 + + if ("twitch_s", "twitches_s") + message = "[src] twitches." + m_type = 1 + + if ("faint", "faints") + message = "[src] faints." + if(src.sleeping) + return //Can't faint while asleep + src.sleeping += 1 + m_type = 1 + + if ("cough", "coughs") + if(miming) + message = "[src] appears to cough!" + m_type = 1 + else + if (!muzzled) + message = "[src] coughs!" + m_type = 2 + else + message = "[src] makes a strong noise." + m_type = 2 + + if ("frown", "frowns") + message = "[src] frowns." + m_type = 1 + + if ("nod", "nods") + message = "[src] nods." + m_type = 1 + + if ("blush", "blushes") + message = "[src] blushes." + m_type = 1 + + if ("wave", "waves") + message = "[src] waves." + m_type = 1 + + if ("quiver", "quivers") + message = "[src] quivers." + m_type = 1 + + if ("gasp", "gasps") + if(miming) + message = "[src] appears to be gasping!" + m_type = 1 + else + if (!muzzled) + message = "[src] gasps!" + m_type = 2 + else + message = "[src] makes a weak noise." + m_type = 2 + + if ("deathgasp", "deathgasps") + message = "[src] [species.death_message]" + m_type = 1 + + if ("giggle", "giggles") + if(miming) + message = "[src] giggles silently!" + m_type = 1 + else + if (!muzzled) + message = "[src] giggles." + m_type = 2 + else + message = "[src] makes a noise." + m_type = 2 + + if ("glare", "glares") + var/M = null + if (param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if (!M) + param = null + + if (param) + message = "[src] glares at [param]." + else + message = "[src] glares." + m_type = 1 + + if ("stare", "stares") + var/M = null + if (param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if (!M) + param = null + + if (param) + message = "[src] stares at [param]." + else + message = "[src] stares." + m_type = 1 + + if ("look", "looks") + var/M = null + if (param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + + if (!M) + param = null + + if (param) + message = "[src] looks at [param]." + else + message = "[src] looks." + m_type = 1 + + if ("grin", "grins") + message = "[src] grins." + m_type = 1 + + if ("cry", "cries") + if(miming) + message = "[src] cries." + m_type = 1 + else + if (!muzzled) + message = "[src] cries." + m_type = 2 + else + message = "[src] makes a weak noise. \He frowns." + m_type = 2 + + if ("sigh", "sighs") + if(miming) + message = "[src] sighs." + m_type = 1 + else + if (!muzzled) + message = "[src] sighs." + m_type = 2 + else + message = "[src] makes a weak noise." + m_type = 2 + + if ("laugh", "laughs") + if(miming) + message = "[src] acts out a laugh." + m_type = 1 + else + if (!muzzled) + message = "[src] laughs." + m_type = 2 + else + message = "[src] makes a noise." + m_type = 2 + + if ("mumble", "mumbles") + message = "[src] mumbles!" + m_type = 2 + if(miming) + m_type = 1 + + if ("grumble", "grumbles") + if(miming) + message = "[src] grumbles!" + m_type = 1 + if (!muzzled) + message = "[src] grumbles!" + m_type = 2 + else + message = "[src] makes a noise." + m_type = 2 + + if ("groan", "groans") + if(miming) + message = "[src] appears to groan!" + m_type = 1 + else + if (!muzzled) + message = "[src] groans!" + m_type = 2 + else + message = "[src] makes a loud noise." + m_type = 2 + + if ("moan", "moans") + if(miming) + message = "[src] appears to moan!" + m_type = 1 + else + message = "[src] moans!" + m_type = 2 + + if ("johnny") + var/M + if (param) + M = param + if (!M) + param = null + else + if(miming) + message = "[src] takes a drag from a cigarette and blows \"[M]\" out in smoke." + m_type = 1 + else + message = "[src] says, \"[M], please. They had a family.\" [src.name] takes a drag from a cigarette and blows their name out in smoke." + m_type = 2 + + if ("point", "points") + if (!src.restrained()) + var/atom/M = null + if (param) + for (var/atom/A as mob|obj|turf in view()) + if (param == A.name) + M = A + break + + if (!M) + message = "[src] points." + else + pointed(M) + m_type = 1 + + if ("raise", "raises") + if (!src.restrained()) + message = "[src] raises a hand." + m_type = 1 + + if("shake", "shakes") + message = "[src] shakes \his head." + m_type = 1 + + if ("shrug", "shrugs") + message = "[src] shrugs." + m_type = 1 + + if ("signal", "signals") + if (!src.restrained()) + var/t1 = round(text2num(param)) + if (isnum(t1)) + if (t1 <= 5 && (!src.r_hand || !src.l_hand)) + message = "[src] raises [t1] finger\s." + else if (t1 <= 10 && (!src.r_hand && !src.l_hand)) + message = "[src] raises [t1] finger\s." + m_type = 1 + + if ("smile", "smiles") + message = "[src] smiles." + m_type = 1 + + if ("shiver", "shivers") + message = "[src] shivers." + m_type = 2 + if(miming) + m_type = 1 + + if ("pale", "pales") + message = "[src] goes pale for a second." + m_type = 1 + + if ("tremble", "trembles") + message = "[src] trembles." + m_type = 1 + + if ("sneeze", "sneezes") + if (miming) + message = "[src] sneezes." + m_type = 1 + else + if (!muzzled) + message = "[src] sneezes." + m_type = 2 + else + message = "[src] makes a strange noise." + m_type = 2 + + if ("sniff", "sniffs") + message = "[src] sniffs." + m_type = 2 + if(miming) + m_type = 1 + + if ("snore", "snores") + if (miming) + message = "[src] sleeps soundly." + m_type = 1 + else + if (!muzzled) + message = "[src] snores." + m_type = 2 + else + message = "[src] makes a noise." + m_type = 2 + + if ("whimper", "whimpers") + if (miming) + message = "[src] appears hurt." + m_type = 1 + else + if (!muzzled) + message = "[src] whimpers." + m_type = 2 + else + message = "[src] makes a weak noise." + m_type = 2 + + if ("wink", "winks") + message = "[src] winks." + m_type = 1 + + if ("yawn", "yawns") + if (!muzzled) + message = "[src] yawns." + m_type = 2 + if(miming) + m_type = 1 + + if ("collapse", "collapses") + Paralyse(2) + message = "[src] collapses!" + m_type = 2 + if(miming) + m_type = 1 + + if("hug", "hugs") + m_type = 1 + if (!src.restrained()) + var/M = null + if (param) + for (var/mob/A in view(1, null)) + if (param == A.name) + M = A + break + if (M == src) + M = null + + if (M) + message = "[src] hugs [M]." + else + message = "[src] hugs \himself." + + if ("handshake") + m_type = 1 + if (!src.restrained() && !src.r_hand) + var/mob/M = null + if (param) + for (var/mob/A in view(1, null)) + if (param == A.name) + M = A + break + if (M == src) + M = null + + if (M) + if (M.canmove && !M.r_hand && !M.restrained()) + message = "[src] shakes hands with [M]." + else + message = "[src] holds out \his hand to [M]." + + if("dap", "daps") + m_type = 1 + if (!src.restrained()) + var/M = null + if (param) + for (var/mob/A in view(1, null)) + if (param == A.name) + M = A + break + if (M) + message = "[src] gives daps to [M]." + else + message = "[src] sadly can't find anybody to give daps to, and daps \himself. Shameful." + + if("slap", "slaps") + m_type = 1 + if (!src.restrained()) + var/M = null + if (param) + for (var/mob/A in view(1, null)) + if (param == A.name) + M = A + break + if (M) + message = "\red [src] slaps [M] across the face. Ouch!" + playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) + else + message = "\red [src] slaps \himself!" + playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) + src.adjustFireLoss(4) + + if ("scream", "screams") + if (miming) + message = "[src] acts out a scream!" + m_type = 1 + else + if (!muzzled) + message = "[src] [species.scream_verb]!" + m_type = 2 + if(gender == FEMALE) + playsound(src.loc, "[species.female_scream_sound]", 80, 1, 0, pitch = get_age_pitch()) + else + playsound(src.loc, "[species.male_scream_sound]", 80, 1, 0, pitch = get_age_pitch()) //default to male screams if no gender is present. + + else + message = "[src] makes a very loud noise." + m_type = 2 + + + if ("snap", "snaps") + if(prob(95)) + m_type = 2 + var/mob/living/carbon/human/H = src + var/obj/item/organ/external/L = H.get_organ("l_hand") + var/obj/item/organ/external/R = H.get_organ("r_hand") + var/left_hand_good = 0 + var/right_hand_good = 0 + if(L && (!(L.status & ORGAN_DESTROYED)) && (!(L.status & ORGAN_SPLINTED)) && (!(L.status & ORGAN_BROKEN))) + left_hand_good = 1 + if(R && (!(R.status & ORGAN_DESTROYED)) && (!(R.status & ORGAN_SPLINTED)) && (!(R.status & ORGAN_BROKEN))) + right_hand_good = 1 + + if (!left_hand_good && !right_hand_good) + to_chat(usr, "You need at least one hand in good working order to snap your fingers.") + return + + message = "[src] snaps \his fingers." + playsound(src.loc, 'sound/effects/fingersnap.ogg', 50, 1, -3) + else + message = "[src] snaps \his fingers right off!" + playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) + + + // Needed for M_TOXIC_FART + if("fart", "farts") + if(reagents.has_reagent("simethicone")) + return +// playsound(src.loc, 'sound/effects/fart.ogg', 50, 1, -3) //Admins still vote no to fun + if(locate(/obj/item/weapon/storage/bible) in get_turf(src)) + to_chat(viewers(src), "[src] farts on the Bible!") + to_chat(viewers(src), "A mysterious force smites [src]!") + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + src.gib() + else if(TOXIC_FARTS in mutations) + message = "[src] unleashes a [pick("horrible","terrible","foul","disgusting","awful")] fart." + else + message = "[src] [pick("passes wind","farts")]." + m_type = 2 + + var/turf/location = get_turf(src) + var/aoe_range=2 // Default + + // Process toxic farts first. + if(TOXIC_FARTS in mutations) + for(var/mob/M in range(location,aoe_range)) + if (M.internal != null && M.wear_mask && (M.wear_mask.flags & AIRTIGHT)) + continue + // Now, we don't have this: + //new /obj/effects/fart_cloud(T,L) + if (M == src) + continue + M.reagents.add_reagent("jenkem", 1) + + if ("help") + var/emotelist = "aflap(s), airguitar, blink(s), blink(s)_r, blush(es), bow(s)-(none)/mob, burp(s), choke(s), chuckle(s), clap(s), collapse(s), cough(s),cry, cries, custom, dap(s)(none)/mob," \ + + " deathgasp(s), drool(s), eyebrow,fart(s), faint(s), flap(s), flip(s), frown(s), gasp(s), giggle(s), glare(s)-(none)/mob, grin(s), groan(s), grumble(s), handshake-mob, hug(s)-(none)/mob," \ + + " glare(s)-(none)/mob, grin(s), johnny, laugh(s), look(s)-(none)/mob, moan(s), mumble(s), nod(s), pale(s), point(s)-atom, quiver(s), raise(s), salute(s)-(none)/mob, scream(s), shake(s)," \ + + " shiver(s), shrug(s), sigh(s), signal(s)-#1-10,slap(s)-(none)/mob, smile(s),snap(s), sneeze(s), sniff(s), snore(s), stare(s)-(none)/mob, swag(s), tremble(s), twitch(es), twitch(es)_s," \ + + " wag(s), wave(s), whimper(s), wink(s), yawn(s)" + if(species.name == "Machine") + emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob" + else if(species.name == "Slime People") + emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob" + to_chat(src, emotelist) + + else + to_chat(src, "\blue Unusable emote '[act]'. Say *help for a list.") + + + + + + if(message) //Humans are special fucking snowflakes and have 735 lines of emotes, they get to handle their own emotes, not call the parent + log_emote("[name]/[key] : [message]") + + //Hearing gasp and such every five seconds is not good emotes were not global for a reason. + // Maybe some people are okay with that. + + for(var/mob/M in dead_mob_list) + if(!M.client || istype(M, /mob/new_player)) + continue //skip monkeys, leavers and new players + if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + M.show_message(message) + + switch(m_type) + if(1) + visible_message(message) + if(2) + audible_message(message) + +/mob/living/carbon/human/verb/pose() + set name = "Set Pose" + set desc = "Sets a description which will be shown when someone examines you." + set category = "IC" + + pose = sanitize(copytext(input(usr, "This is [src]. \He is...", "Pose", null) as text, 1, MAX_MESSAGE_LEN)) + +/mob/living/carbon/human/verb/set_flavor() + set name = "Set Flavour Text" + set desc = "Sets an extended description of your character's features." + set category = "IC" + + update_flavor_text() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ed02823215f..1bc79c16242 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1882,7 +1882,7 @@ threatcount += 2 - //Loyalty implants imply trustworthyness + //Mindshield implants imply slight trustworthiness if(isloyal(src)) threatcount -= 1 diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index bde2c900636..8b7ed3a62df 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -423,7 +423,7 @@ if(istype(I, /obj/item/clothing/under) || istype(I, /obj/item/clothing/suit)) if(FAT in mutations) //testing("[M] TOO FAT TO WEAR [src]!") - if(!(I.flags & ONESIZEFITSALL)) + if(!(I.flags_size & ONESIZEFITSALL)) if(!disable_warning) to_chat(src, "You're too fat to wear the [I].") return 0 diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index c7c20904da4..a41f787a49c 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1137,7 +1137,7 @@ if(heartbeat >= rate) heartbeat = 0 - to_chat(src, sound('sound/effects/electheart.ogg',0,0,0,30))//Credit to GhostHack (www.ghosthack.de) for sound. + src << sound('sound/effects/electheart.ogg',0,0,0,30)//Credit to GhostHack (www.ghosthack.de) for sound. else heartbeat++ @@ -1156,9 +1156,9 @@ if(heartbeat >= rate) heartbeat = 0 if(H.status & ORGAN_ASSISTED) - to_chat(src, sound('sound/effects/pacemakebeat.ogg',0,0,0,50)) + src << sound('sound/effects/pacemakebeat.ogg',0,0,0,50) else - to_chat(src, sound('sound/effects/singlebeat.ogg',0,0,0,50)) + src << sound('sound/effects/singlebeat.ogg',0,0,0,50) else heartbeat++ diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 922810e758d..d5a0125f052 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -66,7 +66,7 @@ item_color = "golem" has_sensor = 0 flags = ABSTRACT | NODROP - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/golem name = "adamantine shell" @@ -75,7 +75,8 @@ item_state = "golem" body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES - flags = ONESIZEFITSALL | ABSTRACT | NODROP | THICKMATERIAL + flags = ABSTRACT | NODROP | THICKMATERIAL + flags_size = ONESIZEFITSALL armor = list(melee = 55, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/shoes/golem diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 628ea630555..b1c53a86e7c 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -600,7 +600,7 @@ var/global/list/damage_icon_parts = list() var/image/standing = image("icon_state" = "[t_color]_s") if(FAT in mutations) - if(w_uniform.flags&ONESIZEFITSALL) + if(w_uniform.flags_size & ONESIZEFITSALL) standing.icon = 'icons/mob/uniform_fat.dmi' else to_chat(src, "\red You burst out of \the [w_uniform]!") @@ -623,7 +623,12 @@ var/global/list/damage_icon_parts = list() for(var/obj/item/clothing/accessory/A in w_uniform:accessories) var/tie_color = A.item_color if(!tie_color) tie_color = A.icon_state - standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]") + if(A.icon_override) + standing.overlays += image("icon" = A.icon_override, "icon_state" = "[A.icon_state]") + else if(A.sprite_sheets && A.sprite_sheets[species.name]) + standing.overlays += image("icon" = A.sprite_sheets[species.name], "icon_state" = "[A.icon_state]") + else + standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]") overlays_standing[UNIFORM_LAYER] = standing else @@ -889,7 +894,6 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1) - if(client && hud_used) var/obj/screen/inventory/inv = hud_used.inv_slots[slot_wear_suit] if(inv) @@ -907,7 +911,7 @@ var/global/list/damage_icon_parts = list() else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name]) standing = image("icon" = wear_suit.sprite_sheets[species.name], "icon_state" = "[wear_suit.icon_state]") else if(FAT in mutations) - if(wear_suit.flags&ONESIZEFITSALL) + if(wear_suit.flags_size & ONESIZEFITSALL) standing = image("icon" = 'icons/mob/suit_fat.dmi', "icon_state" = "[wear_suit.icon_state]") else to_chat(src, "\red You burst out of \the [wear_suit]!") @@ -1257,13 +1261,25 @@ var/global/list/damage_icon_parts = list() //Adds a collar overlay above the helmet layer if the suit has one // Suit needs an identically named sprite in icons/mob/collar.dmi +// For suits with species_fit and sprite_sheets, an identically named sprite needs to exist in a file like this icons/mob/species/[species_name_here]/collar.dmi. /mob/living/carbon/human/proc/update_collar(var/update_icons=1) var/icon/C = new('icons/mob/collar.dmi') var/image/standing = null if(wear_suit) - if(wear_suit.icon_state in C.IconStates()) - standing = image("icon" = C, "icon_state" = "[wear_suit.icon_state]") + if(wear_suit.icon_override) + var/icon_path = "[wear_suit.icon_override]" + icon_path = "[copytext(icon_path, 1, findtext(icon_path, "/suit.dmi"))]/collar.dmi" //If this file doesn't exist, the end result is that COLLAR_LAYER will be unchanged (empty) so there won't be an issue. + var/icon/icon_file = new(icon_path) + standing = image("icon" = icon_file, "icon_state" = "[wear_suit.icon_state]") + else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name]) + var/icon_path = "[wear_suit.sprite_sheets[species.name]]" + icon_path = "[copytext(icon_path, 1, findtext(icon_path, "/suit.dmi"))]/collar.dmi" //If this file doesn't exist, the end result is that COLLAR_LAYER will be unchanged (empty) so there won't be an issue. + var/icon/icon_file = new(icon_path) + standing = image("icon" = icon_file, "icon_state" = "[wear_suit.icon_state]") + else + if(wear_suit.icon_state in C.IconStates()) + standing = image("icon" = C, "icon_state" = "[wear_suit.icon_state]") overlays_standing[COLLAR_LAYER] = standing diff --git a/code/modules/mob/living/carbon/slime/emote.dm b/code/modules/mob/living/carbon/slime/emote.dm new file mode 100644 index 00000000000..8c290dc6094 --- /dev/null +++ b/code/modules/mob/living/carbon/slime/emote.dm @@ -0,0 +1,75 @@ +/mob/living/carbon/slime/emote(var/act, var/m_type=1, var/message = null) + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + //param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + + if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_' + act = copytext(act,1,length(act)) + + act = lowertext(act) + switch(act) //Alphabetical please + if ("me") + if(silent) + return + if (src.client) + if (client.prefs.muted & MUTE_IC) + to_chat(src, "\red You cannot send IC messages (muted).") + return + if (src.client.handle_spam_prevention(message,MUTE_IC)) + return + if (stat) + return + if(!(message)) + return + return custom_emote(m_type, message) + if("bounce") + message = "The [src.name] bounces in place." + m_type = 1 + + if ("custom") + return custom_emote(m_type, message) + + if("jiggle") + message = "The [src.name] jiggles!" + m_type = 1 + + if("light") + message = "The [src.name] lights up for a bit, then stops." + m_type = 1 + + if("moan") + message = "The [src.name] moans." + m_type = 2 + + if("shiver") + message = "The [src.name] shivers." + m_type = 2 + + if("sway") + message = "The [src.name] sways around dizzily." + m_type = 1 + + if("twitch") + message = "The [src.name] twitches." + m_type = 1 + + if("vibrate") + message = "The [src.name] vibrates!" + m_type = 1 + + if ("help") //This is an exception + to_chat(src, "Help for slime emotes. You can use these emotes with say \"*emote\":\n\nbounce, custom, jiggle, light, moan, shiver, sway, twitch, vibrate") + + else + to_chat(src, "\blue Unusable emote '[act]'. Say *help for a list.") + if ((message && src.stat == 0)) + if (m_type & 1) + for(var/mob/O in viewers(src, null)) + O.show_message(message, m_type) + //Foreach goto(703) + else + for(var/mob/O in hearers(src, null)) + O.show_message(message, m_type) + //Foreach goto(746) + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/slime/examine.dm b/code/modules/mob/living/carbon/slime/examine.dm index 7d2e2d5e62c..7deaa397cc4 100644 --- a/code/modules/mob/living/carbon/slime/examine.dm +++ b/code/modules/mob/living/carbon/slime/examine.dm @@ -1,6 +1,7 @@ /mob/living/carbon/slime/examine(mob/user) + to_chat(user, "*---------*") ..(user) - var/msg = "" + var/msg = "" if (src.stat == DEAD) msg += "It is limp and unresponsive.\n" else diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index 1ad57bd787d..ab12c584259 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -191,14 +191,14 @@ if(isloyal(target)) to_chat(usr, "They are enslaved by Nanotrasen. You feel their interest in your cause wane and disappear.") usr.visible_message("[usr] stops talking for a moment, then moves back away from [target].") - to_chat(target, "Your loyalty implant activates and a sharp pain reminds you of your loyalties to Nanotrasen.") + to_chat(target, "Your mindshield implant activates, protecting you from conversion.") return if(3) to_chat(usr, "You begin filling out the application form with [target].") usr.visible_message("[usr] pulls out a pen and paper and begins filling an application form with [target].") to_chat(target, "You are being convinced by [usr] to fill out an application form to become a henchman.")//Ow the edge - if(!do_mob(usr, target, 100)) //around 30 seconds total for enthralling, 45 for someone with a loyalty implant + if(!do_mob(usr, target, 100)) //around 30 seconds total for enthralling, 45 for someone with a mindshield implant to_chat(usr, "The enrollment process has been interrupted - you have lost the attention of [target].") to_chat(target, "You move away and are no longer under the charm of [usr]. The application form is null and void.") recruiting = 0 diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 85eea65bbab..86214e52136 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -28,7 +28,8 @@ var/list/department_radio_keys = list( ":T" = "Syndicate", "#T" = "Syndicate", ".T" = "Syndicate", ":U" = "Supply", "#U" = "Supply", ".U" = "Supply", ":Z" = "Service", "#Z" = "Service", ".Z" = "Service", - ":P" = "AI Private", "#P" = "AI Private", ".P" = "AI Private" + ":P" = "AI Private", "#P" = "AI Private", ".P" = "AI Private", + ":-" = "Special Ops", "#-" = "Special Ops", ".-" = "Special Ops" ) @@ -296,6 +297,34 @@ proc/get_radio_key_from_channel(var/channel) /mob/living/proc/GetVoice() return name +/mob/living/emote(var/act, var/type, var/message) //emote code is terrible, this is so that anything that isn't + if(stat) return 0 //already snowflaked to shit can call the parent and handle emoting sanely + + if(..(act, type, message)) + return 1 + + if(act && type && message) //parent call + log_emote("[name]/[key] : [message]") + + for(var/mob/M in dead_mob_list) + if(!M.client || istype(M, /mob/new_player)) + continue //skip monkeys, leavers and new players //who the hell knows why new players are in the dead mob list + + if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + M.show_message(message) + + switch(type) + if(1) //Visible + visible_message(message) + return 1 + if(2) //Audible + audible_message(message) + return 1 + + else //everything else failed, emote is probably invalid + if(act == "help") return //except help, because help is handled individually + to_chat(src, "\blue Unusable emote '[act]'. Say *help for a list.") + /mob/living/whisper(message as text) message = trim_strip_html_properly(message) diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index d65e6e0d7d8..09457786e0d 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -1,8 +1,10 @@ /mob/living/silicon/ai/examine(mob/user) + to_chat(user, "*---------*") if(!..(user)) + to_chat(user, "*---------*") return - var/msg = "" + var/msg = "" if (src.stat == DEAD) msg += "It appears to be powered-down.\n" else diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index d5315deaefb..d50cb217cdb 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -83,9 +83,9 @@ var/const/VOX_PATH = "sound/vox_fem/" if(M.client) var/turf/T = get_turf(M) if(T && T.z == z_level && !isdeaf(M)) - to_chat(M, voice) + M << voice else - to_chat(only_listener, voice) + only_listener << voice return 1 return 0 diff --git a/code/modules/mob/living/silicon/emote.dm b/code/modules/mob/living/silicon/emote.dm new file mode 100644 index 00000000000..233df91eb55 --- /dev/null +++ b/code/modules/mob/living/silicon/emote.dm @@ -0,0 +1,127 @@ +/mob/living/silicon/emote(var/act, var/m_type=1, var/message = null) + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + + //Emote Cooldown System (it's so simple!) + // proc/handle_emote_CD() located in [code\modules\mob\emote.dm] + var/on_CD = 0 + act = lowertext(act) + switch(act) + //Cooldown-inducing emotes + if("scream", "screams") + on_CD = handle_emote_CD(50) //longer cooldown + if("ping","pings","buzz","buzzs","buzzes","beep","beeps","yes","no", "buzz2") + //halt is exempt because it's used to stop criminal scum //WHOEVER THOUGHT THAT WAS A GOOD IDEA IS GOING TO GET SHOT. + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm + //Everything else, including typos of the above emotes + else + on_CD = 0 //If it doesn't induce the cooldown, we won't check for the cooldown + + if(on_CD == 1) // Check if we need to suppress the emote attempt. + return // Suppress emote, you're still cooling off. + //--FalseIncarnate + + switch(act) + if("ping","pings") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] pings at [param]." + else + message = "[src] pings." + playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) + m_type = 2 + + if("buzz","buzzs","buzzes") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] buzzes at [param]." + else + message = "[src] buzzes." + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + m_type = 2 + + if("beep","beeps") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] beeps at [param]." + else + message = "[src] beeps." + playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) + m_type = 2 + + if("yes") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] emits an affirmative blip at [param]." + else + message = "[src] emits an affirmative blip." + playsound(src.loc, 'sound/machines/synth_yes.ogg', 50, 0) + m_type = 2 + + if("no") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] emits a negative blip at [param]." + else + message = "[src] emits a negative blip." + playsound(src.loc, 'sound/machines/synth_no.ogg', 50, 0) + m_type = 2 + + if("scream", "screams") + message = "[src] screams!" + playsound(src.loc, 'sound/goonstation/voice/robot_scream.ogg', 80, 0) + m_type = 2 + + if("buzz2") + message = "[src] emits an irritated buzzing sound." + playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) + m_type = 2 + + + if("help") + to_chat(src, "yes, no, beep, ping, buzz, scream, buzz2") + + ..(act, m_type, message) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/emote.dm b/code/modules/mob/living/silicon/pai/emote.dm new file mode 100644 index 00000000000..a418c0972d5 --- /dev/null +++ b/code/modules/mob/living/silicon/pai/emote.dm @@ -0,0 +1,2 @@ +/mob/living/silicon/pai/emote(var/act, var/m_type=1, var/message = null) + ..(act, m_type, message) diff --git a/code/modules/mob/living/silicon/pai/examine.dm b/code/modules/mob/living/silicon/pai/examine.dm deleted file mode 100644 index 814efb1899b..00000000000 --- a/code/modules/mob/living/silicon/pai/examine.dm +++ /dev/null @@ -1,25 +0,0 @@ -/mob/living/silicon/pai/examine(mob/user) //removed as it was pointless...moved to the pai-card instead. - /*..(user) //This is totally pointless because this mob is contained inside a card! - - var/msg = "" - if (src.stat == DEAD) - msg += "It appears to be offline.\n" - else - msg += "" - if (src.getBruteLoss()) - if (src.getBruteLoss() < 30) - msg += "It looks slightly dented.\n" - else - msg += "Its casing appears cracked and broken!\n" - if (src.getFireLoss()) - if (src.getFireLoss() < 30) - msg += "It looks slightly charred!\n" - else - msg += "Its casing is melted and heat-warped!\n" - if (src.stat == UNCONSCIOUS) - msg += "It doesn't seem to be responding and its text-output is lagging.\n" - msg += "" - msg += "*---------*" - - to_chat(user, msg) - */ \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 635efadcaba..23fb68e3854 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -521,23 +521,24 @@ density = 0 //this is reset every canmove update otherwise /mob/living/silicon/pai/examine(mob/user) + to_chat(user, "*---------*") ..(user) - var/msg = "" + var/msg = "" switch(src.stat) if(CONSCIOUS) if(!src.client) msg += "\nIt appears to be in stand-by mode." //afk if(UNCONSCIOUS) msg += "\nIt doesn't seem to be responding." if(DEAD) msg += "\nIt looks completely unsalvageable." - msg += "\n*---------*" - if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" + if(print_flavor_text()) msg += "\n[print_flavor_text()]" if (pose) if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 ) pose = addtext(pose,".") //Makes sure all emotes end with a period. msg += "\nIt is [pose]" + msg += "\n*---------*" to_chat(user, msg) diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 949c946a6c8..379b40d2919 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -231,7 +231,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates M << browse(dat, "window=paiRecruit;size=580x580;") proc/findPAI(var/obj/item/device/paicard/p, var/mob/user) - requestRecruits(p) + requestRecruits(p, user) var/list/available = list() for(var/datum/paiCandidate/c in paiController.pai_candidates) if(c.ready) @@ -346,13 +346,14 @@ var/datum/paiController/paiController // Global handler for pAI candidates user << browse(dat, "window=findPai") - proc/requestRecruits(var/obj/item/device/paicard/P) + proc/requestRecruits(var/obj/item/device/paicard/P, mob/user) for(var/mob/dead/observer/O in player_list) if(O.client && (ROLE_PAI in O.client.prefs.be_special)) if(player_old_enough_antag(O.client,ROLE_PAI)) if(check_recruit(O)) - to_chat(O, "\blue A pAI card is looking for personalities. (Teleport | Sign Up)") + to_chat(O, "\blue A pAI card activated by [user.real_name] is looking for personalities. (Teleport | Sign Up)") //question(O.client) + proc/check_recruit(var/mob/dead/observer/O) if(jobban_isbanned(O, ROLE_PAI) || jobban_isbanned(O,"nonhumandept")) return 0 diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm new file mode 100644 index 00000000000..9b014da6604 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -0,0 +1,163 @@ +/mob/living/silicon/robot/emote(var/act, var/m_type=1, var/message = null) + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + + //Emote Cooldown System (it's so simple!) + // proc/handle_emote_CD() located in [code\modules\mob\emote.dm] + var/on_CD = 0 + act = lowertext(act) + switch(act) + //Cooldown-inducing emotes + if("law","flip","flips","halt") //halt is exempt because it's used to stop criminal scum //WHOEVER THOUGHT THAT WAS A GOOD IDEA IS GOING TO GET SHOT. + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm + //Everything else, including typos of the above emotes + else + on_CD = 0 //If it doesn't induce the cooldown, we won't check for the cooldown + + if(on_CD == 1) // Check if we need to suppress the emote attempt. + return // Suppress emote, you're still cooling off. + //--FalseIncarnate + + switch(act) + + if ("salute","salutes") + if (!src.buckled) + var/M = null + if (param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if (!M) + param = null + + if (param) + message = "[src] salutes to [param]." + else + message = "[src] salutes." + m_type = 1 + if ("bow","bows") + if (!src.buckled) + var/M = null + if (param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if (!M) + param = null + + if (param) + message = "[src] bows to [param]." + else + message = "[src] bows." + m_type = 1 + + if ("clap","claps") + if (!src.restrained()) + message = "[src] claps." + m_type = 2 + if ("flap","flaps") + if (!src.restrained()) + message = "[src] flaps its wings." + m_type = 2 + + if ("aflap","aflaps") + if (!src.restrained()) + message = "[src] flaps its wings ANGRILY!" + m_type = 2 + + if ("twitch") + message = "[src] twitches violently." + m_type = 1 + + if ("twitch_s","twitches") + message = "[src] twitches." + m_type = 1 + + if ("nod","nods") + message = "[src] nods." + m_type = 1 + + if ("deathgasp") + message = "[src] shudders violently for a moment, then becomes motionless, its eyes slowly darkening." + m_type = 1 + + if ("glare","glares") + var/M = null + if (param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if (!M) + param = null + + if (param) + message = "[src] glares at [param]." + else + message = "[src] glares." + + if ("stare","stares") + var/M = null + if (param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if (!M) + param = null + + if (param) + message = "[src] stares at [param]." + else + message = "[src] stares." + + if ("look","looks") + var/M = null + if (param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + + if (!M) + param = null + + if (param) + message = "[src] looks at [param]." + else + message = "[src] looks." + m_type = 1 + + + if("law") + if (istype(module,/obj/item/weapon/robot_module/security)) + message = "[src] shows its legal authorization barcode." + + playsound(src.loc, 'sound/voice/biamthelaw.ogg', 50, 0) + m_type = 2 + else + to_chat(src, "You are not THE LAW, pal.") + + if("halt") + if (istype(module,/obj/item/weapon/robot_module/security)) + message = "[src]'s speakers skreech, \"Halt! Security!\"." + + playsound(src.loc, 'sound/voice/halt.ogg', 50, 0) + m_type = 2 + else + to_chat(src, "You are not security.") + + if ("flip","flips") + m_type = 1 + message = "[src] does a flip!" + src.SpinAnimation(5,1) + + if ("help") + to_chat(src, "salute, bow-(none)/mob, clap, flap, aflap, twitch, twitches, nod, deathgasp, glare-(none)/mob, stare-(none)/mob, look,\n law, halt") + + ..(act, m_type, message) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index 546bdd2eb6c..47eabe40ffb 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -1,7 +1,8 @@ /mob/living/silicon/robot/examine(mob/user) + to_chat(user, "*---------*") ..(user) - var/msg = "" + var/msg = "" var/obj/act_module = get_active_hand() if(act_module) msg += "It is holding [bicon(act_module)] \a [act_module].\n" diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm index 54bc69b7020..70d6cf86bb9 100644 --- a/code/modules/mob/living/silicon/robot/robot_damage.dm +++ b/code/modules/mob/living/silicon/robot/robot_damage.dm @@ -9,7 +9,7 @@ var/mob/dead/observer/ghost = get_ghost() if(ghost) to_chat(ghost, "Your cyborg shell has been repaired, re-enter if you want to continue! (Verbs -> Ghost -> Re-enter corpse)") - to_chat(ghost, sound('sound/effects/genetics.ogg')) + ghost << sound('sound/effects/genetics.ogg') return diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 7fb1ba0a8aa..9944bf39b72 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -230,7 +230,7 @@ src.modules += new /obj/item/device/flash/cyborg(src) src.modules += new /obj/item/weapon/soap/nanotrasen(src) src.modules += new /obj/item/weapon/storage/bag/trash/cyborg(src) - src.modules += new /obj/item/weapon/mop(src) + src.modules += new /obj/item/weapon/mop/advanced/cyborg(src) src.modules += new /obj/item/device/lightreplacer(src) src.modules += new /obj/item/weapon/holosign_creator(src) src.emag = new /obj/item/weapon/reagent_containers/spray(src) diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 94ae02a56ce..a546e164901 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -128,6 +128,13 @@ return return 1 +/mob/living/silicon/ai/emote(var/act, var/type, var/message) + var/obj/machinery/hologram/holopad/T = src.holo + if(T && T.hologram && T.master == src) //Is the AI using a holopad? + src.holopad_emote(message) + else //Emote normally, then. + ..() + #undef IS_AI #undef IS_ROBOT #undef IS_PAI diff --git a/code/modules/mob/living/simple_animal/bot/emote.dm b/code/modules/mob/living/simple_animal/bot/emote.dm new file mode 100644 index 00000000000..0c8b591f069 --- /dev/null +++ b/code/modules/mob/living/simple_animal/bot/emote.dm @@ -0,0 +1,120 @@ +/mob/living/simple_animal/bot/emote(var/act, var/m_type=1, var/message = null) + var/param = null + if (findtext(act, "-", 1, null)) + var/t1 = findtext(act, "-", 1, null) + param = copytext(act, t1 + 1, length(act) + 1) + act = copytext(act, 1, t1) + + if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_' + act = copytext(act,1,length(act)) + + //Emote Cooldown System (it's so simple!) + // proc/handle_emote_CD() located in [code\modules\mob\emote.dm] + var/on_CD = 0 + act = lowertext(act) + switch(act) + //Cooldown-inducing emotes + if("scream", "screams") + on_CD = handle_emote_CD(50) //longer cooldown + if("ping","buzz","beep","yes","no") //halt is exempt because it's used to stop criminal scum //WHOEVER THOUGHT THAT WAS A GOOD IDEA IS GOING TO GET SHOT. + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm + //Everything else, including typos of the above emotes + else + on_CD = 0 //If it doesn't induce the cooldown, we won't check for the cooldown + + if(on_CD == 1) // Check if we need to suppress the emote attempt. + return // Suppress emote, you're still cooling off. + //--FalseIncarnate + + switch(act) + if("ping") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] pings at [param]." + else + message = "[src] pings." + playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) + m_type = 2 + + if("buzz") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] buzzes at [param]." + else + message = "[src] buzzes." + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + m_type = 2 + + if("beep") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] beeps at [param]." + else + message = "[src] beeps." + playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) + m_type = 2 + + if("yes") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] emits an affirmative blip at [param]." + else + message = "[src] emits an affirmative blip." + playsound(src.loc, 'sound/machines/synth_yes.ogg', 50, 0) + m_type = 2 + + if("no") + var/M = null + if(param) + for (var/mob/A in view(null, null)) + if (param == A.name) + M = A + break + if(!M) + param = null + + if (param) + message = "[src] emits a negative blip at [param]." + else + message = "[src] emits a negative blip." + playsound(src.loc, 'sound/machines/synth_no.ogg', 50, 0) + m_type = 2 + + if("scream", "screams") + message = "[src] screams!" + playsound(src.loc, 'sound/goonstation/voice/robot_scream.ogg', 80, 0) + m_type = 2 + + ..(act, m_type, message) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index c894b014a87..2a82a6728b0 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -40,9 +40,10 @@ return /mob/living/simple_animal/construct/examine(mob/user) + to_chat(user, "*---------*") ..(user) - var/msg = "" + var/msg = "" if (src.health < src.maxHealth) msg += "" if (src.health >= src.maxHealth/2) diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index e8ba27fa07d..0f685c2d69c 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -26,10 +26,12 @@ var/obj/item/inventory_head var/obj/item/inventory_back var/facehugger + var/default_atmos_requirements = 0 gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY /mob/living/simple_animal/pet/corgi/New() ..() + default_atmos_requirements = src.atmos_requirements regenerate_icons() /mob/living/simple_animal/pet/corgi/Life() @@ -118,6 +120,9 @@ emote_see = list("shakes its head", "shivers") desc = "It's a corgi." set_light(0) + flags &= ~NO_BREATHE + atmos_requirements = default_atmos_requirements + minbodytemp = initial(minbodytemp) inventory_head.loc = src.loc inventory_head = null regenerate_icons() @@ -353,6 +358,9 @@ name = "Space Explorer [real_name]" desc = "That's one small step for a corgi. One giant yap for corgikind." valid = 1 + flags |= NO_BREATHE + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 if(/obj/item/clothing/mask/fakemoustache) name = "Definitely Not [real_name]" diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index 125061f9275..c62243a23f4 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -249,3 +249,26 @@ /mob/living/simple_animal/diona/put_in_active_hand(obj/item/W) to_chat(src, "You don't have any hands!") return + +/mob/living/simple_animal/diona/emote(var/act, var/m_type=1, var/message = null) + if(stat) + return + + var/on_CD = 0 + act = lowertext(act) + switch(act) + if("chirp") + on_CD = handle_emote_CD() + else + on_CD = 0 + + if(on_CD == 1) + return + + switch(act) //IMPORTANT: Emotes MUST NOT CONFLICT anywhere along the chain. + if("chirp") + message = "\The [src] chirps!" + m_type = 2 //audible + playsound(src, 'sound/misc/nymphchirp.ogg', 40, 1, 1) + + ..(act, m_type, message) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 346a04e7851..06fb36b5787 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -194,7 +194,9 @@ if(.) amount_grown += rand(1,2) if(amount_grown >= 100) - new /mob/living/simple_animal/chicken(src.loc) + var/mob/living/simple_animal/chicken/C = new /mob/living/simple_animal/chicken(loc) + if(mind) + mind.transfer_to(C) qdel(src) var/const/MAX_CHICKENS = 50 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 6d2efd88010..287c3aaa69d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -456,8 +456,8 @@ if(istype(target, /obj/item/clothing/suit/space/rig/mining) || istype(target, /obj/item/clothing/head/helmet/space/rig/mining) || istype(target, /obj/item/clothing/suit/space/eva/plasmaman/miner) || istype(target, /obj/item/clothing/head/helmet/space/eva/plasmaman/miner)) var/obj/item/clothing/C = target var/current_armor = C.armor - if(current_armor.["melee"] < 80) - current_armor.["melee"] = min(current_armor.["melee"] + 10, 80) + if(current_armor.["melee"] < 60) + current_armor.["melee"] = min(current_armor.["melee"] + 10, 60) to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") qdel(src) else diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 6e528516e3e..983faec63d6 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -165,18 +165,18 @@ ears = null update_speak() else - to_chat(usr, "\red There is nothing to remove from its [remove_from].") + to_chat(usr, "There is nothing to remove from its [remove_from].") return show_inv(usr) else if(href_list["add_inv"]) var/add_to = href_list["add_inv"] if(!usr.get_active_hand()) - to_chat(usr, "\red You have nothing in your hand to put on its [add_to].") + to_chat(usr, "You have nothing in your hand to put on its [add_to].") return switch(add_to) if("ears") if(ears) - to_chat(usr, "\red It's already wearing something.") + to_chat(usr, "It's already wearing something.") return else var/obj/item/item_to_add = usr.get_active_hand() @@ -184,7 +184,7 @@ return if( !istype(item_to_add, /obj/item/device/radio/headset) ) - to_chat(usr, "\red This object won't fit.") + to_chat(usr, "This object won't fit.") return var/obj/item/device/radio/headset/headset_to_add = item_to_add @@ -566,7 +566,7 @@ return -1 if(held_item) - to_chat(src, "\red You are already holding the [held_item]") + to_chat(src, "You are already holding the [held_item]") return 1 for(var/obj/item/I in view(1,src)) @@ -579,10 +579,10 @@ held_item = I I.loc = src - visible_message("[src] grabs the [held_item]!", "\blue You grab the [held_item]!", "You hear the sounds of wings flapping furiously.") + visible_message("[src] grabs the [held_item]!", "You grab the [held_item]!", "You hear the sounds of wings flapping furiously.") return held_item - to_chat(src, "\red There is nothing of interest to take.") + to_chat(src, "There is nothing of interest to take.") return 0 /mob/living/simple_animal/parrot/proc/steal_from_mob() @@ -594,7 +594,7 @@ return -1 if(held_item) - to_chat(src, "\red You are already holding the [held_item]") + to_chat(src, "You are already holding the [held_item]") return 1 var/obj/item/stolen_item = null @@ -610,10 +610,10 @@ C.unEquip(stolen_item) held_item = stolen_item stolen_item.loc = src - visible_message("[src] grabs the [held_item] out of [C]'s hand!", "\blue You snag the [held_item] out of [C]'s hand!", "You hear the sounds of wings flapping furiously.") + visible_message("[src] grabs the [held_item] out of [C]'s hand!", "You snag the [held_item] out of [C]'s hand!", "You hear the sounds of wings flapping furiously.") return held_item - to_chat(src, "\red There is nothing of interest to take.") + to_chat(src, "There is nothing of interest to take.") return 0 /mob/living/simple_animal/parrot/verb/drop_held_item_player() @@ -637,7 +637,7 @@ return -1 if(!held_item) - to_chat(usr, "\red You have nothing to drop!") + to_chat(src, "You have nothing to drop!") return 0 if(!drop_gently) @@ -670,7 +670,7 @@ src.loc = AM.loc icon_state = "parrot_sit" return - to_chat(src, "\red There is no perch nearby to sit on.") + to_chat(src, "There is no perch nearby to sit on.") return /* diff --git a/code/modules/mob/living/simple_animal/posessed_object.dm b/code/modules/mob/living/simple_animal/posessed_object.dm index 0029bbec7fd..f4cbf3055af 100644 --- a/code/modules/mob/living/simple_animal/posessed_object.dm +++ b/code/modules/mob/living/simple_animal/posessed_object.dm @@ -19,8 +19,8 @@ var/obj/item/possessed_item -/mob/living/simple_animal/possessed_object/examine() - possessed_item.examine() +/mob/living/simple_animal/possessed_object/examine(mob/user) + possessed_item.examine(user) if(health > (maxHealth / 30)) to_chat(usr, "[src] appears to be floating without any support!") else diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 9eee62d810a..93e72a96707 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -446,7 +446,6 @@ else visible_message("[O] bounces harmlessly off of [src].",\ "[O] bounces harmlessly off of [src].") - playsound(loc, O.hitsound, 50, 1, -1) else user.visible_message("[user] gently taps [src] with [O].",\ "This weapon is ineffective, it does no damage.") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index f41cef386aa..ab5a5840a27 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -23,7 +23,6 @@ else living_mob_list += src prepare_huds() - emoteHandler = new /datum/emoteHandler(src) ..() /atom/proc/prepare_huds() @@ -248,6 +247,7 @@ return // Bag could not be placed in players hands. I don't know what to do here... //Now, B represents a container we can insert W into. B.handle_item_insertion(W,1) + return B //The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot. var/list/slot_equipment_priority = list( \ @@ -402,7 +402,7 @@ var/list/slot_equipment_priority = list( \ if(slot_w_uniform) if( !(slot_flags & SLOT_ICLOTHING) ) return 0 - if((FAT in H.mutations) && !(flags & ONESIZEFITSALL)) + if((FAT in H.mutations) && !(flags_size & ONESIZEFITSALL)) return 0 if(H.w_uniform) if(!(H.w_uniform.flags & NODROP)) @@ -1328,11 +1328,11 @@ mob/proc/yank_out_object() /mob/proc/get_ghost(even_if_they_cant_reenter = 0) if(mind) - for(var/mob/dead/observer/G in dead_mob_list) - if(G.mind == mind) - if(G.can_reenter_corpse || even_if_they_cant_reenter) - return G - break + return mind.get_ghost(even_if_they_cant_reenter) + +/mob/proc/grab_ghost(force) + if(mind) + return mind.grab_ghost(force = force) /mob/proc/notify_ghost_cloning(var/message = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!", var/sound = 'sound/effects/genetics.ogg', var/atom/source = null) var/mob/dead/observer/ghost = get_ghost() diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 13d5d7c976e..a8e7cd147f6 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -233,6 +233,4 @@ var/datum/vision_override/vision_type = null //Vision override datum. - var/list/permanent_huds = list() - - var/datum/emoteHandler/emoteHandler \ No newline at end of file + var/list/permanent_huds = list() \ No newline at end of file diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 6e0645866d5..35318d6ef65 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -22,7 +22,7 @@ return 0 return 1 -/proc/isloyal(A) //Checks to see if the person contains a loyalty implant, then checks that the implant is actually inside of them +/proc/isloyal(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them for(var/obj/item/weapon/implant/loyalty/L in A) if(L && L.implanted) return 1 diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index f752b1f4409..528527c15ba 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -90,12 +90,12 @@ if(ticker.current_state == GAME_STATE_PREGAME) stat("Players:", "[totalPlayers]") - if(client.holder) + if(check_rights(R_ADMIN, 0, src)) stat("Players Ready:", "[totalPlayersReady]") totalPlayers = 0 totalPlayersReady = 0 for(var/mob/new_player/player in player_list) - if(client.holder) + if(check_rights(R_ADMIN, 0, src)) stat("[player.key]", (player.ready)?("(Playing)"):(null)) totalPlayers++ if(player.ready) @@ -123,7 +123,7 @@ var/mob/dead/observer/observer = new() src << browse(null, "window=playersetup") spawning = 1 - to_chat(src, sound(null, repeat = 0, wait = 0, volume = 85, channel = 1))// MAD JAMS cant last forever yo + src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)// MAD JAMS cant last forever yo observer.started_as_observer = 1 @@ -245,6 +245,8 @@ if(jobban_isbanned(src,rank)) return 0 if(!is_job_whitelisted(src, rank)) return 0 if(!job.player_old_enough(src.client)) return 0 + if(job.admin_only && !(check_rights(R_ADMIN, 0))) return 0 + if(config.assistantlimit) if(job.title == "Civilian") var/count = 0 @@ -258,6 +260,19 @@ return 0 return 1 +/mob/new_player/proc/IsAdminJob(rank) + var/datum/job/job = job_master.GetJob(rank) + if(job.admin_only) + return 1 + else + return 0 + +/mob/new_player/proc/IsERTSpawnJob(rank) + var/datum/job/job = job_master.GetJob(rank) + if(job.spawn_ert) + return 1 + else + return 0 /mob/new_player/proc/AttemptLateSpawn(rank,var/spawning_at) if (src != usr) @@ -300,20 +315,26 @@ var/join_message var/datum/spawnpoint/S - if(spawning_at) - S = spawntypes[spawning_at] - - if(S && istype(S)) - if(S.check_job_spawning(rank)) - character.loc = pick(S.turfs) - join_message = S.msg + if(IsAdminJob(rank)) + if(IsERTSpawnJob(rank)) + character.loc = pick(ertdirector) + else + character.loc = pick(aroomwarp) + join_message = "has arrived" + else + if(spawning_at) + S = spawntypes[spawning_at] + if(S && istype(S)) + if(S.check_job_spawning(rank)) + character.loc = pick(S.turfs) + join_message = S.msg + else + to_chat(character, "Your chosen spawnpoint ([S.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead.") + character.loc = pick(latejoin) + join_message = "has arrived on the station" else - to_chat(character, "Your chosen spawnpoint ([S.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead.") character.loc = pick(latejoin) join_message = "has arrived on the station" - else - character.loc = pick(latejoin) - join_message = "has arrived on the station" character.lastarea = get_area(loc) // Moving wheelchair if they have one @@ -323,14 +344,18 @@ ticker.mode.latespawn(character) - if(character.mind.assigned_role != "Cyborg") + if(character.mind.assigned_role == "Cyborg") + AnnounceCyborg(character, rank, join_message) + callHook("latespawn", list(character)) + else if(IsAdminJob(rank)) + callHook("latespawn", list(character)) + else data_core.manifest_inject(character) ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn AnnounceArrival(character, rank, join_message) callHook("latespawn", list(character)) - else - AnnounceCyborg(character, rank, join_message) - callHook("latespawn", list(character)) + + qdel(src) @@ -390,21 +415,64 @@ else if(shuttle_master.emergency.mode >= SHUTTLE_CALL) dat += "The station is currently undergoing evacuation procedures.
      " - dat += "Choose from the following open positions:
      " + dat += "Choose from the following open positions:

      " + + var/list/activePlayers = list() + var/list/categorizedJobs = list( + "Command" = list(jobs = list(), titles = command_positions, color = "#aac1ee"), + "Engineering" = list(jobs = list(), titles = engineering_positions, color = "#ffd699"), + "Security" = list(jobs = list(), titles = security_positions, color = "#ff9999"), + "Miscellaneous" = list(jobs = list(), titles = list(), color = "#ffffff", colBreak = 1), + "Synthetic" = list(jobs = list(), titles = nonhuman_positions, color = "#ccffcc"), + "Support / Service" = list(jobs = list(), titles = service_positions, color = "#cccccc"), + "Medical" = list(jobs = list(), titles = medical_positions, color = "#99ffe6", colBreak = 1), + "Science" = list(jobs = list(), titles = science_positions, color = "#e6b3e6"), + "Supply" = list(jobs = list(), titles = supply_positions, color = "#ead4ae"), + ) for(var/datum/job/job in job_master.occupations) if(job && IsJobAvailable(job.title)) - var/active = 0 + activePlayers[job] = 0 + var/categorized = 0 // Only players with the job assigned and AFK for less than 10 minutes count as active - for(var/mob/M in player_list) if(M.mind && M.client && M.mind.assigned_role == job.title && M.client.inactivity <= 10 * 60 * 10) - active++ - dat += "[job.title] ([job.current_positions]) (Active: [active])
      " + for(var/mob/M in player_list) if(M.mind && M.client && M.mind.assigned_role == job.title && M.client.inactivity <= 10 MINUTES) + activePlayers[job]++ + for(var/jobcat in categorizedJobs) + var/list/jobs = categorizedJobs[jobcat]["jobs"] + if(job.title in categorizedJobs[jobcat]["titles"]) + categorized = 1 + if(jobcat == "Command") // Put captain at top of command jobs + if(job.title == "Captain") + jobs.Insert(1, job) + else + jobs += job + else // Put heads at top of non-command jobs + if(job.title in command_positions) + jobs.Insert(1, job) + else + jobs += job + if(!categorized) + categorizedJobs["Miscellaneous"]["jobs"] += job - dat += "
      " + dat += "
      " + for(var/jobcat in categorizedJobs) + if(categorizedJobs[jobcat]["colBreak"]) + dat += "" + if(length(categorizedJobs[jobcat]["jobs"]) < 1) + continue + var/color = categorizedJobs[jobcat]["color"] + dat += "
      " + dat += "[jobcat]" + for(var/datum/job/job in categorizedJobs[jobcat]["jobs"]) + dat += "[job.title] ([job.current_positions]) (Active: [activePlayers[job]])
      " + dat += "

      " + + dat += "
      " // Removing the old window method but leaving it here for reference // src << browse(dat, "window=latechoices;size=300x640;can_close=1") // Added the new browser window method - var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 440, 500) + var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 900, 600) popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css') + popup.add_script("delay_interactivity", 'html/browser/delay_interactivity.js') popup.set_content(dat) popup.open(0) // 0 is passed to open so that it doesn't use the onclose() proc @@ -421,7 +489,7 @@ client.prefs.real_name = random_name(client.prefs.gender) client.prefs.copy_to(new_character) - to_chat(src, sound(null, repeat = 0, wait = 0, volume = 85, channel = 1))// MAD JAMS cant last forever yo + src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)// MAD JAMS cant last forever yo if(mind) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 493fade2ea1..50e203eb5fd 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -30,19 +30,15 @@ /mob/verb/me_verb(message as text) set name = "Me" - set category = "Emotes" - set desc = "(action) Enter a custom emote." + set category = "IC" - if(!message) - return + message = strip_html_properly(message) - message = trim_strip_html_properly(message) - - if(message == "") - return - - if(emoteHandler) - return emoteHandler.runEmote("me", message) + set_typing_indicator(0) + if(use_me) + custom_emote(usr.emote_type, message) + else + usr.emote(message) /mob/proc/say_dead(var/message) @@ -104,10 +100,8 @@ /mob/proc/emote(var/act, var/type, var/message) - - act = lowertext(act) - return emoteHandler.runEmote(act, message, type) - + if(act == "me") + return custom_emote(type, message) /mob/proc/get_ear() @@ -152,7 +146,4 @@ if (can_speak(L)) return L - return null - -/mob/proc/custom_emote(var/m_type=0, var/message = null) - return emoteHandler.runEmote("me", message, m_type) \ No newline at end of file + return null \ No newline at end of file diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index ea70bbe88ac..b04c00a6925 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -28,7 +28,7 @@ /mob/proc/AIize() if(client) - to_chat(src, sound(null, repeat = 0, wait = 0, volume = 85, channel = 1))// stop the jams for AIs + src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)// stop the jams for AIs var/mob/living/silicon/ai/O = new (loc,,,1)//No MMI but safety is in effect. O.invisibility = 0 diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index 5e6a1cbcb32..701c4e7080b 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -5,7 +5,7 @@ item_state = "energy_katana" force = 40 throwforce = 20 - armour_penetration = 15 + armour_penetration = 50 var/cooldown = 0 // Because spam aint cool, yo. var/datum/effect/system/spark_spread/spark_system diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index c2fb287b9a8..5cb67e73db6 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -5,7 +5,7 @@ icon_state = "s-ninja" permeability_coefficient = 0.01 flags = NOSLIP - armor = list(melee = 60, bullet = 60, laser = 45,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 60, bullet = 60, laser = 45, energy = 15, bomb = 30, bio = 30, rad = 30) cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT heat_protection = FEET diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 936f947758d..73ac456ebf9 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -15,7 +15,7 @@ Contents: allowed = list(/obj/item/weapon/gun, /obj/item/ammo_box, /obj/item/weapon/melee/baton, /obj/item/weapon/tank, /obj/item/weapon/stock_parts/cell) slowdown = 0 unacidable = 1 - armor = list(melee = 60, bullet = 60, laser = 45,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 60, bullet = 60, laser = 45, energy = 15, bomb = 30, bio = 30, rad = 30) var/suitActive = 0 var/suitBusy = 0 diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 11f864451b7..db7a054a693 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -577,7 +577,7 @@ /obj/item/weapon/paper/armory name = "paper- 'Armory Inventory'" - info = "4 Deployable Barriers
      4 Portable Flashers
      1 Mechanical Toolbox
      2 Boxes of Spare Handcuffs
      1 Box of Flashbangs
      1 Box of Spare R.O.B.U.S.T. Cartridges
      1 Tracking Implant Kit
      1 Chemical Implant Kit
      1 Box of Tear Gas Grenades
      1 Explosive Ordnance Disposal Suit
      1 Biohazard Suit
      6 Gas Masks
      1 Lockbox of Loyalty Implants
      1 Ion Rifle
      3 Sets of Riot Equipment
      2 Sets of Security Hardsuits
      1 Ablative Armor Vest
      3 Bulletproof Vests
      3 Helmets

      2 Riot Shotguns
      2 Boxes of Beanbag Shells
      3 Laser Guns
      3 Energy Guns
      3 Advanced Tasers" + info = "4 Deployable Barriers
      4 Portable Flashers
      1 Mechanical Toolbox
      2 Boxes of Spare Handcuffs
      1 Box of Flashbangs
      1 Box of Spare R.O.B.U.S.T. Cartridges
      1 Tracking Implant Kit
      1 Chemical Implant Kit
      1 Box of Tear Gas Grenades
      1 Explosive Ordnance Disposal Suit
      1 Biohazard Suit
      6 Gas Masks
      1 Lockbox of Mindshield Implants
      1 Ion Rifle
      3 Sets of Riot Equipment
      2 Sets of Security Hardsuits
      1 Ablative Armor Vest
      3 Bulletproof Vests
      3 Helmets

      2 Riot Shotguns
      2 Boxes of Beanbag Shells
      3 Laser Guns
      3 Energy Guns
      3 Advanced Tasers" /obj/item/weapon/paper/firingrange name = "paper- 'Firing Range Instructions'" diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index b63dcc2750c..49b5bf0a05b 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -545,4 +545,4 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') - to_chat(user, pick(creepyasssounds)) + user << pick(creepyasssounds) diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 9dfa9c13993..eb54497b69e 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -25,7 +25,7 @@ /obj/singularity/narsie/large/New() ..() to_chat(world, "NAR-SIE HAS RISEN") - to_chat(world, pick(sound('sound/hallucinations/im_here1.ogg'), sound('sound/hallucinations/im_here2.ogg'))) + world << pick(sound('sound/hallucinations/im_here1.ogg'), sound('sound/hallucinations/im_here2.ogg')) var/area/A = get_area(src) if(A) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 3c4766fd58b..74e0b3af14e 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -279,13 +279,13 @@ desc = "A projector that emits high density quantum-coupled bluespace beams." ammo_type = list(/obj/item/ammo_casing/energy/wormhole, /obj/item/ammo_casing/energy/wormhole/orange) item_state = null - icon_state = "wormhole_projector100" + icon_state = "wormhole_projector1" var/obj/effect/portal/blue var/obj/effect/portal/orange /obj/item/weapon/gun/energy/wormhole_projector/update_icon() - icon_state = "[initial(icon_state)][select]" + icon_state = "wormhole_projector[select]" item_state = icon_state return @@ -306,6 +306,8 @@ /obj/item/weapon/gun/energy/wormhole_projector/proc/create_portal(obj/item/projectile/beam/wormhole/W) var/obj/effect/portal/P = new /obj/effect/portal(get_turf(W), null, src) P.precision = 0 + P.failchance = 0 + P.can_multitool_to_remove = 1 if(W.name == "bluespace beam") qdel(blue) blue = P diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 7544ecc7b50..a4eb76f99a4 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -44,7 +44,7 @@ /obj/item/weapon/gun/projectile/automatic/ui_action_click() burst_select() -/obj/item/weapon/gun/projectile/automatic/verb/burst_select() +/obj/item/weapon/gun/projectile/automatic/proc/burst_select() var/mob/living/carbon/human/user = usr select = !select if(!select) diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index 59bd7fb649b..1d9949173ad 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -1,4 +1,4 @@ -/obj/item/weapon/gun/projectile/sniper_rifle +/obj/item/weapon/gun/projectile/automatic/sniper_rifle name = "sniper rifle" desc = "the kind of gun that will leave you crying for mummy before you even realise your leg's missing" icon_state = "sniper" @@ -7,6 +7,7 @@ weapon_weight = WEAPON_MEDIUM mag_type = /obj/item/ammo_box/magazine/sniper_rounds fire_delay = 40 + burst_size = 1 origin_tech = "combat=8" can_unsuppress = 1 can_suppress = 1 @@ -14,14 +15,15 @@ zoomable = TRUE zoom_amt = 7 //Long range, enough to see in front of you, but no tiles behind you. slot_flags = SLOT_BACK + action_button_name = null -/obj/item/weapon/gun/projectile/sniper_rifle/update_icon() +/obj/item/weapon/gun/projectile/automatic/sniper_rifle/update_icon() if(magazine) icon_state = "sniper-mag" else icon_state = "sniper" -/obj/item/weapon/gun/projectile/sniper_rifle/syndicate +/obj/item/weapon/gun/projectile/automatic/sniper_rifle/syndicate name = "syndicate sniper rifle" desc = "Syndicate flavoured sniper rifle, it packs quite a punch, a punch to your face" origin_tech = "combat=8;syndicate=4" diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 68bcd9306d3..b0200b22ab2 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -625,13 +625,17 @@ if(!name) return name = reject_bad_text(name) - while (count--) + var/is_medical_patch = chemical_safety_check(reagents) + while(count--) var/obj/item/weapon/reagent_containers/food/pill/patch/P = new/obj/item/weapon/reagent_containers/food/pill/patch(src.loc) if(!name) name = reagents.get_master_reagent_name() P.name = "[name] patch" P.pixel_x = rand(-7, 7) //random position P.pixel_y = rand(-7, 7) reagents.trans_to(P,amount_per_patch) + if(is_medical_patch) + P.instant_application = 1 + P.icon_state = "bandaid_med" else if (href_list["createbottle"]) if(!condi) var/name = input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()) as text|null @@ -757,6 +761,12 @@ else return 0 +/obj/machinery/chem_master/proc/chemical_safety_check(datum/reagents/R) + var/all_safe = 1 + for(var/datum/reagent/A in R.reagent_list) + if(!safe_chem_list.Find(A.id)) + all_safe = 0 + return all_safe /obj/machinery/chem_master/condimaster name = "\improper CondiMaster 3000" diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index a1e990ec51e..66a4ef9c7ed 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -664,7 +664,7 @@ datum/reagent/strange_reagent/reaction_mob(var/mob/living/M as mob, var/method=T var/mob/dead/observer/ghost = M.get_ghost() if(ghost) to_chat(ghost, "Your are attempting to be revived with Strange Reagent. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)") - to_chat(ghost, sound('sound/effects/genetics.ogg')) + ghost << sound('sound/effects/genetics.ogg') M.visible_message("[M] doesn't appear to respond, perhaps try again later?") if(!M.suiciding && !ghost && !(NOCLONE in M.mutations)) M.visible_message("[M] seems to rise from the dead!") diff --git a/code/modules/reagents/newchem/patch.dm b/code/modules/reagents/newchem/patch.dm index 793b6f8ae6f..f686d293c24 100644 --- a/code/modules/reagents/newchem/patch.dm +++ b/code/modules/reagents/newchem/patch.dm @@ -36,6 +36,7 @@ /obj/item/weapon/reagent_containers/food/pill/patch/synthflesh name = "syntheflesh patch" desc = "Helps with burn injuries." + icon_state = "bandaid_med" instant_application = 1 /obj/item/weapon/reagent_containers/food/pill/patch/synthflesh/New() diff --git a/code/modules/reagents/newchem/pyro.dm b/code/modules/reagents/newchem/pyro.dm index 655b8e996eb..27e34b0c009 100644 --- a/code/modules/reagents/newchem/pyro.dm +++ b/code/modules/reagents/newchem/pyro.dm @@ -535,6 +535,7 @@ datum/reagent/pyrosium/on_tick() required_reagents = list("chlorine" = 1, "oxygen" = 1, "nitrogen" = 1, "ammonia" = 1, "sodium" = 1, "silver" = 1) result_amount = 1 mix_message = "The substance violently detonates!" + mix_sound = 'sound/effects/bang.ogg' /datum/chemical_reaction/azide/on_reaction(var/datum/reagents/holder, var/created_volume) var/location = get_turf(holder.my_atom) @@ -603,6 +604,7 @@ datum/reagent/firefighting_foam/reaction_obj(var/obj/O, var/volume) required_reagents = list("firefighting_foam" = 1, "clf3" = 1) result_amount = 1 mix_message = "The substance violently detonates!" + mix_sound = 'sound/effects/bang.ogg' /datum/chemical_reaction/clf3_firefighting/on_reaction(var/datum/reagents/holder, var/created_volume) var/location = get_turf(holder.my_atom) diff --git a/code/modules/reagents/reagent_containers/food/snacks/candy.dm b/code/modules/reagents/reagent_containers/food/snacks/candy.dm index 1370eff0093..d13eb7ec145 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/candy.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/candy.dm @@ -139,13 +139,13 @@ reagents.add_reagent("sugar", 3) bitesize = 5 -/obj/item/weapon/reagent_containers/food/snacks/candy_corn +/obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn name = "candy corn" desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas." - icon_state = "candy_corn" + icon_state = "candycorn" filling_color = "#FFFCB0" -/obj/item/weapon/reagent_containers/food/snacks/candy_corn/New() +/obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn/New() ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("sugar", 2) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 2fdb61a706f..fa1bbb9d9d0 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -46,11 +46,11 @@ won't update every console in existence) but it's more of a hassle to do. Also, var/obj/machinery/r_n_d/circuit_imprinter/linked_imprinter = null //Linked Circuit Imprinter var/screen = 1.0 //Which screen is currently showing. - + var/menu = 0 // Current menu. var/submenu = 0 var/wait_message = 0 - + var/id = 0 //ID of the computer (for server restrictions). var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console @@ -221,7 +221,7 @@ proc/CallMaterialName(ID) if(href_list["category"] in D.category) matching_designs.Add(D) submenu = 1 - + selected_category = "Viewing Category [href_list["category"]]" else if(href_list["updt_tech"]) //Update the research holder with information from the technology disk. @@ -466,9 +466,9 @@ proc/CallMaterialName(ID) var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. var/O = being_built.locked - + coeff *= being_built.lathe_time_factor - + spawn(32*amount/coeff) if(g2g) //And if we only fail the material requirements, we still spend time and power for(var/i = 0, i health && !health) var/sound/S = sound('sound/effects/engine_alert1.ogg') S.wait = 0 S.channel = 0 S.volume = 50 for(var/mob/M in passengers) - to_chat(M, S) + M << S if(!health) spawn(0) if(passengers) @@ -322,7 +322,7 @@ if(istype(W, /obj/item/device/lock_buster)) var/obj/item/device/lock_buster/L = W - if(L.on & equipment_system.lock_system) + if(L.on && equipment_system.lock_system) user.visible_message(user, "[user] is drilling through the [src]'s lock!", "You start drilling through the [src]'s lock!") if(do_after(user, 100, target = src)) diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 8c0d20224e9..fced24c49ca 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -95,6 +95,11 @@ E.replaced(target) E.forceMove(target) if(target.get_species() == "Machine")//as this is the only step needed for ipc put togethers + if(!(E.dna) && E.robotic == 2 && target.dna) + E.dna = target.dna.Clone() + if(!E.blood_DNA) + E.blood_DNA = list() + E.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type if(target_zone == "head") var/obj/item/organ/external/head/H = target.get_organ("head") var/datum/robolimb/robohead = all_robolimbs[H.model] diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 9c1398c6405..329da35ef2f 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -22,7 +22,7 @@ var/list/organ_cache = list() // links chemical IDs to number of ticks for which they'll stay in the blood germ_level = 0 var/datum/dna/dna - var/datum/species/species + var/datum/species/species = "Human" // Stuff for tracking if this is on a tile with an open freezer or not var/last_freezer_update_time = 0 @@ -53,6 +53,9 @@ var/list/organ_cache = list() if(!blood_DNA) blood_DNA = list() blood_DNA[dna.unique_enzymes] = dna.b_type + else + if(istext(species)) + species = all_species[species] /obj/item/organ/proc/set_dna(var/datum/dna/new_dna) if(new_dna) diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index bd57c059d41..9fb13fe8692 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -112,18 +112,18 @@ var/global/list/limb_icon_cache = list() return mob_icon /obj/item/organ/external/proc/get_icon(var/skeletal) - var/gender + if(istext(species)) + species = all_species[species] if(force_icon) mob_icon = new /icon(force_icon, "[icon_name]") - if(species && species.name == "Machine") //snowflake for IPC's, sorry. + if(species && species.name == "Machine") //snowflake for IPC's, sorry. if(s_col && s_col.len >= 3) mob_icon.Blend(rgb(s_col[1], s_col[2], s_col[3]), ICON_ADD) else if(!dna) mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_f" : ""]") else - if(gendered_icon) if(dna.GetUIState(DNA_UI_GENDER)) gender = "f" diff --git a/code/modules/surgery/organs/subtypes/diona.dm b/code/modules/surgery/organs/subtypes/diona.dm index 9cf0a1020cc..8277be6f241 100644 --- a/code/modules/surgery/organs/subtypes/diona.dm +++ b/code/modules/surgery/organs/subtypes/diona.dm @@ -25,6 +25,7 @@ amputation_point = "trunk" encased = null gendered_icon = 0 + species = "Diona" /obj/item/organ/external/groin/diona name = "fork" @@ -32,6 +33,7 @@ cannot_break = 1 amputation_point = "lower trunk" gendered_icon = 0 + species = "Diona" /obj/item/organ/external/arm/diona name = "left upper tendril" @@ -39,6 +41,7 @@ min_broken_damage = 20 cannot_break = 1 amputation_point = "upper left trunk" + species = "Diona" /obj/item/organ/external/arm/right/diona name = "right upper tendril" @@ -46,6 +49,7 @@ min_broken_damage = 20 cannot_break = 1 amputation_point = "upper right trunk" + species = "Diona" /obj/item/organ/external/leg/diona name = "left lower tendril" @@ -53,6 +57,7 @@ min_broken_damage = 20 cannot_break = 1 amputation_point = "lower left fork" + species = "Diona" /obj/item/organ/external/leg/right/diona name = "right lower tendril" @@ -60,6 +65,7 @@ min_broken_damage = 20 cannot_break = 1 amputation_point = "lower right fork" + species = "Diona" /obj/item/organ/external/foot/diona name = "left foot" @@ -67,6 +73,7 @@ min_broken_damage = 10 cannot_break = 1 amputation_point = "branch" + species = "Diona" /obj/item/organ/external/foot/right/diona name = "right foot" @@ -74,16 +81,19 @@ min_broken_damage = 10 cannot_break = 1 amputation_point = "branch" + species = "Diona" /obj/item/organ/external/hand/diona name = "left grasper" cannot_break = 1 amputation_point = "branch" + species = "Diona" /obj/item/organ/external/hand/right/diona name = "right grasper" cannot_break = 1 amputation_point = "branch" + species = "Diona" /obj/item/organ/external/head/diona max_damage = 50 @@ -92,6 +102,7 @@ encased = null amputation_point = "upper trunk" gendered_icon = 0 + species = "Diona" //DIONA ORGANS. /* /obj/item/organ/external/diona/removed() @@ -113,6 +124,7 @@ origin_tech = "biotech=3" parent_organ = "chest" slot = "heart" + species = "Diona" /obj/item/organ/internal/brain/diona name = "gas bladder" @@ -122,6 +134,7 @@ organ_tag = "brain" // Turns into a nymph instantly, no transplanting possible. origin_tech = "biotech=3" slot = "brain" + species = "Diona" /obj/item/organ/internal/kidneys/diona name = "polyp segment" @@ -131,6 +144,7 @@ origin_tech = "biotech=3" parent_organ = "groin" slot = "kidneys" + species = "Diona" /obj/item/organ/internal/appendix/diona name = "anchoring ligament" @@ -140,6 +154,7 @@ origin_tech = "biotech=3" parent_organ = "groin" slot = "appendix" + species = "Diona" /obj/item/organ/internal/diona_receptor name = "receptor node" @@ -149,7 +164,7 @@ origin_tech = "biotech=3" parent_organ = "head" slot = "eyes" - + species = "Diona" /obj/item/organ/internal/diona_receptor/surgeryize() if(!owner) @@ -170,6 +185,7 @@ icon_state = "claw" slot = "liver" alcohol_intensity = 0.5 + species = "Diona" //TODO:Make absorb light on insert. diff --git a/code/modules/surgery/organs/subtypes/drask.dm b/code/modules/surgery/organs/subtypes/drask.dm index e76f557088e..b3b260a28a0 100644 --- a/code/modules/surgery/organs/subtypes/drask.dm +++ b/code/modules/surgery/organs/subtypes/drask.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/surgery_drask.dmi' icon_state = "innards" desc = "A greenish, slightly translucent organ. It is extremely cold." + species = "Drask" /obj/item/organ/internal/heart/drask name = "drask heart" @@ -13,6 +14,7 @@ organ_tag = "heart" parent_organ = "head" slot = "heart" + species = "Drask" /obj/item/organ/internal/lungs/drask name = "lungs" @@ -22,6 +24,7 @@ organ_tag = "lungs" parent_organ = "chest" slot = "lungs" + species = "Drask" /obj/item/organ/internal/liver/drask name = "metabolic strainer" @@ -32,6 +35,7 @@ parent_organ = "groin" slot = "kidneys" alcohol_intensity = 0.8 + species = "Drask" /obj/item/organ/internal/brain/drask name = "brain" @@ -41,6 +45,7 @@ slot = "brain" mmi_icon = 'icons/obj/surgery_drask.dmi' mmi_icon_state = "mmi_full" + species = "Drask" /obj/item/organ/internal/eyes/drask name = "eyes" @@ -51,3 +56,4 @@ parent_organ = "head" slot = "eyes" desc = "Drask eyes. They look even stranger disembodied" + species = "Drask" diff --git a/code/modules/surgery/organs/subtypes/grey.dm b/code/modules/surgery/organs/subtypes/grey.dm index 45798486d4f..da59165dce8 100644 --- a/code/modules/surgery/organs/subtypes/grey.dm +++ b/code/modules/surgery/organs/subtypes/grey.dm @@ -1,2 +1,3 @@ /obj/item/organ/internal/liver/grey alcohol_intensity = 1.6 + species = "Grey" diff --git a/code/modules/surgery/organs/subtypes/kidan.dm b/code/modules/surgery/organs/subtypes/kidan.dm index 2866e3904fb..848c0bca737 100644 --- a/code/modules/surgery/organs/subtypes/kidan.dm +++ b/code/modules/surgery/organs/subtypes/kidan.dm @@ -1,2 +1,3 @@ /obj/item/organ/internal/liver/kidan alcohol_intensity = 0.5 + species = "Kidan" diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index 5d9bd517d3f..1249a58c0d0 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -6,6 +6,7 @@ min_broken_damage = 30 encased = null status = ORGAN_ROBOT + species = "Machine" /obj/item/organ/external/head/ipc/New() robotize("Morpheus Cyberkinetics") @@ -14,6 +15,7 @@ /obj/item/organ/external/chest/ipc encased = null status = ORGAN_ROBOT + species = "Machine" /obj/item/organ/external/chest/ipc/New() robotize("Morpheus Cyberkinetics") @@ -22,6 +24,7 @@ /obj/item/organ/external/groin/ipc encased = null status = ORGAN_ROBOT + species = "Machine" /obj/item/organ/external/groin/ipc/New() robotize("Morpheus Cyberkinetics") @@ -30,6 +33,7 @@ /obj/item/organ/external/arm/ipc encased = null status = ORGAN_ROBOT + species = "Machine" /obj/item/organ/external/arm/ipc/New() robotize("Morpheus Cyberkinetics") @@ -38,6 +42,7 @@ /obj/item/organ/external/arm/right/ipc encased = null status = ORGAN_ROBOT + species = "Machine" /obj/item/organ/external/arm/right/ipc/New() robotize("Morpheus Cyberkinetics") @@ -45,6 +50,7 @@ /obj/item/organ/external/leg/ipc encased = null status = ORGAN_ROBOT + species = "Machine" /obj/item/organ/external/leg/ipc/New() robotize("Morpheus Cyberkinetics") @@ -53,7 +59,7 @@ /obj/item/organ/external/leg/right/ipc encased = null status = ORGAN_ROBOT - + species = "Machine" /obj/item/organ/external/leg/right/ipc/New() robotize("Morpheus Cyberkinetics") @@ -62,7 +68,7 @@ /obj/item/organ/external/foot/ipc encased = null status = ORGAN_ROBOT - + species = "Machine" /obj/item/organ/external/foot/ipc/New() robotize("Morpheus Cyberkinetics") @@ -71,7 +77,7 @@ /obj/item/organ/external/foot/right/ipc encased = null status = ORGAN_ROBOT - + species = "Machine" /obj/item/organ/external/foot/right/ipc/New() robotize("Morpheus Cyberkinetics") @@ -80,6 +86,7 @@ /obj/item/organ/external/hand/ipc encased = null status = ORGAN_ROBOT + species = "Machine" /obj/item/organ/external/hand/ipc/New() robotize("Morpheus Cyberkinetics") @@ -88,6 +95,7 @@ /obj/item/organ/external/hand/right/ipc encased = null status = ORGAN_ROBOT + species = "Machine" /obj/item/organ/external/hand/right/ipc/New() robotize("Morpheus Cyberkinetics") @@ -103,6 +111,7 @@ slot = "heart" vital = 1 status = ORGAN_ROBOT + species = "Machine" /obj/item/organ/internal/cell/New() robotize() @@ -123,6 +132,7 @@ icon_state = "camera" slot = "eyes" status = ORGAN_ROBOT + species = "Machine" // dead_icon = "camera_broken" /obj/item/organ/internal/optical_sensor/New() @@ -154,6 +164,7 @@ max_damage = 200 slot = "brain" status = ORGAN_ROBOT + species = "Machine" var/obj/item/device/mmi/stored_mmi /obj/item/organ/internal/brain/mmi_holder/proc/update_from_mmi() diff --git a/code/modules/surgery/organs/subtypes/nucleation.dm b/code/modules/surgery/organs/subtypes/nucleation.dm index f174cf9d75d..d237defe16b 100644 --- a/code/modules/surgery/organs/subtypes/nucleation.dm +++ b/code/modules/surgery/organs/subtypes/nucleation.dm @@ -3,6 +3,7 @@ name = "nucleation organ" icon = 'icons/obj/surgery.dmi' desc = "A crystalized human organ. /red It has a strangely iridescent glow." + species = "Nucleation" /obj/item/organ/internal/nucleation/resonant_crystal name = "resonant crystal" @@ -10,6 +11,7 @@ organ_tag = "resonant crystal" parent_organ = "head" slot = "res_crystal" + species = "Nucleation" /obj/item/organ/internal/nucleation/strange_crystal name = "strange crystal" @@ -17,7 +19,7 @@ organ_tag = "strange crystal" parent_organ = "chest" slot = "heart" - + species = "Nucleation" /obj/item/organ/internal/eyes/luminescent_crystal name = "luminescent eyes" @@ -26,6 +28,7 @@ light_color = "#1C1C00" parent_organ = "head" slot = "eyes" + species = "Nucleation" /obj/item/organ/internal/eyes/luminescent_crystal/New() set_light(2) @@ -35,3 +38,4 @@ icon_state = "crystal-brain" organ_tag = "crystalized brain" slot = "brain" + species = "Nucleation" diff --git a/code/modules/surgery/organs/subtypes/skrell.dm b/code/modules/surgery/organs/subtypes/skrell.dm index 78c43c3a370..c069b852886 100644 --- a/code/modules/surgery/organs/subtypes/skrell.dm +++ b/code/modules/surgery/organs/subtypes/skrell.dm @@ -1,2 +1,3 @@ /obj/item/organ/internal/liver/skrell alcohol_intensity = 4 + species = "Skrell" diff --git a/code/modules/surgery/organs/subtypes/tajaran.dm b/code/modules/surgery/organs/subtypes/tajaran.dm index 462c94be822..e37686a05ca 100644 --- a/code/modules/surgery/organs/subtypes/tajaran.dm +++ b/code/modules/surgery/organs/subtypes/tajaran.dm @@ -1,2 +1,3 @@ /obj/item/organ/internal/liver/tajaran alcohol_intensity = 1.4 + species = "Tajaran" diff --git a/code/modules/surgery/organs/subtypes/unathi.dm b/code/modules/surgery/organs/subtypes/unathi.dm index 5f204ab1750..a769bce7a02 100644 --- a/code/modules/surgery/organs/subtypes/unathi.dm +++ b/code/modules/surgery/organs/subtypes/unathi.dm @@ -1,2 +1,3 @@ /obj/item/organ/internal/liver/unathi alcohol_intensity = 0.8 + species = "Unathi" diff --git a/code/modules/surgery/organs/subtypes/vox.dm b/code/modules/surgery/organs/subtypes/vox.dm index c5e86640364..f0b94e2963e 100644 --- a/code/modules/surgery/organs/subtypes/vox.dm +++ b/code/modules/surgery/organs/subtypes/vox.dm @@ -1,2 +1,3 @@ /obj/item/organ/internal/liver/vox alcohol_intensity = 1.6 + species = "Vox" diff --git a/code/modules/surgery/organs/subtypes/vulpkanin.dm b/code/modules/surgery/organs/subtypes/vulpkanin.dm index 30b8d51f667..ca47ac83ddd 100644 --- a/code/modules/surgery/organs/subtypes/vulpkanin.dm +++ b/code/modules/surgery/organs/subtypes/vulpkanin.dm @@ -1,2 +1,3 @@ /obj/item/organ/internal/liver/vulpkanin alcohol_intensity = 1.4 + species = "Vulpkanin" diff --git a/code/modules/surgery/organs/subtypes/wryn.dm b/code/modules/surgery/organs/subtypes/wryn.dm index 14a5d46dd8f..f51adb6054e 100644 --- a/code/modules/surgery/organs/subtypes/wryn.dm +++ b/code/modules/surgery/organs/subtypes/wryn.dm @@ -5,4 +5,5 @@ icon = 'icons/mob/human_races/r_wryn.dmi' icon_state = "antennae" parent_organ = "head" - slot = "hivenode" \ No newline at end of file + slot = "hivenode" + species = "Wryn" diff --git a/code/modules/vehicle/vehicle.dm b/code/modules/vehicle/vehicle.dm index bb112440944..edfa68f2dbd 100644 --- a/code/modules/vehicle/vehicle.dm +++ b/code/modules/vehicle/vehicle.dm @@ -13,7 +13,6 @@ var/vehicle_move_delay = 2 //tick delay between movements, lower = faster, higher = slower var/auto_door_open = TRUE var/needs_gravity = 0//To allow non-space vehicles to move in no gravity or not, mostly for adminbus - //Pixels var/generic_pixel_x = 0 //All dirs show this pixel_x for the driver var/generic_pixel_y = 0 //All dirs shwo this pixel_y for the driver @@ -144,7 +143,7 @@ if(has_gravity(src)) return 1 - if(pulledby) + if(pulledby && pulledby != buckled_mob) // no pulling the vehicle you're driving through space! return 1 if(needs_gravity) diff --git a/code/world.dm b/code/world.dm index b28a0c2d0de..ac46204cca5 100644 --- a/code/world.dm +++ b/code/world.dm @@ -253,7 +253,7 @@ var/world_topic_spam_protect_time = world.timeofday //kick_clients_in_lobby("The round came to an end with you in the lobby.", 1) spawn(0) - to_chat(world, sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg')))// random end sounds!! - LastyBatsy + world << sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg'))// random end sounds!! - LastyBatsy processScheduler.stop() @@ -327,7 +327,7 @@ var/world_topic_spam_protect_time = world.timeofday /world/proc/save_mode(var/the_mode) var/F = file("data/mode.txt") fdel(F) - to_chat(F, the_mode) + F << the_mode /hook/startup/proc/loadMusic() for(var/obj/machinery/media/jukebox/J in machines) diff --git a/config/example/config.txt b/config/example/config.txt index 1ed02a543d1..ca829933479 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -317,4 +317,7 @@ PLAYER_REROUTE_CAP 0 #DISABLE_LOBBY_MUSIC ## Uncomment this if you want to disable the popup alert for people on the same CID -#DISABLE_CID_WARN_POPUP \ No newline at end of file +#DISABLE_CID_WARN_POPUP + +## How many loadout points players may spend in character setup +#MAX_LOADOUT_POINTS 5 \ No newline at end of file diff --git a/goon/browserassets/css/browserOutput.css b/goon/browserassets/css/browserOutput.css index 51530c0ba1f..39e684f0843 100644 --- a/goon/browserassets/css/browserOutput.css +++ b/goon/browserassets/css/browserOutput.css @@ -329,7 +329,7 @@ h1.alert, h2.alert {color: #000000;} .red {color: #FF0000;} .grey {font-family: "Wingdings", cursive, sans-serif;} .skeleton {color: #585858; font-weight: bold; font-style: italic;} -.gutter {color: #61380B; font-style: italic;} +.gutter {color: #7092BE; font-family: "Trebuchet MS", cursive, sans-serif;} .orange {color: #ffa500;} .orangei {color: #ffa500; font-style: italic;} .orangeb {color: #ffa500; font-weight: bold;} diff --git a/goon/browserassets/js/browserOutput.js b/goon/browserassets/js/browserOutput.js index 9d605ab4915..7f59c2d56f3 100644 --- a/goon/browserassets/js/browserOutput.js +++ b/goon/browserassets/js/browserOutput.js @@ -715,6 +715,7 @@ $(function() { var messagesHeight = $messages.outerHeight(); $('body,html').scrollTop(messagesHeight); $('#newMessages').remove(); + runByond("byond://winset?mapwindow.map.focus=true"); }); $('#toggleOptions').click(function(e) { diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm index d6f85e5b859..39fd96a722e 100644 --- a/goon/code/datums/browserOutput.dm +++ b/goon/code/datums/browserOutput.dm @@ -131,7 +131,7 @@ var/list/chatResources = list( var/list/found = new() for(var/i = connectionHistory.len; i >= 1; i--) var/list/row = connectionHistory[i] - if(!row || row.len < 3 || (!row["ckey"] && !row["compid"] && !row["ip"])) + if(!row || row.len < 3 || !(row["ckey"] && row["compid"] && row["ip"])) return if(world.IsBanned(row["ckey"], row["compid"], row["ip"])) found = row @@ -197,11 +197,16 @@ var/list/chatResources = list( /proc/bi(obj) bicon(obj) -/proc/to_chat(target, message) +var/to_chat_filename +var/to_chat_line +var/to_chat_src +// Call using macro: to_chat(target, message) +/proc/__to_chat(target, message) if(istype(message, /image) || istype(message, /sound) || istype(target, /savefile) || !(ismob(target) || islist(target) || isclient(target) || target == world)) target << message - if (!isatom(target)) // Really easy to mix these up, and not having to make sure things are mobs makes the code cleaner. - CRASH("DEBUG: Boutput called with invalid message") + if(!istext(message)) + message = "(non-text type)" + world.Error(new/exception("DEBUG: to_chat called with invalid message: [message]", to_chat_filename, to_chat_line), e_src = to_chat_src) return else if(istext(message)) diff --git a/html/browser/delay_interactivity.js b/html/browser/delay_interactivity.js new file mode 100644 index 00000000000..f621906337b --- /dev/null +++ b/html/browser/delay_interactivity.js @@ -0,0 +1,26 @@ +// Disables all links for one second after the browser window opens. + +(function(){ + // If there's already an onload, let's not clobber it + var oldonload = window.onload; + window.onload = function(){ + if(typeof oldonload == 'function'){ + oldonload(); + } + var onclicks = Array(); + var links = document.getElementsByTagName("a"); + var returnfalse = function(){return false;}; + for(var i = 0; i < links.length; i++){ + onclicks.push(links[i].onclick); + links[i].onclick = returnfalse; + } + setTimeout(function(){ + for(var i = 0; i < links.length; i++){ + // Reset onclick, but only if something else hasn't already changed it + if(links[i].onclick == returnfalse){ + links[i].onclick = onclicks[i]; + } + } + }, 1000); + }; +})(); diff --git a/html/changelog.html b/html/changelog.html index b29fcaa7de1..d7c76ff989f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,200 @@ -->
      +

      02 July 2016

      +

      Fethas updated:

      +
        +
      • adds comfirmation dialogs to transforms from player panel
      • +
      +

      Fox McCloud updated:

      +
        +
      • Adds in laughter demons
      • +
      • Can summon laughter demons as a wizard
      • +
      • Chem master can produce instantaneous medical patches if all chems are safe
      • +
      • Can now purchase sniper rifle and associated ammo on uplink during nuke ops
      • +
      • Most melee and laser armor values halved or reduced; some bullet armor reduced slightly
      • +
      • Slowdown on most armor and spacesuits reduced by 1 (chaplain armor is still slow though)
      • +
      • Mining armor caps out at 60 melee resist as opposed to 80
      • +
      • Ling melee armor reduced; bullet and laser values buffed a bit and slowdown removed
      • +
      • Chameleon jumpsuit has a little bit of armor
      • +
      • Detective's forensic jacket now has identical armor to the native detective jacket
      • +
      • Armor penetration added to energy swords, chainsaws, scythes, and spears
      • +
      • Fixes stun batons, telebatons, and abductor batons piercing/bypassing shields
      • +
      +

      FreeStylaLT updated:

      +
        +
      • Adds appropriate battle yells to sleeping carp
      • +
      +

      KasparoVy updated:

      +
        +
      • Engineer boots that've had their toes cut open now have a sprite.
      • +
      • Vox now have engineer workboot sprites.
      • +
      • Removes unused SWAT boot sprites that were really just copypasted jackboot sprites.
      • +
      +

      Krausus updated:

      +
        +
      • The late-join job listing is now big enough to show all the jobs at once, and organizes them into labeled categories.
      • +
      • Fixed Hotkey Help and hotkey mode toggle messages not appearing.
      • +
      • The late-join job listing will now ignore (mis)clicks for the first second after popping up.
      • +
      +

      Kyep updated:

      +
        +
      • "Loyalty" implants are now known as "Mindshield" implants
      • +
      • Admins playing CC jobs can no longer get antag status from autotraitor.
      • +
      +

      Tastyfish updated:

      +
        +
      • There's essentially a completely new space hotel map! Explorers rejoice!
      • +
      +

      TheDZD updated:

      +
        +
      • Chance for vampires to burn in the chapel has been greatly reduced (from a 35% chance down to 8% per tick).
      • +
      • Vampires do not scream from chapel/space burning until they actually start catching fire.
      • +
      • Threshold for vampires to catch fire from space/chapel burning changed from 60 health to 50 health.
      • +
      • Fire stacks from vampire burning no longer apply twice 35% of the time while below the health threshold.
      • +
      +

      VampyrBytes updated:

      +
        +
      • No more *me emoting from your corpse!
      • +
      +

      monster860 updated:

      +
        +
      • Fixes ghosts having a generic icon when darkness is toggled off
      • +
      +

      tigercat2000 updated:

      +
        +
      • There's a new tab in the character setup screen, "loadouts". This allows you to spawn with a limited number of preset items.
      • +
      • Character setup now uses #defines for the different tabs.
      • +
      + +

      28 June 2016

      +

      CrAzYPiLoT updated:

      +
        +
      • Replaced the current recycler sound with a new one.
      • +
      +

      DaveTheHeadcrab updated:

      +
        +
      • Adds workboots to be worn by engineers.
      • +
      • Fixes the scanner's search functionality.
      • +
      +

      FalseIncarnate updated:

      +
        +
      • To save on adhesive costs, Nanotrasen has stopped gluing stools to the floor. The resulting bodily injuries probably won't cost more than the glue.
      • +
      +

      Fethas updated:

      +
        +
      • you can now pick up potted plants and stealth
      • +
      +

      FlattestGuitar updated:

      +
        +
      • changes some alcohol values, the weaker ones are no longer as weak
      • +
      • refactored alcohol, you can now take short breaks between sips and still pass out in a gentlemanly manner
      • +
      • different species have different levels of alcohol resistance, check in with your bartender for more information
      • +
      • The medical HUD will now be a bit smoother. Neat.
      • +
      +

      Fox McCloud updated:

      +
        +
      • Warden starts off with a pair of Krav Maga Gloves
      • +
      • New Steal objective: steal the warden's krav maga gloves
      • +
      • Clonepods will automatically suck in nearby meat
      • +
      • Slime processors will automatically suck in nearby dead slimes
      • +
      • Actually fixes vamp chaplains
      • +
      • Fixes clumsy check on guns not working properly, resulting in people with glasses shooting themselves in the foot
      • +
      • pAI candidates can now see who requested them
      • +
      +

      KasparoVy updated:

      +
        +
      • Adds Yi to Vox-pidgin syllables. (Port from VG.)
      • +
      • Adds framework for icon-based skin tones. (Port from VG.)
      • +
      • Adds Vox-compatibility for all remaining eyewear.
      • +
      • Raiders now get a random skin tone and eye colour on spawn.
      • +
      • Species default hair, facial hair and head-accessory colours can now be defined.
      • +
      • Newly created Vox mobs will spawn with the same hair colour as they used to have pre-greyscaling.
      • +
      • Noir vision will no longer grey out the HUD. (Port from VG.)
      • +
      • Tails will not be coloured if the person's species doesn't have skin colour.
      • +
      • Vox hair (head and facial) have been greyscaled and can now be customized by the full colour range.
      • +
      • IPC parts from the mech fabricator won't turn IPCs invisible upon attachment anymore.
      • +
      +

      Krausus updated:

      +
        +
      • Added a custom runtime error handler.
      • +
      • Added an in-game runtime viewer.
      • +
      +

      Kyep updated:

      +
        +
      • Admins now hear boink sound when faxed, command sends ERT request, etc
      • +
      • Admins can reply to faxes via radio
      • +
      • Admins can reply to faxes with pre-written fax templates
      • +
      • Admins can reply to faxes with 'evil faxes', special faxes that have negative effects on their intended recipient (and nobody else)
      • +
      • Admins can now join as "Nanotrasen Navy Officer", and "Special Operations Officer". They spawn on adminstation and ERT office, respectively. They are not announced and do not appear on crew manifest.
      • +
      • "Select equipment" verb outfits tweaked for consistency with the above job outfits
      • +
      • Teleporter on admin station now works.
      • +
      • Added antag-only warning to bee briefcase, to reduce chances of traitors killing themselves with it.
      • +
      +

      LittleBigKid2000 updated:

      +
        +
      • Space explorer corgis can now safely explore space
      • +
      +

      Norgad updated:

      +
        +
      • Maintenance around the incinerator has been expanded.
      • +
      • Engineering maintenance finally has an APC.
      • +
      • The incinerator has been moved eastward, there is now a construction area in it's previous location.
      • +
      +

      Tastyfish updated:

      +
        +
      • Cryo tubes, sleepers, and body scanners now eject random items the occupant dropped, upon the occupant being ejected.
      • +
      +

      TheDZD updated:

      +
        +
      • Adds an adminbuse gun that fires gun mimics, you can varedit the gun's `mimic_type` var to any gun path, and it'll fire that gun as mimics. By default it fires stetchkin pistol mimics.
      • +
      • Fixes minor issues caused by some guns having text paths for power cells.
      • +
      • Fixes some runtimes and inconsistencies with the telegun and temperature gun.
      • +
      • The Tesla engine has acquired a grudge for lockers, and will now smite any in its path.
      • +
      • Unstable bluespace teleportation devices have been removed from energy guns, meaning they should no longer teleport from one hand to another when switching firing modes.
      • +
      +

      Twinmold updated:

      +
        +
      • You can once again resist borer control with the Resist verb.
      • +
      +

      VampyrBytes updated:

      +
        +
      • Emotes can now be accessed through verbs as well as say *
      • +
      • Emotes accessed through say * no longer take parameters after a -
      • +
      • Emotes now take parameters through input boxes
      • +
      • Emotes now have support for blind and deaf characters
      • +
      • Emotes now personalise messages
      • +
      • Flip can now be targeted with or without a grab
      • +
      • All emotes that are affected by being muzzled now make the user make some kind of noise
      • +
      • monkeys now have access to all the emotes that the npc tries to perform
      • +
      • Leap genetics ability lets you jump over things
      • +
      +

      monster860 updated:

      +
        +
      • UI now gets it's own plane
      • +
      • RnD console now uses NanoUI! Sweet!
      • +
      • Fixes tranquillite being outside the box in the materials list. Mimes are supposed to be trapped inside a box, not outside one.
      • +
      • Replaces the weird unicode "x" character in some design names with the actual letter "x" so that it doesn't fuck up NanoUI
      • +
      • RCD gets a UI
      • +
      • RCD-built airlocks can now receive different types and accesses.
      • +
      • You can now shift-click to examine as silicon, instead of ctrl-shift-clicking, which is something absolutely no one would guess.
      • +
      • Pulsing multiple doors' "open door" wires at the same time using a remote signaller now actually opens them at the same time.
      • +
      • Fixes wormhole projector not having an icon.
      • +
      • Wormhole projector has 0 failchance now.
      • +
      • Portals made by wormhole projectors can be removed via a multitool
      • +
      • Fixes ghost being able to request docking at trader ship consoles
      • +
      +

      tigercat2000 updated:

      +
        +
      • Ported goon HTML chat from /vg/ / Goon
      • +
      • All uses of \black have been removed
      • +
      • All uses of \icon have been replaced with bicon()
      • +
      +

      tkdrg updated:

      +
        +
      • Admins now have a verb to wipe all scripts from telecomms.
      • +
      +

      19 June 2016

      DaveTheHeadcrab updated:

        diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 3cc2cf1b582..cecfb4eff2a 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1824,3 +1824,178 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. by the staff of animation will shoot things. - rscadd: Mimics created by the staff of animation now have googly eyes. - bugfix: Fixes the disturbing lack of death caused by wand of death projectiles. +2016-06-28: + CrAzYPiLoT: + - tweak: Replaced the current recycler sound with a new one. + DaveTheHeadcrab: + - rscadd: Adds workboots to be worn by engineers. + - bugfix: Fixes the scanner's search functionality. + FalseIncarnate: + - bugfix: To save on adhesive costs, Nanotrasen has stopped gluing stools to the + floor. The resulting bodily injuries probably won't cost more than the glue. + Fethas: + - rscadd: you can now pick up potted plants and stealth + FlattestGuitar: + - tweak: changes some alcohol values, the weaker ones are no longer as weak + - tweak: refactored alcohol, you can now take short breaks between sips and still + pass out in a gentlemanly manner + - tweak: different species have different levels of alcohol resistance, check in + with your bartender for more information + - tweak: The medical HUD will now be a bit smoother. Neat. + Fox McCloud: + - rscadd: Warden starts off with a pair of Krav Maga Gloves + - rscadd: 'New Steal objective: steal the warden''s krav maga gloves' + - rscadd: Clonepods will automatically suck in nearby meat + - rscadd: Slime processors will automatically suck in nearby dead slimes + - bugfix: Actually fixes vamp chaplains + - bugfix: Fixes clumsy check on guns not working properly, resulting in people with + glasses shooting themselves in the foot + - rscadd: pAI candidates can now see who requested them + KasparoVy: + - rscadd: Adds Yi to Vox-pidgin syllables. (Port from VG.) + - rscadd: Adds framework for icon-based skin tones. (Port from VG.) + - rscadd: Adds Vox-compatibility for all remaining eyewear. + - rscadd: Raiders now get a random skin tone and eye colour on spawn. + - rscadd: Species default hair, facial hair and head-accessory colours can now be + defined. + - rscadd: Newly created Vox mobs will spawn with the same hair colour as they used + to have pre-greyscaling. + - bugfix: Noir vision will no longer grey out the HUD. (Port from VG.) + - bugfix: Tails will not be coloured if the person's species doesn't have skin colour. + - bugfix: Vox hair (head and facial) have been greyscaled and can now be customized + by the full colour range. + - bugfix: IPC parts from the mech fabricator won't turn IPCs invisible upon attachment + anymore. + Krausus: + - rscadd: Added a custom runtime error handler. + - rscadd: Added an in-game runtime viewer. + Kyep: + - rscadd: Admins now hear boink sound when faxed, command sends ERT request, etc + - rscadd: Admins can reply to faxes via radio + - rscadd: Admins can reply to faxes with pre-written fax templates + - rscadd: Admins can reply to faxes with 'evil faxes', special faxes that have negative + effects on their intended recipient (and nobody else) + - rscadd: Admins can now join as "Nanotrasen Navy Officer", and "Special Operations + Officer". They spawn on adminstation and ERT office, respectively. They are + not announced and do not appear on crew manifest. + - tweak: '"Select equipment" verb outfits tweaked for consistency with the above + job outfits' + - bugfix: Teleporter on admin station now works. + - bugfix: Added antag-only warning to bee briefcase, to reduce chances of traitors + killing themselves with it. + LittleBigKid2000: + - rscadd: Space explorer corgis can now safely explore space + Norgad: + - rscadd: Maintenance around the incinerator has been expanded. + - rscadd: Engineering maintenance finally has an APC. + - rscadd: The incinerator has been moved eastward, there is now a construction area + in it's previous location. + Tastyfish: + - bugfix: Cryo tubes, sleepers, and body scanners now eject random items the occupant + dropped, upon the occupant being ejected. + TheDZD: + - rscadd: Adds an adminbuse gun that fires gun mimics, you can varedit the gun's + `mimic_type` var to any gun path, and it'll fire that gun as mimics. By default + it fires stetchkin pistol mimics. + - bugfix: Fixes minor issues caused by some guns having text paths for power cells. + - bugfix: Fixes some runtimes and inconsistencies with the telegun and temperature + gun. + - tweak: The Tesla engine has acquired a grudge for lockers, and will now smite + any in its path. + - bugfix: Unstable bluespace teleportation devices have been removed from energy + guns, meaning they should no longer teleport from one hand to another when switching + firing modes. + Twinmold: + - bugfix: You can once again resist borer control with the Resist verb. + VampyrBytes: + - rscadd: Emotes can now be accessed through verbs as well as say * + - rscdel: Emotes accessed through say * no longer take parameters after a - + - rscadd: Emotes now take parameters through input boxes + - rscadd: Emotes now have support for blind and deaf characters + - rscadd: Emotes now personalise messages + - tweak: Flip can now be targeted with or without a grab + - tweak: All emotes that are affected by being muzzled now make the user make some + kind of noise + - bugfix: monkeys now have access to all the emotes that the npc tries to perform + - rscadd: Leap genetics ability lets you jump over things + monster860: + - tweak: UI now gets it's own plane + - tweak: RnD console now uses NanoUI! Sweet! + - bugfix: Fixes tranquillite being outside the box in the materials list. Mimes + are supposed to be trapped inside a box, not outside one. + - tweak: Replaces the weird unicode "x" character in some design names with the + actual letter "x" so that it doesn't fuck up NanoUI + - rscadd: RCD gets a UI + - rscadd: RCD-built airlocks can now receive different types and accesses. + - rscadd: You can now shift-click to examine as silicon, instead of ctrl-shift-clicking, + which is something absolutely no one would guess. + - bugfix: Pulsing multiple doors' "open door" wires at the same time using a remote + signaller now actually opens them at the same time. + - bugfix: Fixes wormhole projector not having an icon. + - tweak: Wormhole projector has 0 failchance now. + - rscadd: Portals made by wormhole projectors can be removed via a multitool + - bugfix: Fixes ghost being able to request docking at trader ship consoles + tigercat2000: + - rscadd: Ported goon HTML chat from /vg/ / Goon + - tweak: All uses of \black have been removed + - tweak: All uses of \icon have been replaced with bicon() + tkdrg: + - rscadd: Admins now have a verb to wipe all scripts from telecomms. +2016-07-02: + Fethas: + - bugfix: adds comfirmation dialogs to transforms from player panel + Fox McCloud: + - rscadd: Adds in laughter demons + - rscadd: Can summon laughter demons as a wizard + - rscadd: Chem master can produce instantaneous medical patches if all chems are + safe + - rscadd: Can now purchase sniper rifle and associated ammo on uplink during nuke + ops + - tweak: Most melee and laser armor values halved or reduced; some bullet armor + reduced slightly + - tweak: Slowdown on most armor and spacesuits reduced by 1 (chaplain armor is still + slow though) + - tweak: Mining armor caps out at 60 melee resist as opposed to 80 + - tweak: Ling melee armor reduced; bullet and laser values buffed a bit and slowdown + removed + - tweak: Chameleon jumpsuit has a little bit of armor + - tweak: Detective's forensic jacket now has identical armor to the native detective + jacket + - tweak: Armor penetration added to energy swords, chainsaws, scythes, and spears + - bugfix: Fixes stun batons, telebatons, and abductor batons piercing/bypassing + shields + FreeStylaLT: + - rscadd: Adds appropriate battle yells to sleeping carp + KasparoVy: + - imageadd: Engineer boots that've had their toes cut open now have a sprite. + - imageadd: Vox now have engineer workboot sprites. + - imagedel: Removes unused SWAT boot sprites that were really just copypasted jackboot + sprites. + Krausus: + - tweak: The late-join job listing is now big enough to show all the jobs at once, + and organizes them into labeled categories. + - bugfix: Fixed Hotkey Help and hotkey mode toggle messages not appearing. + - tweak: The late-join job listing will now ignore (mis)clicks for the first second + after popping up. + Kyep: + - tweak: '"Loyalty" implants are now known as "Mindshield" implants' + - tweak: Admins playing CC jobs can no longer get antag status from autotraitor. + Tastyfish: + - rscadd: There's essentially a completely new space hotel map! Explorers rejoice! + TheDZD: + - tweak: Chance for vampires to burn in the chapel has been greatly reduced (from + a 35% chance down to 8% per tick). + - tweak: Vampires do not scream from chapel/space burning until they actually start + catching fire. + - tweak: Threshold for vampires to catch fire from space/chapel burning changed + from 60 health to 50 health. + - tweak: Fire stacks from vampire burning no longer apply twice 35% of the time + while below the health threshold. + VampyrBytes: + - bugfix: No more *me emoting from your corpse! + monster860: + - bugfix: Fixes ghosts having a generic icon when darkness is toggled off + tigercat2000: + - rscadd: There's a new tab in the character setup screen, "loadouts". This allows + you to spawn with a limited number of preset items. + - tweak: 'Character setup now uses #defines for the different tabs.' diff --git a/html/changelogs/AutoChangeLog-pr-4349.yml b/html/changelogs/AutoChangeLog-pr-4349.yml deleted file mode 100644 index 239734732a7..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4349.yml +++ /dev/null @@ -1,11 +0,0 @@ -author: VampyrBytes -delete-after: True -changes: - - rscadd: "Emotes can now be accessed through verbs as well as say *" - - rscdel: "Emotes accessed through say * no longer take parameters after a -" - - rscadd: "Emotes now take parameters through input boxes" - - rscadd: "Emotes now have support for blind and deaf characters" - - rscadd: "Emotes now personalise messages" - - tweak: "Flip can now be targeted with or without a grab" - - tweak: "All emotes that are affected by being muzzled now make the user make some kind of noise" - - bugfix: "monkeys now have access to all the emotes that the npc tries to perform" diff --git a/html/changelogs/AutoChangeLog-pr-4540.yml b/html/changelogs/AutoChangeLog-pr-4540.yml deleted file mode 100644 index 846c1cd5dad..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4540.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: CrAzYPiLoT -delete-after: True -changes: - - tweak: "Replaced the current recycler sound with a new one." diff --git a/html/changelogs/AutoChangeLog-pr-4610.yml b/html/changelogs/AutoChangeLog-pr-4610.yml deleted file mode 100644 index 7fcbe80c073..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4610.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: monster860 -delete-after: True -changes: - - tweak: "UI now gets it's own plane" diff --git a/html/changelogs/AutoChangeLog-pr-4614.yml b/html/changelogs/AutoChangeLog-pr-4614.yml deleted file mode 100644 index 9a35d948fde..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4614.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: KasparoVy -delete-after: True -changes: - - rscadd: "Adds Yi to Vox-pidgin syllables. (Port from VG.)" - - rscadd: "Adds framework for icon-based skin tones. (Port from VG.)" - - rscadd: "Adds Vox-compatibility for all remaining eyewear." - - rscadd: "Raiders now get a random skin tone and eye colour on spawn." - - rscadd: "Species default hair, facial hair and head-accessory colours can now be defined." - - rscadd: "Newly created Vox mobs will spawn with the same hair colour as they used to have pre-greyscaling." - - bugfix: "Noir vision will no longer grey out the HUD. (Port from VG.)" - - bugfix: "Tails will not be coloured if the person's species doesn't have skin colour." - - bugfix: "Vox hair (head and facial) have been greyscaled and can now be customized by the full colour range." diff --git a/html/changelogs/AutoChangeLog-pr-4624.yml b/html/changelogs/AutoChangeLog-pr-4624.yml deleted file mode 100644 index bf50776cc49..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4624.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: monster860 -delete-after: True -changes: - - tweak: "RnD console now uses NanoUI! Sweet!" - - bugfix: "Fixes tranquillite being outside the box in the materials list. Mimes are supposed to be trapped inside a box, not outside one." - - tweak: "Replaces the weird unicode \"x\" character in some design names with the actual letter \"x\" so that it doesn't fuck up NanoUI" diff --git a/html/changelogs/AutoChangeLog-pr-4647.yml b/html/changelogs/AutoChangeLog-pr-4647.yml deleted file mode 100644 index 07fb3d6d360..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4647.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: FlattestGuitar -delete-after: True -changes: - - tweak: "changes some alcohol values, the weaker ones are no longer as weak" - - tweak: "refactored alcohol, you can now take short breaks between sips and still pass out in a gentlemanly manner" - - tweak: "different species have different levels of alcohol resistance, check in with your bartender for more information" diff --git a/html/changelogs/AutoChangeLog-pr-4679.yml b/html/changelogs/AutoChangeLog-pr-4679.yml deleted file mode 100644 index bd4120a7a63..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4679.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Krausus -delete-after: True -changes: - - rscadd: "Added a custom runtime error handler." - - rscadd: "Added an in-game runtime viewer." diff --git a/html/changelogs/AutoChangeLog-pr-4687.yml b/html/changelogs/AutoChangeLog-pr-4687.yml deleted file mode 100644 index 08b65ca541c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4687.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - rscadd: "Warden starts off with a pair of Krav Maga Gloves" - - rscadd: "New Steal objective: steal the warden's krav maga gloves" diff --git a/html/changelogs/AutoChangeLog-pr-4694.yml b/html/changelogs/AutoChangeLog-pr-4694.yml deleted file mode 100644 index 2e233d399e4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4694.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Kyep -delete-after: True -changes: - - rscadd: "Admins now hear boink sound when faxed, command sends ERT request, etc" - - rscadd: "Admins can reply to faxes via radio" - - rscadd: "Admins can reply to faxes with pre-written fax templates" - - rscadd: "Admins can reply to faxes with 'evil faxes', special faxes that have negative effects on their intended recipient (and nobody else)" diff --git a/html/changelogs/AutoChangeLog-pr-4699.yml b/html/changelogs/AutoChangeLog-pr-4699.yml deleted file mode 100644 index 2bb156747d6..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4699.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: TheDZD -delete-after: True -changes: - - rscadd: "Adds an adminbuse gun that fires gun mimics, you can varedit the gun's `mimic_type` var to any gun path, and it'll fire that gun as mimics. By default it fires stetchkin pistol mimics." - - bugfix: "Fixes minor issues caused by some guns having text paths for power cells." - - bugfix: "Fixes some runtimes and inconsistencies with the telegun and temperature gun." diff --git a/html/changelogs/AutoChangeLog-pr-4703.yml b/html/changelogs/AutoChangeLog-pr-4703.yml deleted file mode 100644 index a1100322a8a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4703.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - rscadd: "Clonepods will automatically suck in nearby meat" - - rscadd: "Slime processors will automatically suck in nearby dead slimes" diff --git a/html/changelogs/AutoChangeLog-pr-4704.yml b/html/changelogs/AutoChangeLog-pr-4704.yml deleted file mode 100644 index bbe89cfebb2..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4704.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: TheDZD -delete-after: True -changes: - - tweak: "The Tesla engine has acquired a grudge for lockers, and will now smite any in its path." diff --git a/html/changelogs/AutoChangeLog-pr-4713.yml b/html/changelogs/AutoChangeLog-pr-4713.yml deleted file mode 100644 index 707c156a1e2..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4713.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: DaveTheHeadcrab -delete-after: True -changes: - - rscadd: "Adds workboots to be worn by engineers." diff --git a/html/changelogs/AutoChangeLog-pr-4718.yml b/html/changelogs/AutoChangeLog-pr-4718.yml deleted file mode 100644 index 3ceac3d474a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4718.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - bugfix: "Actually fixes vamp chaplains" diff --git a/html/changelogs/AutoChangeLog-pr-4726.yml b/html/changelogs/AutoChangeLog-pr-4726.yml deleted file mode 100644 index 0a4dc110a5c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4726.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: FlattestGuitar -delete-after: True -changes: - - tweak: "The medical HUD will now be a bit smoother. Neat." diff --git a/html/changelogs/AutoChangeLog-pr-4729.yml b/html/changelogs/AutoChangeLog-pr-4729.yml deleted file mode 100644 index 566d5a8d623..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4729.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Twinmold -delete-after: True -changes: - - bugfix: "You can once again resist borer control with the Resist verb." diff --git a/html/changelogs/AutoChangeLog-pr-4730.yml b/html/changelogs/AutoChangeLog-pr-4730.yml deleted file mode 100644 index da4a9685281..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4730.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Kyep -delete-after: True -changes: - - bugfix: "Added antag-only warning to bee briefcase, to reduce chances of traitors killing themselves with it." diff --git a/html/changelogs/AutoChangeLog-pr-4734.yml b/html/changelogs/AutoChangeLog-pr-4734.yml deleted file mode 100644 index 2650702dfb9..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4734.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: TheDZD -delete-after: True -changes: - - bugfix: "Unstable bluespace teleportation devices have been removed from energy guns, meaning they should no longer teleport from one hand to another when switching firing modes." diff --git a/html/changelogs/AutoChangeLog-pr-4735.yml b/html/changelogs/AutoChangeLog-pr-4735.yml deleted file mode 100644 index 87d489e9e19..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4735.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: VampyrBytes -delete-after: True -changes: - - rscadd: "Leap genetics ability lets you jump over things" diff --git a/html/changelogs/AutoChangeLog-pr-4737.yml b/html/changelogs/AutoChangeLog-pr-4737.yml deleted file mode 100644 index 0d9306790af..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4737.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: DaveTheHeadcrab -delete-after: True -changes: - - bugfix: "Fixes the scanner's search functionality." diff --git a/html/changelogs/AutoChangeLog-pr-4738.yml b/html/changelogs/AutoChangeLog-pr-4738.yml deleted file mode 100644 index d93f5be8056..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4738.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Tastyfish -delete-after: True -changes: - - bugfix: "Cryo tubes, sleepers, and body scanners now eject random items the occupant dropped, upon the occupant being ejected." diff --git a/html/changelogs/AutoChangeLog-pr-4744.yml b/html/changelogs/AutoChangeLog-pr-4744.yml deleted file mode 100644 index fd36c53aaa5..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4744.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: tigercat2000 -delete-after: True -changes: - - rscadd: "Ported goon HTML chat from /vg/ / Goon" - - tweak: "All uses of \\black have been removed" - - tweak: "All uses of \\icon have been replaced with bicon()" diff --git a/html/changelogs/AutoChangeLog-pr-4753.yml b/html/changelogs/AutoChangeLog-pr-4753.yml deleted file mode 100644 index b9453c47df6..00000000000 --- a/html/changelogs/AutoChangeLog-pr-4753.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Fox McCloud -delete-after: True -changes: - - bugfix: "Fixes clumsy check on guns not working properly, resulting in people with glasses shooting themselves in the foot" diff --git a/html/changelogs/AutoChangeLog-pr-4852.yml b/html/changelogs/AutoChangeLog-pr-4852.yml new file mode 100644 index 00000000000..ca5e7c360c0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4852.yml @@ -0,0 +1,5 @@ +author: FalseIncarnate +delete-after: True +changes: + - bugfix: "Chicks no longer lose their souls (literally) when becoming adults." + - bugfix: "Intercoms, fire alarms, and air alarms no longer contain internal portals to a realm of infinite cables and circuit boards." diff --git a/html/changelogs/AutoChangeLog-pr-4857.yml b/html/changelogs/AutoChangeLog-pr-4857.yml new file mode 100644 index 00000000000..aa0932f40bb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4857.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - tweak: "Space lube damage removed and duration reduced from 7 to 5" diff --git a/html/changelogs/AutoChangeLog-pr-4860.yml b/html/changelogs/AutoChangeLog-pr-4860.yml new file mode 100644 index 00000000000..a73d8e3e94e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4860.yml @@ -0,0 +1,9 @@ +author: FreeStylaLT +delete-after: True +changes: + - rscadd: "Added windows and a missing firelock to Genetics/Cloning" + - tweak: "Tweaked layout of Genetics slightly" + - rscadd: "Added photocopier to R&D." + - tweak: "Tweaked RD's office layout slightly" + - tweak: "Changed access on Tcomms' external airlocks' buttons to be same as general Tcomms access" + - bugfix: "fixed the airless tiles in Assembly Line's windows" diff --git a/html/changelogs/AutoChangeLog-pr-4861.yml b/html/changelogs/AutoChangeLog-pr-4861.yml new file mode 100644 index 00000000000..a8b51ba3041 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4861.yml @@ -0,0 +1,4 @@ +author: Fox McCloud +delete-after: True +changes: + - tweak: "Azide and CLF3+Firefighting foam now play a bang sound when mixed" diff --git a/html/changelogs/AutoChangeLog-pr-4867.yml b/html/changelogs/AutoChangeLog-pr-4867.yml new file mode 100644 index 00000000000..a428215d37e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4867.yml @@ -0,0 +1,10 @@ +author: KasparoVy +delete-after: True +changes: + - imageadd: "Adds improved Vox mask/goggle sprites." + - imageadd: "Adds Vox-compatible versions of most suits." + - rscadd: "Adds species-fitting and icon override handling to clothing accessories and suit collars." + - rscadd: "You can now open/close Clown Officer and Soldier coats." + - rscadd: "Adds by-species tail hiding." + - tweak: "Tidies up and refactors the way the Captain's space helmet shows Vox hair but hides every other species'." + - bugfix: "Reactive armour's sprite will now update as soon as you turn it on/off or EMP it." diff --git a/html/changelogs/AutoChangeLog-pr-4869.yml b/html/changelogs/AutoChangeLog-pr-4869.yml new file mode 100644 index 00000000000..9ba17868790 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4869.yml @@ -0,0 +1,7 @@ +author: Krausus +delete-after: True +changes: + - bugfix: "Fixed borers dying in hosts who happened to be somewhere cold, such as space. Even if their host was in a space suit." + - bugfix: "Fixed borers forgetting to detach from a host when it died." + - bugfix: "Fixed borers being able to assume control of a dead host." + - bugfix: "Fixed dead borers in a host being able to speak with the host and ghosts." diff --git a/html/changelogs/AutoChangeLog-pr-4870.yml b/html/changelogs/AutoChangeLog-pr-4870.yml new file mode 100644 index 00000000000..536ce2068ce --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4870.yml @@ -0,0 +1,4 @@ +author: Kyep +delete-after: True +changes: + - tweak: "Fixes NT Special Ops Officer's headset so he can correctly hear, and talk on, the Special Ops (deathsquad) channel." diff --git a/html/changelogs/AutoChangeLog-pr-4874.yml b/html/changelogs/AutoChangeLog-pr-4874.yml new file mode 100644 index 00000000000..82b0746382f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4874.yml @@ -0,0 +1,4 @@ +author: Krausus +delete-after: True +changes: + - bugfix: "Fixed employees starting every shift at least 3 minutes late. You aren't getting paid to stand around, people!" diff --git a/html/changelogs/AutoChangeLog-pr-4875.yml b/html/changelogs/AutoChangeLog-pr-4875.yml new file mode 100644 index 00000000000..061bed841c5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4875.yml @@ -0,0 +1,4 @@ +author: Ar3nn +delete-after: True +changes: + - tweak: "Adds tech levels to RnD console main menu" diff --git a/html/changelogs/AutoChangeLog-pr-4887.yml b/html/changelogs/AutoChangeLog-pr-4887.yml new file mode 100644 index 00000000000..e5316661cb2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4887.yml @@ -0,0 +1,4 @@ +author: Krausus +delete-after: True +changes: + - bugfix: "Fixed animal beatdowns being twice as noisy as they should be." diff --git a/html/changelogs/AutoChangeLog-pr-4892.yml b/html/changelogs/AutoChangeLog-pr-4892.yml new file mode 100644 index 00000000000..e75ed2e3253 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4892.yml @@ -0,0 +1,4 @@ +author: TheDZD +delete-after: True +changes: + - bugfix: "Burst fire selection is now a proc, as it was meant to be, rather than a verb." diff --git a/html/changelogs/AutoChangeLog-pr-4896.yml b/html/changelogs/AutoChangeLog-pr-4896.yml new file mode 100644 index 00000000000..e7fff21c3d5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4896.yml @@ -0,0 +1,7 @@ +author: Krausus +delete-after: True +changes: + - bugfix: "Pod lock busters should now properly bust pod locks." + - bugfix: "The late-stage effects of the \"sensory destruction\" disease symptom should now properly destroy your senses." + - bugfix: "Autotraitor should now continue picking new in-game traitors, instead of picking one and dying." + - bugfix: "Lacking a head no longer makes you immune to becoming a husk or skeleton." diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index d74f99cbb78..85f9b1e25a6 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 685e6b2977b..491349985d4 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/mob/species/vox/collar.dmi b/icons/mob/species/vox/collar.dmi new file mode 100644 index 00000000000..c0b8c6ba936 Binary files /dev/null and b/icons/mob/species/vox/collar.dmi differ diff --git a/icons/mob/species/vox/eyes.dmi b/icons/mob/species/vox/eyes.dmi index f761fb361a7..d2ca8399639 100644 Binary files a/icons/mob/species/vox/eyes.dmi and b/icons/mob/species/vox/eyes.dmi differ diff --git a/icons/mob/species/vox/mask.dmi b/icons/mob/species/vox/mask.dmi index cd9c224051b..dcf01b87eb5 100644 Binary files a/icons/mob/species/vox/mask.dmi and b/icons/mob/species/vox/mask.dmi differ diff --git a/icons/mob/species/vox/shoes.dmi b/icons/mob/species/vox/shoes.dmi index 2e6b182ceb2..f3cc54d72e0 100644 Binary files a/icons/mob/species/vox/shoes.dmi and b/icons/mob/species/vox/shoes.dmi differ diff --git a/icons/mob/species/vox/suit.dmi b/icons/mob/species/vox/suit.dmi index 895de207c1e..b8340ac1c9c 100644 Binary files a/icons/mob/species/vox/suit.dmi and b/icons/mob/species/vox/suit.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 6fed8c42c66..28096d4e1a4 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index ccf3bad52b5..40f5b5ddc17 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 24f90eb21a6..1fefc0259e5 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 7893396874b..378de746198 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 05ccd754f9d..8aacc4a4178 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/interface/interface.dm b/interface/interface.dm index 81fe75b269b..f144b225160 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -10,7 +10,7 @@ else src << link(config.wikiurl) else - src << "The wiki URL is not set in the server configuration." + to_chat(src, "The wiki URL is not set in the server configuration.") return /client/verb/changes() @@ -51,7 +51,7 @@ return src << link(config.forumurl) else - src << "The forum URL is not set in the server configuration." + to_chat(src, "The forum URL is not set in the server configuration.") return /client/verb/rules() @@ -63,7 +63,7 @@ return src << link(config.rulesurl) else - src << "The rules URL is not set in the server configuration." + to_chat(src, "The rules URL is not set in the server configuration.") return /client/verb/donate() @@ -75,7 +75,7 @@ return src << link(config.donationsurl) else - src << "The rules URL is not set in the server configuration." + to_chat(src, "The rules URL is not set in the server configuration.") return /client/verb/hotkeys_help() @@ -94,7 +94,7 @@ Admin: mob.hotkey_help() if(check_rights(R_MOD|R_ADMIN,0)) - src << adminhotkeys + to_chat(src, adminhotkeys) /mob/proc/hotkey_help() var/hotkey_mode = {" @@ -151,8 +151,8 @@ Any-Mode: (hotkey doesn't need to be on) \tF4 = Me "} - src << hotkey_mode - src << other + to_chat(src, hotkey_mode) + to_chat(src, other) /mob/living/silicon/robot/hotkey_help() var/hotkey_mode = {" @@ -203,15 +203,15 @@ Any-Mode: (hotkey doesn't need to be on) \tF4 = Me "} - src << hotkey_mode - src << other + to_chat(src, hotkey_mode) + to_chat(src, other) //adv. hotkey mode verbs, vars located in /code/modules/client/client defines.dm /client/verb/hotkey_toggle()//toggles hotkey mode between on and off, respects selected type set name = ".Toggle Hotkey Mode" hotkeyon = !hotkeyon//toggle the var - usr << (hotkeyon ? "Hotkey mode enabled." : "Hotkey mode disabled.")//feedback to the user + to_chat(usr, (hotkeyon ? "Hotkey mode enabled." : "Hotkey mode disabled."))//feedback to the user if(hotkeyon)//using an if statement because I don't want to clutter winset() with ? operators winset(usr, "mainwindow.hotkey_toggle", "is-checked=true")//checks the button @@ -233,4 +233,4 @@ Any-Mode: (hotkey doesn't need to be on) var/hotkeyname = hotkeys[hotkeyon ? "on" : "off"]//get the name of the hotkey, to not clutter winset() to much winset(usr, "mainwindow", "macro=[hotkeyname]")//change the hotkey - usr << "Hotkey mode changed to [hotkeytype]." + to_chat(usr, "Hotkey mode changed to [hotkeytype].") diff --git a/nano/templates/r_n_d.tmpl b/nano/templates/r_n_d.tmpl index 5d29c399550..cabd0c46992 100644 --- a/nano/templates/r_n_d.tmpl +++ b/nano/templates/r_n_d.tmpl @@ -22,12 +22,17 @@ {{:data.wait_message}} {{else data.menu == 0}}

        Main Menu:

        -
        {{:helper.link('Current Research Levels', 'folder-open', {'menu': 1, 'submenu': 0})}}
        {{:helper.link('Disk Operations', 'save', {'menu': 2, 'submenu': 0}, data.disk_type ? null : 'disabled')}}
        {{:helper.link('Destructive Analyzer Menu', 'chain-broken', {'menu': 3, 'submenu': 0}, data.linked_destroy ? null : 'disabled')}}
        {{:helper.link('Protolathe Menu', 'print', {'menu': 4, 'submenu': 0}, data.linked_lathe ? null : 'disabled')}}
        {{:helper.link('Circuit Imprinter Menu', 'print', {'menu': 5, 'submenu': 0}, data.linked_imprinter ? null : 'disabled')}}
        {{:helper.link('Settings', 'gear', {'menu': 6, 'submenu': 0})}}
        +
        +
        + Current Research Levels: + {{for data.tech_levels}} +
        {{:value.name}}:
        {{:value.level}}
        + {{/for}} {{else data.menu == 1}}

        Current Research Levels:

        {{for data.tech_levels}} diff --git a/nano/templates/rcd.tmpl b/nano/templates/rcd.tmpl new file mode 100644 index 00000000000..073171a4ba7 --- /dev/null +++ b/nano/templates/rcd.tmpl @@ -0,0 +1,33 @@ +{{if data.menu == 1}} +

        RCD Modes:

        +
        {{:helper.link('Floor and Walls', 'arrow-right', {'mode': 1}, data.mode == 1 ? 'linkOn' : null)}}
        +
        + {{:helper.link('Airlock', 'arrow-right', {'mode': 2}, data.mode == 2 ? 'linkOn' : null)}} + {{:helper.link('', 'gear', {'menu': 2})}} +
        +
        {{:helper.link('Deconstruct', 'arrow-right', {'mode': 3}, data.mode == 3 ? 'linkOn' : null)}}
        +
        {{:helper.link('Windows', 'arrow-right', {'mode': 4}, data.mode == 4 ? 'linkOn' : null)}}
        +
        +
        RCD ammo: {{:data.matter}} / {{:data.max_matter}}
        +
        +{{else data.menu == 2}} +
        {{:helper.link('Back', 'reply', {'menu': 1})}}
        +
        +

        Type

        + {{for data.allowed_door_types}} +
        {{:helper.link(value.name, 'arrow-right', {'door_type': value.type}, data.door_type == value.type ? 'linkOn' : null)}}
        + {{/for}} +
        +
        +

        Accesses

        + {{if data.locked}} + {{:helper.link('Swipe ID', 'unlock-alt', {'login': 1})}} + {{else}} + {{:helper.link('Lock', 'lock', {'logout': 1})}} +
        {{:helper.link(data.one_access ? 'ONE' : 'ALL', 'arrow-right', {'toggle_one_access': 1})}}

        + {{for data.door_accesses}} +
        {{:helper.link(value.name, 'arrow-right', {'toggle_access': value.id}, null, value.enabled ? 'selected' : null)}}
        + {{/for}} + {{/if}} +
        +{{/if}} \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 380e84b68df..367da0fb9de 100644 --- a/paradise.dme +++ b/paradise.dme @@ -265,9 +265,6 @@ #include "code\datums\diseases\advance\symptoms\weakness.dm" #include "code\datums\diseases\advance\symptoms\weight.dm" #include "code\datums\diseases\advance\symptoms\youth.dm" -#include "code\datums\Emote_system\emote.dm" -#include "code\datums\Emote_system\emote_handler.dm" -#include "code\datums\Emote_system\emotes.dm" #include "code\datums\helper_datums\construction_datum.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\global_iterator.dm" @@ -479,6 +476,7 @@ #include "code\game\jobs\job_objective.dm" #include "code\game\jobs\jobs.dm" #include "code\game\jobs\whitelist.dm" +#include "code\game\jobs\job\central.dm" #include "code\game\jobs\job\civilian.dm" #include "code\game\jobs\job\engineering.dm" #include "code\game\jobs\job\job.dm" @@ -855,7 +853,7 @@ #include "code\game\objects\items\weapons\implants\implant_explosive.dm" #include "code\game\objects\items\weapons\implants\implant_freedom.dm" #include "code\game\objects\items\weapons\implants\implant_krav_maga.dm" -#include "code\game\objects\items\weapons\implants\implant_loyality.dm" +#include "code\game\objects\items\weapons\implants\implant_mindshield.dm" #include "code\game\objects\items\weapons\implants\implant_misc.dm" #include "code\game\objects\items\weapons\implants\implant_storage.dm" #include "code\game\objects\items\weapons\implants\implant_track.dm" @@ -1096,8 +1094,10 @@ #include "code\modules\awaymissions\loot.dm" #include "code\modules\awaymissions\map_rng.dm" #include "code\modules\awaymissions\pamphlet.dm" +#include "code\modules\awaymissions\snpc.dm" #include "code\modules\awaymissions\trigger.dm" #include "code\modules\awaymissions\zlevel.dm" +#include "code\modules\awaymissions\zvis.dm" #include "code\modules\awaymissions\maploader\dmm_suite.dm" #include "code\modules\awaymissions\maploader\reader.dm" #include "code\modules\awaymissions\maploader\swapmaps.dm" @@ -1110,16 +1110,23 @@ #include "code\modules\awaymissions\mission_code\clownplanet.dm" #include "code\modules\awaymissions\mission_code\evil_santa.dm" #include "code\modules\awaymissions\mission_code\spacebattle.dm" +#include "code\modules\awaymissions\mission_code\spacehotel.dm" +#include "code\modules\awaymissions\mission_code\spacehotel_npcs.dm" #include "code\modules\awaymissions\mission_code\stationCollision.dm" #include "code\modules\awaymissions\mission_code\wildwest.dm" #include "code\modules\client\asset_cache.dm" #include "code\modules\client\client defines.dm" #include "code\modules\client\client procs.dm" #include "code\modules\client\message.dm" -#include "code\modules\client\preferences.dm" -#include "code\modules\client\preferences_mysql.dm" -#include "code\modules\client\preferences_spawnpoints.dm" -#include "code\modules\client\preferences_toggles.dm" +#include "code\modules\client\preference\preferences.dm" +#include "code\modules\client\preference\preferences_mysql.dm" +#include "code\modules\client\preference\preferences_spawnpoints.dm" +#include "code\modules\client\preference\preferences_toggles.dm" +#include "code\modules\client\preference\loadout\gear_tweaks.dm" +#include "code\modules\client\preference\loadout\loadout.dm" +#include "code\modules\client\preference\loadout\loadout_accessories.dm" +#include "code\modules\client\preference\loadout\loadout_general.dm" +#include "code\modules\client\preference\loadout\loadout_uniform.dm" #include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\glasses\glasses.dm" #include "code\modules\clothing\glasses\hud.dm" @@ -1400,6 +1407,7 @@ #include "code\modules\mining\laborcamp\laborstacker.dm" #include "code\modules\mob\abilities.dm" #include "code\modules\mob\death.dm" +#include "code\modules\mob\emote.dm" #include "code\modules\mob\hear_say.dm" #include "code\modules\mob\holder.dm" #include "code\modules\mob\inventory.dm" @@ -1451,6 +1459,7 @@ #include "code\modules\mob\living\carbon\alien\login.dm" #include "code\modules\mob\living\carbon\alien\logout.dm" #include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\emote.dm" #include "code\modules\mob\living\carbon\alien\humanoid\empress.dm" #include "code\modules\mob\living\carbon\alien\humanoid\humanoid.dm" #include "code\modules\mob\living\carbon\alien\humanoid\inventory.dm" @@ -1462,6 +1471,7 @@ #include "code\modules\mob\living\carbon\alien\humanoid\caste\hunter.dm" #include "code\modules\mob\living\carbon\alien\humanoid\caste\sentinel.dm" #include "code\modules\mob\living\carbon\alien\larva\death.dm" +#include "code\modules\mob\living\carbon\alien\larva\emote.dm" #include "code\modules\mob\living\carbon\alien\larva\inventory.dm" #include "code\modules\mob\living\carbon\alien\larva\larva.dm" #include "code\modules\mob\living\carbon\alien\larva\life.dm" @@ -1472,6 +1482,7 @@ #include "code\modules\mob\living\carbon\brain\brain.dm" #include "code\modules\mob\living\carbon\brain\brain_item.dm" #include "code\modules\mob\living\carbon\brain\death.dm" +#include "code\modules\mob\living\carbon\brain\emote.dm" #include "code\modules\mob\living\carbon\brain\life.dm" #include "code\modules\mob\living\carbon\brain\login.dm" #include "code\modules\mob\living\carbon\brain\MMI.dm" @@ -1480,6 +1491,7 @@ #include "code\modules\mob\living\carbon\human\appearance.dm" #include "code\modules\mob\living\carbon\human\body_accessories.dm" #include "code\modules\mob\living\carbon\human\death.dm" +#include "code\modules\mob\living\carbon\human\emote.dm" #include "code\modules\mob\living\carbon\human\examine.dm" #include "code\modules\mob\living\carbon\human\human.dm" #include "code\modules\mob\living\carbon\human\human_attackalien.dm" @@ -1510,6 +1522,7 @@ #include "code\modules\mob\living\carbon\human\species\species.dm" #include "code\modules\mob\living\carbon\human\species\station.dm" #include "code\modules\mob\living\carbon\slime\death.dm" +#include "code\modules\mob\living\carbon\slime\emote.dm" #include "code\modules\mob\living\carbon\slime\examine.dm" #include "code\modules\mob\living\carbon\slime\life.dm" #include "code\modules\mob\living\carbon\slime\powers.dm" @@ -1518,6 +1531,7 @@ #include "code\modules\mob\living\carbon\slime\subtypes.dm" #include "code\modules\mob\living\carbon\slime\update_icons.dm" #include "code\modules\mob\living\silicon\death.dm" +#include "code\modules\mob\living\silicon\emote.dm" #include "code\modules\mob\living\silicon\laws.dm" #include "code\modules\mob\living\silicon\login.dm" #include "code\modules\mob\living\silicon\say.dm" @@ -1540,7 +1554,7 @@ #include "code\modules\mob\living\silicon\decoy\decoy.dm" #include "code\modules\mob\living\silicon\decoy\life.dm" #include "code\modules\mob\living\silicon\pai\death.dm" -#include "code\modules\mob\living\silicon\pai\examine.dm" +#include "code\modules\mob\living\silicon\pai\emote.dm" #include "code\modules\mob\living\silicon\pai\life.dm" #include "code\modules\mob\living\silicon\pai\pai.dm" #include "code\modules\mob\living\silicon\pai\personality.dm" @@ -1550,6 +1564,7 @@ #include "code\modules\mob\living\silicon\pai\software_modules.dm" #include "code\modules\mob\living\silicon\robot\component.dm" #include "code\modules\mob\living\silicon\robot\death.dm" +#include "code\modules\mob\living\silicon\robot\emote.dm" #include "code\modules\mob\living\silicon\robot\examine.dm" #include "code\modules\mob\living\silicon\robot\inventory.dm" #include "code\modules\mob\living\silicon\robot\laws.dm" @@ -1582,6 +1597,7 @@ #include "code\modules\mob\living\simple_animal\bot\cleanbot.dm" #include "code\modules\mob\living\simple_animal\bot\construction.dm" #include "code\modules\mob\living\simple_animal\bot\ed209bot.dm" +#include "code\modules\mob\living\simple_animal\bot\emote.dm" #include "code\modules\mob\living\simple_animal\bot\floorbot.dm" #include "code\modules\mob\living\simple_animal\bot\medbot.dm" #include "code\modules\mob\living\simple_animal\bot\mulebot.dm" diff --git a/sound/spookoween/scary_horn2.ogg b/sound/spookoween/scary_horn2.ogg new file mode 100644 index 00000000000..fb2805bd2cd Binary files /dev/null and b/sound/spookoween/scary_horn2.ogg differ